summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-05-07 12:15:42 -0300
committerSebastian <sebasjm@gmail.com>2024-05-07 12:15:42 -0300
commit59cb349b13b6a780be2977e9691cb164ebb23fd8 (patch)
tree50e078632406ea3239dc3198271edd8b6c82614f
parent68b2ef735377373da29fd20aeb9facaf91c03832 (diff)
downloadwallet-core-59cb349b13b6a780be2977e9691cb164ebb23fd8.tar.gz
wallet-core-59cb349b13b6a780be2977e9691cb164ebb23fd8.tar.bz2
wallet-core-59cb349b13b6a780be2977e9691cb164ebb23fd8.zip
built from 6fd830ad57fe12ce6acac453f523dcf00f71a5bb
-rw-r--r--aml-backoffice/bof2
-rw-r--r--aml-backoffice/index.css29
-rw-r--r--aml-backoffice/index.css.map4
-rw-r--r--aml-backoffice/index.html3
-rw-r--r--aml-backoffice/index.js7573
-rw-r--r--aml-backoffice/index.js.map8
-rw-r--r--anastasis/index.js655
-rw-r--r--anastasis/index.js.map6
-rw-r--r--backoffice/index.html2
-rw-r--r--backoffice/index.js1860
-rw-r--r--backoffice/index.js.map8
-rw-r--r--bank/index.css3
-rw-r--r--bank/index.css.map4
-rw-r--r--bank/index.js910
-rw-r--r--bank/index.js.map8
-rw-r--r--challenger/bof2
-rw-r--r--challenger/main.css37
17 files changed, 6287 insertions, 4827 deletions
diff --git a/aml-backoffice/bof b/aml-backoffice/bof
index 5680eeba4..0ed549b5f 100644
--- a/aml-backoffice/bof
+++ b/aml-backoffice/bof
@@ -1,5 +1,3 @@
-forms.js
-forms.js.map
index.css
index.css.map
index.html
diff --git a/aml-backoffice/index.css b/aml-backoffice/index.css
index 63f0cb92c..38deab4d9 100644
--- a/aml-backoffice/index.css
+++ b/aml-backoffice/index.css
@@ -780,6 +780,9 @@ select {
.inline-block {
display: inline-block;
}
+.inline {
+ display: inline;
+}
.flex {
display: flex;
}
@@ -1134,6 +1137,11 @@ select {
margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}
+.space-y-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
+}
.divide-y > :not([hidden]) ~ :not([hidden]) {
--tw-divide-y-reverse: 0;
border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
@@ -1264,9 +1272,6 @@ select {
.border-b {
border-bottom-width: 1px;
}
-.border-l-0 {
- border-left-width: 0px;
-}
.border-r-0 {
border-right-width: 0px;
}
@@ -1477,9 +1482,6 @@ select {
.pb-32 {
padding-bottom: 8rem;
}
-.pb-4 {
- padding-bottom: 1rem;
-}
.pb-6 {
padding-bottom: 1.5rem;
}
@@ -1504,9 +1506,6 @@ select {
.pr-2 {
padding-right: 0.5rem;
}
-.pr-3 {
- padding-right: 0.75rem;
-}
.pr-4 {
padding-right: 1rem;
}
@@ -1525,9 +1524,6 @@ select {
.pt-3 {
padding-top: 0.75rem;
}
-.pt-4 {
- padding-top: 1rem;
-}
.pt-5 {
padding-top: 1.25rem;
}
@@ -2058,6 +2054,9 @@ select {
.focus-visible\:outline-indigo-600:focus-visible {
outline-color: #4f46e5;
}
+.disabled\:cursor-default:disabled {
+ cursor: default;
+}
.disabled\:cursor-not-allowed:disabled {
cursor: not-allowed;
}
@@ -2073,6 +2072,9 @@ select {
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity));
}
+.disabled\:opacity-50:disabled {
+ opacity: 0.5;
+}
.disabled\:ring-gray-200:disabled {
--tw-ring-opacity: 1;
--tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));
@@ -2296,6 +2298,9 @@ select {
.sm\:max-w-md {
max-width: 28rem;
}
+ .sm\:max-w-sm {
+ max-width: 24rem;
+ }
.sm\:flex-auto {
flex: 1 1 auto;
}
diff --git a/aml-backoffice/index.css.map b/aml-backoffice/index.css.map
index e7cd9de04..b17870cc8 100644
--- a/aml-backoffice/index.css.map
+++ b/aml-backoffice/index.css.map
@@ -1,7 +1,7 @@
{
"version": 3,
"sources": ["../../src/scss/main.css"],
- "sourcesContent": ["/*\n! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n border-radius: 0px;\n padding-top: 0.5rem;\n padding-right: 0.75rem;\n padding-bottom: 0.5rem;\n padding-left: 0.75rem;\n font-size: 1rem;\n line-height: 1.5rem;\n --tw-shadow: 0 0 #0000;\n}\n\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n border-color: #2563eb;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n color: #6b7280;\n opacity: 1;\n}\n\ninput::placeholder,textarea::placeholder {\n color: #6b7280;\n opacity: 1;\n}\n\n::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n}\n\n::-webkit-date-and-time-value {\n min-height: 1.5em;\n}\n\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\n padding-top: 0;\n padding-bottom: 0;\n}\n\nselect {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n}\n\n[multiple] {\n background-image: initial;\n background-position: initial;\n background-repeat: unset;\n background-size: initial;\n padding-right: 0.75rem;\n -webkit-print-color-adjust: unset;\n print-color-adjust: unset;\n}\n\n[type='checkbox'],[type='radio'] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 0;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n display: inline-block;\n vertical-align: middle;\n background-origin: border-box;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n flex-shrink: 0;\n height: 1rem;\n width: 1rem;\n color: #2563eb;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n --tw-shadow: 0 0 #0000;\n}\n\n[type='checkbox'] {\n border-radius: 0px;\n}\n\n[type='radio'] {\n border-radius: 100%;\n}\n\n[type='checkbox']:focus,[type='radio']:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n}\n\n[type='checkbox']:checked,[type='radio']:checked {\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n[type='checkbox']:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n}\n\n[type='radio']:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\n border-color: transparent;\n background-color: currentColor;\n}\n\n[type='checkbox']:indeterminate {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\");\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\n border-color: transparent;\n background-color: currentColor;\n}\n\n[type='file'] {\n background: unset;\n border-color: inherit;\n border-width: 0;\n border-radius: 0;\n padding: 0;\n font-size: unset;\n line-height: inherit;\n}\n\n[type='file']:focus {\n outline: 1px solid ButtonText;\n outline: 1px auto -webkit-focus-ring-color;\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.\\!container {\n width: 100% !important;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .\\!container {\n max-width: 640px !important;\n }\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .\\!container {\n max-width: 768px !important;\n }\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .\\!container {\n max-width: 1024px !important;\n }\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .\\!container {\n max-width: 1280px !important;\n }\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .\\!container {\n max-width: 1536px !important;\n }\n\n .container {\n max-width: 1536px;\n }\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.pointer-events-auto {\n pointer-events: auto;\n}\n.visible {\n visibility: visible;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.-inset-0 {\n inset: -0px;\n}\n.-inset-0\\.5 {\n inset: -0.125rem;\n}\n.-inset-1 {\n inset: -0.25rem;\n}\n.-inset-2 {\n inset: -0.5rem;\n}\n.-inset-2\\.5 {\n inset: -0.625rem;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-\\[15px\\] {\n left: -15px;\n}\n.-top-\\[21px\\] {\n top: -21px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-1\\/2 {\n bottom: 50%;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-4 {\n left: 1rem;\n}\n.left-\\[calc\\(50\\%-1px\\)\\] {\n left: calc(50% - 1px);\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-4 {\n top: 1rem;\n}\n.isolate {\n isolation: isolate;\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.col-span-full {\n grid-column: 1 / -1;\n}\n.m-0 {\n margin: 0px;\n}\n.m-1 {\n margin: 0.25rem;\n}\n.m-1\\.5 {\n margin: 0.375rem;\n}\n.m-4 {\n margin: 1rem;\n}\n.-mx-2 {\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.mx-8 {\n margin-left: 2rem;\n margin-right: 2rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-0 {\n margin-top: 0px;\n margin-bottom: 0px;\n}\n.my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.-ml-10 {\n margin-left: -2.5rem;\n}\n.-ml-px {\n margin-left: -1px;\n}\n.-mt-1 {\n margin-top: -0.25rem;\n}\n.-mt-2 {\n margin-top: -0.5rem;\n}\n.-mt-32 {\n margin-top: -8rem;\n}\n.-mt-5 {\n margin-top: -1.25rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-6 {\n margin-left: 1.5rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-0 {\n margin-top: 0px;\n}\n.mt-0\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-10 {\n margin-top: 2.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.mt-auto {\n margin-top: auto;\n}\n.box-content {\n box-sizing: content-box;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.flow-root {\n display: flow-root;\n}\n.grid {\n display: grid;\n}\n.contents {\n display: contents;\n}\n.\\!hidden {\n display: none !important;\n}\n.hidden {\n display: none;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2\\/5 {\n height: 40%;\n}\n.h-24 {\n height: 6rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-\\[260px\\] {\n height: 260px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[4px\\] {\n height: 4px;\n}\n.h-\\[56px\\] {\n height: 56px;\n}\n.h-\\[6px\\] {\n height: 6px;\n}\n.h-full {\n height: 100%;\n}\n.max-h-60 {\n max-height: 15rem;\n}\n.min-h-\\[305px\\] {\n min-height: 305px;\n}\n.min-h-full {\n min-height: 100%;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-11 {\n width: 2.75rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-4\\/5 {\n width: 80%;\n}\n.w-40 {\n width: 10rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-80 {\n width: 20rem;\n}\n.w-\\[260px\\] {\n width: 260px;\n}\n.w-\\[2px\\] {\n width: 2px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[4px\\] {\n width: 4px;\n}\n.w-\\[6px\\] {\n width: 6px;\n}\n.w-auto {\n width: auto;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[310px\\] {\n min-width: 310px;\n}\n.min-w-full {\n min-width: 100%;\n}\n.min-w-min {\n min-width: -moz-min-content;\n min-width: min-content;\n}\n.max-w-2xl {\n max-width: 42rem;\n}\n.max-w-\\[325px\\] {\n max-width: 325px;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-none {\n flex: none;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.grow {\n flex-grow: 1;\n}\n.origin-\\[center_bottom_0\\] {\n transform-origin: center bottom 0;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.animate-\\[show-up-clock_350ms_linear\\] {\n animation: show-up-clock 350ms linear;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.items-stretch {\n align-items: stretch;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.justify-around {\n justify-content: space-around;\n}\n.justify-evenly {\n justify-content: space-evenly;\n}\n.gap-px {\n gap: 1px;\n}\n.gap-x-0 {\n -moz-column-gap: 0px;\n column-gap: 0px;\n}\n.gap-x-0\\.5 {\n -moz-column-gap: 0.125rem;\n column-gap: 0.125rem;\n}\n.gap-x-1 {\n -moz-column-gap: 0.25rem;\n column-gap: 0.25rem;\n}\n.gap-x-1\\.5 {\n -moz-column-gap: 0.375rem;\n column-gap: 0.375rem;\n}\n.gap-x-3 {\n -moz-column-gap: 0.75rem;\n column-gap: 0.75rem;\n}\n.gap-x-6 {\n -moz-column-gap: 1.5rem;\n column-gap: 1.5rem;\n}\n.gap-x-8 {\n -moz-column-gap: 2rem;\n column-gap: 2rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-7 {\n row-gap: 1.75rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.-space-y-px > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(-1px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(-1px * var(--tw-space-y-reverse));\n}\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-10 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n.divide-cyan-800 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(21 94 117 / var(--tw-divide-opacity));\n}\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n.divide-gray-900\\/10 > :not([hidden]) ~ :not([hidden]) {\n border-color: rgb(17 24 39 / 0.1);\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-x-clip {\n overflow-x: clip;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-break-spaces {\n white-space: break-spaces;\n}\n.break-all {\n word-break: break-all;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[100\\%\\] {\n border-radius: 100%;\n}\n.rounded-\\[50\\%\\] {\n border-radius: 50%;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-none {\n border-radius: 0px;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.rounded-b-lg {\n border-bottom-right-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n.rounded-l-md {\n border-top-left-radius: 0.375rem;\n border-bottom-left-radius: 0.375rem;\n}\n.rounded-r-lg {\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n}\n.rounded-r-md {\n border-top-right-radius: 0.375rem;\n border-bottom-right-radius: 0.375rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.rounded-t-sm {\n border-top-left-radius: 0.125rem;\n border-top-right-radius: 0.125rem;\n}\n.rounded-bl-md {\n border-bottom-left-radius: 0.375rem;\n}\n.rounded-br-md {\n border-bottom-right-radius: 0.375rem;\n}\n.rounded-tl-md {\n border-top-left-radius: 0.375rem;\n}\n.rounded-tr-md {\n border-top-right-radius: 0.375rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[14px\\] {\n border-width: 14px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-l-0 {\n border-left-width: 0px;\n}\n.border-r-0 {\n border-right-width: 0px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-solid {\n border-style: solid;\n}\n.border-dashed {\n border-style: dashed;\n}\n.border-none {\n border-style: none;\n}\n.border-\\[\\#3b71ca\\] {\n --tw-border-opacity: 1;\n border-color: rgb(59 113 202 / var(--tw-border-opacity));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity));\n}\n.border-gray-900\\/25 {\n border-color: rgb(17 24 39 / 0.25);\n}\n.border-indigo-200 {\n --tw-border-opacity: 1;\n border-color: rgb(199 210 254 / var(--tw-border-opacity));\n}\n.border-indigo-400 {\n --tw-border-opacity: 1;\n border-color: rgb(129 140 248 / var(--tw-border-opacity));\n}\n.border-indigo-600 {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-white\\/5 {\n border-color: rgb(255 255 255 / 0.05);\n}\n.border-opacity-25 {\n --tw-border-opacity: 0.25;\n}\n.bg-\\[\\#00000012\\] {\n background-color: #00000012;\n}\n.bg-\\[\\#3b71ca\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(59 113 202 / var(--tw-bg-opacity));\n}\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity));\n}\n.bg-indigo-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity));\n}\n.bg-indigo-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n.bg-indigo-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity));\n}\n.bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity));\n}\n.bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n.bg-slate-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n.bg-opacity-75 {\n --tw-bg-opacity: 0.75;\n}\n.stroke-gray-700\\/50 {\n stroke: rgb(55 65 81 / 0.5);\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-1\\.5 {\n padding: 0.375rem;\n}\n.p-12 {\n padding: 3rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-\\[12px\\] {\n padding-left: 12px;\n padding-right: 12px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-3\\.5 {\n padding-top: 0.875rem;\n padding-bottom: 0.875rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.pb-32 {\n padding-bottom: 8rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pb-6 {\n padding-bottom: 1.5rem;\n}\n.pl-1 {\n padding-left: 0.25rem;\n}\n.pl-10 {\n padding-left: 2.5rem;\n}\n.pl-2 {\n padding-left: 0.5rem;\n}\n.pl-3 {\n padding-left: 0.75rem;\n}\n.pr-10 {\n padding-right: 2.5rem;\n}\n.pr-12 {\n padding-right: 3rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pr-9 {\n padding-right: 2.25rem;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-1\\.5 {\n padding-top: 0.375rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-5 {\n padding-top: 1.25rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-middle {\n vertical-align: middle;\n}\n.font-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n}\n.text-\\[1\\.1rem\\] {\n font-size: 1.1rem;\n}\n.text-\\[18px\\] {\n font-size: 18px;\n}\n.text-\\[3\\.75rem\\] {\n font-size: 3.75rem;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.lowercase {\n text-transform: lowercase;\n}\n.leading-5 {\n line-height: 1.25rem;\n}\n.leading-6 {\n line-height: 1.5rem;\n}\n.leading-7 {\n line-height: 1.75rem;\n}\n.leading-8 {\n line-height: 2rem;\n}\n.leading-9 {\n line-height: 2.25rem;\n}\n.leading-\\[1\\.2\\] {\n line-height: 1.2;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.text-\\[\\#ffffff8a\\] {\n color: #ffffff8a;\n}\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity));\n}\n.text-indigo-200 {\n --tw-text-opacity: 1;\n color: rgb(199 210 254 / var(--tw-text-opacity));\n}\n.text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.text-red-900 {\n --tw-text-opacity: 1;\n color: rgb(127 29 29 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity));\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-\\[\\.54\\] {\n opacity: .54;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-1 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-inset {\n --tw-ring-inset: inset;\n}\n.ring-black {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n.ring-gray-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));\n}\n.ring-gray-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n.ring-gray-900\\/5 {\n --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n.ring-green-600\\/20 {\n --tw-ring-color: rgb(22 163 74 / 0.2);\n}\n.ring-indigo-600 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.ring-red-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(252 165 165 / var(--tw-ring-opacity));\n}\n.ring-opacity-5 {\n --tw-ring-opacity: 0.05;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.selection\\:bg-transparent *::-moz-selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent *::selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent::-moz-selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent::selection {\n background-color: transparent;\n}\n.placeholder\\:text-gray-400::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.placeholder\\:text-gray-400::placeholder {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.placeholder\\:text-red-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity));\n}\n.placeholder\\:text-red-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity));\n}\n.focus-within\\:z-10:focus-within {\n z-index: 10;\n}\n.focus-within\\:outline-none:focus-within {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-within\\:ring-2:focus-within {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-within\\:ring-indigo-600:focus-within {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.focus-within\\:ring-offset-2:focus-within {\n --tw-ring-offset-width: 2px;\n}\n.hover\\:bg-\\[\\#00000026\\]:hover {\n background-color: #00000026;\n}\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-500\\/20:hover {\n background-color: rgb(107 114 128 / 0.2);\n}\n.hover\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity));\n}\n.hover\\:bg-red-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.hover\\:bg-opacity-75:hover {\n --tw-bg-opacity: 0.75;\n}\n.hover\\:text-gray-400:hover {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.hover\\:text-gray-500:hover {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-500:hover {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-600:hover {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-900:hover {\n --tw-text-opacity: 1;\n color: rgb(49 46 129 / var(--tw-text-opacity));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:opacity-70:hover {\n opacity: 0.7;\n}\n.hover\\:outline-none:hover {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.hover\\:ring-indigo-500:hover {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n.focus\\:z-10:focus {\n z-index: 10;\n}\n.focus\\:bg-\\[\\#00000026\\]:focus {\n background-color: #00000026;\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-inset:focus {\n --tw-ring-inset: inset;\n}\n.focus\\:ring-indigo-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n.focus\\:ring-indigo-600:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.focus\\:ring-red-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity));\n}\n.focus\\:ring-white:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus\\:ring-offset-indigo-600:focus {\n --tw-ring-offset-color: #4f46e5;\n}\n.focus-visible\\:outline:focus-visible {\n outline-style: solid;\n}\n.focus-visible\\:outline-2:focus-visible {\n outline-width: 2px;\n}\n.focus-visible\\:outline-offset-0:focus-visible {\n outline-offset: 0px;\n}\n.focus-visible\\:outline-offset-2:focus-visible {\n outline-offset: 2px;\n}\n.focus-visible\\:outline-indigo-600:focus-visible {\n outline-color: #4f46e5;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:bg-gray-100:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.disabled\\:bg-gray-50:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.disabled\\:text-gray-500:disabled {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.disabled\\:ring-gray-200:disabled {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));\n}\n.group:hover .group-hover\\:flex {\n display: flex;\n}\n.group:hover .group-hover\\:border-indigo-600 {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.group:hover .group-hover\\:stroke-gray-700\\/75 {\n stroke: rgb(55 65 81 / 0.75);\n}\n.group:hover .group-hover\\:text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.group:hover .group-hover\\:text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity));\n}\n.group.attention-low .group-\\[\\.attention-low\\]\\:bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.group.attention-low .group-\\[\\.attention-low\\]\\:bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:bg-yellow-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(202 138 4 / var(--tw-bg-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-800 {\n --tw-text-opacity: 1;\n color: rgb(153 27 27 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity));\n}\n.data-\\[enabled\\=false\\]\\:translate-x-0[data-enabled=false] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[ok\\=true\\]\\:cursor-pointer[data-ok=true] {\n cursor: pointer;\n}\n.data-\\[timed\\=true\\]\\:rounded-b-none[data-timed=true] {\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.data-\\[enabled\\=false\\]\\:bg-gray-200[data-enabled=false] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[month\\=false\\]\\:bg-gray-100[data-month=false] {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.data-\\[month\\=true\\]\\:bg-white[data-month=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:\\!bg-blue-400[data-selected=true] {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(96 165 250 / var(--tw-bg-opacity)) !important;\n}\n.data-\\[selected\\=true\\]\\:bg-\\[\\#3b71ca\\][data-selected=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(59 113 202 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:bg-indigo-700[data-selected=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity));\n}\n.data-\\[today\\=true\\]\\:bg-red-300[data-today=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(252 165 165 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:font-normal[data-selected=true] {\n font-weight: 400;\n}\n.data-\\[today\\=true\\]\\:font-semibold[data-today=true] {\n font-weight: 600;\n}\n.data-\\[month\\=true\\]\\:text-gray-900[data-month=true] {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.data-\\[selected\\=true\\]\\:text-white[data-selected=true] {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.data-\\[month\\=true\\]\\:hover\\:bg-gray-200:hover[data-month=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:hover\\:\\!bg-blue-300:hover[data-selected=true] {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(147 197 253 / var(--tw-bg-opacity)) !important;\n}\n.data-\\[today\\=true\\]\\:hover\\:bg-red-200:hover[data-today=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity));\n}\n:is([dir=\"rtl\"] .rtl\\:\\!left-auto) {\n left: auto !important;\n}\n:is([dir=\"rtl\"] .rtl\\:\\!origin-\\[50\\%_50\\%_0\\]) {\n transform-origin: 50% 50% 0 !important;\n}\n@media (prefers-color-scheme: dark) {\n\n .dark\\:bg-zinc-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(113 113 122 / var(--tw-bg-opacity));\n }\n\n .dark\\:bg-zinc-600\\/50 {\n background-color: rgb(82 82 91 / 0.5);\n }\n\n .dark\\:bg-zinc-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(63 63 70 / var(--tw-bg-opacity));\n }\n}\n@media (min-width: 640px) {\n\n .sm\\:col-span-6 {\n grid-column: span 6 / span 6;\n }\n\n .sm\\:mx-auto {\n margin-left: auto;\n margin-right: auto;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:inline {\n display: inline;\n }\n\n .sm\\:flex {\n display: flex;\n }\n\n .sm\\:hidden {\n display: none;\n }\n\n .sm\\:w-full {\n width: 100%;\n }\n\n .sm\\:max-w-\\[480px\\] {\n max-width: 480px;\n }\n\n .sm\\:max-w-md {\n max-width: 28rem;\n }\n\n .sm\\:flex-auto {\n flex: 1 1 auto;\n }\n\n .sm\\:grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n }\n\n .sm\\:items-center {\n align-items: center;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:justify-between {\n justify-content: space-between;\n }\n\n .sm\\:rounded-lg {\n border-radius: 0.5rem;\n }\n\n .sm\\:px-0 {\n padding-left: 0px;\n padding-right: 0px;\n }\n\n .sm\\:px-12 {\n padding-left: 3rem;\n padding-right: 3rem;\n }\n\n .sm\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .sm\\:py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n }\n\n .sm\\:text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .sm\\:leading-6 {\n line-height: 1.5rem;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n\n .md\\:inline {\n display: inline;\n }\n\n .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n}\n@media (min-width: 1024px) {\n\n .lg\\:max-w-lg {\n max-width: 32rem;\n }\n\n .lg\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n}\n"],
- "mappings": "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AACA,CAAC;AACC,YAAU;AACZ;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,OAAK;AACL,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM,KAAK,IAAI,EAAE;AACnB;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,eAAa,EAAE,EAAE;AACnB;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACP,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,QAAM,EAAE,EAAE;AACZ;AACA,CAAC;AACC,QAAM,EAAE,EAAE;AACZ;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,oBAAkB,OAAO,OAAO;AAClC;AACA,CAAC;AACC,oBAAkB;AAClB,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;AACA,CAAC;AACC,oBAAkB;AAC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AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC;AAAA,IAAa,YAAY;AAAA,IAAE,cAAc;AAAA,IAAE,KAAK;AAAA,IAAE,MAAM;AAAA,IAAE,QAAQ;AAAA,IAAE,iBAAiB;AAAA,IAAE,aAAa;AAAA,IAAE;AACxG;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI;AACzB;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI;AAC5B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI;AAC5B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI;AAC5B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI;AAC7B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AAC7B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AAC7B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AAC7B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AAC7B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AAC7B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,GAAG,EAAE,EAAE,IAAI;AAC5B;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,eAAa,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,EAAE,EAAE;AACtE,uBAAqB,EAAE,IAAI,IAAI,EAAE,IAAI,kBAAkB,EAAE,EAAE,IAAI,IAAI,KAAK,IAAI;AAC5E;AAAA,IAAY,IAAI,uBAAuB,EAAE,EAAE,EAAE,MAAM;AAAA,IAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,MAAM;AAAA,IAAE,IAAI;AAC7F;AACA,CAAC;AACC,eAAa,EAAE,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,EAAE,EAAE;AAC3E,uBAAqB,EAAE,KAAK,KAAK,KAAK,IAAI,kBAAkB,EAAE,EAAE,IAAI,IAAI,KAAK,IAAI;AACjF;AAAA,IAAY,IAAI,uBAAuB,EAAE,EAAE,EAAE,MAAM;AAAA,IAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,MAAM;AAAA,IAAE,IAAI;AAC7F;AACA,CAAC;AACC,eAAa,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACrC,uBAAqB,EAAE,IAAI,IAAI,EAAE,IAAI;AACrC;AAAA,IAAY,IAAI,uBAAuB,EAAE,EAAE,EAAE,MAAM;AAAA,IAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,MAAM;AAAA,IAAE,IAAI;AAC7F;AACA,CAAC;AACC,eAAa,EAAE,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE,EAAE,EAAE,EAAE;AAC5E,uBAAqB,EAAE,KAAK,KAAK,KAAK,IAAI,kBAAkB,EAAE,EAAE,IAAI,KAAK,KAAK,IAAI;AAClF;AAAA,IAAY,IAAI,uBAAuB,EAAE,EAAE,EAAE,MAAM;AAAA,IAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,MAAM;AAAA,IAAE,IAAI;AAC7F;AACA,CAAC;AACC,2BAAyB,IAAI,iBAAiB,EAAE,EAAE,EAAE,IAAI,wBAAwB,IAAI;AACpF,oBAAkB,IAAI,iBAAiB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,IAAI,yBAAyB,IAAI;AACzF;AAAA,IAAY,IAAI,wBAAwB;AAAA,IAAE,IAAI,iBAAiB;AAAA,IAAE,IAAI,WAAW,EAAE,EAAE,EAAE;AACxF;AACA,CAAC;AACC,2BAAyB,IAAI,iBAAiB,EAAE,EAAE,EAAE,IAAI,wBAAwB,IAAI;AACpF,oBAAkB,IAAI,iBAAiB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,IAAI,yBAAyB,IAAI;AACzF;AAAA,IAAY,IAAI,wBAAwB;AAAA,IAAE,IAAI,iBAAiB;AAAA,IAAE,IAAI,WAAW,EAAE,EAAE,EAAE;AACxF;AACA,CAAC;AACC,2BAAyB,IAAI,iBAAiB,EAAE,EAAE,EAAE,IAAI,wBAAwB,IAAI;AACpF,oBAAkB,IAAI,iBAAiB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,IAAI,yBAAyB,IAAI;AACzF;AAAA,IAAY,IAAI,wBAAwB;AAAA,IAAE,IAAI,iBAAiB;AAAA,IAAE,IAAI,WAAW,EAAE,EAAE,EAAE;AACxF;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,qBAAmB;AACnB,mBAAiB,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI;AACnC;AACA,CAAC;AACC,qBAAmB;AACnB,mBAAiB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC;AACC,qBAAmB;AACnB,mBAAiB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC;AACC,mBAAiB,IAAI,GAAG,GAAG,GAAG,EAAE;AAClC;AACA,CAAC;AACC,mBAAiB,IAAI,GAAG,IAAI,GAAG,EAAE;AACnC;AACA,CAAC;AACC,qBAAmB;AACnB,mBAAiB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACvC;AACA,CAAC;AACC,qBAAmB;AACnB,mBAAiB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC;AACC,qBAAmB;AACrB;AACA,CAAC;AACC,UAAQ,IAAI,WAAW,IAAI,iBAAiB,IAAI,eAAe,IAAI,gBAAgB,IAAI,iBAAiB,IAAI,aAAa,IAAI,eAAe,IAAI,YAAY,IAAI;AAClK;AACA,CAAC;AACC;AAAA,IAAqB,KAAK;AAAA,IAAE,gBAAgB;AAAA,IAAE,YAAY;AAAA,IAAE,qBAAqB;AAAA,IAAE,IAAI;AAAA,IAAE,MAAM;AAAA,IAAE,OAAO;AAAA,IAAE,UAAU;AAAA,IAAE,SAAS;AAAA,IAAE,MAAM;AAAA,IAAE;AACzI;AAAA,IAAqB,KAAK;AAAA,IAAE,gBAAgB;AAAA,IAAE,YAAY;AAAA,IAAE,qBAAqB;AAAA,IAAE,IAAI;AAAA,IAAE,MAAM;AAAA,IAAE,OAAO;AAAA,IAAE,UAAU;AAAA,IAAE,SAAS;AAAA,IAAE,MAAM;AAAA,IAAE;AACzI;AAAA,IAAqB,KAAK;AAAA,IAAE,gBAAgB;AAAA,IAAE,YAAY;AAAA,IAAE,qBAAqB;AAAA,IAAE,IAAI;AAAA,IAAE,MAAM;AAAA,IAAE,OAAO;AAAA,IAAE,UAAU;AAAA,IAAE,SAAS;AAAA,IAAE,MAAM;AAAA,IAAE,eAAe;AAAA,IAAE;AAC1J,8BAA4B,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACtD,uBAAqB;AACvB;AACA,CAAC;AACC,uBAAqB;AACrB,8BAA4B,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACtD,uBAAqB;AACvB;AACA,CAAC;AACC;AAAA,IAAqB,KAAK;AAAA,IAAE,gBAAgB;AAAA,IAAE,YAAY;AAAA,IAAE,qBAAqB;AAAA,IAAE,IAAI;AAAA,IAAE;AACzF,8BAA4B,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACtD,uBAAqB;AACvB;AACA,CAAC;AACC,uBAAqB;AACrB,8BAA4B,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACtD,uBAAqB;AACvB;AACA,CAAC;AACC,uBAAqB;AACvB;AACA,CAAC;AACC,uBAAqB;AACvB;AACA,CAAC;AACC,8BAA4B,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACxD;AACA,CAAC,0BAA0B,CAAC;AAC1B,oBAAkB;AACpB;AACA,CAHC,0BAG0B,CAAC;AAC1B,oBAAkB;AACpB;AACA,CANC,yBAMyB;AACxB,oBAAkB;AACpB;AACA,CATC,yBASyB;AACxB,oBAAkB;AACpB;AACA,CAAC,0BAA0B;AACzB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAJC,0BAI0B;AACzB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC,yBAAyB;AACxB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAJC,yBAIyB;AACxB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC,kBAAkB;AACjB,WAAS;AACX;AACA,CAAC,0BAA0B;AACzB,WAAS,IAAI,MAAM;AACnB,kBAAgB;AAClB;AACA,CAAC,oBAAoB;AACnB,2BAAyB,IAAI,iBAAiB,EAAE,EAAE,EAAE,IAAI,wBAAwB,IAAI;AACpF,oBAAkB,IAAI,iBAAiB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,IAAI,yBAAyB,IAAI;AACzF;AAAA,IAAY,IAAI,wBAAwB;AAAA,IAAE,IAAI,iBAAiB;AAAA,IAAE,IAAI,WAAW,EAAE,EAAE,EAAE;AACxF;AACA,CAAC,6BAA6B;AAC5B,qBAAmB;AACnB,mBAAiB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACvC;AACA,CAAC,2BAA2B;AAC1B,0BAAwB;AAC1B;AACA,CAAC,wBAAwB;AACvB,oBAAkB;AACpB;AACA,CAAC,kBAAkB;AACjB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,kBAAkB;AACjB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,iBAAiB;AAChB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,sBAAsB;AACrB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE;AACtC;AACA,CAAC,kBAAkB;AACjB,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI;AACvC;AACA,CAAC,oBAAoB;AACnB,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC,oBAAoB;AACnB,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACxC;AACA,CAAC,oBAAoB;AACnB,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACxC;AACA,CAAC,iBAAiB;AAChB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AACxC;AACA,CAAC,oBAAoB;AACnB,mBAAiB;AACnB;AACA,CAAC,oBAAoB;AACnB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC,oBAAoB;AACnB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC,sBAAsB;AACrB,qBAAmB;AACnB,SAAO,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AAC9B;AACA,CAAC,sBAAsB;AACrB,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AAC7B;AACA,CAAC,sBAAsB;AACrB,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AAC7B;AACA,CAAC,iBAAiB;AAChB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC,iBAAiB;AAChB,WAAS;AACX;AACA,CAAC,mBAAmB;AAClB,WAAS,IAAI,MAAM;AACnB,kBAAgB;AAClB;AACA,CAAC,sBAAsB;AACrB,qBAAmB;AACnB,mBAAiB,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AACxC;AACA,CAAC,WAAW;AACV,WAAS;AACX;AACA,CAAC,wBAAwB;AACvB,oBAAkB;AACpB;AACA,CAAC,mBAAmB;AAClB,WAAS,IAAI,MAAM;AACnB,kBAAgB;AAClB;AACA,CAAC,aAAa;AACZ,2BAAyB,IAAI,iBAAiB,EAAE,EAAE,EAAE,IAAI,wBAAwB,IAAI;AACpF,oBAAkB,IAAI,iBAAiB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,IAAI,yBAAyB,IAAI;AACzF;AAAA,IAAY,IAAI,wBAAwB;AAAA,IAAE,IAAI,iBAAiB;AAAA,IAAE,IAAI,WAAW,EAAE,EAAE,EAAE;AACxF;AACA,CAAC,iBAAiB;AAChB,mBAAiB;AACnB;AACA,CAAC,sBAAsB;AACrB,qBAAmB;AACnB,mBAAiB,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AACxC;AACA,CAAC,sBAAsB;AACrB,qBAAmB;AACnB,mBAAiB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACvC;AACA,CAAC,mBAAmB;AAClB,qBAAmB;AACnB,mBAAiB,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AACvC;AACA,CAAC,iBAAiB;AAChB,qBAAmB;AACnB,mBAAiB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC,oBAAoB;AACnB,0BAAwB;AAC1B;AACA,CAAC,6BAA6B;AAC5B,0BAAwB;AAC1B;AACA,CAAC,sBAAsB;AACrB,iBAAe;AACjB;AACA,CAAC,wBAAwB;AACvB,iBAAe;AACjB;AACA,CAAC,+BAA+B;AAC9B,kBAAgB;AAClB;AACA,CAAC,+BAA+B;AAC9B,kBAAgB;AAClB;AACA,CAAC,iCAAiC;AAChC,iBAAe;AACjB;AACA,CAAC,4BAA4B;AAC3B,UAAQ;AACV;AACA,CAAC,qBAAqB;AACpB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,oBAAoB;AACnB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,uBAAuB;AACtB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC,uBAAuB;AACtB,qBAAmB;AACnB,mBAAiB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC,KAAK,OAAO,CAAC;AACZ,WAAS;AACX;AACA,CAHC,KAGK,OAAO,CAAC;AACZ,uBAAqB;AACrB,gBAAc,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACpC;AACA,CAPC,KAOK,OAAO,CAAC;AACZ,UAAQ,IAAI,GAAG,GAAG,GAAG,EAAE;AACzB;AACA,CAVC,KAUK,OAAO,CAAC;AACZ,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AAC7B;AACA,CAdC,KAcK,OAAO,CAAC;AACZ,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAlBC,KAkBK,CAAC,iBAAiB,CAAC;AACvB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAtBC,KAsBK,CAJC,iBAIiB,CAAC;AACvB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AACxC;AACA,CA1BC,KA0BK,CAAC,eAAe,CAAC;AACrB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CA9BC,KA8BK,CAJC,eAIe,CAAC;AACrB,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACxC;AACA,CAlCC,KAkCK,CAAC,cAAc,CAAC;AACpB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAtCC,KAsCK,CAJC,cAIc,CAAC;AACpB,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI;AACvC;AACA,CA1CC,KA0CK,CAAC,kBAAkB,CAAC;AACxB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CA9CC,KA8CK,CAJC,kBAIkB,CAAC;AACxB,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI;AACxC;AACA,CAlDC,KAkDK,CAAC,kBAAkB,CAAC;AACxB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAtDC,KAsDK,CAJC,kBAIkB,CAAC;AACxB,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI;AACxC;AACA,CA1DC,KA0DK,CAxCC,iBAwCiB,CAAC;AACvB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CA9DC,KA8DK,CA5CC,iBA4CiB,CAAC;AACvB,qBAAmB;AACnB,SAAO,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AAC7B;AACA,CAlEC,KAkEK,CAhDC,iBAgDiB,CAAC;AACvB,qBAAmB;AACnB,SAAO,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AAC7B;AACA,CAtEC,KAsEK,CA5CC,eA4Ce,CAAC;AACrB,qBAAmB;AACnB,SAAO,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AAC9B;AACA,CA1EC,KA0EK,CAhDC,eAgDe,CAAC;AACrB,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AAC7B;AACA,CA9EC,KA8EK,CApDC,eAoDe,CAAC;AACrB,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AAC7B;AACA,CAlFC,KAkFK,CAxCC,kBAwCkB,CAAC;AACxB,qBAAmB;AACnB,SAAO,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AAC9B;AACA,CAtFC,KAsFK,CA5CC,kBA4CkB,CAAC;AACxB,qBAAmB;AACnB,SAAO,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI;AAC7B;AACA,CA1FC,KA0FK,CAhDC,kBAgDkB,CAAC;AACxB,qBAAmB;AACnB,SAAO,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI;AAC7B;AACA,CA9FC,KA8FK,CA5CC,kBA4CkB,CAAC;AACxB,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI;AAC9B;AACA,CAlGC,KAkGK,CAhDC,kBAgDkB,CAAC;AACxB,qBAAmB;AACnB,SAAO,IAAI,IAAI,GAAG,EAAE,EAAE,IAAI;AAC5B;AACA,CAtGC,KAsGK,CApDC,kBAoDkB,CAAC;AACxB,qBAAmB;AACnB,SAAO,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AAC7B;AACA,CAAC,sCAAsC,CAAC;AACtC,oBAAkB;AAClB,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;AACA,CAAC,iCAAiC,CAAC;AACjC,UAAQ;AACV;AACA,CAAC,oCAAoC,CAAC;AACpC,8BAA4B;AAC5B,6BAA2B;AAC7B;AACA,CAAC,oCAAoC,CAAC;AACpC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,kCAAkC,CAAC;AAClC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,8BAA8B,CAAC;AAC9B,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,sCAAsC,CAAC;AACtC,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC,wCAAwC,CAAC;AACxC,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC,sCAAsC,CAAC;AACtC,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACxC;AACA,CAAC,gCAAgC,CAAC;AAChC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,oCAAoC,CAAC;AACpC,eAAa;AACf;AACA,CAAC,mCAAmC,CAAC;AACnC,eAAa;AACf;AACA,CAAC,mCAAmC,CAAC;AACnC,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI;AAC5B;AACA,CAAC,mCAAmC,CAAC;AACnC,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC,wCAAwC,MAAM,CAAC;AAC9C,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,6CAA6C,MAAM,CAAC;AACnD,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC,uCAAuC,MAAM,CAAC;AAC7C,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,IAAI,CAAC,SAAW,CAAC;AACf,QAAM;AACR;AACA,IAAI,CAAC,SAAW,CAAC;AACf,oBAAkB,IAAI,IAAI;AAC5B;AACA,OAAO,CAAC,oBAAoB,EAAE;AAE5B,GAAC;AACC,qBAAiB;AACjB,sBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AAEA,GAAC;AACC,sBAAkB,IAAI,GAAG,GAAG,GAAG,EAAE;AACnC;AAEA,GAAC;AACC,qBAAiB;AACjB,sBAAkB,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI;AACvC;AACF;AACA,OAAO,CAAC,SAAS,EAAE;AAEjB,GAAC;AACC,iBAAa,KAAK,EAAE,EAAE,KAAK;AAC7B;AAEA,GAAC;AACC,iBAAa;AACb,kBAAc;AAChB;AAEA,GAAC;AACC,aAAS;AACX;AAEA,GAAC;AACC,aAAS;AACX;AAEA,GAAC;AACC,aAAS;AACX;AAEA,GAAC;AACC,aAAS;AACX;AAEA,GAAC;AACC,WAAO;AACT;AAEA,GAAC;AACC,eAAW;AACb;AAEA,GAAC;AACC,eAAW;AACb;AAEA,GAAC;AACC,UAAM,EAAE,EAAE;AACZ;AAEA,GAAC;AACC,2BAAuB,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;AAC7C;AAEA,GAAC;AACC,iBAAa;AACf;AAEA,GAAC;AACC,qBAAiB;AACnB;AAEA,GAAC;AACC,qBAAiB;AACnB;AAEA,GAAC;AACC,mBAAe;AACjB;AAEA,GAAC;AACC,kBAAc;AACd,mBAAe;AACjB;AAEA,GAAC;AACC,kBAAc;AACd,mBAAe;AACjB;AAEA,GAAC;AACC,kBAAc;AACd,mBAAe;AACjB;AAEA,GAAC;AACC,kBAAc;AACd,mBAAe;AACjB;AAEA,GAAC;AACC,iBAAa;AACb,oBAAgB;AAClB;AAEA,GAAC;AACC,eAAW;AACX,iBAAa;AACf;AAEA,GAAC;AACC,iBAAa;AACf;AACF;AACA,OAAO,CAAC,SAAS,EAAE;AAEjB,GAAC;AACC,iBAAa,KAAK,EAAE,EAAE,KAAK;AAC7B;AAEA,GAAC;AACC,aAAS;AACX;AAEA,GAAC;AACC,2BAAuB,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;AAC7C;AACF;AACA,OAAO,CAAC,SAAS,EAAE;AAEjB,GAAC;AACC,eAAW;AACb;AAEA,GAAC;AACC,kBAAc;AACd,mBAAe;AACjB;AACF;",
+ "sourcesContent": ["/*\n! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n border-radius: 0px;\n padding-top: 0.5rem;\n padding-right: 0.75rem;\n padding-bottom: 0.5rem;\n padding-left: 0.75rem;\n font-size: 1rem;\n line-height: 1.5rem;\n --tw-shadow: 0 0 #0000;\n}\n\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n border-color: #2563eb;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n color: #6b7280;\n opacity: 1;\n}\n\ninput::placeholder,textarea::placeholder {\n color: #6b7280;\n opacity: 1;\n}\n\n::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n}\n\n::-webkit-date-and-time-value {\n min-height: 1.5em;\n}\n\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\n padding-top: 0;\n padding-bottom: 0;\n}\n\nselect {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n}\n\n[multiple] {\n background-image: initial;\n background-position: initial;\n background-repeat: unset;\n background-size: initial;\n padding-right: 0.75rem;\n -webkit-print-color-adjust: unset;\n print-color-adjust: unset;\n}\n\n[type='checkbox'],[type='radio'] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 0;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n display: inline-block;\n vertical-align: middle;\n background-origin: border-box;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n flex-shrink: 0;\n height: 1rem;\n width: 1rem;\n color: #2563eb;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n --tw-shadow: 0 0 #0000;\n}\n\n[type='checkbox'] {\n border-radius: 0px;\n}\n\n[type='radio'] {\n border-radius: 100%;\n}\n\n[type='checkbox']:focus,[type='radio']:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n}\n\n[type='checkbox']:checked,[type='radio']:checked {\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n[type='checkbox']:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n}\n\n[type='radio']:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\n border-color: transparent;\n background-color: currentColor;\n}\n\n[type='checkbox']:indeterminate {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\");\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\n border-color: transparent;\n background-color: currentColor;\n}\n\n[type='file'] {\n background: unset;\n border-color: inherit;\n border-width: 0;\n border-radius: 0;\n padding: 0;\n font-size: unset;\n line-height: inherit;\n}\n\n[type='file']:focus {\n outline: 1px solid ButtonText;\n outline: 1px auto -webkit-focus-ring-color;\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.\\!container {\n width: 100% !important;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .\\!container {\n max-width: 640px !important;\n }\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .\\!container {\n max-width: 768px !important;\n }\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .\\!container {\n max-width: 1024px !important;\n }\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .\\!container {\n max-width: 1280px !important;\n }\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .\\!container {\n max-width: 1536px !important;\n }\n\n .container {\n max-width: 1536px;\n }\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.pointer-events-auto {\n pointer-events: auto;\n}\n.visible {\n visibility: visible;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.-inset-0 {\n inset: -0px;\n}\n.-inset-0\\.5 {\n inset: -0.125rem;\n}\n.-inset-1 {\n inset: -0.25rem;\n}\n.-inset-2 {\n inset: -0.5rem;\n}\n.-inset-2\\.5 {\n inset: -0.625rem;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-\\[15px\\] {\n left: -15px;\n}\n.-top-\\[21px\\] {\n top: -21px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-1\\/2 {\n bottom: 50%;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-4 {\n left: 1rem;\n}\n.left-\\[calc\\(50\\%-1px\\)\\] {\n left: calc(50% - 1px);\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-4 {\n top: 1rem;\n}\n.isolate {\n isolation: isolate;\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.col-span-full {\n grid-column: 1 / -1;\n}\n.m-0 {\n margin: 0px;\n}\n.m-1 {\n margin: 0.25rem;\n}\n.m-1\\.5 {\n margin: 0.375rem;\n}\n.m-4 {\n margin: 1rem;\n}\n.-mx-2 {\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.mx-8 {\n margin-left: 2rem;\n margin-right: 2rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-0 {\n margin-top: 0px;\n margin-bottom: 0px;\n}\n.my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.-ml-10 {\n margin-left: -2.5rem;\n}\n.-ml-px {\n margin-left: -1px;\n}\n.-mt-1 {\n margin-top: -0.25rem;\n}\n.-mt-2 {\n margin-top: -0.5rem;\n}\n.-mt-32 {\n margin-top: -8rem;\n}\n.-mt-5 {\n margin-top: -1.25rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-6 {\n margin-left: 1.5rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-0 {\n margin-top: 0px;\n}\n.mt-0\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-10 {\n margin-top: 2.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.mt-auto {\n margin-top: auto;\n}\n.box-content {\n box-sizing: content-box;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.flow-root {\n display: flow-root;\n}\n.grid {\n display: grid;\n}\n.contents {\n display: contents;\n}\n.\\!hidden {\n display: none !important;\n}\n.hidden {\n display: none;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2\\/5 {\n height: 40%;\n}\n.h-24 {\n height: 6rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-\\[260px\\] {\n height: 260px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[4px\\] {\n height: 4px;\n}\n.h-\\[56px\\] {\n height: 56px;\n}\n.h-\\[6px\\] {\n height: 6px;\n}\n.h-full {\n height: 100%;\n}\n.max-h-60 {\n max-height: 15rem;\n}\n.min-h-\\[305px\\] {\n min-height: 305px;\n}\n.min-h-full {\n min-height: 100%;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-11 {\n width: 2.75rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-4\\/5 {\n width: 80%;\n}\n.w-40 {\n width: 10rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-80 {\n width: 20rem;\n}\n.w-\\[260px\\] {\n width: 260px;\n}\n.w-\\[2px\\] {\n width: 2px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[4px\\] {\n width: 4px;\n}\n.w-\\[6px\\] {\n width: 6px;\n}\n.w-auto {\n width: auto;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[310px\\] {\n min-width: 310px;\n}\n.min-w-full {\n min-width: 100%;\n}\n.min-w-min {\n min-width: -moz-min-content;\n min-width: min-content;\n}\n.max-w-2xl {\n max-width: 42rem;\n}\n.max-w-\\[325px\\] {\n max-width: 325px;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-none {\n flex: none;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.grow {\n flex-grow: 1;\n}\n.origin-\\[center_bottom_0\\] {\n transform-origin: center bottom 0;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.animate-\\[show-up-clock_350ms_linear\\] {\n animation: show-up-clock 350ms linear;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.items-stretch {\n align-items: stretch;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.justify-around {\n justify-content: space-around;\n}\n.justify-evenly {\n justify-content: space-evenly;\n}\n.gap-px {\n gap: 1px;\n}\n.gap-x-0 {\n -moz-column-gap: 0px;\n column-gap: 0px;\n}\n.gap-x-0\\.5 {\n -moz-column-gap: 0.125rem;\n column-gap: 0.125rem;\n}\n.gap-x-1 {\n -moz-column-gap: 0.25rem;\n column-gap: 0.25rem;\n}\n.gap-x-1\\.5 {\n -moz-column-gap: 0.375rem;\n column-gap: 0.375rem;\n}\n.gap-x-3 {\n -moz-column-gap: 0.75rem;\n column-gap: 0.75rem;\n}\n.gap-x-6 {\n -moz-column-gap: 1.5rem;\n column-gap: 1.5rem;\n}\n.gap-x-8 {\n -moz-column-gap: 2rem;\n column-gap: 2rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-7 {\n row-gap: 1.75rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.-space-y-px > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(-1px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(-1px * var(--tw-space-y-reverse));\n}\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-10 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n.divide-cyan-800 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(21 94 117 / var(--tw-divide-opacity));\n}\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n.divide-gray-900\\/10 > :not([hidden]) ~ :not([hidden]) {\n border-color: rgb(17 24 39 / 0.1);\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-x-clip {\n overflow-x: clip;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-break-spaces {\n white-space: break-spaces;\n}\n.break-all {\n word-break: break-all;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[100\\%\\] {\n border-radius: 100%;\n}\n.rounded-\\[50\\%\\] {\n border-radius: 50%;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-none {\n border-radius: 0px;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.rounded-b-lg {\n border-bottom-right-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n.rounded-l-md {\n border-top-left-radius: 0.375rem;\n border-bottom-left-radius: 0.375rem;\n}\n.rounded-r-lg {\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n}\n.rounded-r-md {\n border-top-right-radius: 0.375rem;\n border-bottom-right-radius: 0.375rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.rounded-t-sm {\n border-top-left-radius: 0.125rem;\n border-top-right-radius: 0.125rem;\n}\n.rounded-bl-md {\n border-bottom-left-radius: 0.375rem;\n}\n.rounded-br-md {\n border-bottom-right-radius: 0.375rem;\n}\n.rounded-tl-md {\n border-top-left-radius: 0.375rem;\n}\n.rounded-tr-md {\n border-top-right-radius: 0.375rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[14px\\] {\n border-width: 14px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-r-0 {\n border-right-width: 0px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-solid {\n border-style: solid;\n}\n.border-dashed {\n border-style: dashed;\n}\n.border-none {\n border-style: none;\n}\n.border-\\[\\#3b71ca\\] {\n --tw-border-opacity: 1;\n border-color: rgb(59 113 202 / var(--tw-border-opacity));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity));\n}\n.border-gray-900\\/25 {\n border-color: rgb(17 24 39 / 0.25);\n}\n.border-indigo-200 {\n --tw-border-opacity: 1;\n border-color: rgb(199 210 254 / var(--tw-border-opacity));\n}\n.border-indigo-400 {\n --tw-border-opacity: 1;\n border-color: rgb(129 140 248 / var(--tw-border-opacity));\n}\n.border-indigo-600 {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-white\\/5 {\n border-color: rgb(255 255 255 / 0.05);\n}\n.border-opacity-25 {\n --tw-border-opacity: 0.25;\n}\n.bg-\\[\\#00000012\\] {\n background-color: #00000012;\n}\n.bg-\\[\\#3b71ca\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(59 113 202 / var(--tw-bg-opacity));\n}\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity));\n}\n.bg-indigo-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity));\n}\n.bg-indigo-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n.bg-indigo-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity));\n}\n.bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity));\n}\n.bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n.bg-slate-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n.bg-opacity-75 {\n --tw-bg-opacity: 0.75;\n}\n.stroke-gray-700\\/50 {\n stroke: rgb(55 65 81 / 0.5);\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-1\\.5 {\n padding: 0.375rem;\n}\n.p-12 {\n padding: 3rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-\\[12px\\] {\n padding-left: 12px;\n padding-right: 12px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-3\\.5 {\n padding-top: 0.875rem;\n padding-bottom: 0.875rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.pb-32 {\n padding-bottom: 8rem;\n}\n.pb-6 {\n padding-bottom: 1.5rem;\n}\n.pl-1 {\n padding-left: 0.25rem;\n}\n.pl-10 {\n padding-left: 2.5rem;\n}\n.pl-2 {\n padding-left: 0.5rem;\n}\n.pl-3 {\n padding-left: 0.75rem;\n}\n.pr-10 {\n padding-right: 2.5rem;\n}\n.pr-12 {\n padding-right: 3rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pr-9 {\n padding-right: 2.25rem;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-1\\.5 {\n padding-top: 0.375rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-5 {\n padding-top: 1.25rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-middle {\n vertical-align: middle;\n}\n.font-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n}\n.text-\\[1\\.1rem\\] {\n font-size: 1.1rem;\n}\n.text-\\[18px\\] {\n font-size: 18px;\n}\n.text-\\[3\\.75rem\\] {\n font-size: 3.75rem;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.lowercase {\n text-transform: lowercase;\n}\n.leading-5 {\n line-height: 1.25rem;\n}\n.leading-6 {\n line-height: 1.5rem;\n}\n.leading-7 {\n line-height: 1.75rem;\n}\n.leading-8 {\n line-height: 2rem;\n}\n.leading-9 {\n line-height: 2.25rem;\n}\n.leading-\\[1\\.2\\] {\n line-height: 1.2;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.text-\\[\\#ffffff8a\\] {\n color: #ffffff8a;\n}\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity));\n}\n.text-indigo-200 {\n --tw-text-opacity: 1;\n color: rgb(199 210 254 / var(--tw-text-opacity));\n}\n.text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.text-red-900 {\n --tw-text-opacity: 1;\n color: rgb(127 29 29 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity));\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-\\[\\.54\\] {\n opacity: .54;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-1 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-inset {\n --tw-ring-inset: inset;\n}\n.ring-black {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n.ring-gray-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));\n}\n.ring-gray-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n.ring-gray-900\\/5 {\n --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n.ring-green-600\\/20 {\n --tw-ring-color: rgb(22 163 74 / 0.2);\n}\n.ring-indigo-600 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.ring-red-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(252 165 165 / var(--tw-ring-opacity));\n}\n.ring-opacity-5 {\n --tw-ring-opacity: 0.05;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.selection\\:bg-transparent *::-moz-selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent *::selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent::-moz-selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent::selection {\n background-color: transparent;\n}\n.placeholder\\:text-gray-400::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.placeholder\\:text-gray-400::placeholder {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.placeholder\\:text-red-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity));\n}\n.placeholder\\:text-red-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity));\n}\n.focus-within\\:z-10:focus-within {\n z-index: 10;\n}\n.focus-within\\:outline-none:focus-within {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-within\\:ring-2:focus-within {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-within\\:ring-indigo-600:focus-within {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.focus-within\\:ring-offset-2:focus-within {\n --tw-ring-offset-width: 2px;\n}\n.hover\\:bg-\\[\\#00000026\\]:hover {\n background-color: #00000026;\n}\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-500\\/20:hover {\n background-color: rgb(107 114 128 / 0.2);\n}\n.hover\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity));\n}\n.hover\\:bg-red-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.hover\\:bg-opacity-75:hover {\n --tw-bg-opacity: 0.75;\n}\n.hover\\:text-gray-400:hover {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.hover\\:text-gray-500:hover {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-500:hover {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-600:hover {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-900:hover {\n --tw-text-opacity: 1;\n color: rgb(49 46 129 / var(--tw-text-opacity));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:opacity-70:hover {\n opacity: 0.7;\n}\n.hover\\:outline-none:hover {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.hover\\:ring-indigo-500:hover {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n.focus\\:z-10:focus {\n z-index: 10;\n}\n.focus\\:bg-\\[\\#00000026\\]:focus {\n background-color: #00000026;\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-inset:focus {\n --tw-ring-inset: inset;\n}\n.focus\\:ring-indigo-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n.focus\\:ring-indigo-600:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.focus\\:ring-red-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity));\n}\n.focus\\:ring-white:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus\\:ring-offset-indigo-600:focus {\n --tw-ring-offset-color: #4f46e5;\n}\n.focus-visible\\:outline:focus-visible {\n outline-style: solid;\n}\n.focus-visible\\:outline-2:focus-visible {\n outline-width: 2px;\n}\n.focus-visible\\:outline-offset-0:focus-visible {\n outline-offset: 0px;\n}\n.focus-visible\\:outline-offset-2:focus-visible {\n outline-offset: 2px;\n}\n.focus-visible\\:outline-indigo-600:focus-visible {\n outline-color: #4f46e5;\n}\n.disabled\\:cursor-default:disabled {\n cursor: default;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:bg-gray-100:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.disabled\\:bg-gray-50:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.disabled\\:text-gray-500:disabled {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n.disabled\\:ring-gray-200:disabled {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));\n}\n.group:hover .group-hover\\:flex {\n display: flex;\n}\n.group:hover .group-hover\\:border-indigo-600 {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.group:hover .group-hover\\:stroke-gray-700\\/75 {\n stroke: rgb(55 65 81 / 0.75);\n}\n.group:hover .group-hover\\:text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.group:hover .group-hover\\:text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity));\n}\n.group.attention-low .group-\\[\\.attention-low\\]\\:bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.group.attention-low .group-\\[\\.attention-low\\]\\:bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:bg-yellow-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(202 138 4 / var(--tw-bg-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-800 {\n --tw-text-opacity: 1;\n color: rgb(153 27 27 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity));\n}\n.data-\\[enabled\\=false\\]\\:translate-x-0[data-enabled=false] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[ok\\=true\\]\\:cursor-pointer[data-ok=true] {\n cursor: pointer;\n}\n.data-\\[timed\\=true\\]\\:rounded-b-none[data-timed=true] {\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.data-\\[enabled\\=false\\]\\:bg-gray-200[data-enabled=false] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[month\\=false\\]\\:bg-gray-100[data-month=false] {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.data-\\[month\\=true\\]\\:bg-white[data-month=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:\\!bg-blue-400[data-selected=true] {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(96 165 250 / var(--tw-bg-opacity)) !important;\n}\n.data-\\[selected\\=true\\]\\:bg-\\[\\#3b71ca\\][data-selected=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(59 113 202 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:bg-indigo-700[data-selected=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity));\n}\n.data-\\[today\\=true\\]\\:bg-red-300[data-today=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(252 165 165 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:font-normal[data-selected=true] {\n font-weight: 400;\n}\n.data-\\[today\\=true\\]\\:font-semibold[data-today=true] {\n font-weight: 600;\n}\n.data-\\[month\\=true\\]\\:text-gray-900[data-month=true] {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.data-\\[selected\\=true\\]\\:text-white[data-selected=true] {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.data-\\[month\\=true\\]\\:hover\\:bg-gray-200:hover[data-month=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:hover\\:\\!bg-blue-300:hover[data-selected=true] {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(147 197 253 / var(--tw-bg-opacity)) !important;\n}\n.data-\\[today\\=true\\]\\:hover\\:bg-red-200:hover[data-today=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity));\n}\n:is([dir=\"rtl\"] .rtl\\:\\!left-auto) {\n left: auto !important;\n}\n:is([dir=\"rtl\"] .rtl\\:\\!origin-\\[50\\%_50\\%_0\\]) {\n transform-origin: 50% 50% 0 !important;\n}\n@media (prefers-color-scheme: dark) {\n\n .dark\\:bg-zinc-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(113 113 122 / var(--tw-bg-opacity));\n }\n\n .dark\\:bg-zinc-600\\/50 {\n background-color: rgb(82 82 91 / 0.5);\n }\n\n .dark\\:bg-zinc-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(63 63 70 / var(--tw-bg-opacity));\n }\n}\n@media (min-width: 640px) {\n\n .sm\\:col-span-6 {\n grid-column: span 6 / span 6;\n }\n\n .sm\\:mx-auto {\n margin-left: auto;\n margin-right: auto;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:inline {\n display: inline;\n }\n\n .sm\\:flex {\n display: flex;\n }\n\n .sm\\:hidden {\n display: none;\n }\n\n .sm\\:w-full {\n width: 100%;\n }\n\n .sm\\:max-w-\\[480px\\] {\n max-width: 480px;\n }\n\n .sm\\:max-w-md {\n max-width: 28rem;\n }\n\n .sm\\:max-w-sm {\n max-width: 24rem;\n }\n\n .sm\\:flex-auto {\n flex: 1 1 auto;\n }\n\n .sm\\:grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n }\n\n .sm\\:items-center {\n align-items: center;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:justify-between {\n justify-content: space-between;\n }\n\n .sm\\:rounded-lg {\n border-radius: 0.5rem;\n }\n\n .sm\\:px-0 {\n padding-left: 0px;\n padding-right: 0px;\n }\n\n .sm\\:px-12 {\n padding-left: 3rem;\n padding-right: 3rem;\n }\n\n .sm\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .sm\\:py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n }\n\n .sm\\:text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .sm\\:leading-6 {\n line-height: 1.5rem;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n\n .md\\:inline {\n display: inline;\n }\n\n .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n}\n@media (min-width: 1024px) {\n\n .lg\\:max-w-lg {\n max-width: 32rem;\n }\n\n .lg\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n}\n"],
+ "mappings": "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AACA,CAAC;AACC,YAAU;AACZ;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,OAAK;AACL,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM,KAAK,IAAI,EAAE;AACnB;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,eAAa,EAAE,EAAE;AACnB;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACP,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,QAAM,EAAE,EAAE;AACZ;AACA,CAAC;AACC,QAAM,EAAE,EAAE;AACZ;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,oBAAkB,OAAO,OAAO;AAClC;AACA,CAAC;AACC,oBAAkB;AAClB,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;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AAiB;AACnB;AACA,CAAC;AACC,UAAQ,IAAI,GAAG,GAAG,GAAG,EAAE;AACzB;AACA,CAAC;AACC,iBAAe;AACZ,cAAY;AACjB;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC;AAAA,IAAa,YAAY;AAAA,IAAE,cAAc;AAAA,IAAE,KAAK;AAAA,IAAE,MAAM;AAAA,IAAE,QAAQ;AAAA,IAAE,iBAAiB;AAAA,IAAE,aAAa;AAAA,IAAE;AACxG;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI;AACzB;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC/B;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI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",
"names": []
}
diff --git a/aml-backoffice/index.html b/aml-backoffice/index.html
index c1de73520..0ed2f8178 100644
--- a/aml-backoffice/index.html
+++ b/aml-backoffice/index.html
@@ -1,6 +1,6 @@
<!--
This file is part of GNU Taler
- (C) 2021--2022 Taler Systems S.A.
+ (C) 2021--2022-2024 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -30,7 +30,6 @@
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon" />
<title>Exchange Backoffice</title>
<!-- Entry point for the SPA. -->
- <script type="module" src="forms.js"></script>
<script type="module" src="index.js"></script>
<link rel="stylesheet" href="index.css" />
</head>
diff --git a/aml-backoffice/index.js b/aml-backoffice/index.js
index 838595ff0..b422156db 100644
--- a/aml-backoffice/index.js
+++ b/aml-backoffice/index.js
@@ -96,12 +96,12 @@ var require_BigInteger = __commonJS({
v3.length = i6 + 1;
}
function createArray(length) {
- var x7 = new Array(length);
+ var x6 = new Array(length);
var i6 = -1;
while (++i6 < length) {
- x7[i6] = 0;
+ x6[i6] = 0;
}
- return x7;
+ return x6;
}
function truncate(n2) {
if (n2 > 0)
@@ -310,18 +310,18 @@ var require_BigInteger = __commonJS({
}
return r3;
}
- function shiftLeft(x7, n2) {
+ function shiftLeft(x6, n2) {
var r3 = [];
while (n2-- > 0)
r3.push(0);
- return r3.concat(x7);
+ return r3.concat(x6);
}
- function multiplyKaratsuba(x7, y6) {
- var n2 = Math.max(x7.length, y6.length);
+ function multiplyKaratsuba(x6, y6) {
+ var n2 = Math.max(x6.length, y6.length);
if (n2 <= 30)
- return multiplyLong(x7, y6);
+ return multiplyLong(x6, y6);
n2 = Math.ceil(n2 / 2);
- var b5 = x7.slice(n2), a6 = x7.slice(0, n2), d6 = y6.slice(n2), c5 = y6.slice(0, n2);
+ var b5 = x6.slice(n2), a6 = x6.slice(0, n2), d6 = y6.slice(n2), c5 = y6.slice(0, n2);
var ac = multiplyKaratsuba(a6, c5), bd = multiplyKaratsuba(b5, d6), abcd = multiplyKaratsuba(addAny(a6, b5), addAny(c5, d6));
var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n2)), shiftLeft(bd, 2 * n2));
trim(product);
@@ -577,7 +577,7 @@ var require_BigInteger = __commonJS({
};
SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
BigInteger.prototype.pow = function(v3) {
- var n2 = parseValue(v3), a6 = this.value, b5 = n2.value, value, x7, y6;
+ var n2 = parseValue(v3), a6 = this.value, b5 = n2.value, value, x6, y6;
if (b5 === 0)
return Integer[1];
if (a6 === 0)
@@ -595,17 +595,17 @@ var require_BigInteger = __commonJS({
if (isPrecise(value = Math.pow(a6, b5)))
return new SmallInteger(truncate(value));
}
- x7 = this;
+ x6 = this;
y6 = Integer[1];
while (true) {
if (b5 & true) {
- y6 = y6.times(x7);
+ y6 = y6.times(x6);
--b5;
}
if (b5 === 0)
break;
b5 /= 2;
- x7 = x7.square();
+ x6 = x6.square();
}
return y6;
};
@@ -624,17 +624,17 @@ var require_BigInteger = __commonJS({
return n2.isEven() ? Integer[1] : Integer[-1];
if (n2.isNegative())
return new NativeBigInt(_0);
- var x7 = this;
+ var x6 = this;
var y6 = Integer[1];
while (true) {
if ((b5 & _1) === _1) {
- y6 = y6.times(x7);
+ y6 = y6.times(x6);
--b5;
}
if (b5 === _0)
break;
b5 /= _22;
- x7 = x7.square();
+ x6 = x6.square();
}
return y6;
};
@@ -833,21 +833,21 @@ var require_BigInteger = __commonJS({
return true;
}
function millerRabinTest(n2, a6) {
- var nPrev = n2.prev(), b5 = nPrev, r3 = 0, d6, t5, i6, x7;
+ var nPrev = n2.prev(), b5 = nPrev, r3 = 0, d6, t5, i6, x6;
while (b5.isEven())
b5 = b5.divide(2), r3++;
next:
for (i6 = 0; i6 < a6.length; i6++) {
if (n2.lesser(a6[i6]))
continue;
- x7 = bigInt(a6[i6]).modPow(b5, n2);
- if (x7.isUnit() || x7.equals(nPrev))
+ x6 = bigInt(a6[i6]).modPow(b5, n2);
+ if (x6.isUnit() || x6.equals(nPrev))
continue;
for (d6 = r3 - 1; d6 != 0; d6--) {
- x7 = x7.square().mod(n2);
- if (x7.isUnit())
+ x6 = x6.square().mod(n2);
+ if (x6.isUnit())
return false;
- if (x7.equals(nPrev))
+ if (x6.equals(nPrev))
continue next;
}
return false;
@@ -980,10 +980,10 @@ var require_BigInteger = __commonJS({
return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
};
NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;
- function bitwise(x7, y6, fn2) {
+ function bitwise(x6, y6, fn2) {
y6 = parseValue(y6);
- var xSign = x7.isNegative(), ySign = y6.isNegative();
- var xRem = xSign ? x7.not() : x7, yRem = ySign ? y6.not() : y6;
+ var xSign = x6.isNegative(), ySign = y6.isNegative();
+ var xRem = xSign ? x6.not() : x6, yRem = ySign ? y6.not() : y6;
var xDigit = 0, yDigit = 0;
var xDivMod = null, yDivMod = null;
var result = [];
@@ -1032,8 +1032,8 @@ var require_BigInteger = __commonJS({
NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;
var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;
function roughLOB(n2) {
- var v3 = n2.value, x7 = typeof v3 === "number" ? v3 | LOBMASK_I : typeof v3 === "bigint" ? v3 | BigInt(LOBMASK_I) : v3[0] + v3[1] * BASE | LOBMASK_BI;
- return x7 & -x7;
+ var v3 = n2.value, x6 = typeof v3 === "number" ? v3 | LOBMASK_I : typeof v3 === "bigint" ? v3 | BigInt(LOBMASK_I) : v3[0] + v3[1] * BASE | LOBMASK_BI;
+ return x6 & -x6;
}
function integerLogarithm(value, base2) {
if (base2.compareTo(value) <= 0) {
@@ -1236,8 +1236,8 @@ var require_BigInteger = __commonJS({
}
function toBaseString(n2, base2, alphabet) {
var arr = toBase(n2, base2);
- return (arr.isNegative ? "-" : "") + arr.value.map(function(x7) {
- return stringify(x7, alphabet);
+ return (arr.isNegative ? "-" : "") + arr.value.map(function(x6) {
+ return stringify(x6, alphabet);
}).join("");
}
BigInteger.prototype.toArray = function(radix) {
@@ -1286,9 +1286,9 @@ var require_BigInteger = __commonJS({
};
function parseStringValue(v3) {
if (isPrecise(+v3)) {
- var x7 = +v3;
- if (x7 === truncate(x7))
- return supportsNativeBigInt ? new NativeBigInt(BigInt(x7)) : new SmallInteger(x7);
+ var x6 = +v3;
+ if (x6 === truncate(x6))
+ return supportsNativeBigInt ? new NativeBigInt(BigInt(x6)) : new SmallInteger(x6);
throw new Error("Invalid integer: " + v3);
}
var sign2 = v3[0] === "-";
@@ -1367,8 +1367,8 @@ var require_BigInteger = __commonJS({
Integer.min = min;
Integer.gcd = gcd;
Integer.lcm = lcm;
- Integer.isInstance = function(x7) {
- return x7 instanceof BigInteger || x7 instanceof SmallInteger || x7 instanceof NativeBigInt;
+ Integer.isInstance = function(x6) {
+ return x6 instanceof BigInteger || x6 instanceof SmallInteger || x6 instanceof NativeBigInt;
};
Integer.randBetween = randBetween;
Integer.fromArray = function(digits, base2, isNegative) {
@@ -1474,8 +1474,8 @@ var require_jed = __commonJS({
if ({}.toString.call(sArr) != "[object Array]") {
sArr = [].slice.call(arguments, 0);
}
- return (sArr && sArr.length ? Jed2.sprintf : function(x7) {
- return x7;
+ return (sArr && sArr.length ? Jed2.sprintf : function(x6) {
+ return x6;
})(
this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val),
sArr
@@ -2263,23 +2263,23 @@ function g() {
});
}
function w(n2, l3, u5, i5, t5, o3, r3, c5, s6, a6) {
- var h6, y6, d6, k6, b5, g4, w6, x7 = i5 && i5.__k || e, C3 = x7.length;
+ var h6, y6, d6, k6, b5, g4, w6, x6 = i5 && i5.__k || e, C3 = x6.length;
for (u5.__k = [], h6 = 0; h6 < l3.length; h6++)
if (null != (k6 = u5.__k[h6] = null == (k6 = l3[h6]) || "boolean" == typeof k6 ? null : "string" == typeof k6 || "number" == typeof k6 || "bigint" == typeof k6 ? v(null, k6, null, null, k6) : Array.isArray(k6) ? v(p2, { children: k6 }, null, null, null) : k6.__b > 0 ? v(k6.type, k6.props, k6.key, k6.ref ? k6.ref : null, k6.__v) : k6)) {
- if (k6.__ = u5, k6.__b = u5.__b + 1, null === (d6 = x7[h6]) || d6 && k6.key == d6.key && k6.type === d6.type)
- x7[h6] = void 0;
+ if (k6.__ = u5, k6.__b = u5.__b + 1, null === (d6 = x6[h6]) || d6 && k6.key == d6.key && k6.type === d6.type)
+ x6[h6] = void 0;
else
for (y6 = 0; y6 < C3; y6++) {
- if ((d6 = x7[y6]) && k6.key == d6.key && k6.type === d6.type) {
- x7[y6] = void 0;
+ if ((d6 = x6[y6]) && k6.key == d6.key && k6.type === d6.type) {
+ x6[y6] = void 0;
break;
}
d6 = null;
}
- j(n2, k6, d6 = d6 || f, t5, o3, r3, c5, s6, a6), b5 = k6.__e, (y6 = k6.ref) && d6.ref != y6 && (w6 || (w6 = []), d6.ref && w6.push(d6.ref, null, k6), w6.push(y6, k6.__c || b5, k6)), null != b5 ? (null == g4 && (g4 = b5), "function" == typeof k6.type && k6.__k === d6.__k ? k6.__d = s6 = m(k6, s6, n2) : s6 = A2(n2, k6, d6, x7, b5, s6), "function" == typeof u5.type && (u5.__d = s6)) : s6 && d6.__e == s6 && s6.parentNode != n2 && (s6 = _(d6));
+ j(n2, k6, d6 = d6 || f, t5, o3, r3, c5, s6, a6), b5 = k6.__e, (y6 = k6.ref) && d6.ref != y6 && (w6 || (w6 = []), d6.ref && w6.push(d6.ref, null, k6), w6.push(y6, k6.__c || b5, k6)), null != b5 ? (null == g4 && (g4 = b5), "function" == typeof k6.type && k6.__k === d6.__k ? k6.__d = s6 = m(k6, s6, n2) : s6 = A2(n2, k6, d6, x6, b5, s6), "function" == typeof u5.type && (u5.__d = s6)) : s6 && d6.__e == s6 && s6.parentNode != n2 && (s6 = _(d6));
}
for (u5.__e = g4, h6 = C3; h6--; )
- null != x7[h6] && N(x7[h6], x7[h6]);
+ null != x6[h6] && N(x6[h6], x6[h6]);
if (w6)
for (h6 = 0; h6 < w6.length; h6++)
M2(w6[h6], w6[++h6], w6[++h6]);
@@ -2289,9 +2289,9 @@ function m(n2, l3, u5) {
(i5 = t5[o3]) && (i5.__ = n2, l3 = "function" == typeof i5.type ? m(i5, l3, u5) : A2(u5, i5, i5, t5, i5.__e, l3));
return l3;
}
-function x2(n2, l3) {
+function x(n2, l3) {
return l3 = l3 || [], null == n2 || "boolean" == typeof n2 || (Array.isArray(n2) ? n2.some(function(n3) {
- x2(n3, l3);
+ x(n3, l3);
}) : l3.push(n2)), l3;
}
function A2(n2, l3, u5, i5, t5, o3) {
@@ -2355,17 +2355,17 @@ function T(n2) {
this.l[n2.type + true](l.event ? l.event(n2) : n2);
}
function j(n2, u5, i5, t5, o3, r3, f3, e5, c5) {
- var a6, h6, v3, y6, _3, k6, b5, g4, m6, x7, A5, C3, $3, H6, I6, T6 = u5.type;
+ var a6, h6, v3, y6, _3, k6, b5, g4, m6, x6, A5, C3, $3, H6, I6, T6 = u5.type;
if (void 0 !== u5.constructor)
return null;
null != i5.__h && (c5 = i5.__h, e5 = u5.__e = i5.__e, u5.__h = null, r3 = [e5]), (a6 = l.__b) && a6(u5);
try {
n:
if ("function" == typeof T6) {
- if (g4 = u5.props, m6 = (a6 = T6.contextType) && t5[a6.__c], x7 = a6 ? m6 ? m6.props.value : a6.__ : t5, i5.__c ? b5 = (h6 = u5.__c = i5.__c).__ = h6.__E : ("prototype" in T6 && T6.prototype.render ? u5.__c = h6 = new T6(g4, x7) : (u5.__c = h6 = new d(g4, x7), h6.constructor = T6, h6.render = O), m6 && m6.sub(h6), h6.props = g4, h6.state || (h6.state = {}), h6.context = x7, h6.__n = t5, v3 = h6.__d = true, h6.__h = [], h6._sb = []), null == h6.__s && (h6.__s = h6.state), null != T6.getDerivedStateFromProps && (h6.__s == h6.state && (h6.__s = s({}, h6.__s)), s(h6.__s, T6.getDerivedStateFromProps(g4, h6.__s))), y6 = h6.props, _3 = h6.state, v3)
+ if (g4 = u5.props, m6 = (a6 = T6.contextType) && t5[a6.__c], x6 = a6 ? m6 ? m6.props.value : a6.__ : t5, i5.__c ? b5 = (h6 = u5.__c = i5.__c).__ = h6.__E : ("prototype" in T6 && T6.prototype.render ? u5.__c = h6 = new T6(g4, x6) : (u5.__c = h6 = new d(g4, x6), h6.constructor = T6, h6.render = O), m6 && m6.sub(h6), h6.props = g4, h6.state || (h6.state = {}), h6.context = x6, h6.__n = t5, v3 = h6.__d = true, h6.__h = [], h6._sb = []), null == h6.__s && (h6.__s = h6.state), null != T6.getDerivedStateFromProps && (h6.__s == h6.state && (h6.__s = s({}, h6.__s)), s(h6.__s, T6.getDerivedStateFromProps(g4, h6.__s))), y6 = h6.props, _3 = h6.state, v3)
null == T6.getDerivedStateFromProps && null != h6.componentWillMount && h6.componentWillMount(), null != h6.componentDidMount && h6.__h.push(h6.componentDidMount);
else {
- if (null == T6.getDerivedStateFromProps && g4 !== y6 && null != h6.componentWillReceiveProps && h6.componentWillReceiveProps(g4, x7), !h6.__e && null != h6.shouldComponentUpdate && false === h6.shouldComponentUpdate(g4, h6.__s, x7) || u5.__v === i5.__v) {
+ if (null == T6.getDerivedStateFromProps && g4 !== y6 && null != h6.componentWillReceiveProps && h6.componentWillReceiveProps(g4, x6), !h6.__e && null != h6.shouldComponentUpdate && false === h6.shouldComponentUpdate(g4, h6.__s, x6) || u5.__v === i5.__v) {
for (h6.props = g4, h6.state = h6.__s, u5.__v !== i5.__v && (h6.__d = false), h6.__v = u5, u5.__e = i5.__e, u5.__k = i5.__k, u5.__k.forEach(function(n3) {
n3 && (n3.__ = u5);
}), A5 = 0; A5 < h6._sb.length; A5++)
@@ -2373,11 +2373,11 @@ function j(n2, u5, i5, t5, o3, r3, f3, e5, c5) {
h6._sb = [], h6.__h.length && f3.push(h6);
break n;
}
- null != h6.componentWillUpdate && h6.componentWillUpdate(g4, h6.__s, x7), null != h6.componentDidUpdate && h6.__h.push(function() {
+ null != h6.componentWillUpdate && h6.componentWillUpdate(g4, h6.__s, x6), null != h6.componentDidUpdate && h6.__h.push(function() {
h6.componentDidUpdate(y6, _3, k6);
});
}
- if (h6.context = x7, h6.props = g4, h6.__v = u5, h6.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T6 && T6.prototype.render) {
+ if (h6.context = x6, h6.props = g4, h6.__v = u5, h6.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T6 && T6.prototype.render) {
for (h6.state = h6.__s, h6.__d = false, C3 && C3(u5), a6 = h6.render(h6.props, h6.state, h6.context), H6 = 0; H6 < h6._sb.length; H6++)
h6.__h.push(h6._sb[H6]);
h6._sb = [];
@@ -2594,7 +2594,7 @@ function q2(n2) {
var u5 = r2.context[n2.__c], i5 = d2(t2++, 9);
return i5.c = n2, u5 ? (null == i5.__ && (i5.__ = true, u5.sub(r2)), u5.props.value) : n2.__;
}
-function x3(t5, r3) {
+function x2(t5, r3) {
l.useDebugValue && l.useDebugValue(r3 ? r3(t5) : t5);
}
function P2(n2) {
@@ -2730,7 +2730,7 @@ __export(compat_module_exports, {
unstable_batchedUpdates: () => sn,
useCallback: () => T2,
useContext: () => q2,
- useDebugValue: () => x3,
+ useDebugValue: () => x2,
useDeferredValue: () => pn,
useEffect: () => h2,
useErrorBoundary: () => P2,
@@ -2889,7 +2889,7 @@ function _n(n2, t5) {
});
}, [n2]), e5;
}
-var x4, N2, A4, O2, T3, I3, W, z3, B3, H2, Z2, G, X2, nn, tn, en, rn, un, sn, hn, vn2, yn, bn;
+var x3, N2, A4, O2, T3, I3, W, z3, B3, H2, Z2, G, X2, nn, tn, en, rn, un, sn, hn, vn2, yn, bn;
var init_compat_module = __esm({
"../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/dist/compat.module.js"() {
init_preact_module();
@@ -2899,22 +2899,22 @@ var init_compat_module = __esm({
(w3.prototype = new d()).isPureReactComponent = true, w3.prototype.shouldComponentUpdate = function(n2, t5) {
return C2(this.props, n2) || C2(this.state, t5);
};
- x4 = l.__b;
+ x3 = l.__b;
l.__b = function(n2) {
- n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x4 && x4(n2);
+ n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x3 && x3(n2);
};
N2 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911;
A4 = function(n2, t5) {
- return null == n2 ? null : x2(x2(n2).map(t5));
+ return null == n2 ? null : x(x(n2).map(t5));
};
O2 = { map: A4, forEach: A4, count: function(n2) {
- return n2 ? x2(n2).length : 0;
+ return n2 ? x(n2).length : 0;
}, only: function(n2) {
- var t5 = x2(n2);
+ var t5 = x(n2);
if (1 !== t5.length)
throw "Children.only";
return t5[0];
- }, toArray: x2 };
+ }, toArray: x };
T3 = l.__e;
l.__e = function(n2, t5, e5, r3) {
if (n2.then) {
@@ -2980,7 +2980,7 @@ var init_compat_module = __esm({
};
}, V2.prototype.render = function(n2) {
this.u = null, this.o = /* @__PURE__ */ new Map();
- var t5 = x2(n2.children);
+ var t5 = x(n2.children);
n2.revealOrder && "b" === n2.revealOrder[0] && t5.reverse();
for (var e5 = t5.length; e5--; )
this.o.set(t5[e5], this.u = [1, 0, this.u]);
@@ -3020,9 +3020,9 @@ var init_compat_module = __esm({
var l3 = e5[i5];
H2 && "children" === i5 && "noscript" === t5 || "value" === i5 && "defaultValue" in e5 && null == l3 || ("defaultValue" === i5 && "value" in e5 && null == e5.value ? i5 = "value" : "download" === i5 && true === l3 ? l3 = "" : /ondoubleclick/i.test(i5) ? i5 = "ondblclick" : /^onchange(textarea|input)/i.test(i5 + t5) && !Z2(e5.type) ? i5 = "oninput" : /^onfocus$/i.test(i5) ? i5 = "onfocusin" : /^onblur$/i.test(i5) ? i5 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i5) ? i5 = i5.toLowerCase() : o3 && B3.test(i5) ? i5 = i5.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : null === l3 && (l3 = void 0), /^oninput$/i.test(i5) && (i5 = i5.toLowerCase(), u5[i5] && (i5 = "oninputCapture")), u5[i5] = l3);
}
- "select" == t5 && u5.multiple && Array.isArray(u5.value) && (u5.value = x2(e5.children).forEach(function(n3) {
+ "select" == t5 && u5.multiple && Array.isArray(u5.value) && (u5.value = x(e5.children).forEach(function(n3) {
n3.props.selected = -1 != u5.value.indexOf(n3.props.value);
- })), "select" == t5 && null != u5.defaultValue && (u5.value = x2(e5.children).forEach(function(n3) {
+ })), "select" == t5 && null != u5.defaultValue && (u5.value = x(e5.children).forEach(function(n3) {
n3.props.selected = u5.multiple ? -1 != u5.defaultValue.indexOf(n3.props.value) : u5.defaultValue == n3.props.value;
})), n2.props = u5, e5.class != e5.className && (nn.enumerable = "className" in e5, null != e5.className && (u5.class = e5.className), Object.defineProperty(u5, "className", nn));
}
@@ -3044,7 +3044,7 @@ var init_compat_module = __esm({
};
vn2 = p2;
yn = s2;
- bn = { useState: p3, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A3, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x3, version: "17.0.2", Children: O2, render: Y2, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p2, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn2, Suspense: D3, SuspenseList: V2, lazy: M3, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn };
+ bn = { useState: p3, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A3, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x2, version: "17.0.2", Children: O2, render: Y2, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p2, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn2, Suspense: D3, SuspenseList: V2, lazy: M3, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn };
}
});
@@ -3115,7 +3115,7 @@ var gf = function(init = []) {
r3[i5] = init[i5];
return r3;
};
-var randombytes = function(x7, n2) {
+var randombytes = function(x6, n2) {
throw new Error("no PRNG");
};
var _9 = new Uint8Array(32);
@@ -3213,31 +3213,31 @@ var I = gf([
9344,
11139
]);
-function ts64(x7, i5, h6, l3) {
- x7[i5] = h6 >> 24 & 255;
- x7[i5 + 1] = h6 >> 16 & 255;
- x7[i5 + 2] = h6 >> 8 & 255;
- x7[i5 + 3] = h6 & 255;
- x7[i5 + 4] = l3 >> 24 & 255;
- x7[i5 + 5] = l3 >> 16 & 255;
- x7[i5 + 6] = l3 >> 8 & 255;
- x7[i5 + 7] = l3 & 255;
-}
-function vn(x7, xi, y6, yi, n2) {
+function ts64(x6, i5, h6, l3) {
+ x6[i5] = h6 >> 24 & 255;
+ x6[i5 + 1] = h6 >> 16 & 255;
+ x6[i5 + 2] = h6 >> 8 & 255;
+ x6[i5 + 3] = h6 & 255;
+ x6[i5 + 4] = l3 >> 24 & 255;
+ x6[i5 + 5] = l3 >> 16 & 255;
+ x6[i5 + 6] = l3 >> 8 & 255;
+ x6[i5 + 7] = l3 & 255;
+}
+function vn(x6, xi, y6, yi, n2) {
let i5, d6 = 0;
for (i5 = 0; i5 < n2; i5++)
- d6 |= x7[xi + i5] ^ y6[yi + i5];
+ d6 |= x6[xi + i5] ^ y6[yi + i5];
return (1 & d6 - 1 >>> 8) - 1;
}
-function crypto_verify_16(x7, xi, y6, yi) {
- return vn(x7, xi, y6, yi, 16);
+function crypto_verify_16(x6, xi, y6, yi) {
+ return vn(x6, xi, y6, yi, 16);
}
-function crypto_verify_32(x7, xi, y6, yi) {
- return vn(x7, xi, y6, yi, 32);
+function crypto_verify_32(x6, xi, y6, yi) {
+ return vn(x6, xi, y6, yi, 32);
}
function core_salsa20(o3, p4, k6, c5) {
var j0 = c5[0] & 255 | (c5[1] & 255) << 8 | (c5[2] & 255) << 16 | (c5[3] & 255) << 24, j1 = k6[0] & 255 | (k6[1] & 255) << 8 | (k6[2] & 255) << 16 | (k6[3] & 255) << 24, j22 = k6[4] & 255 | (k6[5] & 255) << 8 | (k6[6] & 255) << 16 | (k6[7] & 255) << 24, j32 = k6[8] & 255 | (k6[9] & 255) << 8 | (k6[10] & 255) << 16 | (k6[11] & 255) << 24, j4 = k6[12] & 255 | (k6[13] & 255) << 8 | (k6[14] & 255) << 16 | (k6[15] & 255) << 24, j5 = c5[4] & 255 | (c5[5] & 255) << 8 | (c5[6] & 255) << 16 | (c5[7] & 255) << 24, j6 = p4[0] & 255 | (p4[1] & 255) << 8 | (p4[2] & 255) << 16 | (p4[3] & 255) << 24, j7 = p4[4] & 255 | (p4[5] & 255) << 8 | (p4[6] & 255) << 16 | (p4[7] & 255) << 24, j8 = p4[8] & 255 | (p4[9] & 255) << 8 | (p4[10] & 255) << 16 | (p4[11] & 255) << 24, j9 = p4[12] & 255 | (p4[13] & 255) << 8 | (p4[14] & 255) << 16 | (p4[15] & 255) << 24, j10 = c5[8] & 255 | (c5[9] & 255) << 8 | (c5[10] & 255) << 16 | (c5[11] & 255) << 24, j11 = k6[16] & 255 | (k6[17] & 255) << 8 | (k6[18] & 255) << 16 | (k6[19] & 255) << 24, j12 = k6[20] & 255 | (k6[21] & 255) << 8 | (k6[22] & 255) << 16 | (k6[23] & 255) << 24, j13 = k6[24] & 255 | (k6[25] & 255) << 8 | (k6[26] & 255) << 16 | (k6[27] & 255) << 24, j14 = k6[28] & 255 | (k6[29] & 255) << 8 | (k6[30] & 255) << 16 | (k6[31] & 255) << 24, j15 = c5[12] & 255 | (c5[13] & 255) << 8 | (c5[14] & 255) << 16 | (c5[15] & 255) << 24;
- var x0 = j0, x1 = j1, x22 = j22, x32 = j32, x42 = j4, x52 = j5, x62 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u5;
+ var x0 = j0, x1 = j1, x22 = j22, x32 = j32, x42 = j4, x52 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u5;
for (var i5 = 0; i5 < 20; i5 += 2) {
u5 = x0 + x12 | 0;
x42 ^= u5 << 7 | u5 >>> 32 - 7;
@@ -3255,13 +3255,13 @@ function core_salsa20(o3, p4, k6, c5) {
x1 ^= u5 << 13 | u5 >>> 32 - 13;
u5 = x1 + x13 | 0;
x52 ^= u5 << 18 | u5 >>> 32 - 18;
- u5 = x10 + x62 | 0;
+ u5 = x10 + x6 | 0;
x14 ^= u5 << 7 | u5 >>> 32 - 7;
u5 = x14 + x10 | 0;
x22 ^= u5 << 9 | u5 >>> 32 - 9;
u5 = x22 + x14 | 0;
- x62 ^= u5 << 13 | u5 >>> 32 - 13;
- u5 = x62 + x22 | 0;
+ x6 ^= u5 << 13 | u5 >>> 32 - 13;
+ u5 = x6 + x22 | 0;
x10 ^= u5 << 18 | u5 >>> 32 - 18;
u5 = x15 + x11 | 0;
x32 ^= u5 << 7 | u5 >>> 32 - 7;
@@ -3280,10 +3280,10 @@ function core_salsa20(o3, p4, k6, c5) {
u5 = x32 + x22 | 0;
x0 ^= u5 << 18 | u5 >>> 32 - 18;
u5 = x52 + x42 | 0;
- x62 ^= u5 << 7 | u5 >>> 32 - 7;
- u5 = x62 + x52 | 0;
+ x6 ^= u5 << 7 | u5 >>> 32 - 7;
+ u5 = x6 + x52 | 0;
x7 ^= u5 << 9 | u5 >>> 32 - 9;
- u5 = x7 + x62 | 0;
+ u5 = x7 + x6 | 0;
x42 ^= u5 << 13 | u5 >>> 32 - 13;
u5 = x42 + x7 | 0;
x52 ^= u5 << 18 | u5 >>> 32 - 18;
@@ -3310,7 +3310,7 @@ function core_salsa20(o3, p4, k6, c5) {
x32 = x32 + j32 | 0;
x42 = x42 + j4 | 0;
x52 = x52 + j5 | 0;
- x62 = x62 + j6 | 0;
+ x6 = x6 + j6 | 0;
x7 = x7 + j7 | 0;
x8 = x8 + j8 | 0;
x9 = x9 + j9 | 0;
@@ -3344,10 +3344,10 @@ function core_salsa20(o3, p4, k6, c5) {
o3[21] = x52 >>> 8 & 255;
o3[22] = x52 >>> 16 & 255;
o3[23] = x52 >>> 24 & 255;
- o3[24] = x62 >>> 0 & 255;
- o3[25] = x62 >>> 8 & 255;
- o3[26] = x62 >>> 16 & 255;
- o3[27] = x62 >>> 24 & 255;
+ o3[24] = x6 >>> 0 & 255;
+ o3[25] = x6 >>> 8 & 255;
+ o3[26] = x6 >>> 16 & 255;
+ o3[27] = x6 >>> 24 & 255;
o3[28] = x7 >>> 0 & 255;
o3[29] = x7 >>> 8 & 255;
o3[30] = x7 >>> 16 & 255;
@@ -3387,7 +3387,7 @@ function core_salsa20(o3, p4, k6, c5) {
}
function core_hsalsa20(o3, p4, k6, c5) {
var j0 = c5[0] & 255 | (c5[1] & 255) << 8 | (c5[2] & 255) << 16 | (c5[3] & 255) << 24, j1 = k6[0] & 255 | (k6[1] & 255) << 8 | (k6[2] & 255) << 16 | (k6[3] & 255) << 24, j22 = k6[4] & 255 | (k6[5] & 255) << 8 | (k6[6] & 255) << 16 | (k6[7] & 255) << 24, j32 = k6[8] & 255 | (k6[9] & 255) << 8 | (k6[10] & 255) << 16 | (k6[11] & 255) << 24, j4 = k6[12] & 255 | (k6[13] & 255) << 8 | (k6[14] & 255) << 16 | (k6[15] & 255) << 24, j5 = c5[4] & 255 | (c5[5] & 255) << 8 | (c5[6] & 255) << 16 | (c5[7] & 255) << 24, j6 = p4[0] & 255 | (p4[1] & 255) << 8 | (p4[2] & 255) << 16 | (p4[3] & 255) << 24, j7 = p4[4] & 255 | (p4[5] & 255) << 8 | (p4[6] & 255) << 16 | (p4[7] & 255) << 24, j8 = p4[8] & 255 | (p4[9] & 255) << 8 | (p4[10] & 255) << 16 | (p4[11] & 255) << 24, j9 = p4[12] & 255 | (p4[13] & 255) << 8 | (p4[14] & 255) << 16 | (p4[15] & 255) << 24, j10 = c5[8] & 255 | (c5[9] & 255) << 8 | (c5[10] & 255) << 16 | (c5[11] & 255) << 24, j11 = k6[16] & 255 | (k6[17] & 255) << 8 | (k6[18] & 255) << 16 | (k6[19] & 255) << 24, j12 = k6[20] & 255 | (k6[21] & 255) << 8 | (k6[22] & 255) << 16 | (k6[23] & 255) << 24, j13 = k6[24] & 255 | (k6[25] & 255) << 8 | (k6[26] & 255) << 16 | (k6[27] & 255) << 24, j14 = k6[28] & 255 | (k6[29] & 255) << 8 | (k6[30] & 255) << 16 | (k6[31] & 255) << 24, j15 = c5[12] & 255 | (c5[13] & 255) << 8 | (c5[14] & 255) << 16 | (c5[15] & 255) << 24;
- var x0 = j0, x1 = j1, x22 = j22, x32 = j32, x42 = j4, x52 = j5, x62 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u5;
+ var x0 = j0, x1 = j1, x22 = j22, x32 = j32, x42 = j4, x52 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u5;
for (var i5 = 0; i5 < 20; i5 += 2) {
u5 = x0 + x12 | 0;
x42 ^= u5 << 7 | u5 >>> 32 - 7;
@@ -3405,13 +3405,13 @@ function core_hsalsa20(o3, p4, k6, c5) {
x1 ^= u5 << 13 | u5 >>> 32 - 13;
u5 = x1 + x13 | 0;
x52 ^= u5 << 18 | u5 >>> 32 - 18;
- u5 = x10 + x62 | 0;
+ u5 = x10 + x6 | 0;
x14 ^= u5 << 7 | u5 >>> 32 - 7;
u5 = x14 + x10 | 0;
x22 ^= u5 << 9 | u5 >>> 32 - 9;
u5 = x22 + x14 | 0;
- x62 ^= u5 << 13 | u5 >>> 32 - 13;
- u5 = x62 + x22 | 0;
+ x6 ^= u5 << 13 | u5 >>> 32 - 13;
+ u5 = x6 + x22 | 0;
x10 ^= u5 << 18 | u5 >>> 32 - 18;
u5 = x15 + x11 | 0;
x32 ^= u5 << 7 | u5 >>> 32 - 7;
@@ -3430,10 +3430,10 @@ function core_hsalsa20(o3, p4, k6, c5) {
u5 = x32 + x22 | 0;
x0 ^= u5 << 18 | u5 >>> 32 - 18;
u5 = x52 + x42 | 0;
- x62 ^= u5 << 7 | u5 >>> 32 - 7;
- u5 = x62 + x52 | 0;
+ x6 ^= u5 << 7 | u5 >>> 32 - 7;
+ u5 = x6 + x52 | 0;
x7 ^= u5 << 9 | u5 >>> 32 - 9;
- u5 = x7 + x62 | 0;
+ u5 = x7 + x6 | 0;
x42 ^= u5 << 13 | u5 >>> 32 - 13;
u5 = x42 + x7 | 0;
x52 ^= u5 << 18 | u5 >>> 32 - 18;
@@ -3470,10 +3470,10 @@ function core_hsalsa20(o3, p4, k6, c5) {
o3[13] = x15 >>> 8 & 255;
o3[14] = x15 >>> 16 & 255;
o3[15] = x15 >>> 24 & 255;
- o3[16] = x62 >>> 0 & 255;
- o3[17] = x62 >>> 8 & 255;
- o3[18] = x62 >>> 16 & 255;
- o3[19] = x62 >>> 24 & 255;
+ o3[16] = x6 >>> 0 & 255;
+ o3[17] = x6 >>> 8 & 255;
+ o3[18] = x6 >>> 16 & 255;
+ o3[19] = x6 >>> 24 & 255;
o3[20] = x7 >>> 0 & 255;
o3[21] = x7 >>> 8 & 255;
o3[22] = x7 >>> 16 & 255;
@@ -3506,16 +3506,16 @@ var sigma = new Uint8Array([
107
]);
function crypto_stream_salsa20_xor(c5, cpos, m6, mpos, b5, n2, k6) {
- var z6 = new Uint8Array(16), x7 = new Uint8Array(64);
+ var z6 = new Uint8Array(16), x6 = new Uint8Array(64);
var u5, i5;
for (i5 = 0; i5 < 16; i5++)
z6[i5] = 0;
for (i5 = 0; i5 < 8; i5++)
z6[i5] = n2[i5];
while (b5 >= 64) {
- core_salsa20(x7, z6, k6, sigma);
+ core_salsa20(x6, z6, k6, sigma);
for (i5 = 0; i5 < 64; i5++)
- c5[cpos + i5] = m6[mpos + i5] ^ x7[i5];
+ c5[cpos + i5] = m6[mpos + i5] ^ x6[i5];
u5 = 1;
for (i5 = 8; i5 < 16; i5++) {
u5 = u5 + (z6[i5] & 255) | 0;
@@ -3527,23 +3527,23 @@ function crypto_stream_salsa20_xor(c5, cpos, m6, mpos, b5, n2, k6) {
mpos += 64;
}
if (b5 > 0) {
- core_salsa20(x7, z6, k6, sigma);
+ core_salsa20(x6, z6, k6, sigma);
for (i5 = 0; i5 < b5; i5++)
- c5[cpos + i5] = m6[mpos + i5] ^ x7[i5];
+ c5[cpos + i5] = m6[mpos + i5] ^ x6[i5];
}
return 0;
}
function crypto_stream_salsa20(c5, cpos, b5, n2, k6) {
- var z6 = new Uint8Array(16), x7 = new Uint8Array(64);
+ var z6 = new Uint8Array(16), x6 = new Uint8Array(64);
var u5, i5;
for (i5 = 0; i5 < 16; i5++)
z6[i5] = 0;
for (i5 = 0; i5 < 8; i5++)
z6[i5] = n2[i5];
while (b5 >= 64) {
- core_salsa20(x7, z6, k6, sigma);
+ core_salsa20(x6, z6, k6, sigma);
for (i5 = 0; i5 < 64; i5++)
- c5[cpos + i5] = x7[i5];
+ c5[cpos + i5] = x6[i5];
u5 = 1;
for (i5 = 8; i5 < 16; i5++) {
u5 = u5 + (z6[i5] & 255) | 0;
@@ -3554,9 +3554,9 @@ function crypto_stream_salsa20(c5, cpos, b5, n2, k6) {
cpos += 64;
}
if (b5 > 0) {
- core_salsa20(x7, z6, k6, sigma);
+ core_salsa20(x6, z6, k6, sigma);
for (i5 = 0; i5 < b5; i5++)
- c5[cpos + i5] = x7[i5];
+ c5[cpos + i5] = x6[i5];
}
return 0;
}
@@ -3925,9 +3925,9 @@ function crypto_onetimeauth(out, outpos, m6, mpos, n2, k6) {
return 0;
}
function crypto_onetimeauth_verify(h6, hpos, m6, mpos, n2, k6) {
- var x7 = new Uint8Array(16);
- crypto_onetimeauth(x7, 0, m6, mpos, n2, k6);
- return crypto_verify_16(h6, hpos, x7, 0);
+ var x6 = new Uint8Array(16);
+ crypto_onetimeauth(x6, 0, m6, mpos, n2, k6);
+ return crypto_verify_16(h6, hpos, x6, 0);
}
function crypto_secretbox(c5, m6, d6, n2, k6) {
var i5;
@@ -3941,11 +3941,11 @@ function crypto_secretbox(c5, m6, d6, n2, k6) {
}
function crypto_secretbox_open(m6, c5, d6, n2, k6) {
var i5;
- var x7 = new Uint8Array(32);
+ var x6 = new Uint8Array(32);
if (d6 < 32)
return -1;
- crypto_stream(x7, 0, 32, n2, k6);
- if (crypto_onetimeauth_verify(c5, 16, c5, 32, d6 - 32, x7) !== 0)
+ crypto_stream(x6, 0, 32, n2, k6);
+ if (crypto_onetimeauth_verify(c5, 16, c5, 32, d6 - 32, x6) !== 0)
return -1;
crypto_stream_xor(m6, 0, c5, 0, d6, n2, k6);
for (i5 = 0; i5 < 32; i5++)
@@ -4923,7 +4923,7 @@ function crypto_hashblocks_hl(hh, hl, m6, n2) {
function crypto_hash(out, m6, n2) {
const hh = new Int32Array(8);
const hl = new Int32Array(8);
- const x7 = new Uint8Array(256);
+ const x6 = new Uint8Array(256);
const b5 = n2;
hh[0] = 1779033703;
hh[1] = 3144134277;
@@ -4944,12 +4944,12 @@ function crypto_hash(out, m6, n2) {
crypto_hashblocks_hl(hh, hl, m6, n2);
n2 %= 128;
for (let i5 = 0; i5 < n2; i5++)
- x7[i5] = m6[b5 - n2 + i5];
- x7[n2] = 128;
+ x6[i5] = m6[b5 - n2 + i5];
+ x6[n2] = 128;
n2 = 256 - 128 * (n2 < 112 ? 1 : 0);
- x7[n2 - 9] = 0;
- ts64(x7, n2 - 8, b5 / 536870912 | 0, b5 << 3);
- crypto_hashblocks_hl(hh, hl, x7, n2);
+ x6[n2 - 9] = 0;
+ ts64(x6, n2 - 8, b5 / 536870912 | 0, b5 << 3);
+ crypto_hashblocks_hl(hh, hl, x6, n2);
for (let i5 = 0; i5 < 8; i5++)
ts64(out, 8 * i5, hh[i5], hl[i5]);
return 0;
@@ -5003,15 +5003,15 @@ var HashState = class {
finish() {
const out = new Uint8Array(64);
let n2 = this.p;
- const x7 = new Uint8Array(256);
+ const x6 = new Uint8Array(256);
const b5 = this.total;
for (let i5 = 0; i5 < n2; i5++)
- x7[i5] = this.next[i5];
- x7[n2] = 128;
+ x6[i5] = this.next[i5];
+ x6[n2] = 128;
n2 = 256 - 128 * (n2 < 112 ? 1 : 0);
- x7[n2 - 9] = 0;
- ts64(x7, n2 - 8, b5 / 536870912 | 0, b5 << 3);
- crypto_hashblocks_hl(this.hh, this.hl, x7, n2);
+ x6[n2 - 9] = 0;
+ ts64(x6, n2 - 8, b5 / 536870912 | 0, b5 << 3);
+ crypto_hashblocks_hl(this.hh, this.hl, x6, n2);
for (let i5 = 0; i5 < 8; i5++)
ts64(out, 8 * i5, this.hh[i5], this.hl[i5]);
return out;
@@ -5123,43 +5123,43 @@ var L = new Float64Array([
0,
16
]);
-function modL(r3, x7) {
+function modL(r3, x6) {
let carry, i5, j4, k6;
for (i5 = 63; i5 >= 32; --i5) {
carry = 0;
for (j4 = i5 - 32, k6 = i5 - 12; j4 < k6; ++j4) {
- x7[j4] += carry - 16 * x7[i5] * L[j4 - (i5 - 32)];
- carry = Math.floor((x7[j4] + 128) / 256);
- x7[j4] -= carry * 256;
+ x6[j4] += carry - 16 * x6[i5] * L[j4 - (i5 - 32)];
+ carry = Math.floor((x6[j4] + 128) / 256);
+ x6[j4] -= carry * 256;
}
- x7[j4] += carry;
- x7[i5] = 0;
+ x6[j4] += carry;
+ x6[i5] = 0;
}
carry = 0;
for (j4 = 0; j4 < 32; j4++) {
- x7[j4] += carry - (x7[31] >> 4) * L[j4];
- carry = x7[j4] >> 8;
- x7[j4] &= 255;
+ x6[j4] += carry - (x6[31] >> 4) * L[j4];
+ carry = x6[j4] >> 8;
+ x6[j4] &= 255;
}
for (j4 = 0; j4 < 32; j4++)
- x7[j4] -= carry * L[j4];
+ x6[j4] -= carry * L[j4];
for (i5 = 0; i5 < 32; i5++) {
- x7[i5 + 1] += x7[i5] >> 8;
- r3[i5] = x7[i5] & 255;
+ x6[i5 + 1] += x6[i5] >> 8;
+ r3[i5] = x6[i5] & 255;
}
}
function reduce(r3) {
- const x7 = new Float64Array(64);
+ const x6 = new Float64Array(64);
for (let i5 = 0; i5 < 64; i5++)
- x7[i5] = r3[i5];
+ x6[i5] = r3[i5];
for (let i5 = 0; i5 < 64; i5++)
r3[i5] = 0;
- modL(r3, x7);
+ modL(r3, x6);
}
function crypto_sign(sm, m6, n2, sk) {
const d6 = new Uint8Array(64), h6 = new Uint8Array(64), r3 = new Uint8Array(64);
let i5, j4;
- const x7 = new Float64Array(64);
+ const x6 = new Float64Array(64);
const p4 = [gf(), gf(), gf(), gf()];
crypto_hash(d6, sk, 32);
d6[0] &= 248;
@@ -5179,15 +5179,15 @@ function crypto_sign(sm, m6, n2, sk) {
crypto_hash(h6, sm, n2 + 64);
reduce(h6);
for (i5 = 0; i5 < 64; i5++)
- x7[i5] = 0;
+ x6[i5] = 0;
for (i5 = 0; i5 < 32; i5++)
- x7[i5] = r3[i5];
+ x6[i5] = r3[i5];
for (i5 = 0; i5 < 32; i5++) {
for (j4 = 0; j4 < 32; j4++) {
- x7[i5 + j4] += h6[i5] * d6[j4];
+ x6[i5 + j4] += h6[i5] * d6[j4];
}
}
- modL(sm.subarray(32), x7);
+ modL(sm.subarray(32), x6);
return smlen;
}
function unpackpos(r3, p4) {
@@ -5369,19 +5369,19 @@ function secretbox_open(box, nonce, key) {
return void 0;
return m6.subarray(crypto_secretbox_ZEROBYTES);
}
-function crypto_core_ed25519_scalar_reduce(x7) {
- const len = x7.length;
+function crypto_core_ed25519_scalar_reduce(x6) {
+ const len = x6.length;
const z6 = new Float64Array(64);
for (let i5 = 0; i5 < len; i5++)
- z6[i5] = x7[i5];
+ z6[i5] = x6[i5];
const o3 = new Uint8Array(32);
modL(o3, z6);
return o3;
}
-function crypto_core_ed25519_scalar_sub(x7, y6) {
+function crypto_core_ed25519_scalar_sub(x6, y6) {
const z6 = new Float64Array(64);
for (let i5 = 0; i5 < 32; i5++) {
- z6[i5] = x7[i5] - y6[i5];
+ z6[i5] = x6[i5] - y6[i5];
}
const o3 = new Uint8Array(32);
modL(o3, z6);
@@ -5407,7 +5407,7 @@ function crypto_edx25519_sign_detached(m6, skx, pkx) {
const h6 = new Uint8Array(64);
const r3 = new Uint8Array(64);
let i5, j4;
- const x7 = new Float64Array(64);
+ const x6 = new Float64Array(64);
const p4 = [gf(), gf(), gf(), gf()];
const sm = new Uint8Array(n2 + 64);
for (i5 = 0; i5 < n2; i5++)
@@ -5423,15 +5423,15 @@ function crypto_edx25519_sign_detached(m6, skx, pkx) {
crypto_hash(h6, sm, n2 + 64);
reduce(h6);
for (i5 = 0; i5 < 64; i5++)
- x7[i5] = 0;
+ x6[i5] = 0;
for (i5 = 0; i5 < 32; i5++)
- x7[i5] = r3[i5];
+ x6[i5] = r3[i5];
for (i5 = 0; i5 < 32; i5++) {
for (j4 = 0; j4 < 32; j4++) {
- x7[i5 + j4] += h6[i5] * skx[j4];
+ x6[i5 + j4] += h6[i5] * skx[j4];
}
}
- modL(sm.subarray(32), x7);
+ modL(sm.subarray(32), x6);
return sm.subarray(0, 64);
}
function crypto_edx25519_sign_detached_verify(msg, sig, publicKey) {
@@ -5454,14 +5454,14 @@ function crypto_edx25519_sign_detached_verify(msg, sig, publicKey) {
function loadBrowserPrng() {
const cr = typeof self !== "undefined" ? self.crypto || self.msCrypto : null;
const QUOTA = 65536;
- setPRNG(function(x7, n2) {
+ setPRNG(function(x6, n2) {
let i5;
const v3 = new Uint8Array(n2);
for (i5 = 0; i5 < n2; i5 += QUOTA) {
cr.getRandomValues(v3.subarray(i5, i5 + Math.min(n2 - i5, QUOTA)));
}
for (i5 = 0; i5 < n2; i5++)
- x7[i5] = v3[i5];
+ x6[i5] = v3[i5];
for (i5 = 0; i5 < v3.length; i5++)
v3[i5] = 0;
});
@@ -5780,6 +5780,13 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED"] = 2173] = "MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING"] = 2174] = "MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED"] = 2175] = "MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING"] = 2176] = "MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS"] = 2177] = "MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_INPUT_TOKENS_MISMATCH"] = 2178] = "MERCHANT_POST_ORDERS_ID_PAY_INPUT_TOKENS_MISMATCH";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ISSUE_SIG_INVALID"] = 2179] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ISSUE_SIG_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_USE_SIG_INVALID"] = 2180] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_USE_SIG_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH"] = 2181] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH"] = 2182] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH"] = 2200] = "MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID"] = 2201] = "MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_TOKEN_FAMILY_CONFLICT"] = 2225] = "MERCHANT_POST_TOKEN_FAMILY_CONFLICT";
@@ -5824,6 +5831,7 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT"] = 2530] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID"] = 2531] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT"] = 2532] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN"] = 2533] = "MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN"] = 2550] = "MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR"] = 2551] = "MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS"] = 2552] = "MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS";
@@ -5865,6 +5873,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS"] = 2910] = "MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS";
TalerErrorCode2[TalerErrorCode2["AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID"] = 3100] = "AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED"] = 3101] = "AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED";
+ TalerErrorCode2[TalerErrorCode2["AUDITOR_RESOURCE_NOT_FOUND"] = 3102] = "AUDITOR_RESOURCE_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["AUDITOR_URI_MISSING_PATH_COMPONENT"] = 3103] = "AUDITOR_URI_MISSING_PATH_COMPONENT";
TalerErrorCode2[TalerErrorCode2["BANK_SAME_ACCOUNT"] = 5101] = "BANK_SAME_ACCOUNT";
TalerErrorCode2[TalerErrorCode2["BANK_UNALLOWED_DEBIT"] = 5102] = "BANK_UNALLOWED_DEBIT";
TalerErrorCode2[TalerErrorCode2["BANK_NEGATIVE_NUMBER_AMOUNT"] = 5103] = "BANK_NEGATIVE_NUMBER_AMOUNT";
@@ -5909,6 +5919,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["BANK_CHALLENGE_NOT_FOUND"] = 5143] = "BANK_CHALLENGE_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["BANK_TAN_CHALLENGE_EXPIRED"] = 5144] = "BANK_TAN_CHALLENGE_EXPIRED";
TalerErrorCode2[TalerErrorCode2["BANK_NON_ADMIN_SET_TAN_CHANNEL"] = 5145] = "BANK_NON_ADMIN_SET_TAN_CHANNEL";
+ TalerErrorCode2[TalerErrorCode2["BANK_NON_ADMIN_SET_MIN_CASHOUT"] = 5146] = "BANK_NON_ADMIN_SET_MIN_CASHOUT";
+ TalerErrorCode2[TalerErrorCode2["BANK_CONVERSION_AMOUNT_TO_SMALL"] = 5147] = "BANK_CONVERSION_AMOUNT_TO_SMALL";
TalerErrorCode2[TalerErrorCode2["SYNC_ACCOUNT_UNKNOWN"] = 6100] = "SYNC_ACCOUNT_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["SYNC_BAD_IF_NONE_MATCH"] = 6101] = "SYNC_BAD_IF_NONE_MATCH";
TalerErrorCode2[TalerErrorCode2["SYNC_BAD_IF_MATCH"] = 6102] = "SYNC_BAD_IF_MATCH";
@@ -6030,6 +6042,7 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["DONAU_GENERIC_KEYS_MISSING"] = 8607] = "DONAU_GENERIC_KEYS_MISSING";
TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_SIGNATURE_INVALID"] = 8608] = "DONAU_CHARITY_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_NOT_FOUND"] = 8609] = "DONAU_CHARITY_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["DONAU_EXCEEDING_DONATION_LIMIT"] = 8610] = "DONAU_EXCEEDING_DONATION_LIMIT";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_GENERIC_ERROR"] = 9e3] = "LIBEUFIN_NEXUS_GENERIC_ERROR";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION"] = 9001] = "LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_SANDBOX_GENERIC_ERROR"] = 9500] = "LIBEUFIN_SANDBOX_GENERIC_ERROR";
@@ -6259,14 +6272,14 @@ var Amount = class _Amount {
};
function codecForAmountString() {
return {
- decode(x7, c5) {
- if (typeof x7 !== "string") {
- throw new DecodingError(`expected string at ${renderContext(c5)} but got ${typeof x7}`);
+ decode(x6, c5) {
+ if (typeof x6 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c5)} but got ${typeof x6}`);
}
- if (Amounts.parse(x7) === void 0) {
- throw new DecodingError(`invalid amount at ${renderContext(c5)} got "${x7}"`);
+ if (Amounts.parse(x6) === void 0) {
+ throw new DecodingError(`invalid amount at ${renderContext(c5)} got "${x6}"`);
}
- return x7;
+ return x6;
}
};
}
@@ -6328,7 +6341,7 @@ var Amounts = class _Amounts {
if (amounts.length <= 0) {
throw Error("can't sum zero amounts");
}
- const jsonAmounts = amounts.map((x7) => _Amounts.jsonifyAmount(x7));
+ const jsonAmounts = amounts.map((x6) => _Amounts.jsonifyAmount(x6));
return _Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));
}
static sumOrZero(currency, amounts) {
@@ -6338,7 +6351,7 @@ var Amounts = class _Amounts {
saturated: false
};
}
- const jsonAmounts = amounts.map((x7) => _Amounts.jsonifyAmount(x7));
+ const jsonAmounts = amounts.map((x6) => _Amounts.jsonifyAmount(x6));
return _Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));
}
/**
@@ -6363,8 +6376,8 @@ var Amounts = class _Amounts {
};
}
let fraction = firstJ.fraction % amountFractionalBase;
- for (const x7 of rest) {
- const xJ = _Amounts.jsonifyAmount(x7);
+ for (const x6 of rest) {
+ const xJ = _Amounts.jsonifyAmount(x6);
if (xJ.currency.toUpperCase() !== currency.toUpperCase()) {
throw Error(`Mismatched currency: ${xJ.currency} and ${currency}`);
}
@@ -6576,26 +6589,26 @@ var Amounts = class _Amounts {
saturated: false
};
}
- let x7 = a6;
+ let x6 = a6;
let acc = _Amounts.zeroOfCurrency(a6.currency);
while (n2 > 1) {
if (n2 % 2 == 0) {
n2 = n2 / 2;
} else {
n2 = (n2 - 1) / 2;
- const r23 = _Amounts.add(acc, x7);
+ const r23 = _Amounts.add(acc, x6);
if (r23.saturated) {
return r23;
}
acc = r23.amount;
}
- const r22 = _Amounts.add(x7, x7);
+ const r22 = _Amounts.add(x6, x6);
if (r22.saturated) {
return r22;
}
- x7 = r22.amount;
+ x6 = r22.amount;
}
- return _Amounts.add(acc, x7);
+ return _Amounts.add(acc, x6);
}
/**
* Check if the argument is a valid amount in string form.
@@ -8498,13 +8511,13 @@ function canonicalizeBaseUrl(url) {
if (!url.startsWith("http") && !url.startsWith("https")) {
url = "https://" + url;
}
- const x7 = new URL2(url);
- if (!x7.pathname.endsWith("/")) {
- x7.pathname = x7.pathname + "/";
+ const x6 = new URL2(url);
+ if (!x6.pathname.endsWith("/")) {
+ x6.pathname = x6.pathname + "/";
}
- x7.search = "";
- x7.hash = "";
- return x7.href;
+ x6.search = "";
+ x6.hash = "";
+ return x6.href;
}
function canonicalJson(obj) {
obj = JSON.parse(JSON.stringify(obj));
@@ -8542,8 +8555,8 @@ function strcmp(s1, s23) {
}
return 0;
}
-function j2s(x7) {
- return JSON.stringify(x7, void 0, 2);
+function j2s(x6) {
+ return JSON.stringify(x6, void 0, 2);
}
// ../taler-util/lib/logging.js
@@ -8760,11 +8773,11 @@ var ObjectCodecBuilder = class {
/**
* Define a property for the object.
*/
- property(x7, codec) {
+ property(x6, codec) {
if (!codec) {
throw Error("inner codec must be defined");
}
- this.propList.push({ name: x7, codec });
+ this.propList.push({ name: x6, codec });
return this;
}
/**
@@ -8776,18 +8789,18 @@ var ObjectCodecBuilder = class {
build(objectDisplayName) {
const propList = this.propList;
return {
- decode(x7, c5) {
+ decode(x6, c5) {
if (!c5) {
c5 = {
path: [`(${objectDisplayName})`]
};
}
- if (typeof x7 !== "object") {
- throw new DecodingError(`expected object for ${objectDisplayName} at ${renderContext(c5)} but got ${typeof x7}`);
+ if (typeof x6 !== "object") {
+ throw new DecodingError(`expected object for ${objectDisplayName} at ${renderContext(c5)} but got ${typeof x6}`);
}
const obj = {};
for (const prop of propList) {
- const propRawVal = x7[prop.name];
+ const propRawVal = x6[prop.name];
const propVal = prop.codec.decode(propRawVal, joinContext(c5, prop.name));
obj[prop.name] = propVal;
}
@@ -8796,21 +8809,81 @@ var ObjectCodecBuilder = class {
};
}
};
+var UnionCodecBuilder = class {
+ constructor(discriminator, baseCodec) {
+ this.discriminator = discriminator;
+ this.baseCodec = baseCodec;
+ this.alternatives = /* @__PURE__ */ new Map();
+ }
+ /**
+ * Define a property for the object.
+ */
+ alternative(tagValue, codec) {
+ if (!codec) {
+ throw Error("inner codec must be defined");
+ }
+ this.alternatives.set(tagValue, { codec, tagValue });
+ return this;
+ }
+ /**
+ * Return the built codec.
+ *
+ * @param objectDisplayName name of the object that this codec operates on,
+ * used in error messages.
+ */
+ build(objectDisplayName) {
+ const alternatives = this.alternatives;
+ const discriminator = this.discriminator;
+ const baseCodec = this.baseCodec;
+ return {
+ decode(x6, c5) {
+ if (!c5) {
+ c5 = {
+ path: [`(${objectDisplayName})`]
+ };
+ }
+ const d6 = x6[discriminator];
+ if (d6 === void 0) {
+ throw new DecodingError(`expected tag for ${objectDisplayName} at ${renderContext(c5)}.${String(discriminator)}`);
+ }
+ const alt = alternatives.get(d6);
+ if (!alt) {
+ throw new DecodingError(`unknown tag for ${objectDisplayName} ${d6} at ${renderContext(c5)}.${String(discriminator)}`);
+ }
+ const altDecoded = alt.codec.decode(x6);
+ if (baseCodec) {
+ const baseDecoded = baseCodec.decode(x6, c5);
+ return { ...baseDecoded, ...altDecoded };
+ } else {
+ return altDecoded;
+ }
+ }
+ };
+ }
+};
+var UnionCodecPreBuilder = class {
+ discriminateOn(discriminator, baseCodec) {
+ return new UnionCodecBuilder(discriminator, baseCodec);
+ }
+};
function buildCodecForObject() {
return new ObjectCodecBuilder();
}
+function buildCodecForUnion() {
+ return new UnionCodecPreBuilder();
+}
function codecForMap(innerCodec) {
if (!innerCodec) {
throw Error("inner codec must be defined");
}
return {
- decode(x7, c5) {
+ decode(x6, c5) {
const map2 = {};
- if (typeof x7 !== "object") {
+ if (typeof x6 !== "object") {
throw new DecodingError(`expected object at ${renderContext(c5)}`);
}
- for (const i5 in x7) {
- map2[i5] = innerCodec.decode(x7[i5], joinContext(c5, `[${i5}]`));
+ for (const i5 in x6) {
+ map2[i5] = innerCodec.decode(x6[i5], joinContext(c5, `[${i5}]`));
}
return map2;
}
@@ -8821,13 +8894,13 @@ function codecForList(innerCodec) {
throw Error("inner codec must be defined");
}
return {
- decode(x7, c5) {
+ decode(x6, c5) {
const arr = [];
- if (!Array.isArray(x7)) {
+ if (!Array.isArray(x6)) {
throw new DecodingError(`expected array at ${renderContext(c5)}`);
}
- for (const i5 in x7) {
- arr.push(innerCodec.decode(x7[i5], joinContext(c5, `[${i5}]`)));
+ for (const i5 in x6) {
+ arr.push(innerCodec.decode(x6[i5], joinContext(c5, `[${i5}]`)));
}
return arr;
}
@@ -8835,82 +8908,92 @@ function codecForList(innerCodec) {
}
function codecForNumber() {
return {
- decode(x7, c5) {
- if (typeof x7 === "number") {
- return x7;
+ decode(x6, c5) {
+ if (typeof x6 === "number") {
+ return x6;
}
- throw new DecodingError(`expected number at ${renderContext(c5)} but got ${typeof x7}`);
+ throw new DecodingError(`expected number at ${renderContext(c5)} but got ${typeof x6}`);
}
};
}
function codecForBoolean() {
return {
- decode(x7, c5) {
- if (typeof x7 === "boolean") {
- return x7;
+ decode(x6, c5) {
+ if (typeof x6 === "boolean") {
+ return x6;
}
- throw new DecodingError(`expected boolean at ${renderContext(c5)} but got ${typeof x7}`);
+ throw new DecodingError(`expected boolean at ${renderContext(c5)} but got ${typeof x6}`);
}
};
}
function codecForString() {
return {
- decode(x7, c5) {
- if (typeof x7 === "string") {
- return x7;
+ decode(x6, c5) {
+ if (typeof x6 === "string") {
+ return x6;
}
- throw new DecodingError(`expected string at ${renderContext(c5)} but got ${typeof x7}`);
+ throw new DecodingError(`expected string at ${renderContext(c5)} but got ${typeof x6}`);
}
};
}
function codecForAny() {
return {
- decode(x7, c5) {
- return x7;
+ decode(x6, c5) {
+ return x6;
}
};
}
function codecForConstString(s6) {
return {
- decode(x7, c5) {
- if (x7 === s6) {
- return x7;
+ decode(x6, c5) {
+ if (x6 === s6) {
+ return x6;
}
- if (typeof x7 !== "string") {
- throw new DecodingError(`expected string constant "${s6}" at ${renderContext(c5)} but got ${typeof x7}`);
+ if (typeof x6 !== "string") {
+ throw new DecodingError(`expected string constant "${s6}" at ${renderContext(c5)} but got ${typeof x6}`);
}
- throw new DecodingError(`expected string constant "${s6}" at ${renderContext(c5)} but got string value "${x7}"`);
+ throw new DecodingError(`expected string constant "${s6}" at ${renderContext(c5)} but got string value "${x6}"`);
}
};
}
function codecOptional(innerCodec) {
return {
- decode(x7, c5) {
- if (x7 === void 0 || x7 === null) {
+ decode(x6, c5) {
+ if (x6 === void 0 || x6 === null) {
return void 0;
}
- return innerCodec.decode(x7, c5);
+ return innerCodec.decode(x6, c5);
+ }
+ };
+}
+function codecForLazy(innerCodec) {
+ let instance = void 0;
+ return {
+ decode(x6, c5) {
+ if (instance === void 0) {
+ instance = innerCodec();
+ }
+ return instance.decode(x6, c5);
}
};
}
function codecForEither(...alts) {
return {
- decode(x7, c5) {
+ decode(x6, c5) {
for (const alt of alts) {
try {
- return alt.decode(x7, c5);
+ return alt.decode(x6, c5);
} catch (e5) {
continue;
}
}
if (logger.shouldLogTrace()) {
- logger.trace(`offending value: ${j2s(x7)}`);
+ logger.trace(`offending value: ${j2s(x6)}`);
}
throw new DecodingError(`No alternative matched at at ${renderContext(c5)}`);
}
};
}
-var x = codecForEither(codecForString(), codecForNumber());
// ../taler-util/lib/sha256.js
var digestLength = 32;
@@ -9660,11 +9743,11 @@ function durationMul(d6, n2) {
return { d_ms: Math.round(d6.d_ms * n2) };
}
var codecForAbsoluteTime = {
- decode(x7, c5) {
- if (x7 === void 0) {
+ decode(x6, c5) {
+ if (x6 === void 0) {
throw Error(`got undefined and expected absolute time at ${renderContext(c5)}`);
}
- const t_ms = x7.t_ms;
+ const t_ms = x6.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
return { t_ms: "never", [opaque_AbsoluteTime]: true };
@@ -9676,11 +9759,11 @@ var codecForAbsoluteTime = {
}
};
var codecForTimestamp = {
- decode(x7, c5) {
- if (x7 === void 0) {
+ decode(x6, c5) {
+ if (x6 === void 0) {
throw Error(`got undefined and expected timestamp at ${renderContext(c5)}`);
}
- const t_ms = x7.t_ms;
+ const t_ms = x6.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
return { t_s: "never" };
@@ -9688,7 +9771,7 @@ var codecForTimestamp = {
} else if (typeof t_ms === "number") {
return { t_s: Math.floor(t_ms / 1e3) };
}
- const t_s = x7.t_s;
+ const t_s = x6.t_s;
if (typeof t_s === "string") {
if (t_s === "never") {
return { t_s: "never" };
@@ -10021,9 +10104,9 @@ var SignaturePurposeBuilder = class {
function buildSigPS(purposeNum) {
return new SignaturePurposeBuilder(purposeNum);
}
-function bigintToNaclArr(x7, size) {
+function bigintToNaclArr(x6, size) {
const byteArr = new Uint8Array(size);
- const arr = x7.toArray(256).value.reverse();
+ const arr = x6.toArray(256).value.reverse();
byteArr.set(arr, 0);
return byteArr;
}
@@ -10191,10 +10274,10 @@ var AgeRestriction;
return {
commitment: {
mask: ageMask,
- publicKeys: pubs.map((x7) => encodeCrock(x7))
+ publicKeys: pubs.map((x6) => encodeCrock(x6))
},
proof: {
- privateKeys: privs.map((x7) => encodeCrock(x7))
+ privateKeys: privs.map((x6) => encodeCrock(x6))
}
};
}
@@ -10231,10 +10314,10 @@ var AgeRestriction;
return {
commitment: {
mask: ageMask,
- publicKeys: pubs.map((x7) => encodeCrock(x7))
+ publicKeys: pubs.map((x6) => encodeCrock(x6))
},
proof: {
- privateKeys: privs.map((x7) => encodeCrock(x7))
+ privateKeys: privs.map((x6) => encodeCrock(x6))
}
};
}
@@ -10265,10 +10348,10 @@ var AgeRestriction;
return {
commitment: {
mask: commitmentProof.commitment.mask,
- publicKeys: newPubs.map((x7) => encodeCrock(x7))
+ publicKeys: newPubs.map((x6) => encodeCrock(x6))
},
proof: {
- privateKeys: newPrivs.map((x7) => encodeCrock(x7))
+ privateKeys: newPrivs.map((x6) => encodeCrock(x6))
}
};
}
@@ -10844,7 +10927,7 @@ var codecForCurrencySpecificiation = () => buildCodecForObject().property("name"
var codecForURN = codecForString;
var codecForExchangeConfig = () => buildCodecForObject().property("version", codecForString()).property("name", codecForConstString("taler-exchange")).property("implementation", codecOptional(codecForURN())).property("currency", codecForString()).property("currency_specification", codecForCurrencySpecificiation()).property("supported_kyc_requirements", codecForList(codecForString())).build("TalerExchangeApi.ExchangeVersionResponse");
var codecForExchangeKeys = () => buildCodecForObject().property("version", codecForString()).property("base_url", codecForString()).property("currency", codecForString()).build("TalerExchangeApi.ExchangeKeysResponse");
-var codecForAmlRecords = () => buildCodecForObject().property("records", codecForList(codecForAmlRecord())).build("TalerExchangeApi.PublicAccountsResponse");
+var codecForAmlRecords = () => buildCodecForObject().property("records", codecForList(codecForAmlRecord())).build("TalerExchangeApi.AmlRecords");
var codecForAmlRecord = () => buildCodecForObject().property("current_state", codecForNumber()).property("h_payto", codecForString()).property("rowid", codecForNumber()).property("threshold", codecForAmountString()).build("TalerExchangeApi.AmlRecord");
var codecForAmlDecisionDetails = () => buildCodecForObject().property("aml_history", codecForList(codecForAmlDecisionDetail())).property("kyc_attributes", codecForList(codecForKycDetail())).build("TalerExchangeApi.AmlDecisionDetails");
var codecForAmlDecisionDetail = () => buildCodecForObject().property("justification", codecForString()).property("new_state", codecForNumber()).property("decision_time", codecForTimestamp).property("new_threshold", codecForAmountString()).property("decider_pub", codecForString()).build("TalerExchangeApi.AmlDecisionDetail");
@@ -10866,13 +10949,13 @@ var TalerCorebankApi;
})(TanChannel = TalerCorebankApi2.TanChannel || (TalerCorebankApi2.TanChannel = {}));
})(TalerCorebankApi || (TalerCorebankApi = {}));
var TalerExchangeApi;
-(function(TalerExchangeApi6) {
+(function(TalerExchangeApi2) {
let AmlState;
(function(AmlState2) {
AmlState2[AmlState2["normal"] = 0] = "normal";
AmlState2[AmlState2["pending"] = 1] = "pending";
AmlState2[AmlState2["frozen"] = 2] = "frozen";
- })(AmlState = TalerExchangeApi6.AmlState || (TalerExchangeApi6.AmlState = {}));
+ })(AmlState = TalerExchangeApi2.AmlState || (TalerExchangeApi2.AmlState = {}));
})(TalerExchangeApi || (TalerExchangeApi = {}));
var TalerMerchantApi;
(function(TalerMerchantApi2) {
@@ -11126,31 +11209,31 @@ var ContractTermsUtil;
}
} else if (typeof dup === "object" && dup != null) {
if (typeof dup.$forgettable === "object") {
- for (const x7 of Object.keys(dup.$forgettable)) {
- if (!pred([...path, x7])) {
+ for (const x6 of Object.keys(dup.$forgettable)) {
+ if (!pred([...path, x6])) {
continue;
}
if (!dup.$forgotten) {
dup.$forgotten = {};
}
- if (!dup.$forgotten[x7]) {
- const membValCanon = stringToBytes(canonicalJson(scrub(dup[x7])) + "\0");
- const membSalt = stringToBytes(dup.$forgettable[x7] + "\0");
+ if (!dup.$forgotten[x6]) {
+ const membValCanon = stringToBytes(canonicalJson(scrub(dup[x6])) + "\0");
+ const membSalt = stringToBytes(dup.$forgettable[x6] + "\0");
const h6 = kdf(64, membValCanon, membSalt, new Uint8Array([]));
- dup.$forgotten[x7] = encodeCrock(h6);
+ dup.$forgotten[x6] = encodeCrock(h6);
}
- delete dup[x7];
- delete dup.$forgettable[x7];
+ delete dup[x6];
+ delete dup.$forgettable[x6];
}
if (Object.keys(dup.$forgettable).length === 0) {
delete dup.$forgettable;
}
}
- for (const x7 of Object.keys(dup)) {
- if (x7.startsWith("$")) {
+ for (const x6 of Object.keys(dup)) {
+ if (x6.startsWith("$")) {
continue;
}
- dup[x7] = forgetAllImpl(dup[x7], [...path, x7], pred);
+ dup[x6] = forgetAllImpl(dup[x6], [...path, x6], pred);
}
}
return dup;
@@ -11178,11 +11261,11 @@ var ContractTermsUtil;
}
}
}
- for (const x7 of Object.keys(dup)) {
- if (x7.startsWith("$")) {
+ for (const x6 of Object.keys(dup)) {
+ if (x6.startsWith("$")) {
continue;
}
- dup[x7] = saltForgettable(dup[x7]);
+ dup[x6] = saltForgettable(dup[x6]);
}
}
return dup;
@@ -11203,7 +11286,7 @@ var ContractTermsUtil;
return true;
}
if (Array.isArray(anyJson)) {
- return anyJson.every((x7) => validateForgettable(x7));
+ return anyJson.every((x6) => validateForgettable(x6));
}
if (typeof anyJson === "object") {
for (const k6 of Object.keys(anyJson)) {
@@ -11348,7 +11431,7 @@ function getErrorDetailFromException(e5) {
const err = makeErrorDetail(TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION, {}, `unexpected exception (not an exception, ${excString})`);
return err;
}
-function assertUnreachable(x7) {
+function assertUnreachable(x6) {
throw new Error("Didn't expect to get here");
}
@@ -11356,8 +11439,8 @@ function assertUnreachable(x7) {
var fnutil;
(function(fnutil2) {
function all(arr, f3) {
- for (const x7 of arr) {
- if (!f3(x7)) {
+ for (const x6 of arr) {
+ if (!f3(x6)) {
return false;
}
}
@@ -11365,8 +11448,8 @@ var fnutil;
}
fnutil2.all = all;
function any(arr, f3) {
- for (const x7 of arr) {
- if (f3(x7)) {
+ for (const x6 of arr) {
+ if (f3(x6)) {
return true;
}
}
@@ -11427,6 +11510,7 @@ var TransactionMinorState;
TransactionMinorState2["RefundAvailable"] = "refund-available";
TransactionMinorState2["AcceptRefund"] = "accept-refund";
TransactionMinorState2["PaidByOther"] = "paid-by-other";
+ TransactionMinorState2["CompletedByOtherWallet"] = "completed-by-other-wallet";
})(TransactionMinorState || (TransactionMinorState = {}));
var TransactionAction;
(function(TransactionAction2) {
@@ -11444,7 +11528,6 @@ var TransactionType;
TransactionType2["Payment"] = "payment";
TransactionType2["Refund"] = "refund";
TransactionType2["Refresh"] = "refresh";
- TransactionType2["Reward"] = "reward";
TransactionType2["Deposit"] = "deposit";
TransactionType2["PeerPushDebit"] = "peer-push-debit";
TransactionType2["PeerPushCredit"] = "peer-push-credit";
@@ -11620,6 +11703,9 @@ function addPaginationParams(url, pagination) {
const limit = !pagination || !pagination.limit || pagination.limit === 0 ? 5 : Math.abs(pagination.limit);
url.searchParams.set("delta", String(order * limit));
}
+var nullEvictor = {
+ notifySuccess: () => Promise.resolve()
+};
// ../taler-util/lib/http-client/bank-conversion.js
var TalerBankConversionCacheEviction;
@@ -11678,18 +11764,49 @@ var TalerMerchantManagementCacheEviction;
TalerMerchantManagementCacheEviction2[TalerMerchantManagementCacheEviction2["DELETE_INSTANCE"] = 28] = "DELETE_INSTANCE";
})(TalerMerchantManagementCacheEviction || (TalerMerchantManagementCacheEviction = {}));
+// ../taler-util/lib/http-client/challenger.js
+var ChallengerCacheEviction;
+(function(ChallengerCacheEviction2) {
+ ChallengerCacheEviction2[ChallengerCacheEviction2["CREATE_CHALLENGE"] = 0] = "CREATE_CHALLENGE";
+})(ChallengerCacheEviction || (ChallengerCacheEviction = {}));
+
// ../taler-util/lib/http-client/exchange.js
+var TalerExchangeCacheEviction;
+(function(TalerExchangeCacheEviction2) {
+ TalerExchangeCacheEviction2[TalerExchangeCacheEviction2["CREATE_DESCISION"] = 0] = "CREATE_DESCISION";
+})(TalerExchangeCacheEviction || (TalerExchangeCacheEviction = {}));
var TalerExchangeHttpClient = class {
- constructor(baseUrl, httpClient) {
+ constructor(baseUrl, httpClient, cacheEvictor) {
this.baseUrl = baseUrl;
this.PROTOCOL_VERSION = "18:0:1";
this.httpLib = httpClient ?? createPlatformHttpLib();
+ this.cacheEvictor = cacheEvictor ?? nullEvictor;
}
isCompatible(version) {
const compare2 = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);
return compare2?.compatible ?? false;
}
/**
+ * https://docs.taler.net/core/api-exchange.html#get--seed
+ *
+ */
+ async getSeed() {
+ const url = new URL(`seed`, this.baseUrl);
+ const resp = await this.httpLib.fetch(url.href, {
+ method: "GET"
+ });
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ const buffer = await resp.bytes();
+ const uintar = new Uint8Array(buffer);
+ return opFixedSuccess(uintar);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
+ }
+ }
+ /**
* https://docs.taler.net/core/api-exchange.html#get--config
*
*/
@@ -11762,8 +11879,8 @@ var TalerExchangeHttpClient = class {
* https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decision-$H_PAYTO
*
*/
- async getDecisionDetails(auth, account2) {
- const url = new URL(`aml/${auth.id}/decision/${account2}`, this.baseUrl);
+ async getDecisionDetails(auth, account) {
+ const url = new URL(`aml/${auth.id}/decision/${account}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
headers: {
@@ -11829,8 +11946,8 @@ function buildDecisionSignature(key, decision) {
}
// ../taler-util/lib/http-client/officer-account.js
-async function unlockOfficerAccount(account2, password) {
- const rawKey = decodeCrock(account2);
+async function unlockOfficerAccount(account, password) {
+ const rawKey = decodeCrock(account);
const rawPassword = stringToBytes(password);
const signingKey = await decryptWithDerivedKey(rawKey, rawPassword, password).catch((e5) => {
throw new UnwrapKeyError(e5.message);
@@ -11861,12 +11978,12 @@ var UnwrapKeyError = class extends Error {
var jedLib = __toESM(require_jed(), 1);
var logger9 = new Logger("i18n/index.ts");
var jed = void 0;
-function setupI18n(lang, strings) {
+function setupI18n(lang, strings2) {
lang = lang.replace("_", "-");
- if (!strings[lang]) {
- strings[lang] = {};
+ if (!strings2[lang]) {
+ strings2[lang] = {};
}
- jed = new jedLib.Jed(strings[lang]);
+ jed = new jedLib.Jed(strings2[lang]);
}
function toI18nString(stringSeq) {
let s6 = "";
@@ -11905,13 +12022,13 @@ function replacePlaceholderWithValues(translation, childArray) {
const tr = translation.split(/%(\d+)\$s/);
const placeholderChildren = [];
for (let i5 = 0; i5 < childArray.length; i5++) {
- const x7 = childArray[i5];
- if (x7 === void 0) {
+ const x6 = childArray[i5];
+ if (x6 === void 0) {
continue;
- } else if (typeof x7 === "string") {
+ } else if (typeof x6 === "string") {
continue;
} else {
- placeholderChildren.push(x7);
+ placeholderChildren.push(x6);
}
}
const result = [];
@@ -11957,6 +12074,7 @@ var NotificationType;
NotificationType2["TransactionStateTransition"] = "transaction-state-transition";
NotificationType2["WithdrawalOperationTransition"] = "withdrawal-operation-transition";
NotificationType2["ExchangeStateTransition"] = "exchange-state-transition";
+ NotificationType2["Idle"] = "idle";
NotificationType2["TaskObservabilityEvent"] = "task-observability-event";
NotificationType2["RequestObservabilityEvent"] = "request-observability-event";
})(NotificationType || (NotificationType = {}));
@@ -11982,6 +12100,61 @@ var ObservabilityEventType;
ObservabilityEventType2["Message"] = "message";
})(ObservabilityEventType || (ObservabilityEventType = {}));
+// ../taler-util/lib/observability.js
+var seqId = 1e3;
+var ObservableHttpClientLibrary = class {
+ constructor(impl, oc) {
+ this.impl = impl;
+ this.oc = oc;
+ this.cancelatorById = /* @__PURE__ */ new Map();
+ }
+ cancelRequest(id) {
+ const cancelator = this.cancelatorById.get(id);
+ if (!cancelator)
+ return;
+ cancelator.cancel();
+ }
+ async fetch(url, opt) {
+ const id = `req-${seqId}`;
+ seqId = seqId + 1;
+ const cancelator = CancellationToken.create();
+ if (opt?.cancellationToken) {
+ opt.cancellationToken.onCancelled(cancelator.cancel);
+ }
+ this.cancelatorById.set(id, cancelator);
+ this.oc.observe({
+ id,
+ when: AbsoluteTime.now(),
+ type: ObservabilityEventType.HttpFetchStart,
+ url
+ });
+ const optsWithCancel = opt ?? {};
+ optsWithCancel.cancellationToken = cancelator.token;
+ try {
+ const res = await this.impl.fetch(url, optsWithCancel);
+ this.oc.observe({
+ id,
+ when: AbsoluteTime.now(),
+ type: ObservabilityEventType.HttpFetchFinishSuccess,
+ url,
+ status: res.status
+ });
+ return res;
+ } catch (e5) {
+ this.oc.observe({
+ id,
+ when: AbsoluteTime.now(),
+ type: ObservabilityEventType.HttpFetchFinishError,
+ url,
+ error: getErrorDetailFromException(e5)
+ });
+ throw e5;
+ } finally {
+ this.cancelatorById.delete(id);
+ }
+ }
+};
+
// ../taler-util/lib/timer.js
var logger10 = new Logger("timer.ts");
var IntervalHandle = class {
@@ -12149,6 +12322,10 @@ init_hooks_module();
init_preact_module();
init_hooks_module();
init_preact_module();
+init_hooks_module();
+init_preact_module();
+init_hooks_module();
+init_preact_module();
init_preact_module();
init_preact_module();
init_hooks_module();
@@ -12168,19 +12345,17 @@ init_preact_module();
init_hooks_module();
init_preact_module();
init_preact_module();
-init_hooks_module();
-init_compat_module();
init_preact_module();
init_hooks_module();
init_preact_module();
-init_preact_module();
+init_hooks_module();
init_preact_module();
init_preact_module();
init_preact_module();
init_hooks_module();
init_preact_module();
+init_compat_module();
init_preact_module();
-init_hooks_module();
init_preact_module();
init_preact_module();
init_preact_module();
@@ -12194,6 +12369,7 @@ init_preact_module();
init_preact_module();
init_preact_module();
init_preact_module();
+init_preact_module();
init_hooks_module();
var __defProp2 = Object.defineProperty;
var __export2 = (target, all) => {
@@ -12540,10 +12716,10 @@ var GLOBAL_NOTIFICATION_TIMEOUT = Duration.fromSpec({
seconds: 5
});
function updateInStorage(n2) {
- const h41 = hash3(n2);
+ const h43 = hash3(n2);
const mem = storage3.get(NOTIFICATION_KEY) ?? /* @__PURE__ */ new Map();
const newState = new Map(mem);
- newState.set(h41, n2);
+ newState.set(h43, n2);
storage3.set(NOTIFICATION_KEY, newState);
}
function notify(notif) {
@@ -12624,17 +12800,7 @@ function hash3(msg) {
}
return hashCode(str);
}
-function errorMap(resp, map2) {
- notify({
- type: "error",
- title: map2(resp.case),
- description: resp.detail.hint,
- debug: resp.detail,
- when: AbsoluteTime.now()
- });
-}
-function useLocalNotification() {
- const { i18n: i18n2 } = useTranslationContext();
+function useLocalNotificationHandler() {
const [value, setter] = p3();
const notif = !value ? void 0 : {
message: value,
@@ -12642,21 +12808,16 @@ function useLocalNotification() {
setter(void 0);
}
};
- async function errorHandling(cb) {
- try {
- return await cb(errorMap);
- } catch (error2) {
- if (error2 instanceof TalerError) {
- notify(buildUnifiedRequestErrorMessage(i18n2, error2));
- } else {
- notifyError(
- i18n2.str`Operation failed, please report`,
- error2 instanceof Error ? error2.message : JSON.stringify(error2)
- );
- }
- }
+ function makeHandler(onClick, onOperationSuccess, onOperationFail, onOperationComplete) {
+ return {
+ onClick,
+ onNotification: setter,
+ onOperationFail,
+ onOperationSuccess,
+ onOperationComplete
+ };
}
- return [notif, setter, errorHandling];
+ return [notif, makeHandler, setter];
}
function buildUnifiedRequestErrorMessage(i18n2, cause) {
let result;
@@ -13063,6 +13224,7 @@ var BrowserFetchHttpLib = class {
const requestHeader = options?.headers;
const requestTimeout = options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);
const requestCancel = options?.cancellationToken;
+ const requestRedirect = options?.redirect;
const parsedUrl = new URL(requestUrl);
if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {
throw TalerError.fromDetail(
@@ -13111,7 +13273,8 @@ var BrowserFetchHttpLib = class {
headers: requestHeadersMap,
body: myBody,
method: requestMethod,
- signal: controller.signal
+ signal: controller.signal,
+ redirect: requestRedirect
});
if (timeoutId) {
clearTimeout(timeoutId);
@@ -13197,10 +13360,33 @@ function makeJsonHandler(response, requestUrl, requestMethod) {
return responseJson;
};
}
+function urlPattern(pattern, reverse) {
+ const url = reverse;
+ return {
+ pattern: new RegExp(pattern),
+ url
+ };
+}
var nullRountDef = {
pattern: new RegExp(/.*/),
url: () => ""
};
+function findMatch(pagesMap, pageList, path, params) {
+ for (let idx = 0; idx < pageList.length; idx++) {
+ const name = pageList[idx];
+ const found = pagesMap[name].pattern.exec(path);
+ if (found !== null) {
+ const values = {};
+ if (found.groups !== void 0) {
+ Object.entries(found.groups).forEach(([key, value]) => {
+ values[key] = value;
+ });
+ }
+ return { name, parent: pagesMap, values, params };
+ }
+ }
+ return void 0;
+}
var Context = B({ request: defaultRequestHandler });
function buildFormatLongFn(args) {
return function() {
@@ -14272,7 +14458,7 @@ var formatters2 = {
}
},
// Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
- x: function x5(date, token, _localize, options) {
+ x: function x4(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
switch (token) {
@@ -21773,20 +21959,187 @@ var TranslationProvider = ({
});
};
var useTranslationContext = () => q2(Context2);
+var ActiviyTracker = class {
+ constructor() {
+ this.observers = new Array();
+ this.notify = this.notify.bind(this);
+ this.subscribe = this.subscribe.bind(this);
+ }
+ notify(data) {
+ this.observers.forEach((observer) => observer(data));
+ }
+ subscribe(func) {
+ this.observers.push(func);
+ return () => {
+ this.observers.forEach((observer, index) => {
+ if (observer === func) {
+ this.observers.splice(index, 1);
+ }
+ });
+ };
+ }
+};
var BankContext = B(void 0);
+var ChallengerContext = B(void 0);
var MerchantContext = B(void 0);
+var ExchangeContext = B(void 0);
+var useExchangeApiContext = () => q2(ExchangeContext);
+var CONFIG_FAIL_TRY_AGAIN_MS4 = 5e3;
+var ExchangeApiProvider = ({
+ baseUrl,
+ children,
+ evictors = {},
+ frameOnError
+}) => {
+ const [checked, setChecked] = p3();
+ const { i18n: i18n2 } = useTranslationContext();
+ const { getRemoteConfig, VERSION: VERSION2, lib, cancelRequest, onActivity } = buildExchangeApiClient(baseUrl, evictors);
+ h2(() => {
+ let keepRetrying = true;
+ async function testConfig() {
+ try {
+ const config = await getRemoteConfig();
+ if (LibtoolVersion.compare(VERSION2, config.version)) {
+ setChecked({ type: "ok", config, hints: [] });
+ } else {
+ setChecked({
+ type: "incompatible",
+ result: config,
+ supported: VERSION2
+ });
+ }
+ } catch (error2) {
+ if (error2 instanceof TalerError) {
+ if (keepRetrying) {
+ setTimeout(() => {
+ testConfig();
+ }, CONFIG_FAIL_TRY_AGAIN_MS4);
+ }
+ setChecked({ type: "error", error: error2 });
+ } else {
+ setChecked({ type: "error", error: TalerError.fromException(error2) });
+ }
+ }
+ }
+ testConfig();
+ return () => {
+ keepRetrying = false;
+ };
+ }, []);
+ if (checked === void 0) {
+ return h(frameOnError, {
+ children: h("div", {}, "checking compatibility with server...")
+ });
+ }
+ if (checked.type === "error") {
+ return h(frameOnError, {
+ children: h(ErrorLoading, { error: checked.error, showDetail: true })
+ });
+ }
+ if (checked.type === "incompatible") {
+ return h(frameOnError, {
+ children: h(
+ "div",
+ {},
+ i18n2.str`The server version is not supported. Supported version "${checked.supported}", server version "${checked.result.version}"`
+ )
+ });
+ }
+ const value = {
+ url: baseUrl,
+ config: checked.config,
+ onActivity,
+ lib,
+ cancelRequest,
+ hints: checked.hints
+ };
+ return h(ExchangeContext.Provider, {
+ value,
+ children
+ });
+};
+function buildExchangeApiClient(url, evictors) {
+ const httpFetch = new BrowserFetchHttpLib({
+ enableThrottling: true,
+ requireTls: false
+ });
+ const tracker = new ActiviyTracker();
+ const httpLib = new ObservableHttpClientLibrary(httpFetch, {
+ observe(ev) {
+ tracker.notify(ev);
+ }
+ });
+ const ex = new TalerExchangeHttpClient(url.href, httpLib, evictors.exchange);
+ async function getRemoteConfig() {
+ const resp = await ex.getConfig();
+ if (resp.type === "fail") {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ }
+ return resp.body;
+ }
+ return {
+ getRemoteConfig,
+ VERSION: ex.PROTOCOL_VERSION,
+ lib: {
+ exchange: ex
+ },
+ onActivity: tracker.subscribe,
+ cancelRequest: httpLib.cancelRequest
+ };
+}
var Context3 = B(void 0);
+var useNavigationContext = () => q2(Context3);
+function useCurrentLocation(pagesMap) {
+ const pageList = Object.keys(pagesMap);
+ const { path, params } = useNavigationContext();
+ return findMatch(pagesMap, pageList, path, params);
+}
function getPathAndParamsFromWindow() {
const path = typeof window !== "undefined" ? window.location.hash.substring(1) : "/";
const params = {};
if (typeof window !== "undefined") {
for (const [key, value] of new URLSearchParams(window.location.search)) {
- params[key] = value;
+ if (!params[key]) {
+ params[key] = [];
+ }
+ params[key].push(value);
}
}
return { path, params };
}
var { path: initialPath, params: initialParams } = getPathAndParamsFromWindow();
+var PopStateEventType = "popstate";
+var BrowserHashNavigationProvider = ({
+ children
+}) => {
+ const [{ path, params }, setState] = p3({
+ path: initialPath,
+ params: initialParams
+ });
+ if (typeof window === "undefined") {
+ throw Error(
+ "Can't use BrowserHashNavigationProvider if there is no window object"
+ );
+ }
+ function navigateTo(path2) {
+ const { params: params2 } = getPathAndParamsFromWindow();
+ setState({ path: path2, params: params2 });
+ window.location.href = path2;
+ }
+ h2(() => {
+ function eventListener() {
+ setState(getPathAndParamsFromWindow());
+ }
+ window.addEventListener(PopStateEventType, eventListener);
+ return () => {
+ window.removeEventListener(PopStateEventType, eventListener);
+ };
+ }, []);
+ return h(Context3.Provider, {
+ value: { path, params, navigateTo },
+ children
+ });
+};
var Context4 = B(void 0);
var utils_exports = {};
__export2(utils_exports, {
@@ -21809,8 +22162,8 @@ function compose(hook, viewMap) {
return ComposedComponent;
}
return (p4) => {
- const h41 = withHook(() => hook(p4));
- return h41();
+ const h43 = withHook(() => hook(p4));
+ return h43();
};
}
function recursive(hook) {
@@ -21826,8 +22179,8 @@ function recursive(hook) {
return ComposedComponent;
}
return (p4) => {
- const h41 = withHook(() => hook(p4));
- return h41();
+ const h43 = withHook(() => hook(p4));
+ return h43();
};
}
function saveVNodeForInspection(obj) {
@@ -22128,8 +22481,8 @@ function Header({ title, profileURL, notificationURL, iconLinkURL, sites, onLogo
function Footer({ testingUrlKey, VERSION: VERSION2, GIT_HASH: GIT_HASH2 }) {
const { i18n: i18n2 } = useTranslationContext();
const testingUrl = testingUrlKey && typeof localStorage !== "undefined" && localStorage.getItem(testingUrlKey) ? localStorage.getItem(testingUrlKey) ?? void 0 : void 0;
- const versionText2 = VERSION2 ? GIT_HASH2 ? /* @__PURE__ */ h("a", { href: `https://git.taler.net/wallet-core.git/tree/?id=${GIT_HASH2}`, target: "_blank", rel: "noreferrer noopener" }, "Version ", VERSION2, " (", GIT_HASH2.substring(0, 8), ")") : VERSION2 : "";
- return /* @__PURE__ */ h("footer", { class: "bottom-4 my-4 mx-8 bg-slate-200" }, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("p", { class: "text-xs leading-5 text-gray-400" }, /* @__PURE__ */ h(i18n2.Translate, null, "Learn more about ", /* @__PURE__ */ h("a", { target: "_blank", rel: "noreferrer noopener", class: "font-semibold text-gray-500 hover:text-gray-400", href: "https://taler.net" }, "GNU Taler")))), /* @__PURE__ */ h("div", { style: "flex-grow:1" }), /* @__PURE__ */ h("p", { class: "text-xs leading-5 text-gray-400" }, "Copyright \xA9 2014\u20142023 Taler Systems SA. ", versionText2, " "), testingUrlKey && testingUrl && /* @__PURE__ */ h("p", { class: "text-xs leading-5 text-gray-300" }, "Testing with ", testingUrl, " ", /* @__PURE__ */ h(
+ const versionText = VERSION2 ? GIT_HASH2 ? /* @__PURE__ */ h("a", { href: `https://git.taler.net/wallet-core.git/tree/?id=${GIT_HASH2}`, target: "_blank", rel: "noreferrer noopener" }, "Version ", VERSION2, " (", GIT_HASH2.substring(0, 8), ")") : VERSION2 : "";
+ return /* @__PURE__ */ h("footer", { class: "bottom-4 my-4 mx-8 bg-slate-200" }, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("p", { class: "text-xs leading-5 text-gray-400" }, /* @__PURE__ */ h(i18n2.Translate, null, "Learn more about ", /* @__PURE__ */ h("a", { target: "_blank", rel: "noreferrer noopener", class: "font-semibold text-gray-500 hover:text-gray-400", href: "https://taler.net" }, "GNU Taler")))), /* @__PURE__ */ h("div", { style: "flex-grow:1" }), /* @__PURE__ */ h("p", { class: "text-xs leading-5 text-gray-400" }, "Copyright \xA9 2014\u20142023 Taler Systems SA. ", versionText, " "), testingUrlKey && testingUrl && /* @__PURE__ */ h("p", { class: "text-xs leading-5 text-gray-300" }, "Testing with ", testingUrl, " ", /* @__PURE__ */ h(
"a",
{
href: "",
@@ -22142,6 +22495,88 @@ function Footer({ testingUrlKey, VERSION: VERSION2, GIT_HASH: GIT_HASH2 }) {
"stop testing"
)));
}
+function Button({
+ handler,
+ children,
+ disabled,
+ onClick: clickEvent,
+ ...rest
+}) {
+ const { i18n: i18n2 } = useTranslationContext();
+ const [running, setRunning] = p3(false);
+ return /* @__PURE__ */ h(
+ "button",
+ {
+ ...rest,
+ disabled: disabled || running,
+ onClick: (e22) => {
+ e22.preventDefault();
+ if (!handler) {
+ return;
+ }
+ setRunning(true);
+ handler.onClick().then((resp) => {
+ if (resp) {
+ if (resp.type === "ok") {
+ const result = resp;
+ const msg = handler.onOperationSuccess(result);
+ if (msg) {
+ notifyInfo(msg);
+ }
+ }
+ if (resp.type === "fail") {
+ const d32 = "detail" in resp ? resp.detail : void 0;
+ const title = !handler.onOperationFail ? "Unexpected error." : handler.onOperationFail(resp);
+ handler.onNotification({
+ title,
+ type: "error",
+ description: d32 && d32.hint ? d32.hint : void 0,
+ debug: d32,
+ when: AbsoluteTime.now()
+ });
+ }
+ }
+ if (handler.onOperationComplete) {
+ handler.onOperationComplete();
+ }
+ setRunning(false);
+ }).catch((error2) => {
+ console.error(error2);
+ if (error2 instanceof TalerError) {
+ handler.onNotification(
+ buildUnifiedRequestErrorMessage(i18n2, error2)
+ );
+ } else {
+ const description = error2 instanceof Error ? error2.message : String(error2);
+ handler.onNotification({
+ title: i18n2.str`Operation failed`,
+ type: "error",
+ description,
+ when: AbsoluteTime.now()
+ });
+ }
+ if (handler.onOperationComplete) {
+ handler.onOperationComplete();
+ }
+ setRunning(false);
+ });
+ }
+ },
+ running ? /* @__PURE__ */ h(Wait, null) : children
+ );
+}
+function Wait() {
+ return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("style", null, `
+ #l1 { width: 120px;
+ height: 20px;
+ -webkit-mask: radial-gradient(circle closest-side, currentColor 90%, #0000) left/20% 100%;
+ background: linear-gradient(currentColor 0 0) left/0% 100% no-repeat #ddd;
+ animation: l17 2s infinite steps(6);
+ }
+ @keyframes l17 {
+ 100% {background-size:120% 100%}
+`), /* @__PURE__ */ h("div", { id: "l1" }));
+}
function LocalNotificationBanner({ notification, showDebug }) {
if (!notification)
return /* @__PURE__ */ h(p2, null);
@@ -22177,7 +22612,10 @@ function AttentionByType({ msg }) {
}, timeout: GLOBAL_NOTIFICATION_TIMEOUT });
}
}
-function Calendar({ value, onChange }) {
+function Calendar({
+ value,
+ onChange
+}) {
const today = startOfDay(/* @__PURE__ */ new Date());
const selected = !value ? today : new Date(AbsoluteTime.toStampMs(value));
const [showingDate, setShowingDate] = p3(selected);
@@ -22211,7 +22649,23 @@ function Calendar({ value, onChange }) {
}
},
/* @__PURE__ */ h("span", { class: "sr-only" }, i18n2.str`Previous year`),
- /* @__PURE__ */ h("svg", { class: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true" }, /* @__PURE__ */ h("path", { "fill-rule": "evenodd", d: "M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z", "clip-rule": "evenodd" }))
+ /* @__PURE__ */ h(
+ "svg",
+ {
+ class: "h-5 w-5",
+ viewBox: "0 0 20 20",
+ fill: "currentColor",
+ "aria-hidden": "true"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "fill-rule": "evenodd",
+ d: "M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z",
+ "clip-rule": "evenodd"
+ }
+ )
+ )
), /* @__PURE__ */ h("div", { class: "flex-auto text-sm font-semibold" }, year), /* @__PURE__ */ h(
"button",
{
@@ -22222,7 +22676,23 @@ function Calendar({ value, onChange }) {
}
},
/* @__PURE__ */ h("span", { class: "sr-only" }, i18n2.str`Next year`),
- /* @__PURE__ */ h("svg", { class: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true" }, /* @__PURE__ */ h("path", { "fill-rule": "evenodd", d: "M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z", "clip-rule": "evenodd" }))
+ /* @__PURE__ */ h(
+ "svg",
+ {
+ class: "h-5 w-5",
+ viewBox: "0 0 20 20",
+ fill: "currentColor",
+ "aria-hidden": "true"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "fill-rule": "evenodd",
+ d: "M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z",
+ "clip-rule": "evenodd"
+ }
+ )
+ )
)), /* @__PURE__ */ h("div", { class: "mt-4 flex items-center text-gray-900" }, /* @__PURE__ */ h(
"button",
{
@@ -22233,7 +22703,23 @@ function Calendar({ value, onChange }) {
}
},
/* @__PURE__ */ h("span", { class: "sr-only" }, i18n2.str`Previous month`),
- /* @__PURE__ */ h("svg", { class: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true" }, /* @__PURE__ */ h("path", { "fill-rule": "evenodd", d: "M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z", "clip-rule": "evenodd" }))
+ /* @__PURE__ */ h(
+ "svg",
+ {
+ class: "h-5 w-5",
+ viewBox: "0 0 20 20",
+ fill: "currentColor",
+ "aria-hidden": "true"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "fill-rule": "evenodd",
+ d: "M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z",
+ "clip-rule": "evenodd"
+ }
+ )
+ )
), /* @__PURE__ */ h("div", { class: "flex-auto text-sm font-semibold" }, monthNames[month]), /* @__PURE__ */ h(
"button",
{
@@ -22244,11 +22730,28 @@ function Calendar({ value, onChange }) {
}
},
/* @__PURE__ */ h("span", { class: "sr-only" }, i18n2.str`Next month`),
- /* @__PURE__ */ h("svg", { class: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true" }, /* @__PURE__ */ h("path", { "fill-rule": "evenodd", d: "M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z", "clip-rule": "evenodd" }))
- )), /* @__PURE__ */ h("div", { class: "mt-6 grid grid-cols-7 text-xs leading-6 text-gray-500" }, /* @__PURE__ */ h("div", null, "M"), /* @__PURE__ */ h("div", null, "T"), /* @__PURE__ */ h("div", null, "W"), /* @__PURE__ */ h("div", null, "T"), /* @__PURE__ */ h("div", null, "F"), /* @__PURE__ */ h("div", null, "S"), /* @__PURE__ */ h("div", null, "S")), /* @__PURE__ */ h("div", { class: "isolate mt-2" }, /* @__PURE__ */ h("div", { class: "grid grid-cols-7 gap-px rounded-lg bg-gray-200 text-sm shadow ring-1 ring-gray-200" }, daysInMonth.map((current) => /* @__PURE__ */ h(
+ /* @__PURE__ */ h(
+ "svg",
+ {
+ class: "h-5 w-5",
+ viewBox: "0 0 20 20",
+ fill: "currentColor",
+ "aria-hidden": "true"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "fill-rule": "evenodd",
+ d: "M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z",
+ "clip-rule": "evenodd"
+ }
+ )
+ )
+ )), /* @__PURE__ */ h("div", { class: "mt-6 grid grid-cols-7 text-xs leading-6 text-gray-500" }, /* @__PURE__ */ h("div", null, "M"), /* @__PURE__ */ h("div", null, "T"), /* @__PURE__ */ h("div", null, "W"), /* @__PURE__ */ h("div", null, "T"), /* @__PURE__ */ h("div", null, "F"), /* @__PURE__ */ h("div", null, "S"), /* @__PURE__ */ h("div", null, "S")), /* @__PURE__ */ h("div", { class: "isolate mt-2" }, /* @__PURE__ */ h("div", { class: "grid grid-cols-7 gap-px rounded-lg bg-gray-200 text-sm shadow ring-1 ring-gray-200" }, daysInMonth.map((current, idx) => /* @__PURE__ */ h(
"button",
{
type: "button",
+ key: idx,
"data-month": isSameMonth(current, showingDate),
"data-today": isSameDay(current, today),
"data-selected": isSameDay(current, selected),
@@ -22267,7 +22770,7 @@ function Calendar({ value, onChange }) {
)
))), daysInMonth.length < 40 ? /* @__PURE__ */ h("div", { class: "w-7 h-7 m-1.5" }) : void 0));
}
-var FormContext = B({});
+var FormContext = B(void 0);
function FormProvider({
children,
initial: initial2,
@@ -22304,26 +22807,45 @@ function FormProvider({
)
);
}
+function Group({
+ before,
+ after,
+ label,
+ tooltip,
+ help,
+ fields
+}) {
+ return /* @__PURE__ */ h("div", { class: "sm:col-span-6 p-4 rounded-lg border-r-2 border-2 bg-gray-50" }, before !== void 0 && /* @__PURE__ */ h(RenderAddon, { addon: before }), /* @__PURE__ */ h(LabelWithTooltipMaybeRequired, { label, tooltip }), after !== void 0 && /* @__PURE__ */ h(RenderAddon, { addon: after }), help && /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-500", id: "email-description" }, help), /* @__PURE__ */ h("div", { class: "grid max-w-2xl grid-cols-1 gap-x-6 gap-y-2 sm:grid-cols-6" }, /* @__PURE__ */ h(
+ RenderAllFieldsByUiConfig,
+ {
+ fields
+ }
+ )));
+}
+function Dialog({ children, onClose }) {
+ return /* @__PURE__ */ h("div", { class: "relative z-10", "aria-labelledby": "modal-title", role: "dialog", "aria-modal": "true", onClick: onClose }, /* @__PURE__ */ h("div", { class: "fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity" }), /* @__PURE__ */ h("div", { class: "fixed inset-0 z-10 w-screen overflow-y-auto" }, /* @__PURE__ */ h("div", { class: "flex min-h-full items-center justify-center p-4 text-center " }, /* @__PURE__ */ h("div", { class: "relative transform overflow-hidden rounded-lg bg-white p-1 text-left shadow-xl transition-all", onClick: (e22) => e22.stopPropagation() }, children))));
+}
function useField(name) {
+ const ctx = q2(FormContext);
+ if (!ctx) {
+ return void 0;
+ }
const {
value: formValue,
computeFormState,
onUpdate: notifyUpdate,
readOnly: readOnlyForm
- } = q2(FormContext);
+ } = ctx;
const formState = computeFormState ? computeFormState(formValue.current) : {};
const fieldValue = readField(formValue.current, String(name));
- const [currentValue, setCurrentValue] = p3(fieldValue);
const fieldState = readField(formState, String(name)) ?? {};
const state = {
disabled: readOnlyForm ? true : fieldState.disabled ?? false,
hidden: fieldState.hidden ?? false,
- error: fieldState.error,
help: fieldState.help,
elements: "elements" in fieldState ? fieldState.elements ?? [] : []
};
function onChange(value) {
- setCurrentValue(value);
formValue.current = setValueDeeper(
formValue.current,
String(name).split("."),
@@ -22336,21 +22858,11 @@ function useField(name) {
return {
value: fieldValue,
onChange,
- isDirty: currentValue !== void 0,
state
};
}
-function readField(object, name, debug) {
+function readField(object, name) {
return name.split(".").reduce((prev, current) => {
- if (debug) {
- console.log(
- "READ",
- name,
- prev,
- current,
- prev ? prev[current] : void 0
- );
- }
return prev ? prev[current] : void 0;
}, object);
}
@@ -22363,218 +22875,11 @@ function setValueDeeper(object, names2, value) {
}
return { ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) };
}
-var TooltipIcon = /* @__PURE__ */ h(
- "svg",
- {
- class: "w-5 h-5",
- xmlns: "http://www.w3.org/2000/svg",
- viewBox: "0 0 20 20",
- fill: "currentColor"
- },
- /* @__PURE__ */ h(
- "path",
- {
- "fill-rule": "evenodd",
- d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z",
- "clip-rule": "evenodd"
- }
- )
-);
-function LabelWithTooltipMaybeRequired({
- label,
- required,
- tooltip
-}) {
- const Label = /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("div", { class: "flex justify-between" }, /* @__PURE__ */ h(
- "label",
- {
- htmlFor: "email",
- class: "block text-sm font-medium leading-6 text-gray-900"
- },
- label
- )));
- const WithTooltip = tooltip ? /* @__PURE__ */ h("div", { class: "relative flex flex-grow items-stretch focus-within:z-10" }, Label, /* @__PURE__ */ h("span", { class: "relative flex items-center group pl-2" }, TooltipIcon, /* @__PURE__ */ h("div", { class: "absolute bottom-0 -ml-10 hidden flex-col items-center mb-6 group-hover:flex w-28" }, /* @__PURE__ */ h("div", { class: "relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-black shadow-lg" }, tooltip), /* @__PURE__ */ h("div", { class: "w-3 h-3 -mt-2 rotate-45 bg-black" })))) : Label;
- if (required) {
- return /* @__PURE__ */ h("div", { class: "flex justify-between" }, WithTooltip, /* @__PURE__ */ h("span", { class: "text-sm leading-6 text-red-600" }, "*"));
- }
- return WithTooltip;
-}
-function InputWrapper({
- children,
- label,
- tooltip,
- before,
- after,
- help,
- error: error2,
- disabled,
- required
-}) {
- return /* @__PURE__ */ h("div", { class: "sm:col-span-6" }, /* @__PURE__ */ h(
- LabelWithTooltipMaybeRequired,
- {
- label,
- required,
- tooltip
- }
- ), /* @__PURE__ */ h("div", { class: "relative mt-2 flex rounded-md shadow-sm" }, before && (before.type === "text" ? /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm" }, before.text) : before.type === "icon" ? /* @__PURE__ */ h("div", { class: "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3" }, before.icon) : before.type === "button" ? /* @__PURE__ */ h(
- "button",
- {
- type: "button",
- disabled,
- onClick: before.onClick,
- class: "relative -ml-px inline-flex items-center gap-x-1.5 rounded-l-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50"
- },
- before.children
- ) : void 0), children, after && (after.type === "text" ? /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-r-md border border-l-0 border-gray-300 px-3 text-gray-500 sm:text-sm" }, after.text) : after.type === "icon" ? /* @__PURE__ */ h("div", { class: "pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3" }, after.icon) : after.type === "button" ? /* @__PURE__ */ h(
- "button",
- {
- type: "button",
- disabled,
- onClick: after.onClick,
- class: "relative -ml-px inline-flex items-center gap-x-1.5 rounded-r-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50"
- },
- after.children
- ) : void 0)), error2 && /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-red-600", id: "email-error" }, error2), help && /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-500", id: "email-description" }, help));
-}
-function defaultToString(v3) {
- return v3 === void 0 ? "" : typeof v3 !== "object" ? String(v3) : "";
-}
-function defaultFromString(v3) {
- return v3;
-}
-function InputLine(props) {
- const { name, placeholder, before, after, converter, type } = props;
- const { value, onChange, state, isDirty } = useField(name);
- const [text, setText] = p3("");
- const fromString = converter?.fromStringUI ?? defaultFromString;
- const toString = converter?.toStringUI ?? defaultToString;
- h2(() => {
- const newValue = toString(value);
- if (newValue) {
- setText(newValue);
- }
- }, [value]);
- if (state.hidden)
- return /* @__PURE__ */ h("div", null);
- let clazz = "block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200";
- if (before) {
- switch (before.type) {
- case "icon": {
- clazz += " pl-10";
- break;
- }
- case "button": {
- clazz += " rounded-none rounded-r-md ";
- break;
- }
- case "text": {
- clazz += " min-w-0 flex-1 rounded-r-md rounded-none ";
- break;
- }
- }
- }
- if (after) {
- switch (after.type) {
- case "icon": {
- clazz += " pr-10";
- break;
- }
- case "button": {
- clazz += " rounded-none rounded-l-md";
- break;
- }
- case "text": {
- clazz += " min-w-0 flex-1 rounded-l-md rounded-none ";
- break;
- }
- }
- }
- const showError = isDirty && state.error;
- if (showError) {
- clazz += " text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500";
- } else {
- clazz += " text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-indigo-600";
- }
- if (type === "text-area") {
- return /* @__PURE__ */ h(
- InputWrapper,
- {
- ...props,
- help: props.help ?? state.help,
- disabled: state.disabled ?? false,
- error: showError ? state.error : void 0
- },
- /* @__PURE__ */ h(
- "textarea",
- {
- rows: 4,
- name: String(name),
- onChange: (e22) => {
- onChange(fromString(e22.currentTarget.value));
- },
- placeholder: placeholder ? placeholder : void 0,
- value: toString(value) ?? "",
- disabled: state.disabled,
- "aria-invalid": showError,
- class: clazz
- }
- )
- );
- }
- return /* @__PURE__ */ h(
- InputWrapper,
- {
- ...props,
- help: props.help ?? state.help,
- disabled: state.disabled ?? false,
- error: showError ? state.error : void 0
- },
- /* @__PURE__ */ h(
- "input",
- {
- name: String(name),
- type,
- onChange: (e22) => {
- setText(e22.currentTarget.value);
- },
- placeholder: placeholder ? placeholder : void 0,
- value: text,
- onBlur: () => {
- onChange(fromString(text));
- },
- disabled: state.disabled,
- "aria-invalid": showError,
- class: clazz
- }
- )
- );
-}
-function Caption({ before, after, label, tooltip, help }) {
- return /* @__PURE__ */ h("div", { class: "sm:col-span-6 flex" }, before !== void 0 && /* @__PURE__ */ h("span", { class: "pointer-events-none flex items-center pr-2" }, before), /* @__PURE__ */ h(LabelWithTooltipMaybeRequired, { label, tooltip }), after !== void 0 && /* @__PURE__ */ h("span", { class: "pointer-events-none flex items-center pl-2" }, after), help && /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-500", id: "email-description" }, help));
-}
-function Group({
- before,
- after,
- tooltipAfter,
- tooltipBefore,
- fields
-}) {
- return /* @__PURE__ */ h("div", { class: "sm:col-span-6 p-4 rounded-lg border-r-2 border-2 bg-gray-50" }, /* @__PURE__ */ h("div", { class: "pb-4" }, before && /* @__PURE__ */ h(
- LabelWithTooltipMaybeRequired,
- {
- label: before,
- tooltip: tooltipBefore
- }
- )), /* @__PURE__ */ h("div", { class: "grid max-w-2xl grid-cols-1 gap-x-6 gap-y-2 sm:grid-cols-6" }, /* @__PURE__ */ h(RenderAllFieldsByUiConfig, { fields })), /* @__PURE__ */ h("div", { class: "pt-4" }, after && /* @__PURE__ */ h(LabelWithTooltipMaybeRequired, { label: after, tooltip: tooltipAfter })));
-}
-function Dialog({ children, onClose }) {
- return /* @__PURE__ */ h("div", { class: "relative z-10", "aria-labelledby": "modal-title", role: "dialog", "aria-modal": "true", onClick: onClose }, /* @__PURE__ */ h("div", { class: "fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity" }), /* @__PURE__ */ h("div", { class: "fixed inset-0 z-10 w-screen overflow-y-auto" }, /* @__PURE__ */ h("div", { class: "flex min-h-full items-center justify-center p-4 text-center " }, /* @__PURE__ */ h("div", { class: "relative transform overflow-hidden rounded-lg bg-white p-1 text-left shadow-xl transition-all", onClick: (e22) => e22.stopPropagation() }, children))));
-}
-function InputAbsoluteTime(props) {
- const pattern = props.pattern ?? "dd/MM/yyyy";
+function InputAbsoluteTime(properties) {
+ const pattern = properties.pattern ?? "dd/MM/yyyy";
const [open, setOpen] = p3(false);
- const { value, onChange } = useField(props.name);
+ const fieldCtx = useField(properties.name);
+ const { value, onChange } = properties.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(properties.name);
return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(
InputLine,
{
@@ -22585,7 +22890,25 @@ function InputAbsoluteTime(props) {
setOpen(true);
},
// icon: <CalendarIcon class="h-6 w-6" />,
- children: /* @__PURE__ */ h("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", class: "w-6 h-6" }, /* @__PURE__ */ h("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5" }))
+ children: /* @__PURE__ */ h(
+ "svg",
+ {
+ xmlns: "http://www.w3.org/2000/svg",
+ fill: "none",
+ viewBox: "0 0 24 24",
+ "stroke-width": "1.5",
+ stroke: "currentColor",
+ class: "w-6 h-6"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round",
+ d: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5"
+ }
+ )
+ )
},
converter: {
//@ts-ignore
@@ -22604,7 +22927,7 @@ function InputAbsoluteTime(props) {
return !v3 || !v3.t_ms ? void 0 : v3.t_ms === "never" ? "never" : format(v3.t_ms, pattern);
}
},
- ...props
+ ...properties
}
), open && /* @__PURE__ */ h(Dialog, { onClose: () => setOpen(false) }, /* @__PURE__ */ h(
Calendar,
@@ -22618,7 +22941,8 @@ function InputAbsoluteTime(props) {
)));
}
function InputAmount(props) {
- const { value } = useField(props.name);
+ const fieldCtx = useField(props.name);
+ const { value } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
const currency = !value || !value.currency ? props.currency : value.currency;
return /* @__PURE__ */ h(
InputLine,
@@ -22628,12 +22952,10 @@ function InputAmount(props) {
type: "text",
text: currency
},
- converter: {
- //@ts-ignore
+ converter: props.converter ?? {
fromStringUI: (v3) => {
return Amounts.parse(`${currency}:${v3}`) ?? Amounts.zeroOfCurrency(currency);
},
- //@ts-ignore
toStringUI: (v3) => {
return v3 === void 0 ? "" : Amounts.stringifyValue(v3);
}
@@ -22642,148 +22964,10 @@ function InputAmount(props) {
}
);
}
-function Option({
- label,
- disabled,
- isFirst,
- isLast,
- isSelected,
- onClick
-}) {
- let clazz = "relative flex border p-4 focus:outline-none disabled:text-grey";
- if (isFirst) {
- clazz += " rounded-tl-md rounded-tr-md ";
- }
- if (isLast) {
- clazz += " rounded-bl-md rounded-br-md ";
- }
- if (isSelected) {
- clazz += " z-10 border-indigo-200 bg-indigo-50 ";
- } else {
- clazz += " border-gray-200";
- }
- if (disabled) {
- clazz += " cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray";
- } else {
- clazz += " cursor-pointer";
- }
- return /* @__PURE__ */ h("label", { class: clazz }, /* @__PURE__ */ h(
- "input",
- {
- type: "radio",
- name: "privacy-setting",
- checked: isSelected,
- disabled,
- onClick,
- class: "mt-0.5 h-4 w-4 shrink-0 text-indigo-600 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200 focus:ring-indigo-600",
- "aria-labelledby": "privacy-setting-0-label",
- "aria-describedby": "privacy-setting-0-description"
- }
- ), /* @__PURE__ */ h("span", { class: "ml-3 flex flex-col" }, /* @__PURE__ */ h(
- "span",
- {
- id: "privacy-setting-0-label",
- disabled: true,
- class: "block text-sm font-medium"
- },
- label
- )));
-}
-function InputArray(props) {
- const { fields, labelField, name, label, required, tooltip } = props;
- const { value, onChange, state } = useField(name);
- const list = value ?? [];
- const [selectedIndex, setSelected] = p3(void 0);
- const selected = selectedIndex === void 0 ? void 0 : list[selectedIndex];
- return /* @__PURE__ */ h("div", { class: "sm:col-span-6" }, /* @__PURE__ */ h(
- LabelWithTooltipMaybeRequired,
- {
- label,
- required,
- tooltip
- }
- ), /* @__PURE__ */ h("div", { class: "-space-y-px rounded-md bg-white " }, list.map((v3, idx) => {
- return /* @__PURE__ */ h(
- Option,
- {
- label: v3[labelField],
- isSelected: selectedIndex === idx,
- isLast: idx === list.length - 1,
- disabled: selectedIndex !== void 0 && selectedIndex !== idx,
- isFirst: idx === 0,
- onClick: () => {
- setSelected(selectedIndex === idx ? void 0 : idx);
- }
- }
- );
- }), !state.disabled && /* @__PURE__ */ h("div", { class: "pt-2" }, /* @__PURE__ */ h(
- Option,
- {
- label: "Add...",
- isSelected: selectedIndex === list.length,
- isLast: true,
- isFirst: true,
- disabled: selectedIndex !== void 0 && selectedIndex !== list.length,
- onClick: () => {
- setSelected(
- selectedIndex === list.length ? void 0 : list.length
- );
- }
- }
- ))), selectedIndex !== void 0 && /**
- * This form provider act as a substate of the parent form
- * Consider creating an InnerFormProvider since not every feature is expected
- */
- /* @__PURE__ */ h(
- FormProvider,
- {
- initial: selected,
- readOnly: state.disabled,
- computeFormState: (v3) => {
- return state.elements[selectedIndex];
- },
- onSubmit: (v3) => {
- const newValue = [...list];
- newValue.splice(selectedIndex, 1, v3);
- onChange(newValue);
- setSelected(void 0);
- },
- onUpdate: (v3) => {
- const newValue = [...list];
- newValue.splice(selectedIndex, 1, v3);
- onChange(newValue);
- }
- },
- /* @__PURE__ */ h("div", { class: "px-4 py-6" }, /* @__PURE__ */ h("div", { class: "grid grid-cols-1 gap-y-8 " }, /* @__PURE__ */ h(RenderAllFieldsByUiConfig, { fields })))
- ), selectedIndex !== void 0 && /* @__PURE__ */ h("div", { class: "flex items-center pt-3" }, /* @__PURE__ */ h("div", { class: "flex-auto" }, selected !== void 0 && /* @__PURE__ */ h(
- "button",
- {
- type: "button",
- onClick: () => {
- const newValue = [...list];
- newValue.splice(selectedIndex, 1);
- onChange(newValue);
- setSelected(void 0);
- },
- class: "block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 "
- },
- "Remove"
- ))));
-}
function InputChoiceHorizontal(props) {
- const {
- choices,
- name,
- label,
- tooltip,
- help,
- placeholder,
- required,
- before,
- after,
- converter
- } = props;
- const { value, onChange, state, isDirty } = useField(name);
+ const { choices, label, tooltip, help, required, converter } = props;
+ const fieldCtx = useField(props.name);
+ const { value, onChange, state } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
if (state.hidden) {
return /* @__PURE__ */ h(p2, null);
}
@@ -22798,7 +22982,7 @@ function InputChoiceHorizontal(props) {
const isFirst = idx === 0;
const isLast = idx === choices.length - 1;
let clazz = "relative inline-flex items-center px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 focus:z-10";
- if (choice.value === value) {
+ if (converter?.fromStringUI(choice.value) === value) {
clazz += " text-white bg-indigo-600 hover:bg-indigo-500 ring-2 ring-indigo-600 hover:ring-indigo-500";
} else {
clazz += " hover:bg-gray-100 border-gray-300";
@@ -22815,12 +22999,13 @@ function InputChoiceHorizontal(props) {
"button",
{
type: "button",
+ key: idx,
disabled: state.disabled,
label: choice.label,
class: clazz,
onClick: (e22) => {
onChange(
- value === choice.value ? void 0 : choice.value
+ value === choice.value ? void 0 : converter?.fromStringUI(choice.value)
);
}
},
@@ -22841,7 +23026,8 @@ function InputChoiceStacked(props) {
after,
converter
} = props;
- const { value, onChange, state, isDirty } = useField(name);
+ const fieldCtx = useField(props.name);
+ const { value, onChange, state } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
if (state.hidden) {
return /* @__PURE__ */ h(p2, null);
}
@@ -22852,14 +23038,14 @@ function InputChoiceStacked(props) {
required,
tooltip
}
- ), /* @__PURE__ */ h("fieldset", { class: "mt-2" }, /* @__PURE__ */ h("div", { class: "space-y-4" }, choices.map((choice) => {
+ ), /* @__PURE__ */ h("fieldset", { class: "mt-2" }, /* @__PURE__ */ h("div", { class: "space-y-4" }, choices.map((choice, idx) => {
let clazz = "border relative block cursor-pointer rounded-lg bg-white px-6 py-4 shadow-sm focus:outline-none sm:flex sm:justify-between";
if (choice.value === value) {
clazz += " border-transparent border-indigo-600 ring-2 ring-indigo-600";
} else {
clazz += " border-gray-300";
}
- return /* @__PURE__ */ h("label", { class: clazz }, /* @__PURE__ */ h(
+ return /* @__PURE__ */ h("label", { key: idx, class: clazz }, /* @__PURE__ */ h(
"input",
{
type: "radio",
@@ -22894,20 +23080,28 @@ function InputChoiceStacked(props) {
}
function InputFile(props) {
const {
- name,
label,
- placeholder,
tooltip,
required,
help: propsHelp,
maxBites,
accept
} = props;
- const { value, onChange, state } = useField(name);
+ const fieldCtx = useField(props.name);
+ const { value, onChange, state } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
const help = propsHelp ?? state.help;
if (state.hidden) {
return /* @__PURE__ */ h("div", null);
}
+ const valueStr = !value ? "" : value.toString();
+ const firstColon = valueStr.indexOf(";");
+ const { fileName, dataUri } = valueStr.startsWith("file:") ? {
+ fileName: valueStr.substring(5, firstColon),
+ dataUri: valueStr.substring(firstColon + 1)
+ } : {
+ fileName: "",
+ dataUri: valueStr
+ };
return /* @__PURE__ */ h("div", { class: "col-span-full" }, /* @__PURE__ */ h(
LabelWithTooltipMaybeRequired,
{
@@ -22915,7 +23109,7 @@ function InputFile(props) {
tooltip,
required
}
- ), !value || !value.startsWith("data:image/") ? /* @__PURE__ */ h("div", { class: "mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 py-1" }, /* @__PURE__ */ h("div", { class: "text-center" }, /* @__PURE__ */ h(
+ ), !dataUri ? /* @__PURE__ */ h("div", { class: "mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 py-1" }, /* @__PURE__ */ h("div", { class: "text-center" }, /* @__PURE__ */ h(
"svg",
{
class: "mx-auto h-12 w-12 text-gray-300",
@@ -22934,15 +23128,14 @@ function InputFile(props) {
), !state.disabled && /* @__PURE__ */ h("div", { class: "my-2 flex text-sm leading-6 text-gray-600" }, /* @__PURE__ */ h(
"label",
{
- for: "file-upload",
+ for: String(props.name),
class: "relative cursor-pointer rounded-md bg-white font-semibold text-indigo-600 focus-within:outline-none focus-within:ring-2 focus-within:ring-indigo-600 focus-within:ring-offset-2 hover:text-indigo-500"
},
/* @__PURE__ */ h("span", null, "Upload a file"),
/* @__PURE__ */ h(
"input",
{
- id: "file-upload",
- name: "file-upload",
+ id: String(props.name),
type: "file",
class: "sr-only",
accept,
@@ -22954,6 +23147,7 @@ function InputFile(props) {
if (f3[0].size > maxBites) {
return onChange(void 0);
}
+ const fileName2 = f3[0].name;
return f3[0].arrayBuffer().then((b22) => {
const b64 = window.btoa(
new Uint8Array(b22).reduce(
@@ -22961,18 +23155,20 @@ function InputFile(props) {
""
)
);
- return onChange(`data:${f3[0].type};base64,${b64}`);
+ if (fileName2) {
+ return onChange(
+ `file:${fileName2};data:${f3[0].type};base64,${b64}`
+ );
+ } else {
+ return onChange(
+ `data:${f3[0].type};base64,${b64}`
+ );
+ }
});
}
}
)
- )))) : /* @__PURE__ */ h("div", { class: "mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 relative" }, /* @__PURE__ */ h(
- "img",
- {
- src: value,
- class: " h-24 w-full object-cover relative"
- }
- ), !state.disabled && /* @__PURE__ */ h(
+ )))) : /* @__PURE__ */ h("div", { class: "mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 relative" }, dataUri.startsWith("data:image/") ? /* @__PURE__ */ h("img", { src: dataUri, class: " h-24 w-full object-cover relative" }) : /* @__PURE__ */ h("div", null), fileName ? /* @__PURE__ */ h("div", { class: "absolute rounded-lg border flex justify-center text-xl items-center text-white " }, fileName) : /* @__PURE__ */ h(p2, null), !state.disabled && /* @__PURE__ */ h(
"div",
{
class: "opacity-0 hover:opacity-70 duration-300 absolute rounded-lg border inset-0 z-10 flex justify-center text-xl items-center bg-black text-white cursor-pointer ",
@@ -23003,13 +23199,17 @@ function InputInteger(props) {
);
}
function InputSelectMultiple(props) {
- const { name, label, choices, placeholder, tooltip, required, unique, max } = props;
- const { value, onChange, state } = useField(name);
+ const { converter, label, choices, placeholder, tooltip, required, unique, max } = props;
+ const fieldCtx = useField(props.name);
+ const { value, onChange, state } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
const [filter, setFilter] = p3(void 0);
const regex = new RegExp(`.*${filter}.*`, "i");
- const choiceMap = choices.reduce((prev, curr) => {
- return { ...prev, [curr.value]: curr.label };
- }, {});
+ const choiceMap = choices.reduce(
+ (prev, curr) => {
+ return { ...prev, [curr.value]: curr.label };
+ },
+ {}
+ );
const list = value ?? [];
const filteredChoices = filter === void 0 ? void 0 : choices.filter((v3) => {
return regex.test(v3.label);
@@ -23022,30 +23222,38 @@ function InputSelectMultiple(props) {
tooltip
}
), list.map((v3, idx) => {
- return /* @__PURE__ */ h("span", { class: "inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 text-xs font-medium text-gray-600" }, choiceMap[v3], /* @__PURE__ */ h(
- "button",
+ return /* @__PURE__ */ h(
+ "span",
{
- type: "button",
- disabled: state.disabled,
- onClick: () => {
- const newValue = [...list];
- newValue.splice(idx, 1);
- onChange(newValue);
- setFilter(void 0);
- },
- class: "group relative h-5 w-5 rounded-sm hover:bg-gray-500/20"
+ key: idx,
+ class: "inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 text-xs font-medium text-gray-600"
},
- /* @__PURE__ */ h("span", { class: "sr-only" }, "Remove"),
+ choiceMap[v3],
/* @__PURE__ */ h(
- "svg",
+ "button",
{
- viewBox: "0 0 14 14",
- class: "h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75"
+ type: "button",
+ disabled: state.disabled,
+ onClick: () => {
+ const newValue = [...list];
+ newValue.splice(idx, 1);
+ onChange(newValue);
+ setFilter(void 0);
+ },
+ class: "group relative h-5 w-5 rounded-sm hover:bg-gray-500/20"
},
- /* @__PURE__ */ h("path", { d: "M4 4l6 6m0-6l-6 6" })
- ),
- /* @__PURE__ */ h("span", { class: "absolute -inset-1" })
- ));
+ /* @__PURE__ */ h("span", { class: "sr-only" }, "Remove"),
+ /* @__PURE__ */ h(
+ "svg",
+ {
+ viewBox: "0 0 14 14",
+ class: "h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75"
+ },
+ /* @__PURE__ */ h("path", { d: "M4 4l6 6m0-6l-6 6" })
+ ),
+ /* @__PURE__ */ h("span", { class: "absolute -inset-1" })
+ )
+ );
}), !state.disabled && /* @__PURE__ */ h("div", { class: "relative mt-2" }, /* @__PURE__ */ h(
"input",
{
@@ -23099,6 +23307,7 @@ function InputSelectMultiple(props) {
return /* @__PURE__ */ h(
"li",
{
+ key: idx,
class: "relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600",
id: "option-0",
role: "option",
@@ -23121,13 +23330,17 @@ function InputSelectMultiple(props) {
)));
}
function InputSelectOne(props) {
- const { name, label, choices, placeholder, tooltip, required } = props;
- const { value, onChange } = useField(name);
+ const { label, choices, placeholder, tooltip, required } = props;
+ const fieldCtx = useField(props.name);
+ const { value, onChange } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
const [filter, setFilter] = p3(void 0);
const regex = new RegExp(`.*${filter}.*`, "i");
- const choiceMap = choices.reduce((prev, curr) => {
- return { ...prev, [curr.value]: curr.label };
- }, {});
+ const choiceMap = choices.reduce(
+ (prev, curr) => {
+ return { ...prev, [curr.value]: curr.label };
+ },
+ {}
+ );
const filteredChoices = filter === void 0 ? void 0 : choices.filter((v3) => {
return regex.test(v3.label);
});
@@ -23209,6 +23422,7 @@ function InputSelectOne(props) {
return /* @__PURE__ */ h(
"li",
{
+ key: idx,
class: "relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600",
id: "option-0",
role: "option",
@@ -23240,7 +23454,8 @@ function InputToggle(props) {
after,
converter
} = props;
- const { value, onChange, state, isDirty } = useField(name);
+ const fieldCtx = useField(props.name);
+ const { value, onChange } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
const isOn = !!value;
return /* @__PURE__ */ h("div", { class: "sm:col-span-6" }, /* @__PURE__ */ h("div", { class: "flex items-center justify-between" }, /* @__PURE__ */ h(
LabelWithTooltipMaybeRequired,
@@ -23263,7 +23478,14 @@ function InputToggle(props) {
onChange(!isOn);
}
},
- /* @__PURE__ */ h("span", { "aria-hidden": "true", "data-enabled": isOn, class: "translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out" })
+ /* @__PURE__ */ h(
+ "span",
+ {
+ "aria-hidden": "true",
+ "data-enabled": isOn,
+ class: "translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
+ }
+ )
)));
}
var UIFormConfiguration = {
@@ -23299,22 +23521,516 @@ function RenderAllFieldsByUiConfig({
{},
fields.map((field, i22) => {
const Component = UIFormConfiguration[field.type];
- return Component(field.props);
+ return Component(field.properties);
})
);
}
-function createNewForm() {
- const res = {
- Provider: FormProvider,
- InputLine: () => InputLine,
- InputChoiceHorizontal: () => InputChoiceHorizontal
+function convertUiField2(i18n_, fieldConfig, form, getConverterById2) {
+ return fieldConfig.map((config) => {
+ switch (config.type) {
+ case "caption": {
+ const resp = {
+ type: config.type,
+ properties: converBaseFieldsProps(i18n_, config.properties)
+ };
+ return resp;
+ }
+ case "group": {
+ const resp = {
+ type: config.type,
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ fields: convertUiField2(i18n_, config.properties.fields, form, getConverterById2)
+ }
+ };
+ return resp;
+ }
+ }
+ switch (config.type) {
+ case "array": {
+ return {
+ type: "array",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2),
+ labelField: config.properties.labelFieldId,
+ fields: convertUiField2(i18n_, config.properties.fields, form, getConverterById2)
+ }
+ };
+ }
+ case "absoluteTime": {
+ return {
+ type: "absoluteTime",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2)
+ }
+ };
+ }
+ case "amount": {
+ return {
+ type: "amount",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2)
+ }
+ };
+ }
+ case "choiceHorizontal": {
+ return {
+ type: "choiceHorizontal",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2),
+ choices: config.properties.choices
+ }
+ };
+ }
+ case "choiceStacked": {
+ return {
+ type: "choiceStacked",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2),
+ choices: config.properties.choices
+ }
+ };
+ }
+ case "file": {
+ return {
+ type: "file",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2),
+ accept: config.properties.accept,
+ maxBites: config.properties.maxBytes
+ }
+ };
+ }
+ case "integer": {
+ return {
+ type: "integer",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2)
+ }
+ };
+ }
+ case "selectMultiple": {
+ return {
+ type: "selectMultiple",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2),
+ choices: config.properties.choices
+ }
+ };
+ }
+ case "selectOne": {
+ return {
+ type: "selectOne",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2),
+ choices: config.properties.choices
+ }
+ };
+ }
+ case "text": {
+ return {
+ type: "text",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2)
+ }
+ };
+ }
+ case "textArea": {
+ return {
+ type: "text",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2)
+ }
+ };
+ }
+ case "toggle": {
+ return {
+ type: "toggle",
+ properties: {
+ ...converBaseFieldsProps(i18n_, config.properties),
+ ...converInputFieldsProps(form, config.properties, getConverterById2)
+ }
+ };
+ }
+ default: {
+ assertUnreachable(config);
+ }
+ }
+ });
+}
+function getAddonById(_id) {
+ return void 0;
+}
+function converInputFieldsProps(form, p4, getConverterById2) {
+ return {
+ converter: getConverterById2(p4.converterId, p4),
+ handler: getValueDeeper2(form, p4.id.split(".")),
+ name: p4.name,
+ required: p4.required,
+ disabled: p4.disabled,
+ help: p4.help,
+ placeholder: p4.placeholder,
+ tooltip: p4.tooltip,
+ label: p4.label
};
+}
+function converBaseFieldsProps(i18n_, p4) {
return {
- Provider: res.Provider,
- InputLine: res.InputLine(),
- InputChoiceHorizontal: res.InputChoiceHorizontal()
+ after: getAddonById(p4.addonAfterId),
+ before: getAddonById(p4.addonBeforeId),
+ hidden: p4.hidden,
+ name: p4.name,
+ help: i18n_.str`${p4.help}`,
+ label: i18n_.str`${p4.label}`,
+ tooltip: i18n_.str`${p4.tooltip}`
};
}
+function getValueDeeper2(object, names2) {
+ if (names2.length === 0)
+ return object;
+ const [head, ...rest] = names2;
+ if (!head) {
+ return getValueDeeper2(object, rest);
+ }
+ if (object === void 0) {
+ throw Error("handler not found");
+ }
+ return getValueDeeper2(object[head], rest);
+}
+function Option({
+ label,
+ disabled,
+ isFirst,
+ isLast,
+ isSelected,
+ onClick
+}) {
+ let clazz = "relative flex border p-4 focus:outline-none disabled:text-grey";
+ if (isFirst) {
+ clazz += " rounded-tl-md rounded-tr-md ";
+ }
+ if (isLast) {
+ clazz += " rounded-bl-md rounded-br-md ";
+ }
+ if (isSelected) {
+ clazz += " z-10 border-indigo-200 bg-indigo-50 ";
+ } else {
+ clazz += " border-gray-200";
+ }
+ if (disabled) {
+ clazz += " cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray";
+ } else {
+ clazz += " cursor-pointer";
+ }
+ return /* @__PURE__ */ h("label", { class: clazz }, /* @__PURE__ */ h(
+ "input",
+ {
+ type: "radio",
+ name: "privacy-setting",
+ checked: isSelected,
+ disabled,
+ onClick,
+ class: "mt-0.5 h-4 w-4 shrink-0 text-indigo-600 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200 focus:ring-indigo-600",
+ "aria-labelledby": "privacy-setting-0-label",
+ "aria-describedby": "privacy-setting-0-description"
+ }
+ ), /* @__PURE__ */ h("span", { class: "ml-3 flex flex-col" }, /* @__PURE__ */ h(
+ "span",
+ {
+ id: "privacy-setting-0-label",
+ disabled: true,
+ class: "block text-sm font-medium"
+ },
+ label
+ )));
+}
+function noHandlerPropsAndNoContextForField(field) {
+ throw Error(
+ `Field ${field.toString()} doesn't have handler and is not in a form provider context.`
+ );
+}
+function InputArray(props) {
+ const { fields, labelField, name, label, required, tooltip } = props;
+ const fieldCtx = useField(props.name);
+ if (!props.handler && !fieldCtx) {
+ throw Error("");
+ }
+ const { value, onChange, state } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
+ const list = value ?? [];
+ const [selectedIndex, setSelected] = p3(void 0);
+ const selected = selectedIndex === void 0 ? void 0 : list[selectedIndex];
+ return /* @__PURE__ */ h("div", { class: "sm:col-span-6" }, /* @__PURE__ */ h(
+ LabelWithTooltipMaybeRequired,
+ {
+ label,
+ required,
+ tooltip
+ }
+ ), /* @__PURE__ */ h("div", { class: "-space-y-px rounded-md bg-white " }, list.map((v3, idx) => {
+ return /* @__PURE__ */ h(
+ Option,
+ {
+ label: v3[labelField],
+ key: idx,
+ isSelected: selectedIndex === idx,
+ isLast: idx === list.length - 1,
+ disabled: selectedIndex !== void 0 && selectedIndex !== idx,
+ isFirst: idx === 0,
+ onClick: () => {
+ setSelected(selectedIndex === idx ? void 0 : idx);
+ }
+ }
+ );
+ }), !state.disabled && /* @__PURE__ */ h("div", { class: "pt-2" }, /* @__PURE__ */ h(
+ Option,
+ {
+ label: "Add...",
+ isSelected: selectedIndex === list.length,
+ isLast: true,
+ isFirst: true,
+ disabled: selectedIndex !== void 0 && selectedIndex !== list.length,
+ onClick: () => {
+ setSelected(
+ selectedIndex === list.length ? void 0 : list.length
+ );
+ }
+ }
+ ))), selectedIndex !== void 0 && /**
+ * This form provider act as a substate of the parent form
+ * Consider creating an InnerFormProvider since not every feature is expected
+ */
+ /* @__PURE__ */ h(
+ FormProvider,
+ {
+ initial: selected,
+ readOnly: state.disabled,
+ computeFormState: (v3) => {
+ return {};
+ },
+ onSubmit: (v3) => {
+ const newValue = [...list];
+ newValue.splice(selectedIndex, 1, v3);
+ onChange(newValue);
+ setSelected(void 0);
+ },
+ onUpdate: (v3) => {
+ const newValue = [...list];
+ newValue.splice(selectedIndex, 1, v3);
+ onChange(newValue);
+ }
+ },
+ /* @__PURE__ */ h("div", { class: "px-4 py-6" }, /* @__PURE__ */ h("div", { class: "grid grid-cols-1 gap-y-8 " }, /* @__PURE__ */ h(RenderAllFieldsByUiConfig, { fields })))
+ ), selectedIndex !== void 0 && /* @__PURE__ */ h("div", { class: "flex items-center pt-3" }, /* @__PURE__ */ h("div", { class: "flex-auto" }, selected !== void 0 && /* @__PURE__ */ h(
+ "button",
+ {
+ type: "button",
+ onClick: () => {
+ const newValue = [...list];
+ newValue.splice(selectedIndex, 1);
+ onChange(newValue);
+ setSelected(void 0);
+ },
+ class: "block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 "
+ },
+ "Remove"
+ ))));
+}
+var TooltipIcon = /* @__PURE__ */ h(
+ "svg",
+ {
+ class: "w-5 h-5",
+ xmlns: "http://www.w3.org/2000/svg",
+ viewBox: "0 0 20 20",
+ fill: "currentColor"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "fill-rule": "evenodd",
+ d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z",
+ "clip-rule": "evenodd"
+ }
+ )
+);
+function LabelWithTooltipMaybeRequired({
+ label,
+ required,
+ tooltip
+}) {
+ const Label = /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("div", { class: "flex justify-between" }, /* @__PURE__ */ h(
+ "label",
+ {
+ htmlFor: "email",
+ class: "block text-sm font-medium leading-6 text-gray-900"
+ },
+ label
+ )));
+ const WithTooltip = tooltip ? /* @__PURE__ */ h("div", { class: "relative flex flex-grow items-stretch focus-within:z-10" }, Label, /* @__PURE__ */ h("span", { class: "relative flex items-center group pl-2" }, TooltipIcon, /* @__PURE__ */ h("div", { class: "absolute bottom-0 -ml-10 hidden flex-col items-center mb-6 group-hover:flex w-28" }, /* @__PURE__ */ h("div", { class: "relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-black shadow-lg" }, tooltip), /* @__PURE__ */ h("div", { class: "w-3 h-3 -mt-2 rotate-45 bg-black" })))) : Label;
+ if (required) {
+ return /* @__PURE__ */ h("div", { class: "flex justify-between" }, WithTooltip, /* @__PURE__ */ h("span", { class: "text-sm leading-6 text-red-600" }, "*"));
+ }
+ return WithTooltip;
+}
+function RenderAddon({ disabled, addon }) {
+ switch (addon.type) {
+ case "text": {
+ return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm" }, addon.text);
+ }
+ case "icon": {
+ return /* @__PURE__ */ h("div", { class: "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3" }, addon.icon);
+ }
+ case "button": {
+ return /* @__PURE__ */ h(
+ "button",
+ {
+ type: "button",
+ disabled,
+ onClick: addon.onClick,
+ class: "relative -ml-px inline-flex items-center gap-x-1.5 rounded-l-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50"
+ },
+ addon.children
+ );
+ }
+ }
+}
+function InputWrapper({
+ children,
+ label,
+ tooltip,
+ before,
+ after,
+ help,
+ error: error2,
+ disabled,
+ required
+}) {
+ return /* @__PURE__ */ h("div", { class: "sm:col-span-6" }, /* @__PURE__ */ h(
+ LabelWithTooltipMaybeRequired,
+ {
+ label,
+ required,
+ tooltip
+ }
+ ), /* @__PURE__ */ h("div", { class: "relative mt-2 flex rounded-md shadow-sm" }, before && /* @__PURE__ */ h(RenderAddon, { disabled, addon: before }), children, after && /* @__PURE__ */ h(RenderAddon, { disabled, addon: after })), error2 && /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-red-600", id: "email-error" }, error2), help && /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-500", id: "email-description" }, help));
+}
+function defaultToString(v3) {
+ return v3 === void 0 ? "" : typeof v3 !== "object" ? String(v3) : "";
+}
+function defaultFromString(v3) {
+ return v3;
+}
+function InputLine(props) {
+ const { name, placeholder, before, after, converter, type } = props;
+ const fieldCtx = useField(props.name);
+ const { value, onChange, state, error: error2 } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);
+ const fromString = converter?.fromStringUI ?? defaultFromString;
+ const toString = converter?.toStringUI ?? defaultToString;
+ if (state.hidden)
+ return /* @__PURE__ */ h("div", null);
+ let clazz = "block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200";
+ if (before) {
+ switch (before.type) {
+ case "icon": {
+ clazz += " pl-10";
+ break;
+ }
+ case "button": {
+ clazz += " rounded-none rounded-r-md ";
+ break;
+ }
+ case "text": {
+ clazz += " min-w-0 flex-1 rounded-r-md rounded-none ";
+ break;
+ }
+ }
+ }
+ if (after) {
+ switch (after.type) {
+ case "icon": {
+ clazz += " pr-10";
+ break;
+ }
+ case "button": {
+ clazz += " rounded-none rounded-l-md";
+ break;
+ }
+ case "text": {
+ clazz += " min-w-0 flex-1 rounded-l-md rounded-none ";
+ break;
+ }
+ }
+ }
+ const showError = value !== void 0 && error2;
+ if (showError) {
+ clazz += " text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500";
+ } else {
+ clazz += " text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-indigo-600";
+ }
+ if (type === "text-area") {
+ return /* @__PURE__ */ h(
+ InputWrapper,
+ {
+ ...props,
+ help: props.help ?? state.help,
+ disabled: state.disabled ?? false,
+ error: showError ? error2 : void 0
+ },
+ /* @__PURE__ */ h(
+ "textarea",
+ {
+ rows: 4,
+ name: String(name),
+ onChange: (e22) => {
+ onChange(fromString(e22.currentTarget.value));
+ },
+ placeholder: placeholder ? placeholder : void 0,
+ value: toString(value) ?? "",
+ disabled: state.disabled,
+ "aria-invalid": showError,
+ class: clazz
+ }
+ )
+ );
+ }
+ return /* @__PURE__ */ h(
+ InputWrapper,
+ {
+ ...props,
+ help: props.help ?? state.help,
+ disabled: state.disabled ?? false,
+ error: showError ? error2 : void 0
+ },
+ /* @__PURE__ */ h(
+ "input",
+ {
+ name: String(name),
+ type,
+ onChange: (e22) => {
+ onChange(fromString(e22.currentTarget.value));
+ },
+ placeholder: placeholder ? placeholder : void 0,
+ value: toString(value) ?? "",
+ disabled: state.disabled,
+ "aria-invalid": showError,
+ class: clazz
+ }
+ )
+ );
+}
+function Caption({ before, after, label, tooltip, help }) {
+ return /* @__PURE__ */ h("div", { class: "sm:col-span-6 flex" }, before !== void 0 && /* @__PURE__ */ h(RenderAddon, { addon: before }), /* @__PURE__ */ h(LabelWithTooltipMaybeRequired, { label, tooltip }), after !== void 0 && /* @__PURE__ */ h(RenderAddon, { addon: after }), help && /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-500", id: "email-description" }, help));
+}
function DefaultForm({
initial: initial2,
onUpdate,
@@ -23329,13 +24045,12 @@ function DefaultForm({
initial: initial2,
onUpdate,
onSubmit,
- readOnly,
- computeFormState: form.behavior
+ readOnly
},
/* @__PURE__ */ h("div", { class: "space-y-10 divide-y -mt-5 divide-gray-900/10" }, form.design.map((section, i22) => {
if (!section)
return /* @__PURE__ */ h(p2, null);
- return /* @__PURE__ */ h("div", { class: "grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3" }, /* @__PURE__ */ h("div", { class: "px-4 sm:px-0" }, /* @__PURE__ */ h("h2", { class: "text-base font-semibold leading-7 text-gray-900" }, section.title), section.description && /* @__PURE__ */ h("p", { class: "mt-1 text-sm leading-6 text-gray-600" }, section.description)), /* @__PURE__ */ h("div", { class: "bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2" }, /* @__PURE__ */ h("div", { class: "p-3" }, /* @__PURE__ */ h("div", { class: "grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6" }, /* @__PURE__ */ h(
+ return /* @__PURE__ */ h("div", { key: i22, class: "grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3" }, /* @__PURE__ */ h("div", { class: "px-4 sm:px-0" }, /* @__PURE__ */ h("h2", { class: "text-base font-semibold leading-7 text-gray-900" }, section.title), section.description && /* @__PURE__ */ h("p", { class: "mt-1 text-sm leading-6 text-gray-600" }, section.description)), /* @__PURE__ */ h("div", { class: "bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2" }, /* @__PURE__ */ h("div", { class: "p-3" }, /* @__PURE__ */ h("div", { class: "grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6" }, /* @__PURE__ */ h(
RenderAllFieldsByUiConfig,
{
key: i22,
@@ -23346,162 +24061,1834 @@ function DefaultForm({
children
);
}
+var codecForUiFieldId = codecForString;
+var codecForUIFormFieldBaseDescriptionTemplate = () => buildCodecForObject().property("addonAfterId", codecOptional(codecForString())).property("addonBeforeId", codecOptional(codecForString())).property("hidden", codecOptional(codecForBoolean())).property("help", codecOptional(codecForString())).property("label", codecForString()).property("name", codecForString()).property("tooltip", codecOptional(codecForString()));
+var codecForUIFormFieldBaseConfigTemplate = () => codecForUIFormFieldBaseDescriptionTemplate().property("id", codecForUiFieldId()).property("converterId", codecOptional(codecForString())).property("disabled", codecOptional(codecForBoolean())).property("required", codecOptional(codecForBoolean())).property("placeholder", codecOptional(codecForString()));
+var codecForUIFormFieldBaseConfig = () => codecForUIFormFieldBaseConfigTemplate().build("UIFieldToggleProperties");
+var codecForUIFormFieldAbsoluteTimeConfig = () => codecForUIFormFieldBaseConfigTemplate().property("pattern", codecForString()).property("max", codecOptional(codecForTimestamp)).property("min", codecOptional(codecForTimestamp)).build("UIFormFieldConfigAbsoluteTime.properties");
+var codecForUiFormFieldAbsoluteTime = () => buildCodecForObject().property("type", codecForConstString("absoluteTime")).property("properties", codecForUIFormFieldAbsoluteTimeConfig()).build("UIFormFieldConfigAbsoluteTime");
+var codecForUIFormFieldAmountConfig = () => codecForUIFormFieldBaseConfigTemplate().property("currency", codecForString()).property("max", codecOptional(codecForNumber())).property("min", codecOptional(codecForNumber())).build("UIFormFieldConfigAmount.properties");
+var codecForUiFormFieldAmount = () => buildCodecForObject().property("type", codecForConstString("amount")).property("properties", codecForUIFormFieldAmountConfig()).build("UIFormFieldConfigAmount");
+var codecForUIFormFieldArrayConfig = () => codecForUIFormFieldBaseConfigTemplate().property("labelFieldId", codecForUiFieldId()).property("fields", codecForList(codecForUiFormField())).build("UIFormFieldConfigArray.properties");
+var codecForUiFormFieldArray = () => buildCodecForObject().property("type", codecForConstString("array")).property("properties", codecForUIFormFieldArrayConfig()).build("UIFormFieldConfigArray");
+var codecForUiFormFieldCaption = () => buildCodecForObject().property("type", codecForConstString("caption")).property("properties", codecForUIFormFieldBaseConfig()).build("UIFormFieldConfigCaption");
+var codecForUiFormSelectUiChoice = () => buildCodecForObject().property("description", codecOptional(codecForString())).property("label", codecForString()).property("value", codecForString()).build("SelectUiChoice");
+var codecForUIFormFieldWithChoiseConfig = () => codecForUIFormFieldBaseConfigTemplate().property("choices", codecForList(codecForUiFormSelectUiChoice())).build("UIFormFieldConfigChoiseHorizontal.properties");
+var codecForUiFormFieldChoiceHorizontal = () => buildCodecForObject().property("type", codecForConstString("choiceHorizontal")).property("properties", codecForUIFormFieldWithChoiseConfig()).build("UIFormFieldConfigChoiseHorizontal");
+var codecForUiFormFieldChoiceStacked = () => buildCodecForObject().property("type", codecForConstString("choiceStacked")).property("properties", codecForUIFormFieldWithChoiseConfig()).build("UIFormFieldConfigChoiseStacked");
+var codecForUIFormFieldFileConfig = () => codecForUIFormFieldBaseConfigTemplate().property("accept", codecOptional(codecForString())).property("maxBytes", codecOptional(codecForNumber())).property("minBytes", codecOptional(codecForNumber())).build("UIFormFieldConfigFile.properties");
+var codecForUiFormFieldFile = () => buildCodecForObject().property("type", codecForConstString("file")).property("properties", codecForUIFormFieldFileConfig()).build("UIFormFieldConfigFile");
+var codecForUIFormFieldWithFieldsConfig = () => codecForUIFormFieldBaseDescriptionTemplate().property("fields", codecForList(codecForUiFormField())).build("UIFormFieldConfigGroup.properties");
+var codecForUiFormFieldGroup = () => buildCodecForObject().property("type", codecForConstString("group")).property("properties", codecForUIFormFieldWithFieldsConfig()).build("UiFormFieldGroup");
+var codecForUiFormFieldInteger = () => buildCodecForObject().property("type", codecForConstString("integer")).property("properties", codecForUIFormFieldBaseConfig()).build("UIFormFieldConfigInteger");
+var codecForUIFormFieldSelectMultipleConfig = () => codecForUIFormFieldBaseConfigTemplate().property("max", codecOptional(codecForNumber())).property("min", codecOptional(codecForNumber())).property("unique", codecOptional(codecForBoolean())).property("choices", codecForList(codecForUiFormSelectUiChoice())).build("UIFormFieldConfigSelectMultiple.properties");
+var codecForUiFormFieldSelectMultiple = () => buildCodecForObject().property("type", codecForConstString("selectMultiple")).property("properties", codecForUIFormFieldSelectMultipleConfig()).build("UiFormFieldSelectMultiple");
+var codecForUiFormFieldSelectOne = () => buildCodecForObject().property("type", codecForConstString("selectOne")).property("properties", codecForUIFormFieldWithChoiseConfig()).build("UIFormFieldConfigSelectOne");
+var codecForUiFormFieldText = () => buildCodecForObject().property("type", codecForConstString("text")).property("properties", codecForUIFormFieldBaseConfig()).build("UIFormFieldConfigText");
+var codecForUiFormFieldTextArea = () => buildCodecForObject().property("type", codecForConstString("textArea")).property("properties", codecForUIFormFieldBaseConfig()).build("UIFormFieldConfigTextArea");
+var codecForUiFormFieldToggle = () => buildCodecForObject().property("type", codecForConstString("toggle")).property("properties", codecForUIFormFieldBaseConfig()).build("UIFormFieldConfigToggle");
+var codecForUiFormField = () => buildCodecForUnion().discriminateOn("type").alternative("array", codecForLazy(codecForUiFormFieldArray)).alternative("group", codecForLazy(codecForUiFormFieldGroup)).alternative("absoluteTime", codecForUiFormFieldAbsoluteTime()).alternative("amount", codecForUiFormFieldAmount()).alternative("caption", codecForUiFormFieldCaption()).alternative("choiceHorizontal", codecForUiFormFieldChoiceHorizontal()).alternative("choiceStacked", codecForUiFormFieldChoiceStacked()).alternative("file", codecForUiFormFieldFile()).alternative("integer", codecForUiFormFieldInteger()).alternative("selectMultiple", codecForUiFormFieldSelectMultiple()).alternative("selectOne", codecForUiFormFieldSelectOne()).alternative("text", codecForUiFormFieldText()).alternative("textArea", codecForUiFormFieldTextArea()).alternative("toggle", codecForUiFormFieldToggle()).build("UIFormField");
+var codecForDoubleColumnFormSection = () => buildCodecForObject().property("title", codecForString()).property("description", codecOptional(codecForString())).property("fields", codecForList(codecForUiFormField())).build("DoubleColumnFormSection");
+var codecForDoubleColumnForm = () => buildCodecForObject().property("type", codecForConstString("double-column")).property("design", codecForList(codecForDoubleColumnFormSection())).build("DoubleColumnForm");
+var codecForFlexibleForm = () => buildCodecForUnion().discriminateOn("type").alternative("double-column", codecForDoubleColumnForm()).build("FlexibleForm");
+var codecForFormMetadata = () => buildCodecForObject().property("label", codecForString()).property("id", codecForString()).property("version", codecForNumber()).property("config", codecForFlexibleForm()).build("FormMetadata");
+var codecForUIForms = () => buildCodecForObject().property("forms", codecForList(codecForFormMetadata())).build("UiForms");
+var amlStateConverter = {
+ toStringUI: stringifyAmlState,
+ fromStringUI: parseAmlState
+};
+function stringifyAmlState(s32) {
+ if (s32 === void 0)
+ return "";
+ switch (s32) {
+ case TalerExchangeApi.AmlState.normal:
+ return "normal";
+ case TalerExchangeApi.AmlState.pending:
+ return "pending";
+ case TalerExchangeApi.AmlState.frozen:
+ return "frozen";
+ }
+}
+function parseAmlState(s32) {
+ switch (s32) {
+ case "normal":
+ return TalerExchangeApi.AmlState.normal;
+ case "pending":
+ return TalerExchangeApi.AmlState.pending;
+ case "frozen":
+ return TalerExchangeApi.AmlState.frozen;
+ default:
+ throw Error(`unknown AML state: ${s32}`);
+ }
+}
+function amountConverter(config) {
+ const currency = config["currency"];
+ if (!currency || typeof currency !== "string") {
+ throw Error(`amount converter needs a currency`);
+ }
+ return {
+ fromStringUI(v3) {
+ return Amounts.parse(`${currency}:${v3}`) ?? Amounts.zeroOfCurrency(currency);
+ },
+ toStringUI(v3) {
+ return v3 === void 0 ? "" : Amounts.stringifyValue(v3);
+ }
+ };
+}
+function absTimeConverter(config) {
+ const pattern = config["pattern"];
+ if (!pattern || typeof pattern !== "string") {
+ throw Error(`absTime converter needs a pattern`);
+ }
+ return {
+ fromStringUI(v3) {
+ if (v3 === void 0) {
+ return AbsoluteTime.never();
+ }
+ try {
+ const time = parse(v3, pattern, /* @__PURE__ */ new Date());
+ return AbsoluteTime.fromMilliseconds(time.getTime());
+ } catch (e22) {
+ return AbsoluteTime.never();
+ }
+ },
+ toStringUI(v3) {
+ if (v3 === void 0)
+ return "";
+ const d32 = v3;
+ if (d32.t_ms === "never")
+ return "never";
+ try {
+ return format(d32.t_ms, pattern);
+ } catch (e22) {
+ return "";
+ }
+ }
+ };
+}
+function getConverterById(id, config) {
+ if (id === "Taler.AbsoluteTime") {
+ return absTimeConverter(config);
+ }
+ if (id === "Taler.Amount") {
+ return amountConverter(config);
+ }
+ if (id === "TalerExchangeApi.AmlState") {
+ return amlStateConverter;
+ }
+ return void 0;
+}
// src/App.tsx
init_preact_module();
-
-// src/Dashboard.tsx
-init_preact_module();
init_hooks_module();
-// src/hooks/useOfficer.ts
-init_hooks_module();
+// ../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/core/dist/index.mjs
+init_compat_module();
+var import_shim = __toESM(require_shim(), 1);
-// src/context/config.ts
-init_preact_module();
-init_hooks_module();
-var Context5 = B(void 0);
-var useExchangeApiContext = () => q2(Context5);
-var useMaybeExchangeApiContext = () => q2(Context5);
-var ExchangeApiProvider = ({
- baseUrl,
- children,
- frameOnError
-}) => {
- const [checked, setChecked] = p3();
- const { i18n: i18n2 } = useTranslationContext();
- const url = new URL(baseUrl);
- const api = new TalerExchangeHttpClient(url.href, new BrowserFetchHttpLib());
- h2(() => {
- api.getConfig().then((resp) => {
- if (resp.type === "fail") {
- setChecked({ type: "error", error: TalerError.fromUncheckedDetail(resp.detail) });
- } else if (api.isCompatible(resp.body.version)) {
- setChecked({ type: "ok", config: resp.body });
- } else {
- setChecked({ type: "incompatible", result: resp.body, supported: api.PROTOCOL_VERSION });
+// ../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/_internal/dist/index.mjs
+init_compat_module();
+var noop = () => {
+};
+var UNDEFINED = (
+ /*#__NOINLINE__*/
+ noop()
+);
+var OBJECT = Object;
+var isUndefined = (v3) => v3 === UNDEFINED;
+var isFunction = (v3) => typeof v3 == "function";
+var mergeObjects = (a6, b5) => ({
+ ...a6,
+ ...b5
+});
+var isPromiseLike = (x6) => isFunction(x6.then);
+var table = /* @__PURE__ */ new WeakMap();
+var counter = 0;
+var stableHash = (arg) => {
+ const type = typeof arg;
+ const constructor = arg && arg.constructor;
+ const isDate3 = constructor == Date;
+ let result;
+ let index;
+ if (OBJECT(arg) === arg && !isDate3 && constructor != RegExp) {
+ result = table.get(arg);
+ if (result)
+ return result;
+ result = ++counter + "~";
+ table.set(arg, result);
+ if (constructor == Array) {
+ result = "@";
+ for (index = 0; index < arg.length; index++) {
+ result += stableHash(arg[index]) + ",";
}
- }).catch((error2) => {
- if (error2 instanceof TalerError) {
- setChecked({ type: "error", error: error2 });
+ table.set(arg, result);
+ }
+ if (constructor == OBJECT) {
+ result = "#";
+ const keys = OBJECT.keys(arg).sort();
+ while (!isUndefined(index = keys.pop())) {
+ if (!isUndefined(arg[index])) {
+ result += index + ":" + stableHash(arg[index]) + ",";
+ }
}
+ table.set(arg, result);
+ }
+ } else {
+ result = isDate3 ? arg.toJSON() : type == "symbol" ? arg.toString() : type == "string" ? JSON.stringify(arg) : "" + arg;
+ }
+ return result;
+};
+var SWRGlobalState = /* @__PURE__ */ new WeakMap();
+var EMPTY_CACHE = {};
+var INITIAL_CACHE = {};
+var STR_UNDEFINED = "undefined";
+var isWindowDefined = typeof window != STR_UNDEFINED;
+var isDocumentDefined = typeof document != STR_UNDEFINED;
+var hasRequestAnimationFrame = () => isWindowDefined && typeof window["requestAnimationFrame"] != STR_UNDEFINED;
+var createCacheHelper = (cache2, key) => {
+ const state = SWRGlobalState.get(cache2);
+ return [
+ // Getter
+ () => !isUndefined(key) && cache2.get(key) || EMPTY_CACHE,
+ // Setter
+ (info) => {
+ if (!isUndefined(key)) {
+ const prev = cache2.get(key);
+ if (!(key in INITIAL_CACHE)) {
+ INITIAL_CACHE[key] = prev;
+ }
+ state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);
+ }
+ },
+ // Subscriber
+ state[6],
+ // Get server cache snapshot
+ () => {
+ if (!isUndefined(key)) {
+ if (key in INITIAL_CACHE)
+ return INITIAL_CACHE[key];
+ }
+ return !isUndefined(key) && cache2.get(key) || EMPTY_CACHE;
+ }
+ ];
+};
+var online = true;
+var isOnline = () => online;
+var [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [
+ window.addEventListener.bind(window),
+ window.removeEventListener.bind(window)
+] : [
+ noop,
+ noop
+];
+var isVisible = () => {
+ const visibilityState = isDocumentDefined && document.visibilityState;
+ return isUndefined(visibilityState) || visibilityState !== "hidden";
+};
+var initFocus = (callback) => {
+ if (isDocumentDefined) {
+ document.addEventListener("visibilitychange", callback);
+ }
+ onWindowEvent("focus", callback);
+ return () => {
+ if (isDocumentDefined) {
+ document.removeEventListener("visibilitychange", callback);
+ }
+ offWindowEvent("focus", callback);
+ };
+};
+var initReconnect = (callback) => {
+ const onOnline = () => {
+ online = true;
+ callback();
+ };
+ const onOffline = () => {
+ online = false;
+ };
+ onWindowEvent("online", onOnline);
+ onWindowEvent("offline", onOffline);
+ return () => {
+ offWindowEvent("online", onOnline);
+ offWindowEvent("offline", onOffline);
+ };
+};
+var preset = {
+ isOnline,
+ isVisible
+};
+var defaultConfigOptions = {
+ initFocus,
+ initReconnect
+};
+var IS_REACT_LEGACY = !bn.useId;
+var IS_SERVER = !isWindowDefined || "Deno" in window;
+var rAF = (f3) => hasRequestAnimationFrame() ? window["requestAnimationFrame"](f3) : setTimeout(f3, 1);
+var useIsomorphicLayoutEffect = IS_SERVER ? h2 : s2;
+var navigatorConnection = typeof navigator !== "undefined" && navigator.connection;
+var slowConnection = !IS_SERVER && navigatorConnection && ([
+ "slow-2g",
+ "2g"
+].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);
+var serialize = (key) => {
+ if (isFunction(key)) {
+ try {
+ key = key();
+ } catch (err) {
+ key = "";
+ }
+ }
+ const args = key;
+ key = typeof key == "string" ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : "";
+ return [
+ key,
+ args
+ ];
+};
+var __timestamp = 0;
+var getTimestamp = () => ++__timestamp;
+var FOCUS_EVENT = 0;
+var RECONNECT_EVENT = 1;
+var MUTATE_EVENT = 2;
+var ERROR_REVALIDATE_EVENT = 3;
+var events = {
+ __proto__: null,
+ ERROR_REVALIDATE_EVENT,
+ FOCUS_EVENT,
+ MUTATE_EVENT,
+ RECONNECT_EVENT
+};
+async function internalMutate(...args) {
+ const [cache2, _key, _data, _opts] = args;
+ const options = mergeObjects({
+ populateCache: true,
+ throwOnError: true
+ }, typeof _opts === "boolean" ? {
+ revalidate: _opts
+ } : _opts || {});
+ let populateCache = options.populateCache;
+ const rollbackOnErrorOption = options.rollbackOnError;
+ let optimisticData = options.optimisticData;
+ const revalidate = options.revalidate !== false;
+ const rollbackOnError = (error2) => {
+ return typeof rollbackOnErrorOption === "function" ? rollbackOnErrorOption(error2) : rollbackOnErrorOption !== false;
+ };
+ const throwOnError = options.throwOnError;
+ if (isFunction(_key)) {
+ const keyFilter = _key;
+ const matchedKeys = [];
+ const it = cache2.keys();
+ for (const key of it) {
+ if (
+ // Skip the special useSWRInfinite and useSWRSubscription keys.
+ !/^\$(inf|sub)\$/.test(key) && keyFilter(cache2.get(key)._k)
+ ) {
+ matchedKeys.push(key);
+ }
+ }
+ return Promise.all(matchedKeys.map(mutateByKey));
+ }
+ return mutateByKey(_key);
+ async function mutateByKey(_k) {
+ const [key] = serialize(_k);
+ if (!key)
+ return;
+ const [get, set] = createCacheHelper(cache2, key);
+ const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache2);
+ const startRevalidate = () => {
+ const revalidators = EVENT_REVALIDATORS[key];
+ if (revalidate) {
+ delete FETCH[key];
+ delete PRELOAD[key];
+ if (revalidators && revalidators[0]) {
+ return revalidators[0](MUTATE_EVENT).then(() => get().data);
+ }
+ }
+ return get().data;
+ };
+ if (args.length < 3) {
+ return startRevalidate();
+ }
+ let data = _data;
+ let error2;
+ const beforeMutationTs = getTimestamp();
+ MUTATION[key] = [
+ beforeMutationTs,
+ 0
+ ];
+ const hasOptimisticData = !isUndefined(optimisticData);
+ const state = get();
+ const displayedData = state.data;
+ const currentData = state._c;
+ const committedData = isUndefined(currentData) ? displayedData : currentData;
+ if (hasOptimisticData) {
+ optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;
+ set({
+ data: optimisticData,
+ _c: committedData
+ });
+ }
+ if (isFunction(data)) {
+ try {
+ data = data(committedData);
+ } catch (err) {
+ error2 = err;
+ }
+ }
+ if (data && isPromiseLike(data)) {
+ data = await data.catch((err) => {
+ error2 = err;
+ });
+ if (beforeMutationTs !== MUTATION[key][0]) {
+ if (error2)
+ throw error2;
+ return data;
+ } else if (error2 && hasOptimisticData && rollbackOnError(error2)) {
+ populateCache = true;
+ set({
+ data: committedData,
+ _c: UNDEFINED
+ });
+ }
+ }
+ if (populateCache) {
+ if (!error2) {
+ if (isFunction(populateCache)) {
+ const populateCachedData = populateCache(data, committedData);
+ set({
+ data: populateCachedData,
+ error: UNDEFINED,
+ _c: UNDEFINED
+ });
+ } else {
+ set({
+ data,
+ error: UNDEFINED,
+ _c: UNDEFINED
+ });
+ }
+ }
+ }
+ MUTATION[key][1] = getTimestamp();
+ Promise.resolve(startRevalidate()).then(() => {
+ set({
+ _c: UNDEFINED
+ });
});
- }, []);
- if (checked === void 0) {
- return h(frameOnError, { children: h("div", {}, "loading...") });
+ if (error2) {
+ if (throwOnError)
+ throw error2;
+ return;
+ }
+ return data;
}
- if (checked.type === "error") {
- return h(frameOnError, { children: h(ErrorLoading, { error: checked.error, showDetail: true }) });
+}
+var revalidateAllKeys = (revalidators, type) => {
+ for (const key in revalidators) {
+ if (revalidators[key][0])
+ revalidators[key][0](type);
}
- if (checked.type === "incompatible") {
- return h(frameOnError, { children: h("div", {}, i18n2.str`the bank backend is not supported. supported version "${checked.supported}", server version "${checked.result.version}"`) });
+};
+var initCache = (provider, options) => {
+ if (!SWRGlobalState.has(provider)) {
+ const opts = mergeObjects(defaultConfigOptions, options);
+ const EVENT_REVALIDATORS = {};
+ const mutate2 = internalMutate.bind(UNDEFINED, provider);
+ let unmount = noop;
+ const subscriptions = {};
+ const subscribe = (key, callback) => {
+ const subs = subscriptions[key] || [];
+ subscriptions[key] = subs;
+ subs.push(callback);
+ return () => subs.splice(subs.indexOf(callback), 1);
+ };
+ const setter = (key, value, prev) => {
+ provider.set(key, value);
+ const subs = subscriptions[key];
+ if (subs) {
+ for (const fn2 of subs) {
+ fn2(value, prev);
+ }
+ }
+ };
+ const initProvider = () => {
+ if (!SWRGlobalState.has(provider)) {
+ SWRGlobalState.set(provider, [
+ EVENT_REVALIDATORS,
+ {},
+ {},
+ {},
+ mutate2,
+ setter,
+ subscribe
+ ]);
+ if (!IS_SERVER) {
+ const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));
+ const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));
+ unmount = () => {
+ releaseFocus && releaseFocus();
+ releaseReconnect && releaseReconnect();
+ SWRGlobalState.delete(provider);
+ };
+ }
+ }
+ };
+ initProvider();
+ return [
+ provider,
+ mutate2,
+ initProvider,
+ unmount
+ ];
}
- const value = {
- url,
- config: checked.config,
- api
+ return [
+ provider,
+ SWRGlobalState.get(provider)[4]
+ ];
+};
+var onErrorRetry = (_3, __, config, revalidate, opts) => {
+ const maxRetryCount = config.errorRetryCount;
+ const currentRetryCount = opts.retryCount;
+ const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;
+ if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {
+ return;
+ }
+ setTimeout(revalidate, timeout, opts);
+};
+var compare = (currentData, newData) => stableHash(currentData) == stableHash(newData);
+var [cache, mutate] = initCache(/* @__PURE__ */ new Map());
+var defaultConfig = mergeObjects(
+ {
+ // events
+ onLoadingSlow: noop,
+ onSuccess: noop,
+ onError: noop,
+ onErrorRetry,
+ onDiscarded: noop,
+ // switches
+ revalidateOnFocus: true,
+ revalidateOnReconnect: true,
+ revalidateIfStale: true,
+ shouldRetryOnError: true,
+ // timeouts
+ errorRetryInterval: slowConnection ? 1e4 : 5e3,
+ focusThrottleInterval: 5 * 1e3,
+ dedupingInterval: 2 * 1e3,
+ loadingTimeout: slowConnection ? 5e3 : 3e3,
+ // providers
+ compare,
+ isPaused: () => false,
+ cache,
+ mutate,
+ fallback: {}
+ },
+ // use web preset by default
+ preset
+);
+var mergeConfigs = (a6, b5) => {
+ const v3 = mergeObjects(a6, b5);
+ if (b5) {
+ const { use: u1, fallback: f1 } = a6;
+ const { use: u22, fallback: f22 } = b5;
+ if (u1 && u22) {
+ v3.use = u1.concat(u22);
+ }
+ if (f1 && f22) {
+ v3.fallback = mergeObjects(f1, f22);
+ }
+ }
+ return v3;
+};
+var SWRConfigContext = B({});
+var SWRConfig = (props) => {
+ const { value } = props;
+ const parentConfig = q2(SWRConfigContext);
+ const isFunctionalConfig = isFunction(value);
+ const config = F(() => isFunctionalConfig ? value(parentConfig) : value, [
+ isFunctionalConfig,
+ parentConfig,
+ value
+ ]);
+ const extendedConfig = F(() => isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [
+ isFunctionalConfig,
+ parentConfig,
+ config
+ ]);
+ const provider = config && config.provider;
+ const cacheContextRef = _2(UNDEFINED);
+ if (provider && !cacheContextRef.current) {
+ cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);
+ }
+ const cacheContext = cacheContextRef.current;
+ if (cacheContext) {
+ extendedConfig.cache = cacheContext[0];
+ extendedConfig.mutate = cacheContext[1];
+ }
+ useIsomorphicLayoutEffect(() => {
+ if (cacheContext) {
+ cacheContext[2] && cacheContext[2]();
+ return cacheContext[3];
+ }
+ }, []);
+ return h(SWRConfigContext.Provider, mergeObjects(props, {
+ value: extendedConfig
+ }));
+};
+var INFINITE_PREFIX = "$inf$";
+var enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;
+var use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];
+var setupDevTools = () => {
+ if (enableDevtools) {
+ window.__SWR_DEVTOOLS_REACT__ = bn;
+ }
+};
+var normalize = (args) => {
+ return isFunction(args[1]) ? [
+ args[0],
+ args[1],
+ args[2] || {}
+ ] : [
+ args[0],
+ null,
+ (args[1] === null ? args[2] : args[1]) || {}
+ ];
+};
+var useSWRConfig = () => {
+ return mergeObjects(defaultConfig, q2(SWRConfigContext));
+};
+var middleware = (useSWRNext) => (key_, fetcher_, config) => {
+ const fetcher = fetcher_ && ((...args) => {
+ const [key] = serialize(key_);
+ const [, , , PRELOAD] = SWRGlobalState.get(cache);
+ if (key.startsWith(INFINITE_PREFIX)) {
+ return fetcher_(...args);
+ }
+ const req = PRELOAD[key];
+ if (isUndefined(req))
+ return fetcher_(...args);
+ delete PRELOAD[key];
+ return req;
+ });
+ return useSWRNext(key_, fetcher, config);
+};
+var BUILT_IN_MIDDLEWARE = use.concat(middleware);
+var withArgs = (hook) => {
+ return function useSWRArgs(...args) {
+ const fallbackConfig = useSWRConfig();
+ const [key, fn2, _config] = normalize(args);
+ const config = mergeConfigs(fallbackConfig, _config);
+ let next = hook;
+ const { use: use3 } = config;
+ const middleware2 = (use3 || []).concat(BUILT_IN_MIDDLEWARE);
+ for (let i5 = middleware2.length; i5--; ) {
+ next = middleware2[i5](next);
+ }
+ return next(key, fn2 || config.fetcher || null, config);
};
- return h(Context5.Provider, {
- value,
- children
+};
+var subscribeCallback = (key, callbacks, callback) => {
+ const keyedRevalidators = callbacks[key] || (callbacks[key] = []);
+ keyedRevalidators.push(callback);
+ return () => {
+ const index = keyedRevalidators.indexOf(callback);
+ if (index >= 0) {
+ keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];
+ keyedRevalidators.pop();
+ }
+ };
+};
+setupDevTools();
+
+// ../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/core/dist/index.mjs
+var use2 = bn.use || ((promise) => {
+ if (promise.status === "pending") {
+ throw promise;
+ } else if (promise.status === "fulfilled") {
+ return promise.value;
+ } else if (promise.status === "rejected") {
+ throw promise.reason;
+ } else {
+ promise.status = "pending";
+ promise.then((v3) => {
+ promise.status = "fulfilled";
+ promise.value = v3;
+ }, (e5) => {
+ promise.status = "rejected";
+ promise.reason = e5;
+ });
+ throw promise;
+ }
+});
+var WITH_DEDUPE = {
+ dedupe: true
+};
+var useSWRHandler = (_key, fetcher, config) => {
+ const { cache: cache2, compare: compare2, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;
+ const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache2);
+ const [key, fnArg] = serialize(_key);
+ const initialMountedRef = _2(false);
+ const unmountedRef = _2(false);
+ const keyRef = _2(key);
+ const fetcherRef = _2(fetcher);
+ const configRef = _2(config);
+ const getConfig = () => configRef.current;
+ const isActive = () => getConfig().isVisible() && getConfig().isOnline();
+ const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache2, key);
+ const stateDependencies = _2({}).current;
+ const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;
+ const isEqual = (prev, current) => {
+ for (const _3 in stateDependencies) {
+ const t5 = _3;
+ if (t5 === "data") {
+ if (!compare2(prev[t5], current[t5])) {
+ if (!isUndefined(prev[t5])) {
+ return false;
+ }
+ if (!compare2(returnedData, current[t5])) {
+ return false;
+ }
+ }
+ } else {
+ if (current[t5] !== prev[t5]) {
+ return false;
+ }
+ }
+ }
+ return true;
+ };
+ const getSnapshot = F(() => {
+ const shouldStartRequest = (() => {
+ if (!key)
+ return false;
+ if (!fetcher)
+ return false;
+ if (!isUndefined(revalidateOnMount))
+ return revalidateOnMount;
+ if (getConfig().isPaused())
+ return false;
+ if (suspense)
+ return false;
+ if (!isUndefined(revalidateIfStale))
+ return revalidateIfStale;
+ return true;
+ })();
+ const getSelectedCache = (state) => {
+ const snapshot = mergeObjects(state);
+ delete snapshot._k;
+ if (!shouldStartRequest) {
+ return snapshot;
+ }
+ return {
+ isValidating: true,
+ isLoading: true,
+ ...snapshot
+ };
+ };
+ const cachedData2 = getCache();
+ const initialData = getInitialCache();
+ const clientSnapshot = getSelectedCache(cachedData2);
+ const serverSnapshot = cachedData2 === initialData ? clientSnapshot : getSelectedCache(initialData);
+ let memorizedSnapshot = clientSnapshot;
+ return [
+ () => {
+ const newSnapshot = getSelectedCache(getCache());
+ const compareResult = isEqual(newSnapshot, memorizedSnapshot);
+ if (compareResult) {
+ memorizedSnapshot.data = newSnapshot.data;
+ memorizedSnapshot.isLoading = newSnapshot.isLoading;
+ memorizedSnapshot.isValidating = newSnapshot.isValidating;
+ memorizedSnapshot.error = newSnapshot.error;
+ return memorizedSnapshot;
+ } else {
+ memorizedSnapshot = newSnapshot;
+ return newSnapshot;
+ }
+ },
+ () => serverSnapshot
+ ];
+ }, [
+ cache2,
+ key
+ ]);
+ const cached = (0, import_shim.useSyncExternalStore)(T2(
+ (callback) => subscribeCache(key, (current, prev) => {
+ if (!isEqual(prev, current))
+ callback();
+ }),
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ [
+ cache2,
+ key
+ ]
+ ), getSnapshot[0], getSnapshot[1]);
+ const isInitialMount = !initialMountedRef.current;
+ const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;
+ const cachedData = cached.data;
+ const data = isUndefined(cachedData) ? fallback : cachedData;
+ const error2 = cached.error;
+ const laggyDataRef = _2(data);
+ const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;
+ const shouldDoInitialRevalidation = (() => {
+ if (hasRevalidator && !isUndefined(error2))
+ return false;
+ if (isInitialMount && !isUndefined(revalidateOnMount))
+ return revalidateOnMount;
+ if (getConfig().isPaused())
+ return false;
+ if (suspense)
+ return isUndefined(data) ? false : revalidateIfStale;
+ return isUndefined(data) || revalidateIfStale;
+ })();
+ const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);
+ const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;
+ const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;
+ const revalidate = T2(
+ async (revalidateOpts) => {
+ const currentFetcher = fetcherRef.current;
+ if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {
+ return false;
+ }
+ let newData;
+ let startAt;
+ let loading = true;
+ const opts = revalidateOpts || {};
+ const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;
+ const callbackSafeguard = () => {
+ if (IS_REACT_LEGACY) {
+ return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;
+ }
+ return key === keyRef.current;
+ };
+ const finalState = {
+ isValidating: false,
+ isLoading: false
+ };
+ const finishRequestAndUpdateState = () => {
+ setCache(finalState);
+ };
+ const cleanupState = () => {
+ const requestInfo = FETCH[key];
+ if (requestInfo && requestInfo[1] === startAt) {
+ delete FETCH[key];
+ }
+ };
+ const initialState = {
+ isValidating: true
+ };
+ if (isUndefined(getCache().data)) {
+ initialState.isLoading = true;
+ }
+ try {
+ if (shouldStartNewRequest) {
+ setCache(initialState);
+ if (config.loadingTimeout && isUndefined(getCache().data)) {
+ setTimeout(() => {
+ if (loading && callbackSafeguard()) {
+ getConfig().onLoadingSlow(key, config);
+ }
+ }, config.loadingTimeout);
+ }
+ FETCH[key] = [
+ currentFetcher(fnArg),
+ getTimestamp()
+ ];
+ }
+ [newData, startAt] = FETCH[key];
+ newData = await newData;
+ if (shouldStartNewRequest) {
+ setTimeout(cleanupState, config.dedupingInterval);
+ }
+ if (!FETCH[key] || FETCH[key][1] !== startAt) {
+ if (shouldStartNewRequest) {
+ if (callbackSafeguard()) {
+ getConfig().onDiscarded(key);
+ }
+ }
+ return false;
+ }
+ finalState.error = UNDEFINED;
+ const mutationInfo = MUTATION[key];
+ if (!isUndefined(mutationInfo) && // case 1
+ (startAt <= mutationInfo[0] || // case 2
+ startAt <= mutationInfo[1] || // case 3
+ mutationInfo[1] === 0)) {
+ finishRequestAndUpdateState();
+ if (shouldStartNewRequest) {
+ if (callbackSafeguard()) {
+ getConfig().onDiscarded(key);
+ }
+ }
+ return false;
+ }
+ const cacheData = getCache().data;
+ finalState.data = compare2(cacheData, newData) ? cacheData : newData;
+ if (shouldStartNewRequest) {
+ if (callbackSafeguard()) {
+ getConfig().onSuccess(newData, key, config);
+ }
+ }
+ } catch (err) {
+ cleanupState();
+ const currentConfig = getConfig();
+ const { shouldRetryOnError } = currentConfig;
+ if (!currentConfig.isPaused()) {
+ finalState.error = err;
+ if (shouldStartNewRequest && callbackSafeguard()) {
+ currentConfig.onError(err, key, currentConfig);
+ if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {
+ if (isActive()) {
+ currentConfig.onErrorRetry(err, key, currentConfig, (_opts) => {
+ const revalidators = EVENT_REVALIDATORS[key];
+ if (revalidators && revalidators[0]) {
+ revalidators[0](events.ERROR_REVALIDATE_EVENT, _opts);
+ }
+ }, {
+ retryCount: (opts.retryCount || 0) + 1,
+ dedupe: true
+ });
+ }
+ }
+ }
+ }
+ }
+ loading = false;
+ finishRequestAndUpdateState();
+ return true;
+ },
+ // `setState` is immutable, and `eventsCallback`, `fnArg`, and
+ // `keyValidating` are depending on `key`, so we can exclude them from
+ // the deps array.
+ //
+ // FIXME:
+ // `fn` and `config` might be changed during the lifecycle,
+ // but they might be changed every render like this.
+ // `useSWR('key', () => fetch('/api/'), { suspense: true })`
+ // So we omit the values from the deps array
+ // even though it might cause unexpected behaviors.
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ [
+ key,
+ cache2
+ ]
+ );
+ const boundMutate = T2(
+ // Use callback to make sure `keyRef.current` returns latest result every time
+ (...args) => {
+ return internalMutate(cache2, keyRef.current, ...args);
+ },
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ []
+ );
+ useIsomorphicLayoutEffect(() => {
+ fetcherRef.current = fetcher;
+ configRef.current = config;
+ if (!isUndefined(cachedData)) {
+ laggyDataRef.current = cachedData;
+ }
});
+ useIsomorphicLayoutEffect(() => {
+ if (!key)
+ return;
+ const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);
+ let nextFocusRevalidatedAt = 0;
+ const onRevalidate = (type, opts = {}) => {
+ if (type == events.FOCUS_EVENT) {
+ const now = Date.now();
+ if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {
+ nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;
+ softRevalidate();
+ }
+ } else if (type == events.RECONNECT_EVENT) {
+ if (getConfig().revalidateOnReconnect && isActive()) {
+ softRevalidate();
+ }
+ } else if (type == events.MUTATE_EVENT) {
+ return revalidate();
+ } else if (type == events.ERROR_REVALIDATE_EVENT) {
+ return revalidate(opts);
+ }
+ return;
+ };
+ const unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);
+ unmountedRef.current = false;
+ keyRef.current = key;
+ initialMountedRef.current = true;
+ setCache({
+ _k: fnArg
+ });
+ if (shouldDoInitialRevalidation) {
+ if (isUndefined(data) || IS_SERVER) {
+ softRevalidate();
+ } else {
+ rAF(softRevalidate);
+ }
+ }
+ return () => {
+ unmountedRef.current = true;
+ unsubEvents();
+ };
+ }, [
+ key
+ ]);
+ useIsomorphicLayoutEffect(() => {
+ let timer2;
+ function next() {
+ const interval = isFunction(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;
+ if (interval && timer2 !== -1) {
+ timer2 = setTimeout(execute, interval);
+ }
+ }
+ function execute() {
+ if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {
+ revalidate(WITH_DEDUPE).then(next);
+ } else {
+ next();
+ }
+ }
+ next();
+ return () => {
+ if (timer2) {
+ clearTimeout(timer2);
+ timer2 = -1;
+ }
+ };
+ }, [
+ refreshInterval,
+ refreshWhenHidden,
+ refreshWhenOffline,
+ key
+ ]);
+ x2(returnedData);
+ if (suspense && isUndefined(data) && key) {
+ if (!IS_REACT_LEGACY && IS_SERVER) {
+ throw new Error("Fallback data is required when using suspense in SSR.");
+ }
+ fetcherRef.current = fetcher;
+ configRef.current = config;
+ unmountedRef.current = false;
+ const req = PRELOAD[key];
+ if (!isUndefined(req)) {
+ const promise = boundMutate(req);
+ use2(promise);
+ }
+ if (isUndefined(error2)) {
+ const promise = revalidate(WITH_DEDUPE);
+ if (!isUndefined(returnedData)) {
+ promise.status = "fulfilled";
+ promise.value = true;
+ }
+ use2(promise);
+ } else {
+ throw error2;
+ }
+ }
+ return {
+ mutate: boundMutate,
+ get data() {
+ stateDependencies.data = true;
+ return returnedData;
+ },
+ get error() {
+ stateDependencies.error = true;
+ return error2;
+ },
+ get isValidating() {
+ stateDependencies.isValidating = true;
+ return isValidating;
+ },
+ get isLoading() {
+ stateDependencies.isLoading = true;
+ return isLoading;
+ }
+ };
};
+var SWRConfig2 = OBJECT.defineProperty(SWRConfig, "defaultValue", {
+ value: defaultConfig
+});
+var useSWR = withArgs(useSWRHandler);
+
+// src/ExchangeAmlFrame.tsx
+init_preact_module();
+init_hooks_module();
+
+// src/Routing.tsx
+init_preact_module();
+init_hooks_module();
+
+// src/hooks/officer.ts
+init_hooks_module();
-// src/hooks/useOfficer.ts
+// src/hooks/preferences.ts
+var codecForPreferences = () => buildCodecForObject().property("allowInsecurePassword", codecForBoolean()).property("keepSessionAfterReload", codecForBoolean()).build("Preferences");
+var defaultPreferences = {
+ allowInsecurePassword: false,
+ keepSessionAfterReload: false
+};
+var PREFERENCES_KEY = buildStorageKey(
+ "exchange-preferences",
+ codecForPreferences()
+);
+function usePreferences() {
+ const { value, update } = useLocalStorage(
+ PREFERENCES_KEY,
+ defaultPreferences
+ );
+ function updateField(k6, v3) {
+ const newValue = { ...value, [k6]: v3 };
+ update(newValue);
+ }
+ return [value, updateField];
+}
+function getAllBooleanPreferences() {
+ return [
+ "allowInsecurePassword",
+ "keepSessionAfterReload"
+ ];
+}
+function getLabelForPreferences(k6, i18n2) {
+ switch (k6) {
+ case "allowInsecurePassword":
+ return i18n2.str`Allow Insecure password`;
+ case "keepSessionAfterReload":
+ return i18n2.str`Keep session after reload`;
+ }
+}
+
+// src/hooks/officer.ts
var codecForLockedAccount = codecForString();
var codecForOfficerAccount = () => buildCodecForObject().property("id", codecForString()).property("strKey", codecForString()).build("OfficerAccount");
var codecForOfficer = () => buildCodecForObject().property("account", codecForLockedAccount).property("when", codecForAbsoluteTime).build("Officer");
var OFFICER_KEY = buildStorageKey("officer", codecForOfficer());
-var DEV_ACCOUNT_KEY = buildStorageKey("account-dev", codecForOfficerAccount());
+var DEV_ACCOUNT_KEY = buildStorageKey(
+ "account-dev",
+ codecForOfficerAccount()
+);
function useOfficer() {
- const exchangeContext = useMaybeExchangeApiContext();
+ const { lib: { exchange: api } } = useExchangeApiContext();
+ const [pref] = usePreferences();
+ pref.keepSessionAfterReload;
const accountStorage = useLocalStorage(DEV_ACCOUNT_KEY);
- const account2 = F(() => {
+ const account = F(() => {
if (!accountStorage.value)
return void 0;
return {
id: accountStorage.value.id,
signingKey: decodeCrock(accountStorage.value.strKey)
};
- }, [accountStorage.value]);
+ }, [accountStorage.value?.id, accountStorage.value?.strKey]);
const officerStorage = useLocalStorage(OFFICER_KEY);
- const officer2 = officerStorage.value;
- if (officer2 === void 0) {
+ const officer = F(() => {
+ if (!officerStorage.value)
+ return void 0;
+ return officerStorage.value;
+ }, [officerStorage.value?.account, officerStorage.value?.when.t_ms]);
+ if (officer === void 0) {
return {
state: "not-found",
create: async (pwd) => {
- if (!exchangeContext)
- return;
- const req = await fetch(new URL("seed", exchangeContext.api.baseUrl).href);
- const b5 = await req.blob();
- const ar = await b5.arrayBuffer();
- const uintar = new Uint8Array(ar);
- const { id, safe, signingKey } = await createNewOfficerAccount(pwd, uintar);
+ const resp = await api.getSeed();
+ const extraEntropy = resp.type === "ok" ? resp.body : new Uint8Array();
+ const { id, safe, signingKey } = await createNewOfficerAccount(
+ pwd,
+ extraEntropy
+ );
officerStorage.update({
account: safe,
when: AbsoluteTime.now()
});
const strKey = encodeCrock(signingKey);
accountStorage.update({ id, strKey });
+ return opFixedSuccess(id);
}
};
}
- if (account2 === void 0) {
+ if (account === void 0) {
return {
state: "locked",
forget: () => {
officerStorage.reset();
+ return opFixedSuccess(void 0);
},
tryUnlock: async (pwd) => {
- const ac = await unlockOfficerAccount(officer2.account, pwd);
- accountStorage.update({ id: ac.id, strKey: encodeCrock(ac.signingKey) });
+ const ac = await unlockOfficerAccount(officer.account, pwd);
+ accountStorage.update({
+ id: ac.id,
+ strKey: encodeCrock(ac.signingKey)
+ });
+ return opFixedSuccess(void 0);
}
};
}
return {
state: "ready",
- account: account2,
+ account,
lock: () => {
accountStorage.reset();
+ return opFixedSuccess(void 0);
},
forget: () => {
officerStorage.reset();
accountStorage.reset();
+ return opFixedSuccess(void 0);
}
};
}
-// src/hooks/useSettings.ts
-function getAllBooleanSettings() {
- return ["allowInsecurePassword", "keepSessionAfterReload"];
+// src/pages/Cases.tsx
+init_preact_module();
+init_hooks_module();
+
+// src/hooks/useCases.ts
+init_hooks_module();
+var useSWR2 = useSWR;
+var PAGINATED_LIST_SIZE = 10;
+var PAGINATED_LIST_REQUEST = PAGINATED_LIST_SIZE + 1;
+function useCases(state) {
+ const officer = useOfficer();
+ const session = officer.state === "ready" ? officer.account : void 0;
+ const {
+ lib: { exchange: api }
+ } = useExchangeApiContext();
+ const [offset, setOffset] = p3();
+ async function fetcher([officer2, state2, offset2]) {
+ return await api.getDecisionsByState(officer2, state2, {
+ order: "asc",
+ offset: offset2,
+ limit: PAGINATED_LIST_REQUEST
+ });
+ }
+ const { data, error: error2 } = useSWR2(
+ !session ? void 0 : [session, state, offset, "getDecisionsByState"],
+ fetcher
+ );
+ if (error2)
+ return error2;
+ if (data === void 0)
+ return void 0;
+ if (data.type !== "ok")
+ return data;
+ return buildPaginatedResult(
+ data.body.records,
+ offset,
+ setOffset,
+ (d6) => String(d6.rowid)
+ );
}
-function getLabelForSetting(k6, i18n2) {
- switch (k6) {
- case "allowInsecurePassword":
- return i18n2.str`Allow Insecure password`;
- case "keepSessionAfterReload":
- return i18n2.str`Keep session after reload`;
+function buildPaginatedResult(data, offset, setOffset, getId) {
+ const isLastPage = data.length < PAGINATED_LIST_REQUEST;
+ const isFirstPage = offset === void 0;
+ const result = structuredClone(data);
+ if (result.length == PAGINATED_LIST_REQUEST) {
+ result.pop();
}
+ return {
+ type: "ok",
+ body: result,
+ isLastPage,
+ isFirstPage,
+ loadNext: () => {
+ if (!result.length)
+ return;
+ const id = getId(result[result.length - 1]);
+ setOffset(id);
+ },
+ loadFirst: () => {
+ setOffset(void 0);
+ }
+ };
}
-var codecForSettings = () => buildCodecForObject().property("allowInsecurePassword", codecForBoolean()).property("keepSessionAfterReload", codecForBoolean()).build("Settings");
+
+// src/hooks/form.ts
+init_hooks_module();
+
+// src/pages/CreateAccount.tsx
+init_preact_module();
+function createFormValidator(i18n2, allowInsecurePassword) {
+ return function check(state) {
+ const errors2 = undefinedIfEmpty({
+ password: !state.password ? i18n2.str`required` : allowInsecurePassword ? void 0 : state.password.length < 8 ? i18n2.str`should have at least 8 characters` : !state.password.match(/[a-z]/) && state.password.match(/[A-Z]/) ? i18n2.str`should have lowercase and uppercase characters` : !state.password.match(/\d/) ? i18n2.str`should have numbers` : !state.password.match(/[^a-zA-Z\d]/) ? i18n2.str`should have at least one character which is not a number or letter` : void 0,
+ repeat: !state.repeat ? i18n2.str`required` : state.password !== state.repeat ? i18n2.str`doesn't match` : void 0
+ });
+ if (errors2 === void 0) {
+ const result2 = {
+ password: state.password,
+ repeat: state.repeat
+ };
+ return {
+ status: "ok",
+ result: result2,
+ errors: errors2
+ };
+ }
+ const result = {
+ password: state.password,
+ repeat: state.repeat
+ };
+ return {
+ status: "fail",
+ result,
+ errors: errors2
+ };
+ };
+}
+function undefinedIfEmpty(obj) {
+ if (obj === void 0)
+ return void 0;
+ return Object.keys(obj).some(
+ (k6) => obj[k6] !== void 0
+ ) ? obj : void 0;
+}
+function CreateAccount() {
+ const { i18n: i18n2 } = useTranslationContext();
+ const [settings] = usePreferences();
+ const officer = useOfficer();
+ const [notification, withErrorHandler] = useLocalNotificationHandler();
+ const [form, status] = useFormState(
+ [".password", ".repeat"],
+ {
+ password: void 0,
+ repeat: void 0
+ },
+ createFormValidator(i18n2, settings.allowInsecurePassword)
+ );
+ const createAccountHandler = status.status === "fail" || officer.state !== "not-found" ? void 0 : withErrorHandler(
+ async () => officer.create(form.password.value),
+ () => {
+ }
+ );
+ return /* @__PURE__ */ h("div", { class: "flex min-h-full flex-col " }, /* @__PURE__ */ h(LocalNotificationBanner, { notification }), /* @__PURE__ */ h("div", { class: "sm:mx-auto sm:w-full sm:max-w-md" }, /* @__PURE__ */ h("h2", { class: "mt-6 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900" }, /* @__PURE__ */ h(i18n2.Translate, null, "Create account"))), /* @__PURE__ */ h("div", { class: "mt-10 sm:mx-auto sm:w-full sm:max-w-[480px] " }, /* @__PURE__ */ h("div", { class: "bg-gray-100 px-6 py-6 shadow sm:rounded-lg sm:px-12" }, /* @__PURE__ */ h(
+ "form",
+ {
+ class: "space-y-6",
+ noValidate: true,
+ onSubmit: (e5) => {
+ e5.preventDefault();
+ },
+ autoCapitalize: "none",
+ autoCorrect: "off"
+ },
+ /* @__PURE__ */ h("div", { class: "mt-2" }, /* @__PURE__ */ h(
+ InputLine,
+ {
+ label: i18n2.str`Password`,
+ name: "password",
+ type: "password",
+ required: true,
+ handler: form.password
+ }
+ )),
+ /* @__PURE__ */ h("div", { class: "mt-2" }, /* @__PURE__ */ h(
+ InputLine,
+ {
+ label: i18n2.str`Repeat password`,
+ name: "repeat",
+ type: "password",
+ required: true,
+ handler: form.repeat
+ }
+ )),
+ /* @__PURE__ */ h("div", { class: "mt-8" }, /* @__PURE__ */ h(
+ Button,
+ {
+ type: "submit",
+ disabled: !createAccountHandler,
+ class: "disabled:opacity-50 disabled:cursor-default flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600",
+ handler: createAccountHandler
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Create")
+ ))
+ ))));
+}
+
+// src/hooks/form.ts
+function constructFormHandler(shape, form, updateForm, errors2) {
+ const handler = shape.reduce((handleForm, fieldId) => {
+ const path = fieldId.split(".");
+ function updater(newValue) {
+ updateForm(setValueDeeper2(form, path, newValue));
+ }
+ const currentValue = getValueDeeper(form, path, void 0);
+ const currentError = getValueDeeper(
+ errors2,
+ path,
+ void 0
+ );
+ const field = {
+ error: currentError,
+ value: currentValue,
+ onChange: updater,
+ state: {}
+ //FIXME: add the state of the field (hidden, )
+ };
+ return setValueDeeper2(handleForm, path, field);
+ }, {});
+ return handler;
+}
+function useFormState(shape, defaultValue, check) {
+ const [form, updateForm] = p3(defaultValue);
+ const status = check(form);
+ const handler = constructFormHandler(shape, form, updateForm, status.errors);
+ return [handler, status];
+}
+function getValueDeeper(object, names2, notFoundValue) {
+ if (names2.length === 0)
+ return object;
+ const [head, ...rest] = names2;
+ if (!head) {
+ return getValueDeeper(object, rest, notFoundValue);
+ }
+ if (object === void 0) {
+ return notFoundValue;
+ }
+ return getValueDeeper(object[head], rest, notFoundValue);
+}
+function setValueDeeper2(object, names2, value) {
+ if (names2.length === 0)
+ return value;
+ const [head, ...rest] = names2;
+ if (!head) {
+ return setValueDeeper2(object, rest, value);
+ }
+ if (object === void 0) {
+ return undefinedIfEmpty({ [head]: setValueDeeper2({}, rest, value) });
+ }
+ return undefinedIfEmpty({ ...object, [head]: setValueDeeper2(object[head] ?? {}, rest, value) });
+}
+function getShapeFromFields(fields) {
+ const shape = [];
+ fields.forEach((field) => {
+ if ("id" in field.properties) {
+ if (shape.indexOf(field.properties.id) !== -1) {
+ throw Error(`already present: ${field.properties.id}`);
+ }
+ shape.push(field.properties.id);
+ } else if (field.type === "group") {
+ Array.prototype.push.apply(
+ shape,
+ getShapeFromFields(field.properties.fields)
+ );
+ }
+ });
+ return shape;
+}
+function getRequiredFields(fields) {
+ const shape = [];
+ fields.forEach((field) => {
+ if ("id" in field.properties) {
+ if (shape.indexOf(field.properties.id) !== -1) {
+ throw Error(`already present: ${field.properties.id}`);
+ }
+ if (!field.properties.required) {
+ return;
+ }
+ shape.push(field.properties.id);
+ } else if (field.type === "group") {
+ Array.prototype.push.apply(
+ shape,
+ getRequiredFields(field.properties.fields)
+ );
+ }
+ });
+ return shape;
+}
+function validateRequiredFields(errors2, form, fields) {
+ let result = errors2;
+ fields.forEach((f3) => {
+ const path = f3.split(".");
+ const v3 = getValueDeeper(form, path);
+ result = setValueDeeper2(result, path, !v3 ? "required" : void 0);
+ });
+ return result;
+}
+
+// src/pages/Officer.tsx
+init_preact_module();
+
+// src/pages/HandleAccountNotReady.tsx
+init_preact_module();
+
+// src/pages/UnlockAccount.tsx
+init_preact_module();
+function UnlockAccount() {
+ const { i18n: i18n2 } = useTranslationContext();
+ const officer = useOfficer();
+ const [notification, withErrorHandler] = useLocalNotificationHandler();
+ const [form, status] = useFormState(
+ [".password"],
+ {
+ password: void 0
+ },
+ (state) => {
+ const errors2 = undefinedIfEmpty({
+ password: !state.password ? i18n2.str`required` : void 0
+ });
+ if (errors2 === void 0) {
+ return {
+ status: "ok",
+ result: state,
+ errors: errors2
+ };
+ }
+ return {
+ status: "fail",
+ result: state,
+ errors: errors2
+ };
+ }
+ );
+ const unlockHandler = status.status === "fail" || officer.state !== "locked" ? void 0 : withErrorHandler(
+ async () => officer.tryUnlock(form.password.value),
+ () => {
+ }
+ );
+ const forgetHandler = status.status === "fail" || officer.state !== "locked" ? void 0 : withErrorHandler(
+ async () => officer.forget(),
+ () => {
+ }
+ );
+ return /* @__PURE__ */ h("div", { class: "flex min-h-full flex-col " }, /* @__PURE__ */ h(LocalNotificationBanner, { notification }), /* @__PURE__ */ h("div", { class: "sm:mx-auto sm:w-full sm:max-w-md" }, /* @__PURE__ */ h("h1", { class: "mt-6 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900" }, /* @__PURE__ */ h(i18n2.Translate, null, "Account locked")), /* @__PURE__ */ h("p", { class: "mt-6 text-lg leading-8 text-gray-600" }, /* @__PURE__ */ h(i18n2.Translate, null, "Your account is normally locked anytime you reload. To unlock type your password again."))), /* @__PURE__ */ h("div", { class: "mt-10 sm:mx-auto sm:w-full sm:max-w-[480px] " }, /* @__PURE__ */ h("div", { class: "bg-gray-100 px-6 py-6 shadow sm:rounded-lg sm:px-12" }, /* @__PURE__ */ h("div", { class: "mb-4" }, /* @__PURE__ */ h(
+ InputLine,
+ {
+ label: i18n2.str`Password`,
+ name: "password",
+ type: "password",
+ required: true,
+ handler: form.password
+ }
+ )), /* @__PURE__ */ h("div", { class: "mt-8" }, /* @__PURE__ */ h(
+ Button,
+ {
+ type: "submit",
+ handler: unlockHandler,
+ disabled: !unlockHandler,
+ class: "disabled:opacity-50 disabled:cursor-default flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Unlock")
+ ))), /* @__PURE__ */ h(
+ Button,
+ {
+ type: "button",
+ handler: forgetHandler,
+ disabled: !forgetHandler,
+ class: "disabled:opacity-50 disabled:cursor-default m-4 block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 "
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Forget account")
+ )));
+}
+
+// src/pages/HandleAccountNotReady.tsx
+function HandleAccountNotReady({
+ officer
+}) {
+ if (officer.state === "not-found") {
+ return /* @__PURE__ */ h(CreateAccount, null);
+ }
+ if (officer.state === "locked") {
+ return /* @__PURE__ */ h(UnlockAccount, null);
+ }
+ assertUnreachable(officer);
+}
+
+// src/context/ui-settings.ts
+init_preact_module();
+init_hooks_module();
var defaultSettings = {
- allowInsecurePassword: false,
- keepSessionAfterReload: false
+ backendBaseURL: buildDefaultBackendBaseURL(),
+ signupEmail: void 0
};
-var EXCHANGE_SETTINGS_KEY = buildStorageKey(
- "exchange-settings",
- codecForSettings()
-);
-function useSettings() {
- const { value, update } = useLocalStorage(
- EXCHANGE_SETTINGS_KEY,
- defaultSettings
+var Context5 = B(defaultSettings);
+var useUiSettingsContext = () => q2(Context5);
+var UiSettingsProvider = ({
+ children,
+ value
+}) => {
+ return h(Context5.Provider, {
+ value,
+ children
+ });
+};
+var codecForUISettings = () => buildCodecForObject().property("backendBaseURL", codecOptional(codecForString())).property("signupEmail", codecOptional(codecForString())).build("UiSettings");
+function removeUndefineField(obj) {
+ const keys = Object.keys(obj);
+ return keys.reduce((prev, cur) => {
+ if (typeof prev[cur] === "undefined") {
+ delete prev[cur];
+ }
+ return prev;
+ }, obj);
+}
+function fetchUiSettings(listener) {
+ fetch("./settings.json").then((resp) => resp.json()).then((json) => codecForUISettings().decode(json)).then(
+ (result) => listener({
+ ...defaultSettings,
+ ...removeUndefineField(result)
+ })
+ ).catch((e5) => {
+ console.log("failed to fetch settings", e5);
+ listener(defaultSettings);
+ });
+}
+function buildDefaultBackendBaseURL() {
+ if (typeof window !== "undefined") {
+ const currentLocation = new URL(
+ window.location.pathname,
+ window.location.origin
+ ).href;
+ return canonicalizeBaseUrl(currentLocation.replace("/webui", ""));
+ }
+ throw Error("No default URL");
+}
+
+// src/pages/Officer.tsx
+function Officer() {
+ const officer = useOfficer();
+ const settings = useUiSettingsContext();
+ const { lib } = useExchangeApiContext();
+ const { i18n: i18n2 } = useTranslationContext();
+ if (officer.state !== "ready") {
+ return /* @__PURE__ */ h(HandleAccountNotReady, { officer });
+ }
+ const url = new URL("./", lib.exchange.baseUrl);
+ const signupEmail = settings.signupEmail ?? `aml-signup@${url.hostname}`;
+ return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("h1", { class: "my-2 text-3xl font-bold tracking-tight text-gray-900 " }, /* @__PURE__ */ h(i18n2.Translate, null, "Public key")), /* @__PURE__ */ h("div", { class: "max-w-xl text-base leading-7 text-gray-700 lg:max-w-lg" }, /* @__PURE__ */ h("p", { class: "mt-6 font-mono break-all" }, officer.account.id)), /* @__PURE__ */ h("p", null, /* @__PURE__ */ h(
+ "a",
+ {
+ href: `mailto:${signupEmail}?subject=${encodeURIComponent(
+ "Request AML signup"
+ )}&body=${encodeURIComponent(
+ `I want my AML account
+
+
+PubKey: ${officer.account.id}`
+ )}`,
+ target: "_blank",
+ rel: "noreferrer",
+ class: "m-4 block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700"
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Request account activation")
+ )), /* @__PURE__ */ h("p", null, /* @__PURE__ */ h(
+ "button",
+ {
+ type: "button",
+ onClick: () => {
+ officer.lock();
+ },
+ class: "m-4 block rounded-md border-0 bg-gray-200 px-3 py-2 text-center text-sm text-black shadow-sm "
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Lock account")
+ )), /* @__PURE__ */ h("p", null, /* @__PURE__ */ h(
+ "button",
+ {
+ type: "button",
+ onClick: () => {
+ officer.forget();
+ },
+ class: "m-4 block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 "
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Forget account")
+ )));
+}
+
+// src/pages/Cases.tsx
+function CasesUI({
+ records,
+ filter,
+ onChangeFilter,
+ onFirstPage,
+ onNext
+}) {
+ const { i18n: i18n2 } = useTranslationContext();
+ const [form, status] = useFormState(
+ [".state"],
+ {
+ state: filter
+ },
+ (state) => {
+ const errors2 = undefinedIfEmpty({
+ state: state.state === void 0 ? i18n2.str`required` : void 0
+ });
+ if (errors2 === void 0) {
+ const result2 = {
+ state: state.state
+ };
+ return {
+ status: "ok",
+ result: result2,
+ errors: errors2
+ };
+ }
+ const result = {
+ state: state.state
+ };
+ return {
+ status: "fail",
+ result,
+ errors: errors2
+ };
+ }
);
- function updateField(k6, v3) {
- const newValue = { ...value, [k6]: v3 };
- update(newValue);
+ h2(() => {
+ if (status.status === "ok" && filter !== status.result.state) {
+ onChangeFilter(status.result.state);
+ }
+ }, [form?.state?.value]);
+ return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("div", { class: "sm:flex sm:items-center" }, /* @__PURE__ */ h("div", { class: "px-2 sm:flex-auto" }, /* @__PURE__ */ h("h1", { class: "text-base font-semibold leading-6 text-gray-900" }, /* @__PURE__ */ h(i18n2.Translate, null, "Cases")), /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-700 w-80" }, /* @__PURE__ */ h(i18n2.Translate, null, "A list of all the account with the status"))), /* @__PURE__ */ h("div", { class: "px-2" }, /* @__PURE__ */ h(
+ InputChoiceHorizontal,
+ {
+ name: "state",
+ label: i18n2.str`Filter`,
+ handler: form.state,
+ converter: amlStateConverter,
+ choices: [
+ {
+ label: i18n2.str`Pending`,
+ value: "pending"
+ },
+ {
+ label: i18n2.str`Frozen`,
+ value: "frozen"
+ },
+ {
+ label: i18n2.str`Normal`,
+ value: "normal"
+ }
+ ]
+ }
+ ))), /* @__PURE__ */ h("div", { class: "mt-8 flow-root" }, /* @__PURE__ */ h("div", { class: "overflow-x-auto" }, !records.length ? /* @__PURE__ */ h("div", null, "empty result ") : /* @__PURE__ */ h("div", { class: "inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8" }, /* @__PURE__ */ h("table", { class: "min-w-full divide-y divide-gray-300" }, /* @__PURE__ */ h("thead", null, /* @__PURE__ */ h("tr", null, /* @__PURE__ */ h(
+ "th",
+ {
+ scope: "col",
+ class: "px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-80"
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Account Id")
+ ), /* @__PURE__ */ h(
+ "th",
+ {
+ scope: "col",
+ class: "px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-40"
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Status")
+ ), /* @__PURE__ */ h(
+ "th",
+ {
+ scope: "col",
+ class: "sm:hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-40"
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Threshold")
+ ))), /* @__PURE__ */ h("tbody", { class: "divide-y divide-gray-200 bg-white" }, records.map((r3) => {
+ return /* @__PURE__ */ h("tr", { key: r3.h_payto, class: "hover:bg-gray-100 " }, /* @__PURE__ */ h("td", { class: "whitespace-nowrap px-3 py-5 text-sm text-gray-500 " }, /* @__PURE__ */ h("div", { class: "text-gray-900" }, /* @__PURE__ */ h(
+ "a",
+ {
+ href: privatePages.caseDetails.url({
+ cid: r3.h_payto
+ }),
+ class: "text-indigo-600 hover:text-indigo-900"
+ },
+ r3.h_payto.substring(0, 16),
+ "..."
+ ))), /* @__PURE__ */ h("td", { class: "whitespace-nowrap px-3 py-5 text-sm text-gray-500" }, ((state) => {
+ switch (state) {
+ case TalerExchangeApi.AmlState.normal: {
+ return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-green-50 px-2 py-1 text-xs font-medium text-green-700 ring-1 ring-inset ring-green-600/20" }, "Normal");
+ }
+ case TalerExchangeApi.AmlState.pending: {
+ return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-yellow-50 px-2 py-1 text-xs font-medium text-yellow-700 ring-1 ring-inset ring-green-600/20" }, "Pending");
+ }
+ case TalerExchangeApi.AmlState.frozen: {
+ return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-red-50 px-2 py-1 text-xs font-medium text-red-700 ring-1 ring-inset ring-green-600/20" }, "Frozen");
+ }
+ }
+ })(r3.current_state)), /* @__PURE__ */ h("td", { class: "whitespace-nowrap px-3 py-5 text-sm text-gray-900" }, r3.threshold));
+ }))), /* @__PURE__ */ h(Pagination, { onFirstPage, onNext })))));
+}
+function Cases() {
+ const [stateFilter, setStateFilter] = p3(
+ TalerExchangeApi.AmlState.pending
+ );
+ const list = useCases(stateFilter);
+ const { i18n: i18n2 } = useTranslationContext();
+ if (!list) {
+ return /* @__PURE__ */ h(Loading, null);
}
- return [value, updateField];
+ if (list instanceof TalerError) {
+ return /* @__PURE__ */ h(ErrorLoading, { error: list });
+ }
+ if (list.type === "fail") {
+ switch (list.case) {
+ case HttpStatusCode.Forbidden: {
+ return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(Attention, { type: "danger", title: i18n2.str`Operation denied` }, /* @__PURE__ */ h(i18n2.Translate, null, "This account doesnt have access. Request account activation sending your public key.")), /* @__PURE__ */ h(Officer, null));
+ }
+ case HttpStatusCode.Unauthorized: {
+ return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(Attention, { type: "danger", title: i18n2.str`Operation denied` }, /* @__PURE__ */ h(i18n2.Translate, null, "This account is not allowed to perform list the cases.")), /* @__PURE__ */ h(Officer, null));
+ }
+ case HttpStatusCode.NotFound:
+ case HttpStatusCode.Conflict:
+ return /* @__PURE__ */ h(Officer, null);
+ default:
+ assertUnreachable(list);
+ }
+ }
+ return /* @__PURE__ */ h(
+ CasesUI,
+ {
+ records: list.body,
+ onFirstPage: list.isFirstPage ? void 0 : list.loadFirst,
+ onNext: list.isLastPage ? void 0 : list.loadNext,
+ filter: stateFilter,
+ onChangeFilter: (d6) => {
+ setStateFilter(d6);
+ }
+ }
+ );
+}
+var HomeIcon = () => /* @__PURE__ */ h(
+ "svg",
+ {
+ xmlns: "http://www.w3.org/2000/svg",
+ fill: "none",
+ viewBox: "0 0 24 24",
+ "stroke-width": "1.5",
+ stroke: "currentColor",
+ class: "w-6 h-6"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round",
+ d: "M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"
+ }
+ )
+);
+function Pagination({
+ onFirstPage,
+ onNext
+}) {
+ const { i18n: i18n2 } = useTranslationContext();
+ return /* @__PURE__ */ h(
+ "nav",
+ {
+ class: "flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 rounded-lg",
+ "aria-label": "Pagination"
+ },
+ /* @__PURE__ */ h("div", { class: "flex flex-1 justify-between sm:justify-end" }, /* @__PURE__ */ h(
+ "button",
+ {
+ class: "relative disabled:bg-gray-100 disabled:text-gray-500 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0",
+ disabled: !onFirstPage,
+ onClick: onFirstPage
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "First page")
+ ), /* @__PURE__ */ h(
+ "button",
+ {
+ class: "relative disabled:bg-gray-100 disabled:text-gray-500 ml-3 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0",
+ disabled: !onNext,
+ onClick: onNext
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Next")
+ ))
+ );
}
// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/toInteger/index.js
@@ -24370,7 +26757,7 @@ var formatters4 = {
}
},
// Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
- x: function x6(date, token, _localize, options) {
+ x: function x5(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
switch (token) {
@@ -25114,872 +27501,177 @@ function cleanEscapedString3(input) {
init_preact_module();
init_hooks_module();
-// ../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/core/dist/index.mjs
-init_compat_module();
-var import_shim = __toESM(require_shim(), 1);
-
-// ../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/_internal/dist/index.mjs
-init_compat_module();
-var SWRGlobalState = /* @__PURE__ */ new WeakMap();
-var EMPTY_CACHE = {};
-var INITIAL_CACHE = {};
-var noop = () => {
-};
-var UNDEFINED = (
- /*#__NOINLINE__*/
- noop()
-);
-var OBJECT = Object;
-var isUndefined = (v3) => v3 === UNDEFINED;
-var isFunction = (v3) => typeof v3 == "function";
-var mergeObjects = (a6, b5) => ({
- ...a6,
- ...b5
-});
-var STR_UNDEFINED = "undefined";
-var isWindowDefined = typeof window != STR_UNDEFINED;
-var isDocumentDefined = typeof document != STR_UNDEFINED;
-var hasRequestAnimationFrame = () => isWindowDefined && typeof window["requestAnimationFrame"] != STR_UNDEFINED;
-var createCacheHelper = (cache2, key) => {
- const state = SWRGlobalState.get(cache2);
- return [
- // Getter
- () => cache2.get(key) || EMPTY_CACHE,
- // Setter
- (info) => {
- if (!isUndefined(key)) {
- const prev = cache2.get(key);
- if (!(key in INITIAL_CACHE)) {
- INITIAL_CACHE[key] = prev;
- }
- state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);
- }
- },
- // Subscriber
- state[6],
- // Get server cache snapshot
- () => {
- if (!isUndefined(key)) {
- if (key in INITIAL_CACHE)
- return INITIAL_CACHE[key];
- }
- return cache2.get(key) || EMPTY_CACHE;
- }
- ];
-};
-var table = /* @__PURE__ */ new WeakMap();
-var counter = 0;
-var stableHash = (arg) => {
- const type = typeof arg;
- const constructor = arg && arg.constructor;
- const isDate3 = constructor == Date;
- let result;
- let index;
- if (OBJECT(arg) === arg && !isDate3 && constructor != RegExp) {
- result = table.get(arg);
- if (result)
- return result;
- result = ++counter + "~";
- table.set(arg, result);
- if (constructor == Array) {
- result = "@";
- for (index = 0; index < arg.length; index++) {
- result += stableHash(arg[index]) + ",";
- }
- table.set(arg, result);
- }
- if (constructor == OBJECT) {
- result = "#";
- const keys = OBJECT.keys(arg).sort();
- while (!isUndefined(index = keys.pop())) {
- if (!isUndefined(arg[index])) {
- result += index + ":" + stableHash(arg[index]) + ",";
- }
- }
- table.set(arg, result);
- }
- } else {
- result = isDate3 ? arg.toJSON() : type == "symbol" ? arg.toString() : type == "string" ? JSON.stringify(arg) : "" + arg;
- }
- return result;
-};
-var online = true;
-var isOnline = () => online;
-var [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [
- window.addEventListener.bind(window),
- window.removeEventListener.bind(window)
-] : [
- noop,
- noop
-];
-var isVisible = () => {
- const visibilityState = isDocumentDefined && document.visibilityState;
- return isUndefined(visibilityState) || visibilityState !== "hidden";
-};
-var initFocus = (callback) => {
- if (isDocumentDefined) {
- document.addEventListener("visibilitychange", callback);
- }
- onWindowEvent("focus", callback);
- return () => {
- if (isDocumentDefined) {
- document.removeEventListener("visibilitychange", callback);
- }
- offWindowEvent("focus", callback);
- };
-};
-var initReconnect = (callback) => {
- const onOnline = () => {
- online = true;
- callback();
- };
- const onOffline = () => {
- online = false;
- };
- onWindowEvent("online", onOnline);
- onWindowEvent("offline", onOffline);
- return () => {
- offWindowEvent("online", onOnline);
- offWindowEvent("offline", onOffline);
- };
-};
-var preset = {
- isOnline,
- isVisible
+// src/context/ui-forms.ts
+init_preact_module();
+init_hooks_module();
+var defaultForms = {
+ forms: []
};
-var defaultConfigOptions = {
- initFocus,
- initReconnect
+var Context6 = B(defaultForms);
+var useUiFormsContext = () => q2(Context6);
+var UiFormsProvider = ({
+ children,
+ value
+}) => {
+ return h(Context6.Provider, {
+ value,
+ children
+ });
};
-var IS_REACT_LEGACY = !bn.useId;
-var IS_SERVER = !isWindowDefined || "Deno" in window;
-var rAF = (f3) => hasRequestAnimationFrame() ? window["requestAnimationFrame"](f3) : setTimeout(f3, 1);
-var useIsomorphicLayoutEffect = IS_SERVER ? h2 : s2;
-var navigatorConnection = typeof navigator !== "undefined" && navigator.connection;
-var slowConnection = !IS_SERVER && navigatorConnection && ([
- "slow-2g",
- "2g"
-].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);
-var serialize = (key) => {
- if (isFunction(key)) {
- try {
- key = key();
- } catch (err) {
- key = "";
+function removeUndefineField2(obj) {
+ const keys = Object.keys(obj);
+ return keys.reduce((prev, cur) => {
+ if (typeof prev[cur] === "undefined") {
+ delete prev[cur];
}
- }
- const args = key;
- key = typeof key == "string" ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : "";
- return [
- key,
- args
- ];
-};
-var __timestamp = 0;
-var getTimestamp = () => ++__timestamp;
-var FOCUS_EVENT = 0;
-var RECONNECT_EVENT = 1;
-var MUTATE_EVENT = 2;
-var constants = {
- __proto__: null,
- FOCUS_EVENT,
- RECONNECT_EVENT,
- MUTATE_EVENT
-};
-async function internalMutate(...args) {
- const [cache2, _key, _data, _opts] = args;
- const options = mergeObjects({
- populateCache: true,
- throwOnError: true
- }, typeof _opts === "boolean" ? {
- revalidate: _opts
- } : _opts || {});
- let populateCache = options.populateCache;
- const rollbackOnErrorOption = options.rollbackOnError;
- let optimisticData = options.optimisticData;
- const revalidate = options.revalidate !== false;
- const rollbackOnError = (error2) => {
- return typeof rollbackOnErrorOption === "function" ? rollbackOnErrorOption(error2) : rollbackOnErrorOption !== false;
- };
- const throwOnError = options.throwOnError;
- if (isFunction(_key)) {
- const keyFilter = _key;
- const matchedKeys = [];
- const it = cache2.keys();
- for (let keyIt = it.next(); !keyIt.done; keyIt = it.next()) {
- const key = keyIt.value;
- if (
- // Skip the special useSWRInfinite keys.
- !key.startsWith("$inf$") && keyFilter(cache2.get(key)._k)
- ) {
- matchedKeys.push(key);
- }
- }
- return Promise.all(matchedKeys.map(mutateByKey));
- }
- return mutateByKey(_key);
- async function mutateByKey(_k) {
- const [key] = serialize(_k);
- if (!key)
- return;
- const [get, set] = createCacheHelper(cache2, key);
- const [EVENT_REVALIDATORS, MUTATION, FETCH] = SWRGlobalState.get(cache2);
- const revalidators = EVENT_REVALIDATORS[key];
- const startRevalidate = () => {
- if (revalidate) {
- delete FETCH[key];
- if (revalidators && revalidators[0]) {
- return revalidators[0](MUTATE_EVENT).then(() => get().data);
- }
- }
- return get().data;
- };
- if (args.length < 3) {
- return startRevalidate();
- }
- let data = _data;
- let error2;
- const beforeMutationTs = getTimestamp();
- MUTATION[key] = [
- beforeMutationTs,
- 0
- ];
- const hasOptimisticData = !isUndefined(optimisticData);
- const state = get();
- const displayedData = state.data;
- const currentData = state._c;
- const committedData = isUndefined(currentData) ? displayedData : currentData;
- if (hasOptimisticData) {
- optimisticData = isFunction(optimisticData) ? optimisticData(committedData) : optimisticData;
- set({
- data: optimisticData,
- _c: committedData
- });
- }
- if (isFunction(data)) {
- try {
- data = data(committedData);
- } catch (err) {
- error2 = err;
- }
- }
- if (data && isFunction(data.then)) {
- data = await data.catch((err) => {
- error2 = err;
- });
- if (beforeMutationTs !== MUTATION[key][0]) {
- if (error2)
- throw error2;
- return data;
- } else if (error2 && hasOptimisticData && rollbackOnError(error2)) {
- populateCache = true;
- data = committedData;
- set({
- data,
- _c: UNDEFINED
- });
- }
- }
- if (populateCache) {
- if (!error2) {
- if (isFunction(populateCache)) {
- data = populateCache(data, committedData);
- }
- set({
- data,
- _c: UNDEFINED
- });
- }
- }
- MUTATION[key][1] = getTimestamp();
- const res = await startRevalidate();
- set({
- _c: UNDEFINED
- });
- if (error2) {
- if (throwOnError)
- throw error2;
- return;
- }
- return populateCache ? res : data;
- }
+ return prev;
+ }, obj);
}
-var revalidateAllKeys = (revalidators, type) => {
- for (const key in revalidators) {
- if (revalidators[key][0])
- revalidators[key][0](type);
- }
-};
-var initCache = (provider, options) => {
- if (!SWRGlobalState.has(provider)) {
- const opts = mergeObjects(defaultConfigOptions, options);
- const EVENT_REVALIDATORS = {};
- const mutate2 = internalMutate.bind(UNDEFINED, provider);
- let unmount = noop;
- const subscriptions = {};
- const subscribe = (key, callback) => {
- const subs = subscriptions[key] || [];
- subscriptions[key] = subs;
- subs.push(callback);
- return () => subs.splice(subs.indexOf(callback), 1);
- };
- const setter = (key, value, prev) => {
- provider.set(key, value);
- const subs = subscriptions[key];
- if (subs) {
- for (let i5 = subs.length; i5--; ) {
- subs[i5](value, prev);
- }
- }
- };
- const initProvider = () => {
- if (!SWRGlobalState.has(provider)) {
- SWRGlobalState.set(provider, [
- EVENT_REVALIDATORS,
- {},
- {},
- {},
- mutate2,
- setter,
- subscribe
- ]);
- if (!IS_SERVER) {
- const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));
- const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));
- unmount = () => {
- releaseFocus && releaseFocus();
- releaseReconnect && releaseReconnect();
- SWRGlobalState.delete(provider);
- };
- }
- }
- };
- initProvider();
- return [
- provider,
- mutate2,
- initProvider,
- unmount
- ];
- }
- return [
- provider,
- SWRGlobalState.get(provider)[4]
- ];
-};
-var onErrorRetry = (_3, __, config, revalidate, opts) => {
- const maxRetryCount = config.errorRetryCount;
- const currentRetryCount = opts.retryCount;
- const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;
- if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {
- return;
- }
- setTimeout(revalidate, timeout, opts);
-};
-var compare = (currentData, newData) => stableHash(currentData) == stableHash(newData);
-var [cache, mutate] = initCache(/* @__PURE__ */ new Map());
-var defaultConfig = mergeObjects(
- {
- // events
- onLoadingSlow: noop,
- onSuccess: noop,
- onError: noop,
- onErrorRetry,
- onDiscarded: noop,
- // switches
- revalidateOnFocus: true,
- revalidateOnReconnect: true,
- revalidateIfStale: true,
- shouldRetryOnError: true,
- // timeouts
- errorRetryInterval: slowConnection ? 1e4 : 5e3,
- focusThrottleInterval: 5 * 1e3,
- dedupingInterval: 2 * 1e3,
- loadingTimeout: slowConnection ? 5e3 : 3e3,
- // providers
- compare,
- isPaused: () => false,
- cache,
- mutate,
- fallback: {}
- },
- // use web preset by default
- preset
-);
-var mergeConfigs = (a6, b5) => {
- const v3 = mergeObjects(a6, b5);
- if (b5) {
- const { use: u1, fallback: f1 } = a6;
- const { use: u22, fallback: f22 } = b5;
- if (u1 && u22) {
- v3.use = u1.concat(u22);
- }
- if (f1 && f22) {
- v3.fallback = mergeObjects(f1, f22);
- }
- }
- return v3;
-};
-var SWRConfigContext = B({});
-var SWRConfig = (props) => {
- const { value } = props;
- const parentConfig = q2(SWRConfigContext);
- const isFunctionalConfig = isFunction(value);
- const config = F(() => isFunctionalConfig ? value(parentConfig) : value, [
- isFunctionalConfig,
- parentConfig,
- value
- ]);
- const extendedConfig = F(() => isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [
- isFunctionalConfig,
- parentConfig,
- config
- ]);
- const provider = config && config.provider;
- const [cacheContext] = p3(() => provider ? initCache(provider(extendedConfig.cache || cache), config) : UNDEFINED);
- if (cacheContext) {
- extendedConfig.cache = cacheContext[0];
- extendedConfig.mutate = cacheContext[1];
- }
- useIsomorphicLayoutEffect(() => {
- if (cacheContext) {
- cacheContext[2] && cacheContext[2]();
- return cacheContext[3];
- }
- }, []);
- return h(SWRConfigContext.Provider, mergeObjects(props, {
- value: extendedConfig
- }));
-};
-var enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;
-var use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];
-var setupDevTools = () => {
- if (enableDevtools) {
- window.__SWR_DEVTOOLS_REACT__ = bn;
- }
-};
-var normalize = (args) => {
- return isFunction(args[1]) ? [
- args[0],
- args[1],
- args[2] || {}
- ] : [
- args[0],
- null,
- (args[1] === null ? args[2] : args[1]) || {}
- ];
-};
-var useSWRConfig = () => {
- return mergeObjects(defaultConfig, q2(SWRConfigContext));
-};
-var middleware = (useSWRNext) => (key_, fetcher_, config) => {
- const fetcher = fetcher_ && ((...args) => {
- const key = serialize(key_)[0];
- const [, , , PRELOAD] = SWRGlobalState.get(cache);
- const req = PRELOAD[key];
- if (req) {
- delete PRELOAD[key];
- return req;
- }
- return fetcher_(...args);
+function fetchUiForms(listener) {
+ fetch("./forms.json").then((resp) => resp.json()).then((json) => codecForUIForms().decode(json)).then(
+ (result) => listener({
+ ...defaultForms,
+ ...removeUndefineField2(result)
+ })
+ ).catch((e5) => {
+ console.log("failed to fetch forms", e5);
+ listener(defaultForms);
});
- return useSWRNext(key_, fetcher, config);
-};
-var BUILT_IN_MIDDLEWARE = use.concat(middleware);
-var withArgs = (hook) => {
- return function useSWRArgs(...args) {
- const fallbackConfig = useSWRConfig();
- const [key, fn2, _config] = normalize(args);
- const config = mergeConfigs(fallbackConfig, _config);
- let next = hook;
- const { use: use2 } = config;
- const middleware2 = (use2 || []).concat(BUILT_IN_MIDDLEWARE);
- for (let i5 = middleware2.length; i5--; ) {
- next = middleware2[i5](next);
- }
- return next(key, fn2 || config.fetcher || null, config);
- };
-};
-var subscribeCallback = (key, callbacks, callback) => {
- const keyedRevalidators = callbacks[key] || (callbacks[key] = []);
- keyedRevalidators.push(callback);
- return () => {
- const index = keyedRevalidators.indexOf(callback);
- if (index >= 0) {
- keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];
- keyedRevalidators.pop();
- }
- };
-};
-setupDevTools();
+}
-// ../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/core/dist/index.mjs
-var WITH_DEDUPE = {
- dedupe: true
-};
-var useSWRHandler = (_key, fetcher, config) => {
- const { cache: cache2, compare: compare2, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;
- const [EVENT_REVALIDATORS, MUTATION, FETCH] = SWRGlobalState.get(cache2);
- const [key, fnArg] = serialize(_key);
- const initialMountedRef = _2(false);
- const unmountedRef = _2(false);
- const keyRef = _2(key);
- const fetcherRef = _2(fetcher);
- const configRef = _2(config);
- const getConfig = () => configRef.current;
- const isActive = () => getConfig().isVisible() && getConfig().isOnline();
- const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache2, key);
- const stateDependencies = _2({}).current;
- const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;
- const isEqual = (prev, current) => {
- let equal = true;
- for (const _3 in stateDependencies) {
- const t5 = _3;
- if (t5 === "data") {
- if (!compare2(current[t5], prev[t5])) {
- if (isUndefined(prev[t5])) {
- if (!compare2(current[t5], returnedData)) {
- equal = false;
- }
- } else {
- equal = false;
- }
- }
- } else {
- if (current[t5] !== prev[t5]) {
- equal = false;
- }
- }
- }
- return equal;
- };
- const getSnapshot = F(() => {
- const shouldStartRequest = (() => {
- if (!key)
- return false;
- if (!fetcher)
- return false;
- if (!isUndefined(revalidateOnMount))
- return revalidateOnMount;
- if (getConfig().isPaused())
- return false;
- if (suspense)
- return false;
- if (!isUndefined(revalidateIfStale))
- return revalidateIfStale;
- return true;
- })();
- const getSelectedCache = (state) => {
- const snapshot = mergeObjects(state);
- delete snapshot._k;
- if (!shouldStartRequest) {
- return snapshot;
- }
- return {
- isValidating: true,
- isLoading: true,
- ...snapshot
- };
- };
- let memorizedSnapshot = getSelectedCache(getCache());
- const memorizedInitialSnapshot = getSelectedCache(getInitialCache());
- return [
- () => {
- const newSnapshot = getSelectedCache(getCache());
- return isEqual(newSnapshot, memorizedSnapshot) ? memorizedSnapshot : memorizedSnapshot = newSnapshot;
- },
- () => memorizedInitialSnapshot
- ];
- }, [
- cache2,
- key
- ]);
- const cached = (0, import_shim.useSyncExternalStore)(T2(
- (callback) => subscribeCache(key, (current, prev) => {
- if (!isEqual(prev, current))
- callback();
- }),
- // eslint-disable-next-line react-hooks/exhaustive-deps
- [
- cache2,
- key
- ]
- ), getSnapshot[0], getSnapshot[1]);
- const isInitialMount = !initialMountedRef.current;
- const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;
- const cachedData = cached.data;
- const data = isUndefined(cachedData) ? fallback : cachedData;
- const error2 = cached.error;
- const laggyDataRef = _2(data);
- const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;
- const shouldDoInitialRevalidation = (() => {
- if (hasRevalidator && !isUndefined(error2))
- return false;
- if (isInitialMount && !isUndefined(revalidateOnMount))
- return revalidateOnMount;
- if (getConfig().isPaused())
- return false;
- if (suspense)
- return isUndefined(data) ? false : revalidateIfStale;
- return isUndefined(data) || revalidateIfStale;
- })();
- const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);
- const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;
- const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;
- const revalidate = T2(
- async (revalidateOpts) => {
- const currentFetcher = fetcherRef.current;
- if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {
- return false;
- }
- let newData;
- let startAt;
- let loading = true;
- const opts = revalidateOpts || {};
- const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;
- const callbackSafeguard = () => {
- if (IS_REACT_LEGACY) {
- return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;
- }
- return key === keyRef.current;
- };
- const finalState = {
- isValidating: false,
- isLoading: false
- };
- const finishRequestAndUpdateState = () => {
- setCache(finalState);
- };
- const cleanupState = () => {
- const requestInfo = FETCH[key];
- if (requestInfo && requestInfo[1] === startAt) {
- delete FETCH[key];
- }
- };
- const initialState = {
- isValidating: true
- };
- if (isUndefined(getCache().data)) {
- initialState.isLoading = true;
- }
- try {
- if (shouldStartNewRequest) {
- setCache(initialState);
- if (config.loadingTimeout && isUndefined(getCache().data)) {
- setTimeout(() => {
- if (loading && callbackSafeguard()) {
- getConfig().onLoadingSlow(key, config);
- }
- }, config.loadingTimeout);
- }
- FETCH[key] = [
- currentFetcher(fnArg),
- getTimestamp()
- ];
- }
- [newData, startAt] = FETCH[key];
- newData = await newData;
- if (shouldStartNewRequest) {
- setTimeout(cleanupState, config.dedupingInterval);
- }
- if (!FETCH[key] || FETCH[key][1] !== startAt) {
- if (shouldStartNewRequest) {
- if (callbackSafeguard()) {
- getConfig().onDiscarded(key);
- }
+// src/forms/simplest.ts
+var v1 = (i18n2) => ({
+ type: "double-column",
+ design: [
+ {
+ title: i18n2.str`Simple form`,
+ fields: [
+ {
+ type: "textArea",
+ properties: {
+ id: ".comment",
+ name: "comment",
+ label: i18n2.str`Comment`
}
- return false;
}
- finalState.error = UNDEFINED;
- const mutationInfo = MUTATION[key];
- if (!isUndefined(mutationInfo) && // case 1
- (startAt <= mutationInfo[0] || // case 2
- startAt <= mutationInfo[1] || // case 3
- mutationInfo[1] === 0)) {
- finishRequestAndUpdateState();
- if (shouldStartNewRequest) {
- if (callbackSafeguard()) {
- getConfig().onDiscarded(key);
+ ]
+ },
+ resolutionSection(i18n2)
+ ]
+ // behavior: function formBehavior(
+ // v: Partial<Simplest.Form>,
+ // ): FormState<Simplest.Form> {
+ // return {
+ // comment: {
+ // help: ((v.comment?.length ?? 0) > 100 ? "keep it short" : "") as TranslatedString,
+ // },
+ // threshold: {
+ // disabled: v.state === TalerExchangeApi.AmlState.frozen,
+ // },
+ // };
+ // },
+});
+function resolutionSection(i18n2) {
+ return {
+ title: i18n2.str`Resolution`,
+ fields: [
+ {
+ type: "choiceHorizontal",
+ properties: {
+ id: ".state",
+ name: "state",
+ label: i18n2.str`New state`,
+ converterId: "TalerExchangeApi.AmlState",
+ choices: [
+ {
+ value: "frozen",
+ label: i18n2.str`Frozen`
+ },
+ {
+ value: "pending",
+ label: i18n2.str`Pending`
+ },
+ {
+ value: "normal",
+ label: i18n2.str`Normal`
}
- }
- return false;
- }
- const cacheData = getCache().data;
- finalState.data = compare2(cacheData, newData) ? cacheData : newData;
- if (shouldStartNewRequest) {
- if (callbackSafeguard()) {
- getConfig().onSuccess(newData, key, config);
- }
+ ]
}
- } catch (err) {
- cleanupState();
- const currentConfig = getConfig();
- const { shouldRetryOnError } = currentConfig;
- if (!currentConfig.isPaused()) {
- finalState.error = err;
- if (shouldStartNewRequest && callbackSafeguard()) {
- currentConfig.onError(err, key, currentConfig);
- if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {
- if (isActive()) {
- currentConfig.onErrorRetry(err, key, currentConfig, revalidate, {
- retryCount: (opts.retryCount || 0) + 1,
- dedupe: true
- });
- }
- }
- }
+ },
+ {
+ type: "amount",
+ properties: {
+ id: ".threshold",
+ currency: "NETZBON",
+ name: "threshold",
+ converterId: "Taler.Amount",
+ label: i18n2.str`New threshold`
}
}
- loading = false;
- finishRequestAndUpdateState();
- return true;
- },
- // `setState` is immutable, and `eventsCallback`, `fnArg`, and
- // `keyValidating` are depending on `key`, so we can exclude them from
- // the deps array.
- //
- // FIXME:
- // `fn` and `config` might be changed during the lifecycle,
- // but they might be changed every render like this.
- // `useSWR('key', () => fetch('/api/'), { suspense: true })`
- // So we omit the values from the deps array
- // even though it might cause unexpected behaviors.
- // eslint-disable-next-line react-hooks/exhaustive-deps
- [
- key,
- cache2
]
- );
- const boundMutate = T2(
- // Use callback to make sure `keyRef.current` returns latest result every time
- (...args) => {
- return internalMutate(cache2, keyRef.current, ...args);
- },
- // eslint-disable-next-line react-hooks/exhaustive-deps
- []
- );
- useIsomorphicLayoutEffect(() => {
- fetcherRef.current = fetcher;
- configRef.current = config;
- if (!isUndefined(cachedData)) {
- laggyDataRef.current = cachedData;
- }
- });
- useIsomorphicLayoutEffect(() => {
- if (!key)
- return;
- const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);
- let nextFocusRevalidatedAt = 0;
- const onRevalidate = (type) => {
- if (type == constants.FOCUS_EVENT) {
- const now = Date.now();
- if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {
- nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;
- softRevalidate();
- }
- } else if (type == constants.RECONNECT_EVENT) {
- if (getConfig().revalidateOnReconnect && isActive()) {
- softRevalidate();
- }
- } else if (type == constants.MUTATE_EVENT) {
- return revalidate();
- }
- return;
- };
- const unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);
- unmountedRef.current = false;
- keyRef.current = key;
- initialMountedRef.current = true;
- setCache({
- _k: fnArg
- });
- if (shouldDoInitialRevalidation) {
- if (isUndefined(data) || IS_SERVER) {
- softRevalidate();
- } else {
- rAF(softRevalidate);
- }
- }
- return () => {
- unmountedRef.current = true;
- unsubEvents();
- };
- }, [
- key
- ]);
- useIsomorphicLayoutEffect(() => {
- let timer2;
- function next() {
- const interval = isFunction(refreshInterval) ? refreshInterval(data) : refreshInterval;
- if (interval && timer2 !== -1) {
- timer2 = setTimeout(execute, interval);
- }
- }
- function execute() {
- if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {
- revalidate(WITH_DEDUPE).then(next);
- } else {
- next();
- }
- }
- next();
- return () => {
- if (timer2) {
- clearTimeout(timer2);
- timer2 = -1;
- }
- };
- }, [
- refreshInterval,
- refreshWhenHidden,
- refreshWhenOffline,
- key
- ]);
- x3(returnedData);
- if (suspense && isUndefined(data) && key) {
- if (!IS_REACT_LEGACY && IS_SERVER) {
- throw new Error("Fallback data is required when using suspense in SSR.");
- }
- fetcherRef.current = fetcher;
- configRef.current = config;
- unmountedRef.current = false;
- throw isUndefined(error2) ? revalidate(WITH_DEDUPE) : error2;
- }
- return {
- mutate: boundMutate,
- get data() {
- stateDependencies.data = true;
- return returnedData;
- },
- get error() {
- stateDependencies.error = true;
- return error2;
- },
- get isValidating() {
- stateDependencies.isValidating = true;
- return isValidating;
- },
- get isLoading() {
- stateDependencies.isLoading = true;
- return isLoading;
- }
};
-};
-var SWRConfig2 = OBJECT.defineProperty(SWRConfig, "defaultValue", {
- value: defaultConfig
-});
-var useSWR = withArgs(useSWRHandler);
+}
+
+// src/forms/index.ts
+var preloadedForms = (i18n2) => [
+ {
+ label: i18n2.str`Simple comment`,
+ id: "__simple_comment",
+ version: 1,
+ config: v1(i18n2)
+ // }, {
+ // label: i18n.str`Identification form`,
+ // id: "902.1e",
+ // version: 1,
+ // config: form_902_1e_v1(i18n),
+ // }, {
+ // label: i18n.str`Operational legal entity or partnership`,
+ // id: "902.11e",
+ // version: 1,
+ // config: form_902_11e_v1(i18n),
+ // }, {
+ // label: i18n.str`Foundations`,
+ // id: "902.12e",
+ // version: 1,
+ // config: form_902_12e_v1(i18n),
+ // }, {
+ // label: i18n.str`Declaration for trusts`,
+ // id: "902.13e",
+ // version: 1,
+ // config: form_902_13e_v1(i18n),
+ // }, {
+ // label: i18n.str`Information on life insurance policies`,
+ // id: "902.15e",
+ // version: 1,
+ // config: form_902_15e_v1(i18n),
+ // }, {
+ // label: i18n.str`Declaration of beneficial owner`,
+ // id: "902.9e",
+ // version: 1,
+ // config: form_902_9e_v1(i18n),
+ // }, {
+ // label: i18n.str`Customer profile`,
+ // id: "902.5e",
+ // version: 1,
+ // config: form_902_5e_v1(i18n),
+ // }, {
+ // label: i18n.str`Risk profile`,
+ // id: "902.4e",
+ // version: 1,
+ // config: form_902_4e_v1(i18n),
+ }
+];
// src/hooks/useCaseDetails.ts
-var useSWR2 = useSWR;
+var useSWR3 = useSWR;
function useCaseDetails(paytoHash) {
- const officer2 = useOfficer();
- const session = officer2.state === "ready" ? officer2.account : void 0;
- const { api } = useExchangeApiContext();
- async function fetcher([officer3, account2]) {
- return await api.getDecisionDetails(officer3, account2);
+ const officer = useOfficer();
+ const session = officer.state === "ready" ? officer.account : void 0;
+ const { lib: { exchange: api } } = useExchangeApiContext();
+ async function fetcher([officer2, account]) {
+ return await api.getDecisionDetails(officer2, account);
}
- const { data, error: error2 } = useSWR2(
+ const { data, error: error2 } = useSWR3(
!session ? void 0 : [session, paytoHash],
fetcher,
{
@@ -26000,220 +27692,9 @@ function useCaseDetails(paytoHash) {
return error2;
return void 0;
}
-var example1 = {
- aml_history: [
- {
- justification: "Lack of documentation",
- decider_pub: "ASDASDASD",
- decision_time: {
- t_s: Date.now() / 1e3
- },
- new_state: 2,
- new_threshold: "USD:0"
- },
- {
- justification: "Doing a transfer of high amount",
- decider_pub: "ASDASDASD",
- decision_time: {
- t_s: Date.now() / 1e3 - 60 * 60 * 24 * 30 * 6
- },
- new_state: 1,
- new_threshold: "USD:2000"
- },
- {
- justification: "Account is known to the system",
- decider_pub: "ASDASDASD",
- decision_time: {
- t_s: Date.now() / 1e3 - 60 * 60 * 24 * 30 * 9
- },
- new_state: 0,
- new_threshold: "USD:100"
- }
- ],
- kyc_attributes: [
- {
- collection_time: {
- t_s: Date.now() / 1e3 - 60 * 60 * 24 * 30 * 8
- },
- expiration_time: {
- t_s: Date.now() / 1e3 - 60 * 60 * 24 * 30 * 4
- },
- provider_section: "asdasd",
- attributes: {
- name: "Sebastian"
- }
- },
- {
- collection_time: {
- t_s: Date.now() / 1e3 - 60 * 60 * 24 * 30 * 5
- },
- expiration_time: {
- t_s: Date.now() / 1e3 - 60 * 60 * 24 * 30 * 2
- },
- provider_section: "asdasd",
- attributes: {
- creditCard: "12312312312"
- }
- }
- ]
-};
-
-// src/pages/AntiMoneyLaunderingForm.tsx
-init_preact_module();
-
-// src/forms/declaration.ts
-var defaultUIForms = {
- currencies: () => [],
- languages: () => [],
- forms: () => []
-};
-var uiForms = "amlExchangeBackoffice" in globalThis ? globalThis.amlExchangeBackoffice : defaultUIForms;
-
-// src/utils/types.ts
-var AmlExchangeBackend;
-((AmlExchangeBackend2) => {
- let AmlState;
- ((AmlState2) => {
- AmlState2[AmlState2["normal"] = 0] = "normal";
- AmlState2[AmlState2["pending"] = 1] = "pending";
- AmlState2[AmlState2["frozen"] = 2] = "frozen";
- })(AmlState = AmlExchangeBackend2.AmlState || (AmlExchangeBackend2.AmlState = {}));
-})(AmlExchangeBackend || (AmlExchangeBackend = {}));
-
-// src/pages/AntiMoneyLaunderingForm.tsx
-function AntiMoneyLaunderingForm({
- account: account2,
- formId,
- onSubmit
-}) {
- const { i18n: i18n2 } = useTranslationContext();
- const theForm = uiForms.forms(i18n2).find((v3) => v3.id === formId);
- if (!theForm) {
- return /* @__PURE__ */ h("div", null, "form with id ", formId, " not found");
- }
- const { config } = useExchangeApiContext();
- const initial2 = {
- when: AbsoluteTime.now(),
- state: AmlExchangeBackend.AmlState.pending,
- threshold: Amounts.zeroOfCurrency(config.currency)
- };
- return /* @__PURE__ */ h(
- DefaultForm,
- {
- initial: initial2,
- form: theForm.impl(initial2),
- onUpdate: () => {
- },
- onSubmit: (formValue) => {
- if (formValue.state === void 0 || formValue.threshold === void 0)
- return;
- const st = formValue.state;
- const amount = formValue.threshold;
- const justification = {
- id: theForm.id,
- label: theForm.label,
- version: theForm.version,
- value: formValue
- };
- onSubmit(justification, st, amount);
- }
- },
- /* @__PURE__ */ h("div", { class: "mt-6 flex items-center justify-end gap-x-6" }, /* @__PURE__ */ h(
- "a",
- {
- href: Pages.account.url({ account: account2 }),
- class: "text-sm font-semibold leading-6 text-gray-900"
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Cancel")
- ), /* @__PURE__ */ h(
- "button",
- {
- type: "submit",
- class: "rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Confirm")
- ))
- );
-}
-var codecForSimpleFormMetadata = () => buildCodecForObject().property("id", codecOptional(codecForString())).property("version", codecOptional(codecForNumber())).build("SimpleFormMetadata");
-function parseJustification(s6, listOfAllKnownForms) {
- try {
- const justification = JSON.parse(s6);
- const info = codecForSimpleFormMetadata().decode(justification);
- if (!info.id) {
- return {
- type: "fail",
- case: "id-not-found",
- detail: {}
- };
- }
- if (!info.version) {
- return {
- type: "fail",
- case: "version-not-found",
- detail: {}
- };
- }
- const found = listOfAllKnownForms.find((f3) => {
- return f3.id === info.id && f3.version === info.version;
- });
- if (!found) {
- return {
- type: "fail",
- case: "form-not-found",
- detail: {}
- };
- }
- return {
- type: "ok",
- body: {
- justification,
- metadata: found
- }
- };
- } catch (e5) {
- return {
- type: "fail",
- case: "not-json",
- detail: {}
- };
- }
-}
// src/pages/ShowConsolidated.tsx
init_preact_module();
-
-// src/utils/converter.ts
-var amlStateConverter = {
- toStringUI: stringifyAmlState,
- fromStringUI: parseAmlState
-};
-function stringifyAmlState(s6) {
- if (s6 === void 0)
- return "";
- switch (s6) {
- case AmlExchangeBackend.AmlState.normal:
- return "normal";
- case AmlExchangeBackend.AmlState.pending:
- return "pending";
- case AmlExchangeBackend.AmlState.frozen:
- return "frozen";
- }
-}
-function parseAmlState(s6) {
- switch (s6) {
- case "normal":
- return AmlExchangeBackend.AmlState.normal;
- case "pending":
- return AmlExchangeBackend.AmlState.pending;
- case "frozen":
- return AmlExchangeBackend.AmlState.frozen;
- default:
- throw Error(`unknown AML state: ${s6}`);
- }
-}
-
-// src/pages/ShowConsolidated.tsx
function ShowConsolidated({
history: history2,
until
@@ -26221,50 +27702,38 @@ function ShowConsolidated({
const { i18n: i18n2 } = useTranslationContext();
const cons = getConsolidated(history2, until);
const form = {
- behavior: (form2) => {
- return {
- aml: {
- threshold: {
- hidden: !form2.aml
- },
- since: {
- hidden: !form2.aml
- },
- state: {
- hidden: !form2.aml
- }
- }
- };
- },
+ type: "double-column",
design: [
{
title: i18n2.str`AML`,
fields: [
{
type: "amount",
- props: {
+ properties: {
+ id: ".aml.threshold",
+ currency: "NETZBON",
label: i18n2.str`Threshold`,
name: "aml.threshold"
}
},
{
type: "choiceHorizontal",
- props: {
+ properties: {
label: i18n2.str`State`,
name: "aml.state",
- converter: amlStateConverter,
+ id: ".aml.state",
choices: [
{
label: i18n2.str`Frozen`,
- value: AmlExchangeBackend.AmlState.frozen
+ value: "frozen"
},
{
label: i18n2.str`Pending`,
- value: AmlExchangeBackend.AmlState.pending
+ value: "pending"
},
{
label: i18n2.str`Normal`,
- value: AmlExchangeBackend.AmlState.normal
+ value: "normal"
}
]
}
@@ -26276,8 +27745,9 @@ function ShowConsolidated({
fields: Object.entries(cons.kyc).map(([key, field]) => {
const result = {
type: "text",
- props: {
+ properties: {
label: key,
+ id: `kyc.${key}.value`,
name: `kyc.${key}.value`,
help: `${field.provider} since ${field.since.t_ms === "never" ? "never" : format2(field.since.t_ms, "dd/MM/yyyy")}`
}
@@ -26287,7 +27757,7 @@ function ShowConsolidated({
} : void 0
]
};
- return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("h1", { class: "text-base font-semibold leading-7 text-black" }, "Consolidated information ", until.t_ms === "never" ? "" : `after ${format2(until.t_ms, "dd MMMM yyyy")}`), /* @__PURE__ */ h(
+ return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("h1", { class: "text-base font-semibold leading-7 text-black" }, "Consolidated information", " ", until.t_ms === "never" ? "" : `after ${format2(until.t_ms, "dd MMMM yyyy")}`), /* @__PURE__ */ h(
DefaultForm,
{
key: `${String(Date.now())}`,
@@ -26302,7 +27772,7 @@ function ShowConsolidated({
function getConsolidated(history2, when) {
const initial2 = {
aml: {
- state: AmlExchangeBackend.AmlState.normal,
+ state: TalerExchangeApi.AmlState.normal,
threshold: {
currency: "ARS",
value: 1e3,
@@ -26333,8 +27803,9 @@ function getConsolidated(history2, when) {
}
case "kyc-collection": {
Object.keys(cur.values).forEach((field) => {
+ const value = cur.values[field];
prev.kyc[field] = {
- value: cur.values[field],
+ value,
provider: cur.provider,
since: cur.when
};
@@ -26356,21 +27827,21 @@ function titleForJustification(op, i18n2) {
}
switch (op.case) {
case "not-json":
- return "error: the justification is not a form";
+ return i18n2.str`error: the justification is not a form`;
case "id-not-found":
- return "error: justification form's id not found";
+ return i18n2.str`error: justification form's id not found`;
case "version-not-found":
- return "error: justification form's version not found";
+ return i18n2.str`error: justification form's version not found`;
case "form-not-found":
- return `error: justification form not found`;
+ return i18n2.str`error: justification form not found`;
default: {
assertUnreachable(op.case);
}
}
}
-function getEventsFromAmlHistory(aml, kyc, i18n2) {
+function getEventsFromAmlHistory(aml, kyc, i18n2, forms) {
const ae = aml.map((a6) => {
- const just = parseJustification(a6.justification, uiForms.forms(i18n2));
+ const just = parseJustification(a6.justification, forms);
return {
type: just.type === "ok" ? "aml-form" : "aml-form-error",
state: a6.new_state,
@@ -26401,11 +27872,13 @@ function getEventsFromAmlHistory(aml, kyc, i18n2) {
}, []);
return ae.concat(ke).sort(selectSooner);
}
-function CaseDetails({ account: account2 }) {
+function CaseDetails({ account }) {
const [selected, setSelected] = p3(AbsoluteTime.now());
const [showForm, setShowForm] = p3();
const { i18n: i18n2 } = useTranslationContext();
- const details = useCaseDetails(account2);
+ const details = useCaseDetails(account);
+ const { forms } = useUiFormsContext();
+ const allForms = [...forms, ...preloadedForms(i18n2)];
if (!details) {
return /* @__PURE__ */ h(Loading, null);
}
@@ -26424,14 +27897,19 @@ function CaseDetails({ account: account2 }) {
}
}
const { aml_history, kyc_attributes } = details.body;
- const events = getEventsFromAmlHistory(aml_history, kyc_attributes, i18n2);
+ const events2 = getEventsFromAmlHistory(
+ aml_history,
+ kyc_attributes,
+ i18n2,
+ allForms
+ );
if (showForm !== void 0) {
return /* @__PURE__ */ h(
DefaultForm,
{
readOnly: true,
initial: showForm.justification.value,
- form: showForm.metadata.impl(showForm.justification.value)
+ form: showForm.metadata
},
/* @__PURE__ */ h("div", { class: "mt-6 flex items-center justify-end gap-x-6" }, /* @__PURE__ */ h(
"button",
@@ -26448,46 +27926,56 @@ function CaseDetails({ account: account2 }) {
return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h(
"a",
{
- href: Pages.newFormEntry.url({ account: account2 }),
+ href: privatePages.caseNew.url({ cid: account }),
class: "m-4 block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700"
},
/* @__PURE__ */ h(i18n2.Translate, null, "New AML form")
- ), /* @__PURE__ */ h("header", { class: "flex items-center justify-between border-b border-white/5 px-4 py-4 sm:px-6 sm:py-6 lg:px-8" }, /* @__PURE__ */ h("h1", { class: "text-base font-semibold leading-7 text-black" }, /* @__PURE__ */ h(i18n2.Translate, null, "Case history for account ", /* @__PURE__ */ h("span", { title: account2 }, account2.substring(0, 16), "...")))), /* @__PURE__ */ h(ShowTimeline, { history: events, onSelect: (e5) => {
- switch (e5.type) {
- case "aml-form": {
- const { justification, metadata } = e5;
- setShowForm({ justification, metadata });
- break;
- }
- case "kyc-collection":
- case "kyc-expiration": {
- setSelected(e5.when);
- break;
+ ), /* @__PURE__ */ h("header", { class: "flex items-center justify-between border-b border-white/5 px-4 py-4 sm:px-6 sm:py-6 lg:px-8" }, /* @__PURE__ */ h("h1", { class: "text-base font-semibold leading-7 text-black" }, /* @__PURE__ */ h(i18n2.Translate, null, "Case history for account", " ", /* @__PURE__ */ h("span", { title: account }, account.substring(0, 16), "...")))), /* @__PURE__ */ h(
+ ShowTimeline,
+ {
+ history: events2,
+ onSelect: (e5) => {
+ switch (e5.type) {
+ case "aml-form": {
+ const { justification, metadata } = e5;
+ setShowForm({ justification, metadata });
+ break;
+ }
+ case "kyc-collection":
+ case "kyc-expiration": {
+ setSelected(e5.when);
+ break;
+ }
+ case "aml-form-error":
+ }
}
- case "aml-form-error":
}
- } }), selected && /* @__PURE__ */ h(ShowConsolidated, { history: events, until: selected }));
+ ), selected && /* @__PURE__ */ h(ShowConsolidated, { history: events2, until: selected }));
}
function AmlStateBadge({ state }) {
switch (state) {
- case AmlExchangeBackend.AmlState.normal: {
+ case TalerExchangeApi.AmlState.normal: {
return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-green-50 px-2 py-1 text-xs font-medium text-green-700 ring-1 ring-inset ring-green-600/20" }, "Normal");
}
- case AmlExchangeBackend.AmlState.pending: {
+ case TalerExchangeApi.AmlState.pending: {
return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-yellow-50 px-2 py-1 text-xs font-medium text-yellow-700 ring-1 ring-inset ring-green-600/20" }, "Pending");
}
- case AmlExchangeBackend.AmlState.frozen: {
+ case TalerExchangeApi.AmlState.frozen: {
return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-red-50 px-2 py-1 text-xs font-medium text-red-700 ring-1 ring-inset ring-green-600/20" }, "Frozen");
}
}
assertUnreachable(state);
}
-function ShowTimeline({ history: history2, onSelect }) {
+function ShowTimeline({
+ history: history2,
+ onSelect
+}) {
return /* @__PURE__ */ h("div", { class: "flow-root" }, /* @__PURE__ */ h("ul", { role: "list" }, history2.map((e5, idx) => {
const isLast = history2.length - 1 === idx;
return /* @__PURE__ */ h(
"li",
{
+ key: idx,
"data-ok": e5.type !== "aml-form-error",
class: "hover:bg-gray-200 p-2 rounded data-[ok=true]:cursor-pointer",
onClick: () => {
@@ -26509,11 +27997,47 @@ function ShowTimeline({ history: history2, onSelect }) {
case "kyc-collection": {
return (
// <ArrowDownCircleIcon class="h-8 w-8 text-green-700" />
- /* @__PURE__ */ h("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", class: "w-6 h-6" }, /* @__PURE__ */ h("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M9 12.75l3 3m0 0l3-3m-3 3v-7.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }))
+ /* @__PURE__ */ h(
+ "svg",
+ {
+ xmlns: "http://www.w3.org/2000/svg",
+ fill: "none",
+ viewBox: "0 0 24 24",
+ "stroke-width": "1.5",
+ stroke: "currentColor",
+ class: "w-6 h-6"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round",
+ d: "M9 12.75l3 3m0 0l3-3m-3 3v-7.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
+ }
+ )
+ )
);
}
case "kyc-expiration": {
- return /* @__PURE__ */ h("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", class: "w-6 h-6" }, /* @__PURE__ */ h("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z" }));
+ return /* @__PURE__ */ h(
+ "svg",
+ {
+ xmlns: "http://www.w3.org/2000/svg",
+ fill: "none",
+ viewBox: "0 0 24 24",
+ "stroke-width": "1.5",
+ stroke: "currentColor",
+ class: "w-6 h-6"
+ },
+ /* @__PURE__ */ h(
+ "path",
+ {
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round",
+ d: "M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z"
+ }
+ )
+ );
}
}
assertUnreachable(e5);
@@ -26527,569 +28051,223 @@ function ShowTimeline({ history: history2, onSelect }) {
);
})));
}
-
-// src/pages/Cases.tsx
-init_preact_module();
-init_hooks_module();
-
-// src/hooks/useCases.ts
-init_hooks_module();
-var useSWR3 = useSWR;
-var PAGE_SIZE = 10;
-function useCases(state) {
- const officer2 = useOfficer();
- const session = officer2.state === "ready" ? officer2.account : void 0;
- const { api } = useExchangeApiContext();
- const [offset, setOffset] = p3();
- async function fetcher([officer3, state2, offset2]) {
- return await api.getDecisionsByState(officer3, state2, {
- order: "asc",
- offset: offset2,
- limit: PAGE_SIZE + 1
- });
- }
- const { data, error: error2 } = useSWR3(
- !session ? void 0 : [session, state, offset],
- fetcher
- );
- const isLastPage = data && data.type === "ok" && data.body.records.length <= PAGE_SIZE;
- const isFirstPage = !offset;
- const pagination = {
- isLastPage,
- isFirstPage,
- loadMore: () => {
- if (isLastPage || data?.type !== "ok")
- return;
- const list = data.body.records;
- setOffset(String(list[list.length - 1].rowid));
- },
- reset: () => {
- setOffset(void 0);
+var codecForSimpleFormMetadata = () => buildCodecForObject().property("id", codecOptional(codecForString())).property("version", codecOptional(codecForNumber())).build("SimpleFormMetadata");
+function parseJustification(s6, listOfAllKnownForms) {
+ try {
+ const justification = JSON.parse(s6);
+ const info = codecForSimpleFormMetadata().decode(justification);
+ if (!info.id) {
+ return {
+ type: "fail",
+ case: "id-not-found",
+ detail: {}
+ };
}
- };
- if (!session) {
- return {
- data: {
+ if (!info.version) {
+ return {
type: "fail",
- case: HttpStatusCode.Unauthorized,
+ case: "version-not-found",
+ detail: {}
+ };
+ }
+ const found = listOfAllKnownForms.find((f3) => {
+ return f3.id === info.id && f3.version === info.version;
+ });
+ if (!found) {
+ return {
+ type: "fail",
+ case: "form-not-found",
detail: {}
+ };
+ }
+ return {
+ type: "ok",
+ body: {
+ justification,
+ metadata: found
}
};
+ } catch (e5) {
+ return {
+ type: "fail",
+ case: "not-json",
+ detail: {}
+ };
}
- if (data) {
- if (data.type === "fail") {
- return { data };
- }
- const records = isLastPage ? data.body.records : removeLastElement(data.body.records);
- return { data: { type: "ok", body: { records } }, pagination };
- }
- if (error2) {
- return error2;
- }
- return void 0;
-}
-function removeLastElement(list) {
- if (list.length === 0) {
- return list;
- }
- return list.slice(0, -1);
}
-// src/pages/Officer.tsx
-init_preact_module();
-
-// src/pages/HandleAccountNotReady.tsx
-init_preact_module();
-
-// src/pages/CreateAccount.tsx
+// src/pages/CaseUpdate.tsx
init_preact_module();
-function CreateAccount({
- onNewAccount
-}) {
- const { i18n: i18n2 } = useTranslationContext();
- const Form = createNewForm();
- const [settings] = useSettings();
- return /* @__PURE__ */ h("div", { class: "flex min-h-full flex-col " }, /* @__PURE__ */ h("div", { class: "sm:mx-auto sm:w-full sm:max-w-md" }, /* @__PURE__ */ h("h2", { class: "mt-6 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900" }, /* @__PURE__ */ h(i18n2.Translate, null, "Create account"))), /* @__PURE__ */ h("div", { class: "mt-10 sm:mx-auto sm:w-full sm:max-w-[480px] " }, /* @__PURE__ */ h("div", { class: "bg-gray-100 px-6 py-6 shadow sm:rounded-lg sm:px-12" }, /* @__PURE__ */ h(
- Form.Provider,
- {
- computeFormState: (v3) => {
- return {
- password: {
- error: !v3.password ? i18n2.str`required` : settings.allowInsecurePassword ? void 0 : v3.password.length < 8 ? i18n2.str`should have at least 8 characters` : !v3.password.match(/[a-z]/) && v3.password.match(/[A-Z]/) ? i18n2.str`should have lowercase and uppercase characters` : !v3.password.match(/\d/) ? i18n2.str`should have numbers` : !v3.password.match(/[^a-zA-Z\d]/) ? i18n2.str`should have at least one character which is not a number or letter` : void 0
- },
- repeat: {
- error: !v3.repeat ? i18n2.str`required` : v3.repeat !== v3.password ? i18n2.str`doesn't match` : void 0
- }
- };
- },
- onSubmit: async (v3, s6) => {
- const error2 = s6?.password?.error ?? s6?.repeat?.error;
- if (error2) {
- notifyError(
- i18n2.str`Can't create account`,
- error2
- );
- } else {
- onNewAccount(v3.password);
- }
- }
- },
- /* @__PURE__ */ h("div", { class: "mb-4" }, /* @__PURE__ */ h(
- Form.InputLine,
- {
- label: i18n2.str`Password`,
- name: "password",
- type: "password",
- help: settings.allowInsecurePassword ? i18n2.str`short password are insecure, turn off insecure password in settings` : i18n2.str`lower and upper case letters, number and special character`,
- required: true
- }
- )),
- /* @__PURE__ */ h("div", { class: "mb-4" }, /* @__PURE__ */ h(
- Form.InputLine,
- {
- label: i18n2.str`Repeat password`,
- name: "repeat",
- type: "password",
- required: true
- }
- )),
- /* @__PURE__ */ h("div", { class: "mt-8" }, /* @__PURE__ */ h(
- "button",
- {
- type: "submit",
- class: "flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Create")
- ))
- ))));
+function searchForm(i18n2, forms, formId) {
+ {
+ const found = forms.find((v3) => v3.id === formId);
+ if (found)
+ return found;
+ }
+ {
+ const pf = preloadedForms(i18n2);
+ const found = pf.find((v3) => v3.id === formId);
+ if (found)
+ return found;
+ }
+ return void 0;
}
-
-// src/pages/UnlockAccount.tsx
-init_preact_module();
-function UnlockAccount({
- onAccountUnlocked,
- onRemoveAccount
+function CaseUpdate({
+ account,
+ type: formId
}) {
const { i18n: i18n2 } = useTranslationContext();
- const Form = createNewForm();
- return /* @__PURE__ */ h("div", { class: "flex min-h-full flex-col " }, /* @__PURE__ */ h("div", { class: "sm:mx-auto sm:w-full sm:max-w-md" }, /* @__PURE__ */ h("h1", { class: "mt-6 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900" }, /* @__PURE__ */ h(i18n2.Translate, null, "Account locked")), /* @__PURE__ */ h("p", { class: "mt-6 text-lg leading-8 text-gray-600" }, /* @__PURE__ */ h(i18n2.Translate, null, "Your account is normally locked anytime you reload. To unlock type your password again."))), /* @__PURE__ */ h("div", { class: "mt-10 sm:mx-auto sm:w-full sm:max-w-[480px] " }, /* @__PURE__ */ h("div", { class: "bg-gray-100 px-6 py-6 shadow sm:rounded-lg sm:px-12" }, /* @__PURE__ */ h(
- Form.Provider,
- {
- onSubmit: async (v3) => {
- try {
- await onAccountUnlocked(v3.password);
- notifyInfo(i18n2.str`Account unlocked`);
- } catch (e5) {
- if (e5 instanceof UnwrapKeyError) {
- notifyError(
- "Could not unlock account",
- e5.message
- );
- } else {
- throw e5;
- }
- }
- }
+ const officer = useOfficer();
+ const {
+ lib: { exchange: api }
+ } = useExchangeApiContext();
+ const [notification, withErrorHandler] = useLocalNotificationHandler();
+ const { config } = useExchangeApiContext();
+ const { forms } = useUiFormsContext();
+ const initial2 = {
+ when: AbsoluteTime.now(),
+ state: TalerExchangeApi.AmlState.pending,
+ threshold: Amounts.zeroOfCurrency(config.currency),
+ comment: ""
+ };
+ if (officer.state !== "ready") {
+ return /* @__PURE__ */ h(HandleAccountNotReady, { officer });
+ }
+ const theForm = searchForm(i18n2, forms, formId);
+ if (!theForm) {
+ return /* @__PURE__ */ h("div", null, "form with id ", formId, " not found");
+ }
+ const shape = [];
+ const requiredFields = [];
+ theForm.config.design.forEach((section) => {
+ Array.prototype.push.apply(shape, getShapeFromFields(section.fields));
+ Array.prototype.push.apply(
+ requiredFields,
+ getRequiredFields(section.fields)
+ );
+ });
+ const [form, state] = useFormState(shape, initial2, (st) => {
+ const partialErrors = undefinedIfEmpty({
+ state: st.state === void 0 ? i18n2.str`required` : void 0,
+ threshold: !st.threshold ? i18n2.str`required` : void 0,
+ when: !st.when ? i18n2.str`required` : void 0
+ });
+ const errors2 = undefinedIfEmpty(
+ validateRequiredFields(partialErrors, st, requiredFields)
+ );
+ if (errors2 === void 0) {
+ return {
+ status: "ok",
+ result: st,
+ errors: void 0
+ };
+ }
+ return {
+ status: "fail",
+ result: st,
+ errors: errors2
+ };
+ });
+ const validatedForm = state.status !== "ok" ? void 0 : state.result;
+ console.log(state.errors);
+ const submitHandler = validatedForm === void 0 ? void 0 : withErrorHandler(
+ () => {
+ const justification = {
+ id: theForm.id,
+ label: theForm.label,
+ version: theForm.version,
+ value: validatedForm
+ };
+ const decision = {
+ justification: JSON.stringify(justification),
+ decision_time: TalerProtocolTimestamp.now(),
+ h_payto: account,
+ new_state: justification.value.state,
+ new_threshold: Amounts.stringify(
+ justification.value.threshold
+ ),
+ kyc_requirements: void 0
+ };
+ return api.addDecisionDetails(officer.account, decision);
},
- /* @__PURE__ */ h("div", { class: "mb-4" }, /* @__PURE__ */ h(
- Form.InputLine,
- {
- label: i18n2.str`Password`,
- name: "password",
- type: "password",
- required: true
- }
- )),
- /* @__PURE__ */ h("div", { class: "mt-8" }, /* @__PURE__ */ h(
- "button",
- {
- type: "submit",
- class: "flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Unlock")
- ))
- )), /* @__PURE__ */ h(
- "button",
- {
- type: "button",
- onClick: () => {
- onRemoveAccount();
- },
- class: "m-4 block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 "
+ () => {
+ window.location.href = privatePages.cases.url({});
},
- /* @__PURE__ */ h(i18n2.Translate, null, "Forget account")
- )));
-}
-
-// src/pages/HandleAccountNotReady.tsx
-function HandleAccountNotReady({
- officer: officer2
-}) {
- if (officer2.state === "not-found") {
- return /* @__PURE__ */ h(
- CreateAccount,
- {
- onNewAccount: (password) => {
- officer2.create(password);
- }
+ (fail) => {
+ switch (fail.case) {
+ case HttpStatusCode.Forbidden:
+ case HttpStatusCode.Unauthorized:
+ return i18n2.str`Wrong credentials for "${officer.account}"`;
+ case HttpStatusCode.NotFound:
+ return i18n2.str`Officer or account not found`;
+ case HttpStatusCode.Conflict:
+ return i18n2.str`Officer disabled or more recent decision was already submitted.`;
+ default:
+ assertUnreachable(fail);
}
- );
- }
- if (officer2.state === "locked") {
+ }
+ );
+ return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(LocalNotificationBanner, { notification }), /* @__PURE__ */ h("div", { class: "space-y-10 divide-y -mt-5 divide-gray-900/10" }, theForm.config.design.map((section, i5) => {
+ if (!section)
+ return /* @__PURE__ */ h(p2, null);
return /* @__PURE__ */ h(
- UnlockAccount,
+ "div",
{
- onRemoveAccount: () => {
- officer2.forget();
- },
- onAccountUnlocked: async (pwd) => {
- await officer2.tryUnlock(pwd);
+ key: i5,
+ class: "grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3"
+ },
+ /* @__PURE__ */ h("div", { class: "px-4 sm:px-0" }, /* @__PURE__ */ h("h2", { class: "text-base font-semibold leading-7 text-gray-900" }, section.title), section.description && /* @__PURE__ */ h("p", { class: "mt-1 text-sm leading-6 text-gray-600" }, section.description)),
+ /* @__PURE__ */ h("div", { class: "bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2" }, /* @__PURE__ */ h("div", { class: "p-3" }, /* @__PURE__ */ h("div", { class: "grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6" }, /* @__PURE__ */ h(
+ RenderAllFieldsByUiConfig,
+ {
+ key: i5,
+ fields: convertUiField2(
+ i18n2,
+ section.fields,
+ form,
+ getConverterById
+ )
}
- }
+ ))))
);
- }
- assertUnreachable(officer2);
-}
-
-// src/settings.ts
-var defaultSettings2 = {};
-var uiSettings = "talerExchangeAmlSettings" in globalThis ? globalThis.talerExchangeAmlSettings : defaultSettings2;
-
-// src/hooks/useBackend.ts
-function getInitialBackendBaseURL() {
- const overrideUrl = typeof localStorage !== "undefined" ? localStorage.getItem("exchange-base-url") : void 0;
- let result;
- if (!overrideUrl) {
- if (!uiSettings.backendBaseURL) {
- console.error(
- "ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'"
- );
- result = typeof window !== "undefined" ? window.origin : "localhost";
- } else {
- result = uiSettings.backendBaseURL;
- }
- } else {
- result = overrideUrl;
- }
- try {
- return canonicalizeBaseUrl(result);
- } catch (e5) {
- return canonicalizeBaseUrl(window.origin);
- }
-}
-
-// src/pages/Officer.tsx
-function Officer() {
- const officer2 = useOfficer();
- const { i18n: i18n2 } = useTranslationContext();
- if (officer2.state !== "ready") {
- return /* @__PURE__ */ h(HandleAccountNotReady, { officer: officer2 });
- }
- const url = new URL(getInitialBackendBaseURL());
- const signupEmail = uiSettings.signupEmail ?? `aml-signup@${url.hostname}`;
- return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("h1", { class: "my-2 text-3xl font-bold tracking-tight text-gray-900 " }, /* @__PURE__ */ h(i18n2.Translate, null, "Public key")), /* @__PURE__ */ h("div", { class: "max-w-xl text-base leading-7 text-gray-700 lg:max-w-lg" }, /* @__PURE__ */ h("p", { class: "mt-6 font-mono break-all" }, officer2.account.id)), /* @__PURE__ */ h("p", null, /* @__PURE__ */ h(
+ })), /* @__PURE__ */ h("div", { class: "mt-6 flex items-center justify-end gap-x-6" }, /* @__PURE__ */ h(
"a",
{
- href: `mailto:${signupEmail}?subject=${encodeURIComponent("Request AML signup")}&body=${encodeURIComponent(`I want my AML account
-
-
-PubKey: ${officer2.account.id}`)}`,
- target: "_blank",
- rel: "noreferrer",
- class: "m-4 block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700"
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Request account activation")
- )), /* @__PURE__ */ h("p", null, /* @__PURE__ */ h(
- "button",
- {
- type: "button",
- onClick: () => {
- officer2.lock();
- },
- class: "m-4 block rounded-md border-0 bg-gray-200 px-3 py-2 text-center text-sm text-black shadow-sm "
+ href: privatePages.caseDetails.url({ cid: account }),
+ class: "text-sm font-semibold leading-6 text-gray-900"
},
- /* @__PURE__ */ h(i18n2.Translate, null, "Lock account")
- )), /* @__PURE__ */ h("p", null, /* @__PURE__ */ h(
- "button",
+ /* @__PURE__ */ h(i18n2.Translate, null, "Cancel")
+ ), /* @__PURE__ */ h(
+ Button,
{
- type: "button",
- onClick: () => {
- officer2.forget();
- },
- class: "m-4 block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 "
+ type: "submit",
+ handler: submitHandler,
+ disabled: !submitHandler,
+ class: "disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
},
- /* @__PURE__ */ h(i18n2.Translate, null, "Forget account")
+ /* @__PURE__ */ h(i18n2.Translate, null, "Confirm")
)));
}
-
-// src/pages/Cases.tsx
-function CasesUI({
- records,
- filter,
- onChangeFilter,
- onFirstPage,
- onNext
-}) {
+function SelectForm({ account }) {
const { i18n: i18n2 } = useTranslationContext();
- const form = createNewForm();
- return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("div", { class: "sm:flex sm:items-center" }, /* @__PURE__ */ h("div", { class: "px-2 sm:flex-auto" }, /* @__PURE__ */ h("h1", { class: "text-base font-semibold leading-6 text-gray-900" }, /* @__PURE__ */ h(i18n2.Translate, null, "Cases")), /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-700 w-80" }, /* @__PURE__ */ h(i18n2.Translate, null, "A list of all the account with the status"))), /* @__PURE__ */ h("div", { class: "px-2" }, /* @__PURE__ */ h(
- form.Provider,
- {
- initial: { state: filter },
- onUpdate: (v3) => {
- onChangeFilter(v3.state ?? filter);
- },
- onSubmit: (_v) => {
- }
- },
- /* @__PURE__ */ h(
- form.InputChoiceHorizontal,
- {
- name: "state",
- label: i18n2.str`Filter`,
- converter: amlStateConverter,
- choices: [
- {
- label: i18n2.str`Pending`,
- value: AmlExchangeBackend.AmlState.pending
- },
- {
- label: i18n2.str`Frozen`,
- value: AmlExchangeBackend.AmlState.frozen
- },
- {
- label: i18n2.str`Normal`,
- value: AmlExchangeBackend.AmlState.normal
- }
- ]
- }
- )
- ))), /* @__PURE__ */ h("div", { class: "mt-8 flow-root" }, /* @__PURE__ */ h("div", { class: "overflow-x-auto" }, !records.length ? /* @__PURE__ */ h("div", null, "empty result ") : /* @__PURE__ */ h("div", { class: "inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8" }, /* @__PURE__ */ h("table", { class: "min-w-full divide-y divide-gray-300" }, /* @__PURE__ */ h("thead", null, /* @__PURE__ */ h("tr", null, /* @__PURE__ */ h(
- "th",
- {
- scope: "col",
- class: "px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-80"
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Account Id")
- ), /* @__PURE__ */ h(
- "th",
- {
- scope: "col",
- class: "px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-40"
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Status")
- ), /* @__PURE__ */ h(
- "th",
- {
- scope: "col",
- class: "sm:hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-40"
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Threshold")
- ))), /* @__PURE__ */ h("tbody", { class: "divide-y divide-gray-200 bg-white" }, records.map((r3) => {
- return /* @__PURE__ */ h("tr", { key: r3.h_payto, class: "hover:bg-gray-100 " }, /* @__PURE__ */ h("td", { class: "whitespace-nowrap px-3 py-5 text-sm text-gray-500 " }, /* @__PURE__ */ h("div", { class: "text-gray-900" }, /* @__PURE__ */ h(
+ const { forms } = useUiFormsContext();
+ const pf = preloadedForms(i18n2);
+ return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("pre", null, "New form for account: ", account.substring(0, 16), "..."), forms.map((form) => {
+ return /* @__PURE__ */ h(
"a",
{
- href: Pages.account.url({ account: r3.h_payto }),
- class: "text-indigo-600 hover:text-indigo-900"
- },
- r3.h_payto.substring(0, 16),
- "..."
- ))), /* @__PURE__ */ h("td", { class: "whitespace-nowrap px-3 py-5 text-sm text-gray-500" }, ((state) => {
- switch (state) {
- case AmlExchangeBackend.AmlState.normal: {
- return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-green-50 px-2 py-1 text-xs font-medium text-green-700 ring-1 ring-inset ring-green-600/20" }, "Normal");
- }
- case AmlExchangeBackend.AmlState.pending: {
- return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-yellow-50 px-2 py-1 text-xs font-medium text-yellow-700 ring-1 ring-inset ring-green-600/20" }, "Pending");
- }
- case AmlExchangeBackend.AmlState.frozen: {
- return /* @__PURE__ */ h("span", { class: "inline-flex items-center rounded-md bg-red-50 px-2 py-1 text-xs font-medium text-red-700 ring-1 ring-inset ring-green-600/20" }, "Frozen");
- }
- }
- })(r3.current_state)), /* @__PURE__ */ h("td", { class: "whitespace-nowrap px-3 py-5 text-sm text-gray-900" }, r3.threshold));
- }))), /* @__PURE__ */ h(Pagination, { onFirstPage, onNext })))));
-}
-function Cases() {
- const [stateFilter, setStateFilter] = p3(
- AmlExchangeBackend.AmlState.pending
- );
- const list = useCases(stateFilter);
- if (!list) {
- return /* @__PURE__ */ h(Loading, null);
- }
- if (list instanceof TalerError) {
- return /* @__PURE__ */ h(ErrorLoading, { error: list });
- }
- if (list.data.type === "fail") {
- switch (list.data.case) {
- case HttpStatusCode.Unauthorized:
- case HttpStatusCode.Forbidden:
- case HttpStatusCode.NotFound:
- case HttpStatusCode.Conflict:
- return /* @__PURE__ */ h(Officer, null);
- default:
- assertUnreachable(list.data);
- }
- }
- const { records } = list.data.body;
- return /* @__PURE__ */ h(
- CasesUI,
- {
- records,
- onFirstPage: list.pagination && !list.pagination.isFirstPage ? list.pagination.reset : void 0,
- onNext: list.pagination && !list.pagination.isLastPage ? list.pagination.loadMore : void 0,
- filter: stateFilter,
- onChangeFilter: setStateFilter
- }
- );
-}
-var PeopleIcon = () => /* @__PURE__ */ h(
- "svg",
- {
- xmlns: "http://www.w3.org/2000/svg",
- fill: "none",
- viewBox: "0 0 24 24",
- "stroke-width": "1.5",
- stroke: "currentColor",
- class: "w-6 h-6"
- },
- /* @__PURE__ */ h(
- "path",
- {
- "stroke-linecap": "round",
- "stroke-linejoin": "round",
- d: "M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z"
- }
- )
-);
-var HomeIcon = () => /* @__PURE__ */ h(
- "svg",
- {
- xmlns: "http://www.w3.org/2000/svg",
- fill: "none",
- viewBox: "0 0 24 24",
- "stroke-width": "1.5",
- stroke: "currentColor",
- class: "w-6 h-6"
- },
- /* @__PURE__ */ h(
- "path",
- {
- "stroke-linecap": "round",
- "stroke-linejoin": "round",
- d: "M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"
- }
- )
-);
-function Pagination({
- onFirstPage,
- onNext
-}) {
- const { i18n: i18n2 } = useTranslationContext();
- return /* @__PURE__ */ h(
- "nav",
- {
- class: "flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 rounded-lg",
- "aria-label": "Pagination"
- },
- /* @__PURE__ */ h("div", { class: "flex flex-1 justify-between sm:justify-end" }, /* @__PURE__ */ h(
- "button",
- {
- class: "relative disabled:bg-gray-100 disabled:text-gray-500 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0",
- disabled: !onFirstPage,
- onClick: onFirstPage
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "First page")
- ), /* @__PURE__ */ h(
- "button",
- {
- class: "relative disabled:bg-gray-100 disabled:text-gray-500 ml-3 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0",
- disabled: !onNext,
- onClick: onNext
+ key: form.id,
+ href: privatePages.caseUpdate.url({ cid: account, type: form.id }),
+ class: "m-4 block rounded-md w-fit border-0 p-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-600"
},
- /* @__PURE__ */ h(i18n2.Translate, null, "Next")
- ))
- );
-}
-
-// src/pages/NewFormEntry.tsx
-init_preact_module();
-function NewFormEntry({
- account: account2,
- type
-}) {
- const { i18n: i18n2 } = useTranslationContext();
- const officer2 = useOfficer();
- const { api } = useExchangeApiContext();
- const [notification, notify2, handleError] = useLocalNotification();
- if (!account2) {
- return /* @__PURE__ */ h("div", null, "no account");
- }
- if (!type) {
- return /* @__PURE__ */ h(SelectForm, { account: account2 });
- }
- if (officer2.state !== "ready") {
- return /* @__PURE__ */ h(HandleAccountNotReady, { officer: officer2 });
- }
- return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(LocalNotificationBanner, { notification }), /* @__PURE__ */ h(
- AntiMoneyLaunderingForm,
- {
- account: account2,
- formId: type,
- onSubmit: async (justification, new_state, new_threshold) => {
- const decision = {
- justification: JSON.stringify(justification),
- decision_time: TalerProtocolTimestamp.now(),
- h_payto: account2,
- new_state,
- new_threshold: Amounts.stringify(new_threshold),
- kyc_requirements: void 0
- };
- await handleError(async () => {
- const resp = await api.addDecisionDetails(officer2.account, decision);
- if (resp.type === "ok") {
- window.location.href = Pages.cases.url;
- return;
- }
- switch (resp.case) {
- case HttpStatusCode.Forbidden:
- case HttpStatusCode.Unauthorized:
- return notify2({
- type: "error",
- title: i18n2.str`Wrong credentials for "${officer2.account}"`,
- description: resp.detail.hint,
- debug: resp.detail,
- when: AbsoluteTime.now()
- });
- case HttpStatusCode.NotFound:
- return notify2({
- type: "error",
- title: i18n2.str`Officer or account not found`,
- description: resp.detail.hint,
- debug: resp.detail,
- when: AbsoluteTime.now()
- });
- case HttpStatusCode.Conflict:
- return notify2({
- type: "error",
- title: i18n2.str`Officer disabled or more recent decision was already submitted.`,
- description: resp.detail.hint,
- debug: resp.detail,
- when: AbsoluteTime.now()
- });
- }
- });
- }
- }
- ));
-}
-function SelectForm({ account: account2 }) {
- const { i18n: i18n2 } = useTranslationContext();
- return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("pre", null, "New form for account: ", account2.substring(0, 16), "..."), uiForms.forms(i18n2).map((form, idx) => {
+ form.label
+ );
+ }), pf.map((form) => {
return /* @__PURE__ */ h(
"a",
{
- href: Pages.newFormEntry.url({ account: account2, type: form.id }),
+ key: form.id,
+ href: privatePages.caseUpdate.url({ cid: account, type: form.id }),
class: "m-4 block rounded-md w-fit border-0 p-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-600"
},
form.label
@@ -27097,752 +28275,779 @@ function SelectForm({ account: account2 }) {
}));
}
-// ../../node_modules/.pnpm/@babel+runtime@7.19.4/node_modules/@babel/runtime/helpers/esm/extends.js
-function _extends() {
- _extends = Object.assign ? Object.assign.bind() : function(target) {
- for (var i5 = 1; i5 < arguments.length; i5++) {
- var source = arguments[i5];
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
- return target;
- };
- return _extends.apply(this, arguments);
-}
-
-// ../../node_modules/.pnpm/resolve-pathname@3.0.0/node_modules/resolve-pathname/esm/resolve-pathname.js
-function isAbsolute(pathname) {
- return pathname.charAt(0) === "/";
-}
-function spliceOne(list, index) {
- for (var i5 = index, k6 = i5 + 1, n2 = list.length; k6 < n2; i5 += 1, k6 += 1) {
- list[i5] = list[k6];
- }
- list.pop();
-}
-function resolvePathname(to, from) {
- if (from === void 0)
- from = "";
- var toParts = to && to.split("/") || [];
- var fromParts = from && from.split("/") || [];
- var isToAbs = to && isAbsolute(to);
- var isFromAbs = from && isAbsolute(from);
- var mustEndAbs = isToAbs || isFromAbs;
- if (to && isAbsolute(to)) {
- fromParts = toParts;
- } else if (toParts.length) {
- fromParts.pop();
- fromParts = fromParts.concat(toParts);
- }
- if (!fromParts.length)
- return "/";
- var hasTrailingSlash;
- if (fromParts.length) {
- var last = fromParts[fromParts.length - 1];
- hasTrailingSlash = last === "." || last === ".." || last === "";
- } else {
- hasTrailingSlash = false;
- }
- var up = 0;
- for (var i5 = fromParts.length; i5 >= 0; i5--) {
- var part = fromParts[i5];
- if (part === ".") {
- spliceOne(fromParts, i5);
- } else if (part === "..") {
- spliceOne(fromParts, i5);
- up++;
- } else if (up) {
- spliceOne(fromParts, i5);
- up--;
- }
- }
- if (!mustEndAbs)
- for (; up--; up)
- fromParts.unshift("..");
- if (mustEndAbs && fromParts[0] !== "" && (!fromParts[0] || !isAbsolute(fromParts[0])))
- fromParts.unshift("");
- var result = fromParts.join("/");
- if (hasTrailingSlash && result.substr(-1) !== "/")
- result += "/";
- return result;
-}
-var resolve_pathname_default = resolvePathname;
-
-// ../../node_modules/.pnpm/tiny-invariant@1.3.1/node_modules/tiny-invariant/dist/esm/tiny-invariant.js
-var isProduction = true;
-var prefix = "Invariant failed";
-function invariant2(condition, message) {
- if (condition) {
- return;
- }
- if (isProduction) {
- throw new Error(prefix);
- }
- var provided = typeof message === "function" ? message() : message;
- var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
- throw new Error(value);
-}
-
-// ../../node_modules/.pnpm/history@4.10.1/node_modules/history/esm/history.js
-function addLeadingSlash(path) {
- return path.charAt(0) === "/" ? path : "/" + path;
-}
-function stripLeadingSlash(path) {
- return path.charAt(0) === "/" ? path.substr(1) : path;
-}
-function hasBasename(path, prefix2) {
- return path.toLowerCase().indexOf(prefix2.toLowerCase()) === 0 && "/?#".indexOf(path.charAt(prefix2.length)) !== -1;
-}
-function stripBasename(path, prefix2) {
- return hasBasename(path, prefix2) ? path.substr(prefix2.length) : path;
-}
-function stripTrailingSlash(path) {
- return path.charAt(path.length - 1) === "/" ? path.slice(0, -1) : path;
-}
-function parsePath(path) {
- var pathname = path || "/";
- var search = "";
- var hash4 = "";
- var hashIndex = pathname.indexOf("#");
- if (hashIndex !== -1) {
- hash4 = pathname.substr(hashIndex);
- pathname = pathname.substr(0, hashIndex);
+// src/Routing.tsx
+function Routing() {
+ const session = useOfficer();
+ if (session.state === "ready") {
+ return /* @__PURE__ */ h(ExchangeAmlFrame, { officer: session }, /* @__PURE__ */ h(PrivateRouting, null));
}
- var searchIndex = pathname.indexOf("?");
- if (searchIndex !== -1) {
- search = pathname.substr(searchIndex);
- pathname = pathname.substr(0, searchIndex);
- }
- return {
- pathname,
- search: search === "?" ? "" : search,
- hash: hash4 === "#" ? "" : hash4
- };
+ return /* @__PURE__ */ h(ExchangeAmlFrame, null, /* @__PURE__ */ h(PublicRounting, null));
}
-function createPath(location2) {
- var pathname = location2.pathname, search = location2.search, hash4 = location2.hash;
- var path = pathname || "/";
- if (search && search !== "?")
- path += search.charAt(0) === "?" ? search : "?" + search;
- if (hash4 && hash4 !== "#")
- path += hash4.charAt(0) === "#" ? hash4 : "#" + hash4;
- return path;
-}
-function createLocation(path, state, key, currentLocation) {
- var location2;
- if (typeof path === "string") {
- location2 = parsePath(path);
- location2.state = state;
- } else {
- location2 = _extends({}, path);
- if (location2.pathname === void 0)
- location2.pathname = "";
- if (location2.search) {
- if (location2.search.charAt(0) !== "?")
- location2.search = "?" + location2.search;
- } else {
- location2.search = "";
- }
- if (location2.hash) {
- if (location2.hash.charAt(0) !== "#")
- location2.hash = "#" + location2.hash;
- } else {
- location2.hash = "";
- }
- if (state !== void 0 && location2.state === void 0)
- location2.state = state;
- }
- try {
- location2.pathname = decodeURI(location2.pathname);
- } catch (e5) {
- if (e5 instanceof URIError) {
- throw new URIError('Pathname "' + location2.pathname + '" could not be decoded. This is likely caused by an invalid percent-encoding.');
+var publicPages = {
+ config: urlPattern(/\/config/, () => "#/config"),
+ login: urlPattern(/\/login/, () => "#/login")
+};
+function PublicRounting() {
+ const { i18n: i18n2 } = useTranslationContext();
+ const location2 = useCurrentLocation(publicPages);
+ const session = useOfficer();
+ if (location2 === void 0) {
+ if (session.state !== "ready") {
+ return /* @__PURE__ */ h(HandleAccountNotReady, { officer: session });
} else {
- throw e5;
+ return /* @__PURE__ */ h("div", null);
}
}
- if (key)
- location2.key = key;
- if (currentLocation) {
- if (!location2.pathname) {
- location2.pathname = currentLocation.pathname;
- } else if (location2.pathname.charAt(0) !== "/") {
- location2.pathname = resolve_pathname_default(location2.pathname, currentLocation.pathname);
- }
- } else {
- if (!location2.pathname) {
- location2.pathname = "/";
- }
- }
- return location2;
-}
-function createTransitionManager() {
- var prompt = null;
- function setPrompt(nextPrompt) {
- false ? tiny_warning_esm_default(prompt == null, "A history supports only one prompt at a time") : void 0;
- prompt = nextPrompt;
- return function() {
- if (prompt === nextPrompt)
- prompt = null;
- };
- }
- function confirmTransitionTo(location2, action, getUserConfirmation, callback) {
- if (prompt != null) {
- var result = typeof prompt === "function" ? prompt(location2, action) : prompt;
- if (typeof result === "string") {
- if (typeof getUserConfirmation === "function") {
- getUserConfirmation(result, callback);
- } else {
- false ? tiny_warning_esm_default(false, "A history needs a getUserConfirmation function in order to use a prompt message") : void 0;
- callback(true);
- }
- } else {
- callback(result !== false);
- }
- } else {
- callback(true);
+ switch (location2.name) {
+ case "config": {
+ return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("div", { class: "sm:mx-auto sm:w-full sm:max-w-sm" }, /* @__PURE__ */ h("h2", { class: "text-center text-2xl font-bold leading-9 tracking-tight text-gray-900" }, i18n2.str`Welcome to exchange config!`)));
}
- }
- var listeners = [];
- function appendListener(fn2) {
- var isActive = true;
- function listener() {
- if (isActive)
- fn2.apply(void 0, arguments);
+ case "login": {
+ return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("div", { class: "sm:mx-auto sm:w-full sm:max-w-sm" }, /* @__PURE__ */ h("h2", { class: "text-center text-2xl font-bold leading-9 tracking-tight text-gray-900" }, i18n2.str`Welcome to exchange config!`)));
}
- listeners.push(listener);
- return function() {
- isActive = false;
- listeners = listeners.filter(function(item) {
- return item !== listener;
- });
- };
- }
- function notifyListeners() {
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
+ default:
+ assertUnreachable(location2);
+ }
+}
+var privatePages = {
+ account: urlPattern(/\/account/, () => "#/account"),
+ cases: urlPattern(/\/cases/, () => "#/cases"),
+ caseUpdate: urlPattern(
+ /\/case\/(?<cid>[a-zA-Z0-9]+)\/new\/(?<type>[a-zA-Z0-9_.]+)/,
+ ({ cid, type }) => `#/case/${cid}/new/${type}`
+ ),
+ caseNew: urlPattern(
+ /\/case\/(?<cid>[a-zA-Z0-9]+)\/new/,
+ ({ cid }) => `#/case/${cid}/new`
+ ),
+ caseDetails: urlPattern(
+ /\/case\/(?<cid>[a-zA-Z0-9]+)/,
+ ({ cid }) => `#/case/${cid}`
+ )
+};
+function PrivateRouting() {
+ const { navigateTo } = useNavigationContext();
+ const location2 = useCurrentLocation(privatePages);
+ h2(() => {
+ if (location2 === void 0) {
+ navigateTo(privatePages.account.url({}));
}
- listeners.forEach(function(listener) {
- return listener.apply(void 0, args);
- });
+ }, [location2]);
+ if (location2 === void 0) {
+ return /* @__PURE__ */ h(p2, null);
}
- return {
- setPrompt,
- confirmTransitionTo,
- appendListener,
- notifyListeners
- };
-}
-var canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);
-function getConfirmation(message, callback) {
- callback(window.confirm(message));
-}
-function supportsGoWithoutReloadUsingHash() {
- return window.navigator.userAgent.indexOf("Firefox") === -1;
-}
-var HashChangeEvent$1 = "hashchange";
-var HashPathCoders = {
- hashbang: {
- encodePath: function encodePath(path) {
- return path.charAt(0) === "!" ? path : "!/" + stripLeadingSlash(path);
- },
- decodePath: function decodePath(path) {
- return path.charAt(0) === "!" ? path.substr(1) : path;
+ switch (location2.name) {
+ case "account": {
+ return /* @__PURE__ */ h(Officer, null);
}
- },
- noslash: {
- encodePath: stripLeadingSlash,
- decodePath: addLeadingSlash
- },
- slash: {
- encodePath: addLeadingSlash,
- decodePath: addLeadingSlash
- }
-};
-function stripHash(url) {
- var hashIndex = url.indexOf("#");
- return hashIndex === -1 ? url : url.slice(0, hashIndex);
-}
-function getHashPath() {
- var href = window.location.href;
- var hashIndex = href.indexOf("#");
- return hashIndex === -1 ? "" : href.substring(hashIndex + 1);
-}
-function pushHashPath(path) {
- window.location.hash = path;
-}
-function replaceHashPath(path) {
- window.location.replace(stripHash(window.location.href) + "#" + path);
-}
-function createHashHistory(props) {
- if (props === void 0) {
- props = {};
- }
- !canUseDOM ? false ? invariant2(false, "Hash history needs a DOM") : invariant2(false) : void 0;
- var globalHistory = window.history;
- var canGoWithoutReload = supportsGoWithoutReloadUsingHash();
- var _props = props, _props$getUserConfirm = _props.getUserConfirmation, getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm, _props$hashType = _props.hashType, hashType = _props$hashType === void 0 ? "slash" : _props$hashType;
- var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : "";
- var _HashPathCoders$hashT = HashPathCoders[hashType], encodePath2 = _HashPathCoders$hashT.encodePath, decodePath2 = _HashPathCoders$hashT.decodePath;
- function getDOMLocation() {
- var path2 = decodePath2(getHashPath());
- false ? tiny_warning_esm_default(!basename || hasBasename(path2, basename), 'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "' + path2 + '" to begin with "' + basename + '".') : void 0;
- if (basename)
- path2 = stripBasename(path2, basename);
- return createLocation(path2);
- }
- var transitionManager = createTransitionManager();
- function setState(nextState) {
- _extends(history2, nextState);
- history2.length = globalHistory.length;
- transitionManager.notifyListeners(history2.location, history2.action);
- }
- var forceNextPop = false;
- var ignorePath = null;
- function locationsAreEqual$$1(a6, b5) {
- return a6.pathname === b5.pathname && a6.search === b5.search && a6.hash === b5.hash;
- }
- function handleHashChange() {
- var path2 = getHashPath();
- var encodedPath2 = encodePath2(path2);
- if (path2 !== encodedPath2) {
- replaceHashPath(encodedPath2);
- } else {
- var location2 = getDOMLocation();
- var prevLocation = history2.location;
- if (!forceNextPop && locationsAreEqual$$1(prevLocation, location2))
- return;
- if (ignorePath === createPath(location2))
- return;
- ignorePath = null;
- handlePop(location2);
+ case "caseDetails": {
+ return /* @__PURE__ */ h(CaseDetails, { account: location2.values.cid });
}
- }
- function handlePop(location2) {
- if (forceNextPop) {
- forceNextPop = false;
- setState();
- } else {
- var action = "POP";
- transitionManager.confirmTransitionTo(location2, action, getUserConfirmation, function(ok) {
- if (ok) {
- setState({
- action,
- location: location2
- });
- } else {
- revertPop(location2);
+ case "caseUpdate": {
+ return /* @__PURE__ */ h(
+ CaseUpdate,
+ {
+ account: location2.values.cid,
+ type: location2.values.type
}
- });
- }
- }
- function revertPop(fromLocation) {
- var toLocation = history2.location;
- var toIndex = allPaths.lastIndexOf(createPath(toLocation));
- if (toIndex === -1)
- toIndex = 0;
- var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));
- if (fromIndex === -1)
- fromIndex = 0;
- var delta = toIndex - fromIndex;
- if (delta) {
- forceNextPop = true;
- go(delta);
- }
- }
- var path = getHashPath();
- var encodedPath = encodePath2(path);
- if (path !== encodedPath)
- replaceHashPath(encodedPath);
- var initialLocation = getDOMLocation();
- var allPaths = [createPath(initialLocation)];
- function createHref(location2) {
- var baseTag = document.querySelector("base");
- var href = "";
- if (baseTag && baseTag.getAttribute("href")) {
- href = stripHash(window.location.href);
- }
- return href + "#" + encodePath2(basename + createPath(location2));
- }
- function push(path2, state) {
- false ? tiny_warning_esm_default(state === void 0, "Hash history cannot push state; it is ignored") : void 0;
- var action = "PUSH";
- var location2 = createLocation(path2, void 0, void 0, history2.location);
- transitionManager.confirmTransitionTo(location2, action, getUserConfirmation, function(ok) {
- if (!ok)
- return;
- var path3 = createPath(location2);
- var encodedPath2 = encodePath2(basename + path3);
- var hashChanged = getHashPath() !== encodedPath2;
- if (hashChanged) {
- ignorePath = path3;
- pushHashPath(encodedPath2);
- var prevIndex = allPaths.lastIndexOf(createPath(history2.location));
- var nextPaths = allPaths.slice(0, prevIndex + 1);
- nextPaths.push(path3);
- allPaths = nextPaths;
- setState({
- action,
- location: location2
- });
- } else {
- false ? tiny_warning_esm_default(false, "Hash history cannot PUSH the same path; a new entry will not be added to the history stack") : void 0;
- setState();
- }
- });
- }
- function replace(path2, state) {
- false ? tiny_warning_esm_default(state === void 0, "Hash history cannot replace state; it is ignored") : void 0;
- var action = "REPLACE";
- var location2 = createLocation(path2, void 0, void 0, history2.location);
- transitionManager.confirmTransitionTo(location2, action, getUserConfirmation, function(ok) {
- if (!ok)
- return;
- var path3 = createPath(location2);
- var encodedPath2 = encodePath2(basename + path3);
- var hashChanged = getHashPath() !== encodedPath2;
- if (hashChanged) {
- ignorePath = path3;
- replaceHashPath(encodedPath2);
- }
- var prevIndex = allPaths.indexOf(createPath(history2.location));
- if (prevIndex !== -1)
- allPaths[prevIndex] = path3;
- setState({
- action,
- location: location2
- });
- });
- }
- function go(n2) {
- false ? tiny_warning_esm_default(canGoWithoutReload, "Hash history go(n) causes a full page reload in this browser") : void 0;
- globalHistory.go(n2);
- }
- function goBack() {
- go(-1);
- }
- function goForward() {
- go(1);
- }
- var listenerCount = 0;
- function checkDOMListeners(delta) {
- listenerCount += delta;
- if (listenerCount === 1 && delta === 1) {
- window.addEventListener(HashChangeEvent$1, handleHashChange);
- } else if (listenerCount === 0) {
- window.removeEventListener(HashChangeEvent$1, handleHashChange);
- }
- }
- var isBlocked = false;
- function block(prompt) {
- if (prompt === void 0) {
- prompt = false;
+ );
}
- var unblock = transitionManager.setPrompt(prompt);
- if (!isBlocked) {
- checkDOMListeners(1);
- isBlocked = true;
+ case "caseNew": {
+ return /* @__PURE__ */ h(SelectForm, { account: location2.values.cid });
}
- return function() {
- if (isBlocked) {
- isBlocked = false;
- checkDOMListeners(-1);
- }
- return unblock();
- };
- }
- function listen(listener) {
- var unlisten = transitionManager.appendListener(listener);
- checkDOMListeners(1);
- return function() {
- checkDOMListeners(-1);
- unlisten();
- };
- }
- var history2 = {
- length: globalHistory.length,
- action: "POP",
- location: initialLocation,
- createHref,
- push,
- replace,
- go,
- goBack,
- goForward,
- block,
- listen
- };
- return history2;
-}
-
-// src/route.ts
-init_preact_module();
-init_hooks_module();
-var nullChangeListener = { onChange: () => () => {
-} };
-var Context6 = B(nullChangeListener);
-var usePathChangeContext = () => q2(Context6);
-function HashPathProvider({ children }) {
- const history2 = createHashHistory();
- return h(Context6.Provider, { value: { onChange: history2.listen }, children }, children);
-}
-function replaceAll(pattern, vars, values) {
- let result = pattern;
- for (const v3 in vars) {
- result = result.replace(vars[v3], !values[v3] ? "" : values[v3]);
- }
- return result;
-}
-function pageDefinition(pattern) {
- const patternParams = pattern.match(/(:[\w?]*)/g);
- if (!patternParams)
- throw Error(
- `page definition pattern ${pattern} doesn't have any parameter`
- );
- const vars = patternParams.reduce((prev, cur) => {
- const pName = cur.match(/(\w+)/g);
- if (!pName || !pName[0])
- return prev;
- const name = pName[0];
- return { ...prev, [name]: cur };
- }, {});
- const f3 = (values) => replaceAll(pattern, vars, values);
- f3.pattern = pattern;
- return f3;
-}
-function Router({
- pageList: pageList2,
- onNotFound
-}) {
- const current = useCurrentLocation(pageList2);
- if (current !== void 0) {
- return h(current.page.view, current.values);
- }
- return onNotFound();
-}
-function useCurrentLocation(pageList2) {
- const [currentLocation, setCurrentLocation] = p3(null);
- const path = usePathChangeContext();
- h2(() => {
- return path.onChange(() => {
- const result = doSync(window.location.hash, new URLSearchParams(window.location.search), pageList2);
- setCurrentLocation(result);
- });
- }, []);
- if (currentLocation === null) {
- return doSync(window.location.hash, new URLSearchParams(window.location.search), pageList2);
- }
- return currentLocation;
-}
-function useChangeLocation() {
- const [location2, setLocation] = p3(window.location.hash);
- const path = usePathChangeContext();
- h2(() => {
- return path.onChange(() => {
- setLocation(window.location.hash);
- });
- }, []);
- return location2;
-}
-function doSync(path, params, pageList2) {
- for (let idx = 0; idx < pageList2.length; idx++) {
- const page = pageList2[idx];
- if (typeof page.url === "string") {
- if (page.url === path) {
- const values = {};
- params.forEach((v3, k6) => {
- values[k6] = v3;
- });
- return { page, values, path };
- }
- } else {
- const values = doestUrlMatchToRoute(path, page.url.pattern);
- if (values !== void 0) {
- params.forEach((v3, k6) => {
- values[k6] = v3;
- });
- return { page, values, path };
- }
- }
- }
- return void 0;
-}
-function doestUrlMatchToRoute(url, route) {
- const paramsPattern = /(?:\?([^#]*))?$/;
- const params = url.match(paramsPattern);
- const urlWithoutParams = url.replace(paramsPattern, "");
- const result = {};
- if (params && params[1]) {
- const paramList = params[1].split("&");
- for (let i5 = 0; i5 < paramList.length; i5++) {
- const idx = paramList[i5].indexOf("=");
- const name = paramList[i5].substring(0, idx);
- const value = paramList[i5].substring(idx + 1);
- result[decodeURIComponent(name)] = decodeURIComponent(value);
- }
- }
- const urlSeg = urlWithoutParams.split("/");
- const routeSeg = route.split("/");
- let max = Math.max(urlSeg.length, routeSeg.length);
- for (let i5 = 0; i5 < max; i5++) {
- if (routeSeg[i5] && routeSeg[i5].charAt(0) === ":") {
- const param = routeSeg[i5].replace(/(^:|[+*?]+$)/g, "");
- const flags = (routeSeg[i5].match(/[+*?]+$/) || EMPTY)[0] || "";
- const plus = ~flags.indexOf("+");
- const star = ~flags.indexOf("*");
- const val = urlSeg[i5] || "";
- if (!val && !star && (flags.indexOf("?") < 0 || plus)) {
- return void 0;
- }
- result[param] = decodeURIComponent(val);
- if (plus || star) {
- result[param] = urlSeg.slice(i5).map(decodeURIComponent).join("/");
- break;
- }
- } else if (routeSeg[i5] !== urlSeg[i5]) {
- return void 0;
+ case "cases": {
+ return /* @__PURE__ */ h(Cases, null);
}
+ default:
+ assertUnreachable(location2);
}
- return result;
}
-var EMPTY = {};
-
-// src/pages.ts
-var cases = {
- url: "#/cases",
- view: Cases,
- name: "Cases",
- Icon: HomeIcon
-};
-var officer = {
- url: "#/officer",
- view: Officer,
- name: "Officer",
- Icon: PeopleIcon
-};
-var account = {
- url: pageDefinition("#/account/:account"),
- view: CaseDetails,
- name: "Account"
- // icon: () => undefined,
-};
-var newFormEntry = {
- url: pageDefinition("#/account/:account/new/:type?"),
- view: NewFormEntry,
- name: "New Form"
- // icon: () => undefined,
-};
-var Pages = {
- cases,
- officer,
- account,
- newFormEntry
-};
-// src/Dashboard.tsx
-var GIT_HASH = true ? "de32e0217c54f26a54813f56c378155bcacf4416" : void 0;
-var VERSION = true ? "0.1.0" : void 0;
-var versionText = VERSION ? GIT_HASH ? `v${VERSION} (${GIT_HASH.substring(0, 8)})` : VERSION : "";
+// src/ExchangeAmlFrame.tsx
+var GIT_HASH = true ? "6fd830ad57fe12ce6acac453f523dcf00f71a5bb" : void 0;
+var VERSION = true ? "0.10.7" : void 0;
function ExchangeAmlFrame({
- children
+ children,
+ officer
}) {
const { i18n: i18n2 } = useTranslationContext();
- const [error2, resetError] = P2();
+ const [error2] = P2();
h2(() => {
if (error2) {
if (error2 instanceof Error) {
notifyException(i18n2.str`Internal error, please report.`, error2);
} else {
- notifyError(i18n2.str`Internal error, please report.`, String(error2));
+ notifyError(
+ i18n2.str`Internal error, please report.`,
+ String(error2)
+ );
}
console.log(error2);
}
}, [error2]);
- const officer2 = useOfficer();
- const [settings, updateSettings] = useSettings();
- return /* @__PURE__ */ h("div", { class: "min-h-full flex flex-col m-0 bg-slate-200", style: "min-height: 100vh;" }, /* @__PURE__ */ h("div", { class: "bg-indigo-600 pb-32" }, /* @__PURE__ */ h(
- Header,
+ const [preferences, updatePreferences] = usePreferences();
+ const settings = useUiSettingsContext();
+ return /* @__PURE__ */ h(
+ "div",
{
- title: "Exchange",
- iconLinkURL: uiSettings.backendBaseURL ?? "#",
- onLogout: officer2.state !== "ready" ? void 0 : () => {
- officer2.lock();
- },
- sites: [],
- supportedLangs: ["en", "es", "de"]
+ class: "min-h-full flex flex-col m-0 bg-slate-200",
+ style: "min-height: 100vh;"
},
- /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("div", { class: "text-xs font-semibold leading-6 text-gray-400" }, /* @__PURE__ */ h(i18n2.Translate, null, "Preferences")), /* @__PURE__ */ h("ul", { role: "list", class: "space-y-1" }, getAllBooleanSettings().map((set) => {
- const isOn = !!settings[set];
- return /* @__PURE__ */ h("li", { class: "mt-2 pl-2" }, /* @__PURE__ */ h("div", { class: "flex items-center justify-between" }, /* @__PURE__ */ h("span", { class: "flex flex-grow flex-col" }, /* @__PURE__ */ h("span", { class: "text-sm text-black font-medium leading-6 ", id: "availability-label" }, getLabelForSetting(set, i18n2))), /* @__PURE__ */ h(
- "button",
- {
- type: "button",
- "data-enabled": isOn,
- class: "bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2",
- role: "switch",
- "aria-checked": "false",
- "aria-labelledby": "availability-label",
- "aria-describedby": "availability-description",
- onClick: () => {
- updateSettings(set, !isOn);
- }
+ /* @__PURE__ */ h("div", { class: "bg-indigo-600 pb-32" }, /* @__PURE__ */ h(
+ Header,
+ {
+ title: "Exchange",
+ iconLinkURL: settings.backendBaseURL ?? "#",
+ onLogout: officer?.state !== "ready" ? void 0 : () => {
+ officer.lock();
},
- /* @__PURE__ */ h("span", { "aria-hidden": "true", "data-enabled": isOn, class: "translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out" })
- )));
- })))
- )), /* @__PURE__ */ h("div", { class: "fixed z-20 w-full" }, /* @__PURE__ */ h("div", { class: "mx-auto w-4/5" }, /* @__PURE__ */ h(ToastBanner, null))), /* @__PURE__ */ h("div", { class: "-mt-32 flex grow " }, officer2.state !== "ready" ? void 0 : /* @__PURE__ */ h(Navigation, null), /* @__PURE__ */ h("div", { class: "flex mx-auto my-4" }, /* @__PURE__ */ h("main", { class: "rounded-lg bg-white px-5 py-6 shadow" }, children))), /* @__PURE__ */ h(
- Footer,
- {
- testingUrlKey: "exchange-base-url",
- GIT_HASH,
- VERSION
- }
- ));
+ sites: [],
+ supportedLangs: ["en", "es", "de"]
+ },
+ /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("div", { class: "text-xs font-semibold leading-6 text-gray-400" }, /* @__PURE__ */ h(i18n2.Translate, null, "Preferences")), /* @__PURE__ */ h("ul", { role: "list", class: "space-y-1" }, getAllBooleanPreferences().map((set) => {
+ const isOn = !!preferences[set];
+ return /* @__PURE__ */ h("li", { key: set, class: "mt-2 pl-2" }, /* @__PURE__ */ h("div", { class: "flex items-center justify-between" }, /* @__PURE__ */ h("span", { class: "flex flex-grow flex-col" }, /* @__PURE__ */ h(
+ "span",
+ {
+ class: "text-sm text-black font-medium leading-6 ",
+ id: "availability-label"
+ },
+ getLabelForPreferences(set, i18n2)
+ )), /* @__PURE__ */ h(
+ "button",
+ {
+ type: "button",
+ "data-enabled": isOn,
+ class: "bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2",
+ role: "switch",
+ "aria-checked": "false",
+ "aria-labelledby": "availability-label",
+ "aria-describedby": "availability-description",
+ onClick: () => {
+ updatePreferences(set, !isOn);
+ }
+ },
+ /* @__PURE__ */ h(
+ "span",
+ {
+ "aria-hidden": "true",
+ "data-enabled": isOn,
+ class: "translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
+ }
+ )
+ )));
+ })))
+ )),
+ /* @__PURE__ */ h("div", { class: "fixed z-20 w-full" }, /* @__PURE__ */ h("div", { class: "mx-auto w-4/5" }, /* @__PURE__ */ h(ToastBanner, null))),
+ /* @__PURE__ */ h("div", { class: "-mt-32 flex grow " }, officer?.state !== "ready" ? void 0 : /* @__PURE__ */ h(Navigation, null), /* @__PURE__ */ h("div", { class: "flex mx-auto my-4" }, /* @__PURE__ */ h("main", { class: "rounded-lg bg-white px-5 py-6 shadow" }, children))),
+ /* @__PURE__ */ h(
+ Footer,
+ {
+ testingUrlKey: "exchange-base-url",
+ GIT_HASH,
+ VERSION
+ }
+ )
+ );
}
function Navigation() {
const { i18n: i18n2 } = useTranslationContext();
- const pageList2 = [
- Pages.officer,
- Pages.cases
+ const pageList = [
+ { route: privatePages.account, Icon: HomeIcon, label: i18n2.str`Account` },
+ { route: privatePages.cases, Icon: HomeIcon, label: i18n2.str`Cases` }
];
- const location2 = useChangeLocation();
- return /* @__PURE__ */ h("div", { class: "hidden sm:block min-w-min bg-indigo-600 divide-y rounded-r-lg divide-cyan-800 overflow-y-auto overflow-x-clip" }, /* @__PURE__ */ h("nav", { class: "flex flex-1 flex-col mx-4 mt-4 mb-2" }, /* @__PURE__ */ h("ul", { role: "list", class: "flex flex-1 flex-col gap-y-7" }, /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("ul", { role: "list", class: "-mx-2 space-y-1" }, pageList2.map((p4) => {
- return /* @__PURE__ */ h("li", null, /* @__PURE__ */ h(
+ const { path } = useNavigationContext();
+ return /* @__PURE__ */ h("div", { class: "hidden sm:block min-w-min bg-indigo-600 divide-y rounded-r-lg divide-cyan-800 overflow-y-auto overflow-x-clip" }, /* @__PURE__ */ h("nav", { class: "flex flex-1 flex-col mx-4 mt-4 mb-2" }, /* @__PURE__ */ h("ul", { role: "list", class: "flex flex-1 flex-col gap-y-7" }, /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("ul", { role: "list", class: "-mx-2 space-y-1" }, pageList.map((p4, idx) => {
+ return /* @__PURE__ */ h("li", { key: idx }, /* @__PURE__ */ h(
"a",
{
- href: p4.url,
- "data-selected": location2 == p4.url,
+ href: p4.route.url({}),
+ "data-selected": path == p4.route.url({}),
class: "data-[selected=true]:bg-indigo-700 pr-4 data-[selected=true]:text-white text-indigo-200 hover:text-white hover:bg-indigo-700 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold"
},
p4.Icon && /* @__PURE__ */ h(p4.Icon, null),
- /* @__PURE__ */ h("span", { class: "hidden md:inline" }, p4.name)
+ /* @__PURE__ */ h("span", { class: "hidden md:inline" }, p4.label)
));
}))))));
}
+// src/i18n/strings.ts
+var strings = {};
+strings["de"] = {
+ domain: "messages",
+ locale_data: {
+ messages: {
+ "": {
+ domain: "messages",
+ plural_forms: "nplurals=2; plural=(n != 1);",
+ lang: "de"
+ },
+ Logout: [""],
+ "Skip to main content": [""],
+ "This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.": [""],
+ "Taler logo": [""],
+ "Missing username": [""],
+ "Missing password": [""],
+ "Please login!": [""],
+ "Username:": [""],
+ "Password:": [""],
+ Login: [""],
+ Register: [""],
+ "Missing IBAN": [""],
+ "IBAN should have just uppercased letters and numbers": [""],
+ "Missing subject": [""],
+ "Missing amount": [""],
+ "Amount is not valid": [""],
+ "Should be greater than 0": [""],
+ "Receiver IBAN:": [""],
+ "Transfer subject:": [""],
+ "Amount:": [""],
+ "Field(s) missing.": [""],
+ "Want to try the raw payto://-format?": [""],
+ "Missing payto address": [""],
+ "Payto does not follow the pattern": [""],
+ "Transfer money to account identified by payto:// URI:": [""],
+ "payto URI:": [""],
+ "payto address": [""],
+ Send: [""],
+ "Use wire-transfer form?": [""],
+ "No credentials found.": [""],
+ "Could not create the wire transfer": [""],
+ "Transfer creation gave response error": [""],
+ "Wire transfer created!": [""],
+ "Amount to withdraw:": [""],
+ Withdraw: [""],
+ "No credentials given.": [""],
+ "Could not create withdrawal operation": [""],
+ "Withdrawal creation gave response error": [""],
+ "Obtain digital cash": [""],
+ "Transfer to bank account": [""],
+ Date: [""],
+ Amount: [""],
+ Counterpart: [""],
+ Subject: [""],
+ "Transfer to Taler Wallet": [""],
+ "Use this QR code to withdraw to your mobile wallet:": [""],
+ "Click %1$s to open your Taler wallet!": [""],
+ "Confirm Withdrawal": [""],
+ "Authorize withdrawal by solving challenge": [""],
+ "What is": [""],
+ "Answer is wrong.": [""],
+ Confirm: [""],
+ Cancel: [""],
+ "A this point, a %1$s bank would ask for an additional authentication proof (PIN/TAN, one time password, ..), instead of a simple calculation.": [""],
+ "No withdrawal ID found.": [""],
+ "Could not confirm the withdrawal": [""],
+ "Withdrawal confirmation gave response error": [""],
+ "Withdrawal confirmed!": [""],
+ "Could not abort the withdrawal.": [""],
+ "Withdrawal abortion failed.": [""],
+ "Withdrawal aborted!": [""],
+ Abort: [""],
+ "withdrawal (%1$s) was never (correctly) created at the bank...": [""],
+ "Waiting the bank to create the operation...": [""],
+ "This withdrawal was aborted!": [""],
+ "Welcome to %1$s!": [""],
+ "Username or account label '%1$s' not found. Won't login.": [""],
+ "Wrong credentials given.": [""],
+ "Account information could not be retrieved.": [""],
+ "Welcome, %1$s !": [""],
+ "Bank account balance": [""],
+ Payments: [""],
+ "Latest transactions:": [""],
+ "List of public accounts was not found.": [""],
+ "List of public accounts could not be retrieved.": [""],
+ "History of public accounts": [""],
+ "Currently, the bank is not accepting new registrations!": [""],
+ "Use only letter and numbers starting with a lower case letter": [""],
+ "Password don't match": [""],
+ "Please register!": [""],
+ "Repeat Password:": [""],
+ "Registration failed, please report": [""],
+ "That username is already taken": [""],
+ "New registration gave response error": [""],
+ "Bank menu": [""],
+ "Select option1": [""],
+ "Select option2": [""],
+ days: [""],
+ hours: [""],
+ minutes: [""],
+ seconds: [""]
+ }
+ }
+};
+strings["en"] = {
+ domain: "messages",
+ locale_data: {
+ messages: {
+ "": {
+ domain: "messages",
+ plural_forms: "nplurals=2; plural=(n != 1);",
+ lang: "en"
+ },
+ Logout: [""],
+ "Skip to main content": [""],
+ "This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.": [""],
+ "Taler logo": [""],
+ "Missing username": [""],
+ "Missing password": [""],
+ "Please login!": [""],
+ "Username:": [""],
+ "Password:": [""],
+ Login: [""],
+ Register: [""],
+ "Missing IBAN": [""],
+ "IBAN should have just uppercased letters and numbers": [""],
+ "Missing subject": [""],
+ "Missing amount": [""],
+ "Amount is not valid": [""],
+ "Should be greater than 0": [""],
+ "Receiver IBAN:": [""],
+ "Transfer subject:": [""],
+ "Amount:": [""],
+ "Field(s) missing.": [""],
+ "Want to try the raw payto://-format?": [""],
+ "Missing payto address": [""],
+ "Payto does not follow the pattern": [""],
+ "Transfer money to account identified by payto:// URI:": [""],
+ "payto URI:": [""],
+ "payto address": [""],
+ Send: [""],
+ "Use wire-transfer form?": [""],
+ "No credentials found.": [""],
+ "Could not create the wire transfer": [""],
+ "Transfer creation gave response error": [""],
+ "Wire transfer created!": [""],
+ "Amount to withdraw:": ["Amount to withdraw"],
+ Withdraw: ["Confirm withdrawal"],
+ "No credentials given.": [""],
+ "Could not create withdrawal operation": [""],
+ "Withdrawal creation gave response error": [""],
+ "Obtain digital cash": [""],
+ "Transfer to bank account": [""],
+ Date: [""],
+ Amount: [""],
+ Counterpart: [""],
+ Subject: [""],
+ "Transfer to Taler Wallet": ["Charge Taler wallet"],
+ "Use this QR code to withdraw to your mobile wallet:": [""],
+ "Click %1$s to open your Taler wallet!": [""],
+ "Confirm Withdrawal": ["Confirm withdrawal"],
+ "Authorize withdrawal by solving challenge": [""],
+ "What is": [""],
+ "Answer is wrong.": [""],
+ Confirm: [""],
+ Cancel: [""],
+ "A this point, a %1$s bank would ask for an additional authentication proof (PIN/TAN, one time password, ..), instead of a simple calculation.": [""],
+ "No withdrawal ID found.": [""],
+ "Could not confirm the withdrawal": ["Confirm withdrawal"],
+ "Withdrawal confirmation gave response error": [""],
+ "Withdrawal confirmed!": [""],
+ "Could not abort the withdrawal.": ["Close Taler withdrawal"],
+ "Withdrawal abortion failed.": [""],
+ "Withdrawal aborted!": [""],
+ Abort: [""],
+ "withdrawal (%1$s) was never (correctly) created at the bank...": [""],
+ "Waiting the bank to create the operation...": [""],
+ "This withdrawal was aborted!": [""],
+ "Welcome to %1$s!": [""],
+ "Username or account label '%1$s' not found. Won't login.": [""],
+ "Wrong credentials given.": [""],
+ "Account information could not be retrieved.": [""],
+ "Welcome, %1$s !": [""],
+ "Bank account balance": [""],
+ Payments: [""],
+ "Latest transactions:": [""],
+ "List of public accounts was not found.": [""],
+ "List of public accounts could not be retrieved.": [""],
+ "History of public accounts": [""],
+ "Currently, the bank is not accepting new registrations!": [""],
+ "Use only letter and numbers starting with a lower case letter": [""],
+ "Password don't match": [""],
+ "Please register!": [""],
+ "Repeat Password:": [""],
+ "Registration failed, please report": [""],
+ "That username is already taken": [""],
+ "New registration gave response error": [""],
+ "Bank menu": [""],
+ "Select option1": [""],
+ "Select option2": [""],
+ days: ["days"],
+ hours: ["hours"],
+ minutes: ["minutes"],
+ seconds: ["seconds"]
+ }
+ }
+};
+strings["es"] = {
+ domain: "messages",
+ locale_data: {
+ messages: {
+ "": {
+ domain: "messages",
+ plural_forms: "nplurals=2; plural=n != 1;",
+ lang: "es"
+ },
+ Logout: ["Cierre de sesi\xF3n"],
+ "Skip to main content": ["Saltar el men\xFA de navegaci\xF3n"],
+ "This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.": [
+ "Esta parte de la demostraci\xF3n muestra c\xF3mo funciona un banco que soporta Taler directamente. Adem\xE1s de usar tu propia cuenta de banco, tambi\xE9n podr\xE1s ver el historial de transacciones de algunas %1$s."
+ ],
+ "Taler logo": ["Logo Taler"],
+ "Missing username": ["Falta nombre de usuario"],
+ "Missing password": ["Falta contrase\xF1a"],
+ "Please login!": ["Por favor inicia sesi\xF3n!"],
+ "Username:": ["Nombre de usuario:"],
+ "Password:": ["Password:"],
+ Login: ["Iniciar sesi\xF3n"],
+ Register: ["Registrarse"],
+ "Missing IBAN": ["Falta IBAN"],
+ "IBAN should have just uppercased letters and numbers": [
+ "IBAN deber\xEDa tener letras may\xFAsculas y n\xFAmeros"
+ ],
+ "Missing subject": ["Falta asunto"],
+ "Missing amount": ["Falta monto"],
+ "Amount is not valid": ["Monto no v\xE1lido"],
+ "Should be greater than 0": ["Deber\xEDa ser mas grande que 0"],
+ "Receiver IBAN:": ["IBAN receptor:"],
+ "Transfer subject:": ["Asunto de transferencia:"],
+ "Amount:": ["Monto:"],
+ "Field(s) missing.": ["Faltan campo(s)."],
+ "Want to try the raw payto://-format?": [
+ "Quieres probar el formato payto:// ?"
+ ],
+ "Missing payto address": ["Falta direccion payto"],
+ "Payto does not follow the pattern": ["Payto no sigue el patr\xF3n"],
+ "Transfer money to account identified by payto:// URI:": [
+ "Transferir dinero a la cuenta identificada por la URI payto://:"
+ ],
+ "payto URI:": ["payto URI:"],
+ "payto address": ["direccion payto"],
+ Send: ["Env\xEDar"],
+ "Use wire-transfer form?": [
+ "Usar el formulario de transferencia bancaria?"
+ ],
+ "No credentials found.": ["Se dieron las credenciales incorrectas."],
+ "Could not create the wire transfer": [
+ "No se pudo create la transferencia bancaria"
+ ],
+ "Transfer creation gave response error": [
+ "La creaci\xF3n de la transferencia di\xF3 una respuesta erronea"
+ ],
+ "Wire transfer created!": ["Transferencia bancaria creada!"],
+ "Amount to withdraw:": ["Monto a retirar:"],
+ Withdraw: ["Retirar"],
+ "No credentials given.": ["Se dieron las credenciales incorrectas."],
+ "Could not create withdrawal operation": [
+ "No se pude create la operaci\xF3n de retiro"
+ ],
+ "Withdrawal creation gave response error": [
+ "La creaci\xF3n de retiro di\xF3 una respuesta err\xF3nea"
+ ],
+ "Obtain digital cash": ["Obtener dinero digital"],
+ "Transfer to bank account": ["Transferir a una cuenta bancaria"],
+ Date: ["Fecha"],
+ Amount: ["Monto"],
+ Counterpart: ["Contraparte"],
+ Subject: ["Asunto"],
+ "Transfer to Taler Wallet": ["Transferir a una cartera Taler"],
+ "Use this QR code to withdraw to your mobile wallet:": [
+ "Usar el c\xF3digo QR para retirar a tu cartera m\xF3vil:"
+ ],
+ "Click %1$s to open your Taler wallet!": [
+ "Click %1$s para abrir una cartera Taler!"
+ ],
+ "Confirm Withdrawal": ["Confirmar retirada"],
+ "Authorize withdrawal by solving challenge": [
+ "Autorizar retiro resolviendo una pregunta"
+ ],
+ "What is": ["Cuanto es"],
+ "Answer is wrong.": ["La respuesta es incorrecta."],
+ Confirm: ["Confirmar"],
+ Cancel: ["Cancelar"],
+ "A this point, a %1$s bank would ask for an additional authentication proof (PIN/TAN, one time password, ..), instead of a simple calculation.": [
+ "En este punto, un banco %1$s preguntar\xEDa por una prueba adicional de autenticaci\xF3n (PIN/TAN, password de un solo uso, ....), en vez de un simple c\xE1lculo."
+ ],
+ "No withdrawal ID found.": ["No ID de retiro encontrado."],
+ "Could not confirm the withdrawal": ["No se pudo confirmar la retirada"],
+ "Withdrawal confirmation gave response error": [
+ "La confirmaci\xF3n de retiro di\xF3 una respuesta err\xF3nea"
+ ],
+ "Withdrawal confirmed!": ["El retiro fue confirmado!"],
+ "Could not abort the withdrawal.": ["No se pudo cancelar el retiro."],
+ "Withdrawal abortion failed.": ["La cancelaci\xF3n del retiro fall\xF3."],
+ "Withdrawal aborted!": ["Este retiro fue cancelado!"],
+ Abort: ["Cancelar"],
+ "withdrawal (%1$s) was never (correctly) created at the bank...": [
+ "retiro (%1$s) nunca fue (correctamente) generado en el banco..."
+ ],
+ "Waiting the bank to create the operation...": [
+ "Esperando que el banco genere la operaci\xF3n...."
+ ],
+ "This withdrawal was aborted!": ["Este retiro fue cancelado!"],
+ "Welcome to %1$s!": ["Bienvenido a %1$s!"],
+ "Username or account label '%1$s' not found. Won't login.": [
+ "Nombre de usuario o etiqueta de cuenta '%1$s' no encontrada. No se iniciar\xE1 sesi\xF3n."
+ ],
+ "Wrong credentials given.": ["Se dieron las credenciales incorrectas."],
+ "Account information could not be retrieved.": [
+ "La informaci\xF3n de la cuenta no pudo ser accedida."
+ ],
+ "Welcome, %1$s !": ["Bienvenido/a, %1$s!"],
+ "Bank account balance": ["Balance de cuenta bancaria"],
+ Payments: ["Pagos"],
+ "Latest transactions:": ["\xDAltimas transacciones:"],
+ "List of public accounts was not found.": [
+ "La lista de cuentas p\xFAblicas no fue encontrada."
+ ],
+ "List of public accounts could not be retrieved.": [
+ "La lista de cuentas p\xFAblicas no pudo ser accedida."
+ ],
+ "History of public accounts": ["Historial de cuentas p\xFAblicas"],
+ "Currently, the bank is not accepting new registrations!": [
+ "Actualmente, el banco no est\xE1 aceptado nuevos registros!"
+ ],
+ "Use only letter and numbers starting with a lower case letter": [
+ "Solo use letras y n\xFAmeros comenzando con una letra min\xFAscula"
+ ],
+ "Password don't match": ["La contrase\xF1a no coincide"],
+ "Please register!": ["Por favor, registrese!"],
+ "Repeat Password:": ["Repita la contrase\xF1a:"],
+ "Registration failed, please report": [
+ "El registro fall\xF3, por favor reportelo"
+ ],
+ "That username is already taken": [
+ "El nombre del usuario ya est\xE1 tomado"
+ ],
+ "New registration gave response error": [
+ "Nuevo registro di\xF3 una respuesta err\xF3nea"
+ ],
+ "Bank menu": ["Menu del banco"],
+ "Select option1": ["Seleccione opci\xF3n 1"],
+ "Select option2": ["Seleccione opci\xF3n 2"],
+ days: ["d\xEDas"],
+ hours: ["horas"],
+ minutes: ["minutos"],
+ seconds: ["segundos"]
+ }
+ }
+};
+strings["it"] = {
+ domain: "messages",
+ locale_data: {
+ messages: {
+ "": {
+ domain: "messages",
+ plural_forms: "nplurals=2; plural=(n != 1);",
+ lang: "it"
+ },
+ Logout: [""],
+ "Skip to main content": [""],
+ "This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.": [""],
+ "Taler logo": [""],
+ "Missing username": [""],
+ "Missing password": [""],
+ "Please login!": ["Accedi!"],
+ "Username:": [""],
+ "Password:": [""],
+ Login: ["Accedi"],
+ Register: ["Registrati"],
+ "Missing IBAN": [""],
+ "IBAN should have just uppercased letters and numbers": [""],
+ "Missing subject": [""],
+ "Missing amount": [""],
+ "Amount is not valid": [""],
+ "Should be greater than 0": [""],
+ "Receiver IBAN:": [""],
+ "Transfer subject:": [""],
+ "Amount:": ["Somma"],
+ "Field(s) missing.": [""],
+ "Want to try the raw payto://-format?": [
+ "Prova il trasferimento tramite il formato Payto!"
+ ],
+ "Missing payto address": ["indirizzo Payto"],
+ "Payto does not follow the pattern": [""],
+ "Transfer money to account identified by payto:// URI:": [
+ "Trasferisci fondi a un altro conto di questa banca:"
+ ],
+ "payto URI:": [""],
+ "payto address": ["indirizzo Payto"],
+ Send: [""],
+ "Use wire-transfer form?": ["Chiudi il bonifico"],
+ "No credentials found.": ["Credenziali invalide."],
+ "Could not create the wire transfer": [""],
+ "Transfer creation gave response error": [""],
+ "Wire transfer created!": ["Bonifico"],
+ "Amount to withdraw:": ["Somma da ritirare"],
+ Withdraw: ["Conferma il ritiro"],
+ "No credentials given.": ["Credenziali invalide."],
+ "Could not create withdrawal operation": [""],
+ "Withdrawal creation gave response error": [""],
+ "Obtain digital cash": [""],
+ "Transfer to bank account": [
+ "Trasferisci fondi a un altro conto di questa banca:"
+ ],
+ Date: [""],
+ Amount: ["Somma"],
+ Counterpart: ["Controparte"],
+ Subject: ["Causale"],
+ "Transfer to Taler Wallet": ["Ritira contante nel portafoglio Taler"],
+ "Use this QR code to withdraw to your mobile wallet:": [
+ "Usa questo codice QR per ritirare contante nel tuo wallet:"
+ ],
+ "Click %1$s to open your Taler wallet!": [""],
+ "Confirm Withdrawal": ["Conferma il ritiro"],
+ "Authorize withdrawal by solving challenge": [""],
+ "What is": [""],
+ "Answer is wrong.": [""],
+ Confirm: ["Conferma"],
+ Cancel: [""],
+ "A this point, a %1$s bank would ask for an additional authentication proof (PIN/TAN, one time password, ..), instead of a simple calculation.": [""],
+ "No withdrawal ID found.": [""],
+ "Could not confirm the withdrawal": ["Conferma il ritiro"],
+ "Withdrawal confirmation gave response error": [""],
+ "Withdrawal confirmed!": ["Questo ritiro \xE8 stato annullato!"],
+ "Could not abort the withdrawal.": ["Chiudi il ritiro Taler"],
+ "Withdrawal abortion failed.": ["Questo ritiro \xE8 stato annullato!"],
+ "Withdrawal aborted!": ["Questo ritiro \xE8 stato annullato!"],
+ Abort: ["Annulla"],
+ "withdrawal (%1$s) was never (correctly) created at the bank...": [""],
+ "Waiting the bank to create the operation...": [
+ "La banca sta creando l'operazione..."
+ ],
+ "This withdrawal was aborted!": ["Questo ritiro \xE8 stato annullato!"],
+ "Welcome to %1$s!": [""],
+ "Username or account label '%1$s' not found. Won't login.": [
+ "L'utente '%1$s' non esiste. Login impossibile"
+ ],
+ "Wrong credentials given.": ["Credenziali invalide."],
+ "Account information could not be retrieved.": [
+ "Impossibile ricevere le informazioni relative al conto."
+ ],
+ "Welcome, %1$s !": [""],
+ "Bank account balance": ["Bilancio:"],
+ Payments: [""],
+ "Latest transactions:": ["Ultime transazioni:"],
+ "List of public accounts was not found.": [
+ "Lista conti pubblici non trovata."
+ ],
+ "List of public accounts could not be retrieved.": [
+ "Lista conti pubblici non pervenuta."
+ ],
+ "History of public accounts": ["Storico dei conti pubblici"],
+ "Currently, the bank is not accepting new registrations!": [""],
+ "Use only letter and numbers starting with a lower case letter": [""],
+ "Password don't match": [""],
+ "Please register!": ["Accedi!"],
+ "Repeat Password:": [""],
+ "Registration failed, please report": ["Registrazione"],
+ "That username is already taken": [""],
+ "New registration gave response error": [""],
+ "Bank menu": [""],
+ "Select option1": [""],
+ "Select option2": [""],
+ days: [""],
+ hours: [""],
+ minutes: [""],
+ seconds: [""]
+ }
+ }
+};
+
// src/App.tsx
-var pageList = Object.values(Pages);
+var WITH_LOCAL_STORAGE_CACHE = false;
function App() {
- const baseUrl = getInitialBackendBaseURL();
- return /* @__PURE__ */ h(TranslationProvider, { source: {} }, /* @__PURE__ */ h(ExchangeApiProvider, { baseUrl, frameOnError: ExchangeAmlFrame }, /* @__PURE__ */ h(HashPathProvider, null, /* @__PURE__ */ h(ExchangeAmlFrame, null, /* @__PURE__ */ h(
- Router,
+ const [settings, setSettings] = p3();
+ const [forms, setForms] = p3();
+ h2(() => {
+ fetchUiSettings(setSettings);
+ fetchUiForms(setForms);
+ }, []);
+ if (!settings || !forms)
+ return /* @__PURE__ */ h(Loading, null);
+ const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);
+ return /* @__PURE__ */ h(UiSettingsProvider, { value: settings }, /* @__PURE__ */ h(
+ TranslationProvider,
{
- pageList,
- onNotFound: () => {
- window.location.href = Pages.cases.url;
- return /* @__PURE__ */ h("div", null, "not found");
+ source: strings,
+ completeness: {
+ es: strings["es"].completeness,
+ de: strings["de"].completeness
}
+ },
+ /* @__PURE__ */ h(
+ ExchangeApiProvider,
+ {
+ baseUrl: new URL("/", baseUrl),
+ frameOnError: ExchangeAmlFrame
+ },
+ /* @__PURE__ */ h(
+ SWRConfig2,
+ {
+ value: {
+ provider: WITH_LOCAL_STORAGE_CACHE ? localStorageProvider : void 0,
+ // normally, do not revalidate
+ revalidateOnFocus: false,
+ revalidateOnReconnect: false,
+ revalidateIfStale: false,
+ revalidateOnMount: void 0,
+ focusThrottleInterval: void 0,
+ // normally, do not refresh
+ refreshInterval: void 0,
+ dedupingInterval: 2e3,
+ refreshWhenHidden: false,
+ refreshWhenOffline: false,
+ // ignore errors
+ shouldRetryOnError: false,
+ errorRetryCount: 0,
+ errorRetryInterval: void 0,
+ // do not go to loading again if already has data
+ keepPreviousData: true
+ }
+ },
+ /* @__PURE__ */ h(BrowserHashNavigationProvider, null, /* @__PURE__ */ h(UiFormsProvider, { value: forms }, /* @__PURE__ */ h(Routing, null)))
+ )
+ )
+ ));
+}
+function localStorageProvider() {
+ const map2 = new Map(JSON.parse(localStorage.getItem("app-cache") || "[]"));
+ window.addEventListener("beforeunload", () => {
+ const appCache = JSON.stringify(Array.from(map2.entries()));
+ localStorage.setItem("app-cache", appCache);
+ });
+ return map2;
+}
+function getInitialBackendBaseURL(backendFromSettings) {
+ const overrideUrl = typeof localStorage !== "undefined" ? localStorage.getItem("exchange-base-url") : void 0;
+ let result;
+ if (!overrideUrl) {
+ if (!backendFromSettings) {
+ console.error(
+ "ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'"
+ );
+ result = window.origin;
+ } else {
+ result = backendFromSettings;
}
- )))));
+ } else {
+ result = overrideUrl;
+ }
+ try {
+ return canonicalizeBaseUrl(result);
+ } catch (e5) {
+ return canonicalizeBaseUrl(window.origin);
+ }
}
// src/index.tsx
init_preact_module();
var app = document.getElementById("app");
-P(/* @__PURE__ */ h(App, null), app);
+if (!app) {
+ console.error("could not found app element");
+} else {
+ P(/* @__PURE__ */ h(App, null), app);
+}
/*! Bundled license information:
jed/jed.js:
diff --git a/aml-backoffice/index.js.map b/aml-backoffice/index.js.map
index c5662e2d4..1b457f95d 100644
--- a/aml-backoffice/index.js.map
+++ b/aml-backoffice/index.js.map
@@ -1,7 +1,7 @@
{
"version": 3,
- "sources": ["../../../../node_modules/.pnpm/big-integer@1.6.52/node_modules/big-integer/BigInteger.js", "../../../../node_modules/.pnpm/jed@1.1.1/node_modules/jed/jed.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", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/util.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/PureComponent.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/memo.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/forwardRef.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/Children.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense-list.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/portals.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/render.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/index.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/index.js", "../../../taler-util/src/nacl-fast.ts", "../../../taler-util/src/prng-browser.ts", "../../../taler-util/src/taler-error-codes.ts", "../../../taler-util/src/CancellationToken.ts", "../../../taler-util/src/amounts.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/logging.ts", "../../../taler-util/src/codec.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/http-common.ts", "../../../taler-util/src/operation.ts", "../../../taler-util/src/taleruri.ts", "../../../taler-util/src/http-client/types.ts", "../../../taler-util/src/http-status-codes.ts", "../../../taler-util/src/http-impl.missing.ts", "../../../taler-util/src/http.ts", "../../../taler-util/src/libtool-version.ts", "../../../taler-util/src/MerchantApiClient.ts", "../../../taler-util/src/RequestThrottler.ts", "../../../taler-util/src/ReserveTransaction.ts", "../../../taler-util/src/TaskThrottler.ts", "../../../taler-util/src/bank-api-client.ts", "../../../taler-util/src/contract-terms.ts", "../../../taler-util/src/errors.ts", "../../../taler-util/src/fnutils.ts", "../../../taler-util/src/transactions-types.ts", "../../../taler-util/src/wallet-types.ts", "../../../taler-util/src/http-client/utils.ts", "../../../taler-util/src/http-client/bank-conversion.ts", "../../../taler-util/src/http-client/bank-core.ts", "../../../taler-util/src/http-client/merchant.ts", "../../../taler-util/src/http-client/exchange.ts", "../../../taler-util/src/http-client/officer-account.ts", "../../../taler-util/src/i18n.ts", "../../../taler-util/src/iban.ts", "../../../taler-util/src/notifications.ts", "../../../taler-util/src/timer.ts", "../../../taler-util/src/transaction-test-data.ts", "../../../taler-util/src/index.browser.ts", "../../../web-util/src/hooks/useLocalStorage.ts", "../../../web-util/src/utils/observable.ts", "../../../web-util/src/hooks/useLang.ts", "../../../web-util/src/hooks/useMemoryStorage.ts", "../../../web-util/src/hooks/useNotifications.ts", "../../../web-util/src/hooks/useAsyncAsHook.ts", "../../../web-util/src/utils/base64.ts", "../../../web-util/src/utils/request.ts", "../../../web-util/src/utils/http-impl.browser.ts", "../../../web-util/src/utils/http-impl.sw.ts", "../../../web-util/src/utils/route.ts", "../../../web-util/src/context/api.ts", "../../../web-util/src/context/translation.ts", "../../../../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/_lib/buildLocalizeFn/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/_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/startOfWeek/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/constants/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameDay/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/endOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/eachDayOfInterval/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfWeek/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/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/en-US/_lib/localize/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/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMinutes/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getSeconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Setter.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/constants.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/utils.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCDay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISODay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subDays/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/sub/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/index.js", "../../../web-util/src/context/bank-api.ts", "../../../web-util/src/context/activity.ts", "../../../web-util/src/context/merchant-api.ts", "../../../web-util/src/context/navigation.ts", "../../../web-util/src/context/wallet-integration.ts", "../../../web-util/src/components/utils.ts", "../../../web-util/src/components/Attention.tsx", "../../../web-util/src/components/CopyButton.tsx", "../../../web-util/src/components/ErrorLoading.tsx", "../../../web-util/src/components/LangSelector.tsx", "../../../web-util/src/components/Loading.tsx", "../../../web-util/src/components/Header.tsx", "../../../web-util/src/components/Footer.tsx", "../../../web-util/src/components/Button.tsx", "../../../web-util/src/components/ShowInputErrorLabel.tsx", "../../../web-util/src/components/NotificationBanner.tsx", "../../../web-util/src/components/ToastBanner.tsx", "../../../web-util/src/forms/Calendar.tsx", "../../../web-util/src/forms/Caption.tsx", "../../../web-util/src/forms/InputLine.tsx", "../../../web-util/src/forms/useField.ts", "../../../web-util/src/forms/FormProvider.tsx", "../../../web-util/src/forms/DefaultForm.tsx", "../../../web-util/src/forms/forms.ts", "../../../web-util/src/forms/Group.tsx", "../../../web-util/src/forms/InputAbsoluteTime.tsx", "../../../web-util/src/forms/Dialog.tsx", "../../../web-util/src/forms/InputAmount.tsx", "../../../web-util/src/forms/InputArray.tsx", "../../../web-util/src/forms/InputChoiceHorizontal.tsx", "../../../web-util/src/forms/InputChoiceStacked.tsx", "../../../web-util/src/forms/InputFile.tsx", "../../../web-util/src/forms/InputInteger.tsx", "../../../web-util/src/forms/InputSelectMultiple.tsx", "../../../web-util/src/forms/InputSelectOne.tsx", "../../../web-util/src/forms/InputText.tsx", "../../../web-util/src/forms/InputTextArea.tsx", "../../../web-util/src/forms/InputToggle.tsx", "../../../web-util/src/forms/TimePicker.tsx", "../../../web-util/src/stories.tsx", "../../src/App.tsx", "../../src/Dashboard.tsx", "../../src/hooks/useOfficer.ts", "../../src/context/config.ts", "../../src/hooks/useSettings.ts", "../../../../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/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/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/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", "../../src/pages/CaseDetails.tsx", "../../../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/core/dist/index.mjs", "../../../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/_internal/dist/index.mjs", "../../src/hooks/useCaseDetails.ts", "../../src/pages/AntiMoneyLaunderingForm.tsx", "../../src/forms/declaration.ts", "../../src/utils/types.ts", "../../src/pages/ShowConsolidated.tsx", "../../src/utils/converter.ts", "../../src/pages/Cases.tsx", "../../src/hooks/useCases.ts", "../../src/pages/Officer.tsx", "../../src/pages/HandleAccountNotReady.tsx", "../../src/pages/CreateAccount.tsx", "../../src/pages/UnlockAccount.tsx", "../../src/settings.ts", "../../src/hooks/useBackend.ts", "../../src/pages/NewFormEntry.tsx", "../../../../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-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/route.ts", "../../src/pages.ts", "../../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 || alphabet) 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 || alphabet) 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", "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", "/**\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", "/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\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 * An error response did not include an error code in the format expected by the client. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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. Details should be in the local logs. Check if you are using the latest available version or file a report with the developers.\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 in the expected format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 * The operation timed out. Trying again might help. Check the network connection.\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 protocol version given by the server does not follow the required format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 the right data format, but the content did not satisfy the protocol. Please file a bug report.\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 an option is set to an invalid value. Check the logs and fix the local 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 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. Please file a bug report.\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 token used by the client to authorize the request does not grant the required permissions for the request. Check the requirements and obtain a suitable authorization token to proceed.\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 GENERIC_TOKEN_PERMISSION_INSUFFICIENT = 16,\n\n\n /**\n * The HTTP method used is invalid for this endpoint. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you used the correct URL and/or file a report with the developers of the client software.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 were malformed and caused the server to not be able to handle the request. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check that you are using the correct syntax as of RFC 8905 and/or that you entered the bank account number correctly.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 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 body in the request could not be decompressed by the server. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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_COMPRESSION_INVALID = 28,\n\n\n /**\n * The currency involved in the operation is not acceptable for this server. Check your configuration and make sure the currency specified for a given service provider is one of the currencies supported by that provider.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\n * Returned with an HTTP status code of #MHD_HTTP_CONTENT_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 refused the request due to lack of proper 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 GENERIC_UNAUTHORIZED = 40,\n\n\n /**\n * The service refused the request as the given authorization token is unknown.\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 GENERIC_TOKEN_UNKNOWN = 41,\n\n\n /**\n * The service refused the request as the given authorization token expired.\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 GENERIC_TOKEN_EXPIRED = 42,\n\n\n /**\n * The service refused the request as the given authorization token is malformed.\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 GENERIC_TOKEN_MALFORMED = 43,\n\n\n /**\n * The service refused the request due to lack of proper rights on the resource.\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 GENERIC_FORBIDDEN = 44,\n\n\n /**\n * The service failed initialize its connection to the database. The system administrator should check that the service has permissions to access the database and that the database is running.\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. The system administrator should check that the database is running.\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. The system administrator should check that the database is running and review the service logs.\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. The system administrator should check that the database is running and review the service logs.\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 unrecoverable error trying to commit a transaction to the database. The system administrator should check that the database is running and review the service logs.\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; it should only happen if some client maliciously tries to create conflicting concurrent transactions. It could also be a sign of a missing index. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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). Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. The system administrator should check if the resource files are installed in the correct location and are readable to the 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 GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply. The system administrator should investigate the logs and check if the templates are well-formed.\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 coin is not known to the exchange (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_GENERIC_COIN_UNKNOWN = 1019,\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 failed to start a KYC attribute conversion helper process. It is likely configured incorrectly.\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_KYC_CONVERTER_FAILED = 1037,\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 client provided an unknown commitment for an age-withdraw 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 EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN = 1161,\n\n\n /**\n * The total sum of amounts from the denominations did overflow.\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_AGE_WITHDRAW_AMOUNT_OVERFLOW = 1162,\n\n\n /**\n * The total sum of value and fees from the denominations differs from the committed amount with fees.\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_AGE_WITHDRAW_AMOUNT_INCORRECT = 1163,\n\n\n /**\n * The original commitment differs from the calculated hash\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_AGE_WITHDRAW_REVEAL_INVALID_HASH = 1164,\n\n\n /**\n * The maximum age in the commitment is too large for the reserve\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_MAXIMUM_AGE_TOO_LARGE = 1165,\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 coin 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_COIN_HISTORY_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_RESERVE_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 * Withdrawal from the reserve requires age restriction to be set.\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_AGE_RESTRICTION_REQUIRED = 1681,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys or the helpers had no denominations (properly) configured.\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_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_BAD_GATEWAY (502).\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 * TOTP key 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_TOTP_KEY_INVALID = 1980,\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 reward ID is unknown. This could happen if the reward 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_REWARD_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 backend could not find the OTP device(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_OTP_DEVICE_UNKNOWN = 2021,\n\n\n /**\n * The account 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_ACCOUNT_UNKNOWN = 2022,\n\n\n /**\n * The wire hash 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 MERCHANT_GENERIC_H_WIRE_MALFORMED = 2023,\n\n\n /**\n * The currency specified in the operation does not work with the current state of the given resource.\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_GENERIC_CURRENCY_MISMATCH = 2024,\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_BAD_REQUEST (400).\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_BAD_REQUEST (400).\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 exchange does not support the selected bank account of the merchant. Likely the merchant had stale data on the bank accounts of the exchange and thus selected an inappropriate exchange when making the offer.\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_WIRE_METHOD_UNSUPPORTED = 2175,\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 * A token family with this ID but conflicting data 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_POST_TOKEN_FAMILY_CONFLICT = 2225,\n\n\n /**\n * The backend is unaware of a token family with the given ID.\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_PATCH_TOKEN_FAMILY_NOT_FOUND = 2226,\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 are waiting for the exchange to provide us with key material before checking the wire transfer.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS = 2258,\n\n\n /**\n * We are waiting for the exchange to provide us with the list of aggregated transactions.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST = 2259,\n\n\n /**\n * The endpoint indicated in the wire transfer does not belong to a GNU Taler exchange.\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_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE = 2260,\n\n\n /**\n * The exchange indicated in the wire transfer claims to know nothing about the wire transfer.\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_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND = 2261,\n\n\n /**\n * The interaction with the exchange is delayed due to rate limiting.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED = 2262,\n\n\n /**\n * We experienced a transient failure in our interaction with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE = 2263,\n\n\n /**\n * The response from the exchange was unacceptable and should be reviewed with an auditor.\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_EXCHANGE_TRANSFERS_HARD_FAILURE = 2264,\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_REWARD_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_REWARD_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_REWARD_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The reward 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_REWARD_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_REWARD_PICKUP_AMOUNT_EXCEEDS_REWARD_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_REWARD_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The merchant instance has no active bank accounts configured. However, at least one bank account must be available to create 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 merchant backend failed to obtain the current local time.\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; likely 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 * A conflicting order (sharing the same order identifier) already exists at this merchant backend instance.\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 order creation request is invalid because the given 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 order creation request is invalid because the delivery date given 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 order creation request is invalid because a wire deadline of \"never\" 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_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The order creation request is invalid because the given payment deadline 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 order creation request is invalid because the given refund deadline 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 * The backend does not trust any exchange that would allow funds to be wired to any bank account of this instance using the wire method specified with the order. Note that right now, we do not support the use of exchange bank accounts with mandatory currency conversion.\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_NO_EXCHANGES_FOR_WIRE_METHOD = 2509,\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. Deletion may work later after the offer has expired if it remains unpaid.\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 exceeds the original price paid by the customer.\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 * Only paid orders can be refunded, and the frontend specified an unpaid order to issue a refund for.\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 ever 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 amount transferred differs between what was submitted and what the exchange claimed.\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_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS = 2563,\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 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 MERCHANT_PRIVATE_ACCOUNT_DELETE_UNKNOWN_ACCOUNT = 2626,\n\n\n /**\n * The bank account specified in the request already exists at the merchant.\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_ACCOUNT_EXISTS = 2627,\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 requested exchange does not allow rewards.\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_REWARDS_NOT_ALLOWED = 2701,\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 rewards 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_REWARD_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the rewards 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_REWARD_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the reward, and it was configured for rewardping. However, the funds remaining are insufficient to cover the reward, 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_REWARD_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the reward.\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_REWARD_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 * The OTP device 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_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS = 2851,\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 * 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 client tried to register a new account under a reserved username (like 'admin' for example).\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_RESERVED_USERNAME_CONFLICT = 5120,\n\n\n /**\n * The client tried to register a new account with an username 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 BANK_REGISTER_USERNAME_REUSE = 5121,\n\n\n /**\n * The client tried to register a new account with a payto:// URI 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 BANK_REGISTER_PAYTO_URI_REUSE = 5122,\n\n\n /**\n * The client tried to delete an account with a non null 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 BANK_ACCOUNT_BALANCE_NOT_ZERO = 5123,\n\n\n /**\n * The client tried to create a transaction or an operation that credit an unknown account.\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_UNKNOWN_CREDITOR = 5124,\n\n\n /**\n * The client tried to create a transaction or an operation that debit an unknown account.\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_UNKNOWN_DEBTOR = 5125,\n\n\n /**\n * The client tried to perform an action prohibited for exchange accounts.\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_ACCOUNT_IS_EXCHANGE = 5126,\n\n\n /**\n * The client tried to perform an action reserved for exchange accounts.\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_ACCOUNT_IS_NOT_EXCHANGE = 5127,\n\n\n /**\n * Received currency conversion is wrong.\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_BAD_CONVERSION = 5128,\n\n\n /**\n * The account referenced in this operation is missing tan info for the chosen channel.\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_MISSING_TAN_INFO = 5129,\n\n\n /**\n * The client attempted to confirm a transaction with incomplete info.\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_INCOMPLETE = 5130,\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 BANK_TAN_RATE_LIMITED = 5131,\n\n\n /**\n * This TAN channel is not supported.\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 BANK_TAN_CHANNEL_NOT_SUPPORTED = 5132,\n\n\n /**\n * Failed to send TAN using the helper script. Either script is not found, or script timeout, or script 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 BANK_TAN_CHANNEL_SCRIPT_FAILED = 5133,\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 BANK_TAN_CHALLENGE_FAILED = 5134,\n\n\n /**\n * A non-admin user has tried to change their legal 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_NON_ADMIN_PATCH_LEGAL_NAME = 5135,\n\n\n /**\n * A non-admin user has tried to change their debt limit.\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_NON_ADMIN_PATCH_DEBT_LIMIT = 5136,\n\n\n /**\n * A non-admin user has tried to change their password whihout providing the current 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 BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD = 5137,\n\n\n /**\n * Provided old password does not match current password.\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_PATCH_BAD_OLD_PASSWORD = 5138,\n\n\n /**\n * An admin user has tried to become an 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 BANK_PATCH_ADMIN_EXCHANGE = 5139,\n\n\n /**\n * A non-admin user has tried to change their cashout account.\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_NON_ADMIN_PATCH_CASHOUT = 5140,\n\n\n /**\n * A non-admin user has tried to change their contact info.\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_NON_ADMIN_PATCH_CONTACT = 5141,\n\n\n /**\n * The client tried to create a transaction that credit the admin account.\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_ADMIN_CREDITOR = 5142,\n\n\n /**\n * The referenced challenge 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_CHALLENGE_NOT_FOUND = 5143,\n\n\n /**\n * The referenced challenge has expired.\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_TAN_CHALLENGE_EXPIRED = 5144,\n\n\n /**\n * A non-admin user has tried to create an account with 2fa.\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_NON_ADMIN_SET_TAN_CHANNEL = 5145,\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_CONTENT_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_CONTENT_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 a reward) 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_REWARD_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 * The exchange's self-reported base URL does not match the one that the wallet is using.\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_BASE_URL_MISMATCH = 7030,\n\n\n /**\n * The order has already been paid 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_PAID = 7031,\n\n\n /**\n * An exchange that is required for some request is currently 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_EXCHANGE_UNAVAILABLE = 7032,\n\n\n /**\n * An exchange entry is still used by the exchange, thus it can't be deleted without purging.\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_ENTRY_USED = 7033,\n\n\n /**\n * The wallet database is unavailable and the wallet thus is not operational.\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_DB_UNAVAILABLE = 7034,\n\n\n /**\n * A taler:// URI is malformed and 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_TALER_URI_MALFORMED = 7035,\n\n\n /**\n * A wallet-core request was cancelled and thus can't provide a 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_CORE_REQUEST_CANCELLED = 7036,\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_CONTENT_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 * The Donau failed to perform the operation as it could not find the private keys. This is a problem with the Donau 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 DONAU_GENERIC_KEYS_MISSING = 8607,\n\n\n /**\n * The signature of the charity key 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 DONAU_CHARITY_SIGNATURE_INVALID = 8608,\n\n\n /**\n * The charity 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 DONAU_CHARITY_NOT_FOUND = 8609,\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 * The client is unknown or unauthorized.\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 CHALLENGER_GENERIC_CLIENT_UNKNOWN = 9750,\n\n\n /**\n * The client is not authorized to use the given redirect URI.\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 CHALLENGER_GENERIC_CLIENT_FORBIDDEN_BAD_REDIRECT_URI = 9751,\n\n\n /**\n * The service failed to execute its helper process to send the challenge.\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 CHALLENGER_HELPER_EXEC_FAILED = 9752,\n\n\n /**\n * The grant is unknown to the service (it could also have 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 CHALLENGER_GRANT_UNKNOWN = 9753,\n\n\n /**\n * The code given is not even well-formed.\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 CHALLENGER_CLIENT_FORBIDDEN_BAD_CODE = 9754,\n\n\n /**\n * The service is not aware of the referenced validation process.\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 CHALLENGER_GENERIC_VALIDATION_UNKNOWN = 9755,\n\n\n /**\n * The code given 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 CHALLENGER_CLIENT_FORBIDDEN_INVALID_CODE = 9756,\n\n\n /**\n * Too many attempts have been made, validation is temporarily disabled for this address.\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 CHALLENGER_TOO_MANY_ATTEMPTS = 9757,\n\n\n /**\n * The PIN code provided is incorrect.\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 CHALLENGER_INVALID_PIN = 9758,\n\n\n /**\n * The token cannot be valid as no address was ever provided by the client.\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 CHALLENGER_MISSING_ADDRESS = 9759,\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", "/*\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) 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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n renderContext,\n} from \"./codec.js\";\nimport { CurrencySpecification } from \"./index.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 * Separator character between integer and fractional\n */\nexport const FRAC_SEPARATOR = \".\";\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\n/**\n * Immutable amount.\n */\nexport class Amount {\n static from(a: AmountLike): Amount {\n return new Amount(Amounts.parseOrThrow(a), 0);\n }\n\n static zeroOfCurrency(currency: string): Amount {\n return new Amount(Amounts.zeroOfCurrency(currency), 0);\n }\n\n add(...a: AmountLike[]): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.add(this.val, ...a);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n mult(n: number): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.mult(this, n);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n toJson(): AmountJson {\n return { ...this.val };\n }\n\n toString(): AmountString {\n return Amounts.stringify(this.val);\n }\n\n private constructor(\n private val: AmountJson,\n private saturated: number,\n ) {}\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 function codecForAmountString(): Codec<AmountString> {\n return {\n decode(x: any, c?: Context): AmountString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (Amounts.parse(x) === undefined) {\n throw new DecodingError(\n `invalid amount at ${renderContext(c)} got \"${x}\"`,\n );\n }\n return x as AmountString;\n },\n };\n}\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 = string | AmountString | AmountJson | Amount;\n\nexport interface DivmodResult {\n quotient: number;\n remainder: AmountJson;\n}\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 if (amt instanceof Amount) {\n return amt.toJson();\n }\n return amt;\n }\n\n static divmod(a1: AmountLike, a2: AmountLike): DivmodResult {\n const am1 = Amounts.jsonifyAmount(a1);\n const am2 = Amounts.jsonifyAmount(a2);\n if (am1.currency != am2.currency) {\n throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);\n }\n\n const x1 =\n BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);\n const x2 =\n BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);\n\n const quotient = x1 / x2;\n const remainderScaled = x1 % x2;\n\n return {\n quotient: Number(quotient),\n remainder: {\n currency: am1.currency,\n value: Number(remainderScaled / BigInt(amountFractionalBase)),\n fraction: Number(remainderScaled % BigInt(amountFractionalBase)),\n },\n };\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 * Check whether a string is a valid currency for a Taler amount.\n */\n static isCurrency(s: string): boolean {\n return /^[a-zA-Z]{1,11}$/.test(s);\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n *\n * Currency name size limit is 11 of ASCII letters\n * Fraction size limit is 8\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z]{1,11}):([0-9]+)([.][0-9]{1,8})?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || FRAC_SEPARATOR + \"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 (s instanceof Amount) {\n return s.toJson();\n }\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 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 multiplied 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): AmountString {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}` as AmountString;\n }\n\n static amountHasSameCurrency(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 isSameCurrency(curr1: string, curr2: string): boolean {\n return curr1.toLowerCase() === curr2.toLowerCase();\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 + FRAC_SEPARATOR;\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 static stringifyValueWithSpec(\n value: AmountJson,\n spec: CurrencySpecification,\n ): { currency: string; normal: string; small?: string } {\n const strValue = Amounts.stringifyValue(value);\n const pos = strValue.indexOf(FRAC_SEPARATOR);\n const originalPosition = pos < 0 ? strValue.length : pos;\n\n let currency = value.currency;\n const names = Object.keys(spec.alt_unit_names);\n let FRAC_POS_NEW_POSITION = originalPosition;\n //find symbol\n //FIXME: this should be based on a cache to speed up\n if (names.length > 0) {\n let unitIndex: string = \"0\"; //default entry by DD51\n names.forEach((index) => {\n const i = Number.parseInt(index, 10);\n if (Number.isNaN(i)) return; //skip\n if (originalPosition - i <= 0) return; //too big\n if (originalPosition - i < FRAC_POS_NEW_POSITION) {\n FRAC_POS_NEW_POSITION = originalPosition - i;\n unitIndex = index;\n }\n });\n currency = spec.alt_unit_names[unitIndex];\n }\n\n if (originalPosition === FRAC_POS_NEW_POSITION) {\n const { normal, small } = splitNormalAndSmall(\n strValue,\n originalPosition,\n spec,\n );\n return { currency, normal, small };\n }\n\n const intPart = strValue.substring(0, originalPosition);\n const fracPArt = strValue.substring(originalPosition + 1);\n //indexSize is always smaller than originalPosition\n const newValue =\n intPart.substring(0, FRAC_POS_NEW_POSITION) +\n FRAC_SEPARATOR +\n intPart.substring(FRAC_POS_NEW_POSITION) +\n fracPArt;\n const { normal, small } = splitNormalAndSmall(\n newValue,\n FRAC_POS_NEW_POSITION,\n spec,\n );\n return { currency, normal, small };\n }\n}\n\nfunction splitNormalAndSmall(\n decimal: string,\n fracSeparatorIndex: number,\n spec: CurrencySpecification,\n): { normal: string; small?: string } {\n let normal: string;\n let small: string | undefined;\n if (\n decimal.length - fracSeparatorIndex - 1 >\n spec.num_fractional_normal_digits\n ) {\n const limit = fracSeparatorIndex + spec.num_fractional_normal_digits + 1;\n normal = decimal.substring(0, limit);\n small = decimal.substring(limit);\n } else {\n normal = decimal;\n small = undefined;\n }\n return { normal, small };\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 //Include URL type for \"url\" and \"base\" params.\n constructor(url: string | URL, base?: string | URL) {\n let parsedBase = null;\n if (base !== undefined) {\n if (base instanceof URL) {\n base = base.href;\n }\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n if (url instanceof URL) {\n url = url.href;\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) 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\nlet globalLogLevel = LogLevel.Info;\nconst byTagLogLevel: Record<string, LogLevel> = {};\n\nlet nativeLogging: boolean = false;\n\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString\nError.prototype.toString = function () {\n if (\n this === null ||\n (typeof this !== \"object\" && typeof this !== \"function\")\n ) {\n throw new TypeError();\n }\n let name = this.name;\n name = name === undefined ? \"Error\" : `${name}`;\n let msg = this.message;\n msg = msg === undefined ? \"\" : `${msg}`;\n\n let cause = \"\";\n if (\"cause\" in this) {\n cause = `\\n Caused by: ${this.cause}`;\n }\n return `${name}: ${msg}${cause}`;\n};\n\nexport function getGlobalLogLevel(): string {\n return globalLogLevel;\n}\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nexport function enableNativeLogging() {\n nativeLogging = true;\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 writeNativeLog(\n message: any,\n tag: string,\n level: number,\n args: any[],\n): void {\n const logFn = (globalThis as any).__nativeLog;\n if (logFn) {\n let m: string;\n if (args.length == 0) {\n m = message;\n } else {\n m = message + \" \" + args.toString();\n }\n logFn(level, tag, message);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 2, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 3, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 4, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 1, args);\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", "/*\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\nimport { j2s } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\nconst logger = new Logger(\"codec.ts\");\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 * Return a codec for a value that must be a string.\n */\nexport function codecForStringURL(shouldEndWithSlash?: boolean): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return x;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\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 if (logger.shouldLogTrace()) {\n logger.trace(`offending value: ${j2s(x)}`);\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\n\nconst x = codecForEither(codecForString(), codecForNumber());\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 reuse 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 * as argon2 from \"./argon2.js\";\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\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\nimport { AmountLike, Amounts } from \"./amounts.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 hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n ): 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 async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n if (tart) {\n return tart.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\n }\n return await argon2.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\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 global/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 public 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 public 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\n/**\n * This makes the assumption that the uint64 fits a float,\n * which should be true for all Taler protocol messages.\n */\nexport function bufferForUint64(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(8);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n if (n < 0 || !Number.isInteger(n)) {\n throw Error(\"non-negative integer expected\");\n }\n dv.setBigUint64(0, BigInt(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 MERCHANT_REFUND = 1102,\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 WALLET_PURSE_DELETE = 1220,\n WALLET_COIN_HISTORY = 1209,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n TALER_SIGNATURE_AML_DECISION = 1350,\n TALER_SIGNATURE_AML_QUERY = 1351,\n TALER_SIGNATURE_MASTER_AML_KEY = 1017,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport 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 const PublishedAgeRestrictionBaseKey: Edx25519PublicKey = decodeCrock(\n \"CH0VKFDZ2GWRWHQBBGEK9MWV5YDQVJ0RXEE0KYT3NMB69F0R96TG\",\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 < numPrivs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-commitment\"),\n salt: bufferForUint32(i),\n });\n\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n privs.push(priv);\n }\n\n for (let i = numPrivs; i < numPubs; i++) {\n const deriveSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-factor\"),\n salt: bufferForUint32(i),\n });\n const pub = await Edx25519.publicKeyDerive(\n PublishedAgeRestrictionBaseKey,\n deriveSeed,\n );\n pubs.push(pub);\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!\nexport type 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\nexport async 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\nexport async 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 nonce: EncryptionNonce,\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(nonce, key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n nonce: EncryptionNonce,\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(nonce, 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\nexport function amountToBuffer(amount: AmountLike): Uint8Array {\n const amountJ = Amounts.jsonifyAmount(amount);\n const buffer = new ArrayBuffer(8 + 4 + 12);\n const dvbuf = new DataView(buffer);\n const u8buf = new Uint8Array(buffer);\n const curr = stringToBytes(amountJ.currency);\n if (typeof dvbuf.setBigUint64 !== \"undefined\") {\n dvbuf.setBigUint64(0, BigInt(amountJ.value));\n } else {\n const arr = bigint(amountJ.value).toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n dvbuf.setUint8(offset++, arr[i]);\n }\n }\n dvbuf.setUint32(8, amountJ.fraction);\n u8buf.set(curr, 8 + 4);\n\n return u8buf;\n}\n\nexport function timestampRoundedToBuffer(\n ts: TalerProtocolTimestamp,\n): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.t_s) * BigInt(1000 * 1000);\n v.setBigUint64(0, s);\n } else {\n const s =\n ts.t_s === \"never\" ? bigint.zero : bigint(ts.t_s).multiply(1000 * 1000);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n\nexport function durationRoundedToBuffer(ts: TalerProtocolDuration): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.d_us);\n v.setBigUint64(0, s);\n } else {\n const s = ts.d_us === \"forever\" ? bigint.zero : bigint(ts.d_us);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\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, Context, renderContext } from \"./codec.js\";\n\ndeclare const flavor_AbsoluteTime: unique symbol;\ndeclare const flavor_TalerProtocolTimestamp: unique symbol;\ndeclare const flavor_TalerPreciseTimestamp: unique symbol;\n\nconst opaque_AbsoluteTime: unique symbol = Symbol(\"opaque_AbsoluteTime\");\n\n// FIXME: Make this opaque!\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n\n readonly _flavor?: typeof flavor_AbsoluteTime;\n\n // Make the type opaque, we only want our constructors\n // to able to create an AbsoluteTime value.\n [opaque_AbsoluteTime]: true;\n}\n\nexport interface TalerProtocolTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n readonly _flavor?: typeof flavor_TalerProtocolTimestamp;\n}\n\n/**\n * Precise timestamp, typically used in the wallet-core\n * API but not in other Taler APIs so far.\n */\nexport interface TalerPreciseTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n /**\n * Optional microsecond offset (non-negative integer).\n */\n readonly off_us?: number;\n\n readonly _flavor?: typeof flavor_TalerPreciseTimestamp;\n}\n\nexport namespace TalerPreciseTimestamp {\n export function now(): TalerPreciseTimestamp {\n const absNow = AbsoluteTime.now();\n return AbsoluteTime.toPreciseTimestamp(absNow);\n }\n\n export function round(t: TalerPreciseTimestamp): TalerProtocolTimestamp {\n return {\n t_s: t.t_s,\n };\n }\n\n export function fromSeconds(s: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(s),\n off_us: Math.floor((s - Math.floor(s)) / 1000 / 1000),\n };\n }\n\n export function fromMilliseconds(ms: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(ms / 1000),\n off_us: Math.floor((ms - Math.floor(ms / 1000) * 1000) * 1000),\n };\n }\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toProtocolTimestamp(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 isNever(t: TalerProtocolTimestamp): boolean {\n return t.t_s === \"never\";\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\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\n/**\n * Timeshift in milliseconds.\n */\nlet timeshift = 0;\n\n/**\n * Set timetravel offset in milliseconds.\n *\n * Use carefully and only for testing.\n */\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function toMilliseconds(d: Duration): number {\n if (d.d_ms === \"forever\") {\n return Number.MAX_VALUE;\n }\n return d.d_ms;\n }\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 /**\n * Compare two durations. Returns 0 when equal, -1 when a < b\n * and +1 when a > b.\n */\n export function cmp(d1: Duration, d2: Duration): 1 | 0 | -1 {\n if (d1.d_ms === \"forever\") {\n if (d2.d_ms === \"forever\") {\n return 0;\n }\n return 1;\n }\n if (d2.d_ms === \"forever\") {\n return -1;\n }\n if (d1.d_ms == d2.d_ms) {\n return 0;\n }\n if (d1.d_ms > d2.d_ms) {\n return 1;\n }\n return -1;\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 function fromSpec(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\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: Math.floor(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 fromMilliseconds(ms: number): Duration {\n return {\n d_ms: ms,\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 getStampMsNow(): number {\n return new Date().getTime();\n }\n\n export function getStampMsNever(): number {\n return Number.MAX_SAFE_INTEGER;\n }\n\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromMilliseconds(ms: number): AbsoluteTime {\n return {\n t_ms: ms,\n [opaque_AbsoluteTime]: true,\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, [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\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 isNever(t: AbsoluteTime): boolean {\n return t.t_ms === \"never\";\n }\n\n export function fromProtocolTimestamp(\n t: TalerProtocolTimestamp,\n ): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return {\n t_ms: t.t_s * 1000,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromStampMs(stampMs: number): AbsoluteTime {\n return {\n t_ms: stampMs,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromPreciseTimestamp(t: TalerPreciseTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n const offsetUs = t.off_us ?? 0;\n return {\n t_ms: t.t_s * 1000 + Math.floor(offsetUs / 1000),\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function toStampMs(at: AbsoluteTime): number {\n if (at.t_ms === \"never\") {\n return Number.MAX_SAFE_INTEGER;\n }\n return at.t_ms;\n }\n\n export function toPreciseTimestamp(at: AbsoluteTime): TalerPreciseTimestamp {\n if (at.t_ms == \"never\") {\n return {\n t_s: \"never\",\n };\n }\n const t_s = Math.floor(at.t_ms / 1000);\n const off_us = Math.floor(1000 * (at.t_ms - t_s * 1000));\n return {\n t_s,\n off_us,\n };\n }\n\n export function toProtocolTimestamp(\n at: AbsoluteTime,\n ): 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\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: t1.t_ms + d.d_ms, [opaque_AbsoluteTime]: true };\n }\n\n /**\n * Get the remaining duration until {@param t1}.\n *\n * If {@param t1} already happened, the remaining duration\n * is zero.\n */\n export function remaining(t1: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return Duration.getForever();\n }\n const stampNow = now();\n if (stampNow.t_ms === \"never\") {\n throw Error(\"invariant violated\");\n }\n return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_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\", [opaque_AbsoluteTime]: true };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms), [opaque_AbsoluteTime]: true };\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 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 if (x === undefined) {\n throw Error(`got undefined and expected absolute time at ${renderContext(c)}`);\n }\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms, [opaque_AbsoluteTime]: true };\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 if (x === undefined) {\n throw Error(`got undefined and expected timestamp at ${renderContext(c)}`);\n }\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 protocol timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForPreciseTimestamp: Codec<TalerPreciseTimestamp> = {\n decode(x: any, c?: Context): TalerPreciseTimestamp {\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 throw Error(`expected precise 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 { Amounts, codecForAmountString } from \"./amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecForStringURL,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport {\n CurrencySpecification,\n codecForCurrencySpecificiation,\n codecForEither,\n codecForProduct,\n} from \"./index.js\";\nimport { Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForDuration,\n codecForTimestamp,\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 // The exchange's base URL.\n url: string;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKeyString;\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: EddsaPublicKeyString;\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 // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\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?: InternationalizedString;\n\n // The number of units of the product to deliver to the customer.\n quantity?: Integer;\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?: ImageDataUrl;\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 // The hash of the merchant instance's wire details.\n h_wire: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: TalerProtocolDuration;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: InternationalizedString;\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: string;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: TalerProtocolTimestamp;\n\n // More info about the merchant, see below.\n merchant: MerchantInfo;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: string;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: TalerProtocolTimestamp;\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: ExchangeHandle[];\n\n // List of products that are part of the purchase (see Product).\n products?: Product[];\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: TalerProtocolTimestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // Time when this contract was generated.\n timestamp: TalerProtocolTimestamp;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional, but either fulfillment_url\n // or fulfillment_message must be specified in every\n // contract terms.\n //\n // If a non-unique fulfillment URL is used, a customer can only\n // buy the order once and will be redirected to a previous purchase\n // when trying to buy an order with the same fulfillment URL a second\n // time. This is useful for digital goods that a customer only needs\n // to buy once but should be able to repeatedly download.\n //\n // For orders where the customer is expected to be able to make\n // repeated purchases (for equivalent goods), the fulfillment URL\n // should be made unique for every order. The easiest way to do\n // this is to include a unique order ID in the fulfillment URL.\n //\n // When POSTing to the merchant, the placeholder text \"${ORDER_ID}\"\n // is be replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL). Note that this placeholder can only be used once.\n // Front-ends may use other means to generate a unique fulfillment URL.\n fulfillment_url?: string;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: InternationalizedString;\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: string;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n // Must really be an Object (not a string, integer, float or array).\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\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 * 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 * Canonical, public base URL of the exchange.\n */\n base_url: string;\n\n currency: string;\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 accounts: ExchangeWireAccount[];\n\n wire_fees: { [methodName: string]: WireFeesJson[] };\n\n denominations: DenomGroup[];\n}\n\nexport type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n\nexport interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n\n // XOR of all the SHA-512 hash values of the denominations' public keys\n // in this group. Note that for hashing, the binary format of the\n // public keys is used, and not their base32 encoding.\n hash: HashCodeString;\n}\n\nexport interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignatureString;\n\n // When does the denomination key become valid?\n stamp_start: TalerProtocolTimestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: TalerProtocolTimestamp;\n\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n}\n\nexport type RsaPublicKeySring = string;\nexport type AgeMask = number;\nexport type ImageDataUrl = string;\n\n/**\n * 32-byte value representing a point on Curve25519.\n */\nexport type Cs25519Point = string;\n\nexport interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\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\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 status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\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 RewardPickupGetResponse {\n reward_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 pos_confirmation?: 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 // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected or pending.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Deprecated field use status instead\n // The transfer has been confirmed and registered by the bank.\n // Does not guarantee that the funds have arrived at the exchange already.\n transfer_done: boolean;\n}\n\nexport const codeForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\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\ndeclare const __amount_str: unique symbol;\nexport type AmountString = string & { [__amount_str]: true };\n// export 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 codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\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\", codecForAmountString())\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\", codecForAmountString())\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\", codecForAmountString())\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 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\n// FIXME: Validate properly!\nexport const codecForNgDenominations: Codec<DenomGroup> = codecForAny();\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\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 .property(\"accounts\", codecForList(codecForExchangeWireAccount()))\n .property(\"wire_fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .property(\"denominations\", codecForList(codecForNgDenominations))\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 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(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\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 codecForRewardPickupGetResponse =\n (): Codec<RewardPickupGetResponse> =>\n buildCodecForObject<RewardPickupGetResponse>()\n .property(\"reward_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 codecForExchangeWithdrawBatchResponse =\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 .property(\"pos_confirmation\", codecOptional(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 codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\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 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 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\ninterface DepositConfirmationSignature {\n // The EdDSA signature of `TALER_DepositConfirmationPS` using a current\n // `signing key of the exchange <sign-key-priv>` 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: EddsaSignatureString;\n}\n\nexport interface BatchDepositSuccess {\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 // `Public EdDSA key of the exchange <sign-key-pub>` 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: EddsaPublicKeyString;\n\n // Array of deposit confirmation signatures from the exchange\n // Entries must be in the same order the coins were given\n // in the batch deposit request.\n exchange_sig: EddsaSignatureString;\n}\n\nexport const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> =>\n buildCodecForObject<BatchDepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"BatchDepositSuccess\");\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\n/**\n * @deprecated batch deposit should be used.\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 type WireSalt = string;\n\nexport interface ExchangeBatchDepositRequest {\n // The merchant's account details.\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: WireSalt;\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 // The list of coins that are going to be deposited with this Request.\n coins: BatchDepositRequestCoin[];\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 <merchant-pub>`, so that the client can identify the\n // merchant for refund requests.\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 batch-deposit.\n // This might be a refund, auction or escrow policy.\n policy?: any;\n}\n\nexport interface BatchDepositRequestCoin {\n // EdDSA public key of the coin being deposited.\n coin_pub: EddsaPublicKeyString;\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 // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: Amounts;\n\n // Signature over `TALER_DepositRequestPS`, made by the customer with the\n // `coin's private key <coin-priv>`.\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\nexport interface ExchangeRefundRequest {\n // Amount to be refunded, can be a fraction of the\n // coin's total deposit value (including deposit fee);\n // must be larger than the refund fee.\n refund_amount: AmountString;\n\n // SHA-512 hash of the contact of the merchant with the customer.\n h_contract_terms: HashCodeString;\n\n // 64-bit transaction id of the refund transaction between merchant and customer.\n rtransaction_id: number;\n\n // EdDSA public key of the merchant.\n merchant_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the merchant over a\n // TALER_RefundRequestPS with purpose\n // TALER_SIGNATURE_MERCHANT_REFUND\n // affirming the refund.\n merchant_sig: EddsaPublicKeyString;\n}\n\nexport interface ExchangeRefundSuccessResponse {\n // The EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND over\n // a TALER_RecoupRefreshConfirmationPS\n // 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\nexport const codecForExchangeRefundSuccessResponse =\n (): Codec<ExchangeRefundSuccessResponse> =>\n buildCodecForObject<ExchangeRefundSuccessResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .build(\"ExchangeRefundSuccessResponse\");\n\nexport type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n\nexport interface DenyAllAccountRestriction {\n type: \"deny\";\n}\n\n// Accounts interacting with this type of account\n// restriction must have a payto://-URI matching\n// the given regex.\nexport interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: InternationalizedString;\n}\n\nexport interface ExchangeWireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: string;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignatureString;\n\n // Display label wallets should use to show this\n // bank account.\n // Since protocol **v19**.\n bank_label?: string;\n priority?: number;\n}\n\nexport const codecForExchangeWireAccount = (): Codec<ExchangeWireAccount> =>\n buildCodecForObject<ExchangeWireAccount>()\n .property(\"conversion_url\", codecOptional(codecForStringURL()))\n .property(\"credit_restrictions\", codecForList(codecForAny()))\n .property(\"debit_restrictions\", codecForList(codecForAny()))\n .property(\"master_sig\", codecForString())\n .property(\"payto_uri\", codecForString())\n .property(\"bank_label\", codecOptional(codecForString()))\n .property(\"priority\", codecOptional(codecForNumber()))\n .build(\"WireAccount\");\n\nexport type Integer = number;\n\nexport interface BankConversionInfoConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n regional_currency: string;\n\n fiat_currency: string;\n\n // Currency used by this bank.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency_specification: CurrencySpecification;\n}\n\nexport const codecForBankConversionInfoConfig =\n (): Codec<BankConversionInfoConfig> =>\n buildCodecForObject<BankConversionInfoConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"fiat_currency\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .build(\"BankConversionInfoConfig\");\n\nexport interface DenominationExpiredMessage {\n // Taler error code. Note that beyond\n // expiration this message format is also\n // used if the key is not yet valid, or\n // has been revoked.\n code: number;\n\n // Signature by the exchange over a\n // TALER_DenominationExpiredAffirmationPS.\n // Must have purpose TALER_SIGNATURE_EXCHANGE_AFFIRM_DENOM_EXPIRED.\n exchange_sig: EddsaSignatureString;\n\n // Public key of the exchange used to create\n // the 'exchange_sig.\n exchange_pub: EddsaPublicKeyString;\n\n // Hash of the denomination public key that is unknown.\n h_denom_pub: HashCodeString;\n\n // When was the signature created.\n timestamp: TalerProtocolTimestamp;\n\n // What kind of operation was requested that now\n // failed?\n oper: string;\n}\n\nexport const codecForDenominationExpiredMessage = () =>\n buildCodecForObject<DenominationExpiredMessage>()\n .property(\"code\", codecForNumber())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"oper\", codecForString())\n .build(\"DenominationExpiredMessage\");\n\nexport interface CoinHistoryResponse {\n // Current balance of the coin.\n balance: AmountString;\n\n // Hash of the coin's denomination.\n h_denom_pub: HashCodeString;\n\n // Transaction history for the coin.\n history: any[];\n}\n\nexport const codecForCoinHistoryResponse = () =>\n buildCodecForObject<CoinHistoryResponse>()\n .property(\"balance\", codecForAmountString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"history\", codecForAny())\n .build(\"CoinHistoryResponse\");\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 type { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport {\n TalerError,\n base64FromArrayBuffer,\n makeErrorDetail,\n stringToBytes,\n} from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AbsoluteTime, Duration } 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\" | \"PATCH\" | \"PUT\" | \"GET\" | \"DELETE\";\n headers?: { [name: string]: string | undefined };\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 * How to handle redirects.\n * Same semantics as WHATWG fetch.\n */\n redirect?: \"follow\" | \"error\" | \"manual\";\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 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\n/**\n * Read Taler error details from an HTTP response.\n */\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const contentType = httpResponse.headers.get(\"content-type\");\n if (contentType !== \"application/json\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n contentType: contentType || \"<null>\",\n },\n \"Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.\",\n );\n }\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\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 let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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 expectSuccessResponseOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (httpResponse.status >= 200 && httpResponse.status <= 299) {\n return;\n }\n const errResp = await readTalerErrorResponse(httpResponse);\n throwUnexpectedRequestError(httpResponse, errResp);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 = AbsoluteTime.fromMilliseconds(expiryDateMs);\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 * Only allow HTTPS connections, not plain http.\n */\n requireTls?: boolean;\n printAsCurl?: 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/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport {\n HttpResponse,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http-common.js\";\nimport {\n Codec,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TalerErrorDetail,\n} from \"./index.js\";\n\ntype OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =\n ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;\n\nexport type OperationResult<Body, ErrorEnum, K = never> =\n | OperationOk<Body>\n | OperationAlternative<ErrorEnum, any>\n | OperationFail<ErrorEnum>\n | OperationFailWithBodyOrNever<ErrorEnum, K>;\n\nexport function isOperationOk<T, E>(\n c: OperationResult<T, E>,\n): c is OperationOk<T> {\n return c.type === \"ok\";\n}\n\nexport function isOperationFail<T, E>(\n c: OperationResult<T, E>,\n): c is OperationFail<E> {\n return c.type === \"fail\";\n}\n\n/**\n * successful operation\n */\nexport interface OperationOk<BodyT> {\n type: \"ok\";\n\n /**\n * Parsed response body.\n */\n body: BodyT;\n}\n\n/**\n * unsuccessful operation, see details\n */\nexport interface OperationFail<T> {\n type: \"fail\";\n\n /**\n * Error case (either HTTP status code or TalerErrorCode)\n */\n case: T;\n\n detail: TalerErrorDetail;\n}\n\n/**\n * unsuccessful operation, see body\n */\nexport interface OperationAlternative<T, B> {\n type: \"fail\";\n\n case: T;\n body: B;\n}\n\nexport interface OperationFailWithBody<B> {\n type: \"fail\";\n\n case: keyof B;\n body: B[OperationFailWithBody<B>[\"case\"]];\n}\n\nexport async function opSuccessFromHttp<T>(\n resp: HttpResponse,\n codec: Codec<T>,\n): Promise<OperationOk<T>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"ok\" as const, body };\n}\n\n/**\n * Success case, but instead of the body we're returning a fixed response\n * to the client.\n */\nexport function opFixedSuccess<T>(body: T): OperationOk<T> {\n return { type: \"ok\" as const, body };\n}\n\nexport function opEmptySuccess(resp: HttpResponse): OperationOk<void> {\n return { type: \"ok\" as const, body: void 0 };\n}\n\nexport async function opKnownFailureWithBody<B>(\n case_: keyof B,\n body: B[typeof case_],\n): Promise<OperationFailWithBody<B>> {\n return { type: \"fail\", case: case_, body };\n}\n\nexport async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(\n resp: HttpResponse,\n s: T,\n codec: Codec<B>,\n): Promise<OperationAlternative<T, B>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"fail\", case: s, body };\n}\n\nexport async function opKnownHttpFailure<T extends HttpStatusCode>(\n s: T,\n resp: HttpResponse,\n): Promise<OperationFail<T>> {\n const detail = await readTalerErrorResponse(resp);\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opKnownTalerFailure<T extends TalerErrorCode>(\n s: T,\n detail: TalerErrorDetail,\n): OperationFail<T> {\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: resp.requestUrl,\n requestMethod: resp.requestMethod,\n httpStatusCode: resp.status,\n errorResponse: error,\n },\n `Unexpected HTTP status ${resp.status} in response`,\n );\n}\n\n/**\n * Convenience function to throw an error if the operation is not a success.\n */\nexport function narrowOpSuccessOrThrow<Body, ErrorEnum>(\n opName: string,\n opRes: OperationResult<Body, ErrorEnum>,\n): asserts opRes is OperationOk<Body> {\n if (opRes.type !== \"ok\") {\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR,\n {\n operation: opName,\n error: String(opRes.case),\n detail: \"detail\" in opRes ? opRes.detail : undefined,\n },\n `Operation ${opName} failed: ${String(opRes.case)}`,\n );\n }\n}\n\nexport type ResultByMethod<\n TT extends object,\n p extends keyof TT,\n> = TT[p] extends (...args: any[]) => infer Ret\n ? Ret extends Promise<infer Result>\n ? Result extends OperationResult<any, any>\n ? Result\n : never\n : never //api always use Promises\n : never; //error cases just for functions\n\nexport type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<\n ResultByMethod<TT, p>,\n OperationOk<any>\n>;\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\n/**\n * @fileoverview\n * Construction and parsing of taler:// URIs.\n * Specification: https://lsd.gnunet.org/lsd0006/\n */\n\n/**\n * Imports.\n */\nimport { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { opFixedSuccess, opKnownTalerFailure } from \"./operation.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { URL, URLSearchParams } from \"./url.js\";\n/**\n * A parsed taler URI.\n */\nexport type TalerUri =\n | PayUriResult\n | PayTemplateUriResult\n | DevExperimentUri\n | PayPullUriResult\n | PayPushUriResult\n | BackupRestoreUri\n | RefundUriResult\n | WithdrawUriResult\n | WithdrawExchangeUri\n | AddExchangeUri;\n\ndeclare const __action_str: unique symbol;\nexport type TalerUriString = string & { [__action_str]: true };\n\nexport function codecForTalerUriString(): Codec<TalerUriString> {\n return {\n decode(x: any, c?: Context): TalerUriString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (parseTalerUri(x) === undefined) {\n throw new DecodingError(\n `invalid taler URI at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as TalerUriString;\n },\n };\n}\n\nexport interface PayUriResult {\n type: TalerUriAction.Pay;\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken?: string;\n noncePriv?: string;\n}\n\nexport type TemplateParams = {\n amount?: string;\n summary?: string;\n};\n\nexport interface PayTemplateUriResult {\n type: TalerUriAction.PayTemplate;\n merchantBaseUrl: string;\n templateId: string;\n templateParams: TemplateParams;\n}\n\nexport interface WithdrawUriResult {\n type: TalerUriAction.Withdraw;\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n type: TalerUriAction.Refund;\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface PayPushUriResult {\n type: TalerUriAction.PayPush;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n type: TalerUriAction.PayPull;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n type: TalerUriAction.DevExperiment;\n devExperimentId: string;\n}\n\nexport interface BackupRestoreUri {\n type: TalerUriAction.Restore;\n walletRootPriv: string;\n providers: Array<string>;\n}\n\nexport interface WithdrawExchangeUri {\n type: TalerUriAction.WithdrawExchange;\n exchangeBaseUrl: string;\n exchangePub?: string;\n amount?: AmountString;\n}\n\nexport interface AddExchangeUri {\n type: TalerUriAction.AddExchange;\n exchangeBaseUrl: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"withdraw\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 const result: WithdrawUriResult = {\n type: TalerUriAction.Withdraw,\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n withdrawalOperationId: withdrawId,\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const r = parseWithdrawUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseAddExchangeUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"add-exchange\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 p = [host, ...pathSegments].join(\"/\");\n\n const result: AddExchangeUri = {\n type: TalerUriAction.AddExchange,\n exchangeBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseAddExchangeUri(s: string): AddExchangeUri | undefined {\n const r = parseAddExchangeUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * @deprecated use TalerUriAction\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\nexport enum TalerUriAction {\n Pay = \"pay\",\n Withdraw = \"withdraw\",\n Refund = \"refund\",\n PayPull = \"pay-pull\",\n PayPush = \"pay-push\",\n PayTemplate = \"pay-template\",\n Restore = \"restore\",\n DevExperiment = \"dev-experiment\",\n WithdrawExchange = \"withdraw-exchange\",\n AddExchange = \"add-exchange\",\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\nfunction parseProtoInfoWithError(s: string, action: string) {\n if (\n !s.toLowerCase().startsWith(\"taler://\") &&\n !s.toLowerCase().startsWith(\"taler+http://\")\n ) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return opFixedSuccess({\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n });\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return opFixedSuccess({\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n });\n } else {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n}\n\ntype Parser = (s: string) => TalerUri | undefined;\nconst parsers: { [A in TalerUriAction]: Parser } = {\n [TalerUriAction.Pay]: parsePayUri,\n [TalerUriAction.PayPull]: parsePayPullUri,\n [TalerUriAction.PayPush]: parsePayPushUri,\n [TalerUriAction.PayTemplate]: parsePayTemplateUri,\n [TalerUriAction.Restore]: parseRestoreUri,\n [TalerUriAction.Refund]: parseRefundUri,\n [TalerUriAction.Withdraw]: parseWithdrawUri,\n [TalerUriAction.DevExperiment]: parseDevExperimentUri,\n [TalerUriAction.WithdrawExchange]: parseWithdrawExchangeUri,\n [TalerUriAction.AddExchange]: parseAddExchangeUri,\n};\n\nexport function parseTalerUri(string: string): TalerUri | undefined {\n const https = string.startsWith(\"taler://\");\n const http = string.startsWith(\"taler+http://\");\n if (!https && !http) return undefined;\n const actionStart = https ? 8 : 13;\n const actionEnd = string.indexOf(\"/\", actionStart + 1);\n const action = string.substring(actionStart, actionEnd);\n const found = Object.values(TalerUriAction).find((x) => x === action);\n if (!found) return undefined;\n return parsers[found](string);\n}\n\nexport function stringifyTalerUri(uri: TalerUri): string {\n switch (uri.type) {\n case TalerUriAction.DevExperiment: {\n return stringifyDevExperimentUri(uri);\n }\n case TalerUriAction.Pay: {\n return stringifyPayUri(uri);\n }\n case TalerUriAction.PayPull: {\n return stringifyPayPullUri(uri);\n }\n case TalerUriAction.PayPush: {\n return stringifyPayPushUri(uri);\n }\n case TalerUriAction.PayTemplate: {\n return stringifyPayTemplateUri(uri);\n }\n case TalerUriAction.Restore: {\n return stringifyRestoreUri(uri);\n }\n case TalerUriAction.Refund: {\n return stringifyRefundUri(uri);\n }\n case TalerUriAction.Withdraw: {\n return stringifyWithdrawUri(uri);\n }\n case TalerUriAction.WithdrawExchange: {\n return stringifyWithdrawExchange(uri);\n }\n case TalerUriAction.AddExchange: {\n return stringifyAddExchange(uri);\n }\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 type: TalerUriAction.Pay,\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n uriString: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(uriString, TalerUriAction.PayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi.rest.split(\"?\");\n\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n\n const q = new URLSearchParams(c[1] ?? \"\");\n const params: Record<string, string> = {};\n q.forEach((v, k) => {\n params[k] = v;\n });\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayTemplate,\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPush);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPush,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPull);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPull,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parseWithdrawExchangeUri(\n s: string,\n): WithdrawExchangeUri | undefined {\n const pi = parseProtoInfo(s, \"withdraw-exchange\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 1) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;\n const pathSegments = parts.slice(1, parts.length - 1);\n const hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n const q = new URLSearchParams(c[1] ?? \"\");\n const amount = (q.get(\"a\") ?? undefined) as AmountString | undefined;\n\n return {\n type: TalerUriAction.WithdrawExchange,\n exchangeBaseUrl,\n exchangePub: exchangePub != \"\" ? exchangePub : undefined,\n amount,\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.Refund,\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 parts = c[0].split(\"/\");\n return {\n type: TalerUriAction.DevExperiment,\n devExperimentId: parts[0],\n };\n}\n\nexport function parseRestoreUri(uri: string): BackupRestoreUri | undefined {\n const pi = parseProtoInfo(uri, \"restore\");\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\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<string>();\n parts[1].split(\",\").map((name) => {\n const url = canonicalizeBaseUrl(\n `${pi.innerProto}://${decodeURIComponent(name)}/`,\n );\n providers.push(url);\n });\n return {\n type: TalerUriAction.Restore,\n walletRootPriv,\n providers,\n };\n}\n\n// ================================================\n// To string functions\n// ================================================\n\nexport function stringifyPayUri({\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n}: Omit<PayUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, {\n c: claimToken,\n n: noncePriv,\n });\n return `${proto}://pay/${path}${orderId}/${sessionId}${query}`;\n}\n\nexport function stringifyPayPullUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPullUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://pay-pull/${path}${contractPriv}`;\n}\n\nexport function stringifyPayPushUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPushUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n\n return `${proto}://pay-push/${path}${contractPriv}`;\n}\n\nexport function stringifyRestoreUri({\n providers,\n walletRootPriv,\n}: Omit<BackupRestoreUri, \"type\">): string {\n const list = providers\n .map((url) => `${encodeURIComponent(new URL(url).href)}`)\n .join(\",\");\n return `taler://restore/${walletRootPriv}/${list}`;\n}\n\nexport function stringifyWithdrawExchange({\n exchangeBaseUrl,\n exchangePub,\n amount,\n}: Omit<WithdrawExchangeUri, \"type\">): string {\n const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {\n a: amount,\n });\n return `${proto}://withdraw-exchange/${path}${exchangePub ?? \"\"}${query}`;\n}\n\nexport function stringifyAddExchange({\n exchangeBaseUrl,\n}: Omit<AddExchangeUri, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://add-exchange/${path}`;\n}\n\nexport function stringifyDevExperimentUri({\n devExperimentId,\n}: Omit<DevExperimentUri, \"type\">): string {\n return `taler://dev-experiment/${devExperimentId}`;\n}\n\nexport function stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams,\n}: Omit<PayTemplateUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, templateParams);\n return `${proto}://pay-template/${path}${templateId}${query}`;\n}\n\nexport function stringifyRefundUri({\n merchantBaseUrl,\n orderId,\n}: Omit<RefundUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(merchantBaseUrl);\n return `${proto}://refund/${path}${orderId}/`;\n}\n\nexport function stringifyWithdrawUri({\n bankIntegrationApiBaseUrl,\n withdrawalOperationId,\n}: Omit<WithdrawUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(bankIntegrationApiBaseUrl);\n return `${proto}://withdraw/${path}${withdrawalOperationId}`;\n}\n\n/**\n * Use baseUrl to defined http or https\n * create path using host+port+pathname\n * use params to create a query parameter string or empty\n */\nfunction getUrlInfo(\n baseUrl: string,\n params: Record<string, string | undefined> = {},\n): { proto: string; path: string; query: string } {\n const url = new URL(baseUrl);\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 URL protocol in ${baseUrl}`);\n }\n let path = url.hostname;\n if (url.port) {\n path = path + \":\" + url.port;\n }\n if (url.pathname) {\n path = path + url.pathname;\n }\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n const qp = new URLSearchParams();\n let withParams = false;\n Object.entries(params).forEach(([name, value]) => {\n if (value !== undefined) {\n withParams = true;\n qp.append(name, value);\n }\n });\n const query = withParams ? \"?\" + qp.toString() : \"\";\n\n return { proto, path, query };\n}\n", "import { deprecate } from \"util\";\nimport { codecForAmountString } from \"../amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"../codec.js\";\nimport { PaytoString, codecForPaytoString } from \"../payto.js\";\nimport {\n AmountString,\n codecForInternationalizedString,\n codecForLocation,\n} from \"../taler-types.js\";\nimport { TalerUriString, codecForTalerUriString } from \"../taleruri.js\";\nimport {\n AbsoluteTime,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n} from \"../time.js\";\n\nexport type UserAndPassword = {\n username: string;\n password: string;\n};\n\nexport type UserAndToken = {\n username: string;\n token: AccessToken;\n};\n\ndeclare const opaque_OfficerAccount: unique symbol;\nexport type LockedAccount = string & { [opaque_OfficerAccount]: true };\n\ndeclare const opaque_OfficerId: unique symbol;\nexport type OfficerId = string & { [opaque_OfficerId]: true };\n\ndeclare const opaque_OfficerSigningKey: unique symbol;\nexport type SigningKey = Uint8Array & { [opaque_OfficerSigningKey]: true };\n\nexport interface OfficerAccount {\n id: OfficerId;\n signingKey: SigningKey;\n}\n\nexport type PaginationParams = {\n /**\n * row identifier as the starting point of the query\n */\n offset?: string;\n /**\n * max number of element in the result response\n * always greater than 0\n */\n limit?: number;\n /**\n * order\n */\n order?: \"asc\" | \"dec\";\n};\n\nexport type LongPollParams = {\n /**\n * milliseconds the server should wait for at least one result to be shown\n */\n timeoutMs?: number;\n};\n///\n/// HASH\n///\n\n// 64-byte hash code.\ntype HashCode = string;\n\ntype PaytoHash = string;\n\ntype AmlOfficerPublicKeyP = string;\n\n// 32-byte hash code.\ntype ShortHashCode = string;\n\n// 16-byte salt.\ntype WireSalt = string;\n\ntype SHA256HashCode = ShortHashCode;\n\ntype SHA512HashCode = HashCode;\n\n// 32-byte nonce value, must only be used once.\ntype CSNonce = string;\n\n// 32-byte nonce value, must only be used once.\ntype RefreshMasterSeed = string;\n\n// 32-byte value representing a point on Curve25519.\ntype Cs25519Point = string;\n\n// 32-byte value representing a scalar multiplier\n// for scalar operations on points on Curve25519.\ntype Cs25519Scalar = string;\n\n///\n/// KEYS\n///\n\n// 16-byte access token used to authorize access.\ntype ClaimToken = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPublicKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPrivateKey = string;\n\n// Edx25519 public keys are points on Curve25519 and represented using the\n// standard 256 bits Ed25519 compact format converted to Crockford\n// Base32.\ntype Edx25519PublicKey = string;\n\n// Edx25519 private keys are always points on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype Edx25519PrivateKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePublicKey = string;\n\n// Point on Curve25519 represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype CsRPublic = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePrivateKey = string;\n\ntype CoinPublicKey = EddsaPublicKey;\n\n// RSA public key converted to Crockford Base32.\ntype RsaPublicKey = string;\n\ntype Integer = number;\n\ntype WireTransferIdentifierRawP = string;\n// Subset of numbers: Integers in the\n// inclusive range 0 .. (2^53 - 1).\ntype SafeUint64 = number;\n\n// The string must be a data URL according to RFC 2397\n// with explicit mediatype and base64 parameters.\n//\n// data:<mediatype>;base64,<data>\n//\n// Supported mediatypes are image/jpeg and image/png.\n// Invalid strings will be rejected by the wallet.\ntype ImageDataUrl = string;\n\ntype WadId = string;\n\ntype Timestamp = TalerProtocolTimestamp;\n\ntype RelativeTime = TalerProtocolDuration;\n\nexport interface LoginToken {\n token: AccessToken;\n expiration: Timestamp;\n}\n\ndeclare const __ac_token: unique symbol;\nexport type AccessToken = string & {\n [__ac_token]: true;\n};\n\ndeclare const __officer_signature: unique symbol;\nexport type OfficerSignature = string & {\n [__officer_signature]: true;\n};\n\nexport namespace TalerAuthentication {\n export interface TokenRequest {\n // Service-defined scope for the token.\n // Typical scopes would be \"readonly\" or \"readwrite\".\n scope: string;\n\n // Server may impose its own upper bound\n // on the token validity duration\n duration?: RelativeTime;\n\n // Is the token refreshable into a new token during its\n // validity?\n // Refreshable tokens effectively provide indefinite\n // access if they are refreshed in time.\n refreshable?: boolean;\n }\n\n export interface TokenSuccessResponse {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n access_token: AccessToken;\n }\n export interface TokenSuccessResponseMerchant {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n token: AccessToken;\n }\n}\n\n// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html\nexport interface CurrencySpecification {\n // Name of the currency.\n name: string;\n\n // how many digits the user may enter after the decimal_separator\n num_fractional_input_digits: Integer;\n\n // Number of fractional digits to render in normal font and size.\n num_fractional_normal_digits: Integer;\n\n // Number of fractional digits to render always, if needed by\n // padding with zeros.\n num_fractional_trailing_zero_digits: Integer;\n\n // map of powers of 10 to alternative currency names / symbols, must\n // always have an entry under \"0\" that defines the base name,\n // e.g. \"0 => \u20AC\" or \"3 => k\u20AC\". For BTC, would be \"0 => BTC, -3 => mBTC\".\n // Communicates the currency symbol to be used.\n alt_unit_names: { [log10: string]: string };\n}\n\n//FIXME: implement this codec\nexport const codecForAccessToken = codecForString as () => Codec<AccessToken>;\nexport const codecForTokenSuccessResponse =\n (): Codec<TalerAuthentication.TokenSuccessResponse> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponse>()\n .property(\"access_token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponse\");\n\nexport const codecForTokenSuccessResponseMerchant =\n (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()\n .property(\"token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponseMerchant\");\n\nexport const codecForCurrencySpecificiation =\n (): Codec<CurrencySpecification> =>\n buildCodecForObject<CurrencySpecification>()\n .property(\"name\", codecForString())\n .property(\"num_fractional_input_digits\", codecForNumber())\n .property(\"num_fractional_normal_digits\", codecForNumber())\n .property(\"num_fractional_trailing_zero_digits\", codecForNumber())\n .property(\"alt_unit_names\", codecForMap(codecForString()))\n .build(\"CurrencySpecification\");\n\nexport const codecForIntegrationBankConfig =\n (): Codec<TalerCorebankApi.IntegrationConfig> =>\n buildCodecForObject<TalerCorebankApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .build(\"TalerCorebankApi.IntegrationConfig\");\n\nexport const codecForCoreBankConfig = (): Codec<TalerCorebankApi.Config> =>\n buildCodecForObject<TalerCorebankApi.Config>()\n .property(\"name\", codecForConstString(\"libeufin-bank\"))\n .property(\"version\", codecForString())\n .property(\"bank_name\", codecForString())\n .property(\"allow_conversion\", codecForBoolean())\n .property(\"allow_registrations\", codecForBoolean())\n .property(\"allow_deletions\", codecForBoolean())\n .property(\"allow_edit_name\", codecForBoolean())\n .property(\"allow_edit_cashout_payto_uri\", codecForBoolean())\n .property(\"default_debit_threshold\", codecForAmountString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"supported_tan_channels\",\n codecForList(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\"wire_type\", codecForString())\n .build(\"TalerCorebankApi.Config\");\n\n//FIXME: implement this codec\nexport const codecForURN = codecForString;\n\nexport const codecForExchangeConfigInfo =\n (): Codec<TalerMerchantApi.ExchangeConfigInfo> =>\n buildCodecForObject<TalerMerchantApi.ExchangeConfigInfo>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"master_pub\", codecForString())\n .build(\"TalerMerchantApi.ExchangeConfigInfo\");\n\nexport const codecForMerchantConfig =\n (): Codec<TalerMerchantApi.VersionResponse> =>\n buildCodecForObject<TalerMerchantApi.VersionResponse>()\n .property(\"name\", codecForConstString(\"taler-merchant\"))\n .property(\"currency\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currencies\", codecForMap(codecForCurrencySpecificiation()))\n .property(\"exchanges\", codecForList(codecForExchangeConfigInfo()))\n .build(\"TalerMerchantApi.VersionResponse\");\n\nexport const codecForClaimResponse =\n (): Codec<TalerMerchantApi.ClaimResponse> =>\n buildCodecForObject<TalerMerchantApi.ClaimResponse>()\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.ClaimResponse\");\n\nexport const codecForPaymentResponse =\n (): Codec<TalerMerchantApi.PaymentResponse> =>\n buildCodecForObject<TalerMerchantApi.PaymentResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForStatusPaid = (): Codec<TalerMerchantApi.StatusPaid> =>\n buildCodecForObject<TalerMerchantApi.StatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refunded\", codecForBoolean())\n .property(\"type\", codecForConstString(\"paid\"))\n .build(\"TalerMerchantApi.StatusPaid\");\n\nexport const codecForStatusGoto =\n (): Codec<TalerMerchantApi.StatusGotoResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusGotoResponse>()\n .property(\"public_reorder_url\", codecForURL())\n .property(\"type\", codecForConstString(\"goto\"))\n .build(\"TalerMerchantApi.StatusGotoResponse\");\n\nexport const codecForStatusStatusUnpaid =\n (): Codec<TalerMerchantApi.StatusUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusUnpaidResponse>()\n .property(\"type\", codecForConstString(\"unpaid\"))\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForPaidRefundStatusResponse =\n (): Codec<TalerMerchantApi.PaidRefundStatusResponse> =>\n buildCodecForObject<TalerMerchantApi.PaidRefundStatusResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"refunded\", codecForBoolean())\n .build(\"TalerMerchantApi.PaidRefundStatusResponse\");\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse =\n (): Codec<TalerMerchantApi.AbortResponse> =>\n buildCodecForObject<TalerMerchantApi.AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForWalletRefundResponse =\n (): Codec<TalerMerchantApi.WalletRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.WalletRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantCoinRefundStatus\");\n\nexport const codecForQueryInstancesResponse =\n (): Codec<TalerMerchantApi.QueryInstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.QueryInstancesResponse>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"merchant_pub\", codecForString())\n .property(\"address\", codecForLocation())\n .property(\"jurisdiction\", codecForLocation())\n .property(\"use_stefan\", codecForBoolean())\n .property(\"default_wire_transfer_delay\", codecForDuration)\n .property(\"default_pay_delay\", codecForDuration)\n .property(\n \"auth\",\n buildCodecForObject<{\n method: \"external\" | \"token\";\n }>()\n .property(\n \"method\",\n codecForEither(\n codecForConstString(\"token\"),\n codecForConstString(\"external\"),\n ),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse.auth\"),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse\");\n\nexport const codecForAccountKycRedirects =\n (): Codec<TalerMerchantApi.AccountKycRedirects> =>\n buildCodecForObject<TalerMerchantApi.AccountKycRedirects>()\n .property(\n \"pending_kycs\",\n codecForList(codecForMerchantAccountKycRedirect()),\n )\n .property(\"timeout_kycs\", codecForList(codecForExchangeKycTimeout()))\n\n .build(\"TalerMerchantApi.AccountKycRedirects\");\n\nexport const codecForMerchantAccountKycRedirect =\n (): Codec<TalerMerchantApi.MerchantAccountKycRedirect> =>\n buildCodecForObject<TalerMerchantApi.MerchantAccountKycRedirect>()\n .property(\"kyc_url\", codecForURL())\n .property(\"aml_status\", codecForNumber())\n .property(\"exchange_url\", codecForURL())\n .property(\"payto_uri\", codecForPaytoString())\n .build(\"TalerMerchantApi.MerchantAccountKycRedirect\");\n\nexport const codecForExchangeKycTimeout =\n (): Codec<TalerMerchantApi.ExchangeKycTimeout> =>\n buildCodecForObject<TalerMerchantApi.ExchangeKycTimeout>()\n .property(\"exchange_url\", codecForURL())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .build(\"TalerMerchantApi.ExchangeKycTimeout\");\n\nexport const codecForAccountAddResponse =\n (): Codec<TalerMerchantApi.AccountAddResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountAddResponse>()\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .build(\"TalerMerchantApi.AccountAddResponse\");\n\nexport const codecForAccountsSummaryResponse =\n (): Codec<TalerMerchantApi.AccountsSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountsSummaryResponse>()\n .property(\"accounts\", codecForList(codecForBankAccountSummaryEntry()))\n .build(\"TalerMerchantApi.AccountsSummaryResponse\");\n\nexport const codecForBankAccountSummaryEntry =\n (): Codec<TalerMerchantApi.BankAccountSummaryEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountSummaryEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .build(\"TalerMerchantApi.BankAccountSummaryEntry\");\n\nexport const codecForBankAccountEntry =\n (): Codec<TalerMerchantApi.BankAccountEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .property(\"credit_facade_url\", codecOptional(codecForURL()))\n .property(\"active\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.BankAccountEntry\");\n\nexport const codecForInventorySummaryResponse =\n (): Codec<TalerMerchantApi.InventorySummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.InventorySummaryResponse>()\n .property(\"products\", codecForList(codecForInventoryEntry()))\n .build(\"TalerMerchantApi.InventorySummaryResponse\");\n\nexport const codecForInventoryEntry =\n (): Codec<TalerMerchantApi.InventoryEntry> =>\n buildCodecForObject<TalerMerchantApi.InventoryEntry>()\n .property(\"product_id\", codecForString())\n .property(\"product_serial\", codecForNumber())\n .build(\"TalerMerchantApi.InventoryEntry\");\n\nexport const codecForProductDetail =\n (): Codec<TalerMerchantApi.ProductDetail> =>\n buildCodecForObject<TalerMerchantApi.ProductDetail>()\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"unit\", codecForString())\n .property(\"price\", codecForAmountString())\n .property(\"image\", codecForString())\n .property(\"taxes\", codecForList(codecForTax()))\n .property(\"address\", codecForLocation())\n .property(\"next_restock\", codecForTimestamp)\n .property(\"total_stock\", codecForNumber())\n .property(\"total_sold\", codecForNumber())\n .property(\"total_lost\", codecForNumber())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"TalerMerchantApi.ProductDetail\");\n\nexport const codecForTax = (): Codec<TalerMerchantApi.Tax> =>\n buildCodecForObject<TalerMerchantApi.Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForAmountString())\n .build(\"TalerMerchantApi.Tax\");\n\nexport const codecForPostOrderResponse =\n (): Codec<TalerMerchantApi.PostOrderResponse> =>\n buildCodecForObject<TalerMerchantApi.PostOrderResponse>()\n .property(\"order_id\", codecForString())\n .property(\"token\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.PostOrderResponse\");\n\nexport const codecForOutOfStockResponse =\n (): Codec<TalerMerchantApi.OutOfStockResponse> =>\n buildCodecForObject<TalerMerchantApi.OutOfStockResponse>()\n .property(\"product_id\", codecForString())\n .property(\"available_quantity\", codecForNumber())\n .property(\"requested_quantity\", codecForNumber())\n .property(\"restock_expected\", codecForTimestamp)\n .build(\"TalerMerchantApi.OutOfStockResponse\");\n\nexport const codecForOrderHistory = (): Codec<TalerMerchantApi.OrderHistory> =>\n buildCodecForObject<TalerMerchantApi.OrderHistory>()\n .property(\"orders\", codecForList(codecForOrderHistoryEntry()))\n .build(\"TalerMerchantApi.OrderHistory\");\n\nexport const codecForOrderHistoryEntry =\n (): Codec<TalerMerchantApi.OrderHistoryEntry> =>\n buildCodecForObject<TalerMerchantApi.OrderHistoryEntry>()\n .property(\"order_id\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"refundable\", codecForBoolean())\n .property(\"paid\", codecForBoolean())\n .build(\"TalerMerchantApi.OrderHistoryEntry\");\n\nexport const codecForMerchant = (): Codec<TalerMerchantApi.Merchant> =>\n buildCodecForObject<TalerMerchantApi.Merchant>()\n .property(\"name\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"TalerMerchantApi.MerchantInfo\");\n\nexport const codecForExchange = (): Codec<TalerMerchantApi.Exchange> =>\n buildCodecForObject<TalerMerchantApi.Exchange>()\n .property(\"master_pub\", codecForString())\n .property(\"priority\", codecForNumber())\n .property(\"url\", codecForString())\n .build(\"TalerMerchantApi.Exchange\");\n\nexport const codecForContractTerms =\n (): Codec<TalerMerchantApi.ContractTerms> =>\n buildCodecForObject<TalerMerchantApi.ContractTerms>()\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(\n \"summary_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"merchant\", codecForMerchant())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchange()))\n .property(\"products\", codecForList(codecForProduct()))\n .property(\"extra\", codecForAny())\n .build(\"TalerMerchantApi.ContractTerms\");\n\nexport const codecForProduct = (): Codec<TalerMerchantApi.Product> =>\n buildCodecForObject<TalerMerchantApi.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(codecForAmountString()))\n .property(\"image\", codecOptional(codecForString()))\n .property(\"taxes\", codecOptional(codecForList(codecForTax())))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .build(\"TalerMerchantApi.Product\");\n\nexport const codecForCheckPaymentPaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentPaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentPaidResponse>()\n .property(\"order_status\", codecForConstString(\"paid\"))\n .property(\"refunded\", codecForBoolean())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"wired\", codecForBoolean())\n .property(\"deposit_total\", codecForAmountString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"wire_reports\", codecForList(codecForTransactionWireReport()))\n .property(\"wire_details\", codecForList(codecForTransactionWireTransfer()))\n .property(\"refund_details\", codecForList(codecForRefundDetails()))\n .property(\"order_status_url\", codecForURL())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentUnpaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentUnpaidResponse>()\n .property(\"order_status\", codecForConstString(\"unpaid\"))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .property(\"creation_time\", codecForTimestamp)\n .property(\"summary\", codecForString())\n .property(\"total_amount\", codecForAmountString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"already_paid_fulfillment_url\", codecOptional(codecForString()))\n .property(\"order_status_url\", codecForString())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentClaimedResponse =\n (): Codec<TalerMerchantApi.CheckPaymentClaimedResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentClaimedResponse>()\n .property(\"order_status\", codecForConstString(\"claimed\"))\n .property(\"contract_terms\", codecForContractTerms())\n .build(\"TalerMerchantApi.CheckPaymentClaimedResponse\");\n\nexport const codecForMerchantOrderPrivateStatusResponse =\n (): Codec<TalerMerchantApi.MerchantOrderStatusResponse> =>\n buildCodecForUnion<TalerMerchantApi.MerchantOrderStatusResponse>()\n .discriminateOn(\"order_status\")\n .alternative(\"paid\", codecForCheckPaymentPaidResponse())\n .alternative(\"unpaid\", codecForCheckPaymentUnpaidResponse())\n .alternative(\"claimed\", codecForCheckPaymentClaimedResponse())\n .build(\"TalerMerchantApi.MerchantOrderStatusResponse\");\n\nexport const codecForRefundDetails =\n (): Codec<TalerMerchantApi.RefundDetails> =>\n buildCodecForObject<TalerMerchantApi.RefundDetails>()\n .property(\"reason\", codecForString())\n .property(\"pending\", codecForBoolean())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .build(\"TalerMerchantApi.RefundDetails\");\n\nexport const codecForTransactionWireTransfer =\n (): Codec<TalerMerchantApi.TransactionWireTransfer> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireTransfer>()\n .property(\"exchange_url\", codecForURL())\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"confirmed\", codecForBoolean())\n .build(\"TalerMerchantApi.TransactionWireTransfer\");\n\nexport const codecForTransactionWireReport =\n (): Codec<TalerMerchantApi.TransactionWireReport> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireReport>()\n .property(\"code\", codecForNumber())\n .property(\"hint\", codecForString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"coin_pub\", codecForString())\n .build(\"TalerMerchantApi.TransactionWireReport\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<TalerMerchantApi.MerchantRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.MerchantRefundResponse>()\n .property(\"taler_refund_uri\", codecForTalerUriString())\n .property(\"h_contract\", codecForString())\n .build(\"TalerMerchantApi.MerchantRefundResponse\");\n\nexport const codecForTansferList = (): Codec<TalerMerchantApi.TransferList> =>\n buildCodecForObject<TalerMerchantApi.TransferList>()\n .property(\"transfers\", codecForList(codecForTransferDetails()))\n .build(\"TalerMerchantApi.TransferList\");\n\nexport const codecForTransferDetails =\n (): Codec<TalerMerchantApi.TransferDetails> =>\n buildCodecForObject<TalerMerchantApi.TransferDetails>()\n .property(\"credit_amount\", codecForAmountString())\n .property(\"wtid\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"exchange_url\", codecForURL())\n .property(\"transfer_serial_id\", codecForNumber())\n .property(\"execution_time\", codecOptional(codecForTimestamp))\n .property(\"verified\", codecOptional(codecForBoolean()))\n .property(\"confirmed\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.TransferDetails\");\n\nexport const codecForOtpDeviceSummaryResponse =\n (): Codec<TalerMerchantApi.OtpDeviceSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceSummaryResponse>()\n .property(\"otp_devices\", codecForList(codecForOtpDeviceEntry()))\n .build(\"TalerMerchantApi.OtpDeviceSummaryResponse\");\n\nexport const codecForOtpDeviceEntry =\n (): Codec<TalerMerchantApi.OtpDeviceEntry> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceEntry>()\n .property(\"otp_device_id\", codecForString())\n .property(\"device_description\", codecForString())\n .build(\"TalerMerchantApi.OtpDeviceEntry\");\n\nexport const codecForOtpDeviceDetails =\n (): Codec<TalerMerchantApi.OtpDeviceDetails> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceDetails>()\n .property(\"device_description\", codecForString())\n .property(\"otp_algorithm\", codecForNumber())\n .property(\"otp_ctr\", codecOptional(codecForNumber()))\n .property(\"otp_timestamp\", codecForNumber())\n .property(\"otp_code\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.OtpDeviceDetails\");\n\nexport const codecForTemplateSummaryResponse =\n (): Codec<TalerMerchantApi.TemplateSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.TemplateSummaryResponse>()\n .property(\"templates\", codecForList(codecForTemplateEntry()))\n .build(\"TalerMerchantApi.TemplateSummaryResponse\");\n\nexport const codecForTemplateEntry =\n (): Codec<TalerMerchantApi.TemplateEntry> =>\n buildCodecForObject<TalerMerchantApi.TemplateEntry>()\n .property(\"template_id\", codecForString())\n .property(\"template_description\", codecForString())\n .build(\"TalerMerchantApi.TemplateEntry\");\n\nexport const codecForTemplateDetails =\n (): Codec<TalerMerchantApi.TemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateDetails>()\n .property(\"template_description\", codecForString())\n .property(\"otp_id\", codecOptional(codecForString()))\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\"editable_defaults\", codecOptional(codecForTemplateContractDetailsDefaults()))\n .build(\"TalerMerchantApi.TemplateDetails\");\n\nexport const codecForTemplateContractDetails =\n (): Codec<TalerMerchantApi.TemplateContractDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetails>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecForNumber())\n .property(\"pay_duration\", codecForDuration)\n .build(\"TalerMerchantApi.TemplateContractDetails\");\n\nexport const codecForTemplateContractDetailsDefaults =\n (): Codec<TalerMerchantApi.TemplateContractDetailsDefaults> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetailsDefaults>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .property(\"pay_duration\", codecOptional(codecForDuration))\n .build(\"TalerMerchantApi.TemplateContractDetailsDefaults\");\n\nexport const codecForWalletTemplateDetails =\n (): Codec<TalerMerchantApi.WalletTemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.WalletTemplateDetails>()\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\"editable_defaults\", codecOptional(codecForTemplateContractDetailsDefaults()))\n .build(\"TalerMerchantApi.WalletTemplateDetails\");\n\nexport const codecForWebhookSummaryResponse =\n (): Codec<TalerMerchantApi.WebhookSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.WebhookSummaryResponse>()\n .property(\"webhooks\", codecForList(codecForWebhookEntry()))\n .build(\"TalerMerchantApi.WebhookSummaryResponse\");\n\nexport const codecForWebhookEntry = (): Codec<TalerMerchantApi.WebhookEntry> =>\n buildCodecForObject<TalerMerchantApi.WebhookEntry>()\n .property(\"webhook_id\", codecForString())\n .property(\"event_type\", codecForString())\n .build(\"TalerMerchantApi.WebhookEntry\");\n\nexport const codecForWebhookDetails =\n (): Codec<TalerMerchantApi.WebhookDetails> =>\n buildCodecForObject<TalerMerchantApi.WebhookDetails>()\n .property(\"event_type\", codecForString())\n .property(\"url\", codecForString())\n .property(\"http_method\", codecForString())\n .property(\"header_template\", codecOptional(codecForString()))\n .property(\"body_template\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.WebhookDetails\");\n\nexport const codecForTokenFamilyKind =\n (): Codec<TalerMerchantApi.TokenFamilyKind> =>\n codecForEither(\n codecForConstString(\"discount\"),\n codecForConstString(\"subscription\"),\n ) as any; //FIXME: create a codecForEnum\nexport const codecForTokenFamilyDetails =\n (): Codec<TalerMerchantApi.TokenFamilyDetails> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilyDetails>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"duration\", codecForDuration)\n .property(\"kind\", codecForTokenFamilyKind())\n .property(\"issued\", codecForNumber())\n .property(\"redeemed\", codecForNumber())\n .build(\"TalerMerchantApi.TokenFamilyDetails\");\n\nexport const codecForTokenFamiliesList =\n (): Codec<TalerMerchantApi.TokenFamiliesList> =>\n buildCodecForObject<TalerMerchantApi.TokenFamiliesList>()\n .property(\"token_families\", codecForList(codecForTokenFamilySummary()))\n .build(\"TalerMerchantApi.TokenFamiliesList\");\n\nexport const codecForTokenFamilySummary =\n (): Codec<TalerMerchantApi.TokenFamilySummary> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilySummary>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"kind\", codecForTokenFamilyKind())\n .build(\"TalerMerchantApi.TokenFamilySummary\");\n\nexport const codecForInstancesResponse =\n (): Codec<TalerMerchantApi.InstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.InstancesResponse>()\n .property(\"instances\", codecForList(codecForInstance()))\n .build(\"TalerMerchantApi.InstancesResponse\");\n\nexport const codecForInstance = (): Codec<TalerMerchantApi.Instance> =>\n buildCodecForObject<TalerMerchantApi.Instance>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"id\", codecForString())\n .property(\"merchant_pub\", codecForString())\n .property(\"payment_targets\", codecForList(codecForString()))\n .property(\"deleted\", codecForBoolean())\n .build(\"TalerMerchantApi.Instance\");\n\nexport const codecForExchangeConfig =\n (): Codec<TalerExchangeApi.ExchangeVersionResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeVersionResponse>()\n .property(\"version\", codecForString())\n .property(\"name\", codecForConstString(\"taler-exchange\"))\n .property(\"implementation\", codecOptional(codecForURN()))\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"supported_kyc_requirements\", codecForList(codecForString()))\n .build(\"TalerExchangeApi.ExchangeVersionResponse\");\n\nexport const codecForExchangeKeys =\n (): Codec<TalerExchangeApi.ExchangeKeysResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeKeysResponse>()\n .property(\"version\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"TalerExchangeApi.ExchangeKeysResponse\");\n\nconst codecForBalance = (): Codec<TalerCorebankApi.Balance> =>\n buildCodecForObject<TalerCorebankApi.Balance>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"credit_debit_indicator\",\n codecForEither(\n codecForConstString(\"credit\"),\n codecForConstString(\"debit\"),\n ),\n )\n .build(\"TalerCorebankApi.Balance\");\n\nconst codecForPublicAccount = (): Codec<TalerCorebankApi.PublicAccount> =>\n buildCodecForObject<TalerCorebankApi.PublicAccount>()\n .property(\"username\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.PublicAccount\");\n\nexport const codecForPublicAccountsResponse =\n (): Codec<TalerCorebankApi.PublicAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.PublicAccountsResponse>()\n .property(\"public_accounts\", codecForList(codecForPublicAccount()))\n .build(\"TalerCorebankApi.PublicAccountsResponse\");\n\nexport const codecForAccountMinimalData =\n (): Codec<TalerCorebankApi.AccountMinimalData> =>\n buildCodecForObject<TalerCorebankApi.AccountMinimalData>()\n .property(\"username\", codecForString())\n .property(\"name\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"balance\", codecForBalance())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.AccountMinimalData\");\n\nexport const codecForListBankAccountsResponse =\n (): Codec<TalerCorebankApi.ListBankAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.ListBankAccountsResponse>()\n .property(\"accounts\", codecForList(codecForAccountMinimalData()))\n .build(\"TalerCorebankApi.ListBankAccountsResponse\");\n\nexport const codecForAccountData = (): Codec<TalerCorebankApi.AccountData> =>\n buildCodecForObject<TalerCorebankApi.AccountData>()\n .property(\"name\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"contact_data\", codecOptional(codecForChallengeContactData()))\n .property(\"cashout_payto_uri\", codecOptional(codecForPaytoString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"tan_channel\",\n codecOptional(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountData\");\n\nexport const codecForChallengeContactData =\n (): Codec<TalerCorebankApi.ChallengeContactData> =>\n buildCodecForObject<TalerCorebankApi.ChallengeContactData>()\n .property(\"email\", codecOptional(codecForString()))\n .property(\"phone\", codecOptional(codecForString()))\n .build(\"TalerCorebankApi.ChallengeContactData\");\n\nexport const codecForWithdrawalPublicInfo =\n (): Codec<TalerCorebankApi.WithdrawalPublicInfo> =>\n buildCodecForObject<TalerCorebankApi.WithdrawalPublicInfo>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"username\", codecForString())\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\n \"selected_exchange_account\",\n codecOptional(codecForPaytoString()),\n )\n .build(\"TalerCorebankApi.WithdrawalPublicInfo\");\n\nexport const codecForBankAccountTransactionsResponse =\n (): Codec<TalerCorebankApi.BankAccountTransactionsResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionsResponse>()\n .property(\n \"transactions\",\n codecForList(codecForBankAccountTransactionInfo()),\n )\n .build(\"TalerCorebankApi.BankAccountTransactionsResponse\");\n\nexport const codecForBankAccountTransactionInfo =\n (): Codec<TalerCorebankApi.BankAccountTransactionInfo> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionInfo>()\n .property(\"creditor_payto_uri\", codecForPaytoString())\n .property(\"debtor_payto_uri\", codecForPaytoString())\n .property(\"amount\", codecForAmountString())\n .property(\n \"direction\",\n codecForEither(\n codecForConstString(\"debit\"),\n codecForConstString(\"credit\"),\n ),\n )\n .property(\"subject\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"date\", codecForTimestamp)\n .build(\"TalerCorebankApi.BankAccountTransactionInfo\");\n\nexport const codecForCreateTransactionResponse =\n (): Codec<TalerCorebankApi.CreateTransactionResponse> =>\n buildCodecForObject<TalerCorebankApi.CreateTransactionResponse>()\n .property(\"row_id\", codecForNumber())\n .build(\"TalerCorebankApi.CreateTransactionResponse\");\n\nexport const codecForRegisterAccountResponse =\n (): Codec<TalerCorebankApi.RegisterAccountResponse> =>\n buildCodecForObject<TalerCorebankApi.RegisterAccountResponse>()\n .property(\"internal_payto_uri\", codecForPaytoString())\n .build(\"TalerCorebankApi.RegisterAccountResponse\");\n\nexport const codecForBankAccountCreateWithdrawalResponse =\n (): Codec<TalerCorebankApi.BankAccountCreateWithdrawalResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountCreateWithdrawalResponse>()\n .property(\"taler_withdraw_uri\", codecForTalerUriString())\n .property(\"withdrawal_id\", codecForString())\n .build(\"TalerCorebankApi.BankAccountCreateWithdrawalResponse\");\n\nexport const codecForCashoutPending =\n (): Codec<TalerCorebankApi.CashoutResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutResponse>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutPending\");\n\nexport const codecForCashoutConversionResponse =\n (): Codec<TalerBankConversionApi.CashoutConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashoutConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashoutConversionResponse\");\n\nexport const codecForCashinConversionResponse =\n (): Codec<TalerBankConversionApi.CashinConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashinConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashinConversionResponse\");\n\nexport const codecForCashouts = (): Codec<TalerCorebankApi.Cashouts> =>\n buildCodecForObject<TalerCorebankApi.Cashouts>()\n .property(\"cashouts\", codecForList(codecForCashoutInfo()))\n .build(\"TalerCorebankApi.Cashouts\");\n\nexport const codecForCashoutInfo = (): Codec<TalerCorebankApi.CashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.CashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutInfo\");\n\nexport const codecForGlobalCashouts =\n (): Codec<TalerCorebankApi.GlobalCashouts> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashouts>()\n .property(\"cashouts\", codecForList(codecForGlobalCashoutInfo()))\n .build(\"TalerCorebankApi.GlobalCashouts\");\n\nexport const codecForGlobalCashoutInfo =\n (): Codec<TalerCorebankApi.GlobalCashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .property(\"username\", codecForString())\n .build(\"TalerCorebankApi.GlobalCashoutInfo\");\n\nexport const codecForCashoutStatusResponse =\n (): Codec<TalerCorebankApi.CashoutStatusResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutStatusResponse>()\n .property(\"amount_debit\", codecForAmountString())\n .property(\"amount_credit\", codecForAmountString())\n .property(\"subject\", codecForString())\n .property(\"creation_time\", codecForTimestamp)\n .build(\"TalerCorebankApi.CashoutStatusResponse\");\n\nexport const codecForConversionRatesResponse =\n (): Codec<TalerCorebankApi.ConversionRatesResponse> =>\n buildCodecForObject<TalerCorebankApi.ConversionRatesResponse>()\n .property(\"buy_at_ratio\", codecForDecimalNumber())\n .property(\"buy_in_fee\", codecForDecimalNumber())\n .property(\"sell_at_ratio\", codecForDecimalNumber())\n .property(\"sell_out_fee\", codecForDecimalNumber())\n .build(\"TalerCorebankApi.ConversionRatesResponse\");\n\nexport const codecForMonitorResponse =\n (): Codec<TalerCorebankApi.MonitorResponse> =>\n buildCodecForUnion<TalerCorebankApi.MonitorResponse>()\n .discriminateOn(\"type\")\n .alternative(\"no-conversions\", codecForMonitorNoConversion())\n .alternative(\"with-conversions\", codecForMonitorWithCashout())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForMonitorNoConversion =\n (): Codec<TalerCorebankApi.MonitorNoConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorNoConversion>()\n .property(\"type\", codecForConstString(\"no-conversions\"))\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorJustPayouts\");\n\nexport const codecForMonitorWithCashout =\n (): Codec<TalerCorebankApi.MonitorWithConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorWithConversion>()\n .property(\"type\", codecForConstString(\"with-conversions\"))\n .property(\"cashinCount\", codecForNumber())\n .property(\"cashinFiatVolume\", codecForAmountString())\n .property(\"cashinRegionalVolume\", codecForAmountString())\n .property(\"cashoutCount\", codecForNumber())\n .property(\"cashoutFiatVolume\", codecForAmountString())\n .property(\"cashoutRegionalVolume\", codecForAmountString())\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorWithCashout\");\n\nexport const codecForBankVersion =\n (): Codec<TalerBankIntegrationApi.BankVersion> =>\n buildCodecForObject<TalerBankIntegrationApi.BankVersion>()\n .property(\"currency\", codecForCurrencyName())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForLibtoolVersion())\n .build(\"TalerBankIntegrationApi.BankVersion\");\n\nexport const codecForBankWithdrawalOperationStatus =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"sender_wire\", codecOptional(codecForPaytoString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .property(\"wire_types\", codecForList(codecForString()))\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\"selected_exchange_account\", codecOptional(codecForString()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationStatus\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationPostResponse\");\n\nexport const codecForRevenueConfig = (): Codec<TalerRevenueApi.RevenueConfig> =>\n buildCodecForObject<TalerRevenueApi.RevenueConfig>()\n .property(\"name\", codecForConstString(\"taler-revenue\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"TalerRevenueApi.RevenueConfig\");\n\nexport const codecForRevenueIncomingHistory =\n (): Codec<TalerRevenueApi.RevenueIncomingHistory> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForRevenueIncomingBankTransaction()),\n )\n .build(\"TalerRevenueApi.MerchantIncomingHistory\");\n\nexport const codecForRevenueIncomingBankTransaction =\n (): Codec<TalerRevenueApi.RevenueIncomingBankTransaction> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"row_id\", codecForNumber())\n .property(\"subject\", codecForString())\n .build(\"TalerRevenueApi.RevenueIncomingBankTransaction\");\n\nexport const codecForTransferResponse =\n (): Codec<TalerWireGatewayApi.TransferResponse> =>\n buildCodecForObject<TalerWireGatewayApi.TransferResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.TransferResponse\");\n\nexport const codecForIncomingHistory =\n (): Codec<TalerWireGatewayApi.IncomingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForIncomingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.IncomingHistory\");\n\nexport const codecForIncomingBankTransaction =\n (): Codec<TalerWireGatewayApi.IncomingBankTransaction> =>\n buildCodecForUnion<TalerWireGatewayApi.IncomingBankTransaction>()\n .discriminateOn(\"type\")\n .alternative(\"RESERVE\", codecForIncomingReserveTransaction())\n .alternative(\"WAD\", codecForIncomingWadTransaction())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForIncomingReserveTransaction =\n (): Codec<TalerWireGatewayApi.IncomingReserveTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingReserveTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"reserve_pub\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"RESERVE\"))\n .build(\"TalerWireGatewayApi.IncomingReserveTransaction\");\n\nexport const codecForIncomingWadTransaction =\n (): Codec<TalerWireGatewayApi.IncomingWadTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingWadTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"origin_exchange_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"WAD\"))\n .property(\"wad_id\", codecForString())\n .build(\"TalerWireGatewayApi.IncomingWadTransaction\");\n\nexport const codecForOutgoingHistory =\n (): Codec<TalerWireGatewayApi.OutgoingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingHistory>()\n .property(\"debit_account\", codecForPaytoString())\n .property(\n \"outgoing_transactions\",\n codecForList(codecForOutgoingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.OutgoingHistory\");\n\nexport const codecForOutgoingBankTransaction =\n (): Codec<TalerWireGatewayApi.OutgoingBankTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"exchange_base_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"wtid\", codecForString())\n .build(\"TalerWireGatewayApi.OutgoingBankTransaction\");\n\nexport const codecForAddIncomingResponse =\n (): Codec<TalerWireGatewayApi.AddIncomingResponse> =>\n buildCodecForObject<TalerWireGatewayApi.AddIncomingResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.AddIncomingResponse\");\n\nexport const codecForAmlRecords = (): Codec<TalerExchangeApi.AmlRecords> =>\n buildCodecForObject<TalerExchangeApi.AmlRecords>()\n .property(\"records\", codecForList(codecForAmlRecord()))\n .build(\"TalerExchangeApi.PublicAccountsResponse\");\n\nexport const codecForAmlRecord = (): Codec<TalerExchangeApi.AmlRecord> =>\n buildCodecForObject<TalerExchangeApi.AmlRecord>()\n .property(\"current_state\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .property(\"rowid\", codecForNumber())\n .property(\"threshold\", codecForAmountString())\n .build(\"TalerExchangeApi.AmlRecord\");\n\nexport const codecForAmlDecisionDetails =\n (): Codec<TalerExchangeApi.AmlDecisionDetails> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetails>()\n .property(\"aml_history\", codecForList(codecForAmlDecisionDetail()))\n .property(\"kyc_attributes\", codecForList(codecForKycDetail()))\n .build(\"TalerExchangeApi.AmlDecisionDetails\");\n\nexport const codecForAmlDecisionDetail =\n (): Codec<TalerExchangeApi.AmlDecisionDetail> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetail>()\n .property(\"justification\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"new_threshold\", codecForAmountString())\n .property(\"decider_pub\", codecForString())\n .build(\"TalerExchangeApi.AmlDecisionDetail\");\n\nexport const codecForChallenge = (): Codec<TalerCorebankApi.Challenge> =>\n buildCodecForObject<TalerCorebankApi.Challenge>()\n .property(\"challenge_id\", codecForNumber())\n .build(\"TalerCorebankApi.Challenge\");\n\nexport const codecForTanTransmission =\n (): Codec<TalerCorebankApi.TanTransmission> =>\n buildCodecForObject<TalerCorebankApi.TanTransmission>()\n .property(\n \"tan_channel\",\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n )\n .property(\"tan_info\", codecForString())\n .build(\"TalerCorebankApi.TanTransmission\");\n\ninterface KycDetail {\n provider_section: string;\n attributes?: Object;\n collection_time: Timestamp;\n expiration_time: Timestamp;\n}\nexport const codecForKycDetail = (): Codec<TalerExchangeApi.KycDetail> =>\n buildCodecForObject<TalerExchangeApi.KycDetail>()\n .property(\"provider_section\", codecForString())\n .property(\"attributes\", codecOptional(codecForAny()))\n .property(\"collection_time\", codecForTimestamp)\n .property(\"expiration_time\", codecForTimestamp)\n .build(\"TalerExchangeApi.KycDetail\");\n\nexport const codecForAmlDecision = (): Codec<TalerExchangeApi.AmlDecision> =>\n buildCodecForObject<TalerExchangeApi.AmlDecision>()\n .property(\"justification\", codecForString())\n .property(\"new_threshold\", codecForAmountString())\n .property(\"h_payto\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"officer_sig\", codecForString())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"kyc_requirements\", codecOptional(codecForList(codecForString())))\n .build(\"TalerExchangeApi.AmlDecision\");\n\n// version: string;\n\n// // Name of the API.\n// name: \"taler-conversion-info\";\n\n// // Currency used by this bank.\n// regional_currency: string;\n\n// // How the bank SPA should render this currency.\n// regional_currency_specification: CurrencySpecification;\n\n// // External currency used during conversion.\n// fiat_currency: string;\n\n// // How the bank SPA should render this currency.\n// fiat_currency_specification: CurrencySpecification;\n\n// Extra conversion rate information.\n// // Only present if server opts in to report the static conversion rate.\n// conversion_info?: {\n\n// // Fee to subtract after applying the cashin ratio.\n// cashin_fee: AmountString;\n\n// // Fee to subtract after applying the cashout ratio.\n// cashout_fee: AmountString;\n\n// // Minimum amount authorised for cashin, in fiat before conversion\n// cashin_min_amount: AmountString;\n\n// // Minimum amount authorised for cashout, in regional before conversion\n// cashout_min_amount: AmountString;\n\n// // Smallest possible regional amount, converted amount is rounded to this amount\n// cashin_tiny_amount: AmountString;\n\n// // Smallest possible fiat amount, converted amount is rounded to this amount\n// cashout_tiny_amount: AmountString;\n\n// // Rounding mode used during cashin conversion\n// cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n// // Rounding mode used during cashout conversion\n// cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n// }\nexport const codecForConversionInfo =\n (): Codec<TalerBankConversionApi.ConversionInfo> =>\n buildCodecForObject<TalerBankConversionApi.ConversionInfo>()\n .property(\"cashin_fee\", codecForAmountString())\n .property(\"cashin_min_amount\", codecForAmountString())\n .property(\"cashin_ratio\", codecForDecimalNumber())\n .property(\n \"cashin_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashin_tiny_amount\", codecForAmountString())\n .property(\"cashout_fee\", codecForAmountString())\n .property(\"cashout_min_amount\", codecForAmountString())\n .property(\"cashout_ratio\", codecForDecimalNumber())\n .property(\n \"cashout_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashout_tiny_amount\", codecForAmountString())\n .build(\"ConversionBankConfig.ConversionInfo\");\n\nexport const codecForConversionBankConfig =\n (): Codec<TalerBankConversionApi.IntegrationConfig> =>\n buildCodecForObject<TalerBankConversionApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .property(\"fiat_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n\n .property(\"conversion_rate\", codecForConversionInfo())\n .build(\"ConversionBankConfig.IntegrationConfig\");\n\n// export const codecFor =\n// (): Codec<TalerWireGatewayApi.PublicAccountsResponse> =>\n// buildCodecForObject<TalerWireGatewayApi.PublicAccountsResponse>()\n// .property(\"\", codecForString())\n// .build(\"TalerWireGatewayApi.PublicAccountsResponse\");\n\ntype EmailAddress = string;\ntype PhoneNumber = string;\ntype EddsaSignature = string;\n// base32 encoded RSA blinded signature.\ntype BlindedRsaSignature = string;\ntype Base32 = string;\n\ntype DecimalNumber = string;\ntype RsaSignature = string;\ntype Float = number;\ntype LibtoolVersion = string;\n// The type of a coin's blinded envelope depends on the cipher that is used\n// for signing with a denomination key.\ntype CoinEnvelope = RSACoinEnvelope | CSCoinEnvelope;\n// For denomination signatures based on RSA, the planchet is just a blinded\n// coin's public EdDSA key.\ninterface RSACoinEnvelope {\n cipher: \"RSA\" | \"RSA+age_restricted\";\n rsa_blinded_planchet: string; // Crockford Base32 encoded\n}\n// For denomination signatures based on Blind Clause-Schnorr, the planchet\n// consists of the public nonce and two Curve25519 scalars which are two\n// blinded challenges in the Blinded Clause-Schnorr signature scheme.\n// See https://taler.net/papers/cs-thesis.pdf for details.\ninterface CSCoinEnvelope {\n cipher: \"CS\" | \"CS+age_restricted\";\n cs_nonce: string; // Crockford Base32 encoded\n cs_blinded_c0: string; // Crockford Base32 encoded\n cs_blinded_c1: string; // Crockford Base32 encoded\n}\n// Secret for blinding/unblinding.\n// An RSA blinding secret, which is basically\n// a 256-bit nonce, converted to Crockford Base32.\ntype DenominationBlindingKeyP = string;\n\n//FIXME: implement this codec\nconst codecForURL = codecForString;\n//FIXME: implement this codec\nconst codecForLibtoolVersion = codecForString;\n//FIXME: implement this codec\nconst codecForCurrencyName = codecForString;\n//FIXME: implement this codec\nconst codecForDecimalNumber = codecForString;\n\nexport type WithdrawalOperationStatus =\n | \"pending\"\n | \"selected\"\n | \"aborted\"\n | \"confirmed\";\n\nexport namespace TalerWireGatewayApi {\n export interface TransferResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n\n export interface TransferRequest {\n // Nonce to make the request idempotent. Requests with the same\n // transaction_uid that differ in any of the other fields\n // are rejected.\n request_uid: HashCode;\n\n // Amount to transfer.\n amount: AmountString;\n\n // Base URL of the exchange. Shall be included by the bank gateway\n // in the appropriate section of the wire transfer details.\n exchange_base_url: string;\n\n // Wire transfer identifier chosen by the exchange,\n // used by the merchant to identify the Taler order(s)\n // associated with this wire transfer.\n wtid: ShortHashCode;\n\n // The recipient's account identifier as a payto URI.\n credit_account: PaytoString;\n }\n\n export interface IncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: IncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if incoming transaction is empty\n credit_account?: PaytoString;\n }\n\n // Union discriminated by the \"type\" field.\n export type IncomingBankTransaction =\n | IncomingReserveTransaction\n | IncomingWadTransaction;\n\n export interface IncomingReserveTransaction {\n type: \"RESERVE\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // The reserve public key extracted from the transaction details.\n reserve_pub: EddsaPublicKey;\n }\n\n export interface IncomingWadTransaction {\n type: \"WAD\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n credit_account: PaytoString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // Base URL of the exchange that originated the wad.\n origin_exchange_url: string;\n\n // The reserve public key extracted from the transaction details.\n wad_id: WadId;\n }\n\n export interface OutgoingHistory {\n // Array of outgoing transactions.\n outgoing_transactions: OutgoingBankTransaction[];\n\n // Payto URI to identify the sender of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if outgoing transactions is empty\n debit_account?: PaytoString;\n }\n\n export interface OutgoingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n credit_account: PaytoString;\n\n // The wire transfer ID in the outgoing transaction.\n wtid: ShortHashCode;\n\n // Base URL of the exchange.\n exchange_base_url: string;\n }\n\n export interface AddIncomingRequest {\n // Amount to transfer.\n amount: AmountString;\n\n // Reserve public key that is included in the wire transfer details\n // to identify the reserve that is being topped up.\n reserve_pub: EddsaPublicKey;\n\n // Account (as payto URI) that makes the wire transfer to the exchange.\n // Usually this account must be created by the test harness before this API is\n // used. An exception is the \"exchange-fakebank\", where any debit account can be\n // specified, as it is automatically created.\n debit_account: PaytoString;\n }\n\n export interface AddIncomingResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n}\n\nexport namespace TalerRevenueApi {\n export interface RevenueConfig {\n // Name of the API.\n name: \"taler-revenue\";\n\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this gateway.\n currency: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface RevenueIncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: RevenueIncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n credit_account: string;\n }\n\n export interface RevenueIncomingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: string;\n\n // The wire transfer subject.\n subject: string;\n }\n}\n\nexport namespace TalerBankConversionApi {\n export interface ConversionInfo {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n }\n\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n // Currency used by this bank.\n regional_currency: string;\n\n // How the bank SPA should render this currency.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency: string;\n\n // How the bank SPA should render this currency.\n fiat_currency_specification: CurrencySpecification;\n\n // Extra conversion rate information.\n // Only present if server opts in to report the static conversion rate.\n conversion_rate: ConversionInfo;\n }\n\n export interface CashinConversionResponse {\n // Amount that the user will get deducted from their fiat\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their regional\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export interface CashoutConversionResponse {\n // Amount that the user will get deducted from their regional\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their fiat\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export type RoundingMode = \"zero\" | \"up\" | \"nearest\";\n\n export interface ConversionRate {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: RoundingMode;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: RoundingMode;\n }\n}\nexport namespace TalerBankIntegrationApi {\n export interface BankVersion {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification?: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n\n export interface BankWithdrawalOperationStatus {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Bank account of the customer that is withdrawing, as a\n // payto URI.\n sender_wire?: PaytoString;\n\n // Suggestion for an exchange given by the bank.\n suggested_exchange?: string;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Wire transfer types supported by the bank.\n wire_types: string[];\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: string;\n }\n\n export interface BankWithdrawalOperationPostRequest {\n // Reserve public key.\n reserve_pub: string;\n\n // Payto address of the exchange selected for the withdrawal.\n selected_exchange: PaytoString;\n }\n\n export interface BankWithdrawalOperationPostResponse {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: Omit<\"pending\", WithdrawalOperationStatus>;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n }\n}\nexport namespace TalerCorebankApi {\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n export interface Config {\n // Name of this API, always \"taler-corebank\".\n name: \"libeufin-bank\";\n // name: \"taler-corebank\";\n\n // API version in the form $n:$n:$n\n version: string;\n\n // Bank display name to be used in user interfaces.\n // For consistency use \"Taler Bank\" if missing.\n // @since v4, will become mandatory in the next version.\n bank_name: string;\n\n // If 'true' the server provides local currency conversion support\n // If 'false' some parts of the API are not supported and return 501\n allow_conversion: boolean;\n\n // If 'true' anyone can register\n // If 'false' only the admin can\n allow_registrations: boolean;\n\n // If 'true' account can delete themselves\n // If 'false' only the admin can delete accounts\n allow_deletions: boolean;\n\n // If 'true' anyone can edit their name\n // If 'false' only admin can\n allow_edit_name: boolean;\n\n // If 'true' anyone can edit their cashout account\n // If 'false' only the admin\n allow_edit_cashout_payto_uri: boolean;\n\n // Default debt limit for newly created accounts\n default_debit_threshold: AmountString;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // TAN channels supported by the server\n supported_tan_channels: TanChannel[];\n\n // Wire transfer type supported by the bank.\n // Default to 'iban' is missing\n // @since v4, may become mandatory in the future.\n wire_type: string;\n }\n\n export interface BankAccountCreateWithdrawalRequest {\n // Amount to withdraw.\n amount: AmountString;\n }\n export interface BankAccountCreateWithdrawalResponse {\n // ID of the withdrawal, can be used to view/modify the withdrawal operation.\n withdrawal_id: string;\n\n // URI that can be passed to the wallet to initiate the withdrawal.\n taler_withdraw_uri: TalerUriString;\n }\n export interface WithdrawalPublicInfo {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Account username\n username: string;\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: PaytoString;\n }\n\n export interface BankAccountTransactionsResponse {\n transactions: BankAccountTransactionInfo[];\n }\n\n export interface BankAccountTransactionInfo {\n creditor_payto_uri: PaytoString;\n debtor_payto_uri: PaytoString;\n\n amount: AmountString;\n direction: \"debit\" | \"credit\";\n\n subject: string;\n\n // Transaction unique ID. Matches\n // $transaction_id from the URI.\n row_id: number;\n date: Timestamp;\n }\n\n export interface CreateTransactionRequest {\n // Address in the Payto format of the wire transfer receiver.\n // It needs at least the 'message' query string parameter.\n payto_uri: PaytoString;\n\n // Transaction amount (in the $currency:x.y format), optional.\n // However, when not given, its value must occupy the 'amount'\n // query string parameter of the 'payto' field. In case it\n // is given in both places, the paytoUri's takes the precedence.\n amount?: AmountString;\n }\n\n export interface CreateTransactionResponse {\n // ID identifying the transaction being created\n row_id: Integer;\n }\n\n export interface RegisterAccountResponse {\n // Internal payto URI of this bank account.\n internal_payto_uri: PaytoString;\n }\n\n export interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n contact_data?: ChallengeContactData;\n\n // 'payto' address of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n cashout_payto_uri?: PaytoString;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: PaytoString;\n\n // If present, set the max debit allowed for this user\n // Only admin can set this property.\n debit_threshold?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n // Only admin can set this property, other user can reconfig their account\n // after creation.\n tan_channel?: TanChannel;\n }\n\n export interface ChallengeContactData {\n // E-Mail address\n email?: EmailAddress;\n\n // Phone number.\n phone?: PhoneNumber;\n }\n\n export interface AccountReconfiguration {\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n // Only admin can change this property.\n contact_data?: ChallengeContactData;\n\n // 'payto' URI of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n // Only admin can change this property if not allowed in config\n cashout_payto_uri?: PaytoString;\n\n // If present, change the legal name associated with $username.\n // Only admin can change this property if not allowed in config\n name?: string;\n\n // Make this account visible to anyone?\n is_public?: boolean;\n\n // If present, change the max debit allowed for this user\n // Only admin can change this property.\n debit_threshold?: AmountString;\n\n //FIX: missing in SPEC\n // If present, enables 2FA and set the TAN channel used for challenges\n tan_channel?: TanChannel | null;\n }\n\n export interface AccountPasswordChange {\n // New password.\n new_password: string;\n // Old password. If present, check that the old password matches.\n // Optional for admin account.\n old_password?: string;\n }\n\n export interface PublicAccountsResponse {\n public_accounts: PublicAccount[];\n }\n export interface PublicAccount {\n // Username of the account\n username: string;\n\n // Internal payto URI of this bank account.\n payto_uri: string;\n\n // Current balance of the account\n balance: Balance;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface ListBankAccountsResponse {\n accounts: AccountMinimalData[];\n }\n export interface Balance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n }\n export interface AccountMinimalData {\n // Username\n username: string;\n\n // Legal name of the account owner.\n name: string;\n\n // Internal payto URI of this bank account.\n payto_uri: PaytoString;\n\n // current balance of the account\n balance: Balance;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: Balance;\n\n // payto://-URI of the account.\n payto_uri: PaytoString;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: PaytoString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Is 2FA enabled and what channel is used for challenges?\n tan_channel?: TanChannel;\n }\n\n export interface CashoutRequest {\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n request_uid: ShortHashCode;\n\n // Optional subject to associate to the\n // cashout operation. This data will appear\n // as the incoming wire transfer subject in\n // the user's fiat bank account.\n subject?: string;\n\n // That is the plain amount that the user specified\n // to cashout. Its $currency is the (regional) currency of the\n // bank instance.\n amount_debit: AmountString;\n\n // That is the amount that will effectively be\n // transferred by the bank to the user's bank\n // account, that is external to the regional currency.\n // It is expressed in the fiat currency and\n // is calculated after the cashout fee and the\n // exchange rate. See the /cashout-rates call.\n // The client needs to calculate this amount\n // correctly based on the amount_debit and the cashout rate,\n // otherwise the request will fail.\n amount_credit: AmountString;\n }\n\n export interface CashoutResponse {\n // ID identifying the operation being created\n cashout_id: number;\n }\n\n /**\n * @deprecated since 4, use 2fa\n */\n export interface CashoutConfirmRequest {\n // the TAN that confirms $CASHOUT_ID.\n tan: string;\n }\n\n export interface Cashouts {\n // Every string represents a cash-out operation ID.\n cashouts: CashoutInfo[];\n }\n\n export interface CashoutInfo {\n cashout_id: number;\n /**\n * @deprecated since 4, use new 2fa\n */\n status?: \"pending\" | \"aborted\" | \"confirmed\";\n }\n export interface GlobalCashouts {\n // Every string represents a cash-out operation ID.\n cashouts: GlobalCashoutInfo[];\n }\n export interface GlobalCashoutInfo {\n cashout_id: number;\n username: string;\n }\n\n export interface CashoutStatusResponse {\n // Amount debited to the internal\n // regional currency bank account.\n amount_debit: AmountString;\n\n // Amount credited to the external bank account.\n amount_credit: AmountString;\n\n // Transaction subject.\n subject: string;\n\n // Time when the cashout was created.\n creation_time: Timestamp;\n }\n\n export interface ConversionRatesResponse {\n // Exchange rate to buy the local currency from the external one\n buy_at_ratio: DecimalNumber;\n\n // Exchange rate to sell the local currency for the external one\n sell_at_ratio: DecimalNumber;\n\n // Fee to subtract after applying the buy ratio.\n buy_in_fee: DecimalNumber;\n\n // Fee to subtract after applying the sell ratio.\n sell_out_fee: DecimalNumber;\n }\n\n export enum MonitorTimeframeParam {\n hour,\n day,\n month,\n year,\n decade,\n }\n\n export type MonitorResponse = MonitorNoConversion | MonitorWithConversion;\n\n // Monitoring stats when conversion is not supported\n export interface MonitorNoConversion {\n type: \"no-conversions\";\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n // Monitoring stats when conversion is supported\n export interface MonitorWithConversion {\n type: \"with-conversions\";\n\n // How many cashin operations were confirmed by a\n // wallet owner. Note: wallet owners\n // are NOT required to be customers of the libeufin-bank.\n cashinCount: number;\n\n // Overall regional currency that has been paid by the regional admin account\n // to regional bank accounts to fulfill all the confirmed cashin operations.\n cashinRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid to the fiat admin account\n // by fiat bank accounts to fulfill all the confirmed cashin operations.\n cashinFiatVolume: AmountString;\n\n // How many cashout operations were confirmed.\n cashoutCount: number;\n\n // Overall regional currency that has been paid to the regional admin account\n // by fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid by the fiat admin account\n // to fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutFiatVolume: AmountString;\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n export interface TanTransmission {\n // Channel of the last successful transmission of the TAN challenge.\n tan_channel: TanChannel;\n\n // Info of the last successful transmission of the TAN challenge.\n tan_info: string;\n }\n\n export interface Challenge {\n // Unique identifier of the challenge to solve to run this protected\n // operation.\n challenge_id: number;\n }\n\n export interface ChallengeSolve {\n // The TAN code that solves $CHALLENGE_ID\n tan: string;\n }\n\n export enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n }\n}\n\nexport namespace TalerExchangeApi {\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n export interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: AmountString;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: AmountString;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n export interface AmlDecision {\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: AmountString;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n export interface ExchangeVersionResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-exchange\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v18, may become mandatory in the future.\n implementation?: string;\n\n // Currency supported by this exchange, given\n // as a currency code (\"USD\" or \"EUR\").\n currency: string;\n\n // How wallets should render this currency.\n currency_specification: CurrencySpecification;\n\n // Names of supported KYC requirements.\n supported_kyc_requirements: string[];\n }\n\n export type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n // Account restriction that disables this type of\n // account for the indicated operation categorically.\n export interface DenyAllAccountRestriction {\n type: \"deny\";\n }\n // Accounts interacting with this type of account\n // restriction must have a payto://-URI matching\n // the given regex.\n export interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: { [lang_tag: string]: string };\n }\n\n export interface WireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: PaytoString;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignature;\n }\n\n export interface ExchangeKeysResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // The exchange's base URL.\n base_url: string;\n\n // The exchange's currency or asset unit.\n currency: string;\n\n /**\n * FIXME: PARTIALLY IMPLEMENTED!!\n */\n\n // How wallets should render this currency.\n // currency_specification: CurrencySpecification;\n\n // // Absolute cost offset for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // stefan_abs: AmountString;\n\n // // Factor to multiply the logarithm of the amount\n // // with to (over) approximate fees payable by amount.\n // // Note that the total to be paid is first to be\n // // divided by the smallest denomination to obtain\n // // the value that the logarithm is to be taken of.\n // stefan_log: AmountString;\n\n // // Linear cost factor for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // //\n // // Note that this is a scalar, as it is multiplied\n // // with the actual amount.\n // stefan_lin: Float;\n\n // // Type of the asset. \"fiat\", \"crypto\", \"regional\"\n // // or \"stock\". Wallets should adjust their UI/UX\n // // based on this value.\n // asset_type: string;\n\n // // Array of wire accounts operated by the exchange for\n // // incoming wire transfers.\n // accounts: WireAccount[];\n\n // // Object mapping names of wire methods (i.e. \"iban\" or \"x-taler-bank\")\n // // to wire fees.\n // wire_fees: { method: AggregateTransferFee[] };\n\n // // List of exchanges that this exchange is partnering\n // // with to enable wallet-to-wallet transfers.\n // wads: ExchangePartner[];\n\n // // Set to true if this exchange allows the use\n // // of reserves for rewards.\n // // @deprecated in protocol v18.\n // rewards_allowed: false;\n\n // // EdDSA master public key of the exchange, used to sign entries\n // // in denoms and signkeys.\n // master_public_key: EddsaPublicKey;\n\n // // Relative duration until inactive reserves are closed;\n // // not signed (!), can change without notice.\n // reserve_closing_delay: RelativeTime;\n\n // // Threshold amounts beyond which wallet should\n // // trigger the KYC process of the issuing\n // // exchange. Optional option, if not given there is no limit.\n // // Currency must match currency.\n // wallet_balance_limit_without_kyc?: AmountString[];\n\n // // Denominations offered by this exchange\n // denominations: DenomGroup[];\n\n // // Compact EdDSA signature (binary-only) over the\n // // contatentation of all of the master_sigs (in reverse\n // // chronological order by group) in the arrays under\n // // \"denominations\". Signature of TALER_ExchangeKeySetPS\n // exchange_sig: EddsaSignature;\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 signkeys. It is given\n // // explicitly as the client might otherwise be confused by clock skew as to\n // // which signing key was used for the exchange_sig.\n // exchange_pub: EddsaPublicKey;\n\n // // Denominations for which the exchange currently offers/requests recoup.\n // recoup: Recoup[];\n\n // // Array of globally applicable fees by time range.\n // global_fees: GlobalFees[];\n\n // // The date when the denomination keys were last updated.\n // list_issue_date: Timestamp;\n\n // // Auditors of the exchange.\n // auditors: AuditorKeys[];\n\n // // The exchange's signing keys.\n // signkeys: SignKey[];\n\n // // Optional field with a dictionary of (name, object) pairs defining the\n // // supported and enabled extensions, such as age_restriction.\n // extensions?: { name: ExtensionManifest };\n\n // // Signature by the exchange master key of the SHA-256 hash of the\n // // normalized JSON-object of field extensions, if it was set.\n // // The signature has purpose TALER_SIGNATURE_MASTER_EXTENSIONS.\n // extensions_sig?: EddsaSignature;\n }\n\n interface ExtensionManifest {\n // The criticality of the extension MUST be provided. It has the same\n // semantics as \"critical\" has for extensions in X.509:\n // - if \"true\", the client must \"understand\" the extension before\n // proceeding,\n // - if \"false\", clients can safely skip extensions they do not\n // understand.\n // (see https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)\n critical: boolean;\n\n // The version information MUST be provided in Taler's protocol version\n // ranges notation, see\n // https://docs.taler.net/core/api-common.html#protocol-version-ranges\n version: LibtoolVersion;\n\n // Optional configuration object, defined by the feature itself\n config?: object;\n }\n\n interface SignKey {\n // The actual exchange's EdDSA signing public key.\n key: EddsaPublicKey;\n\n // Initial validity date for the signing key.\n stamp_start: Timestamp;\n\n // Date when the exchange will stop using the signing key, allowed to overlap\n // slightly with the next signing key's validity to allow for clock skew.\n stamp_expire: Timestamp;\n\n // Date when all signatures made by the signing key expire and should\n // henceforth no longer be considered valid in legal disputes.\n stamp_end: Timestamp;\n\n // Signature over key and stamp_expire by the exchange master key.\n // Signature of TALER_ExchangeSigningKeyValidityPS.\n // Must have purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.\n master_sig: EddsaSignature;\n }\n\n interface AuditorKeys {\n // The auditor's EdDSA signing public key.\n auditor_pub: EddsaPublicKey;\n\n // The auditor's URL.\n auditor_url: string;\n\n // The auditor's name (for humans).\n auditor_name: string;\n\n // An array of denomination keys the auditor affirms with its signature.\n // Note that the message only includes the hash of the public key, while the\n // signature is actually over the expanded information including expiration\n // times and fees. The exact format is described below.\n denomination_keys: AuditorDenominationKey[];\n }\n interface AuditorDenominationKey {\n // Hash of the public RSA key used to sign coins of the respective\n // denomination. Note that the auditor's signature covers more than just\n // the hash, but this other information is already provided in denoms and\n // thus not repeated here.\n denom_pub_h: HashCode;\n\n // Signature of TALER_ExchangeKeyValidityPS.\n auditor_sig: EddsaSignature;\n }\n\n interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: Timestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: Timestamp;\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: RelativeTime;\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: Integer;\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: RelativeTime;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: EddsaSignature;\n }\n\n interface Recoup {\n // Hash of the public key of the denomination that is being revoked under\n // emergency protocol (see /recoup).\n h_denom_pub: HashCode;\n\n // We do not include any signature here, as the primary use-case for\n // this emergency involves the exchange having lost its signing keys,\n // so such a signature here would be pretty worthless. However, the\n // exchange will not honor /recoup requests unless they are for\n // denomination keys listed here.\n }\n\n interface AggregateTransferFee {\n // Per transfer wire transfer fee.\n wire_fee: AmountString;\n\n // Per transfer closing fee.\n closing_fee: AmountString;\n\n // What date (inclusive) does this fee go into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n start_date: Timestamp;\n\n // What date (exclusive) does this fee stop going into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n end_date: Timestamp;\n\n // Signature of TALER_MasterWireFeePS with\n // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.\n sig: EddsaSignature;\n }\n\n interface ExchangePartner {\n // Base URL of the partner exchange.\n partner_base_url: string;\n\n // Public master key of the partner exchange.\n partner_master_pub: EddsaPublicKey;\n\n // Per exchange-to-exchange transfer (wad) fee.\n wad_fee: AmountString;\n\n // Exchange-to-exchange wad (wire) transfer frequency.\n wad_frequency: RelativeTime;\n\n // When did this partnership begin (under these conditions)?\n start_date: Timestamp;\n\n // How long is this partnership expected to last?\n end_date: Timestamp;\n\n // Signature using the exchange's offline key over\n // TALER_WadPartnerSignaturePS\n // with purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS.\n master_sig: EddsaSignature;\n }\n\n type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n\n // Binary representation of the age groups.\n // The bits set in the mask mark the edges at the beginning of a next age\n // group. F.e. for the age groups\n // 0-7, 8-9, 10-11, 12-13, 14-15, 16-17, 18-21, 21-*\n // the following bits are set:\n //\n // 31 24 16 8 0\n // | | | | |\n // oooooooo oo1oo1o1 o1o1o1o1 ooooooo1\n //\n // A value of 0 means that the exchange does not support the extension for\n // age-restriction.\n type AgeMask = Integer;\n\n interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n // Common attributes for all denomination groups\n interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n }\n interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignature;\n\n // When does the denomination key become valid?\n stamp_start: Timestamp;\n\n // When is it no longer possible to withdraw coins\n // of this denomination?\n stamp_expire_withdraw: Timestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_deposit: Timestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: Timestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n }\n type DenominationKey = RsaDenominationKey | CSDenominationKey;\n interface RsaDenominationKey {\n cipher: \"RSA\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // RSA public key\n rsa_public_key: RsaPublicKey;\n }\n interface CSDenominationKey {\n cipher: \"CS\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // Public key of the denomination.\n cs_public_key: Cs25519Point;\n }\n}\n\nexport namespace TalerMerchantApi {\n export interface VersionResponse {\n // libtool-style representation of the Merchant protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-merchant\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since **v8**, may become mandatory in the future.\n implementation?: string;\n\n // Default (!) currency supported by this backend.\n // This is the currency that the backend should\n // suggest by default to the user when entering\n // amounts. See currencies for a list of\n // supported currencies and how to render them.\n currency: string;\n\n // How services should render currencies supported\n // by this backend. Maps\n // currency codes (e.g. \"EUR\" or \"KUDOS\") to\n // the respective currency specification.\n // All currencies in this map are supported by\n // the backend. Note that the actual currency\n // specifications are a *hint* for applications\n // that would like *advice* on how to render amounts.\n // Applications *may* ignore the currency specification\n // if they know how to render currencies that they are\n // used with.\n currencies: { [currency: string]: CurrencySpecification };\n\n // Array of exchanges trusted by the merchant.\n // Since protocol **v6**.\n exchanges: ExchangeConfigInfo[];\n }\n\n export interface ExchangeConfigInfo {\n // Base URL of the exchange REST API.\n base_url: string;\n\n // Currency for which the merchant is configured\n // to trust the exchange.\n // May not be the one the exchange actually uses,\n // but is the only one we would trust this exchange for.\n currency: string;\n\n // Offline master public key of the exchange. The\n // /keys data must be signed with this public\n // key for us to trust it.\n master_pub: EddsaPublicKey;\n }\n export interface ClaimRequest {\n // Nonce to identify the wallet that claimed the order.\n nonce: string;\n\n // Token that authorizes the wallet to claim the order.\n // *Optional* as the merchant may not have required it\n // (create_token set to false in PostOrderRequest).\n token?: ClaimToken;\n }\n\n export interface ClaimResponse {\n // Contract terms of the claimed order\n contract_terms: ContractTerms;\n\n // Signature by the merchant over the contract terms.\n sig: EddsaSignature;\n }\n\n export interface PaymentResponse {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Text to be shown to the point-of-sale staff as a proof of\n // payment.\n pos_confirmation?: string;\n }\n\n export interface PaymentStatusRequestParams {\n // Hash of the order\u2019s contract terms (this is used to\n // authenticate the wallet/customer in case\n // $ORDER_ID is guessable).\n // Required once an order was claimed.\n contractTermHash?: string;\n // Authorizes the request via the claim token that\n // was returned in the PostOrderResponse. Used with\n // unclaimed orders only. Whether token authorization is\n // required is determined by the merchant when the\n // frontend creates the order.\n claimToken?: string;\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // If specified, the merchant backend will wait up to\n // timeout_ms milliseconds for completion of the payment\n // before sending the HTTP response. A client must never\n // rely on this behavior, as the merchant backend may return\n // a response immediately.\n timeout?: number;\n // If set to \u201Cyes\u201D, poll for the order\u2019s pending refunds\n // to be picked up. timeout_ms specifies how long we\n // will wait for the refund.\n awaitRefundObtained?: boolean;\n // Indicates that we are polling for a refund above the\n // given AMOUNT. timeout_ms will specify how long we\n // will wait for the refund.\n refund?: AmountString;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface GetKycStatusRequestParams {\n // If specified, the KYC check should return\n // the KYC status only for this wire account.\n // Otherwise, for all wire accounts.\n wireHash?: string;\n // If specified, the KYC check should return\n // the KYC status only for the given exchange.\n // Otherwise, for all exchanges we interacted with.\n exchangeURL?: string;\n // If specified, the merchant will wait up to\n // timeout_ms milliseconds for the exchanges to\n // confirm completion of the KYC process(es).\n timeout?: number;\n }\n export interface GetOtpDeviceRequestParams {\n // Timestamp in seconds to use when calculating\n // the current OTP code of the device. Since protocol v10.\n faketime?: number;\n // Price to use when calculating the current OTP\n // code of the device. Since protocol v10.\n price?: AmountString;\n }\n export interface GetOrderRequestParams {\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // Timeout in milliseconds to wait for a payment if\n // the answer would otherwise be negative (long polling).\n timeout?: number;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface ListWireTransferRequestParams {\n // Filter for transfers to the given bank account\n // (subject and amount MUST NOT be given in the payto URI).\n paytoURI?: string;\n // Filter for transfers executed before the given timestamp.\n before?: number;\n // Filter for transfers executed after the given timestamp.\n after?: number;\n // At most return the given number of results. Negative for\n // descending in execution time, positive for ascending in\n // execution time. Default is -20.\n limit?: number;\n // Starting transfer_serial_id for an iteration.\n offset?: string;\n // Filter transfers by verification status.\n verified?: boolean;\n order?: \"asc\" | \"dec\";\n }\n export interface ListOrdersRequestParams {\n // If set to yes, only return paid orders, if no only\n // unpaid orders. Do not give (or use \u201Call\u201D) to see all\n // orders regardless of payment status.\n paid?: boolean;\n // If set to yes, only return refunded orders, if no only\n // unrefunded orders. Do not give (or use \u201Call\u201D) to see\n // all orders regardless of refund status.\n refunded?: boolean;\n // If set to yes, only return wired orders, if no only\n // orders with missing wire transfers. Do not give (or\n // use \u201Call\u201D) to see all orders regardless of wire transfer\n // status.\n wired?: boolean;\n // At most return the given number of results. Negative\n // for descending by row ID, positive for ascending by\n // row ID. Default is 20. Since protocol v12.\n limit?: number;\n // Non-negative date in seconds after the UNIX Epoc, see delta\n // for its interpretation. If not specified, we default to the\n // oldest or most recent entry, depending on delta.\n date?: AbsoluteTime;\n // Starting product_serial_id for an iteration.\n // Since protocol v12.\n offset?: string;\n // Timeout in milliseconds to wait for additional orders if the\n // answer would otherwise be negative (long polling). Only useful\n // if delta is positive. Note that the merchant MAY still return\n // a response that contains fewer than delta orders.\n timeout?: number;\n // Since protocol v6. Filters by session ID.\n sessionId?: string;\n // Since protocol v6. Filters by fulfillment URL.\n fulfillmentUrl?: string;\n\n order?: \"asc\" | \"dec\";\n }\n\n export interface PayRequest {\n // The coins used to make the payment.\n coins: CoinPaySig[];\n\n // Custom inputs from the wallet for the contract.\n wallet_data?: Object;\n\n // The session for which the payment is made (or replayed).\n // Only set for session-based payments.\n session_id?: string;\n }\n export interface CoinPaySig {\n // Signature by the coin.\n coin_sig: EddsaSignature;\n\n // Public key of the coin being spent.\n coin_pub: EddsaPublicKey;\n\n // Signature made by the denomination public key.\n ub_sig: RsaSignature;\n\n // The hash of the denomination public key associated with this coin.\n h_denom: HashCode;\n\n // The amount that is subtracted from this coin with this payment.\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n }\n\n export interface StatusPaid {\n type: \"paid\";\n\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 export interface StatusGotoResponse {\n type: \"goto\";\n // The client should go to the reorder URL, there a fresh\n // order might be created as this one is taken by another\n // customer or wallet (or repurchase detection logic may\n // apply).\n public_reorder_url: string;\n }\n export interface StatusUnpaidResponse {\n type: \"unpaid\";\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n fulfillment_url?: string;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n }\n\n export interface PaidRefundStatusResponse {\n // Text to be shown to the point-of-sale staff as a proof of\n // payment (present only if reusable OTP algorithm is used).\n pos_confirmation?: string;\n\n // True if the order has been subjected to\n // refunds. False if it was simply paid.\n refunded: boolean;\n }\n export interface PaidRequest {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer and to enable signature verification without\n // database access).\n h_contract: HashCode;\n\n // Hash over custom inputs from the wallet for the contract.\n wallet_data_hash?: HashCode;\n\n // Session id for which the payment is proven.\n session_id: string;\n }\n\n export 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: HashCode;\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 interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKey;\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 export 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 export type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n // Details about why a refund failed.\n export 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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\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.\n export 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: EddsaSignature;\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: EddsaPublicKey;\n }\n\n export interface WalletRefundRequest {\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer).\n h_contract: HashCode;\n }\n export interface WalletRefundResponse {\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Successful refunds for this payment, empty array for none.\n refunds: MerchantCoinRefundStatus[];\n\n // Public key of the merchant.\n merchant_pub: EddsaPublicKey;\n }\n export type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n // Details about why a refund failed.\n export interface MerchantCoinRefundFailureStatus {\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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\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.\n export interface MerchantCoinRefundSuccessStatus {\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: EddsaSignature;\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: EddsaPublicKey;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\n }\n\n interface RewardInformation {\n // Exchange from which the reward will be withdrawn. Needed by the\n // wallet to determine denominations, fees, etc.\n exchange_url: string;\n\n // URL where to go after obtaining the reward.\n next_url: string;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n // Note that rewards that have expired MAY also result in a 404 response.\n expiration: Timestamp;\n }\n\n interface RewardPickupRequest {\n // List of planchets the wallet wants to use for the reward.\n planchets: PlanchetDetail[];\n }\n interface PlanchetDetail {\n // Hash of the denomination's public key (hashed to reduce\n // bandwidth consumption).\n denom_pub_hash: HashCode;\n\n // Coin's blinded public key.\n coin_ev: CoinEnvelope;\n }\n interface RewardResponse {\n // Blind RSA signatures over the planchets.\n // The order of the signatures matches the planchets list.\n blind_sigs: BlindSignature[];\n }\n interface BlindSignature {\n // The (blind) RSA signature. Still needs to be unblinded.\n blind_sig: BlindedRsaSignature;\n }\n\n export interface InstanceConfigurationMessage {\n // Name of the merchant instance to create (will become $INSTANCE).\n // Must match the regex ^[A-Za-z0-9][A-Za-z0-9_.@-]+$.\n id: string;\n\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Authentication settings for this instance\n auth: InstanceAuthConfigurationMessage;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstanceAuthConfigurationMessage {\n // Type of authentication.\n // \"external\": The mechant backend does not do\n // any authentication checks. Instead an API\n // gateway must do the authentication.\n // \"token\": The merchant checks an auth token.\n // See \"token\" for details.\n method: \"external\" | \"token\";\n\n // For method \"token\", this field is mandatory.\n // The token MUST begin with the string \"secret-token:\".\n // After the auth token has been set (with method \"token\"),\n // the value must be provided in a \"Authorization: Bearer $token\"\n // header.\n token?: string;\n }\n\n export interface InstanceReconfigurationMessage {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstancesResponse {\n // List of instances that are present in the backend (see Instance).\n instances: Instance[];\n }\n\n export interface Instance {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Merchant instance this response is about ($INSTANCE).\n id: string;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // List of the payment targets supported by this instance. Clients can\n // specify the desired payment target in /order requests. Note that\n // front-ends do not have to support wallets selecting payment targets.\n payment_targets: string[];\n\n // Has this instance been deleted (but not purged)?\n deleted: boolean;\n }\n\n export interface QueryInstancesResponse {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n\n // Authentication configuration.\n // Does not contain the token when token auth is configured.\n auth: {\n method: \"external\" | \"token\";\n };\n }\n\n export interface AccountKycRedirects {\n // Array of pending KYCs.\n pending_kycs: MerchantAccountKycRedirect[];\n\n // Array of exchanges with no reply.\n timeout_kycs: ExchangeKycTimeout[];\n }\n\n export interface MerchantAccountKycRedirect {\n // URL that the user should open in a browser to\n // proceed with the KYC process (as returned\n // by the exchange's /kyc-check/ endpoint).\n // Optional, missing if the account is blocked\n // due to AML and not due to KYC.\n kyc_url?: string;\n\n // AML status of the account.\n aml_status: Integer;\n\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Our bank wire account this is about.\n payto_uri: PaytoString;\n }\n\n export interface ExchangeKycTimeout {\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Numeric error code indicating errors the exchange\n // returned, or TALER_EC_INVALID for none.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information about the KYC status.\n // 0 if there was no response at all.\n exchange_http_status: number;\n }\n\n export interface AccountAddDetails {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export type FacadeCredentials =\n | NoFacadeCredentials\n | BasicAuthFacadeCredentials;\n export interface NoFacadeCredentials {\n type: \"none\";\n }\n export interface BasicAuthFacadeCredentials {\n type: \"basic\";\n\n // Username to use to authenticate\n username: string;\n\n // Password to use to authenticate\n password: string;\n }\n export interface AccountAddResponse {\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n }\n\n export interface AccountPatchDetails {\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n // If the argument is omitted, the old credentials\n // are simply preserved.\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export interface AccountsSummaryResponse {\n // List of accounts that are known for the instance.\n accounts: BankAccountSummaryEntry[];\n }\n\n // TODO: missing in docs\n export interface BankAccountSummaryEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n }\n export interface BankAccountEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // true if this account is active,\n // false if it is historic.\n active?: boolean;\n }\n\n export interface ProductAddDetail {\n // Product ID to use.\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface ProductPatchDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost?: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface InventorySummaryResponse {\n // List of products that are present in the inventory.\n products: InventoryEntry[];\n }\n\n export interface InventoryEntry {\n // Product identifier, as found in the product.\n product_id: string;\n // product_serial_id of the product in the database.\n product_serial: Integer;\n }\n\n export interface ProductDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that have already been sold.\n total_sold: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost: Integer;\n\n // Identifies where the product is in stock.\n address: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years).\n minimum_age?: Integer;\n }\n export interface LockRequest {\n // UUID that identifies the frontend performing the lock\n // Must be unique for the lifetime of the lock.\n lock_uuid: string;\n\n // How long does the frontend intend to hold the lock?\n duration: RelativeTime;\n\n // How many units should be locked?\n quantity: Integer;\n }\n\n export interface PostOrderRequest {\n // The order must at least contain the minimal\n // order detail, but can override all.\n order: Order;\n\n // If set, the backend will then set the refund deadline to the current\n // time plus the specified delay. If it's not set, refunds will not be\n // possible.\n refund_delay?: RelativeTime;\n\n // Specifies the payment target preferred by the client. Can be used\n // to select among the various (active) wire methods supported by the instance.\n payment_target?: string;\n\n // Specifies that some products are to be included in the\n // order from the inventory. For these inventory management\n // is performed (so the products must be in stock) and\n // details are completed from the product data of the backend.\n inventory_products?: MinimalInventoryProduct[];\n\n // Specifies a lock identifier that was used to\n // lock a product in the inventory. Only useful if\n // inventory_products is set. Used in case a frontend\n // reserved quantities of the individual products while\n // the shopping cart was being built. Multiple UUIDs can\n // be used in case different UUIDs were used for different\n // products (i.e. in case the user started with multiple\n // shopping sessions that were combined during checkout).\n lock_uuids?: string[];\n\n // Should a token for claiming the order be generated?\n // False can make sense if the ORDER_ID is sufficiently\n // high entropy to prevent adversarial claims (like it is\n // if the backend auto-generates one). Default is 'true'.\n create_token?: boolean;\n\n // OTP device ID to associate with the order.\n // This parameter is optional.\n otp_id?: string;\n }\n\n type Order = MinimalOrderDetail | ContractTerms;\n\n interface MinimalOrderDetail {\n // Amount to be paid by the customer.\n amount: AmountString;\n\n // Short summary of the order.\n summary: string;\n\n // See documentation of fulfillment_url in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n // When creating an order, the fulfillment URL can\n // contain ${ORDER_ID} which will be substituted with the\n // order ID of the newly created order.\n fulfillment_url?: string;\n\n // See documentation of fulfillment_message in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n }\n\n interface MinimalInventoryProduct {\n // Which product is requested (here mandatory!).\n product_id: string;\n\n // How many units of the product are requested.\n quantity: Integer;\n }\n\n export interface PostOrderResponse {\n // Order ID of the response that was just created.\n order_id: string;\n\n // Token that authorizes the wallet to claim the order.\n // Provided only if \"create_token\" was set to 'true'\n // in the request.\n token?: ClaimToken;\n }\n export interface OutOfStockResponse {\n // Product ID of an out-of-stock item.\n product_id: string;\n\n // Requested quantity.\n requested_quantity: Integer;\n\n // Available quantity (must be below requested_quantity).\n available_quantity: Integer;\n\n // When do we expect the product to be again in stock?\n // Optional, not given if unknown.\n restock_expected?: Timestamp;\n }\n\n export interface OrderHistory {\n // Timestamp-sorted array of all orders matching the query.\n // The order of the sorting depends on the sign of delta.\n orders: OrderHistoryEntry[];\n }\n export interface OrderHistoryEntry {\n // Order ID of the transaction related to this entry.\n order_id: string;\n\n // Row ID of the order in the database.\n row_id: number;\n\n // When the order was created.\n timestamp: Timestamp;\n\n // The amount of money the order is for.\n amount: AmountString;\n\n // The summary of the order.\n summary: string;\n\n // Whether some part of the order is refundable,\n // that is the refund deadline has not yet expired\n // and the total amount refunded so far is below\n // the value of the original transaction.\n refundable: boolean;\n\n // Whether the order has been paid or not.\n paid: boolean;\n }\n\n export type MerchantOrderStatusResponse =\n | CheckPaymentPaidResponse\n | CheckPaymentClaimedResponse\n | CheckPaymentUnpaidResponse;\n export interface CheckPaymentPaidResponse {\n // The customer paid for this contract.\n order_status: \"paid\";\n\n // Was the payment refunded (even partially)?\n refunded: boolean;\n\n // True if there are any approved refunds that the wallet has\n // not yet obtained.\n refund_pending: boolean;\n\n // Did the exchange wire us the funds?\n wired: boolean;\n\n // Total amount the exchange deposited into our bank account\n // for this contract, excluding fees.\n deposit_total: AmountString;\n\n // Numeric error code indicating errors the exchange\n // encountered tracking the wire transfer for this purchase (before\n // we even got to specific coin issues).\n // 0 if there were no issues.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information to track the wire transfer for this purchase.\n // 0 if there were no issues.\n exchange_http_status: number;\n\n // Total amount that was refunded, 0 if refunded is false.\n refund_amount: AmountString;\n\n // Contract terms.\n contract_terms: ContractTerms;\n\n // The wire transfer status from the exchange for this order if\n // available, otherwise empty array.\n wire_details: TransactionWireTransfer[];\n\n // Reports about trouble obtaining wire transfer details,\n // empty array if no trouble were encountered.\n wire_reports: TransactionWireReport[];\n\n // The refund details for this order. One entry per\n // refunded coin; empty array if there are no refunds.\n refund_details: RefundDetails[];\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n }\n export interface CheckPaymentClaimedResponse {\n // A wallet claimed the order, but did not yet pay for the contract.\n order_status: \"claimed\";\n\n // Contract terms.\n contract_terms: ContractTerms;\n }\n export interface CheckPaymentUnpaidResponse {\n // The order was neither claimed nor paid.\n order_status: \"unpaid\";\n\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // when was the order created\n creation_time: Timestamp;\n\n // Order summary text.\n summary: string;\n\n // Total amount of the order (to be paid by the customer).\n total_amount: AmountString;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n\n // Fulfillment URL of an already paid order. Only given if under this\n // session an already paid order with a fulfillment URL exists.\n already_paid_fulfillment_url?: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n\n // We do we NOT return the contract terms here because they may not\n // exist in case the wallet did not yet claim them.\n }\n export interface RefundDetails {\n // Reason given for the refund.\n reason: string;\n\n // Set to true if a refund is still available for the wallet for this payment.\n pending: boolean;\n\n // When was the refund approved.\n timestamp: Timestamp;\n\n // Total amount that was refunded (minus a refund fee).\n amount: AmountString;\n }\n export interface TransactionWireTransfer {\n // Responsible exchange.\n exchange_url: string;\n\n // 32-byte wire transfer identifier.\n wtid: Base32;\n\n // Execution time of the wire transfer.\n execution_time: Timestamp;\n\n // Total amount that has been wire transferred\n // to the merchant.\n amount: AmountString;\n\n // Was this transfer confirmed by the merchant via the\n // POST /transfers API, or is it merely claimed by the exchange?\n confirmed: boolean;\n }\n export interface TransactionWireReport {\n // Numerical error code.\n code: number;\n\n // Human-readable error description.\n hint: string;\n\n // Numerical error code from the exchange.\n exchange_code: number;\n\n // HTTP status code received from the exchange.\n exchange_http_status: number;\n\n // Public key of the coin for which we got the exchange error.\n coin_pub: CoinPublicKey;\n }\n\n export interface ForgetRequest {\n // Array of valid JSON paths to forgettable fields in the order's\n // contract terms.\n fields: string[];\n }\n\n export interface RefundRequest {\n // Amount to be refunded.\n refund: AmountString;\n\n // Human-readable refund justification.\n reason: string;\n }\n export interface MerchantRefundResponse {\n // URL (handled by the backend) that the wallet should access to\n // trigger refund processing.\n // taler://refund/...\n taler_refund_uri: string;\n\n // Contract hash that a client may need to authenticate an\n // HTTP request to obtain the above URI in a wallet-friendly way.\n h_contract: HashCode;\n }\n\n export interface TransferInformation {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n }\n\n export interface TransferList {\n // List of all the transfers that fit the filter that we know.\n transfers: TransferDetails[];\n }\n export interface TransferDetails {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n\n // Serial number identifying the transfer in the merchant backend.\n // Used for filtering via offset.\n transfer_serial_id: number;\n\n // Time of the execution of the wire transfer by the exchange, according to the exchange\n // Only provided if we did get an answer from the exchange.\n execution_time?: Timestamp;\n\n // True if we checked the exchange's answer and are happy with it.\n // False if we have an answer and are unhappy, missing if we\n // do not have an answer from the exchange.\n verified?: boolean;\n\n // True if the merchant uses the POST /transfers API to confirm\n // that this wire transfer took place (and it is thus not\n // something merely claimed by the exchange).\n confirmed?: boolean;\n }\n\n interface ReserveCreateRequest {\n // Amount that the merchant promises to put into the reserve.\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for rewards.\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\".\n wire_method: string;\n }\n interface ReserveCreateConfirmation {\n // Public key identifying the reserve.\n reserve_pub: EddsaPublicKey;\n\n // Wire accounts of the exchange where to transfer the funds.\n accounts: TalerExchangeApi.WireAccount[];\n }\n\n interface RewardReserveStatus {\n // Array of all known reserves (possibly empty!).\n reserves: ReserveStatusEntry[];\n }\n interface ReserveStatusEntry {\n // Public key of the reserve.\n reserve_pub: EddsaPublicKey;\n\n // Timestamp when it was established.\n creation_time: Timestamp;\n\n // Timestamp when it expires.\n expiration_time: Timestamp;\n\n // Initial amount as per reserve creation call.\n merchant_initial_amount: AmountString;\n\n // Initial amount as per exchange, 0 if exchange did\n // not confirm reserve creation yet.\n exchange_initial_amount: AmountString;\n\n // Amount picked up so far.\n pickup_amount: AmountString;\n\n // Amount approved for rewards that exceeds the pickup_amount.\n committed_amount: AmountString;\n\n // Is this reserve active (false if it was deleted but not purged)?\n active: boolean;\n }\n\n interface ReserveDetail {\n // Timestamp when it was established.\n creation_time: Timestamp;\n\n // Timestamp when it expires.\n expiration_time: Timestamp;\n\n // Initial amount as per reserve creation call.\n merchant_initial_amount: AmountString;\n\n // Initial amount as per exchange, 0 if exchange did\n // not confirm reserve creation yet.\n exchange_initial_amount: AmountString;\n\n // Amount picked up so far.\n pickup_amount: AmountString;\n\n // Amount approved for rewards that exceeds the pickup_amount.\n committed_amount: AmountString;\n\n // Array of all rewards created by this reserves (possibly empty!).\n // Only present if asked for explicitly.\n rewards?: RewardStatusEntry[];\n\n // Is this reserve active (false if it was deleted but not purged)?\n active: boolean;\n\n // Array of wire accounts of the exchange that could\n // be used to fill the reserve, can be NULL\n // if the reserve is inactive or was already filled\n accounts?: TalerExchangeApi.WireAccount[];\n\n // URL of the exchange hosting the reserve,\n // NULL if the reserve is inactive\n exchange_url: string;\n }\n interface RewardStatusEntry {\n // Unique identifier for the reward.\n reward_id: HashCode;\n\n // Total amount of the reward that can be withdrawn.\n total_amount: AmountString;\n\n // Human-readable reason for why the reward was granted.\n reason: string;\n }\n\n interface RewardCreateRequest {\n // Amount that the customer should be rewarded.\n amount: AmountString;\n\n // Justification for giving the reward.\n justification: string;\n\n // URL that the user should be directed to after receiving the reward,\n // will be included in the reward_token.\n next_url: string;\n }\n interface RewardCreateConfirmation {\n // Unique reward identifier for the reward that was created.\n reward_id: HashCode;\n\n // taler://reward URI for the reward.\n taler_reward_uri: string;\n\n // URL that will directly trigger processing\n // the reward when the browser is redirected to it.\n reward_status_url: string;\n\n // When does the reward expire?\n reward_expiration: Timestamp;\n }\n\n interface RewardDetails {\n // Amount that we authorized for this reward.\n total_authorized: AmountString;\n\n // Amount that was picked up by the user already.\n total_picked_up: AmountString;\n\n // Human-readable reason given when authorizing the reward.\n reason: string;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n expiration: Timestamp;\n\n // Reserve public key from which the reward is funded.\n reserve_pub: EddsaPublicKey;\n\n // Array showing the pickup operations of the wallet (possibly empty!).\n // Only present if asked for explicitly.\n pickups?: PickupDetail[];\n }\n interface PickupDetail {\n // Unique identifier for the pickup operation.\n pickup_id: HashCode;\n\n // Number of planchets involved.\n num_planchets: Integer;\n\n // Total amount requested for this pickup_id.\n requested_amount: AmountString;\n }\n\n interface RewardsResponse {\n // List of rewards that are present in the backend.\n rewards: Reward[];\n }\n interface Reward {\n // ID of the reward in the backend database.\n row_id: number;\n\n // Unique identifier for the reward.\n reward_id: HashCode;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n }\n\n export interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n // \"NONE\" or 0: No algorithm (no pos confirmation will be generated)\n // \"TOTP_WITHOUT_PRICE\" or 1: Without amounts (typical OTP device)\n // \"TOTP_WITH_PRICE\" or 2: With amounts (special-purpose OTP device)\n // The \"String\" variants are supported @since protocol **v7**.\n otp_algorithm: Integer | string;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDevicePatchDetails {\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDeviceSummaryResponse {\n // Array of devices that are present in our backend.\n otp_devices: OtpDeviceEntry[];\n }\n export interface OtpDeviceEntry {\n // Device identifier.\n otp_device_id: string;\n\n // Human-readable description for the device.\n device_description: string;\n }\n\n export interface OtpDeviceDetails {\n // Human-readable description for the device.\n device_description: string;\n\n // Algorithm for computing the POS confirmation.\n //\n // Currently, the following numbers are defined:\n // 0: None\n // 1: TOTP without price\n // 2: TOTP with price\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n\n // Current time for time-based OTP devices.\n // Will match the faketime argument of the\n // query if one was present, otherwise the current\n // time at the backend.\n //\n // Available since protocol **v10**.\n otp_timestamp: Integer;\n\n // Current OTP confirmation string of the device.\n // Matches exactly the string that would be returned\n // as part of a payment confirmation for the given\n // amount and time (so may contain multiple OTP codes).\n //\n // If the otp_algorithm is time-based, the code is\n // returned for the current time, or for the faketime\n // if a TIMESTAMP query argument was provided by the client.\n //\n // When using OTP with counters, the counter is **NOT**\n // increased merely because this endpoint created\n // an OTP code (this is a GET request, after all!).\n //\n // If the otp_algorithm requires an amount, the\n // amount argument must be specified in the\n // query, otherwise the otp_code is not\n // generated.\n //\n // This field is *optional* in the response, as it is\n // only provided if we could compute it based on the\n // otp_algorithm and matching client query arguments.\n //\n // Available since protocol **v10**.\n otp_code?: string;\n }\n export interface TemplateAddDetails {\n // Template ID to use.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n\n }\n export interface TemplateContractDetails {\n // Human-readable summary for the template.\n summary?: string;\n\n // Required currency for payments to the template.\n // The user may specify any amount, but it must be\n // in this currency.\n // This parameter is optional and should not be present\n // if \"amount\" is given.\n currency?: string;\n\n // The price is imposed by the merchant and cannot be changed by the customer.\n // This parameter is optional.\n amount?: AmountString;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age: Integer;\n\n // The time the customer need to pay before his order will be deleted.\n // It is deleted if the customer did not pay and if the duration is over.\n pay_duration: RelativeTime;\n }\n\n export interface TemplateContractDetailsDefaults {\n summary?: string;\n\n currency?: string;\n\n amount?: AmountString;\n\n minimum_age?: Integer;\n\n pay_duration?: RelativeTime;\n }\n export interface TemplatePatchDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n\n }\n\n export interface TemplateSummaryResponse {\n // List of templates that are present in our backend.\n templates: TemplateEntry[];\n }\n\n export interface TemplateEntry {\n // Template identifier, as found in the template.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n }\n\n export interface WalletTemplateDetails {\n // Hard-coded information about the contrac terms\n // for this template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface UsingTemplateDetails {\n // Summary of the template\n summary?: string;\n\n // The amount entered by the customer.\n amount?: AmountString;\n }\n\n export interface WebhookAddDetails {\n // Webhook ID to use.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookPatchDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookSummaryResponse {\n // Return webhooks that are present in our backend.\n webhooks: WebhookEntry[];\n }\n\n export interface WebhookEntry {\n // Webhook identifier, as found in the webhook.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n }\n\n export interface WebhookDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface TokenFamilyCreateRequest {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n // If not specified, merchant backend will use the current time.\n valid_after?: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export enum TokenFamilyKind {\n Discount = \"discount\",\n Subscription = \"subscription\",\n }\n\n export interface TokenFamilyUpdateRequest {\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n }\n\n export interface TokenFamiliesList {\n // All configured token families of this instance.\n token_families: TokenFamilySummary[];\n }\n\n export interface TokenFamilySummary {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export interface TokenFamilyDetails {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n\n // How many tokens have been issued for this family.\n issued: Integer;\n\n // How many tokens have been redeemed for this family.\n redeemed: Integer;\n }\n export interface ContractTerms {\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: { [lang_tag: string]: string };\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: AmountString;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional. When POSTing to the\n // merchant, the placeholder \"${ORDER_ID}\" will be\n // replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL).\n // Note that this placeholder can only be used once.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: { [lang_tag: string]: string };\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: AmountString;\n\n // List of products that are part of the purchase (see Product).\n products: Product[];\n\n // Time when this contract was generated.\n timestamp: Timestamp;\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: Timestamp;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: Timestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: Timestamp;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: EddsaPublicKey;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // More info about the merchant, see below.\n merchant: Merchant;\n\n // The hash of the merchant instance's wire details.\n h_wire: HashCode;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: Exchange[];\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: Timestamp;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: RelativeTime;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\n }\n\n export 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?: Integer;\n\n // 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?: ImageDataUrl;\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?: Timestamp;\n }\n\n export interface Tax {\n // The name of the tax.\n name: string;\n\n // Amount paid in tax.\n tax: AmountString;\n }\n export interface Merchant {\n // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\n }\n // Delivery location, loosely modeled as a subset of\n // ISO20022's PostalAddress25.\n export 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 interface Auditor {\n // Official name.\n name: string;\n\n // Auditor's public key.\n auditor_pub: EddsaPublicKey;\n\n // Base URL of the auditor.\n url: string;\n }\n export interface Exchange {\n // The exchange's base URL.\n url: string;\n\n // How much would the merchant like to use this exchange.\n // The wallet should use a suitable exchange with high\n // priority. The following priority values are used, but\n // it should be noted that they are NOT in any way normative.\n //\n // 0: likely it will not work (recently seen with account\n // restriction that would be bad for this merchant)\n // 512: merchant does not know, might be down (merchant\n // did not yet get /wire response).\n // 1024: good choice (recently confirmed working)\n priority: Integer;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKey;\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 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\n/**\n * Imports.\n */\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http.js\";\n\n/**\n * Implementation of the HTTP request library interface for node.\n */\nexport class HttpLibImpl implements HttpRequestLibrary {\n fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n throw new Error(\"Method not implemented.\");\n }\n}\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 * Helpers for doing XMLHttpRequest-s that are based on ES6 promises.\n * Allows for easy mocking for test cases.\n *\n * The API is inspired by the HTML5 fetch API.\n */\n\n/**\n * Imports\n */\n\nimport * as impl from \"#http-impl\";\nimport * as common from \"./http-common.js\";\n\nexport * from \"./http-common.js\";\n\nexport function createPlatformHttpLib(\n args?: common.HttpLibArgs,\n): common.HttpRequestLibrary {\n return new impl.HttpLibImpl(args);\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) 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 { codecForAny } from \"./codec.js\";\nimport {\n TalerMerchantApi,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n} from \"./http-client/types.js\";\nimport { HttpStatusCode } from \"./http-status-codes.js\";\nimport {\n createPlatformHttpLib,\n expectSuccessResponseOrThrow,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http.js\";\nimport { FacadeCredentials } from \"./libeufin-api-types.js\";\nimport { LibtoolVersion } from \"./libtool-version.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n MerchantInstancesResponse,\n MerchantPostOrderRequest,\n MerchantPostOrderResponse,\n MerchantTemplateAddDetails,\n codecForMerchantPostOrderResponse,\n} from \"./merchant-api-types.js\";\nimport {\n FailCasesByMethod,\n OperationFail,\n OperationOk,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"./operation.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { TalerProtocolDuration } from \"./time.js\";\n\nconst logger = new Logger(\"MerchantApiClient.ts\");\n\n// FIXME: Explain!\nexport type TalerMerchantResultByMethod<prop extends keyof MerchantApiClient> =\n ResultByMethod<MerchantApiClient, prop>;\n\n// FIXME: Explain!\nexport type TalerMerchantErrorsByMethod<prop extends keyof MerchantApiClient> =\n FailCasesByMethod<MerchantApiClient, prop>;\n\nexport interface MerchantAuthConfiguration {\n method: \"external\" | \"token\";\n token?: string;\n}\n\n// FIXME: Why do we need this? Describe / fix!\nexport interface PartialMerchantInstanceConfig {\n auth?: MerchantAuthConfiguration;\n id: string;\n name: string;\n paytoUris: string[];\n address?: unknown;\n jurisdiction?: unknown;\n defaultWireTransferDelay?: TalerProtocolDuration;\n defaultPayDelay?: TalerProtocolDuration;\n}\n\nexport interface CreateMerchantTippingReserveRequest {\n // Amount that the merchant promises to put into the reserve\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for tipping\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\"\n wire_method: string;\n}\n\nexport interface DeleteTippingReserveArgs {\n reservePub: string;\n purge?: boolean;\n}\n\ninterface MerchantBankAccount {\n // The payto:// URI where the wallet will send coins.\n payto_uri: string;\n\n // Optional base URL for a facade where the\n // merchant backend can see incoming wire\n // transfers to reconcile its accounting\n // with that of the exchange. Used by\n // taler-merchant-wirewatch.\n credit_facade_url?: string;\n\n // Credentials for accessing the credit facade.\n credit_facade_credentials?: FacadeCredentials;\n}\n\nexport interface MerchantInstanceConfig {\n auth: MerchantAuthConfiguration;\n id: string;\n name: string;\n address: unknown;\n jurisdiction: unknown;\n use_stefan: boolean;\n default_wire_transfer_delay: TalerProtocolDuration;\n default_pay_delay: TalerProtocolDuration;\n}\n\nexport interface PrivateOrderStatusQuery {\n instance?: string;\n orderId: string;\n sessionId?: string;\n}\n\nexport interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A base64-encoded key\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: number;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: number;\n}\n\n/**\n * Client for the GNU Taler merchant backend.\n */\nexport class MerchantApiClient {\n /**\n * Base URL for the particular instance that this merchant API client\n * is for.\n */\n private baseUrl: string;\n\n readonly auth: MerchantAuthConfiguration;\n\n public readonly PROTOCOL_VERSION = \"6:0:2\";\n\n constructor(\n baseUrl: string,\n options: { auth?: MerchantAuthConfiguration } = {},\n ) {\n this.baseUrl = baseUrl;\n\n this.auth = options?.auth ?? {\n method: \"external\",\n };\n }\n\n httpClient = createPlatformHttpLib();\n\n async changeAuth(auth: MerchantAuthConfiguration): Promise<void> {\n const url = new URL(\"private/auth\", this.baseUrl);\n const res = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: auth,\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(res);\n }\n\n async getPrivateInstanceInfo(): Promise<any> {\n const url = new URL(\"private\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n return await resp.json();\n }\n\n async deleteInstance(instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(resp);\n }\n\n async createInstance(req: MerchantInstanceConfig): Promise<void> {\n const url = new URL(\"management/instances\", this.baseUrl);\n await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n }\n\n async getInstances(): Promise<MerchantInstancesResponse> {\n const url = new URL(\"management/instances\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getInstanceFullDetails(instanceId: string): Promise<any> {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n try {\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return resp.json();\n } catch (e) {\n throw e;\n }\n }\n\n async createOrder(\n req: MerchantPostOrderRequest,\n ): Promise<MerchantPostOrderResponse> {\n let url = new URL(\"private/orders\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantPostOrderResponse(),\n );\n }\n\n async deleteOrder(req: { orderId: string; force?: boolean }): Promise<void> {\n let url = new URL(`private/orders/${req.orderId}`, this.baseUrl);\n if (req.force) {\n url.searchParams.set(\"force\", \"yes\");\n }\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n if (resp.status !== 204) {\n throw Error(`failed to delete order (status ${resp.status})`);\n }\n }\n\n async queryPrivateOrderStatus(\n query: PrivateOrderStatusQuery,\n ): Promise<TalerMerchantApi.MerchantOrderStatusResponse> {\n const reqUrl = new URL(`private/orders/${query.orderId}`, this.baseUrl);\n if (query.sessionId) {\n reqUrl.searchParams.set(\"session_id\", query.sessionId);\n }\n const resp = await this.httpClient.fetch(reqUrl.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n }\n\n async giveRefund(r: {\n instance: string;\n orderId: string;\n amount: string;\n justification: string;\n }): Promise<{ talerRefundUri: string }> {\n const reqUrl = new URL(`private/orders/${r.orderId}/refund`, this.baseUrl);\n const resp = await this.httpClient.fetch(reqUrl.href, {\n method: \"POST\",\n body: {\n refund: r.amount,\n reason: r.justification,\n },\n });\n const respBody = await resp.json();\n return {\n talerRefundUri: respBody.taler_refund_uri,\n };\n }\n\n async createTemplate(req: MerchantTemplateAddDetails) {\n let url = new URL(\"private/templates\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async getTemplate(templateId: string) {\n let url = new URL(`private/templates/${templateId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAny());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig(): Promise<OperationOk<TalerMerchantApi.VersionResponse>> {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async createOtpDevice(\n req: OtpDeviceAddDetails,\n ): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>> {\n let url = new URL(\"private/otp-devices\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n private makeAuthHeader(): Record<string, string> {\n switch (this.auth.method) {\n case \"external\":\n return {};\n case \"token\":\n return {\n Authorization: `Bearer ${this.auth.token}`,\n };\n }\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 TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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", "/*\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 { codecForAmountString } from \"./amounts.js\";\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\", codecForAmountString())\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\", codecForAmountString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"closing_fee\", codecForAmountString())\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\", codecForAmountString())\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 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, Duration } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\n/**\n * Logger.\n */\nconst logger = new Logger(\"OperationThrottler.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 task.\n */\nclass TaskState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n 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 TaskThrottler {\n private perTaskInfo: { [taskId: string]: TaskState } = {};\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): TaskState {\n const s = this.perTaskInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perTaskInfo[origin] = new TaskState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(taskId: string): boolean {\n for (let [k, v] of Object.entries(this.perTaskInfo)) {\n // Remove throttled tasks that haven't seen an update in more than one hour.\n if (\n Duration.cmp(\n AbsoluteTime.difference(v.lastUpdate, AbsoluteTime.now()),\n Duration.fromSpec({ hours: 1 }),\n ) > 1\n ) {\n delete this.perTaskInfo[k];\n }\n }\n return this.getState(taskId).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(taskId: string): Record<string, unknown> {\n const state = this.getState(taskId);\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", "/*\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 * Client for the Taler (demo-)bank.\n */\n\n/**\n * Imports.\n */\nimport {\n AmountString,\n base64FromArrayBuffer,\n buildCodecForObject,\n Codec,\n codecForAny,\n codecForString,\n encodeCrock,\n getRandomBytes,\n HttpStatusCode,\n j2s,\n Logger,\n opEmptySuccess,\n opKnownHttpFailure,\n opUnknownFailure,\n stringToBytes,\n TalerError,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n checkSuccessResponseOrThrow,\n createPlatformHttpLib,\n HttpRequestLibrary,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"bank-api-client.ts\");\n\nexport enum CreditDebitIndicator {\n Credit = \"credit\",\n Debit = \"debit\",\n}\n\nexport interface BankAccountBalanceResponse {\n balance: {\n amount: AmountString;\n credit_debit_indicator: CreditDebitIndicator;\n };\n}\n\nexport interface BankUser {\n username: string;\n password: string;\n accountPaytoUri: string;\n}\n\nexport interface WithdrawalOperationInfo {\n withdrawal_id: string;\n taler_withdraw_uri: string;\n}\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nfunction makeBasicAuthHeader(username: string, password: string): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\nconst codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>\n buildCodecForObject<WithdrawalOperationInfo>()\n .property(\"withdrawal_id\", codecForString())\n .property(\"taler_withdraw_uri\", codecForString())\n .build(\"WithdrawalOperationInfo\");\n\nexport interface BankAccessApiClientArgs {\n auth?: { username: string; password: string };\n httpClient?: HttpRequestLibrary;\n}\n\nexport interface BankAccessApiCreateTransactionRequest {\n amount: AmountString;\n paytoUri: string;\n}\n\nexport class WireGatewayApiClientArgs {\n auth?: {\n username: string;\n password: string;\n };\n httpClient?: HttpRequestLibrary;\n}\n\n/**\n * This API look like it belongs to harness\n * but it will be nice to have in utils to be used by others\n */\nexport class WireGatewayApiClient {\n httpLib;\n\n constructor(\n private baseUrl: string,\n private args: WireGatewayApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n private makeAuthHeader(): Record<string, string> {\n const auth = this.args.auth;\n if (auth) {\n return {\n Authorization: makeBasicAuthHeader(auth.username, auth.password),\n };\n }\n return {};\n }\n\n async adminAddIncoming(params: {\n amount: string;\n reservePub: string;\n debitAccountPayto: string;\n }): Promise<void> {\n let url = new URL(`admin/add-incoming`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount: params.amount,\n reserve_pub: params.reservePub,\n debit_account: params.debitAccountPayto,\n },\n headers: this.makeAuthHeader(),\n });\n logger.info(`add-incoming response status: ${resp.status}`);\n await checkSuccessResponseOrThrow(resp);\n }\n}\n\nexport interface ChallengeContactData {\n // E-Mail address\n email?: string;\n\n // Phone number.\n phone?: string;\n}\n\nexport interface AccountBalance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n}\n\nexport interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n challenge_contact_data?: ChallengeContactData;\n\n // 'payto' address pointing a bank account\n // external to the libeufin-bank.\n // Payments will be sent to this bank account\n // when the user wants to convert the local currency\n // back to fiat currency outside libeufin-bank.\n cashout_payto_uri?: string;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: string;\n}\n\nexport interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: AccountBalance;\n\n // payto://-URI of the account.\n payto_uri: string;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: string;\n}\n\nexport interface ConfirmWithdrawalArgs {\n withdrawalOperationId: string;\n}\n\n/**\n * Client for the Taler corebank API.\n */\nexport class TalerCorebankApiClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n private baseUrl: string,\n private args: BankAccessApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n setAuth(auth: { username: string; password: string }) {\n this.args.auth = auth;\n }\n\n private makeAuthHeader(): Record<string, string> {\n if (!this.args.auth) {\n return {};\n }\n const authHeaderValue = makeBasicAuthHeader(\n this.args.auth.username,\n this.args.auth.password,\n );\n return {\n Authorization: authHeaderValue,\n };\n }\n\n async getAccountBalance(\n username: string,\n ): Promise<BankAccountBalanceResponse> {\n const url = new URL(`accounts/${username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getTransactions(username: string): Promise<void> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"GET\",\n headers: {\n ...this.makeAuthHeader(),\n },\n });\n\n const res = await readSuccessResponseJsonOrThrow(resp, codecForAny());\n logger.info(`result: ${j2s(res)}`);\n }\n\n async createTransaction(\n username: string,\n req: BankAccessApiCreateTransactionRequest,\n ): Promise<any> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n return await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async registerAccountExtended(req: RegisterAccountRequest): Promise<void> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n }\n\n /**\n * Register a new account and return information about it.\n *\n * This is a helper, as it does both the registration and the\n * account info query.\n */\n async registerAccount(username: string, password: string): Promise<BankUser> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n username,\n password,\n name: username,\n },\n headers: this.makeAuthHeader(),\n });\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n // FIXME: Corebank should directly return this info!\n const infoUrl = new URL(`accounts/${username}`, this.baseUrl);\n const infoResp = await this.httpLib.fetch(infoUrl.href, {\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n });\n // FIXME: Validate!\n const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(\n infoResp,\n codecForAny(),\n );\n return {\n password,\n username,\n accountPaytoUri: acctInfo.payto_uri,\n };\n }\n\n async createRandomBankUser(): Promise<BankUser> {\n const username = \"user-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n const password = \"pw-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n return await this.registerAccount(username, password);\n }\n\n async createWithdrawalOperation(\n user: string,\n amount: string,\n ): Promise<WithdrawalOperationInfo> {\n const url = new URL(`accounts/${user}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount,\n },\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForWithdrawalOperationInfo(),\n );\n }\n\n async confirmWithdrawalOperation(\n username: string,\n wopi: ConfirmWithdrawalArgs,\n ) {\n const url = new URL(\n `accounts/${username}/withdrawals/${wopi.withdrawalOperationId}/confirm`,\n this.baseUrl,\n );\n logger.info(`confirming withdrawal operation via ${url.href}`);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async abortWithdrawalOperation(wopi: WithdrawalOperationInfo): Promise<void> {\n const url = new URL(\n `withdrawals/${wopi.withdrawal_id}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\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\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) 2019-2020 Taler Systems SA\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Classes and helpers for error handling specific to wallet operations.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport {\n AbsoluteTime,\n CancellationToken,\n PaymentInsufficientBalanceDetails,\n TalerErrorCode,\n TalerErrorDetail,\n TransactionType,\n} from \"@gnu-taler/taler-util\";\n\ntype empty = Record<string, never>;\n\nexport interface DetailsMap {\n [TalerErrorCode.WALLET_PENDING_OPERATION_FAILED]: {\n innerError: TalerErrorDetail;\n transactionId?: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT]: {\n exchangeBaseUrl: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE]: {\n exchangeProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK]: empty;\n [TalerErrorCode.WALLET_REWARD_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_ORDER_ALREADY_CLAIMED]: {\n orderId: string;\n claimUrl: string;\n };\n [TalerErrorCode.WALLET_ORDER_ALREADY_PAID]: {\n orderId: string;\n fulfillmentUrl: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_MALFORMED]: empty;\n [TalerErrorCode.WALLET_CONTRACT_TERMS_SIGNATURE_INVALID]: {\n merchantPub: string;\n orderId: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_BASE_URL_MISMATCH]: {\n baseUrlForDownload: string;\n baseUrlFromContractTerms: string;\n };\n [TalerErrorCode.WALLET_INVALID_TALER_PAY_URI]: {\n talerPayUri: string;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n errorResponse?: any;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION]: {\n stack?: string;\n };\n [TalerErrorCode.WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE]: {\n bankProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN]: {\n operation: string;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED]: {\n requestUrl: string;\n requestMethod: string;\n throttleStats: Record<string, unknown>;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.WALLET_NETWORK_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n };\n [TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n validationError?: string;\n /**\n * Content type of the response, usually only specified if not the\n * expected content type.\n */\n contentType?: string;\n };\n [TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR]: {\n operation: string;\n error: string;\n detail: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: {\n numErrors: number;\n errorsPerCoin: Record<number, TalerErrorDetail>;\n };\n [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: {\n lastError?: TalerErrorDetail;\n };\n [TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR]: {\n httpStatusCode: number;\n };\n [TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR]: {\n requestError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_ERROR]: {\n innerError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_BAD_REQUEST]: {\n detail: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED]: {\n kycUrl: string;\n };\n [TalerErrorCode.WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_REFRESH_GROUP_INCOMPLETE]: {\n numErrors: number;\n /**\n * Errors, can be truncated.\n */\n errors: TalerErrorDetail[];\n };\n [TalerErrorCode.WALLET_EXCHANGE_BASE_URL_MISMATCH]: {\n urlWallet: string;\n urlExchange: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_UNAVAILABLE]: {\n exchangeBaseUrl: string;\n innerError: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_DB_UNAVAILABLE]: {\n innerError: TalerErrorDetail | undefined;\n };\n}\n\ntype ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : empty;\n\nexport function makeErrorDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n): TalerErrorDetail {\n if (!hint && !(detail as any).hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return { code, when, hint, ...detail };\n}\n\nexport function makePendingOperationFailedError(\n innerError: TalerErrorDetail,\n tag: TransactionType,\n uid: string,\n): TalerError {\n return TalerError.fromDetail(TalerErrorCode.WALLET_PENDING_OPERATION_FAILED, {\n innerError,\n transactionId: `${tag}:${uid}`,\n });\n}\n\nexport function summarizeTalerErrorDetail(ed: TalerErrorDetail): string {\n const errName = TalerErrorCode[ed.code] ?? \"<unknown>\";\n return `Error (${ed.code}/${errName})`;\n}\n\nfunction getDefaultHint(code: number): string {\n const errName = TalerErrorCode[code];\n if (errName) {\n return `Error (${errName})`;\n } else {\n return `Error (<unknown>)`;\n }\n}\n\nexport class TalerProtocolViolationError extends Error {\n constructor(hint?: string) {\n let msg: string;\n if (hint) {\n msg = `Taler protocol violation error (${hint})`;\n } else {\n msg = `Taler protocol violation error`;\n }\n super(msg);\n Object.setPrototypeOf(this, TalerProtocolViolationError.prototype);\n }\n}\n\n// compute a subset of TalerError, just for http request\ntype HttpErrors =\n | TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT\n | TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED\n | TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE\n | TalerErrorCode.WALLET_NETWORK_ERROR\n | TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR;\n\ntype TalerHttpErrorsDetails = {\n [code in HttpErrors]: TalerError<DetailsMap[code]>;\n};\n\nexport type TalerHttpError =\n TalerHttpErrorsDetails[keyof TalerHttpErrorsDetails];\n\nexport class TalerError<T = any> extends Error {\n errorDetail: TalerErrorDetail & T;\n cause: Error | undefined;\n private constructor(d: TalerErrorDetail & T, cause?: Error) {\n super(d.hint ?? `Error (code ${d.code})`);\n this.errorDetail = d;\n this.cause = cause;\n Object.setPrototypeOf(this, TalerError.prototype);\n }\n\n static fromDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n cause?: Error,\n ): TalerError {\n if (!hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return new TalerError<unknown>({ code, when, hint, ...detail }, cause);\n }\n\n static fromUncheckedDetail(d: TalerErrorDetail, c?: Error): TalerError {\n return new TalerError<unknown>({ ...d }, c);\n }\n\n static fromException(e: any): TalerError {\n const errDetail = getErrorDetailFromException(e);\n return new TalerError(errDetail, e);\n }\n\n hasErrorCode<C extends keyof DetailsMap>(\n code: C,\n ): this is TalerError<DetailsMap[C]> {\n return this.errorDetail.code === code;\n }\n\n toString(): string {\n return `TalerError: ${JSON.stringify(this.errorDetail)}`;\n }\n}\n\n/**\n * Convert an exception (or anything that was thrown) into\n * a TalerErrorDetail object.\n */\nexport function getErrorDetailFromException(e: any): TalerErrorDetail {\n if (e instanceof TalerError) {\n return e.errorDetail;\n }\n if (e instanceof CancellationToken.CancellationError) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_CORE_REQUEST_CANCELLED,\n {},\n );\n return err;\n }\n if (e instanceof Error) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {\n stack: e.stack,\n },\n `unexpected exception (message: ${e.message})`,\n );\n return err;\n }\n // Something was thrown that is not even an exception!\n // Try to stringify it.\n let excString: string;\n try {\n excString = e.toString();\n } catch (e) {\n // Something went horribly wrong.\n excString = \"can't stringify exception\";\n }\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {},\n `unexpected exception (not an exception, ${excString})`,\n );\n return err;\n}\n\nexport function assertUnreachable(x: never): never {\n throw new Error(\"Didn't expect to get here\");\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 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 {\n Codec,\n buildCodecForObject,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport {\n AmountString,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n} from \"./taler-types.js\";\nimport { TalerPreciseTimestamp, TalerProtocolTimestamp } from \"./time.js\";\nimport {\n RefreshReason,\n ScopeInfo,\n TalerErrorDetail,\n TransactionIdStr,\n TransactionStateFilter,\n WithdrawalExchangeAccountDetails,\n codecForScopeInfo,\n} from \"./wallet-types.js\";\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n *\n * it will be removed in next release\n *\n * @deprecated use scopeInfo\n */\n currency?: string;\n\n /**\n * return only transactions in the given scopeInfo\n */\n scopeInfo?: ScopeInfo;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * Sort order of the transaction items.\n * By default, items are sorted ascending by their\n * main timestamp.\n *\n * ascending: ascending by timestamp, but pending transactions first\n * descending: ascending by timestamp, but pending transactions first\n * stable-ascending: ascending by timestamp, with pending transactions amidst other transactions\n * (stable in the sense of: pending transactions don't jump around)\n */\n sort?: \"ascending\" | \"descending\" | \"stable-ascending\";\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n\n filterByState?: TransactionStateFilter;\n}\n\nexport interface TransactionState {\n major: TransactionMajorState;\n minor?: TransactionMinorState;\n}\n\nexport enum TransactionMajorState {\n // No state, only used when reporting transitions into the initial state\n None = \"none\",\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Suspended = \"suspended\",\n Dialog = \"dialog\",\n SuspendedAborting = \"suspended-aborting\",\n Failed = \"failed\",\n Expired = \"expired\",\n // Only used for the notification, never in the transaction history\n Deleted = \"deleted\",\n}\n\nexport enum TransactionMinorState {\n // Placeholder until D37 is fully implemented\n Unknown = \"unknown\",\n Deposit = \"deposit\",\n KycRequired = \"kyc\",\n AmlRequired = \"aml\",\n MergeKycRequired = \"merge-kyc\",\n Track = \"track\",\n SubmitPayment = \"submit-payment\",\n RebindSession = \"rebind-session\",\n Refresh = \"refresh\",\n Pickup = \"pickup\",\n AutoRefund = \"auto-refund\",\n User = \"user\",\n Bank = \"bank\",\n Exchange = \"exchange\",\n ClaimProposal = \"claim-proposal\",\n CheckRefund = \"check-refund\",\n CreatePurse = \"create-purse\",\n DeletePurse = \"delete-purse\",\n RefreshExpired = \"refresh-expired\",\n Ready = \"ready\",\n Merge = \"merge\",\n Repurchase = \"repurchase\",\n BankRegisterReserve = \"bank-register-reserve\",\n BankConfirmTransfer = \"bank-confirm-transfer\",\n WithdrawCoins = \"withdraw-coins\",\n ExchangeWaitReserve = \"exchange-wait-reserve\",\n AbortingBank = \"aborting-bank\",\n Aborting = \"aborting\",\n Refused = \"refused\",\n Withdraw = \"withdraw\",\n MerchantOrderProposed = \"merchant-order-proposed\",\n Proposed = \"proposed\",\n RefundAvailable = \"refund-available\",\n AcceptRefund = \"accept-refund\",\n PaidByOther = \"paid-by-other\",\n}\n\nexport enum TransactionAction {\n Delete = \"delete\",\n Suspend = \"suspend\",\n Resume = \"resume\",\n Abort = \"abort\",\n Fail = \"fail\",\n Retry = \"retry\",\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: TalerPreciseTimestamp;\n\n /**\n * Transaction state, as per DD37.\n */\n txState: TransactionState;\n\n /**\n * Possible transitions based on the current state.\n */\n txActions: TransactionAction[];\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 /**\n * If the transaction minor state is in KycRequired this field is going to\n * have the location where the user need to go to complete KYC information.\n */\n kycUrl?: string;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionReward\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit\n | TransactionInternalWithdrawal\n | TransactionRecoup\n | TransactionDenomLoss;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n InternalWithdrawal = \"internal-withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Reward = \"reward\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n Recoup = \"recoup\",\n DenomLoss = \"denom-loss\",\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 * @deprecated in favor of exchangeCreditAccounts\n */\n exchangePaytoUris: string[];\n\n exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\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 exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\n}\n\nexport enum DenomLossEventType {\n DenomExpired = \"denom-expired\",\n DenomVanished = \"denom-vanished\",\n DenomUnoffered = \"denom-unoffered\",\n}\n\n/**\n * A transaction to indicate financial loss due to denominations\n * that became unusable for deposits.\n */\nexport interface TransactionDenomLoss extends TransactionCommon {\n type: TransactionType.DenomLoss;\n lossEventType: DenomLossEventType;\n exchangeBaseUrl: string;\n}\n\n/**\n * A withdrawal transaction (either bank-integrated or manual).\n */\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\n/**\n * Internal withdrawal operation, only reported on request.\n *\n * Some transactions (peer-*-credit) internally do a withdrawal,\n * but only the peer-*-credit transaction is reported.\n *\n * The internal withdrawal transaction allows to access the details of\n * the underlying withdrawal for testing/debugging.\n *\n * It is usually not reported, so that amounts of transactions properly\n * add up, since the amountEffecive of the withdrawal is already reported\n * in the peer-*-credit transaction.\n */\nexport interface TransactionInternalWithdrawal extends TransactionCommon {\n type: TransactionType.InternalWithdrawal;\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 * Only available in the right state.\n */\n talerUri: string | undefined;\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 * Only present if the transaction is in a state where the other party can\n * 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\n/**\n * The exchange revoked a key and the wallet recoups funds.\n */\nexport interface TransactionRecoup extends TransactionCommon {\n type: TransactionType.Recoup;\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 * 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 /**\n * Does this purchase has an pos validation\n */\n posConfirmation: string | undefined;\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 * 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\n/**\n * Summary information about the payment that we got a refund for.\n */\nexport interface RefundPaymentInfo {\n summary: string;\n summary_i18n?: InternationalizedString;\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\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 // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n paymentInfo: RefundPaymentInfo | undefined;\n}\n\nexport interface TransactionReward extends TransactionCommon {\n type: TransactionType.Reward;\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\nexport interface DepositTransactionTrackingState {\n // Raw wire transfer identifier of the deposit.\n wireTransferId: string;\n // When was the wire transfer given to the bank.\n timestampExecuted: TalerProtocolTimestamp;\n // Total amount transfer for this wtid (including fees)\n amountRaw: AmountString;\n // Wire fee amount for this exchange\n wireFee: 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 trackingState: Array<DepositTransactionTrackingState>;\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 interface WithdrawalTransactionByURIRequest {\n talerWithdrawUri: string;\n}\n\nexport const codecForWithdrawalTransactionByURIRequest =\n (): Codec<WithdrawalTransactionByURIRequest> =>\n buildCodecForObject<WithdrawalTransactionByURIRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .build(\"WithdrawalTransactionByURIRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"scopeInfo\", codecOptional(codecForScopeInfo()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\n \"sort\",\n codecOptional(\n codecForEither(\n codecForConstString(\"ascending\"),\n codecForConstString(\"descending\"),\n codecForConstString(\"stable-ascending\"),\n ),\n ),\n )\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(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n\nexport interface ListAssociatedRefreshesRequest {\n transactionId: string;\n}\n\nexport const codecForListAssociatedRefreshesRequest =\n (): Codec<ListAssociatedRefreshesRequest> =>\n buildCodecForObject<ListAssociatedRefreshesRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ListAssociatedRefreshesRequest\");\n\nexport interface ListAssociatedRefreshesResponse {\n transactionIds: string[];\n}\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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n renderContext,\n} from \"./codec.js\";\nimport {\n CurrencySpecification,\n TemplateParams,\n WithdrawalOperationStatus,\n} from \"./index.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 AccountRestriction,\n AmountString,\n AuditorDenomSig,\n CoinEnvelope,\n DenomKeyType,\n DenominationPubKey,\n ExchangeAuditor,\n ExchangeWireAccount,\n InternationalizedString,\n MerchantContractTerms,\n MerchantInfo,\n PeerContractTerms,\n UnblindedSignature,\n codecForExchangeWireAccount,\n codecForMerchantContractTerms,\n codecForPeerContractTerms,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n TalerPreciseTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForPreciseTimestamp,\n codecForTimestamp,\n} from \"./time.js\";\nimport {\n OrderShortInfo,\n TransactionState,\n TransactionType,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\ndeclare const __txId: unique symbol;\nexport type TransactionIdStr = `txn:${string}:${string}` & { [__txId]: true };\n\n/**\n * Identifier for a pending task in the wallet.\n */\ndeclare const __pndId: unique symbol;\nexport type PendingIdStr = `pnd:${string}:${string}` & { [__pndId]: true };\n\ndeclare const __tmbId: unique symbol;\nexport type TombstoneIdStr = `tmb:${string}:${string}` & { [__tmbId]: true };\n\nfunction codecForTransactionIdStr(): Codec<TransactionIdStr> {\n return {\n decode(x: any, c?: Context): TransactionIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as TransactionIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForPendingIdStr(): Codec<PendingIdStr> {\n return {\n decode(x: any, c?: Context): PendingIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as PendingIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForTombstoneIdStr(): Codec<TombstoneIdStr> {\n return {\n decode(x: any, c?: Context): TombstoneIdStr {\n if (typeof x === \"string\" && x.startsWith(\"tmb:\")) {\n return x as TombstoneIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"tmb:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\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\n/**\n * How the amount should be interpreted in a transaction\n * Effective = how the balance is change\n * Raw = effective amount without fee\n *\n * Depending on the transaction, raw can be higher than effective\n */\nexport enum TransactionAmountMode {\n Effective = \"effective\",\n Raw = \"raw\",\n}\n\nexport type GetPlanForOperationRequest =\n | GetPlanForWithdrawRequest\n | GetPlanForDepositRequest;\n// | GetPlanForPushDebitRequest\n// | GetPlanForPullCreditRequest\n// | GetPlanForPaymentRequest\n// | GetPlanForTipRequest\n// | GetPlanForRefundRequest\n// | GetPlanForPullDebitRequest\n// | GetPlanForPushCreditRequest;\n\ninterface GetPlanForWalletInitiatedOperation {\n instructedAmount: AmountString;\n mode: TransactionAmountMode;\n}\n\nexport interface ConvertAmountRequest {\n amount: AmountString;\n type: TransactionAmountMode;\n}\n\nexport const codecForConvertAmountRequest =\n buildCodecForObject<ConvertAmountRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"type\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .build(\"ConvertAmountRequest\");\n\nexport interface GetAmountRequest {\n currency: string;\n}\n\nexport const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetAmountRequest\");\n\ninterface GetPlanToCompleteOperation {\n instructedAmount: AmountString;\n}\n\nconst codecForGetPlanForWalletInitiatedOperation = <\n T extends GetPlanForWalletInitiatedOperation,\n>() =>\n buildCodecForObject<T>()\n .property(\n \"mode\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .property(\"instructedAmount\", codecForAmountString());\n\ninterface GetPlanForWithdrawRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Withdrawal;\n exchangeUrl?: string;\n}\ninterface GetPlanForDepositRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Deposit;\n account: string; //payto string\n}\ninterface GetPlanForPushDebitRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPushDebit;\n}\n\ninterface GetPlanForPullCreditRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPullCredit;\n exchangeUrl: string;\n}\n\nconst codecForGetPlanForWithdrawRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForWithdrawRequest>()\n .property(\"type\", codecForConstString(TransactionType.Withdrawal))\n .property(\"exchangeUrl\", codecOptional(codecForString()))\n .build(\"GetPlanForWithdrawRequest\");\n\nconst codecForGetPlanForDepositRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForDepositRequest>()\n .property(\"type\", codecForConstString(TransactionType.Deposit))\n .property(\"account\", codecForString())\n .build(\"GetPlanForDepositRequest\");\n\nconst codecForGetPlanForPushDebitRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPushDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushDebit))\n .build(\"GetPlanForPushDebitRequest\");\n\nconst codecForGetPlanForPullCreditRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPullCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullCredit))\n .property(\"exchangeUrl\", codecForString())\n .build(\"GetPlanForPullCreditRequest\");\n\ninterface GetPlanForPaymentRequest extends GetPlanToCompleteOperation {\n type: TransactionType.Payment;\n wireMethod: string;\n ageRestriction: number;\n maxDepositFee: AmountString;\n}\n\n// interface GetPlanForTipRequest extends GetPlanForOperationBase {\n// type: TransactionType.Tip;\n// }\n// interface GetPlanForRefundRequest extends GetPlanForOperationBase {\n// type: TransactionType.Refund;\n// }\ninterface GetPlanForPullDebitRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPullDebit;\n}\ninterface GetPlanForPushCreditRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPushCredit;\n}\n\nconst codecForGetPlanForPaymentRequest =\n buildCodecForObject<GetPlanForPaymentRequest>()\n .property(\"type\", codecForConstString(TransactionType.Payment))\n .property(\"maxDepositFee\", codecForAmountString())\n .build(\"GetPlanForPaymentRequest\");\n\nconst codecForGetPlanForPullDebitRequest =\n buildCodecForObject<GetPlanForPullDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullDebit))\n .build(\"GetPlanForPullDebitRequest\");\n\nconst codecForGetPlanForPushCreditRequest =\n buildCodecForObject<GetPlanForPushCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushCredit))\n .build(\"GetPlanForPushCreditRequest\");\n\nexport const codecForGetPlanForOperationRequest =\n (): Codec<GetPlanForOperationRequest> =>\n buildCodecForUnion<GetPlanForOperationRequest>()\n .discriminateOn(\"type\")\n .alternative(\n TransactionType.Withdrawal,\n codecForGetPlanForWithdrawRequest,\n )\n .alternative(TransactionType.Deposit, codecForGetPlanForDepositRequest)\n // .alternative(\n // TransactionType.PeerPushDebit,\n // codecForGetPlanForPushDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPullCredit,\n // codecForGetPlanForPullCreditRequest,\n // )\n // .alternative(TransactionType.Payment, codecForGetPlanForPaymentRequest)\n // .alternative(\n // TransactionType.PeerPullDebit,\n // codecForGetPlanForPullDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPushCredit,\n // codecForGetPlanForPushCreditRequest,\n // )\n .build(\"GetPlanForOperationRequest\");\n\nexport interface GetPlanForOperationResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n counterPartyAmount?: AmountString;\n details: any;\n}\n\nexport const codecForGetPlanForOperationResponse =\n (): Codec<GetPlanForOperationResponse> =>\n buildCodecForObject<GetPlanForOperationResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .property(\"details\", codecForAny())\n .property(\"counterPartyAmount\", codecOptional(codecForAmountString()))\n .build(\"GetPlanForOperationResponse\");\n\nexport interface AmountResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n}\n\nexport const codecForAmountResponse = (): Codec<AmountResponse> =>\n buildCodecForObject<AmountResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .build(\"AmountResponse\");\n\nexport enum BalanceFlag {\n IncomingKyc = \"incoming-kyc\",\n IncomingAml = \"incoming-aml\",\n IncomingConfirmation = \"incoming-confirmation\",\n OutgoingKyc = \"outgoing-kyc\",\n}\n\nexport interface WalletBalance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n /**\n * Does the balance for this currency have a pending\n * transaction?\n *\n * @deprecated use flags and pendingIncoming/pendingOutgoing instead\n */\n hasPendingTransactions: boolean;\n\n /**\n * Is there a transaction that requires user input?\n *\n * @deprecated use flags instead\n */\n requiresUserInput: boolean;\n\n flags: BalanceFlag[];\n}\n\nexport const codecForScopeInfoGlobal = (): Codec<ScopeInfoGlobal> =>\n buildCodecForObject<ScopeInfoGlobal>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Global))\n .build(\"ScopeInfoGlobal\");\n\nexport const codecForScopeInfoExchange = (): Codec<ScopeInfoExchange> =>\n buildCodecForObject<ScopeInfoExchange>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Exchange))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoExchange\");\n\nexport const codecForScopeInfoAuditor = (): Codec<ScopeInfoAuditor> =>\n buildCodecForObject<ScopeInfoAuditor>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Auditor))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoAuditor\");\n\nexport const codecForScopeInfo = (): Codec<ScopeInfo> =>\n buildCodecForUnion<ScopeInfo>()\n .discriminateOn(\"type\")\n .alternative(ScopeType.Global, codecForScopeInfoGlobal())\n .alternative(ScopeType.Exchange, codecForScopeInfoExchange())\n .alternative(ScopeType.Auditor, codecForScopeInfoAuditor())\n .build(\"ScopeInfo\");\n\nexport interface GetCurrencySpecificationRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForGetCurrencyInfoRequest =\n (): Codec<GetCurrencySpecificationRequest> =>\n buildCodecForObject<GetCurrencySpecificationRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"GetCurrencySpecificationRequest\");\n\nexport interface ListExchangesForScopedCurrencyRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForListExchangesForScopedCurrencyRequest =\n (): Codec<ListExchangesForScopedCurrencyRequest> =>\n buildCodecForObject<ListExchangesForScopedCurrencyRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"ListExchangesForScopedCurrencyRequest\");\n\nexport interface GetCurrencySpecificationResponse {\n currencySpecification: CurrencySpecification;\n}\n\nexport interface BuiltinExchange {\n exchangeBaseUrl: string;\n currencyHint: string;\n}\n\nexport interface PartialWalletRunConfig {\n builtin?: Partial<WalletRunConfig[\"builtin\"]>;\n testing?: Partial<WalletRunConfig[\"testing\"]>;\n features?: Partial<WalletRunConfig[\"features\"]>;\n}\n\nexport interface WalletRunConfig {\n /**\n * Initialization values useful for a complete startup.\n *\n * These are values may be overridden by different wallets\n */\n builtin: {\n exchanges: BuiltinExchange[];\n };\n\n /**\n * Unsafe options which it should only be used to create\n * testing environment.\n */\n testing: {\n /**\n * Allow withdrawal of denominations even though they are about to expire.\n */\n denomselAllowLate: boolean;\n devModeActive: boolean;\n insecureTrustExchange: boolean;\n preventThrottling: boolean;\n skipDefaults: boolean;\n emitObservabilityEvents?: boolean;\n };\n\n /**\n * Configurations values that may be safe to show to the user\n */\n features: {\n allowHttp: boolean;\n };\n}\n\nexport interface InitRequest {\n config?: PartialWalletRunConfig;\n}\n\nexport const codecForInitRequest = (): Codec<InitRequest> =>\n buildCodecForObject<InitRequest>()\n .property(\"config\", codecForAny())\n .build(\"InitRequest\");\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 ScopeInfoGlobal = { type: ScopeType.Global; currency: string };\nexport type ScopeInfoExchange = {\n type: ScopeType.Exchange;\n currency: string;\n url: string;\n};\nexport type ScopeInfoAuditor = {\n type: ScopeType.Auditor;\n currency: string;\n url: string;\n};\n\nexport type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;\n\nexport interface BalancesResponse {\n balances: WalletBalance[];\n}\n\nexport const codecForBalance = (): Codec<WalletBalance> =>\n buildCodecForObject<WalletBalance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForAmountString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForAmountString())\n .property(\"pendingOutgoing\", codecForAmountString())\n .property(\"requiresUserInput\", codecForBoolean())\n .property(\"flags\", codecForAny()) // FIXME\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 * Coin was lost as the denomination is not usable anymore.\n */\n DenomLoss = \"denom-loss\",\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: AmountString;\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: TransactionIdStr;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: TransactionIdStr;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecOptional(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\", codecForTransactionIdStr())\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\", codecForTransactionIdStr())\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 * @deprecated use transactionId instead\n */\n walletRewardId: string;\n\n /**\n * Tip transaction ID.\n */\n transactionId: TransactionIdStr;\n\n /**\n * Has the tip already been accepted?\n */\n accepted: boolean;\n\n /**\n * Amount that the merchant gave.\n */\n rewardAmountRaw: AmountString;\n\n /**\n * Amount that arrived at the wallet.\n * Might be lower than the raw amount due to fees.\n */\n rewardAmountEffective: 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: TransactionIdStr;\n next_url?: string;\n}\n\nexport const codecForPrepareTipResult = (): Codec<PrepareTipResult> =>\n buildCodecForObject<PrepareTipResult>()\n .property(\"accepted\", codecForBoolean())\n .property(\"rewardAmountRaw\", codecForAmountString())\n .property(\"rewardAmountEffective\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"expirationTimestamp\", codecForTimestamp)\n .property(\"walletRewardId\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"PrepareRewardResult\");\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(\"transactionId\", codecForTransactionIdStr())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\nexport interface BalanceDetails {}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PaymentInsufficientBalanceDetails {\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 balanceReceiverAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceReceiverDepositable: AmountString;\n\n balanceExchangeDepositable: AmountString;\n\n /**\n * Maximum effective amount that the wallet can spend,\n * when all fees are paid by the wallet.\n */\n maxEffectiveSpendAmount: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n balanceExchangeDepositable: AmountString;\n balanceAgeAcceptable: AmountString;\n balanceReceiverAcceptable: AmountString;\n balanceReceiverDepositable: AmountString;\n maxEffectiveSpendAmount: AmountString;\n /**\n * Exchange doesn't have global fees configured for the relevant year,\n * p2p payments aren't possible.\n */\n missingGlobalFees: boolean;\n };\n };\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PaymentInsufficientBalanceDetails> =>\n buildCodecForObject<PaymentInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceReceiverAcceptable\", codecForAmountString())\n .property(\"balanceReceiverDepositable\", codecForAmountString())\n .property(\"balanceExchangeDepositable\", codecForAmountString())\n .property(\"perExchange\", codecForAny())\n .property(\"maxEffectiveSpendAmount\", 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(\"transactionId\", codecForTransactionIdStr())\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\", codecOptional(codecForAmountString()))\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecForString())\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\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 transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId instead\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: AmountString;\n talerUri: string;\n balanceDetails: PaymentInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n transactionId: TransactionIdStr;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: AmountString;\n amountEffective: AmountString | undefined;\n contractTermsHash: string;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n talerUri: string;\n}\n\nexport interface BankWithdrawDetails {\n status: WithdrawalOperationStatus;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n operationId: string;\n apiBaseUrl: string;\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: TransactionIdStr;\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 AbortDeposit = \"abort-deposit\",\n AbortPeerPushDebit = \"abort-peer-push-debit\",\n AbortPeerPullDebit = \"abort-peer-pull-debit\",\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 * 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 ExchangesShortListResponse {\n exchanges: ShortExchangeListItem[];\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n implementationSemver: string;\n implementationGitHash: string;\n\n /**\n * Wallet-core protocol version supported by this implementation\n * of the API (\"server\" version).\n */\n version: string;\n exchange: string;\n merchant: string;\n\n bankIntegrationApiRange: string;\n bankConversionApiRange: string;\n corebankApiRange: string;\n\n /**\n * @deprecated as bank was split into multiple APIs with separate versioning\n */\n bank: string;\n\n /**\n * @deprecated\n */\n hash: string | undefined;\n\n /**\n * @deprecated will be removed\n */\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\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\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeWireAccount[];\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 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(codecForExchangeWireAccount()))\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 auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n Pending = \"pending\",\n Proposed = \"proposed\",\n Accepted = \"accepted\",\n}\n\nexport enum ExchangeEntryStatus {\n Preset = \"preset\",\n Ephemeral = \"ephemeral\",\n Used = \"used\",\n}\n\nexport enum ExchangeUpdateStatus {\n Initial = \"initial\",\n InitialUpdate = \"initial-update\",\n Suspended = \"suspended\",\n UnavailableUpdate = \"unavailable-update\",\n Ready = \"ready\",\n ReadyUpdate = \"ready-update\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\nexport interface ShortExchangeListItem {\n exchangeBaseUrl: string;\n}\n\n/**\n * Info about an exchange entry in the wallet.\n */\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n masterPub: string | undefined;\n currency: string;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n ageRestrictionOptions: number[];\n\n /**\n * P2P payments are disabled with this exchange\n * (e.g. because no global fees are configured).\n */\n peerPaymentsDisabled: boolean;\n\n /**\n * Set to true if this exchange doesn't charge any fees.\n */\n noFees: boolean;\n\n scopeInfo: ScopeInfo;\n\n lastUpdateTimestamp: TalerPreciseTimestamp | undefined;\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\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(\"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(\"masterPub\", codecOptional(codecForString()))\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeEntryStatus\", codecForAny())\n .property(\"exchangeUpdateStatus\", codecForAny())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .property(\"scopeInfo\", codecForScopeInfo())\n .property(\"lastUpdateErrorInfo\", codecForAny())\n .property(\"lastUpdateTimestamp\", codecOptional(codecForPreciseTimestamp))\n .property(\"noFees\", codecForBoolean())\n .property(\"peerPaymentsDisabled\", codecForBoolean())\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 * @deprecated in favor of withdrawalAccountsList\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\n\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawalDetailsForAmount {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n *\n * @deprecated the client should query the exchange entry instead\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 * Number of coins that would be used for withdrawal.\n *\n * The UIs should warn if this number is too high (roughly at >100).\n */\n numCoins: number;\n\n /**\n * Ways to pay the exchange.\n *\n * @deprecated in favor of withdrawalAccountsList\n */\n paytoUris: string[];\n\n /**\n * Ways to pay the exchange, including accounts that require currency conversion.\n */\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\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 * Scope info of the currency withdrawn.\n */\n scopeInfo: ScopeInfo;\n}\n\nexport interface DenomSelItem {\n denomPubHash: string;\n count: number;\n /**\n * Number of denoms/planchets to skip, because\n * a re-denomination effectively deleted them.\n */\n skip?: number;\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: DenomSelItem[];\n earliestDepositExpiration: TalerProtocolTimestamp;\n hasDenomWithAgeRestriction: boolean;\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 exchangeCreditAccountDetails: WithdrawalExchangeAccountDetails[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\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 scopeInfo: ScopeInfo;\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 /**\n * Language of the returned content.\n *\n * If missing, language is unknown.\n */\n contentLanguage: string | undefined;\n\n /**\n * Available languages as advertised by the exchange.\n */\n tosAvailableLanguages: string[];\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: AmountString;\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\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: AmountString;\n amountToSpend: AmountString;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"IntegrationTestArgs\");\n\nexport interface IntegrationTestV2Args {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n}\n\nexport const codecForIntegrationTestV2Args = (): Codec<IntegrationTestV2Args> =>\n buildCodecForObject<IntegrationTestV2Args>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"IntegrationTestV2Args\");\n\nexport interface GetExchangeEntryByUrlRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeEntryByUrlRequest =\n (): Codec<GetExchangeEntryByUrlRequest> =>\n buildCodecForObject<GetExchangeEntryByUrlRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"GetExchangeEntryByUrlRequest\");\n\nexport type GetExchangeEntryByUrlResponse = ExchangeListItem;\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use a separate API call to start a forced exchange update instead\n */\n forceUpdate?: boolean;\n\n masterPub?: string;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .property(\"masterPub\", codecOptional(codecForString()))\n .build(\"AddExchangeRequest\");\n\nexport interface UpdateExchangeEntryRequest {\n exchangeBaseUrl: string;\n force?: boolean;\n}\n\nexport const codecForUpdateExchangeEntryRequest =\n (): Codec<UpdateExchangeEntryRequest> =>\n buildCodecForObject<UpdateExchangeEntryRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"force\", codecOptional(codecForBoolean()))\n .build(\"UpdateExchangeEntryRequest\");\n\nexport interface GetExchangeResourcesRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeResourcesRequest =\n (): Codec<GetExchangeResourcesRequest> =>\n buildCodecForObject<GetExchangeResourcesRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"GetExchangeResourcesRequest\");\n\nexport interface GetExchangeResourcesResponse {\n hasResources: boolean;\n}\n\nexport interface DeleteExchangeRequest {\n exchangeBaseUrl: string;\n purge?: boolean;\n}\n\nexport const codecForDeleteExchangeRequest = (): Codec<DeleteExchangeRequest> =>\n buildCodecForObject<DeleteExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"purge\", codecOptional(codecForBoolean()))\n .build(\"DeleteExchangeRequest\");\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 acceptLanguage?: string;\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .property(\"acceptLanguage\", codecOptional(codecForString()))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n}\n\nexport const codecForAcceptManualWithdrawalRequest =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * ID provided by the client to cancel the request.\n *\n * If the same request is made again with the same clientCancellationId,\n * all previous requests are cancelled.\n *\n * The cancelled request will receive an error response with\n * an error code that indicates the cancellation.\n *\n * The cancellation is best-effort, responses might still arrive.\n */\n clientCancellationId?: string;\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\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"clientCancellationId\", codecOptional(codecForString()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ForgetExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForgetExchangeTosRequest =\n (): Codec<ForgetExchangeTosRequest> =>\n buildCodecForObject<ForgetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"ForgetExchangeTosRequest\");\n\nexport interface AcceptRefundRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<AcceptRefundRequest> =>\n buildCodecForObject<AcceptRefundRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AcceptRefundRequest\");\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 notifyChangeFromPendingTimeoutMs?: number;\n}\n\nexport const codecForGetWithdrawalDetailsForUri =\n (): Codec<GetWithdrawalDetailsForUriRequest> =>\n buildCodecForObject<GetWithdrawalDetailsForUriRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\n \"notifyChangeFromPendingTimeoutMs\",\n codecOptional(codecForNumber()),\n )\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 SharePaymentRequest {\n merchantBaseUrl: string;\n orderId: string;\n}\nexport const codecForSharePaymentRequest = (): Codec<SharePaymentRequest> =>\n buildCodecForObject<SharePaymentRequest>()\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"orderId\", codecForString())\n .build(\"SharePaymentRequest\");\n\nexport interface SharePaymentResult {\n privatePayUri: string;\n}\nexport const codecForSharePaymentResult = (): Codec<SharePaymentResult> =>\n buildCodecForObject<SharePaymentResult>()\n .property(\"privatePayUri\", codecForString())\n .build(\"SharePaymentResult\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams?: TemplateParams;\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 /**\n * @deprecated use transactionId instead\n */\n proposalId?: string;\n transactionId?: TransactionIdStr;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\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}\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: AmountString;\n /**\n * Corebank API base URL.\n */\n corebankApiBaseUrl: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\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\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"WithdrawTestBalanceRequest\");\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 RefreshCoinSpec {\n coinPub: string;\n amount?: AmountString;\n}\n\nexport const codecForRefreshCoinSpec = (): Codec<RefreshCoinSpec> =>\n buildCodecForObject<RefreshCoinSpec>()\n .property(\"amount\", codecForAmountString())\n .property(\"coinPub\", codecForString())\n .build(\"ForceRefreshRequest\");\n\nexport interface ForceRefreshRequest {\n refreshCoinSpecs: RefreshCoinSpec[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"refreshCoinSpecs\", codecForList(codecForRefreshCoinSpec()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport interface StartRefundQueryForUriResponse {\n /**\n * Transaction id of the *payment* where the refund query was started.\n */\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface StartRefundQueryRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForStartRefundQueryRequest =\n (): Codec<StartRefundQueryRequest> =>\n buildCodecForObject<StartRefundQueryRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"StartRefundQueryRequest\");\n\nexport interface PrepareRewardRequest {\n talerRewardUri: string;\n}\n\nexport const codecForPrepareRewardRequest = (): Codec<PrepareRewardRequest> =>\n buildCodecForObject<PrepareRewardRequest>()\n .property(\"talerRewardUri\", codecForString())\n .build(\"PrepareRewardRequest\");\n\nexport interface AcceptRewardRequest {\n /**\n * @deprecated use transactionId\n */\n walletRewardId?: string;\n /**\n * it will be required when \"walletRewardId\" is removed\n */\n transactionId?: TransactionIdStr;\n}\n\nexport const codecForAcceptTipRequest = (): Codec<AcceptRewardRequest> =>\n buildCodecForObject<AcceptRewardRequest>()\n .property(\"walletRewardId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"AcceptRewardRequest\");\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForFailTransactionRequest =\n (): Codec<FailTransactionRequest> =>\n buildCodecForObject<FailTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"FailTransactionRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForResumeTransaction = (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AbortTransactionRequest\");\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n /**\n * Pre-allocated transaction ID.\n * Allows clients to easily handle notifications\n * that occur while the operation has been created but\n * before the creation request has returned.\n */\n transactionId?: TransactionIdStr;\n depositPaytoUri: string;\n amount: AmountString;\n}\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 fees: DepositGroupFees;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: TransactionIdStr;\n}\n\nexport interface TxIdResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawUriInfoResponse {\n operationId: string;\n status: WithdrawalOperationStatus;\n confirmTransferUrl?: string;\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"operationId\", codecForString())\n .property(\"confirmTransferUrl\", codecOptional(codecForString()))\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\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 TestingListTasksForTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface TestingListTasksForTransactionsResponse {\n taskIdList: string[];\n}\n\nexport const codecForTestingListTasksForTransactionRequest =\n (): Codec<TestingListTasksForTransactionRequest> =>\n buildCodecForObject<TestingListTasksForTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"TestingListTasksForTransactionRequest\");\n\nexport interface DeleteTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\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: TransactionIdStr;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: TransactionIdStr;\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: TransactionIdStr;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: TransactionIdStr;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: TalerPreciseTimestamp;\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 ActiveTask {\n id: string;\n transaction: TransactionIdStr | undefined;\n firstTry: AbsoluteTime | undefined;\n nextTry: AbsoluteTime | undefined;\n counter: number | undefined;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport interface GetActiveTasks {\n tasks: ActiveTask[];\n}\n\nexport const codecForActiveTask = (): Codec<ActiveTask> =>\n buildCodecForObject<ActiveTask>()\n .property(\"id\", codecForString())\n .property(\"transaction\", codecOptional(codecForTransactionIdStr()))\n .property(\"counter\", codecForNumber())\n .property(\"firstTry\", codecForAbsoluteTime)\n .property(\"nextTry\", codecForAbsoluteTime)\n .property(\"lastError\", codecForTalerErrorDetail())\n .build(\"ActiveTask\");\n\nexport const codecForGetActiveTasks = (): Codec<GetActiveTasks> =>\n buildCodecForObject<GetActiveTasks>()\n .property(\"tasks\", codecForList(codecForActiveTask()))\n .build(\"GetActiveTasks\");\n\nexport interface ImportDbRequest {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDbRequest> =>\n buildCodecForObject<ImportDbRequest>()\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 /**\n * Number of coins used for the payment.\n */\n numCoins: number;\n}\n\nexport interface SelectedCoin {\n denomPubHash: string;\n coinPub: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\nexport interface SelectedProspectiveCoin {\n denomPubHash: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n coins: SelectedCoin[];\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 ProspectivePayCoinSelection {\n prospectiveCoins: SelectedProspectiveCoin[];\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 exchangeBaseUrl: string;\n /**\n * Maximum expiration date, based on how close the coins\n * used for the payment are to expiry.\n *\n * The value is based on when the wallet would typically\n * automatically refresh the coins on its own, leaving enough\n * time to get a refund for the push payment and refresh the\n * coin.\n */\n maxExpirationDate: TalerProtocolTimestamp;\n}\n\nexport interface InitiatePeerPushDebitRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushDebitResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n transactionId: TransactionIdStr;\n}\n\nexport const codecForInitiatePeerPushDebitRequest =\n (): Codec<InitiatePeerPushDebitRequest> =>\n buildCodecForObject<InitiatePeerPushDebitRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushDebitRequest\");\n\nexport interface PreparePeerPushCreditRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n transactionId: TransactionIdStr;\n\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use transaction ID instead.\n */\n peerPushCreditId: string;\n\n /**\n * @deprecated\n */\n amount: AmountString;\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 peerPullDebitId: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCreditRequest> =>\n buildCodecForObject<PreparePeerPushCreditRequest>()\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 transactionId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n transactionId: TransactionIdStr;\n}\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(\"transactionId\", codecForTransactionIdStr())\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\n /**\n * Number of coins that will be used,\n * can be used by the UI to warn if excessively large.\n */\n numCoins: number;\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 * @deprecated since it's not necessarily valid yet until the tx is in the right state\n */\n talerUri: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport interface ValidateIbanRequest {\n iban: string;\n}\n\nexport const codecForValidateIbanRequest = (): Codec<ValidateIbanRequest> =>\n buildCodecForObject<ValidateIbanRequest>()\n .property(\"iban\", codecForString())\n .build(\"ValidateIbanRequest\");\n\nexport interface ValidateIbanResponse {\n valid: boolean;\n}\n\nexport const codecForValidateIbanResponse = (): Codec<ValidateIbanResponse> =>\n buildCodecForObject<ValidateIbanResponse>()\n .property(\"valid\", codecForBoolean())\n .build(\"ValidateIbanResponse\");\n\nexport type TransactionStateFilter = \"nonfinal\";\n\nexport interface TransactionRecordFilter {\n onlyState?: TransactionStateFilter;\n onlyCurrency?: string;\n}\n\nexport interface StoredBackupList {\n storedBackups: {\n name: string;\n }[];\n}\n\nexport interface CreateStoredBackupResponse {\n name: string;\n}\n\nexport interface RecoverStoredBackupRequest {\n name: string;\n}\n\nexport interface DeleteStoredBackupRequest {\n name: string;\n}\n\nexport const codecForDeleteStoredBackupRequest =\n (): Codec<DeleteStoredBackupRequest> =>\n buildCodecForObject<DeleteStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"DeleteStoredBackupRequest\");\n\nexport const codecForRecoverStoredBackupRequest =\n (): Codec<RecoverStoredBackupRequest> =>\n buildCodecForObject<RecoverStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"RecoverStoredBackupRequest\");\n\nexport interface TestingSetTimetravelRequest {\n offsetMs: number;\n}\n\nexport const codecForTestingSetTimetravelRequest =\n (): Codec<TestingSetTimetravelRequest> =>\n buildCodecForObject<TestingSetTimetravelRequest>()\n .property(\"offsetMs\", codecForNumber())\n .build(\"TestingSetTimetravelRequest\");\n\nexport interface AllowedAuditorInfo {\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport interface AllowedExchangeInfo {\n exchangeBaseUrl: string;\n exchangePub: string;\n}\n\n/**\n * Data extracted from the contract terms that is relevant for payment\n * processing in the wallet.\n */\nexport interface WalletContractData {\n /**\n * Fulfillment URL, or the empty string if the order has no fulfillment URL.\n *\n * Stored as a non-nullable string as we use this field for IndexedDB indexing.\n */\n fulfillmentUrl: string;\n\n contractTermsHash: string;\n fulfillmentMessage?: string;\n fulfillmentMessageI18n?: InternationalizedString;\n merchantSig: string;\n merchantPub: string;\n merchant: MerchantInfo;\n amount: AmountString;\n orderId: string;\n merchantBaseUrl: string;\n summary: string;\n summaryI18n: { [lang_tag: string]: string } | undefined;\n autoRefund: TalerProtocolDuration | undefined;\n payDeadline: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n allowedExchanges: AllowedExchangeInfo[];\n timestamp: TalerProtocolTimestamp;\n wireMethod: string;\n wireInfoHash: string;\n maxDepositFee: AmountString;\n minimumAge?: number;\n}\n\nexport interface TestingWaitTransactionRequest {\n transactionId: TransactionIdStr;\n txState: TransactionState;\n}\n\nexport interface TestingGetDenomStatsRequest {\n exchangeBaseUrl: string;\n}\n\nexport interface TestingGetDenomStatsResponse {\n numKnown: number;\n numOffered: number;\n numLost: number;\n}\n\nexport const codecForTestingGetDenomStatsRequest =\n (): Codec<TestingGetDenomStatsRequest> =>\n buildCodecForObject<TestingGetDenomStatsRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"TestingGetDenomStatsRequest\");\n\nexport interface WithdrawalExchangeAccountDetails {\n /**\n * Payto URI to credit the exchange.\n *\n * Depending on whether the (manual!) withdrawal is accepted or just\n * being checked, this already includes the subject with the\n * reserve public key.\n */\n paytoUri: string;\n\n /**\n * Status that indicates whether the account can be used\n * by the user to send funds for a withdrawal.\n *\n * ok: account should be shown to the user\n * error: account should not be shown to the user, UIs might render the error (in conversionError),\n * especially in dev mode.\n */\n status: \"ok\" | \"error\";\n\n /**\n * Transfer amount. Might be in a different currency than the requested\n * amount for withdrawal.\n *\n * Absent if this is a conversion account and the conversion failed.\n */\n transferAmount?: AmountString;\n\n /**\n * Currency specification for the external currency.\n *\n * Only included if this account requires a currency conversion.\n */\n currencySpecification?: CurrencySpecification;\n\n /**\n * Further restrictions for sending money to the\n * exchange.\n */\n creditRestrictions?: AccountRestriction[];\n\n /**\n * Label given to the account or the account's bank by the exchange.\n */\n bankLabel?: string;\n\n /*\n * Display priority assigned to this bank account by the exchange.\n */\n priority?: number;\n\n /**\n * Error that happened when attempting to request the conversion rate.\n */\n conversionError?: TalerErrorDetail;\n}\n\nexport interface PrepareWithdrawExchangeRequest {\n /**\n * A taler://withdraw-exchange URI.\n */\n talerUri: string;\n}\n\nexport const codecForPrepareWithdrawExchangeRequest =\n (): Codec<PrepareWithdrawExchangeRequest> =>\n buildCodecForObject<PrepareWithdrawExchangeRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PrepareWithdrawExchangeRequest\");\n\nexport interface PrepareWithdrawExchangeResponse {\n /**\n * Base URL of the exchange that already existed\n * or was ephemerally added as an exchange entry to\n * the wallet.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount from the taler://withdraw-exchange URI.\n * Only present if specified in the URI.\n */\n amount?: AmountString;\n}\n\nexport interface ExchangeEntryState {\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n}\n\nexport interface ListGlobalCurrencyAuditorsResponse {\n auditors: {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n }[];\n}\n\nexport interface ListGlobalCurrencyExchangesResponse {\n exchanges: {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n }[];\n}\n\nexport interface AddGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForAddGlobalCurrencyExchangeRequest =\n (): Codec<AddGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<AddGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"AddGlobalCurrencyExchangeRequest\");\n\nexport interface RemoveGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyExchangeRequest =\n (): Codec<RemoveGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"RemoveGlobalCurrencyExchangeRequest\");\n\nexport interface AddGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForAddGlobalCurrencyAuditorRequest =\n (): Codec<AddGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<AddGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForString())\n .property(\"auditorPub\", codecForString())\n .build(\"AddGlobalCurrencyAuditorRequest\");\n\nexport interface RemoveGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyAuditorRequest =\n (): Codec<RemoveGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForString())\n .property(\"auditorPub\", codecForString())\n .build(\"RemoveGlobalCurrencyAuditorRequest\");\n\nexport interface RetryLoopOpts {\n /**\n * Stop the retry loop when all lifeness-giving pending operations\n * are done.\n *\n * Defaults to false.\n */\n stopWhenDone?: boolean;\n}\n\n/**\n * Information about one provider.\n *\n * We don't store the account key here,\n * as that's derived from the wallet root key.\n */\nexport interface ProviderInfo {\n active: boolean;\n syncProviderBaseUrl: string;\n name: string;\n terms?: BackupProviderTerms;\n /**\n * Last communication issue with the provider.\n */\n lastError?: TalerErrorDetail;\n lastSuccessfulBackupTimestamp?: TalerPreciseTimestamp;\n lastAttemptedBackupTimestamp?: TalerPreciseTimestamp;\n paymentProposalIds: string[];\n backupProblem?: BackupProblem;\n paymentStatus: ProviderPaymentStatus;\n}\n\nexport interface BackupProviderTerms {\n supportedProtocolVersion: string;\n annualFee: AmountString;\n storageLimitInMegabytes: number;\n}\n\nexport type BackupProblem =\n | BackupUnreadableProblem\n | BackupConflictingDeviceProblem;\n\nexport interface BackupUnreadableProblem {\n type: \"backup-unreadable\";\n}\n\nexport interface BackupConflictingDeviceProblem {\n type: \"backup-conflicting-device\";\n otherDeviceId: string;\n myDeviceId: string;\n backupTimestamp: AbsoluteTime;\n}\n\nexport type ProviderPaymentStatus =\n | ProviderPaymentTermsChanged\n | ProviderPaymentPaid\n | ProviderPaymentInsufficientBalance\n | ProviderPaymentUnpaid\n | ProviderPaymentPending;\n\nexport enum ProviderPaymentType {\n Unpaid = \"unpaid\",\n Pending = \"pending\",\n InsufficientBalance = \"insufficient-balance\",\n Paid = \"paid\",\n TermsChanged = \"terms-changed\",\n}\n\nexport interface ProviderPaymentUnpaid {\n type: ProviderPaymentType.Unpaid;\n}\n\nexport interface ProviderPaymentInsufficientBalance {\n type: ProviderPaymentType.InsufficientBalance;\n amount: AmountString;\n}\n\nexport interface ProviderPaymentPending {\n type: ProviderPaymentType.Pending;\n talerUri?: string;\n}\n\nexport interface ProviderPaymentPaid {\n type: ProviderPaymentType.Paid;\n paidUntil: AbsoluteTime;\n}\n\nexport interface ProviderPaymentTermsChanged {\n type: ProviderPaymentType.TermsChanged;\n paidUntil: AbsoluteTime;\n oldTerms: BackupProviderTerms;\n newTerms: BackupProviderTerms;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport interface SyncTermsOfServiceResponse {\n // maximum backup size supported\n storage_limit_in_megabytes: number;\n\n // Fee for an account, per year.\n annual_fee: AmountString;\n\n // protocol version supported by the server,\n // for now always \"0.0\".\n version: string;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport const codecForSyncTermsOfServiceResponse =\n (): Codec<SyncTermsOfServiceResponse> =>\n buildCodecForObject<SyncTermsOfServiceResponse>()\n .property(\"storage_limit_in_megabytes\", codecForNumber())\n .property(\"annual_fee\", codecForAmountString())\n .property(\"version\", codecForString())\n .build(\"SyncTermsOfServiceResponse\");\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { base64FromArrayBuffer } from \"../base64.js\";\nimport { stringToBytes } from \"../taler-crypto.js\";\nimport { AccessToken, LongPollParams, PaginationParams } from \"./types.js\";\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\n/**\n * rfc8959\n * @param token\n * @returns\n */\nexport function makeBearerTokenAuthHeader(token: AccessToken): string {\n return `Bearer secret-token:${token}`;\n}\n\n/**\n * https://bugs.gnunet.org/view.php?id=7949\n */\nexport function addPaginationParams(url: URL, pagination?: PaginationParams) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"start\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"delta\", String(order * limit));\n}\n\nexport function addMerchantPaginationParams(\n url: URL,\n pagination?: PaginationParams,\n) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"offset\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"limit\", String(order * limit));\n}\n\nexport function addLongPollingParam(url: URL, param?: LongPollParams) {\n if (!param) return;\n if (param.timeoutMs) {\n url.searchParams.set(\"long_poll_ms\", String(param.timeoutMs));\n }\n}\n\nexport interface CacheEvictor<T> {\n notifySuccess: (op: T) => Promise<void>;\n}\n\nexport const nullEvictor: CacheEvictor<unknown> = {\n notifySuccess: () => Promise.resolve(),\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { AmountJson, Amounts } from \"../amounts.js\";\nimport { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport { TalerErrorCode } from \"../taler-error-codes.js\";\nimport { codecForTalerErrorDetail } from \"../wallet-types.js\";\nimport {\n AccessToken,\n TalerBankConversionApi,\n codecForCashinConversionResponse,\n codecForCashoutConversionResponse,\n codecForConversionBankConfig,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerBankConversionResultByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = ResultByMethod<TalerBankConversionHttpClient, prop>;\nexport type TalerBankConversionErrorsByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;\n\nexport enum TalerBankConversionCacheEviction {\n UPDATE_RATE,\n}\n\n/**\n * The API is used by the wallets.\n */\nexport class TalerBankConversionHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForConversionBankConfig());\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate\n *\n */\n async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) {\n const url = new URL(`cashin-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashinConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate\n *\n */\n async getCashoutRate(conversion: {\n debit?: AmountJson;\n credit?: AmountJson;\n }) {\n const url = new URL(`cashout-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate\n *\n */\n async updateConversionRate(\n auth: AccessToken,\n body: TalerBankConversionApi.ConversionRate,\n ) {\n const url = new URL(`conversion-rate`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerBankConversionCacheEviction.UPDATE_RATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n LibtoolVersion,\n LongPollParams,\n TalerErrorCode,\n codecForChallenge,\n codecForTalerErrorDetail,\n codecForTanTransmission,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opKnownTalerFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n PaginationParams,\n TalerCorebankApi,\n UserAndToken,\n WithdrawalOperationStatus,\n codecForAccountData,\n codecForBankAccountCreateWithdrawalResponse,\n codecForBankAccountTransactionInfo,\n codecForBankAccountTransactionsResponse,\n codecForCashoutPending,\n codecForCashoutStatusResponse,\n codecForCashouts,\n codecForCoreBankConfig,\n codecForCreateTransactionResponse,\n codecForGlobalCashouts,\n codecForListBankAccountsResponse,\n codecForMonitorResponse,\n codecForPublicAccountsResponse,\n codecForRegisterAccountResponse,\n codecForWithdrawalPublicInfo,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n addLongPollingParam,\n addPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerCoreBankResultByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = ResultByMethod<TalerCoreBankHttpClient, prop>;\nexport type TalerCoreBankErrorsByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;\n\nexport enum TalerCoreBankCacheEviction {\n DELETE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_ACCOUNT,\n UPDATE_PASSWORD,\n CREATE_TRANSACTION,\n CONFIRM_WITHDRAWAL,\n ABORT_WITHDRAWAL,\n CREATE_WITHDRAWAL,\n CREATE_CASHOUT,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerCoreBankHttpClient {\n public readonly PROTOCOL_VERSION = \"4:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCoreBankConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // ACCOUNTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts\n *\n */\n async createAccount(\n auth: AccessToken | undefined,\n body: TalerCorebankApi.RegisterAccountRequest,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n const headers: Record<string, string> = {};\n if (auth) {\n headers.Authorization = makeBearerTokenAuthHeader(auth);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers: headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n TalerCoreBankCacheEviction.CREATE_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForRegisterAccountResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-corebank.html#delete--accounts-$USERNAME\n *\n */\n async deleteAccount(auth: UserAndToken, cid?: string) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME\n *\n */\n async updateAccount(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountReconfiguration,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME-auth\n *\n */\n async updatePassword(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountPasswordChange,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/auth`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--public-accounts\n *\n */\n async getPublicAccounts(\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`public-accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForPublicAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ public_accounts: [] });\n case HttpStatusCode.NotFound:\n return opFixedSuccess({ public_accounts: [] });\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts\n *\n */\n async getAccounts(\n auth: AccessToken,\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForListBankAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ accounts: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME\n *\n */\n async getAccount(auth: UserAndToken) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountData());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // TRANSACTIONS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions\n *\n */\n async getTransactions(\n auth: UserAndToken,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountTransactionsResponse(),\n );\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ transactions: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions-$TRANSACTION_ID\n *\n */\n async getTransactionById(auth: UserAndToken, txid: number) {\n const url = new URL(\n `accounts/${auth.username}/transactions/${String(txid)}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountTransactionInfo());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions\n *\n */\n async createTransaction(\n auth: UserAndToken,\n body: TalerCorebankApi.CreateTransactionRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCreateTransactionResponse());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // WITHDRAWALS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals\n *\n */\n async createWithdrawal(\n auth: UserAndToken,\n body: TalerCorebankApi.BankAccountCreateWithdrawalRequest,\n ) {\n const url = new URL(`accounts/${auth.username}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountCreateWithdrawalResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-confirm\n *\n */\n async confirmWithdrawalById(auth: UserAndToken, wid: string, cid?: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-abort\n *\n */\n async abortWithdrawalById(auth: UserAndToken, wid: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--withdrawals-$WITHDRAWAL_ID\n *\n */\n async getWithdrawalById(\n wid: string,\n params?: {\n old_state?: WithdrawalOperationStatus;\n } & LongPollParams,\n ) {\n const url = new URL(`withdrawals/${wid}`, this.baseUrl);\n addLongPollingParam(url, params);\n if (params) {\n url.searchParams.set(\n \"old_state\",\n !params.old_state ? \"pending\" : params.old_state,\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWithdrawalPublicInfo());\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // CASHOUTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts\n *\n */\n async createCashout(\n auth: UserAndToken,\n body: TalerCorebankApi.CashoutRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutPending());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts-$CASHOUT_ID\n *\n */\n async getCashoutById(auth: UserAndToken, cid: number) {\n const url = new URL(\n `accounts/${auth.username}/cashouts/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutStatusResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts\n *\n */\n async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--cashouts\n *\n */\n async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {\n const url = new URL(`cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForGlobalCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // 2FA\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID\n *\n */\n async sendChallenge(auth: UserAndToken, cid: string) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTanTransmission());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID-confirm\n *\n */\n async confirmChallenge(\n auth: UserAndToken,\n cid: string,\n body: TalerCorebankApi.ChallengeSolve,\n ) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // MONITOR\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--monitor\n *\n */\n async getMonitor(\n auth: AccessToken,\n params: {\n timeframe?: TalerCorebankApi.MonitorTimeframeParam;\n date?: AbsoluteTime;\n } = {},\n ) {\n const url = new URL(`monitor`, this.baseUrl);\n if (params.timeframe) {\n url.searchParams.set(\n \"timeframe\",\n TalerCorebankApi.MonitorTimeframeParam[params.timeframe],\n );\n }\n if (params.date) {\n const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);\n if (seconds !== \"never\") {\n url.searchParams.set(\"date_s\", String(seconds));\n }\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMonitorResponse());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Others API\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getIntegrationAPI(): URL {\n return new URL(`taler-integration/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getWireGatewayAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-wire-gateway/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getRevenueAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getAuthenticationAPI(username: string): URL {\n return new URL(`accounts/${username}/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getConversionInfoAPI(): URL {\n return new URL(`conversion-info/`, this.baseUrl);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n FailCasesByMethod,\n HttpStatusCode,\n LibtoolVersion,\n PaginationParams,\n ResultByMethod,\n TalerMerchantApi,\n codecForAbortResponse,\n codecForAccountAddResponse,\n codecForAccountKycRedirects,\n codecForAccountsSummaryResponse,\n codecForBankAccountEntry,\n codecForClaimResponse,\n codecForInstancesResponse,\n codecForInventorySummaryResponse,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n codecForMerchantRefundResponse,\n codecForOrderHistory,\n codecForOtpDeviceDetails,\n codecForOtpDeviceSummaryResponse,\n codecForOutOfStockResponse,\n codecForPaidRefundStatusResponse,\n codecForPaymentResponse,\n codecForPostOrderResponse,\n codecForProductDetail,\n codecForQueryInstancesResponse,\n codecForStatusGoto,\n codecForStatusPaid,\n codecForStatusStatusUnpaid,\n codecForTansferList,\n codecForTemplateDetails,\n codecForTemplateSummaryResponse,\n codecForTokenFamiliesList,\n codecForTokenFamilyDetails,\n codecForWalletRefundResponse,\n codecForWalletTemplateDetails,\n codecForWebhookDetails,\n codecForWebhookSummaryResponse,\n opEmptySuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n HttpResponse,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport { opSuccessFromHttp, opUnknownFailure } from \"../operation.js\";\nimport {\n CacheEvictor,\n addMerchantPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerMerchantInstanceResultByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = ResultByMethod<TalerMerchantInstanceHttpClient, prop>;\nexport type TalerMerchantInstanceErrorsByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = FailCasesByMethod<TalerMerchantInstanceHttpClient, prop>;\n\nexport enum TalerMerchantInstanceCacheEviction {\n CREATE_ORDER,\n UPDATE_ORDER,\n DELETE_ORDER,\n UPDATE_CURRENT_INSTANCE,\n DELETE_CURRENT_INSTANCE,\n CREATE_BANK_ACCOUNT,\n UPDATE_BANK_ACCOUNT,\n DELETE_BANK_ACCOUNT,\n CREATE_PRODUCT,\n UPDATE_PRODUCT,\n DELETE_PRODUCT,\n CREATE_TRANSFER,\n DELETE_TRANSFER,\n CREATE_DEVICE,\n UPDATE_DEVICE,\n DELETE_DEVICE,\n CREATE_TEMPLATE,\n UPDATE_TEMPLATE,\n DELETE_TEMPLATE,\n CREATE_WEBHOOK,\n UPDATE_WEBHOOK,\n DELETE_WEBHOOK,\n CREATE_TOKENFAMILY,\n UPDATE_TOKENFAMILY,\n DELETE_TOKENFAMILY,\n LAST,\n}\nexport enum TalerMerchantManagementCacheEviction {\n CREATE_INSTANCE = TalerMerchantInstanceCacheEviction.LAST + 1,\n UPDATE_INSTANCE,\n DELETE_INSTANCE,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerMerchantInstanceHttpClient {\n public readonly PROTOCOL_VERSION = \"10:0:6\";\n\n readonly httpLib: HttpRequestLibrary;\n readonly cacheEvictor: CacheEvictor<TalerMerchantInstanceCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerMerchantInstanceCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wallet API\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim\n */\n async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {\n const url = new URL(`orders/${orderId}/claim`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForClaimResponse());\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-pay\n */\n async makePayment(orderId: string, body: TalerMerchantApi.PayRequest) {\n const url = new URL(`orders/${orderId}/pay`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaymentResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PaymentRequired:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.RequestTimeout:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PreconditionFailed:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID\n */\n\n async getPaymentStatus(\n orderId: string,\n params: TalerMerchantApi.PaymentStatusRequestParams = {},\n ) {\n const url = new URL(`orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.awaitRefundObtained !== undefined) {\n url.searchParams.set(\n \"await_refund_obtained\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.claimToken !== undefined) {\n url.searchParams.set(\"token\", params.claimToken);\n }\n if (params.contractTermHash !== undefined) {\n url.searchParams.set(\"h_contract\", params.contractTermHash);\n }\n if (params.refund !== undefined) {\n url.searchParams.set(\"refund\", params.refund);\n }\n if (params.sessionId !== undefined) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout !== undefined) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n // body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForStatusPaid());\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForStatusGoto());\n // case HttpStatusCode.Found: not possible since content is not HTML\n case HttpStatusCode.PaymentRequired:\n return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#demonstrating-payment\n */\n async demostratePayment(orderId: string, body: TalerMerchantApi.PaidRequest) {\n const url = new URL(`orders/${orderId}/paid`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments\n */\n async abortIncompletePayment(\n orderId: string,\n body: TalerMerchantApi.AbortRequest,\n ) {\n const url = new URL(`orders/${orderId}/abort`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForAbortResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#obtaining-refunds\n */\n async obtainRefund(\n orderId: string,\n body: TalerMerchantApi.WalletRefundRequest,\n ) {\n const url = new URL(`orders/${orderId}/refund`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForWalletRefundResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth\n */\n async updateCurrentInstanceAuthentication(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(`private/auth`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: // FIXME: missing in docs\n return opEmptySuccess(resp);\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private\n */\n async updateCurrentInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private\n *\n */\n async getCurrentInstanceDetails(token: AccessToken) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private\n */\n async deleteCurrentInstance(\n token: AccessToken | undefined,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc\n */\n async getCurrentIntanceKycStatus(\n token: AccessToken | undefined,\n params: TalerMerchantApi.GetKycStatusRequestParams = {},\n ) {\n const url = new URL(`private/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForAccountKycRedirects(),\n );\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Bank Accounts\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts\n */\n async addBankAccount(\n token: AccessToken | undefined,\n body: TalerMerchantApi.AccountAddDetails,\n ) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForAccountAddResponse());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async updateBankAccount(\n token: AccessToken | undefined,\n wireAccount: string,\n body: TalerMerchantApi.AccountPatchDetails,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts\n */\n async listBankAccounts(token: AccessToken, params?: PaginationParams) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n // addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async getBankAccountDetails(\n token: AccessToken | undefined,\n wireAccount: string,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountEntry());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async deleteBankAccount(token: AccessToken | undefined, wireAccount: string) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Inventory Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products\n */\n async addProduct(\n token: AccessToken | undefined,\n body: TalerMerchantApi.ProductAddDetail,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async updateProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.ProductPatchDetail,\n ) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products\n */\n async listProducts(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInventorySummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: not in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async getProductDetails(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForProductDetail());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#reserving-inventory\n */\n async lockProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.LockRequest,\n ) {\n const url = new URL(`private/products/${productId}/lock`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory\n */\n async deleteProduct(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Payment processing\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders\n */\n async createOrder(\n token: AccessToken | undefined,\n body: TalerMerchantApi.PostOrderRequest,\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n return this.procesOrderCreationResponse(resp);\n }\n\n private async procesOrderCreationResponse(resp: HttpResponse) {\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPostOrderResponse());\n }\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-orders\n */\n async listOrders(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListOrdersRequestParams = {},\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n if (params.date) {\n url.searchParams.set(\"date_s\", String(params.date));\n }\n if (params.fulfillmentUrl) {\n url.searchParams.set(\"fulfillment_url\", params.fulfillmentUrl);\n }\n if (params.paid !== undefined) {\n url.searchParams.set(\"paid\", params.paid ? \"YES\" : \"NO\");\n }\n if (params.refunded !== undefined) {\n url.searchParams.set(\"refunded\", params.refunded ? \"YES\" : \"NO\");\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout\", String(params.timeout));\n }\n if (params.wired !== undefined) {\n url.searchParams.set(\"wired\", params.wired ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOrderHistory());\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async getOrderDetails(\n token: AccessToken | undefined,\n orderId: string,\n params: TalerMerchantApi.GetOrderRequestParams = {},\n ) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup\n */\n async forgetOrder(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.ForgetRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async deleteOrder(token: AccessToken | undefined, orderId: string) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Refunds\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund\n */\n async addRefund(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.RefundRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForMerchantRefundResponse());\n }\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wire Transfer\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers\n */\n async informWireTransfer(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TransferInformation,\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers\n */\n async listWireTransfers(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListWireTransferRequestParams = {},\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n if (params.after) {\n url.searchParams.set(\"after\", String(params.after));\n }\n if (params.before) {\n url.searchParams.set(\"before\", String(params.before));\n }\n if (params.paytoURI) {\n url.searchParams.set(\"payto_uri\", params.paytoURI);\n }\n if (params.verified !== undefined) {\n url.searchParams.set(\"verified\", params.verified ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTansferList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID\n */\n async deleteWireTransfer(token: AccessToken | undefined, transferId: string) {\n const url = new URL(`private/transfers/${transferId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // OTP Devices\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices\n */\n async addOtpDevice(\n token: AccessToken | undefined,\n body: TalerMerchantApi.OtpDeviceAddDetails,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async updateOtpDevice(\n token: AccessToken | undefined,\n deviceId: string,\n body: TalerMerchantApi.OtpDevicePatchDetails,\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices\n */\n async listOtpDevices(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async getOtpDeviceDetails(\n token: AccessToken | undefined,\n deviceId: string,\n params: TalerMerchantApi.GetOtpDeviceRequestParams = {},\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n if (params.faketime) {\n url.searchParams.set(\"faketime\", String(params.faketime));\n }\n if (params.price) {\n url.searchParams.set(\"price\", params.price);\n }\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async deleteOtpDevice(token: AccessToken | undefined, deviceId: string) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Templates\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates\n */\n async addTemplate(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TemplateAddDetails,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async updateTemplate(\n token: AccessToken | undefined,\n templateId: string,\n body: TalerMerchantApi.TemplatePatchDetails,\n ) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-template\n */\n async listTemplates(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async getTemplateDetails(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async deleteTemplate(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-templates-$TEMPLATE_ID\n */\n async useTemplateGetInfo(templateId: string) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWalletTemplateDetails());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID\n */\n async useTemplateCreateOrder(\n templateId: string,\n body: TalerMerchantApi.UsingTemplateDetails,\n ) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n return this.procesOrderCreationResponse(resp);\n }\n\n //\n // Webhooks\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks\n */\n async addWebhook(\n token: AccessToken | undefined,\n body: TalerMerchantApi.WebhookAddDetails,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async updateWebhook(\n token: AccessToken | undefined,\n webhookId: string,\n body: TalerMerchantApi.WebhookPatchDetails,\n ) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks\n */\n async listWebhooks(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWebhookSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async getWebhookDetails(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opSuccessFromHttp(resp, codecForWebhookDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async deleteWebhook(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // token families\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async createTokenFamily(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TokenFamilyCreateRequest,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async updateTokenFamily(\n token: AccessToken | undefined,\n tokenSlug: string,\n body: TalerMerchantApi.TokenFamilyUpdateRequest,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY,\n );\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async listTokenFamilies(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamiliesList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async getTokenFamilyDetails(\n token: AccessToken | undefined,\n tokenSlug: string,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async deleteTokenFamily(token: AccessToken | undefined, tokenSlug: string) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * Get the auth api against the current instance\n *\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token\n */\n getAuthenticationAPI(): URL {\n return new URL(`private/`, this.baseUrl);\n }\n}\n\nexport type TalerMerchantManagementResultByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = ResultByMethod<TalerMerchantManagementHttpClient, prop>;\nexport type TalerMerchantManagementErrorsByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = FailCasesByMethod<TalerMerchantManagementHttpClient, prop>;\n\nexport class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {\n readonly cacheManagementEvictor: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n // cacheManagementEvictor?: CacheEvictor<TalerMerchantManagementCacheEviction>,\n cacheEvictor?: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >,\n ) {\n super(baseUrl, httpClient, cacheEvictor);\n this.cacheManagementEvictor = cacheEvictor ?? nullEvictor;\n }\n\n getSubInstanceAPI(instanceId: string) {\n return new URL(`instances/${instanceId}/`, this.baseUrl);\n }\n\n //\n // Instance Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances\n */\n async createInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceConfigurationMessage,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.CREATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth\n */\n async updateInstanceAuthentication(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(\n `management/instances/${instanceId}/auth`,\n this.baseUrl,\n );\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE\n */\n async updateInstance(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.UPDATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances\n */\n async listInstances(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE\n *\n */\n async getInstanceDetails(token: AccessToken | undefined, instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE\n */\n async deleteInstance(\n token: AccessToken | undefined,\n instanceId: string,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.DELETE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc\n */\n async getIntanceKycStatus(\n token: AccessToken | undefined,\n instanceId: string,\n params: TalerMerchantApi.GetKycStatusRequestParams,\n ) {\n const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport { hash } from \"../nacl-fast.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n TalerSignaturePurpose,\n amountToBuffer,\n bufferForUint32,\n buildSigPS,\n decodeCrock,\n eddsaSign,\n encodeCrock,\n stringToBytes,\n timestampRoundedToBuffer,\n} from \"../taler-crypto.js\";\nimport {\n OfficerAccount,\n PaginationParams,\n SigningKey,\n TalerExchangeApi,\n codecForAmlDecisionDetails,\n codecForAmlRecords,\n codecForExchangeConfig,\n codecForExchangeKeys,\n} from \"./types.js\";\nimport { addPaginationParams } from \"./utils.js\";\n\nexport type TalerExchangeResultByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = ResultByMethod<TalerExchangeHttpClient, prop>;\nexport type TalerExchangeErrorsByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = FailCasesByMethod<TalerExchangeHttpClient, prop>;\n\n/**\n */\nexport class TalerExchangeHttpClient {\n httpLib: HttpRequestLibrary;\n public readonly PROTOCOL_VERSION = \"18:0:1\";\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n * PARTIALLY IMPLEMENTED!!\n */\n async getKeys() {\n const url = new URL(`keys`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeKeys());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // TERMS\n\n //\n // AML operations\n //\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decisions-$STATE\n *\n */\n async getDecisionsByState(\n auth: OfficerAccount,\n state: TalerExchangeApi.AmlState,\n pagination?: PaginationParams,\n ) {\n const url = new URL(\n `aml/${auth.id}/decisions/${TalerExchangeApi.AmlState[state]}`,\n this.baseUrl,\n );\n addPaginationParams(url, pagination);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlRecords());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ records: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decision-$H_PAYTO\n *\n */\n async getDecisionDetails(auth: OfficerAccount, account: string) {\n const url = new URL(`aml/${auth.id}/decision/${account}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlDecisionDetails());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ aml_history: [], kyc_attributes: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#post--aml-$OFFICER_PUB-decision\n *\n */\n async addDecisionDetails(\n auth: OfficerAccount,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n ) {\n const url = new URL(`aml/${auth.id}/decision`, this.baseUrl);\n\n const body = buildDecisionSignature(auth.signingKey, decision);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: this two need to be split by error code\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n\nfunction buildQuerySignature(key: SigningKey): string {\n const sigBlob = buildSigPS(\n TalerSignaturePurpose.TALER_SIGNATURE_AML_QUERY,\n ).build();\n\n return encodeCrock(eddsaSign(sigBlob, key));\n}\n\nfunction buildDecisionSignature(\n key: SigningKey,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n): TalerExchangeApi.AmlDecision {\n const zero = new Uint8Array(new ArrayBuffer(64));\n\n const sigBlob = buildSigPS(TalerSignaturePurpose.TALER_SIGNATURE_AML_DECISION)\n //TODO: new need the null terminator, also in the exchange\n .put(hash(stringToBytes(decision.justification))) //check null\n .put(timestampRoundedToBuffer(decision.decision_time))\n .put(amountToBuffer(decision.new_threshold))\n .put(decodeCrock(decision.h_payto))\n .put(zero) //kyc_requirement\n .put(bufferForUint32(decision.new_state))\n .build();\n\n const officer_sig = encodeCrock(eddsaSign(sigBlob, key));\n return {\n ...decision,\n officer_sig,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 EncryptionNonce,\n LockedAccount,\n OfficerAccount,\n OfficerId,\n SigningKey,\n createEddsaKeyPair,\n decodeCrock,\n decryptWithDerivedKey,\n eddsaGetPublic,\n encodeCrock,\n encryptWithDerivedKey,\n getRandomBytesF,\n kdf,\n stringToBytes,\n} from \"@gnu-taler/taler-util\";\n\n/**\n * Restore previous session and unlock account with password\n *\n * @param salt string from which crypto params will be derived\n * @param key secured private key\n * @param password password for the private key\n * @returns\n */\nexport async function unlockOfficerAccount(\n account: LockedAccount,\n password: string,\n): Promise<OfficerAccount> {\n const rawKey = decodeCrock(account);\n const rawPassword = stringToBytes(password);\n\n const signingKey = (await decryptWithDerivedKey(\n rawKey,\n rawPassword,\n password,\n ).catch((e: Error) => {\n throw new UnwrapKeyError(e.message);\n })) as SigningKey;\n\n const publicKey = eddsaGetPublic(signingKey);\n\n const accountId = encodeCrock(publicKey) as OfficerId;\n\n return { id: accountId, signingKey };\n}\n\n/**\n * Create new account (secured private key)\n * secured with the given password\n *\n * @param sessionId\n * @param password\n * @returns\n */\nexport async function createNewOfficerAccount(\n password: string,\n extraNonce: EncryptionNonce,\n): Promise<OfficerAccount & { safe: LockedAccount }> {\n const { eddsaPriv, eddsaPub } = createEddsaKeyPair();\n\n const key = stringToBytes(password);\n\n const localRnd = getRandomBytesF(24);\n const mergedRnd: EncryptionNonce = extraNonce\n ? kdf(24, stringToBytes(\"aml-officer\"), extraNonce, localRnd)\n : localRnd;\n\n const protectedPrivKey = await encryptWithDerivedKey(\n mergedRnd,\n key,\n eddsaPriv,\n password,\n );\n\n const signingKey = eddsaPriv as SigningKey;\n const accountId = encodeCrock(eddsaPub) as OfficerId;\n const safe = encodeCrock(protectedPrivKey) as LockedAccount;\n\n return { id: accountId, signingKey, safe };\n}\n\nexport class UnwrapKeyError extends Error {\n public cause: string;\n constructor(cause: string) {\n super(`Recovering private key failed on: ${cause}`);\n this.cause = cause;\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) 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 * IBAN validation.\n *\n * Currently only validates the checksum.\n *\n * It does not validate:\n * - Country-specific length\n * - Country-specific checksums\n *\n * The country list is also not complete.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\nexport type IbanValidationResult =\n | { type: \"invalid\" }\n | {\n type: \"valid\";\n normalizedIban: string;\n };\n\nexport interface IbanCountryInfo {\n name: string;\n isSepa?: boolean;\n length?: number;\n}\n\n/**\n * Incomplete list, see https://www.swift.com/resource/iban-registry-pdf\n */\nexport const ibanCountryInfoTable: Record<string, IbanCountryInfo> = {\n AE: { name: \"U.A.E.\" },\n AF: { name: \"Afghanistan\" },\n AL: { name: \"Albania\" },\n AM: { name: \"Armenia\" },\n AN: { name: \"Netherlands Antilles\" },\n AR: { name: \"Argentina\" },\n AT: { name: \"Austria\" },\n AU: { name: \"Australia\" },\n AZ: { name: \"Azerbaijan\" },\n BA: { name: \"Bosnia and Herzegovina\" },\n BD: { name: \"Bangladesh\" },\n BE: { name: \"Belgium\" },\n BG: { name: \"Bulgaria\" },\n BH: { name: \"Bahrain\" },\n BN: { name: \"Brunei Darussalam\" },\n BO: { name: \"Bolivia\" },\n BR: { name: \"Brazil\" },\n BT: { name: \"Bhutan\" },\n BY: { name: \"Belarus\" },\n BZ: { name: \"Belize\" },\n CA: { name: \"Canada\" },\n CG: { name: \"Congo\" },\n CH: { name: \"Switzerland\" },\n CI: { name: \"Cote d'Ivoire\" },\n CL: { name: \"Chile\" },\n CM: { name: \"Cameroon\" },\n CN: { name: \"People's Republic of China\" },\n CO: { name: \"Colombia\" },\n CR: { name: \"Costa Rica\" },\n CS: { name: \"Serbia and Montenegro\" },\n CZ: { name: \"Czech Republic\" },\n DE: { name: \"Germany\" },\n DK: { name: \"Denmark\" },\n DO: { name: \"Dominican Republic\" },\n DZ: { name: \"Algeria\" },\n EC: { name: \"Ecuador\" },\n EE: { name: \"Estonia\" },\n EG: { name: \"Egypt\" },\n ER: { name: \"Eritrea\" },\n ES: { name: \"Spain\" },\n ET: { name: \"Ethiopia\" },\n FI: { name: \"Finland\" },\n FO: { name: \"Faroe Islands\" },\n FR: { name: \"France\" },\n GB: { name: \"United Kingdom\" },\n GD: { name: \"Caribbean\" },\n GE: { name: \"Georgia\" },\n GL: { name: \"Greenland\" },\n GR: { name: \"Greece\" },\n GT: { name: \"Guatemala\" },\n HK: { name: \"Hong Kong S.A.R.\" },\n HN: { name: \"Honduras\" },\n HR: { name: \"Croatia\" },\n HT: { name: \"Haiti\" },\n HU: { name: \"Hungary\" },\n ID: { name: \"Indonesia\" },\n IE: { name: \"Ireland\" },\n IL: { name: \"Israel\" },\n IN: { name: \"India\" },\n IQ: { name: \"Iraq\" },\n IR: { name: \"Iran\" },\n IS: { name: \"Iceland\" },\n IT: { name: \"Italy\" },\n JM: { name: \"Jamaica\" },\n JO: { name: \"Jordan\" },\n JP: { name: \"Japan\" },\n KE: { name: \"Kenya\" },\n KG: { name: \"Kyrgyzstan\" },\n KH: { name: \"Cambodia\" },\n KR: { name: \"South Korea\" },\n KW: { name: \"Kuwait\" },\n KZ: { name: \"Kazakhstan\" },\n LA: { name: \"Laos\" },\n LB: { name: \"Lebanon\" },\n LI: { name: \"Liechtenstein\" },\n LK: { name: \"Sri Lanka\" },\n LT: { name: \"Lithuania\" },\n LU: { name: \"Luxembourg\" },\n LV: { name: \"Latvia\" },\n LY: { name: \"Libya\" },\n MA: { name: \"Morocco\" },\n MC: { name: \"Principality of Monaco\" },\n MD: { name: \"Moldava\" },\n ME: { name: \"Montenegro\" },\n MK: { name: \"Former Yugoslav Republic of Macedonia\" },\n ML: { name: \"Mali\" },\n MM: { name: \"Myanmar\" },\n MN: { name: \"Mongolia\" },\n MO: { name: \"Macau S.A.R.\" },\n MT: { name: \"Malta\" },\n MV: { name: \"Maldives\" },\n MX: { name: \"Mexico\" },\n MY: { name: \"Malaysia\" },\n NG: { name: \"Nigeria\" },\n NI: { name: \"Nicaragua\" },\n NL: { name: \"Netherlands\" },\n NO: { name: \"Norway\" },\n NP: { name: \"Nepal\" },\n NZ: { name: \"New Zealand\" },\n OM: { name: \"Oman\" },\n PA: { name: \"Panama\" },\n PE: { name: \"Peru\" },\n PH: { name: \"Philippines\" },\n PK: { name: \"Islamic Republic of Pakistan\" },\n PL: { name: \"Poland\" },\n PR: { name: \"Puerto Rico\" },\n PT: { name: \"Portugal\" },\n PY: { name: \"Paraguay\" },\n QA: { name: \"Qatar\" },\n RE: { name: \"Reunion\" },\n RO: { name: \"Romania\" },\n RS: { name: \"Serbia\" },\n RU: { name: \"Russia\" },\n RW: { name: \"Rwanda\" },\n SA: { name: \"Saudi Arabia\" },\n SE: { name: \"Sweden\" },\n SG: { name: \"Singapore\" },\n SI: { name: \"Slovenia\" },\n SK: { name: \"Slovak\" },\n SN: { name: \"Senegal\" },\n SO: { name: \"Somalia\" },\n SR: { name: \"Suriname\" },\n SV: { name: \"El Salvador\" },\n SY: { name: \"Syria\" },\n TH: { name: \"Thailand\" },\n TJ: { name: \"Tajikistan\" },\n TM: { name: \"Turkmenistan\" },\n TN: { name: \"Tunisia\" },\n TR: { name: \"Turkey\" },\n TT: { name: \"Trinidad and Tobago\" },\n TW: { name: \"Taiwan\" },\n TZ: { name: \"Tanzania\" },\n UA: { name: \"Ukraine\" },\n US: { name: \"United States\" },\n UY: { name: \"Uruguay\" },\n VA: { name: \"Vatican\" },\n VE: { name: \"Venezuela\" },\n VN: { name: \"Viet Nam\" },\n YE: { name: \"Yemen\" },\n ZA: { name: \"South Africa\" },\n ZW: { name: \"Zimbabwe\" },\n};\n\nlet ccZero = \"0\".charCodeAt(0);\nlet ccNine = \"9\".charCodeAt(0);\nlet ccA = \"A\".charCodeAt(0);\nlet ccZ = \"Z\".charCodeAt(0);\n\n/**\n * Append a IBAN digit(s) based on a char code.\n */\nfunction appendDigit(digits: number[], cc: number): boolean {\n if (cc >= ccZero && cc <= ccNine) {\n digits.push(cc - ccZero);\n } else if (cc >= ccA && cc <= ccZ) {\n const n = cc - ccA + 10;\n digits.push(Math.floor(n / 10) % 10);\n digits.push(n % 10);\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Compute MOD-97-10 as per ISO/IEC 7064:2003.\n */\nfunction mod97(digits: number[]): number {\n let i = 0;\n let modAccum = 0;\n while (i < digits.length) {\n let n = 0;\n while (n < 9 && i < digits.length) {\n modAccum = modAccum * 10 + digits[i];\n i++;\n n++;\n }\n modAccum = modAccum % 97;\n }\n return modAccum;\n}\n\nexport function validateIban(ibanString: string): IbanValidationResult {\n let myIban = ibanString.toLocaleUpperCase().replace(\" \", \"\");\n let countryCode = myIban.substring(0, 2);\n let countryInfo = ibanCountryInfoTable[countryCode];\n\n if (!countryInfo) {\n return {\n type: \"invalid\",\n };\n }\n\n let digits: number[] = [];\n\n for (let i = 4; i < myIban.length; i++) {\n const cc = myIban.charCodeAt(i);\n if (!appendDigit(digits, cc)) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n for (let i = 0; i < 4; i++) {\n if (!appendDigit(digits, ibanString.charCodeAt(i))) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n const rem = mod97(digits);\n if (rem === 1) {\n return {\n type: \"valid\",\n normalizedIban: myIban,\n };\n } else {\n return {\n type: \"invalid\",\n };\n }\n}\n\nexport function generateIban(countryCode: string, length: number): string {\n let ibanSuffix = \"\";\n let digits: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const cc = ccZero + (Math.floor(Math.random() * 100) % 10);\n appendDigit(digits, cc);\n ibanSuffix += String.fromCharCode(cc);\n }\n\n appendDigit(digits, countryCode.charCodeAt(0));\n appendDigit(digits, countryCode.charCodeAt(1));\n\n // Try using \"00\" as check digits\n appendDigit(digits, ccZero);\n appendDigit(digits, ccZero);\n\n const requiredChecksum = 98 - mod97(digits);\n\n const checkDigit1 = Math.floor(requiredChecksum / 10) % 10;\n const checkDigit2 = requiredChecksum % 10;\n\n return countryCode + checkDigit1 + checkDigit2 + ibanSuffix;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019-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 * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { AbsoluteTime } from \"./time.js\";\nimport { TransactionState } from \"./transactions-types.js\";\nimport { ExchangeEntryState, TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n BalanceChange = \"balance-change\",\n BackupOperationError = \"backup-error\",\n TransactionStateTransition = \"transaction-state-transition\",\n WithdrawalOperationTransition = \"withdrawal-operation-transition\",\n ExchangeStateTransition = \"exchange-state-transition\",\n TaskObservabilityEvent = \"task-observability-event\",\n RequestObservabilityEvent = \"request-observability-event\",\n}\n\nexport interface ErrorInfoSummary {\n code: number;\n hint?: string;\n message?: string;\n}\n\nexport interface TransactionStateTransitionNotification {\n type: NotificationType.TransactionStateTransition;\n transactionId: string;\n oldTxState: TransactionState;\n newTxState: TransactionState;\n errorInfo?: ErrorInfoSummary;\n\n /**\n * Additional \"user data\" that is dependent on the\n * state transition.\n *\n * Usage should be avoided.\n *\n * Currently used to notify the iOS app about\n * the KYC URL.\n */\n experimentalUserData?: any;\n}\n\nexport interface ExchangeStateTransitionNotification {\n type: NotificationType.ExchangeStateTransition;\n /**\n * Identification of the exchange entry that this\n * notification is about.\n */\n exchangeBaseUrl: string;\n\n /**\n * If missing, the notification means that\n * the exchange entry is newly created.\n */\n oldExchangeState?: ExchangeEntryState;\n\n /**\n * New state of the exchange.\n */\n newExchangeState: ExchangeEntryState;\n\n /**\n * Summary of the error that occurred when trying to update the exchange entry,\n * if applicable.\n */\n errorInfo?: ErrorInfoSummary;\n}\n\nexport interface BalanceChangeNotification {\n type: NotificationType.BalanceChange;\n\n /**\n * Transaction ID of the transaction that caused the balance update.\n *\n * Only used as a hint for debugging, should not be relied upon by clients.\n */\n hintTransactionId: string;\n}\n\nexport interface TaskProgressNotification {\n type: NotificationType.TaskObservabilityEvent;\n taskId: string;\n event: ObservabilityEvent;\n}\n\nexport interface RequestProgressNotification {\n type: NotificationType.RequestObservabilityEvent;\n requestId: string;\n operation: string;\n event: ObservabilityEvent;\n}\n\nexport enum ObservabilityEventType {\n HttpFetchStart = \"http-fetch-start\",\n HttpFetchFinishError = \"http-fetch-finish-error\",\n HttpFetchFinishSuccess = \"http-fetch-finish-success\",\n DbQueryStart = \"db-query-start\",\n DbQueryFinishSuccess = \"db-query-finish-success\",\n DbQueryFinishError = \"db-query-finish-error\",\n RequestStart = \"request-start\",\n RequestFinishSuccess = \"request-finish-success\",\n RequestFinishError = \"request-finish-error\",\n TaskStart = \"task-start\",\n TaskStop = \"task-stop\",\n TaskReset = \"task-reset\",\n ShepherdTaskResult = \"sheperd-task-result\",\n DeclareTaskDependency = \"declare-task-dependency\",\n CryptoStart = \"crypto-start\",\n CryptoFinishSuccess = \"crypto-finish-success\",\n CryptoFinishError = \"crypto-finish-error\",\n Message = \"message\",\n}\n\nexport type ObservabilityEvent =\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchStart;\n url: string;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishSuccess;\n url: string;\n status: number;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishError;\n url: string;\n error: TalerErrorDetail;\n }\n | {\n type: ObservabilityEventType.DbQueryStart;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishSuccess;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishError;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.RequestStart;\n }\n | {\n type: ObservabilityEventType.RequestFinishSuccess;\n durationMs: number;\n }\n | {\n type: ObservabilityEventType.RequestFinishError;\n }\n | {\n type: ObservabilityEventType.TaskStart;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskStop;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskReset;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.DeclareTaskDependency;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.CryptoStart;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishSuccess;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishError;\n operation: string;\n }\n | {\n type: ObservabilityEventType.ShepherdTaskResult;\n resultType: string;\n }\n | {\n type: ObservabilityEventType.Message;\n contents: string;\n };\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n/**\n * This notification is required to signal UI that\n * the withdrawal operation changed the state.\n *\n * https://bugs.gnunet.org/view.php?id=8099\n */\nexport interface WithdrawalOperationTransitionNotification {\n type: NotificationType.WithdrawalOperationTransition;\n uri: string;\n}\n\nexport type WalletNotification =\n | BalanceChangeNotification\n | WithdrawalOperationTransitionNotification\n | BackupOperationErrorNotification\n | ExchangeStateTransitionNotification\n | TransactionStateTransitionNotification\n | TaskProgressNotification\n | RequestProgressNotification;\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 * Cross-platform timers.\n *\n * NodeJS and the browser use slightly different timer API,\n * this abstracts over these differences.\n */\n\n/**\n * Imports.\n */\nimport { Logger, Duration } from \"@gnu-taler/taler-util\";\n\nconst logger = new Logger(\"timer.ts\");\n\n/**\n * Cancelable timer.\n */\nexport interface TimerHandle {\n clear(): void;\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void;\n}\n\nclass IntervalHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearInterval(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\nclass TimeoutHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearTimeout(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\n/**\n * Get a performance counter in nanoseconds.\n */\nexport const performanceNow: () => bigint = (() => {\n // @ts-ignore\n if (typeof process !== \"undefined\" && process.hrtime) {\n return () => {\n return process.hrtime.bigint();\n };\n }\n\n // @ts-ignore\n if (typeof performance !== \"undefined\") {\n // @ts-ignore\n return () => BigInt(Math.floor(performance.now() * 1000)) * BigInt(1000);\n }\n\n return () => BigInt(new Date().getTime()) * BigInt(1000) * BigInt(1000);\n})();\n\nconst nullTimerHandle = {\n clear() {\n // do nothing\n return;\n },\n unref() {\n // do nothing\n return;\n },\n};\n\n/**\n * Group of timers that can be destroyed at once.\n */\nexport interface TimerAPI {\n after(delayMs: number, callback: () => void): TimerHandle;\n every(delayMs: number, callback: () => void): TimerHandle;\n}\n\nexport class SetTimeoutTimerAPI implements TimerAPI {\n /**\n * Call a function every time the delay given in milliseconds passes.\n */\n every(delayMs: number, callback: () => void): TimerHandle {\n return new IntervalHandle(setInterval(callback, delayMs));\n }\n\n /**\n * Call a function after the delay given in milliseconds passes.\n */\n after(delayMs: number, callback: () => void): TimerHandle {\n return new TimeoutHandle(setTimeout(callback, delayMs));\n }\n}\n\nexport const timer = new SetTimeoutTimerAPI();\n\n/**\n * Implementation of [[TimerGroup]] using setTimeout\n */\nexport class TimerGroup {\n private stopped = false;\n\n private readonly timerMap: { [index: number]: TimerHandle } = {};\n\n private idGen = 1;\n\n constructor(public readonly timerApi: TimerAPI) {}\n\n stopCurrentAndFutureTimers(): void {\n this.stopped = true;\n for (const x in this.timerMap) {\n if (!this.timerMap.hasOwnProperty(x)) {\n continue;\n }\n this.timerMap[x].clear();\n delete this.timerMap[x];\n }\n }\n\n resolveAfter(delayMs: Duration): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (delayMs.d_ms !== \"forever\") {\n this.after(delayMs.d_ms, () => {\n resolve();\n });\n }\n });\n }\n\n after(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.after(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\n }\n\n every(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.every(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\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\nimport {\n TransactionType,\n PaymentStatus,\n TransactionMajorState,\n} from \"./transactions-types.js\";\nimport { RefreshReason } from \"./wallet-types.js\";\n\n/**\n * Sample transaction list entries.\n */\nexport const sampleWalletCoreTransactions = [\n {\n type: TransactionType.Payment,\n txState: {\n major: TransactionMajorState.Done,\n },\n amountRaw: \"KUDOS:10\",\n amountEffective: \"KUDOS:10\",\n totalRefundRaw: \"KUDOS:0\",\n totalRefundEffective: \"KUDOS:0\",\n status: PaymentStatus.Paid,\n refundPending: undefined,\n posConfirmation: undefined,\n pending: false,\n refunds: [],\n timestamp: {\n t_s: 1677166045,\n },\n transactionId:\n \"txn:payment:NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n proposalId: \"NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n info: {\n merchant: {\n name: \"woocommerce\",\n website: \"woocommerce.demo.taler.net\",\n email: \"foo@example.com\",\n address: {},\n jurisdiction: {},\n },\n orderId: \"wc_order_KQCRldghIgDRB-100\",\n products: [\n {\n description: \"Using GCC\",\n quantity: 1,\n price: \"KUDOS:10\",\n product_id: \"28\",\n },\n ],\n summary: \"WooTalerShop #100\",\n contractTermsHash:\n \"A02E1M6ARWKBJ87K2TV4S6WQ4X5YH7BRVR6MYCHCTVAED8MBXTFD6PZ5Q50Y7Z5K18PYBTDA14NQ56XPC1VCQW1EVRWTSB7ZYT65B5G\",\n fulfillmentUrl:\n \"https://woocommerce.demo.taler.net/?wc-api=wc_gnutaler_gateway&order_id=wc_order_KQCRldghIgDRB-100\",\n },\n refundQueryActive: false,\n frozen: false,\n },\n {\n type: TransactionType.Refresh,\n txState: {\n major: TransactionMajorState.Pending,\n },\n refreshReason: RefreshReason.PayMerchant,\n amountEffective: \"KUDOS:0\",\n amountRaw: \"KUDOS:0\",\n refreshInputAmount: \"KUDOS:1.5\",\n refreshOutputAmount: \"KUDOS:1.4\",\n originatingTransactionId:\n \"txn:proposal:ZCGBZFE8KZ1CBYYGSC3ZC8E40KVJWV16VYCTHGC8FFSVZ5HD24BG\",\n pending: true,\n timestamp: {\n t_s: 1681376214,\n },\n transactionId:\n \"txn:refresh:QQSWHHXCRQ269G0E3RW14JMC6F7NFDYDW26NSFHRTXSKDS6CMCZ0\",\n frozen: false,\n error: {\n code: 7029,\n when: {\n t_ms: 1681376473665,\n },\n hint: \"Error (WALLET_REFRESH_GROUP_INCOMPLETE)\",\n numErrors: 1,\n errors: [\n {\n code: 7001,\n when: {\n t_ms: 1681376473189,\n },\n hint: \"unexpected exception (message: exchange wire fee signature invalid)\",\n stack:\n \" at validateWireInfo (../taler-wallet-core-qjs.mjs:23166)\\n\",\n },\n ],\n },\n },\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 { AbsoluteTime, Codec, codecForString } from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport {\n ObservableMap,\n browserStorageMap,\n localStorageMap,\n memoryMap,\n} from \"../utils/observable.js\";\n\ndeclare const opaque_StorageKey: unique symbol;\n\nexport type StorageKey<Key> = {\n id: string;\n [opaque_StorageKey]: true;\n codec: Codec<Key>;\n};\n\nexport function buildStorageKey<Key>(\n name: string,\n codec: Codec<Key>,\n): StorageKey<Key>;\nexport function buildStorageKey(name: string): StorageKey<string>;\nexport function buildStorageKey<Key = string>(\n name: string,\n codec?: Codec<Key>,\n): StorageKey<Key> {\n return {\n id: name,\n codec: codec ?? (codecForString() as Codec<Key>),\n } as StorageKey<Key>;\n}\n\nexport interface StorageState<Type = string> {\n value?: Type;\n update: (s: Type) => void;\n reset: () => void;\n}\n\nconst supportLocalStorage = typeof window !== \"undefined\";\nconst supportBrowserStorage =\n typeof chrome !== \"undefined\" && typeof chrome.storage !== \"undefined\";\n\n/**\n * Build setting storage\n */\nconst storage: ObservableMap<string, string> = (function buildStorage() {\n if (supportBrowserStorage) {\n //browser storage is like local storage but\n //with app sync.\n //Works for almost every browser\n if (supportLocalStorage) {\n return browserStorageMap(localStorageMap());\n } else {\n // service worker doesn't have local storage\n return browserStorageMap(memoryMap<string>());\n }\n } else if (supportLocalStorage) {\n // fallback if browser is too old\n return localStorageMap();\n } else {\n // new need to save settings somewhere\n return memoryMap<string>();\n }\n})();\n//with initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//without initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n): StorageState<Type>;\n// impl\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue?: Type,\n): StorageState<Type> {\n const current = convert(storage.get(key.id), key, defaultValue);\n\n const [_, setStoredValue] = useState(AbsoluteTime.now().t_ms);\n\n useEffect(() => {\n return storage.onUpdate(key.id, () => {\n // const newValue = storage.get(key.id);\n setStoredValue(AbsoluteTime.now().t_ms);\n });\n }, [key.id]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key.id);\n } else {\n storage.set(\n key.id,\n key.codec ? JSON.stringify(value) : (value as string),\n );\n }\n };\n\n return {\n value: current,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n\nfunction convert<Type>(updated: string | undefined, key: StorageKey<Type>, defaultValue?: Type): Type | undefined {\n if (updated === undefined) return defaultValue; //optional\n try {\n return key.codec.decode(JSON.parse(updated));\n } catch (e) {\n //decode error\n return defaultValue;\n }\n}\n", "import { isArrayBufferView } from \"util/types\";\n\nexport type ObservableMap<K, V> = Map<K, V> & {\n onAnyUpdate: (callback: () => void) => () => void;\n onUpdate: (key: string, callback: () => void) => () => void;\n};\n\n//FIXME: allow different type for different properties\nexport function memoryMap<T>(\n backend: Map<string, T> = new Map<string, T>(),\n): ObservableMap<string, T> {\n const obs = new EventTarget();\n const theMemoryMap: ObservableMap<string, T> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const result = backend.delete(key);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return result;\n },\n set: (key: string, value: T) => {\n backend.set(key, value);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theMemoryMap;\n },\n clear: () => {\n backend.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: backend.entries.bind(backend),\n forEach: backend.forEach.bind(backend),\n get: backend.get.bind(backend),\n has: backend.has.bind(backend),\n keys: backend.keys.bind(backend),\n size: backend.size,\n values: backend.values.bind(backend),\n [Symbol.iterator]: backend[Symbol.iterator],\n [Symbol.toStringTag]: \"theMemoryMap\",\n };\n return theMemoryMap;\n}\n\n//FIXME: change this implementation to match the\n// browser storage. instead of creating a sync implementation\n// of observable map it should reuse the memoryMap and\n// sync the state with local storage\nexport function localStorageMap(): ObservableMap<string, string> {\n const obs = new EventTarget();\n const theLocalStorageMap: ObservableMap<string, string> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n window.addEventListener(\"storage\", handler);\n return () => {\n window.removeEventListener(\"storage\", handler);\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n function handleStorageEvent(ev: StorageEvent) {\n if (ev.key === null || ev.key === key) {\n handler();\n }\n }\n window.addEventListener(\"storage\", handleStorageEvent);\n return () => {\n window.removeEventListener(\"storage\", handleStorageEvent);\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const exists = localStorage.getItem(key) !== null;\n localStorage.removeItem(key);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return exists;\n },\n set: (key: string, v: string) => {\n localStorage.setItem(key, v);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theLocalStorageMap;\n },\n clear: () => {\n localStorage.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: (): IterableIterator<[string, string]> => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: [key, item] };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n forEach: (cb) => {\n for (let index = 0; index < localStorage.length; index++) {\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n cb(key, item, theLocalStorageMap);\n }\n },\n get: (key: string) => {\n const item = localStorage.getItem(key);\n if (item === null) return undefined;\n return item;\n },\n has: (key: string) => {\n return localStorage.getItem(key) === null;\n },\n keys: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n index = index + 1;\n return { done: false, value: key };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n size: localStorage.length,\n values: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: item };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n [Symbol.iterator]: function (): IterableIterator<[string, string]> {\n return theLocalStorageMap.entries();\n },\n [Symbol.toStringTag]: \"theLocalStorageMap\",\n };\n return theLocalStorageMap;\n}\n\nconst isFirefox =\n typeof (window as any) !== \"undefined\" &&\n typeof (window as any)[\"InstallTrigger\"] !== \"undefined\";\n\nasync function getAllContent() {\n //Firefox and Chrome has different storage api\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.get();\n } else {\n return chrome.storage.local.get();\n }\n}\n\nasync function updateContent(obj: Record<string, any>) {\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.set(obj);\n } else {\n return chrome.storage.local.set(obj);\n }\n}\ntype Changes = { [key: string]: { oldValue?: any; newValue?: any } };\nfunction onBrowserStorageUpdate(cb: (changes: Changes) => void): void {\n if (isFirefox) {\n // @ts-ignore\n browser.storage.local.onChanged.addListener(cb);\n } else {\n chrome.storage.local.onChanged.addListener(cb);\n }\n}\n\nexport function browserStorageMap(\n backend: ObservableMap<string, string>,\n): ObservableMap<string, string> {\n getAllContent().then(content => {\n Object.entries(content ?? {}).forEach(([k, v]) => {\n backend.set(k, v as string);\n });\n })\n\n backend.onAnyUpdate(async () => {\n const result: Record<string, string> = {};\n for (const [key, value] of backend.entries()) {\n result[key] = value;\n }\n await updateContent(result);\n });\n\n onBrowserStorageUpdate((changes) => {\n //another chrome instance made the change\n const changedItems = Object.keys(changes);\n if (changedItems.length === 0) {\n backend.clear();\n } else {\n for (const key of changedItems) {\n if (!changes[key].newValue) {\n backend.delete(key);\n } else {\n if (changes[key].newValue !== changes[key].oldValue) {\n backend.set(key, changes[key].newValue);\n }\n }\n }\n }\n });\n\n return backend;\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 {\n StorageState,\n buildStorageKey,\n useLocalStorage,\n} from \"./useLocalStorage.js\";\n\nconst MIN_LANG_COVERAGE_THRESHOLD = 90;\n/**\n * choose the best from the browser config based on the completeness\n * on the translation\n */\nfunction getBrowserLang(completeness: Record<string, number>): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n\n if (window.navigator.language) {\n if (completeness[window.navigator.language] >= MIN_LANG_COVERAGE_THRESHOLD) {\n return window.navigator.language\n }\n }\n if (window.navigator.languages) {\n const match = Object.entries(completeness).filter(([code, value]) => {\n if (value < MIN_LANG_COVERAGE_THRESHOLD) return false; //do not consider langs below 90%\n return window.navigator.languages.findIndex(l => l.startsWith(code)) !== -1\n }).map(([code, value]) => ({ code, value }))\n\n if (match.length > 0) {\n let max = match[0]\n match.forEach(v => {\n if (v.value > max.value) {\n max = v\n }\n })\n return max.code\n }\n };\n\n return undefined;\n}\n\nconst langPreferenceKey = buildStorageKey(\"lang-preference\");\n\nexport function useLang(initial: string | undefined, completeness: Record<string, number>): Required<StorageState> {\n const defaultValue = (getBrowserLang(completeness) || initial || \"en\").substring(0, 2);\n return useLocalStorage(langPreferenceKey, defaultValue);\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ObservableMap, memoryMap } from \"../utils/observable.js\";\nimport { StorageKey, StorageState } from \"./useLocalStorage.js\";\n\nconst storage: ObservableMap<string, any> = memoryMap<any>();\n\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n): StorageState<Type>;\n// impl\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue?: Type,\n): StorageState<Type> {\n const [storedValue, setStoredValue] = useState<Type | undefined>(\n (): Type | undefined => {\n const prev = storage.get(key);\n return prev === undefined ? defaultValue : prev;\n },\n );\n\n useEffect(() => {\n return storage.onUpdate(key, () => {\n const newValue = storage.get(key);\n setStoredValue(newValue === undefined ? defaultValue : newValue);\n });\n }, [key]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key);\n } else {\n storage.set(key, value);\n }\n };\n\n return {\n value: storedValue,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n", "import {\n AbsoluteTime,\n Duration,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ButtonHandler } from \"../components/Button.js\";\nimport {\n InternationalizationAPI,\n memoryMap,\n useTranslationContext,\n} from \"../index.browser.js\";\n\nexport type NotificationMessage = ErrorNotification | InfoNotification;\n\nexport interface ErrorNotification {\n type: \"error\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n description?: TranslatedString;\n debug?: any;\n when: AbsoluteTime;\n}\nexport interface InfoNotification {\n type: \"info\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n when: AbsoluteTime;\n}\n\nconst storage = memoryMap<Map<string, NotificationMessage>>();\nconst NOTIFICATION_KEY = \"notification\";\n\nexport const GLOBAL_NOTIFICATION_TIMEOUT = Duration.fromSpec({\n seconds: 5,\n});\n\nfunction updateInStorage(n: NotificationMessage) {\n const h = hash(n);\n const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = new Map(mem);\n newState.set(h, n);\n storage.set(NOTIFICATION_KEY, newState);\n}\n\nexport function notify(notif: NotificationMessage): void {\n const currentState: Map<string, NotificationMessage> =\n storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = currentState.set(hash(notif), notif);\n\n if (GLOBAL_NOTIFICATION_TIMEOUT.d_ms !== \"forever\") {\n setTimeout(() => {\n notif.timeout = true;\n updateInStorage(notif);\n }, GLOBAL_NOTIFICATION_TIMEOUT.d_ms);\n }\n\n storage.set(NOTIFICATION_KEY, newState);\n}\nexport function notifyError(\n title: TranslatedString,\n description: TranslatedString | undefined,\n debug?: any,\n) {\n notify({\n type: \"error\" as const,\n title,\n description,\n debug,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyException(title: TranslatedString, ex: Error) {\n notify({\n type: \"error\" as const,\n title,\n description: ex.message as TranslatedString,\n debug: ex.stack,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyInfo(title: TranslatedString) {\n notify({\n type: \"info\" as const,\n title,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type Notification = {\n message: NotificationMessage;\n acknowledge: () => void;\n};\n\nexport function useNotifications(): Notification[] {\n const [, setLastUpdate] = useState<number>();\n const value = storage.get(NOTIFICATION_KEY) ?? new Map();\n\n useEffect(() => {\n return storage.onUpdate(NOTIFICATION_KEY, () => {\n setLastUpdate(Date.now())\n // const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n // setter(structuredClone(mem));\n });\n });\n\n return Array.from(value.values()).map((message, idx) => {\n return {\n message,\n acknowledge: () => {\n message.ack = true;\n updateInStorage(message);\n },\n };\n });\n}\n\nfunction hashCode(str: string): string {\n if (str.length === 0) return \"0\";\n let hash = 0;\n let chr;\n for (let i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash.toString(16);\n}\n\nfunction hash(msg: NotificationMessage): string {\n let str = (msg.type + \":\" + msg.title) as string;\n if (msg.type === \"error\") {\n if (msg.description) {\n str += \":\" + msg.description;\n }\n if (msg.debug) {\n str += \":\" + msg.debug;\n }\n }\n return hashCode(str);\n}\n\nfunction errorMap<T extends OperationFail<unknown>>(\n resp: T,\n map: (d: T[\"case\"]) => TranslatedString,\n): void {\n notify({\n type: \"error\",\n title: map(resp.case),\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type ErrorNotificationHandler = (\n cb: (notify: typeof errorMap) => Promise<void>,\n) => Promise<void>;\n\n/**\n * @deprecated use useLocalNotificationHandler\n *\n * @returns\n */\nexport function useLocalNotification(): [\n Notification | undefined,\n (n: NotificationMessage) => void,\n ErrorNotificationHandler,\n] {\n const { i18n } = useTranslationContext();\n\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n async function errorHandling(cb: (notify: typeof errorMap) => Promise<void>) {\n try {\n return await cb(errorMap);\n } catch (error: unknown) {\n if (error instanceof TalerError) {\n notify(buildUnifiedRequestErrorMessage(i18n, error));\n } else {\n notifyError(\n i18n.str`Operation failed, please report`,\n (error instanceof Error\n ? error.message\n : JSON.stringify(error)) as TranslatedString,\n );\n }\n }\n }\n return [notif, setter, errorHandling];\n}\n\ntype HandlerMaker = <T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:\n | ((result: T extends OperationOk<any> ? T : never) => void)\n | ((\n result: T extends OperationOk<any> ? T : never,\n ) => TranslatedString | undefined),\n onOperationFail: (\n d: T extends OperationFail<any> ? T : never,\n ) => TranslatedString,\n onOperationComplete?: () => void,\n) => ButtonHandler<T, A, B>;\n\nexport function useLocalNotificationHandler(): [\n Notification | undefined,\n HandlerMaker,\n (n: NotificationMessage) => void,\n] {\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n function makeHandler<T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:\n | ((result: T extends OperationOk<any> ? T : never) => void)\n | ((\n result: T extends OperationOk<any> ? T : never,\n ) => TranslatedString | undefined),\n onOperationFail: (\n d: T extends OperationFail<any> ? T : never,\n ) => TranslatedString,\n onOperationComplete?: () => void,\n ): ButtonHandler<T, A, B> {\n return {\n onClick,\n onNotification: setter,\n onOperationFail,\n onOperationSuccess,\n onOperationComplete,\n };\n }\n\n return [notif, makeHandler, setter];\n}\n\nexport function buildUnifiedRequestErrorMessage(\n i18n: InternationalizationAPI,\n cause: TalerError,\n): ErrorNotification {\n let result: ErrorNotification;\n switch (cause.errorDetail.code) {\n case TalerErrorCode.GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Request cancelled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n result = {\n type: \"error\",\n title: i18n.str`Request throttled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n result = {\n type: \"error\",\n title: i18n.str`Malformed response`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Network error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected request error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n default: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n }\n return result;\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport enum ErrorType {\n CLIENT,\n SERVER,\n UNREADABLE,\n TIMEOUT,\n UNEXPECTED,\n}\n\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 * @deprecated do not use it, it will be removed\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 secret-token:${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 || options.contentType === \"json\" ? \"application/json\" : \"text/plain\";\n\n if (options.talerAmlOfficerSignature) {\n requestHeaders[\"Taler-AML-Officer-Signature\"] =\n options.talerAmlOfficerSignature;\n }\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 const requestPreventCache = options.preventCache ?? false;\n const requestPreventCors = options.preventCors ?? false;\n\n const validURL = validateURL(baseUrl, endpoint);\n\n if (!validURL) {\n const error: HttpResponseUnexpectedError = {\n info: {\n url: `${baseUrl}${endpoint}`,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `invalid URL: \"${baseUrl}${endpoint}\"`,\n };\n throw new RequestError(error)\n }\n\n Object.entries(requestParams).forEach(([key, value]) => {\n validURL.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 const error: HttpResponseUnexpectedError = {\n info: {\n url: validURL.href,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `unsupported request body type: \"${typeof requestBody}\"`,\n };\n throw new RequestError(error)\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(validURL.href, {\n headers: requestHeaders,\n method: requestMethod,\n credentials: \"omit\",\n mode: requestPreventCors ? \"no-cors\" : \"cors\",\n cache: requestPreventCache ? \"no-cache\" : \"default\",\n body: payload,\n signal: controller.signal,\n });\n } catch (ex) {\n const info: RequestInfo = {\n payload,\n url: validURL.href,\n hasToken: !!options.token,\n status: 0,\n options,\n };\n\n if (ex instanceof Error) {\n if (ex.message === \"HTTP_REQUEST_TIMEOUT\") {\n const error: HttpRequestTimeoutError = {\n info,\n type: ErrorType.TIMEOUT,\n message: \"request timeout\",\n };\n throw new RequestError(error);\n }\n }\n\n const error: HttpResponseUnexpectedError = {\n info,\n type: ErrorType.UNEXPECTED,\n exception: ex,\n loading: false,\n message: (ex instanceof Error ? ex.message : \"\"),\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 validURL.href,\n payload,\n !!options.token,\n options,\n );\n return result;\n } else {\n const dataTxt = await response.text();\n const error = buildRequestFailed(\n validURL.href,\n dataTxt,\n response.status,\n payload,\n options,\n );\n throw new RequestError(error);\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponse<T, ErrorDetail> =\n | HttpResponseOk<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponsePaginated<T, ErrorDetail> =\n | HttpResponseOkPaginated<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestInfo {\n url: string;\n hasToken: boolean;\n payload: any;\n status: number;\n options: RequestOptions;\n}\n\ninterface HttpResponseLoading<T> {\n ok?: false;\n loading: true;\n clientError?: false;\n serverError?: false;\n\n data?: T;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface WithPagination {\n loadMore: () => void;\n loadMorePrev: () => void;\n isReachingEnd?: boolean;\n isReachingStart?: boolean;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpError<ErrorDetail> =\n | HttpRequestTimeoutError\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface HttpResponseServerError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.SERVER;\n payload: ErrorDetail;\n status: HttpStatusCode;\n message: string;\n info: RequestInfo;\n}\ninterface HttpRequestTimeoutError {\n ok?: false;\n loading?: false;\n type: ErrorType.TIMEOUT;\n\n info: RequestInfo;\n\n message: string;\n}\ninterface HttpResponseClientError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.CLIENT;\n\n info: RequestInfo;\n status: HttpStatusCode;\n payload: ErrorDetail;\n message: string;\n}\n\ninterface HttpResponseUnexpectedError {\n ok?: false;\n loading: false;\n type: ErrorType.UNEXPECTED;\n\n info: RequestInfo;\n status?: HttpStatusCode;\n exception: unknown;\n message: string;\n}\n\ninterface HttpResponseUnreadableError {\n ok?: false;\n loading: false;\n type: ErrorType.UNREADABLE;\n\n info: RequestInfo;\n status: HttpStatusCode;\n exception: unknown;\n body: string;\n message: string;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestOptions {\n method?: Methods;\n token?: string;\n basicAuth?: {\n username: string;\n password: string;\n };\n preventCache?: boolean;\n preventCors?: boolean;\n data?: any;\n params?: unknown;\n timeout?: number;\n contentType?: \"text\" | \"json\";\n talerAmlOfficerSignature?: string;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nasync function buildRequestOk<T>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n options: RequestOptions,\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 options,\n status: response.status,\n },\n };\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport function buildRequestFailed<ErrorDetail>(\n url: string,\n dataTxt: string,\n status: number,\n payload: any,\n maybeOptions?: RequestOptions,\n):\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError {\n const options = maybeOptions ?? {};\n const info: RequestInfo = {\n payload,\n url,\n hasToken: !!options.token,\n options,\n status: status || 0,\n };\n\n // const dataTxt = await response.text();\n try {\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n const errorCode = !data || !data.code ? \"\" : `(code: ${data.code})`;\n const errorHint =\n !data || !data.hint ? \"Not hint.\" : `${data.hint} ${errorCode}`;\n\n if (status && status >= 400 && status < 500) {\n const message =\n data === undefined\n ? `Client error (${status}) without data.`\n : errorHint;\n\n const error: HttpResponseClientError<ErrorDetail> = {\n type: ErrorType.CLIENT,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n if (status && status >= 500 && status < 600) {\n const message =\n data === undefined\n ? `Server error (${status}) without data.`\n : errorHint;\n const error: HttpResponseServerError<ErrorDetail> = {\n type: ErrorType.SERVER,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n return {\n info,\n loading: false,\n type: ErrorType.UNEXPECTED,\n status,\n exception: undefined,\n message: `http status code not handled: ${status}`,\n };\n } catch (ex) {\n const error: HttpResponseUnreadableError = {\n info,\n loading: false,\n status,\n type: ErrorType.UNREADABLE,\n exception: ex,\n body: dataTxt,\n message: \"Could not parse body as json\",\n };\n\n return error;\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nfunction validateURL(baseUrl: string, endpoint: string): URL | undefined {\n try {\n return new URL(`${baseUrl}${endpoint}`)\n } catch (ex) {\n return undefined\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 * Imports.\n */\nimport {\n Logger,\n RequestThrottler,\n TalerErrorCode,\n TalerError,\n Duration,\n} from \"@gnu-taler/taler-util\";\n\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n Headers,\n getDefaultHeaders,\n encodeBody,\n DEFAULT_REQUEST_TIMEOUT_MS,\n HttpLibArgs,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"browserHttpLib\");\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n * \n * @deprecated use BrowserFetchHttpLib\n */\nexport class BrowserHttpLibDepreacted implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n let myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n return new Promise<HttpResponse>((resolve, reject) => {\n const myRequest = new XMLHttpRequest();\n\n myRequest.onerror = (e) => {\n logger.error(\"http request error\");\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"Could not make request\",\n ),\n );\n };\n\n myRequest.open(requestMethod, requestUrl);\n\n let timeoutId: any | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n myRequest.abort();\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `request to ${requestUrl} timed out`,\n ),\n );\n }, requestTimeout.d_ms);\n }\n\n Object.keys(requestHeadersMap).forEach((headerName) => {\n myRequest.setRequestHeader(headerName, requestHeadersMap[headerName]);\n });\n\n myRequest.responseType = \"arraybuffer\";\n myRequest.send(myBody);\n\n myRequest.addEventListener(\"readystatechange\", (e) => {\n if (myRequest.readyState === XMLHttpRequest.DONE) {\n if (myRequest.status === 0) {\n const exc = TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"HTTP request failed (status 0, maybe URI scheme was wrong?)\",\n );\n reject(exc);\n return;\n }\n const makeText = async (): Promise<string> => {\n const td = new TextDecoder();\n return td.decode(myRequest.response);\n };\n let responseJson: unknown = undefined;\n const makeJson = async (): Promise<any> => {\n if (responseJson === undefined) {\n try {\n const td = new TextDecoder();\n const responseString = td.decode(myRequest.response);\n responseJson = JSON.parse(responseString);\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n return responseJson;\n };\n\n const headers = myRequest.getAllResponseHeaders();\n const arr = headers.trim().split(/[\\r\\n]+/);\n\n // Create a map of header names to values\n const headerMap: Headers = new Headers();\n arr.forEach(function (line) {\n const parts = line.split(\": \");\n const headerName = parts.shift();\n if (!headerName) {\n logger.warn(\"skipping invalid header\");\n return;\n }\n const value = parts.join(\": \");\n headerMap.set(headerName, value);\n });\n const resp: HttpResponse = {\n requestUrl: requestUrl,\n status: myRequest.status,\n headers: headerMap,\n requestMethod: requestMethod,\n json: makeJson,\n text: makeText,\n bytes: async () => myRequest.response,\n };\n resolve(resp);\n }\n });\n });\n }\n\n get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"GET\",\n ...opt,\n });\n }\n\n postJson(\n url: string,\n body: any,\n opt?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n ...opt,\n });\n }\n\n stop(): void {\n // Nothing to do\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 * Imports.\n */\nimport {\n Duration,\n RequestThrottler,\n TalerError,\n TalerErrorCode\n} from \"@gnu-taler/taler-util\";\n\nimport {\n DEFAULT_REQUEST_TIMEOUT_MS,\n Headers,\n HttpLibArgs,\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n encodeBody,\n getDefaultHeaders,\n} from \"@gnu-taler/taler-util/http\";\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n */\nexport class BrowserFetchHttpLib implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n public constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n async fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n const requestCancel = options?.cancellationToken;\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n const myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n controller.abort(TalerErrorCode.GENERIC_TIMEOUT);\n }, requestTimeout.d_ms);\n }\n if (requestCancel) {\n requestCancel.onCancelled(() => {\n controller.abort(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)\n });\n }\n\n try {\n const response = await fetch(requestUrl, {\n headers: requestHeadersMap,\n body: myBody,\n method: requestMethod,\n signal: controller.signal,\n });\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n const headerMap = new Headers();\n response.headers.forEach((value, key) => {\n headerMap.set(key, value);\n });\n return {\n headers: headerMap,\n status: response.status,\n requestMethod,\n requestUrl,\n json: makeJsonHandler(response, requestUrl, requestMethod),\n text: makeTextHandler(response, requestUrl, requestMethod),\n bytes: async () => (await response.blob()).arrayBuffer(),\n };\n } catch (e) {\n if (controller.signal) {\n throw TalerError.fromDetail(\n controller.signal.reason,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `HTTP request failed.`,\n );\n }\n throw e;\n }\n }\n\n}\n\nfunction makeTextHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n return async function getTextFromResponse(): Promise<any> {\n let respText;\n try {\n respText = await response.text();\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid text from HTTP response\",\n );\n }\n return respText;\n };\n}\n\nfunction makeJsonHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n let responseJson: unknown = undefined;\n return async function getJsonFromResponse(): Promise<any> {\n if (responseJson === undefined) {\n try {\n responseJson = await response.json();\n } catch (e) {\n const message = e instanceof Error ? `Invalid JSON from HTTP response: ${e.message}` : \"Invalid JSON from HTTP response\"\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n message,\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid JSON from HTTP response: null or not object\",\n );\n }\n return responseJson;\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\ndeclare const __location: unique symbol;\n/**\n * special string that defined a location in the application\n *\n * this help to prevent wrong path\n */\nexport type AppLocation = string & {\n [__location]: true;\n};\n\nexport type EmptyObject = Record<string, never>;\n\nexport function urlPattern<\n T extends Record<string, string | undefined> = EmptyObject,\n>(pattern: RegExp, reverse: (p: T) => string): RouteDefinition<T> {\n const url = reverse as (p: T) => AppLocation;\n return {\n pattern: new RegExp(pattern),\n url,\n };\n}\n\n/**\n * defines a location in the app\n *\n * pattern: how a string will trigger this location\n * url(): how a state serialize to a location\n */\n\nexport type ObjectOf<T> = Record<string, T> | EmptyObject;\n\nexport type RouteDefinition<\n T extends ObjectOf<string | undefined> = EmptyObject,\n> = {\n pattern: RegExp;\n url: (p: T) => AppLocation;\n};\n\nconst nullRountDef = {\n pattern: new RegExp(/.*/),\n url: () => \"\" as AppLocation,\n};\nexport function buildNullRoutDefinition<\n T extends ObjectOf<string>,\n>(): RouteDefinition<T> {\n return nullRountDef;\n}\n\n/**\n * Search path in the pageList\n * get the values from the path found\n * add params from searchParams\n *\n * @param path\n * @param params\n */\nexport function findMatch<T extends ObjectOf<RouteDefinition>>(\n pagesMap: T,\n pageList: Array<keyof T>,\n path: string,\n params: Record<string, string>,\n): Location<T> | undefined {\n for (let idx = 0; idx < pageList.length; idx++) {\n const name = pageList[idx];\n const found = pagesMap[name].pattern.exec(path);\n if (found !== null) {\n const values = {} as Record<string, unknown>;\n\n Object.entries(params).forEach(([key, value]) => {\n values[key] = value;\n });\n\n if (found.groups !== undefined) {\n Object.entries(found.groups).forEach(([key, value]) => {\n values[key] = value;\n });\n }\n\n // @ts-expect-error values is a map string which is equivalent to the RouteParamsType\n return { name, parent: pagesMap, values };\n }\n }\n return undefined;\n}\n\n/**\n * get the type of the params of a location\n *\n */\ntype RouteParamsType<\n RouteType,\n Key extends keyof RouteType,\n> = RouteType[Key] extends RouteDefinition<infer ParamType> ? ParamType : never;\n\n/**\n * Helps to create a map of a type with the key\n */\ntype MapKeyValue<Type> = {\n [Key in keyof Type]: Key extends string\n ? {\n parent: Type;\n name: Key;\n values: RouteParamsType<Type, Key>;\n }\n : never;\n};\n\n/**\n * create a enumeration of value of a mapped type\n */\ntype EnumerationOf<T> = T[keyof T];\n\nexport type Location<T> = EnumerationOf<MapKeyValue<T>>;\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 { TalerBankIntegrationHttpClient, TalerCoreBankHttpClient, TalerRevenueHttpClient, TalerWireGatewayHttpClient } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { defaultRequestHandler } from \"../utils/request.js\";\n\ninterface Type {\n /**\n * @deprecated this show not be used\n */\n request: typeof defaultRequestHandler;\n bankCore: TalerCoreBankHttpClient,\n bankIntegration: TalerBankIntegrationHttpClient,\n bankWire: TalerWireGatewayHttpClient,\n bankRevenue: TalerRevenueHttpClient,\n}\n\nconst Context = createContext<Type>({ request: defaultRequestHandler } as any);\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\";\nimport { Locale } from \"date-fns\";\nimport {\n es as esLocale,\n enGB as enLocale,\n fr as frLocale,\n de as deLocale\n} from \"date-fns/locale\"\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 dateLocale: Locale,\n completeness: { [id in keyof typeof supportedLang]: number }\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};\n\nconst initial: Type = {\n lang: \"en\",\n supportedLang,\n changeLanguage: () => {\n // do not change anything\n },\n i18n,\n dateLocale: enLocale,\n completeness: {\n de: 0,\n en: 0,\n es: 0,\n fr: 0,\n it: 0,\n sv: 0,\n }\n};\nconst Context = createContext<Type>(initial);\n\ninterface Props {\n initial?: string;\n children: ComponentChildren;\n forceLang?: string;\n source: Record<string, any>;\n completeness?: Record<string, number>;\n}\n\n// Outmost UI wrapper.\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\n source,\n completeness: completenessProp\n}: Props): VNode => {\n const completeness = {\n en: 100,\n de: !completenessProp || !completenessProp[\"de\"] ? 0 : completenessProp[\"de\"],\n es: !completenessProp || !completenessProp[\"es\"] ? 0 : completenessProp[\"es\"],\n fr: !completenessProp || !completenessProp[\"fr\"] ? 0 : completenessProp[\"fr\"],\n it: !completenessProp || !completenessProp[\"it\"] ? 0 : completenessProp[\"it\"],\n sv: !completenessProp || !completenessProp[\"sv\"] ? 0 : completenessProp[\"sv\"],\n }\n const { value: lang, update: changeLanguage } = useLang(initial, completeness);\n\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 const dateLocale = lang === \"es\" ? esLocale :\n lang === \"fr\" ? frLocale :\n lang === \"de\" ? deLocale :\n enLocale;\n\n return h(Context.Provider, {\n value: { lang, changeLanguage, supportedLang, i18n, dateLocale, completeness },\n children,\n });\n};\n\nexport const useTranslationContext = (): Type => useContext(Context);\n", "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}", "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}", "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}", "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}", "import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\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}", "/**\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;", "import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\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 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 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 requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n var _options$step;\n\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start 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 start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\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;", "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;", "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;", "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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\n\nexport default function getMinutes(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var minutes = date.getMinutes();\n return minutes;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\n\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\n\nexport default function getSeconds(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var seconds = date.getSeconds();\n return seconds;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\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\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n function Setter() {\n _classCallCheck(this, Setter);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n _createClass(Setter, [{\n key: \"validate\",\n value: function validate(_utcDate, _options) {\n return true;\n }\n }]);\n\n return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n _inherits(ValueSetter, _Setter);\n\n var _super = _createSuper(ValueSetter);\n\n function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n var _this;\n\n _classCallCheck(this, ValueSetter);\n\n _this = _super.call(this);\n _this.value = value;\n _this.validateValue = validateValue;\n _this.setValue = setValue;\n _this.priority = priority;\n\n if (subPriority) {\n _this.subPriority = subPriority;\n }\n\n return _this;\n }\n\n _createClass(ValueSetter, [{\n key: \"validate\",\n value: function validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n }, {\n key: \"set\",\n value: function set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n }]);\n\n return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n _inherits(DateToSystemTimezoneSetter, _Setter2);\n\n var _super2 = _createSuper(DateToSystemTimezoneSetter);\n\n function DateToSystemTimezoneSetter() {\n var _this2;\n\n _classCallCheck(this, DateToSystemTimezoneSetter);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n\n return _this2;\n }\n\n _createClass(DateToSystemTimezoneSetter, [{\n key: \"set\",\n value: function set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n }]);\n\n return DateToSystemTimezoneSetter;\n}(Setter);", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: \"run\",\n value: function run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n }, {\n key: \"validate\",\n value: function validate(_utcDate, _value, _options) {\n return true;\n }\n }]);\n\n return Parser;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n _inherits(EraParser, _Parser);\n\n var _super = _createSuper(EraParser);\n\n function EraParser() {\n var _this;\n\n _classCallCheck(this, EraParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n\n return _this;\n }\n\n _createClass(EraParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return EraParser;\n}(Parser);", "export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};", "import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\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 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n _inherits(YearParser, _Parser);\n\n var _super = _createSuper(YearParser);\n\n function YearParser() {\n var _this;\n\n _classCallCheck(this, YearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(YearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return YearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekYearParser, _Parser);\n\n var _super = _createSuper(LocalWeekYearParser);\n\n function LocalWeekYearParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n }]);\n\n return LocalWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekYearParser, _Parser);\n\n var _super = _createSuper(ISOWeekYearParser);\n\n function ISOWeekYearParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n }]);\n\n return ISOWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ExtendedYearParser, _Parser);\n\n var _super = _createSuper(ExtendedYearParser);\n\n function ExtendedYearParser() {\n var _this;\n\n _classCallCheck(this, ExtendedYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ExtendedYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ExtendedYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(QuarterParser, _Parser);\n\n var _super = _createSuper(QuarterParser);\n\n function QuarterParser() {\n var _this;\n\n _classCallCheck(this, QuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(QuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return QuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneQuarterParser, _Parser);\n\n var _super = _createSuper(StandAloneQuarterParser);\n\n function StandAloneQuarterParser() {\n var _this;\n\n _classCallCheck(this, StandAloneQuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneQuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneQuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(MonthParser, _Parser);\n\n var _super = _createSuper(MonthParser);\n\n function MonthParser() {\n var _this;\n\n _classCallCheck(this, MonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n return _this;\n }\n\n _createClass(MonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return MonthParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneMonthParser, _Parser);\n\n var _super = _createSuper(StandAloneMonthParser);\n\n function StandAloneMonthParser() {\n var _this;\n\n _classCallCheck(this, StandAloneMonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneMonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneMonthParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekParser, _Parser);\n\n var _super = _createSuper(LocalWeekParser);\n\n function LocalWeekParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n }]);\n\n return LocalWeekParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekParser, _Parser);\n\n var _super = _createSuper(ISOWeekParser);\n\n function ISOWeekParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n }]);\n\n return ISOWeekParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n _inherits(DateParser, _Parser);\n\n var _super = _createSuper(DateParser);\n\n function DateParser() {\n var _this;\n\n _classCallCheck(this, DateParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DateParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DateParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayOfYearParser, _Parser);\n\n var _super = _createSuper(DayOfYearParser);\n\n function DayOfYearParser() {\n var _this;\n\n _classCallCheck(this, DayOfYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayOfYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayOfYearParser;\n}(Parser);", "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 setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, 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 = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayParser, _Parser);\n\n var _super = _createSuper(DayParser);\n\n function DayParser() {\n var _this;\n\n _classCallCheck(this, DayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalDayParser, _Parser);\n\n var _super = _createSuper(LocalDayParser);\n\n function LocalDayParser() {\n var _this;\n\n _classCallCheck(this, LocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return LocalDayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneLocalDayParser, _Parser);\n\n var _super = _createSuper(StandAloneLocalDayParser);\n\n function StandAloneLocalDayParser() {\n var _this;\n\n _classCallCheck(this, StandAloneLocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneLocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneLocalDayParser;\n}(Parser);", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISODayParser, _Parser);\n\n var _super = _createSuper(ISODayParser);\n\n function ISODayParser() {\n var _this;\n\n _classCallCheck(this, ISODayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISODayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ISODayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMParser, _Parser);\n\n var _super = _createSuper(AMPMParser);\n\n function AMPMParser() {\n var _this;\n\n _classCallCheck(this, AMPMParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMMidnightParser, _Parser);\n\n var _super = _createSuper(AMPMMidnightParser);\n\n function AMPMMidnightParser() {\n var _this;\n\n _classCallCheck(this, AMPMMidnightParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMMidnightParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMMidnightParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayPeriodParser, _Parser);\n\n var _super = _createSuper(DayPeriodParser);\n\n function DayPeriodParser() {\n var _this;\n\n _classCallCheck(this, DayPeriodParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayPeriodParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return DayPeriodParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1to12Parser, _Parser);\n\n var _super = _createSuper(Hour1to12Parser);\n\n function Hour1to12Parser() {\n var _this;\n\n _classCallCheck(this, Hour1to12Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1to12Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour1to12Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0to23Parser, _Parser);\n\n var _super = _createSuper(Hour0to23Parser);\n\n function Hour0to23Parser() {\n var _this;\n\n _classCallCheck(this, Hour0to23Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0to23Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour0to23Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0To11Parser, _Parser);\n\n var _super = _createSuper(Hour0To11Parser);\n\n function Hour0To11Parser() {\n var _this;\n\n _classCallCheck(this, Hour0To11Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0To11Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour0To11Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1To24Parser, _Parser);\n\n var _super = _createSuper(Hour1To24Parser);\n\n function Hour1To24Parser() {\n var _this;\n\n _classCallCheck(this, Hour1To24Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1To24Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour1To24Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n _inherits(MinuteParser, _Parser);\n\n var _super = _createSuper(MinuteParser);\n\n function MinuteParser() {\n var _this;\n\n _classCallCheck(this, MinuteParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(MinuteParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n }]);\n\n return MinuteParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(SecondParser, _Parser);\n\n var _super = _createSuper(SecondParser);\n\n function SecondParser() {\n var _this;\n\n _classCallCheck(this, SecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(SecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n }]);\n\n return SecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(FractionOfSecondParser, _Parser);\n\n var _super = _createSuper(FractionOfSecondParser);\n\n function FractionOfSecondParser() {\n var _this;\n\n _classCallCheck(this, FractionOfSecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(FractionOfSecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n }]);\n\n return FractionOfSecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneWithZParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneWithZParser);\n\n function ISOTimezoneWithZParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneWithZParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneWithZParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneWithZParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneParser);\n\n function ISOTimezoneParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampSecondsParser, _Parser);\n\n var _super = _createSuper(TimestampSecondsParser);\n\n function TimestampSecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampSecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampSecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampSecondsParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampMillisecondsParser, _Parser);\n\n var _super = _createSuper(TimestampMillisecondsParser);\n\n function TimestampMillisecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampMillisecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampMillisecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampMillisecondsParser;\n}(Parser);", "import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\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 | | P | |\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 `parse` 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 */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\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\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/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 { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/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 notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\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 in the format string 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 *\n * Format of the format 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 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\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) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\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 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\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) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\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 | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | 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) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\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) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\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 | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | 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] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | 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) | 10 | 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 * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\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 * In `format` function, they will produce different result:\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 * `parse` will try to match both formatting and stand-alone units interchangably.\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:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. 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` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\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 [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. 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 * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `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 * 7. `D` and `DD` tokens represent days of the year but they are ofthen 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 * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\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 {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\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 {Date} the parsed date\n * @throws {TypeError} 3 arguments required\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} `options.locale` must contain `match` property\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 * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, 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(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\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\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\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 (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _iterator = _createForOfIteratorHelper(tokens),\n _step;\n\n try {\n var _loop = function _loop() {\n var token = _step.value;\n\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return {\n v: new Date(NaN)\n };\n }\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ret = _loop();\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var setter = _step2.value;\n\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}", "import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days 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 days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months 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 months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\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 subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from 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 subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(date, 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; // Subtract years and months\n\n var dateWithoutMonths = subMonths(date, months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}", "var formatDistanceLocale = {\n lessThanXSeconds: {\n standalone: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n },\n withPreposition: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n }\n },\n xSeconds: {\n standalone: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n },\n withPreposition: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n }\n },\n halfAMinute: {\n standalone: 'halbe Minute',\n withPreposition: 'halben Minute'\n },\n lessThanXMinutes: {\n standalone: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n },\n withPreposition: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n }\n },\n xMinutes: {\n standalone: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n },\n withPreposition: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n }\n },\n aboutXHours: {\n standalone: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n },\n withPreposition: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n }\n },\n xHours: {\n standalone: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n },\n withPreposition: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n }\n },\n xDays: {\n standalone: {\n one: '1 Tag',\n other: '{{count}} Tage'\n },\n withPreposition: {\n one: '1 Tag',\n other: '{{count}} Tagen'\n }\n },\n aboutXWeeks: {\n standalone: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n },\n withPreposition: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n }\n },\n xWeeks: {\n standalone: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n },\n withPreposition: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n }\n },\n aboutXMonths: {\n standalone: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monate'\n },\n withPreposition: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monaten'\n }\n },\n xMonths: {\n standalone: {\n one: '1 Monat',\n other: '{{count}} Monate'\n },\n withPreposition: {\n one: '1 Monat',\n other: '{{count}} Monaten'\n }\n },\n aboutXYears: {\n standalone: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahre'\n },\n withPreposition: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahren'\n }\n },\n xYears: {\n standalone: {\n one: '1 Jahr',\n other: '{{count}} Jahre'\n },\n withPreposition: {\n one: '1 Jahr',\n other: '{{count}} Jahren'\n }\n },\n overXYears: {\n standalone: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahre'\n },\n withPreposition: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahren'\n }\n },\n almostXYears: {\n standalone: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahre'\n },\n withPreposition: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahren'\n }\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\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}}', String(count));\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 'vor ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\n// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n full: 'EEEE, do MMMM y',\n // Montag, 7. Januar 2018\n long: 'do MMMM y',\n // 7. Januar 2018\n medium: 'do MMM y',\n // 7. Jan. 2018\n short: 'dd.MM.y' // 07.01.2018\n\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'um' {{time}}\",\n long: \"{{date}} 'um' {{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: \"'letzten' eeee 'um' p\",\n yesterday: \"'gestern um' p\",\n today: \"'heute um' p\",\n tomorrow: \"'morgen um' p\",\n nextWeek: \"eeee 'um' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['v.Chr.', 'n.Chr.'],\n abbreviated: ['v.Chr.', 'n.Chr.'],\n wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n}; // Note: in German, 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', 'M\u00E4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n wide: ['Januar', 'Februar', 'M\u00E4rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n}; // https://st.unicode.org/cldr-apps/v#/de/Gregorian/\n\nvar formattingMonthValues = {\n narrow: monthValues.narrow,\n abbreviated: ['Jan.', 'Feb.', 'M\u00E4rz', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n wide: monthValues.wide\n};\nvar dayValues = {\n narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n}; // https://www.unicode.org/cldr/charts/32/summary/de.html#1881\n\nvar dayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachm.',\n evening: 'Abend',\n night: 'Nacht'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachm.',\n evening: 'abends',\n night: 'nachts'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n var number = Number(dirtyNumber);\n return number + '.';\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 formattingValues: formattingMonthValues,\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;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i\n};\nvar parseEraPatterns = {\n any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(j[a\u00E4]n|feb|m\u00E4r[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\\.?/i,\n wide: /^(januar|februar|m\u00E4rz|april|mai|juni|juli|august|september|oktober|november|dezember)/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: [/^j[a\u00E4]/i, /^f/i, /^m\u00E4r/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smdmf]/i,\n short: /^(so|mo|di|mi|do|fr|sa)/i,\n abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\\.?/i,\n wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i\n};\nvar parseDayPatterns = {\n any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(vm\\.?|nm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n abbreviated: /^(vorm\\.?|nachm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^v/i,\n pm: /^n/i,\n midnight: /^Mitte/i,\n noon: /^Mitta/i,\n morning: /morgens/i,\n afternoon: /nachmittags/i,\n // will never be matched. Afternoon is matched by `pm`\n evening: /abends/i,\n night: /nachts/i // will never be matched. Night is matched by `pm`\n\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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: 'wide',\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 German locale.\n * @language German\n * @iso-639-2 deu\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Asia [@asia-t]{@link https://github.com/asia-t}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author RomanErnst [@pex]{@link https://github.com/pex}\n * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}\n */\nvar locale = {\n code: 'de',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, d MMMM yyyy',\n long: 'd MMMM yyyy',\n medium: 'd MMM yyyy',\n short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\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;", "import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\n\nvar locale = {\n code: 'en-GB',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'menos de un segundo',\n other: 'menos de {{count}} segundos'\n },\n xSeconds: {\n one: '1 segundo',\n other: '{{count}} segundos'\n },\n halfAMinute: 'medio minuto',\n lessThanXMinutes: {\n one: 'menos de un minuto',\n other: 'menos de {{count}} minutos'\n },\n xMinutes: {\n one: '1 minuto',\n other: '{{count}} minutos'\n },\n aboutXHours: {\n one: 'alrededor de 1 hora',\n other: 'alrededor de {{count}} horas'\n },\n xHours: {\n one: '1 hora',\n other: '{{count}} horas'\n },\n xDays: {\n one: '1 d\u00EDa',\n other: '{{count}} d\u00EDas'\n },\n aboutXWeeks: {\n one: 'alrededor de 1 semana',\n other: 'alrededor de {{count}} semanas'\n },\n xWeeks: {\n one: '1 semana',\n other: '{{count}} semanas'\n },\n aboutXMonths: {\n one: 'alrededor de 1 mes',\n other: 'alrededor de {{count}} meses'\n },\n xMonths: {\n one: '1 mes',\n other: '{{count}} meses'\n },\n aboutXYears: {\n one: 'alrededor de 1 a\u00F1o',\n other: 'alrededor de {{count}} a\u00F1os'\n },\n xYears: {\n one: '1 a\u00F1o',\n other: '{{count}} a\u00F1os'\n },\n overXYears: {\n one: 'm\u00E1s de 1 a\u00F1o',\n other: 'm\u00E1s de {{count}} a\u00F1os'\n },\n almostXYears: {\n one: 'casi 1 a\u00F1o',\n other: 'casi {{count}} a\u00F1os'\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 'en ' + result;\n } else {\n return 'hace ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'a las' {{time}}\",\n long: \"{{date}} 'a las' {{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: \"'el' eeee 'pasado a la' p\",\n yesterday: \"'ayer a la' p\",\n today: \"'hoy a la' p\",\n tomorrow: \"'ma\u00F1ana a la' p\",\n nextWeek: \"eeee 'a la' p\",\n other: 'P'\n};\nvar formatRelativeLocalePlural = {\n lastWeek: \"'el' eeee 'pasado a las' p\",\n yesterday: \"'ayer a las' p\",\n today: \"'hoy a las' p\",\n tomorrow: \"'ma\u00F1ana a las' p\",\n nextWeek: \"eeee 'a las' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n if (date.getUTCHours() !== 1) {\n return formatRelativeLocalePlural[token];\n } else {\n return formatRelativeLocale[token];\n }\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['AC', 'DC'],\n abbreviated: ['AC', 'DC'],\n wide: ['antes de cristo', 'despu\u00E9s de cristo']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['T1', 'T2', 'T3', 'T4'],\n wide: ['1\u00BA trimestre', '2\u00BA trimestre', '3\u00BA trimestre', '4\u00BA trimestre']\n};\nvar monthValues = {\n narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n abbreviated: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']\n};\nvar dayValues = {\n narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 's\u00E1'],\n abbreviated: ['dom', 'lun', 'mar', 'mi\u00E9', 'jue', 'vie', 's\u00E1b'],\n wide: ['domingo', 'lunes', 'martes', 'mi\u00E9rcoles', 'jueves', 'viernes', 's\u00E1bado']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n return number + '\u00BA';\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 Number(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;", "import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\u00BA)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|antes de la era com[u\u00FA]n|despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i\n};\nvar parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [/^(antes de cristo|antes de la era com[u\u00FA]n)/i, /^(despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](\u00BA)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[efmajsond]/i,\n abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^e/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: [/^en/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]\n};\nvar matchDayPatterns = {\n narrow: /^[dlmjvs]/i,\n short: /^(do|lu|ma|mi|ju|vi|s[\u00E1a])/i,\n abbreviated: /^(dom|lun|mar|mi[\u00E9e]|jue|vie|s[\u00E1a]b)/i,\n wide: /^(domingo|lunes|martes|mi[\u00E9e]rcoles|jueves|viernes|s[\u00E1a]bado)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(de la|a las) (ma\u00F1ana|tarde|noche))/i,\n any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (ma\u00F1ana|tarde|noche))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn/i,\n noon: /^md/i,\n morning: /ma\u00F1ana/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noche/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 Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Fernando Ag\u00FCero [@fjaguero]{@link https://github.com/fjaguero}\n * @author Gast\u00F3n Haro [@harogaston]{@link https://github.com/harogaston}\n * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n code: 'es',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'moins d\u2019une seconde',\n other: 'moins de {{count}} secondes'\n },\n xSeconds: {\n one: '1 seconde',\n other: '{{count}} secondes'\n },\n halfAMinute: '30 secondes',\n lessThanXMinutes: {\n one: 'moins d\u2019une minute',\n other: 'moins de {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'environ 1 heure',\n other: 'environ {{count}} heures'\n },\n xHours: {\n one: '1 heure',\n other: '{{count}} heures'\n },\n xDays: {\n one: '1 jour',\n other: '{{count}} jours'\n },\n aboutXWeeks: {\n one: 'environ 1 semaine',\n other: 'environ {{count}} semaines'\n },\n xWeeks: {\n one: '1 semaine',\n other: '{{count}} semaines'\n },\n aboutXMonths: {\n one: 'environ 1 mois',\n other: 'environ {{count}} mois'\n },\n xMonths: {\n one: '1 mois',\n other: '{{count}} mois'\n },\n aboutXYears: {\n one: 'environ 1 an',\n other: 'environ {{count}} ans'\n },\n xYears: {\n one: '1 an',\n other: '{{count}} ans'\n },\n overXYears: {\n one: 'plus d\u2019un an',\n other: 'plus de {{count}} ans'\n },\n almostXYears: {\n one: 'presqu\u2019un an',\n other: 'presque {{count}} ans'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var form = formatDistanceLocale[token];\n\n if (typeof form === 'string') {\n result = form;\n } else if (count === 1) {\n result = form.one;\n } else {\n result = form.other.replace('{{count}}', String(count));\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'dans ' + result;\n } else {\n return 'il y a ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE d MMMM y',\n long: 'd MMMM y',\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} '\u00E0' {{time}}\",\n long: \"{{date}} '\u00E0' {{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: \"eeee 'dernier \u00E0' p\",\n yesterday: \"'hier \u00E0' p\",\n today: \"'aujourd\u2019hui \u00E0' p\",\n tomorrow: \"'demain \u00E0' p'\",\n nextWeek: \"eeee 'prochain \u00E0' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['av. J.-C', 'ap. J.-C'],\n abbreviated: ['av. J.-C', 'ap. J.-C'],\n wide: ['avant J\u00E9sus-Christ', 'apr\u00E8s J\u00E9sus-Christ']\n};\nvar quarterValues = {\n narrow: ['T1', 'T2', 'T3', 'T4'],\n abbreviated: ['1er trim.', '2\u00E8me trim.', '3\u00E8me trim.', '4\u00E8me trim.'],\n wide: ['1er trimestre', '2\u00E8me trimestre', '3\u00E8me trimestre', '4\u00E8me trimestre']\n};\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['janv.', 'f\u00E9vr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'ao\u00FBt', 'sept.', 'oct.', 'nov.', 'd\u00E9c.'],\n wide: ['janvier', 'f\u00E9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\u00FBt', 'septembre', 'octobre', 'novembre', 'd\u00E9cembre']\n};\nvar dayValues = {\n narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\n short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\n abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n wide: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'mat.',\n afternoon: 'ap.m.',\n evening: 'soir',\n night: 'mat.'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'matin',\n afternoon: 'apr\u00E8s-midi',\n evening: 'soir',\n night: 'matin'\n },\n wide: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'du matin',\n afternoon: 'de l\u2019apr\u00E8s-midi',\n evening: 'du soir',\n night: 'du matin'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n var number = Number(dirtyNumber);\n var unit = options === null || options === void 0 ? void 0 : options.unit;\n if (number === 0) return '0';\n var feminineUnits = ['year', 'week', 'hour', 'minute', 'second'];\n var suffix;\n\n if (number === 1) {\n suffix = unit && feminineUnits.includes(unit) ? '\u00E8re' : 'er';\n } else {\n suffix = '\u00E8me';\n }\n\n return number + suffix;\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 })\n};\nexport default localize;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(i\u00E8me|\u00E8re|\u00E8me|er|e)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(av\\.J\\.C|ap\\.J\\.C|ap\\.J\\.-C)/i,\n abbreviated: /^(av\\.J\\.-C|av\\.J-C|apr\\.J\\.-C|apr\\.J-C|ap\\.J-C)/i,\n wide: /^(avant J\u00E9sus-Christ|apr\u00E8s J\u00E9sus-Christ)/i\n};\nvar parseEraPatterns = {\n any: [/^av/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^T?[1234]/i,\n abbreviated: /^[1234](er|\u00E8me|e)? trim\\.?/i,\n wide: /^[1234](er|\u00E8me|e)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(janv|f\u00E9vr|mars|avr|mai|juin|juill|juil|ao\u00FBt|sept|oct|nov|d\u00E9c)\\.?/i,\n wide: /^(janvier|f\u00E9vrier|mars|avril|mai|juin|juillet|ao\u00FBt|septembre|octobre|novembre|d\u00E9cembre)/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, /^av/i, /^ma/i, /^juin/i, /^juil/i, /^ao/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[lmjvsd]/i,\n short: /^(di|lu|ma|me|je|ve|sa)/i,\n abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\\.?/i,\n wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|minuit|midi|mat\\.?|ap\\.?m\\.?|soir|nuit)/i,\n any: /^([ap]\\.?\\s?m\\.?|du matin|de l'apr\u00E8s[-\\s]midi|du soir|de la nuit)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^min/i,\n noon: /^mid/i,\n morning: /mat/i,\n afternoon: /ap/i,\n evening: /soir/i,\n night: /nuit/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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 * @type {Locale}\n * @category Locales\n * @summary French locale.\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author Fran\u00E7ois B [@fbonzon]{@link https://github.com/fbonzon}\n */\n\nvar locale = {\n code: 'fr',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerBankConversionCacheEviction,\n TalerBankConversionHttpClient,\n TalerCoreBankCacheEviction,\n TalerCoreBankHttpClient,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { APIClient, ActiviyTracker, BankLib, Subscriber } from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type BankContextType = {\n url: URL;\n config: TalerCorebankApi.Config;\n lib: BankLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst BankContext = createContext<BankContextType>(undefined);\n\nexport const useBankCoreApiContext = (): BankContextType =>\n useContext(BankContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n conversion?: CacheEvictor<TalerBankConversionCacheEviction>;\n bank?: CacheEvictor<TalerCoreBankCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const BankApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerCorebankApi.Config>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildBankApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: BankContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildBankApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<BankLib, TalerCorebankApi.Config> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const bank = new TalerCoreBankHttpClient(url.href, httpLib, evictors.bank);\n const conversion = new TalerBankConversionHttpClient(\n bank.getConversionInfoAPI().href,\n httpLib,\n evictors.conversion,\n );\n const auth = (user: string) =>\n new TalerAuthenticationHttpClient(\n bank.getAuthenticationAPI(user).href,\n httpLib,\n );\n\n async function getRemoteConfig(): Promise<TalerCorebankApi.Config> {\n const resp = await bank.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: bank.PROTOCOL_VERSION,\n lib: {\n bank,\n conversion,\n auth,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const BankApiProviderTesting = ({\n children,\n value,\n}: {\n value: BankContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { ObservabilityEvent, TalerAuthenticationHttpClient, TalerBankConversionHttpClient, TalerCoreBankHttpClient, TalerMerchantInstanceHttpClient, TalerMerchantManagementHttpClient } from \"@gnu-taler/taler-util\";\n\ntype Listener<Event> = (e: Event) => void;\ntype Unsuscriber = () => void;\nexport type Subscriber<Event> = (fn: Listener<Event>) => Unsuscriber;\n\nexport class ActiviyTracker<Event> {\n private observers = new Array<Listener<Event>>();\n constructor() {\n this.notify = this.notify.bind(this)\n this.subscribe = this.subscribe.bind(this)\n }\n notify(data: Event) {\n this.observers.forEach((observer) => observer(data))\n }\n subscribe(func: Listener<Event>): Unsuscriber {\n this.observers.push(func);\n return () => {\n this.observers.forEach((observer, index) => {\n if (observer === func) {\n this.observers.splice(index, 1);\n }\n });\n };\n }\n}\n\n/**\n * build http client with cache breaker due to SWR\n * @param url\n * @returns\n */\nexport interface APIClient<T, C> {\n getRemoteConfig(): Promise<C>;\n VERSION: string;\n lib: T,\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest(id: string): void;\n}\n\nexport interface MerchantLib {\n instance: TalerMerchantManagementHttpClient;\n authenticate: TalerAuthenticationHttpClient;\n subInstanceApi: (instanceId: string) => MerchantLib;\n}\n\nexport interface BankLib {\n bank: TalerCoreBankHttpClient;\n conversion: TalerBankConversionHttpClient;\n auth: (user: string) => TalerAuthenticationHttpClient;\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerError,\n TalerMerchantApi,\n TalerMerchantInstanceCacheEviction,\n TalerMerchantManagementCacheEviction,\n TalerMerchantManagementHttpClient,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n MerchantLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type MerchantContextType = {\n url: URL;\n config: TalerMerchantApi.VersionResponse;\n lib: MerchantLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n changeBackend: (url: URL) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst MerchantContext = createContext<MerchantContextType>(undefined);\n\nexport const useMerchantApiContext = (): MerchantContextType =>\n useContext(MerchantContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n management?: CacheEvictor<TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\nexport type ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000\n\nexport const MerchantApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{\n state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;\n }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerMerchantApi.VersionResponse>>();\n\n const [merchantEndpoint, changeMerchantEndpoint] = useState(baseUrl);\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildMerchantApiClient(merchantEndpoint, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig(); \n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig()\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n }\n }, []);\n\n if (!checked || checked.type !== \"ok\") {\n return h(frameOnError, { state: checked }, []);\n }\n\n const value: MerchantContextType = {\n url: merchantEndpoint,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n changeBackend: changeMerchantEndpoint,\n hints: checked.hints,\n };\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildMerchantApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<MerchantLib, TalerMerchantApi.VersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const instance = new TalerMerchantManagementHttpClient(\n url.href,\n httpLib,\n evictors.management,\n );\n const authenticate = new TalerAuthenticationHttpClient(\n instance.getAuthenticationAPI().href,\n httpLib,\n );\n\n // const instance = (instanceId: string): TalerMerchantInstanceHttpClient => {\n // return new TalerMerchantInstanceHttpClient(\n // management.getSubInstanceAPI(instanceId).href,\n // httpLib,\n // evictors.instance ? evictors.instance(instanceId) : undefined,\n // );\n // }\n // const impersonate = (instanceId: string): TalerAuthenticationHttpClient => {\n // return new TalerAuthenticationHttpClient(\n // instance(instanceId).getAuthenticationAPI().href,\n // httpLib,\n // );\n // }\n const rootUrl = url;\n function getSubInstanceAPI(instanceId: string): MerchantLib {\n const newURL = new URL(`instance/${instanceId}/`, rootUrl);\n const api = buildMerchantApiClient(newURL, evictors);\n return api.lib;\n }\n\n async function getRemoteConfig(): Promise<TalerMerchantApi.VersionResponse> {\n const resp = await instance.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail)\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: instance.PROTOCOL_VERSION,\n lib: {\n instance,\n authenticate,\n subInstanceApi: getSubInstanceAPI,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const MerchantApiProviderTesting = ({\n children,\n value,\n}: {\n value: MerchantContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { AppLocation, ObjectOf, Location, findMatch, RouteDefinition } from \"../utils/route.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useCurrentLocation<T extends ObjectOf<RouteDefinition<any>>>(\n pagesMap: T,\n): Location<T> | undefined {\n const pageList = Object.keys(pagesMap as object) as Array<keyof T>;\n const { path, params } = useNavigationContext();\n\n return findMatch(pagesMap, pageList, path, params);\n}\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = {\n path: string;\n params: Record<string, string>;\n navigateTo: (path: AppLocation) => void;\n // addNavigationListener: (listener: (path: string, params: Record<string, string>) => void) => (() => void);\n};\n\n// @ts-expect-error should not be used without provider\nconst Context = createContext<Type>(undefined);\n\nexport const useNavigationContext = (): Type => useContext(Context);\n\nfunction getPathAndParamsFromWindow() {\n const path =\n typeof window !== \"undefined\" ? window.location.hash.substring(1) : \"/\";\n const params: Record<string, string> = {};\n if (typeof window !== \"undefined\") {\n for (const [key, value] of new URLSearchParams(window.location.search)) {\n params[key] = value;\n }\n }\n return { path, params };\n}\n\nconst { path: initialPath, params: initialParams } =\n getPathAndParamsFromWindow();\n\n// there is a possibility that if the browser does a redirection\n// (which doesn't go through navigatTo function) and that executed\n// too early (before addEventListener runs) it won't be taking\n// into account\nconst PopStateEventType = \"popstate\";\n\nexport const BrowserHashNavigationProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const [{ path, params }, setState] = useState({\n path: initialPath,\n params: initialParams,\n });\n if (typeof window === \"undefined\") {\n throw Error(\n \"Can't use BrowserHashNavigationProvider if there is no window object\",\n );\n }\n function navigateTo(path: string) {\n const { params } = getPathAndParamsFromWindow();\n setState({ path, params });\n window.location.href = path;\n }\n\n useEffect(() => {\n function eventListener() {\n setState(getPathAndParamsFromWindow());\n }\n window.addEventListener(PopStateEventType, eventListener);\n return () => {\n window.removeEventListener(PopStateEventType, eventListener);\n };\n }, []);\n return h(Context.Provider, {\n value: { path, params, navigateTo },\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { stringifyTalerUri, TalerUri } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\n/**\n * https://docs.taler.net/design-documents/039-taler-browser-integration.html\n *\n * @param uri\n */\nfunction createHeadMetaTag(uri: TalerUri, onNotFound?: () => void) {\n const meta = document.createElement(\"meta\");\n meta.setAttribute(\"name\", \"taler-uri\");\n meta.setAttribute(\"content\", stringifyTalerUri(uri));\n\n document.head.appendChild(meta);\n\n let walletFound = false;\n window.addEventListener(\"beforeunload\", () => {\n walletFound = true;\n });\n setTimeout(() => {\n if (!walletFound && onNotFound) {\n onNotFound();\n }\n }, 10); //very short timeout\n}\ninterface Type {\n /**\n * Tell the active wallet that an action is found\n *\n * @param uri\n * @returns\n */\n publishTalerAction: (uri: TalerUri, onNotFound?: () => void) => void;\n}\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst Context = createContext<Type>(undefined);\n\nexport const useTalerWalletIntegrationAPI = (): Type => useContext(Context);\n\nexport const TalerWalletIntegrationBrowserProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const value: Type = {\n publishTalerAction: createHeadMetaTag,\n };\n return h(Context.Provider, {\n value,\n children,\n });\n};\n\nexport const TalerWalletIntegrationTestingProvider = ({\n children,\n value,\n}: {\n children: ComponentChildren;\n value: Type;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\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\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\nexport function recursive<PType>(\n hook: (p: PType) => RecursiveState<VNode>,\n): (p: PType) => VNode {\n\n function withHook(stateHook: () => RecursiveState<VNode>): () => 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 return 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/**\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", "import { Duration, TranslatedString, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\n\ninterface Props {\n type?: \"info\" | \"success\" | \"warning\" | \"danger\" | \"low\",\n onClose?: () => void,\n title: TranslatedString,\n children?: ComponentChildren,\n timeout?: Duration,\n}\nexport function Attention({ type = \"info\", title, children, onClose, timeout = Duration.getForever() }: Props): VNode {\n\n return <div class={`group attention-${type} mt-2 shadow-lg`}>\n {timeout.d_ms === \"forever\" ? undefined : <style>{`\n .progress {\n animation: notificationTimeoutBar ${Math.round(timeout.d_ms / 1000)}s ease-in-out;\n animation-fill-mode:both; \n }\n\n @keyframes notificationTimeoutBar {\n 0% { width: 0; }\n 100% { width: 100%; }\n }\n `}</style>\n }\n\n <div data-timed={timeout.d_ms !== \"forever\"} class=\"rounded-md data-[timed=true]:rounded-b-none group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 p-4 shadow\">\n <div class=\"flex\">\n <div >\n {type === \"low\" ? undefined :\n <svg xmlns=\"http://www.w3.org/2000/svg\" stroke=\"none\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-8 h-8 group-[.attention-info]:text-blue-400 group-[.attention-warning]:text-yellow-400 group-[.attention-danger]:text-red-400 group-[.attention-success]:text-green-400\">\n {(() => {\n switch (type) {\n case \"info\":\n return <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\" />\n case \"warning\":\n return <path fill-rule=\"evenodd\" d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"danger\":\n return <path fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"success\":\n return <path fill-rule=\"evenodd\" d=\"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z\" />\n default:\n assertUnreachable(type)\n }\n })()}\n </svg>\n }\n </div>\n <div class=\"ml-3 w-full\">\n <h3 class=\"text-sm font-bold group-[.attention-info]:text-blue-800 group-[.attention-success]:text-green-800 group-[.attention-warning]:text-yellow-800 group-[.attention-danger]:text-red-800\">\n {title}\n </h3>\n <div class=\"mt-2 text-sm group-[.attention-info]:text-blue-700 group-[.attention-warning]:text-yellow-700 group-[.attention-danger]:text-red-700 group-[.attention-success]:text-green-700\">\n {children}\n </div>\n </div>\n {onClose &&\n <div>\n <button type=\"button\" class=\"font-semibold items-center rounded bg-transparent px-2 py-1 text-xs text-gray-900 hover:bg-gray-50\"\n onClick={(e) => {\n e.preventDefault();\n onClose();\n }}\n >\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n }\n </div>\n </div>\n {timeout.d_ms === \"forever\" ? undefined :\n <div class=\"meter group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 h-1 relative overflow-hidden -mt-1\">\n <span class=\"w-full h-full block\"><span class=\"h-full block progress group-[.attention-info]:bg-blue-600 group-[.attention-low]:bg-gray-600 group-[.attention-warning]:bg-yellow-600 group-[.attention-danger]:bg-red-600 group-[.attention-success]:bg-green-600\"></span></span>\n </div>\n }\n\n </div>\n}\n", "import { ComponentChildren, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nexport function CopyIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75\" />\n </svg>\n )\n};\n\nexport function CopiedIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n )\n};\n\nexport function CopyButton({ class: clazz, children, getContent }: { children?: ComponentChildren, class: string, getContent: () => string }): VNode {\n const [copied, setCopied] = useState(false);\n function copyText(): void {\n if (!navigator.clipboard && !window.isSecureContext) {\n alert('clipboard is not available on insecure context (http)')\n }\n if (navigator.clipboard) {\n navigator.clipboard.writeText(getContent() || \"\");\n setCopied(true);\n }\n }\n useEffect(() => {\n if (copied) {\n setTimeout(() => {\n setCopied(false);\n }, 1000);\n }\n }, [copied]);\n\n if (!copied) {\n return (\n <button class={clazz} onClick={e => {\n e.preventDefault()\n copyText()\n }} >\n <CopyIcon />\n {children}\n </button>\n );\n }\n return (\n <button class={clazz} disabled>\n <CopiedIcon />\n {children}\n </button>\n );\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\nimport { TalerError, TalerErrorCode, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function ErrorLoading({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {\n const { i18n } = useTranslationContext()\n switch (error.errorDetail.code) {\n //////////////////\n // Every error that can be produce in a Http Request\n //////////////////\n case TalerErrorCode.GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request was cancelled.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {\n const { requestMethod, requestUrl, throttleStats } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`A lot of request were made to the same server and this action was throttled`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {\n const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The response of the request is malformed.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {\n const { requestMethod, requestUrl } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Could not complete the request due to a network problem.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {\n const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Unexpected request error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n //////////////////\n // Every other error \n //////////////////\n // case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n // return <Attention type=\"danger\" title={i18n.str``}>\n // </Attention>\n // }\n //////////////////\n // Default message for unhandled case\n //////////////////\n default: return <Attention type=\"danger\" title={i18n.str`Unexpected error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify(error.errorDetail, undefined, 2)}\n </pre>\n }\n </Attention>\n }\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 */\n\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n// import { strings as messages } from \"../i18n/strings.js\";\nimport langIcon from \"../assets/lang.svg\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\ntype LangsNames = {\n [P: string]: 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): string {\n if (names[s]) return names[s];\n return String(s);\n}\n\nexport function LangSelector({ }: {}): VNode {\n const [updatingLang, setUpdatingLang] = useState(false);\n const { lang, changeLanguage, completeness, supportedLang } = useTranslationContext();\n const [hidden, setHidden] = useState(true);\n\n useEffect(() => {\n function bodyKeyPress(event: KeyboardEvent) {\n if (event.code === \"Escape\") setHidden(true);\n }\n function bodyOnClick(event: Event) {\n setHidden(true);\n }\n document.body.addEventListener(\"click\", bodyOnClick);\n document.body.addEventListener(\"keydown\", bodyKeyPress as any);\n return () => {\n document.body.removeEventListener(\"keydown\", bodyKeyPress as any);\n document.body.removeEventListener(\"click\", bodyOnClick);\n };\n }, []);\n return (\n <div>\n <div class=\"relative mt-2\">\n <button type=\"button\" class=\"relative w-full cursor-default rounded-md bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600 sm:text-sm sm:leading-6\" aria-haspopup=\"listbox\" aria-expanded=\"true\" aria-labelledby=\"listbox-label\"\n onClick={(e) => {\n setHidden(!hidden);\n e.stopPropagation()\n }}>\n <span class=\"flex items-center\">\n <img alt=\"language\" class=\"h-5 w-5 flex-shrink-0 rounded-full\" src={langIcon} />\n <span class=\"ml-3 block truncate\">{getLangName(lang)}</span>\n </span>\n <span class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <svg class=\"h-5 w-5 text-gray-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </button>\n\n {!hidden &&\n <ul class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\" tabIndex={-1} role=\"listbox\" aria-labelledby=\"listbox-label\" aria-activedescendant=\"listbox-option-3\">\n {Object.keys(supportedLang)\n .filter((l) => l !== lang)\n .map((lang) => (\n <li class=\"text-gray-900 hover:bg-indigo-600 hover:text-white cursor-pointer relative select-none py-2 pl-3 pr-9\" role=\"option\"\n onClick={() => {\n changeLanguage(lang);\n setUpdatingLang(false);\n setHidden(true)\n }}\n >\n <span class=\"font-normal truncate flex justify-between \">\n <span>{getLangName(lang)}</span>\n <span>{(completeness as any)[lang]}%</span>\n </span>\n\n <span class=\"text-indigo-600 absolute inset-y-0 right-0 flex items-center pr-4\">\n {/* <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clip-rule=\"evenodd\" />\n </svg> */}\n </span>\n </li>\n ))}\n\n </ul>\n }\n\n </div>\n </div>\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\nimport { h, VNode } from \"preact\";\n\nexport function Loading(): VNode {\n return (\n <div\n class=\"columns is-centered is-vcentered\"\n style={{\n width: \"100%\",\n height: \"200px\",\n display: \"flex\",\n margin: \"auto\",\n justifyContent: \"center\",\n }}\n >\n <Spinner />\n </div>\n );\n}\n\nfunction Spinner(): VNode {\n return (\n <div class=\"lds-ring\" style={{ margin: \"auto\" }}>\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n}\n", "import { useState } from \"preact/hooks\";\nimport { LangSelector, useNotifications, useTranslationContext } from \"../index.browser.js\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport logo from \"../assets/logo-2021.svg\";\n\ninterface Props {\n title: string;\n iconLinkURL: string;\n profileURL?: string;\n notificationURL?: string;\n children?: ComponentChildren;\n onLogout: (() => void) | undefined;\n sites: Array<Array<string>>;\n supportedLangs: string[]\n}\n\nexport function Header({ title, profileURL, notificationURL, iconLinkURL, sites, onLogout, children }: Props): VNode {\n const { i18n } = useTranslationContext();\n const [open, setOpen] = useState(false)\n const ns = useNotifications();\n\n return <Fragment>\n <header class=\"bg-indigo-600 w-full mx-auto px-2 border-b border-opacity-25 border-indigo-400\">\n <div class=\"flex flex-row h-16 items-center \">\n <div class=\"flex px-2 justify-start\">\n <div class=\"flex-shrink-0 bg-white rounded-lg\">\n <a href={iconLinkURL ?? \"#\"} name=\"logo\">\n <img\n class=\"h-8 w-auto\"\n src={logo}\n alt=\"GNU Taler\"\n style={{ height: \"1.5rem\", margin: \".5rem\" }}\n />\n </a>\n </div>\n <span class=\"flex items-center text-white text-lg font-bold ml-4\">\n {title}\n </span>\n </div>\n <div class=\"flex-1 ml-6 \">\n <div class=\"flex flex-1 space-x-4\">\n {sites.map((site) => {\n if (site.length !== 2) return;\n const [name, url] = site\n return <a href={url} name={`site header ${name}`} class=\"hidden sm:block text-white hover:bg-indigo-500 hover:bg-opacity-75 rounded-md py-2 px-3 text-sm font-medium\">{name}</a>\n })}\n </div>\n </div>\n <div class=\"flex justify-end\">\n {!notificationURL ? undefined :\n <a href={notificationURL} name=\"notifications\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Show notifications</i18n.Translate></span>\n {ns.length > 0 ?\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-10 h-10\">\n <path d=\"M5.85 3.5a.75.75 0 0 0-1.117-1 9.719 9.719 0 0 0-2.348 4.876.75.75 0 0 0 1.479.248A8.219 8.219 0 0 1 5.85 3.5ZM19.267 2.5a.75.75 0 1 0-1.118 1 8.22 8.22 0 0 1 1.987 4.124.75.75 0 0 0 1.48-.248A9.72 9.72 0 0 0 19.266 2.5Z\" />\n <path fill-rule=\"evenodd\" d=\"M12 2.25A6.75 6.75 0 0 0 5.25 9v.75a8.217 8.217 0 0 1-2.119 5.52.75.75 0 0 0 .298 1.206c1.544.57 3.16.99 4.831 1.243a3.75 3.75 0 1 0 7.48 0 24.583 24.583 0 0 0 4.83-1.244.75.75 0 0 0 .298-1.205 8.217 8.217 0 0 1-2.118-5.52V9A6.75 6.75 0 0 0 12 2.25ZM9.75 18c0-.034 0-.067.002-.1a25.05 25.05 0 0 0 4.496 0l.002.1a2.25 2.25 0 1 1-4.5 0Z\" clip-rule=\"evenodd\" />\n </svg>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\" />\n </svg>\n }\n </a>\n }\n {!profileURL ? undefined :\n <a href={profileURL} name=\"profile\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open profile</i18n.Translate></span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </svg>\n </a>\n }\n <button type=\"button\" name=\"toggle sidebar\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\"\n onClick={(e) => {\n setOpen(!open)\n }}>\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open settings</i18n.Translate></span>\n <svg class=\"block h-10 w-10\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n </svg>\n </button>\n </div>\n </div>\n </header>\n\n {\n open &&\n <div class=\"relative z-10\" name=\"sidebar overlay\" aria-labelledby=\"slide-over-title\" role=\"dialog\" aria-modal=\"true\"\n onClick={() => {\n setOpen(false)\n }}>\n <div class=\"fixed inset-0\"></div>\n\n <div class=\"fixed inset-0 overflow-hidden\">\n <div class=\"absolute inset-0 overflow-hidden\">\n <div class=\"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10\">\n <div class=\"pointer-events-auto w-screen max-w-md\" >\n <div class=\"flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl\" onClick={(e) => {\n //do not trigger close if clicking inside the sidebar\n e.stopPropagation();\n }}>\n <div class=\"px-4 sm:px-6\" >\n <div class=\"flex items-start justify-between\" >\n <h2 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"slide-over-title\">\n <i18n.Translate>Menu</i18n.Translate>\n </h2>\n <div class=\"ml-3 flex h-7 items-center\">\n <button type=\"button\" name=\"close sidebar\" class=\"relative rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2\"\n onClick={(e) => {\n setOpen(false)\n }}\n\n >\n <span class=\"absolute -inset-2.5\"></span>\n <span class=\"sr-only\">\n <i18n.Translate>Close panel</i18n.Translate>\n </span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"relative mt-6 flex-1 px-4 sm:px-6\">\n <nav class=\"flex flex-1 flex-col\" aria-label=\"Sidebar\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n {onLogout ?\n <li>\n <a href=\"#\"\n name=\"logout\"\n class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\"\n onClick={() => {\n onLogout();\n setOpen(false)\n }}\n >\n <svg class=\"h-6 w-6 shrink-0 text-indigo-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\" />\n </svg>\n <i18n.Translate>Log out</i18n.Translate>\n </a>\n </li>\n : undefined}\n <li>\n <LangSelector />\n </li>\n {/* CHILDREN */}\n {children}\n {/* /CHILDREN */}\n {sites.length > 0 ?\n <li class=\"block sm:hidden\">\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Sites</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-1\">\n {sites.map(([name, url]) => {\n return <li>\n <a href={url} name={`site ${name}`} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n <span class=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-lg border text-[0.625rem] font-medium bg-white text-gray-400 border-gray-200 group-hover:border-indigo-600 group-hover:text-indigo-600\">&gt;</span>\n <span class=\"truncate\">{name}</span>\n </a>\n </li>\n })}\n </ul>\n </li>\n : undefined\n }\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </Fragment >\n}\n", "import { useTranslationContext } from \"../index.browser.js\";\nimport { h } from \"preact\";\n\nexport function Footer({ testingUrlKey, VERSION, GIT_HASH }: { VERSION?: string, GIT_HASH?: string, testingUrlKey?: string }) {\n const { i18n } = useTranslationContext()\n\n const testingUrl = (testingUrlKey && typeof localStorage !== \"undefined\") && localStorage.getItem(testingUrlKey) ?\n localStorage.getItem(testingUrlKey) ?? undefined :\n undefined\n const versionText = VERSION\n ? GIT_HASH\n ? <a href={`https://git.taler.net/wallet-core.git/tree/?id=${GIT_HASH}`} target=\"_blank\" rel=\"noreferrer noopener\">\n Version {VERSION} ({GIT_HASH.substring(0, 8)})\n </a>\n : VERSION\n : \"\";\n return (\n <footer class=\"bottom-4 my-4 mx-8 bg-slate-200\">\n <div>\n <p class=\"text-xs leading-5 text-gray-400\">\n <i18n.Translate>\n Learn more about <a target=\"_blank\" rel=\"noreferrer noopener\" class=\"font-semibold text-gray-500 hover:text-gray-400\" href=\"https://taler.net\">GNU Taler</a>\n </i18n.Translate>\n </p>\n </div>\n <div style=\"flex-grow:1\" />\n <p class=\"text-xs leading-5 text-gray-400\">\n Copyright &copy; 2014&mdash;2023 Taler Systems SA. {versionText}{\" \"}\n </p>\n {testingUrlKey && testingUrl &&\n\n <p class=\"text-xs leading-5 text-gray-300\">\n Testing with {testingUrl}{\" \"}\n <a\n href=\"\"\n onClick={(e) => {\n e.preventDefault();\n localStorage.removeItem(testingUrlKey);\n window.location.reload();\n }}\n >\n stop testing\n </a>\n </p>\n }\n </footer>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, OperationFail, OperationOk, OperationResult, TalerError, TranslatedString } from \"@gnu-taler/taler-util\";\n// import { NotificationMessage, notifyInfo } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { HTMLAttributes, useEffect, useState, useTransition } from \"preact/compat\";\nimport { NotificationMessage, buildUnifiedRequestErrorMessage, notifyInfo, useTranslationContext } from \"../index.browser.js\";\n// import { useBankCoreApiContext } from \"../context/config.js\";\n\n// function errorMap<T extends OperationFail<unknown>>(resp: T, map: (d: T[\"case\"]) => TranslatedString): void {\n\nexport interface ButtonHandler<T extends OperationResult<A, B>, A, B> {\n onClick: () => Promise<T | undefined>,\n onNotification: (n: NotificationMessage) => void;\n onOperationSuccess: ((result: T extends OperationOk<any> ? T : never) => void) | ((result: T extends OperationOk<any> ? T : never) => TranslatedString | undefined),\n onOperationFail: (d: T extends OperationFail<any> ? T : never) => TranslatedString;\n onOperationComplete?: () => void;\n}\n\ninterface Props<T extends OperationResult<A, B>, A, B> extends HTMLAttributes<HTMLButtonElement> {\n handler: ButtonHandler<T, A, B> | undefined,\n}\n\n/**\n * This button accept an async function and report a notification\n * on error or success.\n * \n * When the async function is running the inner text will change into\n * a \"loading\" animation.\n * \n * @param param0 \n * @returns \n */\nexport function Button<T extends OperationResult<A, B>, A, B>({\n handler,\n children,\n disabled,\n onClick: clickEvent,\n ...rest\n}: Props<T, A, B>): VNode {\n const { i18n } = useTranslationContext();\n const [running, setRunning] = useState(false)\n return <button {...rest} disabled={disabled || running} onClick={(e) => {\n e.preventDefault();\n if (!handler) { return; }\n setRunning(true)\n handler.onClick().then((resp) => {\n if (resp) {\n if (resp.type === \"ok\") {\n const result: OperationOk<any> = resp\n // @ts-expect-error this is an operationOk\n const msg = handler.onOperationSuccess(result)\n if (msg) {\n notifyInfo(msg)\n }\n }\n if (resp.type === \"fail\") {\n // @ts-expect-error this is an operationFail\n const error: OperationFail<any> = resp;\n // @ts-expect-error this is an operationFail\n const title = handler.onOperationFail(error)\n handler.onNotification({\n title,\n type: \"error\",\n description: error.detail.hint as TranslatedString,\n debug: error.detail,\n when: AbsoluteTime.now(),\n })\n }\n }\n if (handler.onOperationComplete) {\n handler.onOperationComplete()\n }\n setRunning(false)\n }).catch(error => {\n console.error(error)\n\n if (error instanceof TalerError) {\n handler.onNotification(buildUnifiedRequestErrorMessage(i18n, error))\n } else {\n const description = (error instanceof Error ?\n error.message : String(error)) as TranslatedString\n\n handler.onNotification({\n title: i18n.str`Operation failed`,\n type: \"error\",\n description,\n when: AbsoluteTime.now(),\n })\n }\n\n if (handler.onOperationComplete) {\n handler.onOperationComplete()\n }\n setRunning(false)\n })\n }} >\n {running ? <Wait /> : children}\n </button>\n}\n\nfunction Wait(): VNode {\n return <Fragment>\n <style>{`\n #l1 { width: 120px;\n height: 20px;\n -webkit-mask: radial-gradient(circle closest-side, currentColor 90%, #0000) left/20% 100%;\n background: linear-gradient(currentColor 0 0) left/0% 100% no-repeat #ddd;\n animation: l17 2s infinite steps(6);\n }\n @keyframes l17 {\n 100% {background-size:120% 100%}\n`}\n </style>\n <div id=\"l1\" />\n </Fragment>\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 { Fragment, h, VNode } from \"preact\";\n\nexport function ShowInputErrorLabel({\n isDirty,\n message,\n}: {\n message: string | undefined;\n isDirty: boolean;\n}): VNode {\n if (message && isDirty)\n return <div class=\"text-base\" style={{ color: \"red\" }}>{message}</div>;\n return <div class=\"text-base\" style={{ }}> </div>;\n}\n", "import { h, Fragment, VNode } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { Notification } from \"../index.browser.js\";\n\nexport function LocalNotificationBanner({ notification, showDebug }: { notification?: Notification, showDebug?: boolean }): VNode {\n if (!notification) return <Fragment />\n switch (notification.message.type) {\n case \"error\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"danger\" title={notification.message.title} onClose={() => {\n notification.acknowledge()\n }}>\n {notification.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {notification.message.description}\n </div>\n }\n {showDebug && <pre class=\"whitespace-break-spaces \">\n {notification.message.debug}\n </pre>}\n </Attention>\n </div>\n </div>\n case \"info\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"success\" title={notification.message.title} onClose={() => {\n notification.acknowledge();\n }} /></div></div>\n }\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Fragment, VNode, h } from \"preact\"\nimport { Attention, GLOBAL_NOTIFICATION_TIMEOUT as GLOBAL_TOAST_TIMEOUT, Notification, useNotifications } from \"../index.browser.js\"\n\n/**\n * Toasts should be considered when displaying these types of information to the user:\n * \n * Low attention messages that do not require user action\n * Singular status updates\n * Confirmations\n * Information that does not need to be followed up\n * \n * Do not use toasts if the information contains the following:\n * \n * High attention and crtitical information\n * Time-sensitive information\n * Requires user action or input\n * Batch updates\n * \n * @returns \n */\nexport function ToastBanner(): VNode {\n const notifs = useNotifications()\n if (notifs.length === 0) return <Fragment />\n const show = notifs.filter(e => !e.message.ack && !e.message.timeout)\n if (show.length === 0) return <Fragment />\n return <AttentionByType msg={show[0]} />\n}\n\nfunction AttentionByType({ msg }: { msg: Notification }) {\n switch (msg.message.type) {\n case \"error\":\n return <Attention type=\"danger\" title={msg.message.title} onClose={() => {\n msg.acknowledge()\n }} timeout={GLOBAL_TOAST_TIMEOUT}>\n {msg.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {msg.message.description}\n </div>\n }\n </Attention>\n case \"info\":\n return <Attention type=\"success\" title={msg.message.title} onClose={() => {\n msg.acknowledge();\n }} timeout={GLOBAL_TOAST_TIMEOUT} />\n }\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { add as dateAdd, sub as dateSub, eachDayOfInterval, endOfMonth, endOfWeek, format, getMonth, getYear, isSameDay, isSameMonth, startOfDay, startOfMonth, startOfWeek } from \"date-fns\"\nimport { VNode, h } from \"preact\"\nimport { useState } from \"preact/hooks\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function Calendar({ value, onChange }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void }): VNode {\n const today = startOfDay(new Date())\n const selected = !value ? today : new Date(AbsoluteTime.toStampMs(value))\n const [showingDate, setShowingDate] = useState(selected)\n const month = getMonth(showingDate)\n const year = getYear(showingDate)\n\n const start = startOfWeek(startOfMonth(showingDate));\n const end = endOfWeek(endOfMonth(showingDate));\n const daysInMonth = eachDayOfInterval({ start, end });\n const { i18n } = useTranslationContext()\n const monthNames = [\n i18n.str`January`,\n i18n.str`February`,\n i18n.str`March`,\n i18n.str`April`,\n i18n.str`May`,\n i18n.str`June`,\n i18n.str`July`,\n i18n.str`August`,\n i18n.str`September`,\n i18n.str`October`,\n i18n.str`November`,\n i18n.str`December`,\n ]\n return <div class=\"text-center p-2\">\n <div class=\"flex items-center text-gray-900\">\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { years: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Previous year`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{year}</div>\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { years: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Next year`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <div class=\"mt-4 flex items-center text-gray-900\">\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { months: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Previous month`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{monthNames[month]}</div>\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 rounded-sm \"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { months: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Next month`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <div class=\"mt-6 grid grid-cols-7 text-xs leading-6 text-gray-500\">\n <div>M</div>\n <div>T</div>\n <div>W</div>\n <div>T</div>\n <div>F</div>\n <div>S</div>\n <div>S</div>\n </div>\n <div class=\"isolate mt-2\">\n <div class=\"grid grid-cols-7 gap-px rounded-lg bg-gray-200 text-sm shadow ring-1 ring-gray-200\">\n {daysInMonth.map(current => (\n <button type=\"button\"\n data-month={isSameMonth(current, showingDate)}\n data-today={isSameDay(current, today)}\n data-selected={isSameDay(current, selected)}\n onClick={() => {\n onChange(AbsoluteTime.fromStampMs(current.getTime()))\n }}\n class=\"text-gray-400 hover:bg-gray-700 focus:z-10 py-1.5 \n data-[month=false]:bg-gray-100 data-[month=true]:bg-white \n data-[today=true]:font-semibold \n data-[month=true]:text-gray-900\n data-[today=true]:bg-red-300 data-[today=true]:hover:bg-red-200\n data-[month=true]:hover:bg-gray-200\n data-[selected=true]:!bg-blue-400 data-[selected=true]:hover:!bg-blue-300 \">\n <time dateTime={format(current, \"yyyy-MM-dd\")}\n class=\"mx-auto flex h-7 w-7 py-4 px-5 sm:px-8 items-center justify-center rounded-full\">\n {format(current, \"dd\")}\n </time>\n </button>\n ))}\n </div>\n {daysInMonth.length < 40 ? <div class=\"w-7 h-7 m-1.5\" /> : undefined}\n </div>\n </div>\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport {\n LabelWithTooltipMaybeRequired\n} from \"./InputLine.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: VNode;\n after?: VNode;\n}\n\nexport function Caption({ before, after, label, tooltip, help }: Props): VNode {\n return (\n <div class=\"sm:col-span-6 flex\">\n {before !== undefined && (\n <span class=\"pointer-events-none flex items-center pr-2\">{before}</span>\n )}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && (\n <span class=\"pointer-events-none flex items-center pl-2\">{after}</span>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { useField } from \"./useField.js\";\n\n//@ts-ignore\nconst TooltipIcon = (\n <svg\n class=\"w-5 h-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n);\n\nexport function LabelWithTooltipMaybeRequired({\n label,\n required,\n tooltip,\n}: {\n label: TranslatedString;\n required?: boolean;\n tooltip?: TranslatedString;\n}): VNode {\n const Label = (\n <Fragment>\n <div class=\"flex justify-between\">\n <label\n htmlFor=\"email\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {label}\n </label>\n </div>\n </Fragment>\n );\n const WithTooltip = tooltip ? (\n <div class=\"relative flex flex-grow items-stretch focus-within:z-10\">\n {Label}\n <span class=\"relative flex items-center group pl-2\">\n {TooltipIcon}\n <div class=\"absolute bottom-0 -ml-10 hidden flex-col items-center mb-6 group-hover:flex w-28\">\n <div class=\"relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-black shadow-lg\">\n {tooltip}\n </div>\n <div class=\"w-3 h-3 -mt-2 rotate-45 bg-black\"></div>\n </div>\n </span>\n </div>\n ) : (\n Label\n );\n if (required) {\n return (\n <div class=\"flex justify-between\">\n {WithTooltip}\n <span class=\"text-sm leading-6 text-red-600\">*</span>\n </div>\n );\n }\n return WithTooltip;\n}\n\nfunction InputWrapper<T extends object, K extends keyof T>({\n children,\n label,\n tooltip,\n before,\n after,\n help,\n error,\n disabled,\n required,\n}: { error?: string; disabled: boolean, children: ComponentChildren } & UIFormProps<T, K>): VNode {\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <div class=\"relative mt-2 flex rounded-md shadow-sm\">\n {before &&\n (before.type === \"text\" ? (\n <span class=\"inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {before.text}\n </span>\n ) : before.type === \"icon\" ? (\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n {before.icon}\n </div>\n ) : before.type === \"button\" ? (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={before.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-l-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {before.children}\n </button>\n ) : undefined)}\n\n {children}\n\n {after &&\n (after.type === \"text\" ? (\n <span class=\"inline-flex items-center rounded-r-md border border-l-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {after.text}\n </span>\n ) : after.type === \"icon\" ? (\n <div class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n {after.icon}\n </div>\n ) : after.type === \"button\" ? (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={after.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-r-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {after.children}\n </button>\n ) : undefined)}\n </div>\n {error && (\n <p class=\"mt-2 text-sm text-red-600\" id=\"email-error\">\n {error}\n </p>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n\nfunction defaultToString(v: unknown) {\n return v === undefined ? \"\" : typeof v !== \"object\" ? String(v) : \"\";\n}\nfunction defaultFromString(v: string) {\n return v;\n}\n\ntype InputType = \"text\" | \"text-area\" | \"password\" | \"email\" | \"number\";\n\nexport function InputLine<T extends object, K extends keyof T>(\n props: { type: InputType } & UIFormProps<T, K>,\n): VNode {\n const { name, placeholder, before, after, converter, type } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n\n const [text, setText] = useState(\"\")\n const fromString: (s: string) => any =\n converter?.fromStringUI ?? defaultFromString;\n const toString: (s: any) => string = converter?.toStringUI ?? defaultToString;\n\n useEffect(() => {\n const newValue = toString(value)\n if (newValue) {\n setText(newValue)\n }\n }, [value])\n\n if (state.hidden) return <div />;\n\n let clazz =\n \"block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200\";\n if (before) {\n switch (before.type) {\n case \"icon\": {\n clazz += \" pl-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-r-md \";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-r-md rounded-none \";\n break;\n }\n }\n }\n if (after) {\n switch (after.type) {\n case \"icon\": {\n clazz += \" pr-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-l-md\";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-l-md rounded-none \";\n break;\n }\n }\n }\n const showError = isDirty && state.error;\n if (showError) {\n clazz +=\n \" text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500\";\n } else {\n clazz +=\n \" text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-indigo-600\";\n }\n\n if (type === \"text-area\") {\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? state.error : undefined}\n >\n <textarea\n rows={4}\n name={String(name)}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n }\n\n return (\n <InputWrapper<T, K> {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false} error={showError ? state.error : undefined}\n >\n <input\n name={String(name)}\n type={type}\n onChange={(e) => {\n setText(e.currentTarget.value)\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={text}\n onBlur={() => {\n onChange(fromString(text));\n }}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n}\n", "import { useContext, useState } from \"preact/compat\";\nimport { FieldUIOptions, FormContext } from \"./FormProvider.js\";\n\nexport interface InputFieldHandler<Type> {\n value: Type;\n onChange: (s: Type) => void;\n state: FieldUIOptions;\n isDirty: boolean;\n}\n\nexport function useField<T extends object, K extends keyof T>(\n name: K,\n): InputFieldHandler<T[K]> {\n const {\n value: formValue,\n computeFormState,\n onUpdate: notifyUpdate,\n readOnly: readOnlyForm,\n } = useContext(FormContext);\n\n type P = typeof name;\n type V = T[P];\n const formState = computeFormState ? computeFormState(formValue.current) : {};\n\n const fieldValue = readField(formValue.current, String(name)) as V;\n // console.log(\"USE FIELD\", String(name), formValue.current, fieldValue);\n const [currentValue, setCurrentValue] = useState<any | undefined>(fieldValue);\n const fieldState =\n readField<Partial<FieldUIOptions>>(formState, String(name)) ?? {};\n\n //compute default state\n const state = {\n disabled: readOnlyForm ? true : (fieldState.disabled ?? false),\n hidden: fieldState.hidden ?? false,\n error: fieldState.error,\n help: fieldState.help,\n elements: \"elements\" in fieldState ? fieldState.elements ?? [] : [],\n };\n\n function onChange(value: V): void {\n setCurrentValue(value);\n formValue.current = setValueDeeper(\n formValue.current,\n String(name).split(\".\"),\n value,\n );\n if (notifyUpdate) {\n notifyUpdate(formValue.current);\n }\n }\n\n return {\n value: fieldValue,\n onChange,\n isDirty: currentValue !== undefined,\n state,\n };\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 */\nfunction readField<T>(\n object: any,\n name: string,\n debug?: boolean,\n): T | undefined {\n return name.split(\".\").reduce((prev, current) => {\n if (debug) {\n console.log(\n \"READ\",\n name,\n prev,\n current,\n prev ? prev[current] : undefined,\n );\n }\n return prev ? prev[current] : undefined;\n }, object);\n}\n\nfunction setValueDeeper(object: any, names: string[], value: any): any {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n if (object === undefined) {\n return { [head]: setValueDeeper({}, rest, value) };\n }\n return { ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) };\n}\n", "import {\n AbsoluteTime,\n AmountJson,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, VNode, createContext, h } from \"preact\";\nimport {\n MutableRef,\n useState\n} from \"preact/hooks\";\n\nexport interface FormType<T extends object> {\n value: MutableRef<Partial<T>>;\n initial?: Partial<T>;\n readOnly?: boolean;\n onUpdate?: (v: Partial<T>) => void;\n computeFormState?: (v: Partial<T>) => FormState<T>;\n}\n\n//@ts-ignore\nexport const FormContext = createContext<FormType<any>>({});\n\n/**\n * Map of {[field]:FieldUIOptions}\n * for every field of type\n * - any native (string, number, etc...)\n * - absoluteTime\n * - amountJson\n * \n * except for: \n * - object => recurse into\n * - array => behavior result and element field\n */\nexport type FormState<T extends object | undefined> = {\n [field in keyof T]?: T[field] extends AbsoluteTime\n ? FieldUIOptions\n : T[field] extends AmountJson\n ? FieldUIOptions\n : T[field] extends Array<infer P extends object>\n ? InputArrayFieldState<P>\n : T[field] extends (object | undefined)\n ? FormState<T[field]>\n : FieldUIOptions;\n};\n\n/**\n * Properties that can be defined by design or by computing state\n */\nexport type FieldUIOptions = {\n /* text to be shown next to the field */\n error?: TranslatedString;\n /* instruction to be shown in the field */\n placeholder?: TranslatedString;\n /* long text help to be shown on demand */\n tooltip?: TranslatedString;\n /* short text to be shown next to the field*/\n\n help?: TranslatedString;\n /* should show as disabled and readonly */\n disabled?: boolean;\n /* should not show */\n hidden?: boolean;\n\n /* show a mark as required*/\n required?: boolean;\n}\n\n/**\n * properties only to be defined on design time\n */\nexport interface UIFormProps<T extends object, K extends keyof T> extends FieldUIOptions {\n\n // property name of the object\n name: K;\n\n // label if the field\n label: TranslatedString;\n before?: Addon;\n after?: Addon;\n\n // converter to string and back\n converter?: StringConverter<T[K]>;\n}\n\nexport interface IconAddon {\n type: \"icon\";\n icon: VNode;\n}\nexport interface ButtonAddon {\n type: \"button\";\n onClick: () => void;\n children: ComponentChildren;\n}\nexport interface TextAddon {\n type: \"text\";\n text: TranslatedString;\n}\nexport type Addon = IconAddon | ButtonAddon | TextAddon;\n\nexport interface StringConverter<T> {\n toStringUI: (v?: T) => string;\n fromStringUI: (v?: string) => T;\n}\n\nexport interface InputArrayFieldState<P extends object> extends FieldUIOptions {\n elements?: FormState<P>[];\n}\n\nexport type FormProviderProps<T extends object> = Omit<FormType<T>, \"value\"> & {\n onSubmit?: (v: Partial<T>, s: FormState<T> | undefined) => void;\n children?: ComponentChildren;\n}\n\nexport function FormProvider<T extends object>({\n children,\n initial,\n onUpdate: notify,\n onSubmit,\n computeFormState,\n readOnly,\n}: FormProviderProps<T>): VNode {\n\n const [state, setState] = useState<Partial<T>>(initial ?? {});\n const value = { current: state };\n const onUpdate = (v: typeof state) => {\n setState(v);\n if (notify) notify(v);\n };\n return (\n <FormContext.Provider\n value={{ initial, value, onUpdate, computeFormState, readOnly }}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n //@ts-ignore\n if (onSubmit)\n onSubmit(\n value.current,\n !computeFormState ? undefined : computeFormState(value.current),\n );\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n", "import { Fragment, h } from \"preact\";\nimport { FormProvider, FormProviderProps, FormState } from \"./FormProvider.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n\n/**\n * Flexible form uses a DoubleColumForm for design\n * and may have a dynamic properties defined by \n * behavior function.\n */\nexport interface FlexibleForm<T extends object> {\n design: DoubleColumnForm;\n behavior?: (form: Partial<T>) => FormState<T>;\n}\n\n/**\n * Double column form\n * \n * Form with sections, every sections have a title and may\n * have a description.\n * Every sections contain a set of fields.\n */\nexport type DoubleColumnForm = Array<DoubleColumnFormSection | undefined>;\n\nexport type DoubleColumnFormSection = {\n title: TranslatedString;\n description?: TranslatedString;\n fields: UIFormField[];\n};\n\n/**\n * Form Provider implementation that use FlexibleForm\n * to defined behavior and fields.\n */\nexport function DefaultForm<T extends object>({\n initial,\n onUpdate,\n form,\n onSubmit,\n children,\n readOnly,\n}: Omit<FormProviderProps<T>, \"computeFormState\"> & { form: FlexibleForm<T> }) {\n return (\n <FormProvider\n initial={initial}\n onUpdate={onUpdate}\n onSubmit={onSubmit}\n readOnly={readOnly}\n computeFormState={form.behavior}\n >\n <div class=\"space-y-10 divide-y -mt-5 divide-gray-900/10\">\n {form.design.map((section, i) => {\n if (!section) return <Fragment />;\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n {section.title}\n </h2>\n {section.description && (\n <p class=\"mt-1 text-sm leading-6 text-gray-600\">\n {section.description}\n </p>\n )}\n </div>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2\">\n <div class=\"p-3\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig\n key={i}\n fields={section.fields}\n />\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {children}\n </FormProvider>\n );\n}\n", "import { h as create, Fragment, VNode } from \"preact\";\nimport { Caption } from \"./Caption.js\";\nimport { FormProvider } from \"./FormProvider.js\";\nimport { Group } from \"./Group.js\";\nimport { InputAbsoluteTime } from \"./InputAbsoluteTime.js\";\nimport { InputAmount } from \"./InputAmount.js\";\nimport { InputArray } from \"./InputArray.js\";\nimport { InputChoiceHorizontal } from \"./InputChoiceHorizontal.js\";\nimport { InputChoiceStacked } from \"./InputChoiceStacked.js\";\nimport { InputFile } from \"./InputFile.js\";\nimport { InputInteger } from \"./InputInteger.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { InputSelectMultiple } from \"./InputSelectMultiple.js\";\nimport { InputSelectOne } from \"./InputSelectOne.js\";\nimport { InputText } from \"./InputText.js\";\nimport { InputTextArea } from \"./InputTextArea.js\";\nimport { InputToggle } from \"./InputToggle.js\";\n\n/**\n * Constrain the type with the ui props\n */\ntype FieldType<T extends object = any, K extends keyof T = any> = {\n group: Parameters<typeof Group>[0];\n caption: Parameters<typeof Caption>[0];\n array: Parameters<typeof InputArray<T, K>>[0];\n file: Parameters<typeof InputFile<T, K>>[0];\n selectOne: Parameters<typeof InputSelectOne<T, K>>[0];\n selectMultiple: Parameters<typeof InputSelectMultiple<T, K>>[0];\n text: Parameters<typeof InputText<T, K>>[0];\n textArea: Parameters<typeof InputTextArea<T, K>>[0];\n choiceStacked: Parameters<typeof InputChoiceStacked<T, K>>[0];\n choiceHorizontal: Parameters<typeof InputChoiceHorizontal<T, K>>[0];\n absoluteTime: Parameters<typeof InputAbsoluteTime<T, K>>[0];\n integer: Parameters<typeof InputInteger<T, K>>[0];\n toggle: Parameters<typeof InputToggle<T, K>>[0];\n amount: Parameters<typeof InputAmount<T, K>>[0];\n};\n\n/**\n * List all the form fields so typescript can type-check the form instance\n */\nexport type UIFormField =\n | { type: \"group\"; props: FieldType[\"group\"] }\n | { type: \"caption\"; props: FieldType[\"caption\"] }\n | { type: \"array\"; props: FieldType[\"array\"] }\n | { type: \"file\"; props: FieldType[\"file\"] }\n | { type: \"amount\"; props: FieldType[\"amount\"] }\n | { type: \"selectOne\"; props: FieldType[\"selectOne\"] }\n | { type: \"selectMultiple\"; props: FieldType[\"selectMultiple\"] }\n | { type: \"text\"; props: FieldType[\"text\"] }\n | { type: \"textArea\"; props: FieldType[\"textArea\"] }\n | { type: \"choiceStacked\"; props: FieldType[\"choiceStacked\"] }\n | { type: \"choiceHorizontal\"; props: FieldType[\"choiceHorizontal\"] }\n | { type: \"integer\"; props: FieldType[\"integer\"] }\n | { type: \"toggle\"; props: FieldType[\"toggle\"] }\n | { type: \"absoluteTime\"; props: FieldType[\"absoluteTime\"] };\n\ntype FieldComponentFunction<key extends keyof FieldType> = (\n props: FieldType[key],\n) => VNode;\n\ntype UIFormFieldMap = {\n [key in keyof FieldType]: FieldComponentFunction<key>;\n};\n\n/**\n * Maps input type with component implementation\n */\nconst UIFormConfiguration: UIFormFieldMap = {\n group: Group,\n caption: Caption,\n //@ts-ignore\n array: InputArray,\n text: InputText,\n //@ts-ignore\n file: InputFile,\n textArea: InputTextArea,\n //@ts-ignore\n absoluteTime: InputAbsoluteTime,\n //@ts-ignore\n choiceStacked: InputChoiceStacked,\n //@ts-ignore\n choiceHorizontal: InputChoiceHorizontal,\n integer: InputInteger,\n //@ts-ignore\n selectOne: InputSelectOne,\n //@ts-ignore\n selectMultiple: InputSelectMultiple,\n //@ts-ignore\n toggle: InputToggle,\n //@ts-ignore\n amount: InputAmount,\n};\n\nexport function RenderAllFieldsByUiConfig({\n fields,\n}: {\n fields: UIFormField[];\n}): VNode {\n return create(\n Fragment,\n {},\n fields.map((field, i) => {\n const Component = UIFormConfiguration[\n field.type\n ] as FieldComponentFunction<any>;\n return Component(field.props);\n }),\n );\n}\n\ntype FormSet<T extends object> = {\n Provider: typeof FormProvider<T>;\n InputLine: <K extends keyof T>() => typeof InputLine<T, K>;\n InputChoiceHorizontal: <K extends keyof T>() => typeof InputChoiceHorizontal<T, K>;\n};\n\n/**\n * Helper function that created a typed object.\n * \n * @returns \n */\nexport function createNewForm<T extends object>() {\n const res: FormSet<T> = {\n Provider: FormProvider,\n InputLine: () => InputLine,\n InputChoiceHorizontal: () => InputChoiceHorizontal,\n };\n return {\n Provider: res.Provider,\n InputLine: res.InputLine(),\n InputChoiceHorizontal: res.InputChoiceHorizontal(),\n };\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\n\ninterface Props {\n before?: TranslatedString;\n after?: TranslatedString;\n tooltipBefore?: TranslatedString;\n tooltipAfter?: TranslatedString;\n fields: UIFormField[];\n}\n\nexport function Group({\n before,\n after,\n tooltipAfter,\n tooltipBefore,\n fields,\n}: Props): VNode {\n return (\n <div class=\"sm:col-span-6 p-4 rounded-lg border-r-2 border-2 bg-gray-50\">\n <div class=\"pb-4\">\n {before && (\n <LabelWithTooltipMaybeRequired\n label={before}\n tooltip={tooltipBefore}\n />\n )}\n </div>\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-2 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n <div class=\"pt-4\">\n {after && (\n <LabelWithTooltipMaybeRequired label={after} tooltip={tooltipAfter} />\n )}\n </div>\n </div>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport { InputLine } from \"./InputLine.js\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { format, parse } from \"date-fns\";\nimport { Dialog } from \"./Dialog.js\";\nimport { Calendar } from \"./Calendar.js\";\nimport { useState } from \"preact/hooks\";\nimport { useField } from \"./useField.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { TimePicker } from \"./TimePicker.js\";\n\nexport function InputAbsoluteTime<T extends object, K extends keyof T>(\n props: { pattern?: string } & UIFormProps<T, K>,\n): VNode {\n const pattern = props.pattern ?? \"dd/MM/yyyy\";\n const [open, setOpen] = useState(false)\n const { value, onChange } = useField<T, K>(props.name);\n return (\n <Fragment>\n\n <InputLine<T, K>\n type=\"text\"\n after={{\n type: \"button\",\n onClick: () => {\n setOpen(true)\n },\n // icon: <CalendarIcon class=\"h-6 w-6\" />,\n children: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\" />\n </svg>)\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AbsoluteTime | undefined => {\n if (!v) return undefined;\n try {\n const t_ms = parse(v, pattern, Date.now()).getTime();\n return AbsoluteTime.fromMilliseconds(t_ms);\n } catch (e) {\n return undefined;\n }\n },\n //@ts-ignore\n toStringUI: (v: AbsoluteTime | undefined) => {\n return !v || !v.t_ms\n ? undefined\n : v.t_ms === \"never\"\n ? \"never\"\n : format(v.t_ms, pattern);\n },\n }}\n {...props}\n />\n {open &&\n <Dialog onClose={() => setOpen(false)}>\n <Calendar value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n setOpen(false)\n }} />\n </Dialog>\n }\n {/* {open &&\n <Dialog onClose={() => setOpen(false)} >\n <TimePicker value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n }}\n onConfirm={() => {\n setOpen(false)\n }} />\n </Dialog>} */}\n </Fragment>\n );\n}\n", "import { ComponentChildren, VNode, h } from \"preact\";\n\nexport function Dialog({ children, onClose }: { onClose?: () => void; children: ComponentChildren }): VNode {\n return <div class=\"relative z-10\" aria-labelledby=\"modal-title\" role=\"dialog\" aria-modal=\"true\" onClick={onClose}>\n <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n <div class=\"flex min-h-full items-center justify-center p-4 text-center \">\n <div class=\"relative transform overflow-hidden rounded-lg bg-white p-1 text-left shadow-xl transition-all\" onClick={(e) => e.stopPropagation()}>\n {children}\n </div>\n </div>\n </div>\n </div>\n}\n", "import { AmountJson, Amounts, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputAmount<T extends object, K extends keyof T>(\n props: { currency?: string } & UIFormProps<T, K>,\n): VNode {\n const { value } = useField<T, K>(props.name);\n const currency =\n !value || !(value as any).currency\n ? props.currency\n : (value as any).currency;\n return (\n <InputLine<T, K>\n type=\"text\"\n before={{\n type: \"text\",\n text: currency as TranslatedString,\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AmountJson => {\n\n return Amounts.parse(`${currency}:${v}`) ?? Amounts.zeroOfCurrency(currency);\n },\n //@ts-ignore\n toStringUI: (v: AmountJson) => {\n return v === undefined ? \"\" : Amounts.stringifyValue(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormProvider, UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { useField } from \"./useField.js\";\n\nfunction Option({\n label,\n disabled,\n isFirst,\n isLast,\n isSelected,\n onClick,\n}: {\n label: TranslatedString;\n isFirst?: boolean;\n isLast?: boolean;\n isSelected?: boolean;\n disabled?: boolean;\n onClick: () => void;\n}): VNode {\n let clazz = \"relative flex border p-4 focus:outline-none disabled:text-grey\";\n if (isFirst) {\n clazz += \" rounded-tl-md rounded-tr-md \";\n }\n if (isLast) {\n clazz += \" rounded-bl-md rounded-br-md \";\n }\n if (isSelected) {\n clazz += \" z-10 border-indigo-200 bg-indigo-50 \";\n } else {\n clazz += \" border-gray-200\";\n }\n if (disabled) {\n clazz +=\n \" cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray\";\n } else {\n clazz += \" cursor-pointer\";\n }\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"privacy-setting\"\n checked={isSelected}\n disabled={disabled}\n onClick={onClick}\n class=\"mt-0.5 h-4 w-4 shrink-0 text-indigo-600 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200 focus:ring-indigo-600\"\n aria-labelledby=\"privacy-setting-0-label\"\n aria-describedby=\"privacy-setting-0-description\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n id=\"privacy-setting-0-label\"\n disabled\n class=\"block text-sm font-medium\"\n >\n {label}\n </span>\n {/* <!-- Checked: \"text-indigo-700\", Not Checked: \"text-gray-500\" --> */}\n {/* <span\n id=\"privacy-setting-0-description\"\n class=\"block text-sm\"\n >\n This project would be available to anyone who has the link\n </span> */}\n </span>\n </label>\n );\n}\n\nexport function InputArray<T extends object, K extends keyof T>(\n props: {\n fields: UIFormField[];\n labelField: string;\n } & UIFormProps<T, K>,\n): VNode {\n const { fields, labelField, name, label, required, tooltip } = props;\n const { value, onChange, state } = useField<T, K>(name);\n const list = (value ?? []) as Array<Record<string, string | undefined>>;\n const [selectedIndex, setSelected] = useState<number | undefined>(undefined);\n const selected =\n selectedIndex === undefined ? undefined : list[selectedIndex];\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n\n <div class=\"-space-y-px rounded-md bg-white \">\n {list.map((v, idx) => {\n return (\n <Option\n label={v[labelField] as TranslatedString}\n isSelected={selectedIndex === idx}\n isLast={idx === list.length - 1}\n disabled={selectedIndex !== undefined && selectedIndex !== idx}\n isFirst={idx === 0}\n onClick={() => {\n setSelected(selectedIndex === idx ? undefined : idx);\n }}\n />\n );\n })}\n {!state.disabled &&\n <div class=\"pt-2\">\n <Option\n label={\"Add...\" as TranslatedString}\n isSelected={selectedIndex === list.length}\n isLast\n isFirst\n disabled={\n selectedIndex !== undefined && selectedIndex !== list.length\n }\n onClick={() => {\n setSelected(\n selectedIndex === list.length ? undefined : list.length,\n );\n }}\n />\n </div>\n }\n </div>\n {selectedIndex !== undefined && (\n /**\n * This form provider act as a substate of the parent form\n * Consider creating an InnerFormProvider since not every feature is expected\n */\n <FormProvider\n initial={selected}\n readOnly={state.disabled}\n computeFormState={(v) => {\n // current state is ignored\n // the state is defined by the parent form\n\n // elements should be present in the state object since this is expected to be an array\n //@ts-ignore\n return state.elements[selectedIndex];\n }}\n onSubmit={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as T[K]);\n setSelected(undefined);\n }}\n onUpdate={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as T[K]);\n }}\n >\n <div class=\"px-4 py-6\">\n <div class=\"grid grid-cols-1 gap-y-8 \">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n </div>\n </FormProvider>\n )}\n {selectedIndex !== undefined && (\n <div class=\"flex items-center pt-3\">\n <div class=\"flex-auto\">\n {selected !== undefined && (\n <button\n type=\"button\"\n onClick={() => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1);\n onChange(newValue as T[K]);\n setSelected(undefined);\n }}\n class=\"block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n Remove\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport interface ChoiceH<V> {\n label: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceHorizontal<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceH<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"isolate inline-flex rounded-md shadow-sm\">\n {choices.map((choice, idx) => {\n const isFirst = idx === 0;\n const isLast = idx === choices.length - 1;\n let clazz =\n \"relative inline-flex items-center px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 focus:z-10\";\n if (choice.value === value) {\n clazz +=\n \" text-white bg-indigo-600 hover:bg-indigo-500 ring-2 ring-indigo-600 hover:ring-indigo-500\";\n } else {\n clazz += \" hover:bg-gray-100 border-gray-300\";\n }\n if (isFirst) {\n clazz += \" rounded-l-md\";\n } else {\n clazz += \" -ml-px\";\n }\n if (isLast) {\n clazz += \" rounded-r-md\";\n }\n return (\n <button\n type=\"button\"\n disabled={state.disabled}\n label={choice.label}\n class={clazz}\n onClick={(e) => {\n onChange(\n (value === choice.value ? undefined : choice.value) as T[K],\n );\n }}\n >\n {choice.label}\n </button>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport interface ChoiceS<V> {\n label: TranslatedString;\n description?: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceStacked<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"space-y-4\">\n {choices.map((choice) => {\n // const currentValue = !converter\n // ? choice.value\n // : converter.fromStringUI(choice.value) ?? \"\";\n\n let clazz =\n \"border relative block cursor-pointer rounded-lg bg-white px-6 py-4 shadow-sm focus:outline-none sm:flex sm:justify-between\";\n if (choice.value === value) {\n clazz +=\n \" border-transparent border-indigo-600 ring-2 ring-indigo-600\";\n } else {\n clazz += \" border-gray-300\";\n }\n\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"server-size\"\n // defaultValue={choice.value}\n disabled={state.disabled}\n value={\n (!converter\n ? (choice.value as string)\n : converter?.toStringUI(choice.value)) ?? \"\"\n }\n onClick={(e) => {\n onChange(\n (value === choice.value\n ? undefined\n : choice.value) as T[K],\n );\n }}\n class=\"sr-only\"\n aria-labelledby=\"server-size-0-label\"\n aria-describedby=\"server-size-0-description-0 server-size-0-description-1\"\n />\n <span class=\"flex items-center\">\n <span class=\"flex flex-col text-sm\">\n <span\n id=\"server-size-0-label\"\n class=\"font-medium text-gray-900\"\n >\n {choice.label}\n </span>\n {choice.description !== undefined && (\n <span\n id=\"server-size-0-description-0\"\n class=\"text-gray-500\"\n >\n <span class=\"block sm:inline\">\n {choice.description}\n </span>\n </span>\n )}\n </span>\n </span>\n </label>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputFile<T extends object, K extends keyof T>(\n props: { maxBites: number; accept?: string } & UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n placeholder,\n tooltip,\n required,\n help: propsHelp,\n maxBites,\n accept,\n } = props;\n const { value, onChange, state } = useField<T, K>(name);\n const help = propsHelp ?? state.help\n if (state.hidden) {\n return <div />;\n }\n return (\n <div class=\"col-span-full\">\n <LabelWithTooltipMaybeRequired\n label={label}\n tooltip={tooltip}\n required={required}\n />\n {!value || !(value as string).startsWith(\"data:image/\") ? (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 py-1\">\n <div class=\"text-center\">\n <svg\n class=\"mx-auto h-12 w-12 text-gray-300\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.5 6a2.25 2.25 0 012.25-2.25h16.5A2.25 2.25 0 0122.5 6v12a2.25 2.25 0 01-2.25 2.25H3.75A2.25 2.25 0 011.5 18V6zM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0021 18v-1.94l-2.69-2.689a1.5 1.5 0 00-2.12 0l-.88.879.97.97a.75.75 0 11-1.06 1.06l-5.16-5.159a1.5 1.5 0 00-2.12 0L3 16.061zm10.125-7.81a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n {!state.disabled &&\n <div class=\"my-2 flex text-sm leading-6 text-gray-600\">\n <label\n for=\"file-upload\"\n class=\"relative cursor-pointer rounded-md bg-white font-semibold text-indigo-600 focus-within:outline-none focus-within:ring-2 focus-within:ring-indigo-600 focus-within:ring-offset-2 hover:text-indigo-500\"\n >\n <span>Upload a file</span>\n <input\n id=\"file-upload\"\n name=\"file-upload\"\n type=\"file\"\n class=\"sr-only\"\n accept={accept}\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 > maxBites) {\n return onChange(undefined!);\n }\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 </label>\n {/* <p class=\"pl-1\">or drag and drop</p> */}\n </div>\n }\n </div>\n </div>\n ) : (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 relative\">\n <img\n src={value as string}\n class=\" h-24 w-full object-cover relative\"\n />\n\n {!state.disabled &&\n <div\n class=\"opacity-0 hover:opacity-70 duration-300 absolute rounded-lg border inset-0 z-10 flex justify-center text-xl items-center bg-black text-white cursor-pointer \"\n onClick={() => {\n onChange(undefined!);\n }}\n >\n Clear\n </div>\n }\n </div>\n )}\n {help && <p class=\"text-xs leading-5 text-gray-600 mt-2\">{help}</p>}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputInteger<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return (\n <InputLine\n type=\"number\"\n converter={{\n //@ts-ignore\n fromStringUI: (v): number => {\n return !v ? 0 : Number.parseInt(v, 10);\n },\n //@ts-ignore\n toStringUI: (v?: number): string => {\n return v === undefined ? \"\" : String(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectMultiple<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n unique?: boolean;\n max?: number;\n } & UIFormProps<T, K>,\n): VNode {\n const { name, label, choices, placeholder, tooltip, required, unique, max } =\n props;\n const { value, onChange, state } = useField<T, K>(name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce((prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n }, {} as Record<string, string>);\n\n const list = (value ?? []) as string[];\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {list.map((v, idx) => {\n return (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 text-xs font-medium text-gray-600\">\n {choiceMap[v]}\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n const newValue = [...list];\n newValue.splice(idx, 1);\n onChange(newValue as T[K]);\n setFilter(undefined);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n );\n })}\n\n {!state.disabled && <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n if (unique && list.indexOf(v.value as string) !== -1) {\n return;\n }\n if (max !== undefined && list.length >= max) {\n return;\n }\n const newValue = [...list];\n newValue.splice(0, 0, v.value as string);\n onChange(newValue as T[K]);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectOne<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { name, label, choices, placeholder, tooltip, required } = props;\n const { value, onChange } = useField<T, K>(name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce((prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n }, {} as Record<string, string>);\n\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {value ? (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 font-medium text-gray-600\">\n {choiceMap[value as string]}\n <button\n type=\"button\"\n onClick={() => {\n onChange(undefined!);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n ) : (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n onChange(v.value as T[K]);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\n\nexport function InputText<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputTextArea<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text-area\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputToggle<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n\n const isOn = !!value\n return <div class=\"sm:col-span-6\">\n <div class=\"flex items-center justify-between\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <button type=\"button\" data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\" aria-checked=\"false\" aria-labelledby=\"availability-label\" aria-describedby=\"availability-description\"\n onClick={() => { onChange(!isOn as any); }}>\n <span aria-hidden=\"true\" data-enabled={isOn} class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"></span>\n </button>\n </div>\n </div>\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { getHours, getMinutes, getSeconds, setHours } from \"date-fns\"\nimport { Fragment, VNode, h } from \"preact\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function TimePicker({ value, onChange, onConfirm }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void, onConfirm: () => void }): VNode {\n const date = !value ? new Date() : new Date(AbsoluteTime.toStampMs(value))\n const hours = getHours(date) % 12\n const minutes = getMinutes(date)\n const seconds = getSeconds(date)\n\n const { i18n } = useTranslationContext()\n\n return <Fragment>\n <div class=\"flex flex-col bg-white rounded-t-sm justify-around\" >\n {/* time selection */}\n <div id=\"\" class=\"bg-[#3b71ca] dark:bg-zinc-700 h-24 rounded-t-lg p-12 flex flex-row items-center justify-center\">\n <div class=\"flex w-full justify-evenly\">\n <div class=\"\">\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \"\n style=\"pointer-events: none;\">\n {new String(hours).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(minutes).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(seconds).padStart(2, \"0\")}\n </button>\n </span>\n </div>\n <div class=\"flex flex-col justify-center text-[18px] text-[#ffffff8a] \">\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n AM\n </button>\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n PM\n </button>\n </div>\n </div>\n </div>\n {/* clock */}\n <div id=\"\" class=\"mt-2 min-w-[310px] max-w-[325px] min-h-[305px] overflow-x-hidden h-full flex justify-center mx-auto flex-col items-center dark:bg-zinc-500\" >\n <div class=\"relative rounded-[100%] w-[260px] h-[260px] cursor-default my-0 mx-auto bg-[#00000012] dark:bg-zinc-600/50 animate-[show-up-clock_350ms_linear]\" >\n\n <span class=\"top-1/2 left-1/2 w-[6px] h-[6px] -translate-y-1/2 -translate-x-1/2 rounded-[50%] bg-[#3b71ca] absolute\" ></span>\n <div class=\"bg-[#3b71ca] bottom-1/2 h-2/5 left-[calc(50%-1px)] rtl:!left-auto origin-[center_bottom_0] rtl:!origin-[50%_50%_0] w-[2px] absolute\" style={{ transform: \"rotateZ(60deg)\", height: \"calc(35% + 1px)\" }}>\n {/* <div class=\"-top-[21px] -left-[15px] w-[4px] border-[14px] border-solid border-[#3b71ca] h-[4px] box-content rounded-[100%] absolute\" style=\"background-color: rgb(25, 118, 210);\"></div> */}\n </div>\n\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 12).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 224px;\">\n <span>0</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 1).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 209.263px;\">\n <span >1</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 2).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" data-selected={true} style=\"left: 209.263px; bottom: 169px;\" >\n <span >2</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 3).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 224px; bottom: 114px;\">\n <span >3</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 4).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 209.263px; bottom: 59px;\">\n <span >4</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 5).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 18.7372px;\">\n <span >5</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 6).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 4px;\">\n <span >6</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 7).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 18.7372px;\">\n <span >7</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 8).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 59px;\">\n <span >8</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 9).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 4px; bottom: 114px;\">\n <span >9</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 10).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 169px;\">\n <span >10</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 11).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 209.263px;\">\n <span >11</span>\n </span>\n </div>\n </div>\n </div>\n <div id=\"\" class=\"rounded-b-lg flex justify-between items-center w-full h-[56px] px-[12px] bg-white dark:bg-zinc-500\">\n <div class=\"w-full flex justify-end\">\n <button\n type=\"submit\"\n onClick={onConfirm}\n class=\"rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </div>\n </Fragment>\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 {\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\";\nimport { ExampleItemSetup } from \"./tests/hook.js\";\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 contextProps: {},\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<Props extends object = {}> {\n name: string;\n examples: ExampleItem<Props>[];\n}\n\nexport interface ExampleItem<Props extends object = {}> {\n group: string;\n component: string;\n name: string;\n render: ExampleItemSetup<Props>;\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 url = new URL(window.location.href);\n const initialSelection = getSelectionFromLocationHash(\n url.hash,\n examplesInGroups,\n );\n\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 (url.hash) {\n const hash = url.hash.substring(1);\n const found = document.getElementById(hash);\n if (found) {\n setTimeout(() => {\n found.scrollIntoView({\n block: \"center\",\n });\n }, 50);\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", "import { TranslationProvider } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { ExchangeAmlFrame } from \"./Dashboard.js\";\nimport \"./scss/main.css\";\nimport { ExchangeApiProvider } from \"./context/config.js\";\nimport { getInitialBackendBaseURL } from \"./hooks/useBackend.js\";\nimport { HashPathProvider, Router } from \"./route.js\";\nimport { Pages } from \"./pages.js\";\n\nconst pageList = Object.values(Pages);\n\n\nexport function App(): VNode {\n const baseUrl = getInitialBackendBaseURL();\n return (\n <TranslationProvider source={{}}>\n <ExchangeApiProvider baseUrl={baseUrl} frameOnError={ExchangeAmlFrame}>\n <HashPathProvider>\n <ExchangeAmlFrame>\n <Router\n pageList={pageList}\n onNotFound={() => {\n window.location.href = Pages.cases.url\n return <div>not found</div>;\n }}\n />\n </ExchangeAmlFrame>\n </HashPathProvider>\n </ExchangeApiProvider>\n </TranslationProvider>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Footer, ToastBanner, Header, notifyError, notifyException, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { useEffect, useErrorBoundary } from \"preact/hooks\";\nimport { useOfficer } from \"./hooks/useOfficer.js\";\nimport { getAllBooleanSettings, getLabelForSetting, useSettings } from \"./hooks/useSettings.js\";\nimport { Pages } from \"./pages.js\";\nimport { PageEntry, useChangeLocation } from \"./route.js\";\nimport { uiSettings } from \"./settings.js\";\n\nfunction classNames(...classes: string[]) {\n return classes.filter(Boolean).join(\" \");\n}\n\n/**\n * mapping route to view\n * not found (error page)\n * nested, index element, relative routes\n * link interception\n * form POST interception, call action\n * fromData => Object.fromEntries\n * segments in the URL\n * navigationState: idle, submitting, loading\n * form GET interception: does a navigateTo\n * form GET Sync:\n * 1.- back after submit: useEffect to sync URL to form\n * 2.- refresh after submit: input default value\n * useSubmit for form submission onChange, history replace\n *\n * post form without redirect\n *\n *\n * @param param0\n * @returns\n */\n\nconst GIT_HASH = typeof __GIT_HASH__ !== \"undefined\" ? __GIT_HASH__ : undefined;\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : undefined;\n\nconst versionText = VERSION\n ? GIT_HASH\n ? `v${VERSION} (${GIT_HASH.substring(0, 8)})`\n : VERSION\n : \"\";\n\n/**\n * TO BE FIXED:\n *\n * 1.- when the form change to other form and both form share the same structure\n * the same input component may be rendered in the same place,\n * since input are uncontrolled the are not re-rendered and since they are\n * uncontrolled it will keep the value of the previous form.\n * One solutions could be to remove the form when unloading and when the new\n * form load it will start without previous vdom, preventing the cache\n * to create this behavior.\n * Other solutions could be using IDs in the fields that are constructed\n * with the ID of the form, so two fields of different form will need to re-render\n * cleaning up the state of the previous form.\n *\n * 2.- currently the design prop and the behavior prop of the flexible form\n * are two side of the same coin. From the design point of view, it is important\n * to design the form in a list-of-field manner and there may be additional\n * content that is not directly mapped to the form structure (object)\n * So maybe we want to change the current shape so the computation of the state\n * of the form is in a field level, but this computation required the field value and\n * the whole form values and state (since one field may be disabled/hidden) because\n * of the value of other field.\n *\n * 3.- given the previous requirement, maybe the name of the field of the form could be\n * a function (P: F -> V) where F is the form (or parent object) and V is the type of the\n * property. That will help with the typing of the forms props\n *\n * 4.- tooltip are not placed correctly: the arrow should point the question mark\n * and the text area should be bigger\n *\n */\n\n/**\n * check this fields\n * \n * Signature of Contracting partner, 902_9e\n * Currency and amount of deposited assets, 902_5e\n * Signature on declaration of trust, 902.13e\n * also fundations\n * also life insurance\n * \n * no all state are handled by all the inputs\n * all the input implementation should respect\n * ui props and state \n */\n\nexport function ExchangeAmlFrame({\n children,\n}: {\n children?: ComponentChildren;\n}): VNode {\n const { i18n } = useTranslationContext();\n\n const [error, resetError] = useErrorBoundary();\n\n useEffect(() => {\n if (error) {\n if (error instanceof Error) {\n notifyException(i18n.str`Internal error, please report.`, error)\n } else {\n notifyError(i18n.str`Internal error, please report.`, String(error) as TranslatedString)\n }\n console.log(error)\n // resetError()\n }\n }, [error])\n\n const officer = useOfficer();\n const [settings, updateSettings] = useSettings();\n\n return (<div class=\"min-h-full flex flex-col m-0 bg-slate-200\" style=\"min-height: 100vh;\">\n <div class=\"bg-indigo-600 pb-32\">\n <Header\n title=\"Exchange\"\n iconLinkURL={uiSettings.backendBaseURL ?? \"#\"}\n onLogout={officer.state !== \"ready\" ? undefined : () => {\n officer.lock()\n }}\n sites={[]}\n supportedLangs={[\"en\", \"es\", \"de\"]}\n >\n <li>\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Preferences</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-1\">\n {getAllBooleanSettings().map(set => {\n const isOn: boolean = !!settings[set]\n return <li class=\"mt-2 pl-2\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span class=\"text-sm text-black font-medium leading-6 \" id=\"availability-label\">\n {getLabelForSetting(set, i18n)}\n </span>\n </span>\n <button type=\"button\" data-enabled={isOn} class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\" role=\"switch\" aria-checked=\"false\" aria-labelledby=\"availability-label\" aria-describedby=\"availability-description\"\n\n onClick={() => { updateSettings(set, !isOn); }}>\n <span aria-hidden=\"true\" data-enabled={isOn} class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"></span>\n </button>\n </div>\n </li>\n })}\n </ul>\n </li>\n </Header>\n </div>\n\n <div class=\"fixed z-20 w-full\">\n <div class=\"mx-auto w-4/5\">\n <ToastBanner />\n </div>\n </div>\n\n <div class=\"-mt-32 flex grow \">\n {officer.state !== \"ready\" ? undefined :\n <Navigation />\n }\n <div class=\"flex mx-auto my-4\">\n <main class=\"rounded-lg bg-white px-5 py-6 shadow\">\n {children}\n </main>\n </div>\n\n </div>\n\n <Footer\n testingUrlKey=\"exchange-base-url\"\n GIT_HASH={GIT_HASH}\n VERSION={VERSION}\n />\n </div>\n );\n}\n\nfunction Navigation(): VNode {\n const { i18n } = useTranslationContext()\n const pageList: Array<PageEntry> = [\n Pages.officer,\n Pages.cases\n ]\n const location = useChangeLocation();\n return (\n <div class=\"hidden sm:block min-w-min bg-indigo-600 divide-y rounded-r-lg divide-cyan-800 overflow-y-auto overflow-x-clip\">\n\n <nav class=\"flex flex-1 flex-col mx-4 mt-4 mb-2\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n <li>\n <ul role=\"list\" class=\"-mx-2 space-y-1\">\n {pageList.map(p => {\n\n return <li>\n <a href={p.url} data-selected={location == p.url}\n class=\"data-[selected=true]:bg-indigo-700 pr-4 data-[selected=true]:text-white text-indigo-200 hover:text-white hover:bg-indigo-700 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n {p.Icon && <p.Icon />}\n <span class=\"hidden md:inline\">\n {p.name}\n </span>\n </a>\n </li>\n\n })}\n {/* <li>\n <a href=\"#\" class=\"text-indigo-200 hover:text-white hover:bg-indigo-700 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n\n <i18n.Translate>Officer</i18n.Translate>\n </a>\n </li> */}\n </ul>\n </li>\n\n {/* <li class=\"mt-auto \">\n <a href=\"#\" class=\"group -mx-2 flex gap-x-3 rounded-md p-2 text-sm font-semibold leading-6 text-indigo-200 hover:bg-indigo-700 hover:text-white\">\n <svg class=\"h-6 w-6 shrink-0 text-indigo-200 group-hover:text-white\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z\" />\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n Settings\n </a>\n </li> */}\n\n </ul>\n </nav>\n </div>\n )\n\n}\n\n\n", "import {\n AbsoluteTime,\n Codec,\n LockedAccount,\n OfficerAccount,\n OfficerId,\n SigningKey,\n buildCodecForObject,\n codecForAbsoluteTime,\n codecForString,\n codecOptional,\n createNewOfficerAccount,\n decodeCrock,\n encodeCrock,\n unlockOfficerAccount,\n} from \"@gnu-taler/taler-util\";\nimport {\n buildStorageKey,\n useLocalStorage,\n useMemoryStorage,\n} from \"@gnu-taler/web-util/browser\";\nimport { useMemo } from \"preact/hooks\";\nimport { useExchangeApiContext, useMaybeExchangeApiContext } from \"../context/config.js\";\n\nexport interface Officer {\n account: LockedAccount;\n when: AbsoluteTime;\n}\n\nconst codecForLockedAccount = codecForString() as Codec<LockedAccount>;\n\ntype OfficerAccountString = {\n id: string,\n strKey: string;\n}\n\nexport const codecForOfficerAccount = (): Codec<OfficerAccountString> =>\n buildCodecForObject<OfficerAccountString>()\n .property(\"id\", codecForString()) // FIXME\n .property(\"strKey\", codecForString()) // FIXME\n .build(\"OfficerAccount\");\n\nexport const codecForOfficer = (): Codec<Officer> =>\n buildCodecForObject<Officer>()\n .property(\"account\", codecForLockedAccount) // FIXME\n .property(\"when\", codecForAbsoluteTime) // FIXME\n .build(\"Officer\");\n\nexport type OfficerState = OfficerNotReady | OfficerReady;\nexport type OfficerNotReady = OfficerNotFound | OfficerLocked;\ninterface OfficerNotFound {\n state: \"not-found\";\n create: (password: string) => Promise<void>;\n}\ninterface OfficerLocked {\n state: \"locked\";\n forget: () => void;\n tryUnlock: (password: string) => Promise<void>;\n}\ninterface OfficerReady {\n state: \"ready\";\n account: OfficerAccount;\n forget: () => void;\n lock: () => void;\n}\n\nconst OFFICER_KEY = buildStorageKey(\"officer\", codecForOfficer());\nconst DEV_ACCOUNT_KEY = buildStorageKey(\"account-dev\", codecForOfficerAccount());\nconst ACCOUNT_KEY = \"account\";\n\nexport function useOfficer(): OfficerState {\n const exchangeContext = useMaybeExchangeApiContext();\n // dev account, is save when reloaded.\n const accountStorage = useLocalStorage(DEV_ACCOUNT_KEY);\n const account = useMemo(() => {\n if (!accountStorage.value) return undefined\n return {\n id: accountStorage.value.id as OfficerId,\n signingKey: decodeCrock(accountStorage.value.strKey) as SigningKey\n }\n }, [accountStorage.value])\n\n\n // const accountStorage = useMemoryStorage<OfficerAccount>(ACCOUNT_KEY);\n // const account = accountStorage.value;\n\n const officerStorage = useLocalStorage(OFFICER_KEY);\n const officer = officerStorage.value;\n\n if (officer === undefined) {\n return {\n state: \"not-found\",\n create: async (pwd: string) => {\n if (!exchangeContext) return;\n const req = await fetch(new URL(\"seed\", exchangeContext.api.baseUrl).href)\n const b = await req.blob()\n const ar = await b.arrayBuffer()\n const uintar = new Uint8Array(ar)\n\n const { id, safe, signingKey } = await createNewOfficerAccount(pwd, uintar);\n officerStorage.update({\n account: safe,\n when: AbsoluteTime.now(),\n });\n\n // accountStorage.update({ id, signingKey });\n const strKey = encodeCrock(signingKey)\n accountStorage.update({ id, strKey })\n },\n };\n }\n\n if (account === undefined) {\n return {\n state: \"locked\",\n forget: () => {\n officerStorage.reset();\n },\n tryUnlock: async (pwd: string) => {\n const ac = await unlockOfficerAccount(officer.account, pwd);\n // accountStorage.update(ac);\n accountStorage.update({ id: ac.id, strKey: encodeCrock(ac.signingKey) })\n },\n };\n }\n\n return {\n state: \"ready\",\n account,\n lock: () => {\n accountStorage.reset();\n },\n forget: () => {\n officerStorage.reset();\n accountStorage.reset();\n },\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\nimport { TalerExchangeApi, TalerExchangeHttpClient, TalerError } from \"@gnu-taler/taler-util\";\nimport { BrowserFetchHttpLib, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, createContext, FunctionComponent, h, VNode } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { ErrorLoading } from \"@gnu-taler/web-util/browser\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = {\n url: URL,\n config: TalerExchangeApi.ExchangeVersionResponse,\n api: TalerExchangeHttpClient,\n};\n\nconst Context = createContext<Type>(undefined as any);\n\nexport const useExchangeApiContext = (): Type => useContext(Context);\nexport const useMaybeExchangeApiContext = (): Type | undefined => useContext(Context);\n\nexport function ExchangeApiContextTesting({ config, children }: { config: TalerExchangeApi.ExchangeVersionResponse, children?: ComponentChildren; }): VNode {\n return h(Context.Provider, {\n value: { url: new URL(\"http://testing\"), config, api: null as any },\n children\n }\n )\n}\n\nexport type ConfigResult = undefined\n | { type: \"ok\", config: TalerExchangeApi.ExchangeVersionResponse }\n | { type: \"incompatible\", result: TalerExchangeApi.ExchangeVersionResponse, supported: string }\n | { type: \"error\", error: TalerError }\n\nexport const ExchangeApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n}: {\n baseUrl: string,\n children: ComponentChildren;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>,\n}): VNode => {\n const [checked, setChecked] = useState<ConfigResult>()\n const { i18n } = useTranslationContext();\n const url = new URL(baseUrl)\n const api = new TalerExchangeHttpClient(url.href, new BrowserFetchHttpLib())\n useEffect(() => {\n api.getConfig()\n .then((resp) => {\n if (resp.type === \"fail\") {\n setChecked({ type: \"error\", error: TalerError.fromUncheckedDetail(resp.detail) });\n }else if (api.isCompatible(resp.body.version)) {\n setChecked({ type: \"ok\", config: resp.body });\n } else {\n setChecked({ type: \"incompatible\", result: resp.body, supported: api.PROTOCOL_VERSION })\n }\n })\n .catch((error: unknown) => {\n if (error instanceof TalerError) {\n setChecked({ type: \"error\", error });\n }\n });\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, { children: h(\"div\", {}, \"loading...\") })\n }\n if (checked.type === \"error\") {\n return h(frameOnError, { children: h(ErrorLoading, { error: checked.error, showDetail: true }) })\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, { children: h(\"div\", {}, i18n.str`the bank backend is not supported. supported version \"${checked.supported}\", server version \"${checked.result.version}\"`) })\n }\n const value: Type = {\n url, config: checked.config, api\n }\n return h(Context.Provider, {\n value,\n children,\n });\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\nimport {\n Codec,\n TranslatedString,\n buildCodecForObject,\n codecForBoolean,\n codecForNumber,\n codecForString,\n codecOptional\n} from \"@gnu-taler/taler-util\";\nimport { buildStorageKey, useLocalStorage, useTranslationContext } from \"@gnu-taler/web-util/browser\";\n\ninterface Settings {\n allowInsecurePassword: boolean;\n keepSessionAfterReload: boolean;\n}\n\nexport function getAllBooleanSettings(): Array<keyof Settings> {\n return [\"allowInsecurePassword\", \"keepSessionAfterReload\"]\n}\n\nexport function getLabelForSetting(k: keyof Settings, i18n: ReturnType<typeof useTranslationContext>[\"i18n\"]): TranslatedString {\n switch (k) {\n case \"allowInsecurePassword\": return i18n.str`Allow Insecure password`\n case \"keepSessionAfterReload\": return i18n.str`Keep session after reload`\n }\n}\n\nexport const codecForSettings = (): Codec<Settings> =>\n buildCodecForObject<Settings>()\n .property(\"allowInsecurePassword\", (codecForBoolean()))\n .property(\"keepSessionAfterReload\", (codecForBoolean()))\n .build(\"Settings\");\n\nconst defaultSettings: Settings = {\n allowInsecurePassword: false,\n keepSessionAfterReload: false,\n};\n\nconst EXCHANGE_SETTINGS_KEY = buildStorageKey(\n \"exchange-settings\",\n codecForSettings(),\n);\n\nexport function useSettings(): [\n Readonly<Settings>,\n <T extends keyof Settings>(key: T, value: Settings[T]) => void,\n] {\n const { value, update } = useLocalStorage(\n EXCHANGE_SETTINGS_KEY,\n defaultSettings,\n );\n\n function updateField<T extends keyof Settings>(k: T, v: Settings[T]) {\n const newValue = { ...value, [k]: v };\n update(newValue);\n }\n return [value, updateField];\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 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}", "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 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 {\n AbsoluteTime,\n AmountJson,\n Amounts,\n HttpStatusCode,\n TalerError,\n TranslatedString,\n assertUnreachable\n} from \"@gnu-taler/taler-util\";\nimport { DefaultForm, ErrorLoading, InternationalizationAPI, Loading, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormMetadata } from \"../forms/declaration.js\";\nimport { useCaseDetails } from \"../hooks/useCaseDetails.js\";\nimport { Pages } from \"../pages.js\";\nimport { Justification, parseJustification } from \"./AntiMoneyLaunderingForm.js\";\nimport { ShowConsolidated } from \"./ShowConsolidated.js\";\nimport { AmlExchangeBackend } from \"../utils/types.js\";\nimport { uiForms } from \"../forms/declaration.js\";\n\nexport type AmlEvent = AmlFormEvent | AmlFormEventError | KycCollectionEvent | KycExpirationEvent;\ntype AmlFormEvent = {\n type: \"aml-form\";\n when: AbsoluteTime;\n title: TranslatedString;\n justification: Justification;\n metadata: FormMetadata<any>;\n state: AmlExchangeBackend.AmlState;\n threshold: AmountJson;\n};\ntype AmlFormEventError = {\n type: \"aml-form-error\";\n when: AbsoluteTime;\n title: TranslatedString;\n justification: undefined,\n metadata: undefined,\n state: AmlExchangeBackend.AmlState;\n threshold: AmountJson;\n};\ntype KycCollectionEvent = {\n type: \"kyc-collection\";\n when: AbsoluteTime;\n title: TranslatedString;\n values: object;\n provider: string;\n};\ntype KycExpirationEvent = {\n type: \"kyc-expiration\";\n when: AbsoluteTime;\n title: TranslatedString;\n fields: string[];\n};\n\ntype WithTime = { when: AbsoluteTime };\n\nfunction selectSooner(a: WithTime, b: WithTime) {\n return AbsoluteTime.cmp(a.when, b.when);\n}\n\nfunction titleForJustification(op: ReturnType<typeof parseJustification>, i18n: InternationalizationAPI): TranslatedString {\n if (op.type === \"ok\") {\n return op.body.justification.label as TranslatedString;\n }\n switch (op.case) {\n case \"not-json\": return \"error: the justification is not a form\" as TranslatedString\n case \"id-not-found\": return \"error: justification form's id not found\" as TranslatedString\n case \"version-not-found\": return \"error: justification form's version not found\" as TranslatedString\n case \"form-not-found\": return `error: justification form not found` as TranslatedString\n default: {\n assertUnreachable(op.case)\n }\n }\n}\n\nexport function getEventsFromAmlHistory(\n aml: AmlExchangeBackend.AmlDecisionDetail[],\n kyc: AmlExchangeBackend.KycDetail[],\n i18n: InternationalizationAPI,\n): AmlEvent[] {\n const ae: AmlEvent[] = aml.map((a) => {\n\n const just = parseJustification(a.justification, uiForms.forms(i18n))\n return {\n type: just.type === \"ok\" ? \"aml-form\" : \"aml-form-error\",\n state: a.new_state,\n threshold: Amounts.parseOrThrow(a.new_threshold),\n title: titleForJustification(just, i18n),\n metadata: just.type === \"ok\" ? just.body.metadata : undefined,\n justification: just.type === \"ok\" ? just.body.justification : undefined,\n when: {\n t_ms:\n a.decision_time.t_s === \"never\"\n ? \"never\"\n : a.decision_time.t_s * 1000,\n },\n } as AmlEvent;\n });\n const ke = kyc.reduce((prev, k) => {\n prev.push({\n type: \"kyc-collection\",\n title: i18n.str`collection`,\n when: AbsoluteTime.fromProtocolTimestamp(k.collection_time),\n values: !k.attributes ? {} : k.attributes,\n provider: k.provider_section,\n });\n prev.push({\n type: \"kyc-expiration\",\n title: i18n.str`expiration`,\n when: AbsoluteTime.fromProtocolTimestamp(k.expiration_time),\n fields: !k.attributes ? [] : Object.keys(k.attributes),\n });\n return prev;\n }, [] as AmlEvent[]);\n return ae.concat(ke).sort(selectSooner);\n}\n\nexport function CaseDetails({ account }: { account: string }) {\n const [selected, setSelected] = useState<AbsoluteTime>(AbsoluteTime.now());\n const [showForm, setShowForm] = useState<{ justification: Justification, metadata: FormMetadata<any> }>()\n\n const { i18n } = useTranslationContext();\n const details = useCaseDetails(account)\n if (!details) {\n return <Loading />\n }\n if (details instanceof TalerError) {\n return <ErrorLoading error={details} />\n }\n if (details.type === \"fail\") {\n switch (details.case) {\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.Forbidden:\n case HttpStatusCode.NotFound:\n case HttpStatusCode.Conflict: return <div />\n default: assertUnreachable(details)\n }\n }\n const { aml_history, kyc_attributes } = details.body\n\n const events = getEventsFromAmlHistory(aml_history, kyc_attributes, i18n);\n\n if (showForm !== undefined) {\n return <DefaultForm\n readOnly={true}\n initial={showForm.justification.value}\n form={showForm.metadata.impl(showForm.justification.value)}\n >\n <div class=\"mt-6 flex items-center justify-end gap-x-6\">\n <button\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n onClick={() => {\n setShowForm(undefined)\n }}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n </div>\n\n </DefaultForm>\n }\n return (\n <div>\n <a\n href={Pages.newFormEntry.url({ account })}\n class=\"m-4 block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700\"\n >\n <i18n.Translate>\n New AML form\n </i18n.Translate>\n </a>\n\n <header class=\"flex items-center justify-between border-b border-white/5 px-4 py-4 sm:px-6 sm:py-6 lg:px-8\">\n <h1 class=\"text-base font-semibold leading-7 text-black\">\n <i18n.Translate>\n Case history for account <span title={account}>{account.substring(0, 16)}...</span>\n </i18n.Translate>\n </h1>\n </header>\n <ShowTimeline history={events} onSelect={(e) => {\n switch (e.type) {\n case \"aml-form\": {\n const { justification, metadata } = e\n setShowForm({ justification, metadata })\n break;\n }\n case \"kyc-collection\":\n case \"kyc-expiration\": {\n setSelected(e.when);\n break;\n }\n case \"aml-form-error\":\n }\n }} />\n {/* {selected && <ShowEventDetails event={selected} />} */}\n {selected && <ShowConsolidated history={events} until={selected} />}\n </div>\n );\n}\n\nfunction AmlStateBadge({ state }: { state: AmlExchangeBackend.AmlState }): VNode {\n switch (state) {\n case AmlExchangeBackend.AmlState.normal: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-green-50 px-2 py-1 text-xs font-medium text-green-700 ring-1 ring-inset ring-green-600/20\">\n Normal\n </span>\n );\n }\n case AmlExchangeBackend.AmlState.pending: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-2 py-1 text-xs font-medium text-yellow-700 ring-1 ring-inset ring-green-600/20\">\n Pending\n </span>\n );\n }\n case AmlExchangeBackend.AmlState.frozen: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-red-50 px-2 py-1 text-xs font-medium text-red-700 ring-1 ring-inset ring-green-600/20\">\n Frozen\n </span>\n );\n }\n }\n assertUnreachable(state)\n}\n\nfunction ShowTimeline({ history, onSelect }: { onSelect: (e: AmlEvent) => void, history: AmlEvent[] }): VNode {\n return <div class=\"flow-root\">\n <ul role=\"list\">\n {history.map((e, idx) => {\n const isLast = history.length - 1 === idx;\n return (\n <li\n data-ok={e.type !== \"aml-form-error\"}\n class=\"hover:bg-gray-200 p-2 rounded data-[ok=true]:cursor-pointer\"\n onClick={() => {\n onSelect(e);\n }}\n >\n <div class=\"relative pb-6\">\n {!isLast ? (\n <span\n class=\"absolute left-4 top-4 -ml-px h-full w-1 bg-gray-200\"\n aria-hidden=\"true\"\n ></span>\n ) : undefined}\n <div class=\"relative flex space-x-3\">\n {(() => {\n switch (e.type) {\n case \"aml-form-error\":\n case \"aml-form\": {\n return <div>\n <AmlStateBadge state={e.state} />\n <span class=\"inline-flex items-center px-2 py-1 text-xs font-medium text-gray-700 \">\n {e.threshold.currency}{\" \"}\n {Amounts.stringifyValue(e.threshold)}\n </span>\n </div>\n }\n case \"kyc-collection\": {\n return (\n // <ArrowDownCircleIcon class=\"h-8 w-8 text-green-700\" />\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75l3 3m0 0l3-3m-3 3v-7.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n );\n }\n case \"kyc-expiration\": {\n // return <ClockIcon class=\"h-8 w-8 text-gray-700\" />;\n return <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n\n }\n }\n assertUnreachable(e)\n })()}\n <div class=\"flex min-w-0 flex-1 justify-between space-x-4 pt-1.5\">\n {e.type === \"aml-form\" ?\n <span\n // href={Pages.newFormEntry.url({ account })}\n class=\"block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700\"\n >\n {e.title}\n </span>\n :\n <p class=\"text-sm text-gray-900\">{e.title}</p>\n }\n <div class=\"whitespace-nowrap text-right text-sm text-gray-500\">\n {e.when.t_ms === \"never\" ? (\n \"never\"\n ) : (\n <time dateTime={format(e.when.t_ms, \"dd MMM yyyy\")}>\n {format(e.when.t_ms, \"dd MMM yyyy\")}\n </time>\n )}\n </div>\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n\n}\n\nfunction ShowEventDetails({ event }: { event: AmlEvent }): VNode {\n return <div>type {event.type}</div>;\n}\n\n\n", "import { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { OBJECT, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, serialize, createCacheHelper, isUndefined, getTimestamp, UNDEFINED, isFunction, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects, revalidateEvents } from 'swr/_internal';\nexport { mutate, preload, useSWRConfig } from 'swr/_internal';\n\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache , compare , suspense , fallbackData , revalidateOnMount , revalidateIfStale , refreshInterval , refreshWhenHidden , refreshWhenOffline , keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH] = SWRGlobalState.get(cache);\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 // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n const [key, fnArg] = serialize(_key);\n // If it's the initial render of this hook.\n const 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 const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n let equal = true;\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(current[t], prev[t])) {\n if (isUndefined(prev[t])) {\n if (!compare(current[t], returnedData)) {\n equal = false;\n }\n } else {\n equal = false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n equal = false;\n }\n }\n }\n return equal;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n if (!isUndefined(revalidateIfStale)) return revalidateIfStale;\n return true;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = getSelectedCache(getCache());\n const memorizedInitialSnapshot = getSelectedCache(getInitialCache());\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n return isEqual(newSnapshot, memorizedSnapshot) ? memorizedSnapshot : memorizedSnapshot = newSnapshot;\n },\n ()=>memorizedInitialSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined(cachedData) ? fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;\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 const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) 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 mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n [newData, startAt] = FETCH[key];\n newData = await newData;\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 (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, revalidate, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `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 [\n key,\n cache\n ]);\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 const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n let nextFocusRevalidatedAt = 0;\n const onRevalidate = (type)=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n }\n return;\n };\n const 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 // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation.\n if (shouldDoInitialRevalidation) {\n if (isUndefined(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\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 ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction(refreshInterval) ? refreshInterval(data) : refreshInterval;\n // We only start the 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 (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `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 // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any initial data. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using suspense in SSR.');\n }\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 returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n};\nconst SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\nconst unstable_serialize = (key)=>serialize(key)[0];\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (!data) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ var useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n", "import React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useState, createElement, useRef, useCallback } from 'react';\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can 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\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return cache.get(key) || EMPTY_CACHE;\n }\n ];\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).\nconst table = new WeakMap();\n// counter of the key\nlet 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// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const constructor = arg && arg.constructor;\n const isDate = constructor == Date;\n let result;\n let 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) 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 const 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 } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\n/**\n * Due to the 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 workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || 'Deno' in window;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\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.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nconst FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\n\nvar constants = {\n __proto__: null,\n FOCUS_EVENT: FOCUS_EVENT,\n RECONNECT_EVENT: RECONNECT_EVENT,\n MUTATE_EVENT: MUTATE_EVENT\n};\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const revalidate = options.revalidate !== false;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for(let keyIt = it.next(); !keyIt.done; keyIt = it.next()){\n const key = keyIt.value;\n if (// Skip the special useSWRInfinite keys.\n !key.startsWith('$inf$') && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH] = SWRGlobalState.get(cache);\n const revalidators = EVENT_REVALIDATORS[key];\n const startRevalidate = ()=>{\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(()=>get().data);\n }\n }\n return get().data;\n };\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 startRevalidate();\n }\n let data = _data;\n let error;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isFunction(data.then)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((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 if (beforeMutationTs !== MUTATION[key][0]) {\n if (error) throw error;\n return data;\n } else if (error && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n data = committedData;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data,\n _c: UNDEFINED\n });\n }\n }\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, committedData);\n }\n // Only update cached data if there's no error. Data can be `undefined` here.\n set({\n data,\n _c: UNDEFINED\n });\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n const res = await startRevalidate();\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n // Throw error or return data\n if (error) {\n if (throwOnError) throw error;\n return;\n }\n return populateCache ? res : data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (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 is bound to\n // the cache.\n // The 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 const 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 const EVENT_REVALIDATORS = {};\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = {};\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for(let i = subs.length; i--;){\n subs[i](value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n {},\n {},\n {},\n mutate,\n setter,\n subscribe\n ]);\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 be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\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 }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\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 [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = (currentData, newData)=>stableHash(currentData) == stableHash(newData);\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n 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,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1 , fallback: f1 } = a;\n const { use: u2 , fallback: f2 } = b;\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\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // Use a lazy initialized state to create the cache on first access.\n const [cacheContext] = useState(()=>provider ? initCache(provider(extendedConfig.cache || cache), config) : UNDEFINED);\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(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const key = serialize(key_)[0];\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(key_);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const key = serialize(key_)[0];\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n const req = PRELOAD[key];\n if (req) {\n delete PRELOAD[key];\n return req;\n }\n return fetcher_(...args);\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n/**\n * An implementation of state with dependency-tracking.\n */ const useStateWithDeps = (state)=>{\n const rerender = useState({})[1];\n const unmountedRef = useRef(false);\n const 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 const 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 */ const setState = useCallback((payload)=>{\n let shouldRerender = false;\n const currentState = stateRef.current;\n for(const _ in payload){\n const 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 if (IS_REACT_LEGACY) {\n rerender({});\n } else {\n React.startTransition(()=>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 useIsomorphicLayoutEffect(()=>{\n unmountedRef.current = false;\n return ()=>{\n unmountedRef.current = true;\n };\n });\n return [\n stateRef,\n stateDependenciesRef.current,\n setState\n ];\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const 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\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { IS_REACT_LEGACY, IS_SERVER, OBJECT, SWRConfig, SWRGlobalState, UNDEFINED, cache, compare, createCacheHelper, defaultConfig, defaultConfigOptions, getTimestamp, hasRequestAnimationFrame, initCache, internalMutate, isDocumentDefined, isFunction, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, mutate, noop, normalize, preload, preset, rAF, constants as revalidateEvents, serialize, slowConnection, stableHash, subscribeCallback, useIsomorphicLayoutEffect, useSWRConfig, useStateWithDeps, withArgs, withMiddleware };\n", "\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AmountString, OfficerAccount, PaytoString, TalerExchangeApi, TalerExchangeResultByMethod, TalerHttpError } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook } from \"swr\";\nimport { useExchangeApiContext } from \"../context/config.js\";\nimport { useOfficer } from \"./useOfficer.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useCaseDetails(paytoHash: string) {\n const officer = useOfficer();\n const session = officer.state === \"ready\" ? officer.account : undefined;\n\n const { api } = useExchangeApiContext();\n\n async function fetcher([officer, account]: [OfficerAccount, PaytoString]) {\n return await api.getDecisionDetails(officer, account)\n }\n\n const { data, error } = useSWR<TalerExchangeResultByMethod<\"getDecisionDetails\">, TalerHttpError>(\n !session ? undefined : [session, paytoHash], 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 keepPreviousData: true,\n });\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nconst example1: TalerExchangeApi.AmlDecisionDetails = {\n aml_history: [\n {\n justification: \"Lack of documentation\",\n decider_pub: \"ASDASDASD\",\n decision_time: {\n t_s: Date.now() / 1000,\n },\n new_state: 2,\n new_threshold: \"USD:0\" as AmountString,\n },\n {\n justification: \"Doing a transfer of high amount\",\n decider_pub: \"ASDASDASD\",\n decision_time: {\n t_s: Date.now() / 1000 - 60 * 60 * 24 * 30 * 6,\n },\n new_state: 1,\n new_threshold: \"USD:2000\" as AmountString,\n },\n {\n justification: \"Account is known to the system\",\n decider_pub: \"ASDASDASD\",\n decision_time: {\n t_s: Date.now() / 1000 - 60 * 60 * 24 * 30 * 9,\n },\n new_state: 0,\n new_threshold: \"USD:100\" as AmountString,\n },\n ],\n kyc_attributes: [\n {\n collection_time: {\n t_s: Date.now() / 1000 - 60 * 60 * 24 * 30 * 8,\n },\n expiration_time: {\n t_s: Date.now() / 1000 - 60 * 60 * 24 * 30 * 4,\n },\n provider_section: \"asdasd\",\n attributes: {\n name: \"Sebastian\",\n },\n },\n {\n collection_time: {\n t_s: Date.now() / 1000 - 60 * 60 * 24 * 30 * 5,\n },\n expiration_time: {\n t_s: Date.now() / 1000 - 60 * 60 * 24 * 30 * 2,\n },\n provider_section: \"asdasd\",\n attributes: {\n creditCard: \"12312312312\",\n },\n },\n ],\n};\n\n\n", "import {\n AbsoluteTime,\n AmountJson,\n Amounts,\n Codec,\n OperationFail,\n OperationOk,\n OperationResult,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"@gnu-taler/taler-util\";\nimport {\n DefaultForm,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { h } from \"preact\";\nimport { useExchangeApiContext } from \"../context/config.js\";\nimport { FormMetadata, uiForms } from \"../forms/declaration.js\";\nimport { Pages } from \"../pages.js\";\nimport { AmlExchangeBackend } from \"../utils/types.js\";\n\nexport function AntiMoneyLaunderingForm({\n account,\n formId,\n onSubmit,\n}: {\n account: string;\n formId: string;\n onSubmit: (\n justification: Justification,\n state: AmlExchangeBackend.AmlState,\n threshold: AmountJson,\n ) => Promise<void>;\n}) {\n const { i18n } = useTranslationContext();\n const theForm = uiForms.forms(i18n).find((v) => v.id === formId);\n if (!theForm) {\n return <div>form with id {formId} not found</div>;\n }\n\n const { config } = useExchangeApiContext();\n\n const initial = {\n when: AbsoluteTime.now(),\n state: AmlExchangeBackend.AmlState.pending,\n threshold: Amounts.zeroOfCurrency(config.currency),\n };\n return (\n <DefaultForm\n initial={initial}\n form={theForm.impl(initial)}\n onUpdate={() => { }}\n onSubmit={(formValue) => {\n if (formValue.state === undefined || formValue.threshold === undefined)\n return;\n const st = formValue.state;\n const amount = formValue.threshold;\n\n const justification: Justification = {\n id: theForm.id,\n label: theForm.label,\n version: theForm.version,\n value: formValue,\n };\n\n onSubmit(justification, st, amount);\n }}\n >\n <div class=\"mt-6 flex items-center justify-end gap-x-6\">\n <a\n href={Pages.account.url({ account })}\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n class=\"rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </DefaultForm>\n );\n}\n\nexport type Justification<T = any> = {\n // form values\n value: T;\n} & Omit<Omit<FormMetadata<any>, \"icon\">, \"impl\">;\n\nexport function stringifyJustification(j: Justification): string {\n return JSON.stringify(j);\n}\n\ntype SimpleFormMetadata = {\n version?: number;\n id?: string;\n};\n\nexport const codecForSimpleFormMetadata = (): Codec<SimpleFormMetadata> =>\n buildCodecForObject<SimpleFormMetadata>()\n .property(\"id\", codecOptional(codecForString()))\n .property(\"version\", codecOptional(codecForNumber()))\n .build(\"SimpleFormMetadata\");\n\ntype ParseJustificationFail =\n | \"not-json\"\n | \"id-not-found\"\n | \"form-not-found\"\n | \"version-not-found\";\n\nexport function parseJustification(\n s: string,\n listOfAllKnownForms: FormMetadata<any>[],\n): OperationOk<{ justification: Justification; metadata: FormMetadata<any> }> | OperationFail<ParseJustificationFail> {\n try {\n const justification = JSON.parse(s);\n const info = codecForSimpleFormMetadata().decode(justification);\n if (!info.id) {\n return {\n type: \"fail\",\n case: \"id-not-found\",\n detail: {} as any,\n };\n }\n if (!info.version) {\n return {\n type: \"fail\",\n case: \"version-not-found\",\n detail: {} as any,\n };\n }\n const found = listOfAllKnownForms.find((f) => {\n return f.id === info.id && f.version === info.version;\n });\n if (!found) {\n return {\n type: \"fail\",\n case: \"form-not-found\",\n detail: {} as any,\n };\n }\n return {\n type: \"ok\",\n body: {\n justification,\n metadata: found,\n },\n };\n } catch (e) {\n return {\n type: \"fail\",\n case: \"not-json\",\n detail: {} as any,\n };\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\nimport type { AmountJson, TranslatedString } from \"@gnu-taler/taler-util\";\nimport type { FlexibleForm, InternationalizationAPI } from \"@gnu-taler/web-util/browser\";\nimport { AmlExchangeBackend } from \"../utils/types.js\";\n\n/**\n * import entry point without hard reference.\n * \n * This file just export types and UI Forms \n * based on what `globalThis` contains.\n * \n * `./index.js` must be imported first before \n * so `globaThis` will have the correct value. \n */\n\nexport interface BaseForm {\n state: AmlExchangeBackend.AmlState;\n threshold: AmountJson;\n}\n\nexport type FormMetadata<T extends BaseForm> = {\n label: TranslatedString,\n id: string,\n version: number,\n impl: (current: T) => FlexibleForm<T>\n}\n\ninterface LabelValue {\n label: TranslatedString;\n value: string,\n}\n\nexport interface UiForms {\n currencies: (i18n: InternationalizationAPI) => LabelValue[],\n languages: (i18n: InternationalizationAPI) => LabelValue[],\n forms: (i18n: InternationalizationAPI) => Array<FormMetadata<BaseForm>>,\n}\n\n/**\n * Global settings for the UI.\n */\nconst defaultUIForms: UiForms = {\n currencies: () => [],\n languages: () => [],\n forms: () => [],\n};\n\ndeclare global {\n var amlExchangeBackoffice: UiForms;\n}\n\nexport const uiForms: UiForms =\n \"amlExchangeBackoffice\" in globalThis\n ? (globalThis as any).amlExchangeBackoffice\n : defaultUIForms;\n", "export namespace AmlExchangeBackend {\n // FIXME: placeholder\n export interface AmlError {\n code: number;\n hint: string;\n }\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n\n type AmlOfficerPublicKeyP = string;\n\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: Amount;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n interface Timestamp {\n // Seconds since epoch, or the special\n // value \"never\" to represent an event that will\n // never happen.\n t_s: number | \"never\";\n }\n\n type PaytoHash = string;\n type Integer = number;\n type Amount = string;\n // EdDSA signatures are transmitted as 64-bytes base32\n // binary-encoded objects with just the R and S values (base32_ binary-only).\n type EddsaSignature = string;\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n\n interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: Amount;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n\n export interface AmlDecision {\n\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: Amount;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n\n}\n", "import { AbsoluteTime, AmountJson, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { AmlEvent } from \"./CaseDetails.js\";\nimport { DefaultForm, FlexibleForm, UIFormField, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { amlStateConverter } from \"../utils/converter.js\";\nimport { AmlExchangeBackend } from \"../utils/types.js\";\n\nexport function ShowConsolidated({\n history,\n until,\n}: {\n history: AmlEvent[];\n until: AbsoluteTime;\n}): VNode {\n const { i18n } = useTranslationContext();\n\n const cons = getConsolidated(history, until);\n\n const form: FlexibleForm<Consolidated> = {\n behavior: (form) => {\n return {\n aml: {\n threshold: {\n hidden: !form.aml\n },\n since: {\n hidden: !form.aml\n },\n state: {\n hidden: !form.aml\n }\n }\n };\n },\n design: [\n {\n title: i18n.str`AML`,\n fields: [\n {\n type: \"amount\",\n props: {\n label: i18n.str`Threshold`,\n name: \"aml.threshold\",\n },\n },\n {\n type: \"choiceHorizontal\",\n props: {\n label: i18n.str`State`,\n name: \"aml.state\",\n converter: amlStateConverter,\n choices: [\n {\n label: i18n.str`Frozen`,\n value: AmlExchangeBackend.AmlState.frozen,\n },\n {\n label: i18n.str`Pending`,\n value: AmlExchangeBackend.AmlState.pending,\n },\n {\n label: i18n.str`Normal`,\n value: AmlExchangeBackend.AmlState.normal,\n },\n ],\n },\n },\n ],\n },\n Object.entries(cons.kyc).length > 0\n ? {\n title: i18n.str`KYC`,\n fields: Object.entries(cons.kyc).map(([key, field]) => {\n const result: UIFormField = {\n type: \"text\",\n props: {\n label: key as TranslatedString,\n name: `kyc.${key}.value`,\n help: `${field.provider} since ${field.since.t_ms === \"never\"\n ? \"never\"\n : format(field.since.t_ms, \"dd/MM/yyyy\")\n }` as TranslatedString,\n },\n };\n return result;\n }),\n }\n : undefined,\n ],\n };\n return (\n <Fragment>\n <h1 class=\"text-base font-semibold leading-7 text-black\">\n Consolidated information {until.t_ms === \"never\"\n ? \"\"\n : `after ${format(until.t_ms, \"dd MMMM yyyy\")}`}\n </h1>\n <DefaultForm\n key={`${String(Date.now())}`}\n form={form}\n initial={cons}\n readOnly\n onUpdate={() => { }}\n />\n </Fragment>\n );\n}\n\ninterface Consolidated {\n aml: {\n state: AmlExchangeBackend.AmlState;\n threshold: AmountJson;\n since: AbsoluteTime;\n };\n kyc: {\n [field: string]: {\n value: any;\n provider: string;\n since: AbsoluteTime;\n };\n };\n}\n\nfunction getConsolidated(\n history: AmlEvent[],\n when: AbsoluteTime,\n): Consolidated {\n const initial: Consolidated = {\n aml: {\n state: AmlExchangeBackend.AmlState.normal,\n threshold: {\n currency: \"ARS\",\n value: 1000,\n fraction: 0,\n },\n since: AbsoluteTime.never()\n },\n kyc: {},\n };\n return history.reduce((prev, cur) => {\n if (AbsoluteTime.cmp(when, cur.when) < 0) {\n return prev;\n }\n switch (cur.type) {\n case \"kyc-expiration\": {\n cur.fields.forEach((field) => {\n delete prev.kyc[field];\n });\n break;\n }\n case \"aml-form\": {\n prev.aml = {\n since: cur.when,\n state: cur.state,\n threshold: cur.threshold\n }\n break;\n }\n case \"kyc-collection\": {\n Object.keys(cur.values).forEach((field) => {\n prev.kyc[field] = {\n value: (cur.values as any)[field],\n provider: cur.provider,\n since: cur.when,\n };\n });\n break;\n }\n }\n return prev;\n }, initial);\n}", "import { AmlExchangeBackend } from \"./types.js\";\n\nexport const amlStateConverter = {\n toStringUI: stringifyAmlState,\n fromStringUI: parseAmlState,\n};\n\nfunction stringifyAmlState(s: AmlExchangeBackend.AmlState | undefined): string {\n if (s === undefined) return \"\";\n switch (s) {\n case AmlExchangeBackend.AmlState.normal:\n return \"normal\";\n case AmlExchangeBackend.AmlState.pending:\n return \"pending\";\n case AmlExchangeBackend.AmlState.frozen:\n return \"frozen\";\n }\n}\n\nfunction parseAmlState(s: string | undefined): AmlExchangeBackend.AmlState {\n switch (s) {\n case \"normal\":\n return AmlExchangeBackend.AmlState.normal;\n case \"pending\":\n return AmlExchangeBackend.AmlState.pending;\n case \"frozen\":\n return AmlExchangeBackend.AmlState.frozen;\n default:\n throw Error(`unknown AML state: ${s}`);\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 */\nimport {\n HttpStatusCode,\n TalerError,\n TalerExchangeApi,\n assertUnreachable\n} from \"@gnu-taler/taler-util\";\nimport {\n ErrorLoading,\n Loading,\n createNewForm,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useCases } from \"../hooks/useCases.js\";\nimport { Pages } from \"../pages.js\";\n\nimport { amlStateConverter } from \"../utils/converter.js\";\nimport { AmlExchangeBackend } from \"../utils/types.js\";\nimport { Officer } from \"./Officer.js\";\n\nexport function CasesUI({\n records,\n filter,\n onChangeFilter,\n onFirstPage,\n onNext,\n}: {\n onFirstPage?: () => void;\n onNext?: () => void;\n filter: AmlExchangeBackend.AmlState;\n onChangeFilter: (f: AmlExchangeBackend.AmlState) => void;\n records: TalerExchangeApi.AmlRecord[];\n}): VNode {\n const { i18n } = useTranslationContext();\n\n const form = createNewForm<{ state: AmlExchangeBackend.AmlState }>();\n\n return (\n <div>\n <div class=\"sm:flex sm:items-center\">\n <div class=\"px-2 sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Cases</i18n.Translate>\n </h1>\n <p class=\"mt-2 text-sm text-gray-700 w-80\">\n <i18n.Translate>\n A list of all the account with the status\n </i18n.Translate>\n </p>\n </div>\n <div class=\"px-2\">\n <form.Provider\n initial={{ state: filter }}\n onUpdate={(v) => {\n onChangeFilter(v.state ?? filter);\n }}\n onSubmit={(_v) => {}}\n >\n <form.InputChoiceHorizontal\n name=\"state\"\n label={i18n.str`Filter`}\n converter={amlStateConverter}\n choices={[\n {\n label: i18n.str`Pending`,\n value: AmlExchangeBackend.AmlState.pending,\n },\n {\n label: i18n.str`Frozen`,\n value: AmlExchangeBackend.AmlState.frozen,\n },\n {\n label: i18n.str`Normal`,\n value: AmlExchangeBackend.AmlState.normal,\n },\n ]}\n />\n </form.Provider>\n </div>\n </div>\n <div class=\"mt-8 flow-root\">\n <div class=\"overflow-x-auto\">\n {!records.length ? (\n <div>empty result </div>\n ) : (\n <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-80\"\n >\n <i18n.Translate>Account Id</i18n.Translate>\n </th>\n <th\n scope=\"col\"\n class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-40\"\n >\n <i18n.Translate>Status</i18n.Translate>\n </th>\n <th\n scope=\"col\"\n class=\"sm:hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-40\"\n >\n <i18n.Translate>Threshold</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n {records.map((r) => {\n return (\n <tr key={r.h_payto} class=\"hover:bg-gray-100 \">\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-500 \">\n <div class=\"text-gray-900\">\n <a\n href={Pages.account.url({ account: r.h_payto })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n {r.h_payto.substring(0, 16)}...\n </a>\n </div>\n </td>\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-500\">\n {((state: AmlExchangeBackend.AmlState): VNode => {\n switch (state) {\n case AmlExchangeBackend.AmlState.normal: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-green-50 px-2 py-1 text-xs font-medium text-green-700 ring-1 ring-inset ring-green-600/20\">\n Normal\n </span>\n );\n }\n case AmlExchangeBackend.AmlState.pending: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-2 py-1 text-xs font-medium text-yellow-700 ring-1 ring-inset ring-green-600/20\">\n Pending\n </span>\n );\n }\n case AmlExchangeBackend.AmlState.frozen: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-red-50 px-2 py-1 text-xs font-medium text-red-700 ring-1 ring-inset ring-green-600/20\">\n Frozen\n </span>\n );\n }\n }\n })(r.current_state)}\n </td>\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-900\">\n {r.threshold}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n <Pagination onFirstPage={onFirstPage} onNext={onNext} />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport function Cases() {\n const [stateFilter, setStateFilter] = useState(\n AmlExchangeBackend.AmlState.pending,\n );\n\n const list = useCases(stateFilter);\n\n if (!list) {\n return <Loading />;\n }\n if (list instanceof TalerError) {\n return <ErrorLoading error={list} />;\n }\n\n if (list.data.type === \"fail\") {\n switch (list.data.case) {\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.Forbidden:\n case HttpStatusCode.NotFound:\n case HttpStatusCode.Conflict:\n return <Officer />;\n default:\n assertUnreachable(list.data);\n }\n }\n\n const { records } = list.data.body;\n\n return (\n <CasesUI\n records={records}\n onFirstPage={\n list.pagination && !list.pagination.isFirstPage\n ? list.pagination.reset\n : undefined\n }\n onNext={\n list.pagination && !list.pagination.isLastPage\n ? list.pagination.loadMore\n : undefined\n }\n filter={stateFilter}\n onChangeFilter={setStateFilter}\n />\n );\n}\n\nexport const PeopleIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z\"\n />\n </svg>\n);\n\nexport const HomeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\"\n />\n </svg>\n);\n\nfunction Pagination({\n onFirstPage,\n onNext,\n}: {\n onFirstPage?: () => void;\n onNext?: () => void;\n}) {\n const { i18n } = useTranslationContext();\n return (\n <nav\n class=\"flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 rounded-lg\"\n aria-label=\"Pagination\"\n >\n <div class=\"flex flex-1 justify-between sm:justify-end\">\n <button\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onFirstPage}\n onClick={onFirstPage}\n >\n <i18n.Translate>First page</i18n.Translate>\n </button>\n <button\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 ml-3 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onNext}\n onClick={onNext}\n >\n <i18n.Translate>Next</i18n.Translate>\n </button>\n </div>\n </nav>\n );\n}\n", "import { useState } from \"preact/hooks\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AmountString, HttpStatusCode, OfficerAccount, OperationFail, TalerExchangeApi, TalerExchangeResultByMethod, TalerHttpError } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook } from \"swr\";\nimport { useExchangeApiContext } from \"../context/config.js\";\nimport { useOfficer } from \"./useOfficer.js\";\nimport { AmlExchangeBackend } from \"../utils/types.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nconst PAGE_SIZE = 10;\n/**\n * FIXME: mutate result when balance change (transaction )\n * @param account\n * @param args\n * @returns\n */\nexport function useCases(state: AmlExchangeBackend.AmlState) {\n const officer = useOfficer();\n const session = officer.state === \"ready\" ? officer.account : undefined;\n const { api } = useExchangeApiContext();\n\n const [offset, setOffset] = useState<string>();\n\n async function fetcher([officer, state, offset]: [OfficerAccount, AmlExchangeBackend.AmlState, string | undefined]) {\n return await api.getDecisionsByState(officer, state, {\n order: \"asc\", offset, limit: PAGE_SIZE + 1\n })\n }\n\n const { data, error } = useSWR<TalerExchangeResultByMethod<\"getDecisionsByState\">, TalerHttpError>(\n !session ? undefined : [session, state, offset],\n fetcher,\n );\n\n // const [lastAfter, setLastAfter] = useState<\n // HttpResponse<AmlExchangeBackend.AmlRecords, AmlExchangeBackend.AmlError>\n // >({ loading: true });\n\n // useEffect(() => {\n // if (afterData) setLastAfter(afterData);\n // }, [afterData]);\n\n // if (afterError) {\n // return afterError.cause;\n // }\n\n // if the query returns less that we ask, then we have reach the end or beginning\n const isLastPage =\n data && data.type === \"ok\" && data.body.records.length <= PAGE_SIZE;\n const isFirstPage = !offset;\n\n const pagination = {\n isLastPage,\n isFirstPage,\n loadMore: () => {\n if (isLastPage || data?.type !== \"ok\") return;\n const list = data.body.records\n setOffset(String(list[list.length - 1].rowid));\n },\n reset: () => {\n setOffset(undefined)\n },\n };\n\n // const public_accountslist = data?.type !== \"ok\" ? [] : data.body.public_accounts;\n if (!session) {\n return {\n data: {\n type: \"fail\",\n case: HttpStatusCode.Unauthorized,\n detail: {}\n } as OperationFail<never>\n }\n }\n\n if (data) {\n if (data.type === \"fail\") {\n return { data }\n }\n const records = isLastPage ? data.body.records : removeLastElement(data.body.records)\n return { data: { type: \"ok\" as const, body: { records } }, pagination }\n }\n if (error) {\n return error;\n }\n return undefined;\n}\n\nfunction removeLastElement<T>(list: Array<T>): Array<T> {\n if (list.length === 0) {\n return list;\n }\n return list.slice(0, -1)\n}", "import { Fragment, h } from \"preact\";\nimport { useOfficer } from \"../hooks/useOfficer.js\";\nimport { HandleAccountNotReady } from \"./HandleAccountNotReady.js\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { uiSettings } from \"../settings.js\";\nimport { getInitialBackendBaseURL } from \"../hooks/useBackend.js\";\n\nexport function Officer() {\n const officer = useOfficer();\n const { i18n } = useTranslationContext()\n if (officer.state !== \"ready\") {\n return <HandleAccountNotReady officer={officer} />;\n }\n\n const url = new URL(getInitialBackendBaseURL())\n const signupEmail = uiSettings.signupEmail ?? `aml-signup@${url.hostname}`\n\n return (\n <div>\n <h1 class=\"my-2 text-3xl font-bold tracking-tight text-gray-900 \">\n <i18n.Translate>Public key</i18n.Translate>\n </h1>\n <div class=\"max-w-xl text-base leading-7 text-gray-700 lg:max-w-lg\">\n <p class=\"mt-6 font-mono break-all\">{officer.account.id}</p>\n </div>\n <p>\n <a\n href={`mailto:${signupEmail}?subject=${encodeURIComponent(\"Request AML signup\")}&body=${encodeURIComponent(`I want my AML account\\n\\n\\nPubKey: ${officer.account.id}`)}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n class=\"m-4 block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700\"\n >\n <i18n.Translate>Request account activation</i18n.Translate>\n </a>\n </p>\n <p>\n <button\n type=\"button\"\n onClick={() => {\n officer.lock();\n }}\n class=\"m-4 block rounded-md border-0 bg-gray-200 px-3 py-2 text-center text-sm text-black shadow-sm \"\n >\n <i18n.Translate>Lock account</i18n.Translate>\n </button>\n </p>\n <p>\n <button\n type=\"button\"\n onClick={() => {\n officer.forget();\n }}\n class=\"m-4 block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n <i18n.Translate>Forget account</i18n.Translate>\n </button>\n </p>\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { OfficerNotReady } from \"../hooks/useOfficer.js\";\nimport { CreateAccount } from \"./CreateAccount.js\";\nimport { UnlockAccount } from \"./UnlockAccount.js\";\nimport { assertUnreachable } from \"@gnu-taler/taler-util\";\n\nexport function HandleAccountNotReady({\n officer,\n}: {\n officer: OfficerNotReady;\n}): VNode {\n if (officer.state === \"not-found\") {\n return (\n <CreateAccount\n onNewAccount={(password) => {\n officer.create(password);\n }}\n />\n );\n }\n\n if (officer.state === \"locked\") {\n return (\n <UnlockAccount\n onRemoveAccount={() => {\n officer.forget();\n }}\n onAccountUnlocked={async (pwd) => {\n await officer.tryUnlock(pwd);\n }}\n />\n );\n }\n assertUnreachable(officer)\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport {\n createNewForm,\n notifyError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useSettings } from \"../hooks/useSettings.js\";\n\nexport function CreateAccount({\n onNewAccount,\n}: {\n onNewAccount: (password: string) => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const Form = createNewForm<{\n password: string;\n repeat: string;\n }>();\n const [settings] = useSettings()\n\n return (\n <div class=\"flex min-h-full flex-col \">\n <div class=\"sm:mx-auto sm:w-full sm:max-w-md\">\n <h2 class=\"mt-6 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">\n <i18n.Translate>Create account</i18n.Translate>\n </h2>\n </div>\n\n <div class=\"mt-10 sm:mx-auto sm:w-full sm:max-w-[480px] \">\n <div class=\"bg-gray-100 px-6 py-6 shadow sm:rounded-lg sm:px-12\">\n <Form.Provider\n computeFormState={(v) => {\n return {\n password: {\n error: !v.password\n ? i18n.str`required`\n : settings.allowInsecurePassword\n ? undefined\n : v.password.length < 8\n ? i18n.str`should have at least 8 characters`\n : !v.password.match(/[a-z]/) && v.password.match(/[A-Z]/)\n ? i18n.str`should have lowercase and uppercase characters`\n : !v.password.match(/\\d/)\n ? i18n.str`should have numbers`\n : !v.password.match(/[^a-zA-Z\\d]/)\n ? i18n.str`should have at least one character which is not a number or letter`\n : undefined,\n },\n repeat: {\n error: !v.repeat\n ? i18n.str`required`\n : v.repeat !== v.password\n ? i18n.str`doesn't match`\n : undefined,\n },\n };\n }}\n onSubmit={async (v, s) => {\n const error = s?.password?.error ?? s?.repeat?.error;\n if (error) {\n notifyError(\n i18n.str`Can't create account`,\n error as TranslatedString,\n );\n } else {\n onNewAccount(v.password!);\n }\n }}\n >\n <div class=\"mb-4\">\n <Form.InputLine\n label={i18n.str`Password`}\n name=\"password\"\n type=\"password\"\n help={\n settings.allowInsecurePassword\n ? i18n.str`short password are insecure, turn off insecure password in settings`\n : i18n.str`lower and upper case letters, number and special character`\n }\n required\n />\n </div>\n <div class=\"mb-4\">\n <Form.InputLine\n label={i18n.str`Repeat password`}\n name=\"repeat\"\n type=\"password\"\n required\n />\n </div>\n\n <div class=\"mt-8\">\n <button\n type=\"submit\"\n class=\"flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Create</i18n.Translate>\n </button>\n </div>\n </Form.Provider>\n </div>\n </div>\n </div>\n );\n}\n", "import { TranslatedString, UnwrapKeyError } from \"@gnu-taler/taler-util\";\nimport { createNewForm, notifyError, notifyInfo, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\n\nexport function UnlockAccount({\n onAccountUnlocked,\n onRemoveAccount,\n}: {\n onAccountUnlocked: (password: string) => Promise<void>;\n onRemoveAccount: () => void;\n}): VNode {\n const { i18n } = useTranslationContext()\n const Form = createNewForm<{\n password: string;\n }>();\n\n return (\n <div class=\"flex min-h-full flex-col \">\n <div class=\"sm:mx-auto sm:w-full sm:max-w-md\">\n <h1 class=\"mt-6 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">\n <i18n.Translate>Account locked</i18n.Translate>\n </h1>\n <p class=\"mt-6 text-lg leading-8 text-gray-600\">\n <i18n.Translate>Your account is normally locked anytime you reload. To unlock type\n your password again.</i18n.Translate>\n </p>\n </div>\n\n <div class=\"mt-10 sm:mx-auto sm:w-full sm:max-w-[480px] \">\n <div class=\"bg-gray-100 px-6 py-6 shadow sm:rounded-lg sm:px-12\">\n <Form.Provider\n onSubmit={async (v) => {\n try {\n await onAccountUnlocked(v.password!);\n notifyInfo(i18n.str`Account unlocked`);\n } catch (e) {\n if (e instanceof UnwrapKeyError) {\n notifyError(\n \"Could not unlock account\" as any,\n e.message as any,\n );\n } else {\n throw e;\n }\n }\n }}\n >\n <div class=\"mb-4\">\n <Form.InputLine\n label={i18n.str`Password`}\n name=\"password\"\n type=\"password\"\n required\n />\n </div>\n\n <div class=\"mt-8\">\n <button\n type=\"submit\"\n class=\"flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Unlock</i18n.Translate>\n </button>\n </div>\n </Form.Provider>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n onRemoveAccount();\n }}\n class=\"m-4 block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n <i18n.Translate>Forget account</i18n.Translate>\n </button>\n </div>\n </div>\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\nexport interface UiSettings {\n backendBaseURL?: string;\n signupEmail?: string;\n}\n\n/**\n * Global settings for the UI.\n */\nconst defaultSettings: UiSettings = {\n};\n\nexport const uiSettings: UiSettings =\n \"talerExchangeAmlSettings\" in globalThis\n ? (globalThis as any).talerExchangeAmlSettings\n : defaultSettings;\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 import { canonicalizeBaseUrl } from \"@gnu-taler/taler-util\";\nimport { uiSettings } from \"../settings.js\";\n\n\nexport function getInitialBackendBaseURL(): string {\n const overrideUrl =\n typeof localStorage !== \"undefined\"\n ? localStorage.getItem(\"exchange-base-url\")\n : undefined;\n\n let result: string;\n\n if (!overrideUrl) {\n //normal path\n if (!uiSettings.backendBaseURL) {\n console.error(\n \"ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'\",\n ); \n result = typeof (window as any) !== \"undefined\" ? window.origin : \"localhost\"\n } else {\n result = uiSettings.backendBaseURL;\n }\n } else {\n // testing/development path\n result = overrideUrl\n }\n try {\n return canonicalizeBaseUrl(result)\n } catch (e) {\n //fall back\n return canonicalizeBaseUrl(window.origin)\n }\n}\n", "import { AbsoluteTime, Amounts, HttpStatusCode, TalerExchangeApi, TalerProtocolTimestamp, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { LocalNotificationBanner, useLocalNotification, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useExchangeApiContext } from \"../context/config.js\";\nimport { useOfficer } from \"../hooks/useOfficer.js\";\nimport { Pages } from \"../pages.js\";\nimport { AntiMoneyLaunderingForm } from \"./AntiMoneyLaunderingForm.js\";\nimport { HandleAccountNotReady } from \"./HandleAccountNotReady.js\";\nimport { uiForms } from \"../forms/declaration.js\";\n\nexport function NewFormEntry({\n account,\n type,\n}: {\n account?: string;\n type?: string;\n}): VNode {\n const { i18n } = useTranslationContext()\n const officer = useOfficer();\n const { api } = useExchangeApiContext()\n const [notification, notify, handleError] = useLocalNotification()\n\n if (!account) {\n return <div>no account</div>;\n }\n if (!type) {\n return <SelectForm account={account} />;\n }\n if (officer.state !== \"ready\") {\n return <HandleAccountNotReady officer={officer} />;\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n\n <AntiMoneyLaunderingForm\n account={account}\n formId={type}\n onSubmit={async (justification, new_state, new_threshold) => {\n\n const decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\"> = {\n justification: JSON.stringify(justification),\n decision_time: TalerProtocolTimestamp.now(),\n h_payto: account,\n new_state,\n new_threshold: Amounts.stringify(new_threshold),\n kyc_requirements: undefined\n }\n await handleError(async () => {\n const resp = await api.addDecisionDetails(officer.account, decision);\n if (resp.type === \"ok\") {\n window.location.href = Pages.cases.url;\n return;\n }\n switch (resp.case) {\n case HttpStatusCode.Forbidden:\n case HttpStatusCode.Unauthorized: return notify({\n type: \"error\",\n title: i18n.str`Wrong credentials for \"${officer.account}\"`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n })\n case HttpStatusCode.NotFound: return notify({\n type: \"error\",\n title: i18n.str`Officer or account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n })\n case HttpStatusCode.Conflict: return notify({\n type: \"error\",\n title: i18n.str`Officer disabled or more recent decision was already submitted.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n })\n }\n })\n }}\n />\n </Fragment>\n );\n}\n\nfunction SelectForm({ account }: { account: string }) {\n const { i18n } = useTranslationContext()\n return (\n <div>\n <pre>New form for account: {account.substring(0, 16)}...</pre>\n {uiForms.forms(i18n).map((form, idx) => {\n return (\n <a\n href={Pages.newFormEntry.url({ account, type: form.id })}\n class=\"m-4 block rounded-md w-fit border-0 p-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-600\"\n >\n {form.label}\n </a>\n );\n })}\n </div>\n );\n}\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';\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", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { createHashHistory } from \"history\";\nimport { ComponentChildren, h as create, createContext, VNode } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\n\ntype ContextType = {\n onChange: (listener: () => void) => VoidFunction\n}\nconst nullChangeListener = { onChange: () => () => { } }\nconst Context = createContext<ContextType>(nullChangeListener);\n\nexport const usePathChangeContext = (): ContextType => useContext(Context);\n\nexport function HashPathProvider({ children }: { children: ComponentChildren }): VNode {\n const history = createHashHistory();\n return create(Context.Provider, { value: { onChange: history.listen }, children }, children)\n}\n\ntype PageDefinition<DynamicPart extends Record<string, string>> = {\n pattern: string;\n (params: DynamicPart): string;\n};\n\nfunction replaceAll(\n pattern: string,\n vars: Record<string, string>,\n values: Record<string, string>,\n): string {\n let result = pattern;\n for (const v in vars) {\n result = result.replace(vars[v], !values[v] ? \"\" : values[v]);\n }\n return result;\n}\n\nexport function pageDefinition<T extends Record<string, string>>(\n pattern: string,\n): PageDefinition<T> {\n const patternParams = pattern.match(/(:[\\w?]*)/g);\n if (!patternParams)\n throw Error(\n `page definition pattern ${pattern} doesn't have any parameter`,\n );\n\n const vars = patternParams.reduce((prev, cur) => {\n const pName = cur.match(/(\\w+)/g);\n\n //skip things like :? in the path pattern\n if (!pName || !pName[0]) return prev;\n const name = pName[0];\n return { ...prev, [name]: cur };\n }, {} as Record<string, string>);\n\n const f = (values: T): string => replaceAll(pattern, vars, values);\n f.pattern = pattern;\n return f;\n}\n\nexport type PageEntry<T = unknown> = T extends Record<string, string>\n ? {\n url: PageDefinition<T>;\n view: (props: T) => VNode;\n name: TranslatedString,\n Icon?: () => VNode,\n }\n : T extends unknown\n ? {\n url: string;\n view: (props: {}) => VNode;\n name: TranslatedString,\n Icon?: () => VNode,\n }\n : never;\n\nexport function Router({\n pageList,\n onNotFound,\n}: {\n pageList: Array<PageEntry<any>>;\n onNotFound: () => VNode;\n}): VNode {\n const current = useCurrentLocation(pageList);\n if (current !== undefined) {\n return create(current.page.view, current.values);\n }\n return onNotFound();\n}\n\ntype Location = {\n page: PageEntry<any>;\n path: string;\n values: Record<string, string>;\n};\nexport function useCurrentLocation(pageList: Array<PageEntry<any>>): Location | undefined {\n const [currentLocation, setCurrentLocation] = useState<Location | null | undefined>(null);\n const path = usePathChangeContext();\n useEffect(() => {\n return path.onChange(() => {\n const result = doSync(window.location.hash, new URLSearchParams(window.location.search), pageList);\n setCurrentLocation(result);\n });\n }, []);\n if (currentLocation === null) {\n return doSync(window.location.hash, new URLSearchParams(window.location.search), pageList);\n }\n return currentLocation;\n}\n\nexport function useChangeLocation() {\n const [location, setLocation] = useState(window.location.hash)\n const path = usePathChangeContext()\n useEffect(() => {\n return path.onChange(() => {\n setLocation(window.location.hash)\n });\n }, []);\n return location;\n}\n\n/**\n * Search path in the pageList\n * get the values from the path found\n * add params from searchParams\n *\n * @param path\n * @param params\n */\nexport function doSync(path: string, params: URLSearchParams, pageList: Array<PageEntry<any>>): Location | undefined {\n for (let idx = 0; idx < pageList.length; idx++) {\n const page = pageList[idx];\n if (typeof page.url === \"string\") {\n if (page.url === path) {\n const values: Record<string, string> = {};\n params.forEach((v, k) => {\n values[k] = v;\n });\n return { page, values, path };\n }\n } else {\n const values = doestUrlMatchToRoute(path, page.url.pattern);\n if (values !== undefined) {\n params.forEach((v, k) => {\n values[k] = v;\n });\n return { page, values, path };\n }\n }\n }\n return undefined;\n}\n\nfunction doestUrlMatchToRoute(\n url: string,\n route: string,\n): undefined | Record<string, string> {\n const paramsPattern = /(?:\\?([^#]*))?$/;\n // const paramsPattern = /(?:\\?([^#]*))?(#.*)?$/;\n const params = url.match(paramsPattern);\n const urlWithoutParams = url.replace(paramsPattern, \"\");\n\n const result: Record<string, string> = {};\n if (params && params[1]) {\n const paramList = params[1].split(\"&\");\n for (let i = 0; i < paramList.length; i++) {\n const idx = paramList[i].indexOf(\"=\");\n const name = paramList[i].substring(0, idx);\n const value = paramList[i].substring(idx + 1);\n result[decodeURIComponent(name)] = decodeURIComponent(value);\n }\n }\n const urlSeg = urlWithoutParams.split(\"/\");\n const routeSeg = route.split(\"/\");\n let max = Math.max(urlSeg.length, routeSeg.length);\n for (let i = 0; i < max; i++) {\n if (routeSeg[i] && routeSeg[i].charAt(0) === \":\") {\n const param = routeSeg[i].replace(/(^:|[+*?]+$)/g, \"\");\n\n const flags = (routeSeg[i].match(/[+*?]+$/) || EMPTY)[0] || \"\";\n const plus = ~flags.indexOf(\"+\");\n const star = ~flags.indexOf(\"*\");\n const val = urlSeg[i] || \"\";\n\n if (!val && !star && (flags.indexOf(\"?\") < 0 || plus)) {\n return undefined;\n }\n result[param] = decodeURIComponent(val);\n if (plus || star) {\n result[param] = urlSeg.slice(i).map(decodeURIComponent).join(\"/\");\n break;\n }\n } else if (routeSeg[i] !== urlSeg[i]) {\n return undefined;\n }\n }\n return result;\n}\nconst EMPTY: Record<string, string> = {};\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { AntiMoneyLaunderingForm } from \"./pages/AntiMoneyLaunderingForm.js\";\nimport { CaseDetails } from \"./pages/CaseDetails.js\";\nimport { Cases, HomeIcon, PeopleIcon } from \"./pages/Cases.js\";\nimport { NewFormEntry } from \"./pages/NewFormEntry.js\";\nimport { Officer } from \"./pages/Officer.js\";\nimport { PageEntry, pageDefinition } from \"./route.js\";\n// import homeLogo from \"./assets/home.svg\";\n// import peopleLogo from \"./assets/people.svg\";\nconst cases: PageEntry = {\n url: \"#/cases\",\n view: Cases,\n name: \"Cases\" as TranslatedString,\n Icon: HomeIcon,\n};\n\nconst officer: PageEntry = {\n url: \"#/officer\",\n view: Officer,\n name: \"Officer\" as TranslatedString,\n Icon: PeopleIcon,\n};\n\nconst account: PageEntry<{ account: string }> = {\n url: pageDefinition(\"#/account/:account\"),\n view: CaseDetails,\n name: \"Account\" as TranslatedString,\n // icon: () => undefined,\n};\n\nconst newFormEntry: PageEntry<{ account?: string; type?: string }> = {\n url: pageDefinition(\"#/account/:account/new/:type?\"),\n view: NewFormEntry,\n name: \"New Form\" as TranslatedString,\n // icon: () => undefined,\n};\n\n\nexport const Pages = {\n cases,\n officer,\n account,\n newFormEntry,\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 { App } from \"./App.js\";\nimport { h, render } from \"preact\";\n\nconst app = document.getElementById(\"app\");\n\nrender(<App />, app as any);\n"],
- "mappings": "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AAE,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,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,I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",
- "names": ["undefined", "v", "sign", "n", "i", "x", "add", "a", "b", "r", "base", "l", "j", "y", "d", "c", "l2", "q", "self", "_2", "t", "fn", "p", "e", "isValid", "max", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "parse", "self", "table", "a", "r", "lexer", "c", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "this", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "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", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "createContext", "defaultValue", "contextId", "Consumer", "contextValue", "Provider", "subs", "ctx", "_props", "old", "splice", "isValidElement", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "getHookState", "index", "type", "options", "__h", "currentComponent", "currentHook", "hooks", "__H", "__", "length", "push", "__V", "EMPTY", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "currentIndex", "_reducer", "__c", "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", "useImperativeHandle", "ref", "createHandle", "concat", "factory", "useCallback", "useContext", "context", "provider", "sub", "value", "useDebugValue", "formatter", "useErrorBoundary", "cb", "errState", "componentDidCatch", "err", "errorInfo", "undefined", "useId", "root", "__v", "__m", "mask", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "invokeCleanup", "invokeEffect", "e", "__e", "afterNextFrame", "raf", "done", "clearTimeout", "timeout", "HAS_RAF", "cancelAnimationFrame", "setTimeout", "requestAnimationFrame", "hook", "comp", "cleanup", "oldArgs", "newArgs", "some", "arg", "f", "previousComponent", "prevRaf", "oldBeforeDiff", "oldBeforeRender", "oldAfterDiff", "oldCommit", "oldBeforeUnmount", "diffed", "unmount", "__b", "vnode", "commitQueue", "hasErrored", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "is", "x", "y", "PureComponent", "p", "this", "memo", "c", "comparer", "shouldUpdate", "nextProps", "ref", "updateRef", "call", "current", "Memoed", "shouldComponentUpdate", "createElement", "displayName", "name", "prototype", "isReactComponent", "forwardRef", "fn", "Forwarded", "clone", "$$typeof", "REACT_FORWARD_SYMBOL", "render", "__f", "detachedClone", "vnode", "detachedParent", "parentDom", "__c", "forEach", "effect", "__H", "__P", "__k", "map", "child", "removeOriginal", "originalParent", "__v", "__e", "insertBefore", "__d", "Suspense", "__u", "_suspenders", "suspended", "component", "__", "__a", "lazy", "loader", "prom", "error", "Lazy", "then", "exports", "default", "e", "SuspenseList", "_next", "_map", "ContextProvider", "getChildContext", "context", "children", "Portal", "_this", "container", "_container", "componentWillUnmount", "_temp", "nodeType", "parentNode", "childNodes", "appendChild", "push", "before", "removeChild", "splice", "indexOf", "createPortal", "el", "containerInfo", "parent", "callback", "textContent", "preactRender", "hydrate", "preactHydrate", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "createFactory", "type", "bind", "isValidElement", "element", "REACT_ELEMENT_TYPE", "cloneElement", "preactCloneElement", "apply", "arguments", "unmountComponentAtNode", "findDOMNode", "base", "Fragment", "startTransition", "cb", "useDeferredValue", "val", "useTransition", "useLayoutEffect", "useSyncExternalStore", "subscribe", "getSnapshot", "value", "_useState", "useState", "_instance", "_getSnapshot", "forceUpdate", "useEffect", "oldDiffHook", "mapFn", "Children", "oldCatchError", "oldUnmount", "resolve", "CAMEL_PROPS", "IS_DOM", "onChangeInputType", "oldEventHook", "currentComponent", "classNameDescriptor", "oldVNodeHook", "oldBeforeRender", "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", "version", "unstable_batchedUpdates", "flushSync", "StrictMode", "useInsertionEffect", "index", "Component", "isPureReactComponent", "state", "options", "__b", "Symbol", "for", "toChildArray", "count", "length", "only", "normalized", "toArray", "newVNode", "oldVNode", "errorInfo", "unmount", "__R", "__h", "promise", "suspendingVNode", "suspendingComponent", "resolved", "onResolved", "onSuspensionComplete", "suspendedVNode", "setState", "pop", "wasHydrating", "document", "detachedComponent", "__O", "fallback", "list", "node", "delete", "revealOrder", "size", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "reverse", "set", "componentDidUpdate", "componentDidMount", "test", "key", "Object", "defineProperty", "configurable", "v", "writable", "event", "persist", "nativeEvent", "class", "normalizedProps", "nonCustomElement", "toLowerCase", "replace", "multiple", "Array", "isArray", "selected", "defaultValue", "className", "enumerable", "__r", "ReactCurrentDispatcher", "readContext", "__n", "arg", "useId", "useReducer", "useRef", "useImperativeHandle", "useMemo", "useCallback", "useContext", "useDebugValue", "createContext", "createRef", "e", "h", "a", "b", "k", "l", "m", "n", "p", "q", "d", "f", "c", "g", "r", "t", "u", "r", "i", "x", "n", "h", "l", "y", "d", "o", "p", "k", "c", "j2", "j3", "x2", "x3", "x4", "x5", "x6", "u", "m", "b", "z", "s", "sn", "t2", "t3", "t4", "d2", "d3", "d4", "d5", "h2", "h3", "h4", "h5", "r2", "g", "f", "a", "v", "q", "t", "j", "t22", "b2", "b3", "b4", "b5", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "s", "k", "m", "n", "i", "t", "h", "p", "q", "k", "n", "i", "b", "i", "i", "h", "fn", "m", "c", "i", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "timer", "CancellationToken", "a", "r", "n", "x", "c", "a2", "x2", "a", "b", "n", "r", "s", "r2", "i", "names", "normal", "small", "fn", "counter", "k", "i", "n", "j", "w", "t", "m", "q", "i", "c", "a", "b", "R", "n", "counter", "e", "base", "res", "v", "URL", "URLSearchParams", "x", "URL", "e", "s", "i", "s2", "LogLevel", "m", "e", "location", "c", "p", "x", "x", "c", "map", "i", "x", "c", "s", "x", "c", "e", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "TalerPreciseTimestamp", "t", "s", "TalerProtocolTimestamp", "t2", "Duration", "d", "s", "i", "d2", "n", "AbsoluteTime", "t2", "t", "at", "x", "c", "DenomKeyType", "t", "DenominationPubKey", "p2", "ExchangeProtocolVersion", "MerchantProtocolVersion", "n", "a", "d", "v", "N", "i", "j", "s", "c", "p", "hash", "d", "logger", "n", "TalerSignaturePurpose", "WalletAccountMergeFlags", "c", "p", "x", "bigint", "Edx25519", "L", "sign", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "bigint", "i", "b", "v", "s", "logger", "Headers", "r", "m", "v", "k", "e", "e", "r", "s", "error", "s", "p", "r", "TalerUriType", "TalerUriAction", "s", "c", "q", "URLSearchParams", "p", "v", "k", "TalerCorebankApi", "MonitorTimeframeParam", "TanChannel", "TalerExchangeApi", "AmlState", "TalerMerchantApi", "TokenFamilyKind", "HttpStatusCode", "LibtoolVersion", "compare", "v", "logger", "logger", "d", "s", "ReserveTransactionType", "logger", "logger", "CreditDebitIndicator", "logger", "ContractTermsUtil", "i", "x", "h", "k", "e", "hash", "d", "c", "e", "err", "x", "fnutil", "f", "x", "TransactionMajorState", "TransactionMinorState", "TransactionAction", "TransactionType", "WithdrawalType", "DenomLossEventType", "PaymentStatus", "TransactionAmountMode", "BalanceFlag", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "ExchangeUpdateStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "ProviderPaymentType", "TalerBankConversionCacheEviction", "TalerCoreBankCacheEviction", "TalerMerchantInstanceCacheEviction", "TalerMerchantManagementCacheEviction", "compare", "account", "account", "e", "logger", "s", "i", "c", "i", "x", "n", "c", "s", "NotificationType", "ObservabilityEventType", "logger", "h", "v", "k", "_", "p", "h", "e", "match", "l", "initial", "storage", "storage", "n", "h", "hash", "AbsoluteTime", "useState", "useEffect", "i", "map", "i18n", "error", "i18n", "AbsoluteTime", "error", "d", "logger", "RequestThrottler", "Duration", "DEFAULT_REQUEST_TIMEOUT_MS", "TalerError", "TalerErrorCode", "encodeBody", "getDefaultHeaders", "Headers", "e", "format", "_typeof", "obj", "add", "defaultOptions", "MILLISECONDS_IN_WEEK", "sign", "y", "M", "d", "a", "h", "H", "m", "s", "S", "formatters", "G", "localize", "Y", "R", "u", "Q", "q", "L", "w", "I", "D", "E", "e", "c", "i", "b", "B", "K", "k", "X", "x", "O", "z", "t", "T", "delimiter", "dateLongFormatter", "formatLong", "timeLongFormatter", "dateTimeLongFormatter", "formatDistance", "formatRelative", "ordinalNumber", "valueCallback", "locale", "_typeof", "obj", "o", "p", "_setPrototypeOf", "self", "e", "_getPrototypeOf", "i", "Setter", "ValueSetter", "DateToSystemTimezoneSetter", "_classCallCheck", "_defineProperties", "_createClass", "Parser", "match", "_inherits", "_createSuper", "_isNativeReflectConstruct", "_possibleConstructorReturn", "_assertThisInitialized", "_defineProperty", "EraParser", "parse", "sign", "n", "YearParser", "valueCallback", "LocalWeekYearParser", "ISOWeekYearParser", "ExtendedYearParser", "QuarterParser", "StandAloneQuarterParser", "MonthParser", "StandAloneMonthParser", "LocalWeekParser", "ISOWeekParser", "DateParser", "DayOfYearParser", "defaultOptions", "DayParser", "LocalDayParser", "StandAloneLocalDayParser", "ISODayParser", "AMPMParser", "AMPMMidnightParser", "DayPeriodParser", "Hour1to12Parser", "Hour0to23Parser", "Hour0To11Parser", "Hour1To24Parser", "MinuteParser", "SecondParser", "FractionOfSecondParser", "ISOTimezoneWithZParser", "ISOTimezoneParser", "TimestampSecondsParser", "TimestampMillisecondsParser", "parsers", "F", "s", "f", "formattingTokensRegExp", "longFormattingTokensRegExp", "escapedStringRegExp", "doubleQuoteRegExp", "unescapedLatinCharacterRegExp", "locale", "_loop", "cleanEscapedString", "setter", "a", "b", "_typeof", "obj", "formatDistanceLocale", "formatDistance", "formatDistance_default", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "formatLong_default", "formatRelativeLocale", "formatRelative", "formatRelative_default", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "localize", "argumentCallback", "localize_default", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "valueCallback", "match_default", "locale", "Context", "createContext", "initial", "useEffect", "h", "useContext", "createContext", "createContext", "Context", "createContext", "Context", "createContext", "__export", "p", "h", "e", "Duration", "error", "i18n", "TalerErrorCode", "h", "assertUnreachable", "s", "useState", "supportedLang", "useEffect", "e", "l", "lang", "Fragment", "VERSION", "GIT_HASH", "versionText", "h", "Fragment", "e", "AbsoluteTime", "useState", "i18n", "add", "createContext", "initial", "notify", "v", "useContext", "names", "error", "useEffect", "f", "b", "i", "Context", "q", "p", "i18n", "h", "error", "Context", "account", "officer", "b", "k", "i18n", "v", "toInteger", "requiredArgs", "_typeof", "obj", "toDate", "requiredArgs", "addMilliseconds", "requiredArgs", "toDate", "toInteger", "defaultOptions", "getDefaultOptions", "getTimezoneOffsetInMilliseconds", "_typeof", "obj", "isDate", "requiredArgs", "isValid", "requiredArgs", "isDate", "toDate", "subMilliseconds", "requiredArgs", "toInteger", "addMilliseconds", "MILLISECONDS_IN_DAY", "getUTCDayOfYear", "requiredArgs", "toDate", "startOfUTCISOWeek", "requiredArgs", "toDate", "getUTCISOWeekYear", "requiredArgs", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "requiredArgs", "getUTCISOWeekYear", "startOfUTCISOWeek", "MILLISECONDS_IN_WEEK", "getUTCISOWeek", "requiredArgs", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "startOfUTCWeek", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "toDate", "getUTCWeekYear", "requiredArgs", "toDate", "defaultOptions", "getDefaultOptions", "toInteger", "startOfUTCWeek", "startOfUTCWeekYear", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "getUTCWeekYear", "startOfUTCWeek", "MILLISECONDS_IN_WEEK", "getUTCWeek", "requiredArgs", "toDate", "startOfUTCWeek", "startOfUTCWeekYear", "addLeadingZeros", "sign", "formatters", "y", "addLeadingZeros", "M", "d", "a", "h", "H", "m", "s", "S", "lightFormatters_default", "dayPeriodEnum", "formatters", "G", "localize", "y", "lightFormatters_default", "Y", "getUTCWeekYear", "addLeadingZeros", "R", "getUTCISOWeekYear", "u", "Q", "q", "M", "L", "w", "getUTCWeek", "I", "getUTCISOWeek", "d", "D", "getUTCDayOfYear", "E", "e", "c", "i", "a", "b", "B", "h", "H", "K", "k", "m", "s", "S", "X", "formatTimezoneWithOptionalMinutes", "formatTimezone", "x", "O", "formatTimezoneShort", "z", "t", "T", "sign", "delimiter", "formatters_default", "dateLongFormatter", "formatLong", "timeLongFormatter", "dateTimeLongFormatter", "longFormatters", "longFormatters_default", "protectedDayOfYearTokens", "protectedWeekYearTokens", "isProtectedDayOfYearToken", "isProtectedWeekYearToken", "throwProtectedError", "format", "formatDistanceLocale", "formatDistance", "formatDistance_default", "buildFormatLongFn", "format", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "buildFormatLongFn", "formatLong_default", "formatRelativeLocale", "formatRelative", "formatRelative_default", "buildLocalizeFn", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "localize", "buildLocalizeFn", "argumentCallback", "localize_default", "buildMatchFn", "findIndex", "findKey", "buildMatchPatternFn", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "buildMatchPatternFn", "valueCallback", "buildMatchFn", "match_default", "locale", "formatDistance_default", "formatLong_default", "formatRelative_default", "localize_default", "match_default", "en_US_default", "defaultLocale_default", "en_US_default", "formattingTokensRegExp", "longFormattingTokensRegExp", "escapedStringRegExp", "doubleQuoteRegExp", "unescapedLatinCharacterRegExp", "format", "requiredArgs", "defaultOptions", "getDefaultOptions", "locale", "defaultLocale_default", "toInteger", "toDate", "isValid", "getTimezoneOffsetInMilliseconds", "subMilliseconds", "longFormatters_default", "cleanEscapedString", "formatters_default", "isProtectedWeekYearToken", "throwProtectedError", "isProtectedDayOfYearToken", "v", "a", "b", "cache", "isDate", "f", "h", "s", "error", "mutate", "i", "_", "u2", "f2", "q", "p", "fn", "use", "middleware", "i", "cache", "compare", "_", "t", "T", "error", "timer", "x", "SWRConfig", "useSWR", "officer", "account", "error", "AmlExchangeBackend", "AmlState", "account", "i18n", "v", "initial", "s", "f", "e", "s", "history", "i18n", "form", "format", "p", "initial", "a", "b", "i18n", "k", "account", "p", "e", "history", "format", "useSWR", "officer", "p", "state", "offset", "error", "i18n", "v", "s", "error", "i18n", "v", "e", "officer", "defaultSettings", "e", "officer", "i18n", "i18n", "v", "r", "p", "account", "i18n", "officer", "notify", "p", "i", "i", "k", "n", "invariant", "prefix", "hash", "location", "e", "location", "fn", "invariant", "encodePath", "decodePath", "path", "history", "a", "b", "encodedPath", "location", "n", "Context", "q", "history", "v", "f", "pageList", "p", "h", "location", "k", "i", "i18n", "error", "P", "h", "officer", "pageList", "location", "p"]
+ "sources": ["../../../../node_modules/.pnpm/big-integer@1.6.52/node_modules/big-integer/BigInteger.js", "../../../../node_modules/.pnpm/jed@1.1.1/node_modules/jed/jed.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", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/util.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/PureComponent.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/memo.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/forwardRef.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/Children.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense-list.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/portals.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/render.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/index.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/index.js", "../../../taler-util/src/nacl-fast.ts", "../../../taler-util/src/prng-browser.ts", "../../../taler-util/src/taler-error-codes.ts", "../../../taler-util/src/CancellationToken.ts", "../../../taler-util/src/amounts.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/logging.ts", "../../../taler-util/src/codec.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/http-common.ts", "../../../taler-util/src/operation.ts", "../../../taler-util/src/taleruri.ts", "../../../taler-util/src/http-client/types.ts", "../../../taler-util/src/http-status-codes.ts", "../../../taler-util/src/http-impl.missing.ts", "../../../taler-util/src/http.ts", "../../../taler-util/src/libtool-version.ts", "../../../taler-util/src/MerchantApiClient.ts", "../../../taler-util/src/RequestThrottler.ts", "../../../taler-util/src/ReserveTransaction.ts", "../../../taler-util/src/TaskThrottler.ts", "../../../taler-util/src/bank-api-client.ts", "../../../taler-util/src/contract-terms.ts", "../../../taler-util/src/errors.ts", "../../../taler-util/src/fnutils.ts", "../../../taler-util/src/transactions-types.ts", "../../../taler-util/src/wallet-types.ts", "../../../taler-util/src/http-client/utils.ts", "../../../taler-util/src/http-client/bank-conversion.ts", "../../../taler-util/src/http-client/bank-core.ts", "../../../taler-util/src/http-client/merchant.ts", "../../../taler-util/src/http-client/challenger.ts", "../../../taler-util/src/http-client/exchange.ts", "../../../taler-util/src/http-client/officer-account.ts", "../../../taler-util/src/i18n.ts", "../../../taler-util/src/iban.ts", "../../../taler-util/src/notifications.ts", "../../../taler-util/src/observability.ts", "../../../taler-util/src/timer.ts", "../../../taler-util/src/transaction-test-data.ts", "../../../taler-util/src/index.browser.ts", "../../../web-util/src/hooks/useLocalStorage.ts", "../../../web-util/src/utils/observable.ts", "../../../web-util/src/hooks/useLang.ts", "../../../web-util/src/hooks/useMemoryStorage.ts", "../../../web-util/src/hooks/useNotifications.ts", "../../../web-util/src/hooks/useAsyncAsHook.ts", "../../../web-util/src/utils/base64.ts", "../../../web-util/src/utils/request.ts", "../../../web-util/src/utils/http-impl.browser.ts", "../../../web-util/src/utils/http-impl.sw.ts", "../../../web-util/src/utils/route.ts", "../../../web-util/src/context/api.ts", "../../../web-util/src/context/translation.ts", "../../../../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/_lib/buildLocalizeFn/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/_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/startOfWeek/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/constants/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameDay/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/endOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/eachDayOfInterval/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfWeek/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/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/en-US/_lib/localize/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/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMinutes/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getSeconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Setter.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/constants.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/utils.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCDay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISODay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subDays/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/sub/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/index.js", "../../../web-util/src/context/bank-api.ts", "../../../web-util/src/context/activity.ts", "../../../web-util/src/context/challenger-api.ts", "../../../web-util/src/context/merchant-api.ts", "../../../web-util/src/context/exchange-api.ts", "../../../web-util/src/context/navigation.ts", "../../../web-util/src/context/wallet-integration.ts", "../../../web-util/src/components/utils.ts", "../../../web-util/src/components/Attention.tsx", "../../../web-util/src/components/CopyButton.tsx", "../../../web-util/src/components/ErrorLoading.tsx", "../../../web-util/src/components/LangSelector.tsx", "../../../web-util/src/components/Loading.tsx", "../../../web-util/src/components/Header.tsx", "../../../web-util/src/components/Footer.tsx", "../../../web-util/src/components/Button.tsx", "../../../web-util/src/components/ShowInputErrorLabel.tsx", "../../../web-util/src/components/NotificationBanner.tsx", "../../../web-util/src/components/ToastBanner.tsx", "../../../web-util/src/forms/Calendar.tsx", "../../../web-util/src/forms/Caption.tsx", "../../../web-util/src/forms/InputLine.tsx", "../../../web-util/src/forms/InputArray.tsx", "../../../web-util/src/forms/FormProvider.tsx", "../../../web-util/src/forms/forms.ts", "../../../web-util/src/forms/Group.tsx", "../../../web-util/src/forms/InputAbsoluteTime.tsx", "../../../web-util/src/forms/Dialog.tsx", "../../../web-util/src/forms/useField.ts", "../../../web-util/src/forms/InputAmount.tsx", "../../../web-util/src/forms/InputChoiceHorizontal.tsx", "../../../web-util/src/forms/InputChoiceStacked.tsx", "../../../web-util/src/forms/InputFile.tsx", "../../../web-util/src/forms/InputInteger.tsx", "../../../web-util/src/forms/InputSelectMultiple.tsx", "../../../web-util/src/forms/InputSelectOne.tsx", "../../../web-util/src/forms/InputText.tsx", "../../../web-util/src/forms/InputTextArea.tsx", "../../../web-util/src/forms/InputToggle.tsx", "../../../web-util/src/forms/DefaultForm.tsx", "../../../web-util/src/forms/TimePicker.tsx", "../../../web-util/src/forms/ui-form.ts", "../../../web-util/src/forms/converter.ts", "../../../web-util/src/stories.tsx", "../../src/App.tsx", "../../../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/core/dist/index.mjs", "../../../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/_internal/dist/index.mjs", "../../src/ExchangeAmlFrame.tsx", "../../src/Routing.tsx", "../../src/hooks/officer.ts", "../../src/hooks/preferences.ts", "../../src/pages/Cases.tsx", "../../src/hooks/useCases.ts", "../../src/hooks/form.ts", "../../src/pages/CreateAccount.tsx", "../../src/pages/Officer.tsx", "../../src/pages/HandleAccountNotReady.tsx", "../../src/pages/UnlockAccount.tsx", "../../src/context/ui-settings.ts", "../../../../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/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/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/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", "../../src/pages/CaseDetails.tsx", "../../src/context/ui-forms.ts", "../../src/forms/simplest.ts", "../../src/forms/index.ts", "../../src/hooks/useCaseDetails.ts", "../../src/pages/ShowConsolidated.tsx", "../../src/pages/CaseUpdate.tsx", "../../src/i18n/strings.ts", "../../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 || alphabet) 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 || alphabet) 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", "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", "/**\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", "/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\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 * An error response did not include an error code in the format expected by the client. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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. Details should be in the local logs. Check if you are using the latest available version or file a report with the developers.\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 in the expected format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 * The operation timed out. Trying again might help. Check the network connection.\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 protocol version given by the server does not follow the required format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 the right data format, but the content did not satisfy the protocol. Please file a bug report.\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 an option is set to an invalid value. Check the logs and fix the local 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 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. Please file a bug report.\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 token used by the client to authorize the request does not grant the required permissions for the request. Check the requirements and obtain a suitable authorization token to proceed.\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 GENERIC_TOKEN_PERMISSION_INSUFFICIENT = 16,\n\n\n /**\n * The HTTP method used is invalid for this endpoint. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you used the correct URL and/or file a report with the developers of the client software.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 were malformed and caused the server to not be able to handle the request. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check that you are using the correct syntax as of RFC 8905 and/or that you entered the bank account number correctly.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 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 body in the request could not be decompressed by the server. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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_COMPRESSION_INVALID = 28,\n\n\n /**\n * The currency involved in the operation is not acceptable for this server. Check your configuration and make sure the currency specified for a given service provider is one of the currencies supported by that provider.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\n * Returned with an HTTP status code of #MHD_HTTP_CONTENT_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 refused the request due to lack of proper 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 GENERIC_UNAUTHORIZED = 40,\n\n\n /**\n * The service refused the request as the given authorization token is unknown.\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 GENERIC_TOKEN_UNKNOWN = 41,\n\n\n /**\n * The service refused the request as the given authorization token expired.\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 GENERIC_TOKEN_EXPIRED = 42,\n\n\n /**\n * The service refused the request as the given authorization token is malformed.\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 GENERIC_TOKEN_MALFORMED = 43,\n\n\n /**\n * The service refused the request due to lack of proper rights on the resource.\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 GENERIC_FORBIDDEN = 44,\n\n\n /**\n * The service failed initialize its connection to the database. The system administrator should check that the service has permissions to access the database and that the database is running.\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. The system administrator should check that the database is running.\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. The system administrator should check that the database is running and review the service logs.\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. The system administrator should check that the database is running and review the service logs.\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 unrecoverable error trying to commit a transaction to the database. The system administrator should check that the database is running and review the service logs.\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; it should only happen if some client maliciously tries to create conflicting concurrent transactions. It could also be a sign of a missing index. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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). Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. The system administrator should check if the resource files are installed in the correct location and are readable to the 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 GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply. The system administrator should investigate the logs and check if the templates are well-formed.\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 coin is not known to the exchange (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_GENERIC_COIN_UNKNOWN = 1019,\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 failed to start a KYC attribute conversion helper process. It is likely configured incorrectly.\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_KYC_CONVERTER_FAILED = 1037,\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 client provided an unknown commitment for an age-withdraw 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 EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN = 1161,\n\n\n /**\n * The total sum of amounts from the denominations did overflow.\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_AGE_WITHDRAW_AMOUNT_OVERFLOW = 1162,\n\n\n /**\n * The total sum of value and fees from the denominations differs from the committed amount with fees.\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_AGE_WITHDRAW_AMOUNT_INCORRECT = 1163,\n\n\n /**\n * The original commitment differs from the calculated hash\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_AGE_WITHDRAW_REVEAL_INVALID_HASH = 1164,\n\n\n /**\n * The maximum age in the commitment is too large for the reserve\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_MAXIMUM_AGE_TOO_LARGE = 1165,\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 coin 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_COIN_HISTORY_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_RESERVE_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 * Withdrawal from the reserve requires age restriction to be set.\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_AGE_RESTRICTION_REQUIRED = 1681,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys or the helpers had no denominations (properly) configured.\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_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_BAD_GATEWAY (502).\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 * TOTP key 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_TOTP_KEY_INVALID = 1980,\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 reward ID is unknown. This could happen if the reward 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_REWARD_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 backend could not find the OTP device(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_OTP_DEVICE_UNKNOWN = 2021,\n\n\n /**\n * The account 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_ACCOUNT_UNKNOWN = 2022,\n\n\n /**\n * The wire hash 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 MERCHANT_GENERIC_H_WIRE_MALFORMED = 2023,\n\n\n /**\n * The currency specified in the operation does not work with the current state of the given resource.\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_GENERIC_CURRENCY_MISMATCH = 2024,\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_BAD_REQUEST (400).\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_BAD_REQUEST (400).\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 exchange does not support the selected bank account of the merchant. Likely the merchant had stale data on the bank accounts of the exchange and thus selected an inappropriate exchange when making the offer.\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_WIRE_METHOD_UNSUPPORTED = 2175,\n\n\n /**\n * The payment requires the wallet to select a choice from the choices array and pass it in the 'choice_index' field of 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 MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING = 2176,\n\n\n /**\n * The 'choice_index' field is 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 MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS = 2177,\n\n\n /**\n * The provided 'tokens' array does not match with the required input tokens of the order.\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_INPUT_TOKENS_MISMATCH = 2178,\n\n\n /**\n * Invalid token issue signature (blindly signed by merchant) for provided token.\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_TOKEN_ISSUE_SIG_INVALID = 2179,\n\n\n /**\n * Invalid token use signature (EdDSA, signed by wallet) for provided token.\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_TOKEN_USE_SIG_INVALID = 2180,\n\n\n /**\n * The provided number of tokens does not match the required 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 MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH = 2181,\n\n\n /**\n * The provided number of token envelopes does not match the specified 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 MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH = 2182,\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 * A token family with this ID but conflicting data 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_POST_TOKEN_FAMILY_CONFLICT = 2225,\n\n\n /**\n * The backend is unaware of a token family with the given ID.\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_PATCH_TOKEN_FAMILY_NOT_FOUND = 2226,\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 are waiting for the exchange to provide us with key material before checking the wire transfer.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS = 2258,\n\n\n /**\n * We are waiting for the exchange to provide us with the list of aggregated transactions.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST = 2259,\n\n\n /**\n * The endpoint indicated in the wire transfer does not belong to a GNU Taler exchange.\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_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE = 2260,\n\n\n /**\n * The exchange indicated in the wire transfer claims to know nothing about the wire transfer.\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_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND = 2261,\n\n\n /**\n * The interaction with the exchange is delayed due to rate limiting.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED = 2262,\n\n\n /**\n * We experienced a transient failure in our interaction with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE = 2263,\n\n\n /**\n * The response from the exchange was unacceptable and should be reviewed with an auditor.\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_EXCHANGE_TRANSFERS_HARD_FAILURE = 2264,\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_REWARD_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_REWARD_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_REWARD_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The reward 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_REWARD_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_REWARD_PICKUP_AMOUNT_EXCEEDS_REWARD_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_REWARD_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The merchant instance has no active bank accounts configured. However, at least one bank account must be available to create 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 merchant backend failed to obtain the current local time.\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; likely 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 * A conflicting order (sharing the same order identifier) already exists at this merchant backend instance.\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 order creation request is invalid because the given 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 order creation request is invalid because the delivery date given 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 order creation request is invalid because a wire deadline of \"never\" 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_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The order creation request is invalid because the given payment deadline 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 order creation request is invalid because the given refund deadline 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 * The backend does not trust any exchange that would allow funds to be wired to any bank account of this instance using the wire method specified with the order. Note that right now, we do not support the use of exchange bank accounts with mandatory currency conversion.\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_NO_EXCHANGES_FOR_WIRE_METHOD = 2509,\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. Deletion may work later after the offer has expired if it remains unpaid.\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 exceeds the original price paid by the customer.\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 * Only paid orders can be refunded, and the frontend specified an unpaid order to issue a refund for.\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 ever 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 token family slug provided in this order could not be found in the merchant 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 MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN = 2533,\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 amount transferred differs between what was submitted and what the exchange claimed.\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_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS = 2563,\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 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 MERCHANT_PRIVATE_ACCOUNT_DELETE_UNKNOWN_ACCOUNT = 2626,\n\n\n /**\n * The bank account specified in the request already exists at the merchant.\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_ACCOUNT_EXISTS = 2627,\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 requested exchange does not allow rewards.\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_REWARDS_NOT_ALLOWED = 2701,\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 rewards 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_REWARD_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the rewards 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_REWARD_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the reward, and it was configured for rewardping. However, the funds remaining are insufficient to cover the reward, 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_REWARD_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the reward.\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_REWARD_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 * The OTP device 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_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS = 2851,\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 * The requested resource could not be 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 AUDITOR_RESOURCE_NOT_FOUND = 3102,\n\n\n /**\n * The URI is missing a path component.\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 AUDITOR_URI_MISSING_PATH_COMPONENT = 3103,\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 * 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 client tried to register a new account under a reserved username (like 'admin' for example).\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_RESERVED_USERNAME_CONFLICT = 5120,\n\n\n /**\n * The client tried to register a new account with an username 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 BANK_REGISTER_USERNAME_REUSE = 5121,\n\n\n /**\n * The client tried to register a new account with a payto:// URI 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 BANK_REGISTER_PAYTO_URI_REUSE = 5122,\n\n\n /**\n * The client tried to delete an account with a non null 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 BANK_ACCOUNT_BALANCE_NOT_ZERO = 5123,\n\n\n /**\n * The client tried to create a transaction or an operation that credit an unknown account.\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_UNKNOWN_CREDITOR = 5124,\n\n\n /**\n * The client tried to create a transaction or an operation that debit an unknown account.\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_UNKNOWN_DEBTOR = 5125,\n\n\n /**\n * The client tried to perform an action prohibited for exchange accounts.\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_ACCOUNT_IS_EXCHANGE = 5126,\n\n\n /**\n * The client tried to perform an action reserved for exchange accounts.\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_ACCOUNT_IS_NOT_EXCHANGE = 5127,\n\n\n /**\n * Received currency conversion is wrong.\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_BAD_CONVERSION = 5128,\n\n\n /**\n * The account referenced in this operation is missing tan info for the chosen channel.\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_MISSING_TAN_INFO = 5129,\n\n\n /**\n * The client attempted to confirm a transaction with incomplete info.\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_INCOMPLETE = 5130,\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 BANK_TAN_RATE_LIMITED = 5131,\n\n\n /**\n * This TAN channel is not supported.\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 BANK_TAN_CHANNEL_NOT_SUPPORTED = 5132,\n\n\n /**\n * Failed to send TAN using the helper script. Either script is not found, or script timeout, or script 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 BANK_TAN_CHANNEL_SCRIPT_FAILED = 5133,\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 BANK_TAN_CHALLENGE_FAILED = 5134,\n\n\n /**\n * A non-admin user has tried to change their legal 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_NON_ADMIN_PATCH_LEGAL_NAME = 5135,\n\n\n /**\n * A non-admin user has tried to change their debt limit.\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_NON_ADMIN_PATCH_DEBT_LIMIT = 5136,\n\n\n /**\n * A non-admin user has tried to change their password whihout providing the current 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 BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD = 5137,\n\n\n /**\n * Provided old password does not match current password.\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_PATCH_BAD_OLD_PASSWORD = 5138,\n\n\n /**\n * An admin user has tried to become an 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 BANK_PATCH_ADMIN_EXCHANGE = 5139,\n\n\n /**\n * A non-admin user has tried to change their cashout account.\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_NON_ADMIN_PATCH_CASHOUT = 5140,\n\n\n /**\n * A non-admin user has tried to change their contact info.\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_NON_ADMIN_PATCH_CONTACT = 5141,\n\n\n /**\n * The client tried to create a transaction that credit the admin account.\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_ADMIN_CREDITOR = 5142,\n\n\n /**\n * The referenced challenge 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_CHALLENGE_NOT_FOUND = 5143,\n\n\n /**\n * The referenced challenge has expired.\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_TAN_CHALLENGE_EXPIRED = 5144,\n\n\n /**\n * A non-admin user has tried to create an account with 2fa.\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_NON_ADMIN_SET_TAN_CHANNEL = 5145,\n\n\n /**\n * A non-admin user has tried to set their minimum cashout amount.\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_NON_ADMIN_SET_MIN_CASHOUT = 5146,\n\n\n /**\n * Amount of currency conversion it less than the minimum 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 BANK_CONVERSION_AMOUNT_TO_SMALL = 5147,\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_CONTENT_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_CONTENT_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 a reward) 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_REWARD_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 * The exchange's self-reported base URL does not match the one that the wallet is using.\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_BASE_URL_MISMATCH = 7030,\n\n\n /**\n * The order has already been paid 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_PAID = 7031,\n\n\n /**\n * An exchange that is required for some request is currently 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_EXCHANGE_UNAVAILABLE = 7032,\n\n\n /**\n * An exchange entry is still used by the exchange, thus it can't be deleted without purging.\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_ENTRY_USED = 7033,\n\n\n /**\n * The wallet database is unavailable and the wallet thus is not operational.\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_DB_UNAVAILABLE = 7034,\n\n\n /**\n * A taler:// URI is malformed and 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_TALER_URI_MALFORMED = 7035,\n\n\n /**\n * A wallet-core request was cancelled and thus can't provide a 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_CORE_REQUEST_CANCELLED = 7036,\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_CONTENT_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 * The Donau failed to perform the operation as it could not find the private keys. This is a problem with the Donau 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 DONAU_GENERIC_KEYS_MISSING = 8607,\n\n\n /**\n * The signature of the charity key 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 DONAU_CHARITY_SIGNATURE_INVALID = 8608,\n\n\n /**\n * The charity 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 DONAU_CHARITY_NOT_FOUND = 8609,\n\n\n /**\n * The donation amount specified in the request exceeds the limit of the charity.\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 DONAU_EXCEEDING_DONATION_LIMIT = 8610,\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 * The client is unknown or unauthorized.\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 CHALLENGER_GENERIC_CLIENT_UNKNOWN = 9750,\n\n\n /**\n * The client is not authorized to use the given redirect URI.\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 CHALLENGER_GENERIC_CLIENT_FORBIDDEN_BAD_REDIRECT_URI = 9751,\n\n\n /**\n * The service failed to execute its helper process to send the challenge.\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 CHALLENGER_HELPER_EXEC_FAILED = 9752,\n\n\n /**\n * The grant is unknown to the service (it could also have 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 CHALLENGER_GRANT_UNKNOWN = 9753,\n\n\n /**\n * The code given is not even well-formed.\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 CHALLENGER_CLIENT_FORBIDDEN_BAD_CODE = 9754,\n\n\n /**\n * The service is not aware of the referenced validation process.\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 CHALLENGER_GENERIC_VALIDATION_UNKNOWN = 9755,\n\n\n /**\n * The code given 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 CHALLENGER_CLIENT_FORBIDDEN_INVALID_CODE = 9756,\n\n\n /**\n * Too many attempts have been made, validation is temporarily disabled for this address.\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 CHALLENGER_TOO_MANY_ATTEMPTS = 9757,\n\n\n /**\n * The PIN code provided is incorrect.\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 CHALLENGER_INVALID_PIN = 9758,\n\n\n /**\n * The token cannot be valid as no address was ever provided by the client.\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 CHALLENGER_MISSING_ADDRESS = 9759,\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", "/*\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) 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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n renderContext,\n} from \"./codec.js\";\nimport { CurrencySpecification } from \"./index.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 * Separator character between integer and fractional\n */\nexport const FRAC_SEPARATOR = \".\";\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\n/**\n * Immutable amount.\n */\nexport class Amount {\n static from(a: AmountLike): Amount {\n return new Amount(Amounts.parseOrThrow(a), 0);\n }\n\n static zeroOfCurrency(currency: string): Amount {\n return new Amount(Amounts.zeroOfCurrency(currency), 0);\n }\n\n add(...a: AmountLike[]): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.add(this.val, ...a);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n mult(n: number): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.mult(this, n);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n toJson(): AmountJson {\n return { ...this.val };\n }\n\n toString(): AmountString {\n return Amounts.stringify(this.val);\n }\n\n private constructor(\n private val: AmountJson,\n private saturated: number,\n ) {}\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 function codecForAmountString(): Codec<AmountString> {\n return {\n decode(x: any, c?: Context): AmountString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (Amounts.parse(x) === undefined) {\n throw new DecodingError(\n `invalid amount at ${renderContext(c)} got \"${x}\"`,\n );\n }\n return x as AmountString;\n },\n };\n}\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 = string | AmountString | AmountJson | Amount;\n\nexport interface DivmodResult {\n quotient: number;\n remainder: AmountJson;\n}\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 if (amt instanceof Amount) {\n return amt.toJson();\n }\n return amt;\n }\n\n static divmod(a1: AmountLike, a2: AmountLike): DivmodResult {\n const am1 = Amounts.jsonifyAmount(a1);\n const am2 = Amounts.jsonifyAmount(a2);\n if (am1.currency != am2.currency) {\n throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);\n }\n\n const x1 =\n BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);\n const x2 =\n BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);\n\n const quotient = x1 / x2;\n const remainderScaled = x1 % x2;\n\n return {\n quotient: Number(quotient),\n remainder: {\n currency: am1.currency,\n value: Number(remainderScaled / BigInt(amountFractionalBase)),\n fraction: Number(remainderScaled % BigInt(amountFractionalBase)),\n },\n };\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 * Check whether a string is a valid currency for a Taler amount.\n */\n static isCurrency(s: string): boolean {\n return /^[a-zA-Z]{1,11}$/.test(s);\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n *\n * Currency name size limit is 11 of ASCII letters\n * Fraction size limit is 8\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z]{1,11}):([0-9]+)([.][0-9]{1,8})?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || FRAC_SEPARATOR + \"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 (s instanceof Amount) {\n return s.toJson();\n }\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 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 multiplied 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): AmountString {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}` as AmountString;\n }\n\n static amountHasSameCurrency(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 isSameCurrency(curr1: string, curr2: string): boolean {\n return curr1.toLowerCase() === curr2.toLowerCase();\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 + FRAC_SEPARATOR;\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 static stringifyValueWithSpec(\n value: AmountJson,\n spec: CurrencySpecification,\n ): { currency: string; normal: string; small?: string } {\n const strValue = Amounts.stringifyValue(value);\n const pos = strValue.indexOf(FRAC_SEPARATOR);\n const originalPosition = pos < 0 ? strValue.length : pos;\n\n let currency = value.currency;\n const names = Object.keys(spec.alt_unit_names);\n let FRAC_POS_NEW_POSITION = originalPosition;\n //find symbol\n //FIXME: this should be based on a cache to speed up\n if (names.length > 0) {\n let unitIndex: string = \"0\"; //default entry by DD51\n names.forEach((index) => {\n const i = Number.parseInt(index, 10);\n if (Number.isNaN(i)) return; //skip\n if (originalPosition - i <= 0) return; //too big\n if (originalPosition - i < FRAC_POS_NEW_POSITION) {\n FRAC_POS_NEW_POSITION = originalPosition - i;\n unitIndex = index;\n }\n });\n currency = spec.alt_unit_names[unitIndex];\n }\n\n if (originalPosition === FRAC_POS_NEW_POSITION) {\n const { normal, small } = splitNormalAndSmall(\n strValue,\n originalPosition,\n spec,\n );\n return { currency, normal, small };\n }\n\n const intPart = strValue.substring(0, originalPosition);\n const fracPArt = strValue.substring(originalPosition + 1);\n //indexSize is always smaller than originalPosition\n const newValue =\n intPart.substring(0, FRAC_POS_NEW_POSITION) +\n FRAC_SEPARATOR +\n intPart.substring(FRAC_POS_NEW_POSITION) +\n fracPArt;\n const { normal, small } = splitNormalAndSmall(\n newValue,\n FRAC_POS_NEW_POSITION,\n spec,\n );\n return { currency, normal, small };\n }\n}\n\nfunction splitNormalAndSmall(\n decimal: string,\n fracSeparatorIndex: number,\n spec: CurrencySpecification,\n): { normal: string; small?: string } {\n let normal: string;\n let small: string | undefined;\n if (\n decimal.length - fracSeparatorIndex - 1 >\n spec.num_fractional_normal_digits\n ) {\n const limit = fracSeparatorIndex + spec.num_fractional_normal_digits + 1;\n normal = decimal.substring(0, limit);\n small = decimal.substring(limit);\n } else {\n normal = decimal;\n small = undefined;\n }\n return { normal, small };\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 //Include URL type for \"url\" and \"base\" params.\n constructor(url: string | URL, base?: string | URL) {\n let parsedBase = null;\n if (base !== undefined) {\n if (base instanceof URL) {\n base = base.href;\n }\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n if (url instanceof URL) {\n url = url.href;\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) 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\nlet globalLogLevel = LogLevel.Info;\nconst byTagLogLevel: Record<string, LogLevel> = {};\n\nlet nativeLogging: boolean = false;\n\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString\nError.prototype.toString = function () {\n if (\n this === null ||\n (typeof this !== \"object\" && typeof this !== \"function\")\n ) {\n throw new TypeError();\n }\n let name = this.name;\n name = name === undefined ? \"Error\" : `${name}`;\n let msg = this.message;\n msg = msg === undefined ? \"\" : `${msg}`;\n\n let cause = \"\";\n if (\"cause\" in this) {\n cause = `\\n Caused by: ${this.cause}`;\n }\n return `${name}: ${msg}${cause}`;\n};\n\nexport function getGlobalLogLevel(): string {\n return globalLogLevel;\n}\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nexport function enableNativeLogging() {\n nativeLogging = true;\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 writeNativeLog(\n message: any,\n tag: string,\n level: number,\n args: any[],\n): void {\n const logFn = (globalThis as any).__nativeLog;\n if (logFn) {\n let m: string;\n if (args.length == 0) {\n m = message;\n } else {\n m = message + \" \" + args.toString();\n }\n logFn(level, tag, message);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 2, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 3, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 4, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 1, args);\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", "/*\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\nimport { j2s } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\nconst logger = new Logger(\"codec.ts\");\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 * Return a codec for a value that must be a string.\n */\nexport function codecForStringURL(shouldEndWithSlash?: boolean): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return x;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n }\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForURL(shouldEndWithSlash?: boolean): Codec<URL> {\n return {\n decode(x: any, c?: Context): URL {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return url;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\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 function codecForLazy<V>(innerCodec: () => Codec<V>): Codec<V> {\n let instance: Codec<V> | undefined = undefined\n return {\n decode(x: any, c?: Context): V {\n if (instance === undefined) {\n instance = innerCodec()\n }\n return instance.decode(x, c);\n },\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 if (logger.shouldLogTrace()) {\n logger.trace(`offending value: ${j2s(x)}`);\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\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 reuse 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 * as argon2 from \"./argon2.js\";\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\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\nimport { AmountLike, Amounts } from \"./amounts.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 hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n ): 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 async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n if (tart) {\n return tart.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\n }\n return await argon2.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\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 global/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 public 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 public 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\n/**\n * This makes the assumption that the uint64 fits a float,\n * which should be true for all Taler protocol messages.\n */\nexport function bufferForUint64(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(8);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n if (n < 0 || !Number.isInteger(n)) {\n throw Error(\"non-negative integer expected\");\n }\n dv.setBigUint64(0, BigInt(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 MERCHANT_REFUND = 1102,\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 WALLET_PURSE_DELETE = 1220,\n WALLET_COIN_HISTORY = 1209,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n TALER_SIGNATURE_AML_DECISION = 1350,\n TALER_SIGNATURE_AML_QUERY = 1351,\n TALER_SIGNATURE_MASTER_AML_KEY = 1017,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport 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 const PublishedAgeRestrictionBaseKey: Edx25519PublicKey = decodeCrock(\n \"CH0VKFDZ2GWRWHQBBGEK9MWV5YDQVJ0RXEE0KYT3NMB69F0R96TG\",\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 < numPrivs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-commitment\"),\n salt: bufferForUint32(i),\n });\n\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n privs.push(priv);\n }\n\n for (let i = numPrivs; i < numPubs; i++) {\n const deriveSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-factor\"),\n salt: bufferForUint32(i),\n });\n const pub = await Edx25519.publicKeyDerive(\n PublishedAgeRestrictionBaseKey,\n deriveSeed,\n );\n pubs.push(pub);\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!\nexport type 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\nexport async 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\nexport async 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 nonce: EncryptionNonce,\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(nonce, key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n nonce: EncryptionNonce,\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(nonce, 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\nexport function amountToBuffer(amount: AmountLike): Uint8Array {\n const amountJ = Amounts.jsonifyAmount(amount);\n const buffer = new ArrayBuffer(8 + 4 + 12);\n const dvbuf = new DataView(buffer);\n const u8buf = new Uint8Array(buffer);\n const curr = stringToBytes(amountJ.currency);\n if (typeof dvbuf.setBigUint64 !== \"undefined\") {\n dvbuf.setBigUint64(0, BigInt(amountJ.value));\n } else {\n const arr = bigint(amountJ.value).toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n dvbuf.setUint8(offset++, arr[i]);\n }\n }\n dvbuf.setUint32(8, amountJ.fraction);\n u8buf.set(curr, 8 + 4);\n\n return u8buf;\n}\n\nexport function timestampRoundedToBuffer(\n ts: TalerProtocolTimestamp,\n): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.t_s) * BigInt(1000 * 1000);\n v.setBigUint64(0, s);\n } else {\n const s =\n ts.t_s === \"never\" ? bigint.zero : bigint(ts.t_s).multiply(1000 * 1000);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n\nexport function durationRoundedToBuffer(ts: TalerProtocolDuration): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.d_us);\n v.setBigUint64(0, s);\n } else {\n const s = ts.d_us === \"forever\" ? bigint.zero : bigint(ts.d_us);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\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, Context, renderContext } from \"./codec.js\";\n\ndeclare const flavor_AbsoluteTime: unique symbol;\ndeclare const flavor_TalerProtocolTimestamp: unique symbol;\ndeclare const flavor_TalerPreciseTimestamp: unique symbol;\n\nconst opaque_AbsoluteTime: unique symbol = Symbol(\"opaque_AbsoluteTime\");\n\n// FIXME: Make this opaque!\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n\n readonly _flavor?: typeof flavor_AbsoluteTime;\n\n // Make the type opaque, we only want our constructors\n // to able to create an AbsoluteTime value.\n [opaque_AbsoluteTime]: true;\n}\n\nexport interface TalerProtocolTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n readonly _flavor?: typeof flavor_TalerProtocolTimestamp;\n}\n\n/**\n * Precise timestamp, typically used in the wallet-core\n * API but not in other Taler APIs so far.\n */\nexport interface TalerPreciseTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n /**\n * Optional microsecond offset (non-negative integer).\n */\n readonly off_us?: number;\n\n readonly _flavor?: typeof flavor_TalerPreciseTimestamp;\n}\n\nexport namespace TalerPreciseTimestamp {\n export function now(): TalerPreciseTimestamp {\n const absNow = AbsoluteTime.now();\n return AbsoluteTime.toPreciseTimestamp(absNow);\n }\n\n export function round(t: TalerPreciseTimestamp): TalerProtocolTimestamp {\n return {\n t_s: t.t_s,\n };\n }\n\n export function fromSeconds(s: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(s),\n off_us: Math.floor((s - Math.floor(s)) / 1000 / 1000),\n };\n }\n\n export function fromMilliseconds(ms: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(ms / 1000),\n off_us: Math.floor((ms - Math.floor(ms / 1000) * 1000) * 1000),\n };\n }\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toProtocolTimestamp(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 isNever(t: TalerProtocolTimestamp): boolean {\n return t.t_s === \"never\";\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\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\n/**\n * Timeshift in milliseconds.\n */\nlet timeshift = 0;\n\n/**\n * Set timetravel offset in milliseconds.\n *\n * Use carefully and only for testing.\n */\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function toMilliseconds(d: Duration): number {\n if (d.d_ms === \"forever\") {\n return Number.MAX_VALUE;\n }\n return d.d_ms;\n }\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 /**\n * Compare two durations. Returns 0 when equal, -1 when a < b\n * and +1 when a > b.\n */\n export function cmp(d1: Duration, d2: Duration): 1 | 0 | -1 {\n if (d1.d_ms === \"forever\") {\n if (d2.d_ms === \"forever\") {\n return 0;\n }\n return 1;\n }\n if (d2.d_ms === \"forever\") {\n return -1;\n }\n if (d1.d_ms == d2.d_ms) {\n return 0;\n }\n if (d1.d_ms > d2.d_ms) {\n return 1;\n }\n return -1;\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 function fromSpec(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\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: Math.floor(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 fromMilliseconds(ms: number): Duration {\n return {\n d_ms: ms,\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 getStampMsNow(): number {\n return new Date().getTime();\n }\n\n export function getStampMsNever(): number {\n return Number.MAX_SAFE_INTEGER;\n }\n\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromMilliseconds(ms: number): AbsoluteTime {\n return {\n t_ms: ms,\n [opaque_AbsoluteTime]: true,\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, [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\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 isNever(t: AbsoluteTime): boolean {\n return t.t_ms === \"never\";\n }\n\n export function fromProtocolTimestamp(\n t: TalerProtocolTimestamp,\n ): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return {\n t_ms: t.t_s * 1000,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromStampMs(stampMs: number): AbsoluteTime {\n return {\n t_ms: stampMs,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromPreciseTimestamp(t: TalerPreciseTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n const offsetUs = t.off_us ?? 0;\n return {\n t_ms: t.t_s * 1000 + Math.floor(offsetUs / 1000),\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function toStampMs(at: AbsoluteTime): number {\n if (at.t_ms === \"never\") {\n return Number.MAX_SAFE_INTEGER;\n }\n return at.t_ms;\n }\n\n export function toPreciseTimestamp(at: AbsoluteTime): TalerPreciseTimestamp {\n if (at.t_ms == \"never\") {\n return {\n t_s: \"never\",\n };\n }\n const t_s = Math.floor(at.t_ms / 1000);\n const off_us = Math.floor(1000 * (at.t_ms - t_s * 1000));\n return {\n t_s,\n off_us,\n };\n }\n\n export function toProtocolTimestamp(\n at: AbsoluteTime,\n ): 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\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: t1.t_ms + d.d_ms, [opaque_AbsoluteTime]: true };\n }\n\n /**\n * Get the remaining duration until {@param t1}.\n *\n * If {@param t1} already happened, the remaining duration\n * is zero.\n */\n export function remaining(t1: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return Duration.getForever();\n }\n const stampNow = now();\n if (stampNow.t_ms === \"never\") {\n throw Error(\"invariant violated\");\n }\n return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_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\", [opaque_AbsoluteTime]: true };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms), [opaque_AbsoluteTime]: true };\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 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 if (x === undefined) {\n throw Error(`got undefined and expected absolute time at ${renderContext(c)}`);\n }\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms, [opaque_AbsoluteTime]: true };\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 if (x === undefined) {\n throw Error(`got undefined and expected timestamp at ${renderContext(c)}`);\n }\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 protocol timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForPreciseTimestamp: Codec<TalerPreciseTimestamp> = {\n decode(x: any, c?: Context): TalerPreciseTimestamp {\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 throw Error(`expected precise 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 { Amounts, codecForAmountString } from \"./amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecForStringURL,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport {\n CurrencySpecification,\n codecForCurrencySpecificiation,\n codecForEither,\n codecForProduct,\n} from \"./index.js\";\nimport { Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForDuration,\n codecForTimestamp,\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 // The exchange's base URL.\n url: string;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKeyString;\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: EddsaPublicKeyString;\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 // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\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?: InternationalizedString;\n\n // The number of units of the product to deliver to the customer.\n quantity?: Integer;\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?: ImageDataUrl;\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 // The hash of the merchant instance's wire details.\n h_wire: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: TalerProtocolDuration;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: InternationalizedString;\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: string;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: TalerProtocolTimestamp;\n\n // More info about the merchant, see below.\n merchant: MerchantInfo;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: string;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: TalerProtocolTimestamp;\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: ExchangeHandle[];\n\n // List of products that are part of the purchase (see Product).\n products?: Product[];\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: TalerProtocolTimestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // Time when this contract was generated.\n timestamp: TalerProtocolTimestamp;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional, but either fulfillment_url\n // or fulfillment_message must be specified in every\n // contract terms.\n //\n // If a non-unique fulfillment URL is used, a customer can only\n // buy the order once and will be redirected to a previous purchase\n // when trying to buy an order with the same fulfillment URL a second\n // time. This is useful for digital goods that a customer only needs\n // to buy once but should be able to repeatedly download.\n //\n // For orders where the customer is expected to be able to make\n // repeated purchases (for equivalent goods), the fulfillment URL\n // should be made unique for every order. The easiest way to do\n // this is to include a unique order ID in the fulfillment URL.\n //\n // When POSTing to the merchant, the placeholder text \"${ORDER_ID}\"\n // is be replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL). Note that this placeholder can only be used once.\n // Front-ends may use other means to generate a unique fulfillment URL.\n fulfillment_url?: string;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: InternationalizedString;\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: string;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n // Must really be an Object (not a string, integer, float or array).\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\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 * 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 * Canonical, public base URL of the exchange.\n */\n base_url: string;\n\n currency: string;\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 accounts: ExchangeWireAccount[];\n\n wire_fees: { [methodName: string]: WireFeesJson[] };\n\n denominations: DenomGroup[];\n}\n\nexport type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n\nexport interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n\n // XOR of all the SHA-512 hash values of the denominations' public keys\n // in this group. Note that for hashing, the binary format of the\n // public keys is used, and not their base32 encoding.\n hash: HashCodeString;\n}\n\nexport interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignatureString;\n\n // When does the denomination key become valid?\n stamp_start: TalerProtocolTimestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: TalerProtocolTimestamp;\n\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n}\n\nexport type RsaPublicKeySring = string;\nexport type AgeMask = number;\nexport type ImageDataUrl = string;\n\n/**\n * 32-byte value representing a point on Curve25519.\n */\nexport type Cs25519Point = string;\n\nexport interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\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\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 status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\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 RewardPickupGetResponse {\n reward_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 pos_confirmation?: 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 // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected or pending.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Deprecated field use status instead\n // The transfer has been confirmed and registered by the bank.\n // Does not guarantee that the funds have arrived at the exchange already.\n transfer_done: boolean;\n}\n\nexport const codeForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\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\ndeclare const __amount_str: unique symbol;\nexport type AmountString = string & { [__amount_str]: true };\n// export type AmountString = string;\nexport type Base32String = string;\nexport type EddsaSignatureString = string;\nexport type EddsaPublicKeyString = string;\nexport type EddsaPrivateKeyString = 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 codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\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\", codecForAmountString())\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\", codecForAmountString())\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\", codecForAmountString())\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 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\n// FIXME: Validate properly!\nexport const codecForNgDenominations: Codec<DenomGroup> = codecForAny();\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\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 .property(\"accounts\", codecForList(codecForExchangeWireAccount()))\n .property(\"wire_fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .property(\"denominations\", codecForList(codecForNgDenominations))\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 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(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\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 codecForRewardPickupGetResponse =\n (): Codec<RewardPickupGetResponse> =>\n buildCodecForObject<RewardPickupGetResponse>()\n .property(\"reward_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 codecForExchangeWithdrawBatchResponse =\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 .property(\"pos_confirmation\", codecOptional(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 codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\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 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 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\ninterface DepositConfirmationSignature {\n // The EdDSA signature of `TALER_DepositConfirmationPS` using a current\n // `signing key of the exchange <sign-key-priv>` 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: EddsaSignatureString;\n}\n\nexport interface BatchDepositSuccess {\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 // `Public EdDSA key of the exchange <sign-key-pub>` 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: EddsaPublicKeyString;\n\n // Array of deposit confirmation signatures from the exchange\n // Entries must be in the same order the coins were given\n // in the batch deposit request.\n exchange_sig: EddsaSignatureString;\n}\n\nexport const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> =>\n buildCodecForObject<BatchDepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"BatchDepositSuccess\");\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\n/**\n * @deprecated batch deposit should be used.\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 type WireSalt = string;\n\nexport interface ExchangeBatchDepositRequest {\n // The merchant's account details.\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: WireSalt;\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 // The list of coins that are going to be deposited with this Request.\n coins: BatchDepositRequestCoin[];\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 <merchant-pub>`, so that the client can identify the\n // merchant for refund requests.\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 batch-deposit.\n // This might be a refund, auction or escrow policy.\n policy?: any;\n}\n\nexport interface BatchDepositRequestCoin {\n // EdDSA public key of the coin being deposited.\n coin_pub: EddsaPublicKeyString;\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 // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: Amounts;\n\n // Signature over `TALER_DepositRequestPS`, made by the customer with the\n // `coin's private key <coin-priv>`.\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\nexport interface ExchangeRefundRequest {\n // Amount to be refunded, can be a fraction of the\n // coin's total deposit value (including deposit fee);\n // must be larger than the refund fee.\n refund_amount: AmountString;\n\n // SHA-512 hash of the contact of the merchant with the customer.\n h_contract_terms: HashCodeString;\n\n // 64-bit transaction id of the refund transaction between merchant and customer.\n rtransaction_id: number;\n\n // EdDSA public key of the merchant.\n merchant_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the merchant over a\n // TALER_RefundRequestPS with purpose\n // TALER_SIGNATURE_MERCHANT_REFUND\n // affirming the refund.\n merchant_sig: EddsaPublicKeyString;\n}\n\nexport interface ExchangeRefundSuccessResponse {\n // The EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND over\n // a TALER_RecoupRefreshConfirmationPS\n // 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\nexport const codecForExchangeRefundSuccessResponse =\n (): Codec<ExchangeRefundSuccessResponse> =>\n buildCodecForObject<ExchangeRefundSuccessResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .build(\"ExchangeRefundSuccessResponse\");\n\nexport type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n\nexport interface DenyAllAccountRestriction {\n type: \"deny\";\n}\n\n// Accounts interacting with this type of account\n// restriction must have a payto://-URI matching\n// the given regex.\nexport interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: InternationalizedString;\n}\n\nexport interface ExchangeWireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: string;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignatureString;\n\n // Display label wallets should use to show this\n // bank account.\n // Since protocol **v19**.\n bank_label?: string;\n priority?: number;\n}\n\nexport const codecForExchangeWireAccount = (): Codec<ExchangeWireAccount> =>\n buildCodecForObject<ExchangeWireAccount>()\n .property(\"conversion_url\", codecOptional(codecForStringURL()))\n .property(\"credit_restrictions\", codecForList(codecForAny()))\n .property(\"debit_restrictions\", codecForList(codecForAny()))\n .property(\"master_sig\", codecForString())\n .property(\"payto_uri\", codecForString())\n .property(\"bank_label\", codecOptional(codecForString()))\n .property(\"priority\", codecOptional(codecForNumber()))\n .build(\"WireAccount\");\n\nexport type Integer = number;\n\nexport interface BankConversionInfoConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n regional_currency: string;\n\n fiat_currency: string;\n\n // Currency used by this bank.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency_specification: CurrencySpecification;\n}\n\nexport const codecForBankConversionInfoConfig =\n (): Codec<BankConversionInfoConfig> =>\n buildCodecForObject<BankConversionInfoConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"fiat_currency\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .build(\"BankConversionInfoConfig\");\n\nexport interface DenominationExpiredMessage {\n // Taler error code. Note that beyond\n // expiration this message format is also\n // used if the key is not yet valid, or\n // has been revoked.\n code: number;\n\n // Signature by the exchange over a\n // TALER_DenominationExpiredAffirmationPS.\n // Must have purpose TALER_SIGNATURE_EXCHANGE_AFFIRM_DENOM_EXPIRED.\n exchange_sig: EddsaSignatureString;\n\n // Public key of the exchange used to create\n // the 'exchange_sig.\n exchange_pub: EddsaPublicKeyString;\n\n // Hash of the denomination public key that is unknown.\n h_denom_pub: HashCodeString;\n\n // When was the signature created.\n timestamp: TalerProtocolTimestamp;\n\n // What kind of operation was requested that now\n // failed?\n oper: string;\n}\n\nexport const codecForDenominationExpiredMessage = () =>\n buildCodecForObject<DenominationExpiredMessage>()\n .property(\"code\", codecForNumber())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"oper\", codecForString())\n .build(\"DenominationExpiredMessage\");\n\nexport interface CoinHistoryResponse {\n // Current balance of the coin.\n balance: AmountString;\n\n // Hash of the coin's denomination.\n h_denom_pub: HashCodeString;\n\n // Transaction history for the coin.\n history: any[];\n}\n\nexport const codecForCoinHistoryResponse = () =>\n buildCodecForObject<CoinHistoryResponse>()\n .property(\"balance\", codecForAmountString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"history\", codecForAny())\n .build(\"CoinHistoryResponse\");\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 type { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport {\n TalerError,\n base64FromArrayBuffer,\n makeErrorDetail,\n stringToBytes,\n} from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AbsoluteTime, Duration } 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\" | \"PATCH\" | \"PUT\" | \"GET\" | \"DELETE\";\n headers?: { [name: string]: string | undefined };\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 * How to handle redirects.\n * Same semantics as WHATWG fetch.\n */\n redirect?: \"follow\" | \"error\" | \"manual\";\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 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\n/**\n * Read Taler error details from an HTTP response.\n */\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const contentType = httpResponse.headers.get(\"content-type\");\n if (contentType !== \"application/json\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n contentType: contentType || \"<null>\",\n },\n \"Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.\",\n );\n }\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\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 let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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\nexport async function readResponseJsonOrErrorCode<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<{ isError: boolean; response: T }> {\n let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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: !(httpResponse.status >= 200 && httpResponse.status < 300),\n response: parsedResponse,\n };\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 expectSuccessResponseOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (httpResponse.status >= 200 && httpResponse.status <= 299) {\n return;\n }\n const errResp = await readTalerErrorResponse(httpResponse);\n throwUnexpectedRequestError(httpResponse, errResp);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 = AbsoluteTime.fromMilliseconds(expiryDateMs);\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 * Only allow HTTPS connections, not plain http.\n */\n requireTls?: boolean;\n printAsCurl?: 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/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport {\n HttpResponse,\n readResponseJsonOrErrorCode,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http-common.js\";\nimport {\n Codec,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TalerErrorDetail,\n} from \"./index.js\";\n\ntype OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =\n ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;\n\nexport type OperationResult<Body, ErrorEnum, K = never> =\n | OperationOk<Body>\n | OperationAlternative<ErrorEnum, any>\n | OperationFail<ErrorEnum>\n | OperationFailWithBodyOrNever<ErrorEnum, K>;\n\nexport function isOperationOk<T, E>(\n c: OperationResult<T, E>,\n): c is OperationOk<T> {\n return c.type === \"ok\";\n}\n\nexport function isOperationFail<T, E>(\n c: OperationResult<T, E>,\n): c is OperationFail<E> {\n return c.type === \"fail\";\n}\n\n/**\n * successful operation\n */\nexport interface OperationOk<BodyT> {\n type: \"ok\";\n\n /**\n * Parsed response body.\n */\n body: BodyT;\n}\n\n/**\n * unsuccessful operation, see details\n */\nexport interface OperationFail<T> {\n type: \"fail\";\n\n /**\n * Error case (either HTTP status code or TalerErrorCode)\n */\n case: T;\n\n detail: TalerErrorDetail;\n}\n\n/**\n * unsuccessful operation, see body\n */\nexport interface OperationAlternative<T, B> {\n type: \"fail\";\n\n case: T;\n body: B;\n}\n\nexport interface OperationFailWithBody<B> {\n type: \"fail\";\n\n case: keyof B;\n body: B[OperationFailWithBody<B>[\"case\"]];\n}\n\nexport async function opSuccessFromHttp<T>(\n resp: HttpResponse,\n codec: Codec<T>,\n): Promise<OperationOk<T>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"ok\" as const, body };\n}\n\n/**\n * Success case, but instead of the body we're returning a fixed response\n * to the client.\n */\nexport function opFixedSuccess<T>(body: T): OperationOk<T> {\n return { type: \"ok\" as const, body };\n}\n\nexport function opEmptySuccess(resp: HttpResponse): OperationOk<void> {\n return { type: \"ok\" as const, body: void 0 };\n}\n\nexport async function opKnownFailureWithBody<B>(\n case_: keyof B,\n body: B[typeof case_],\n): Promise<OperationFailWithBody<B>> {\n return { type: \"fail\", case: case_, body };\n}\n\nexport async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(\n resp: HttpResponse,\n s: T,\n codec: Codec<B>,\n): Promise<OperationAlternative<T, B>> {\n const body = (await readResponseJsonOrErrorCode(resp, codec)).response;\n return { type: \"fail\", case: s, body };\n}\n\nexport async function opKnownHttpFailure<T extends HttpStatusCode>(\n s: T,\n resp: HttpResponse,\n): Promise<OperationFail<T>> {\n const detail = await readTalerErrorResponse(resp);\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opKnownTalerFailure<T extends TalerErrorCode>(\n s: T,\n detail: TalerErrorDetail,\n): OperationFail<T> {\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: resp.requestUrl,\n requestMethod: resp.requestMethod,\n httpStatusCode: resp.status,\n errorResponse: error,\n },\n `Unexpected HTTP status ${resp.status} in response`,\n );\n}\n\n/**\n * Convenience function to throw an error if the operation is not a success.\n */\nexport function narrowOpSuccessOrThrow<Body, ErrorEnum>(\n opName: string,\n opRes: OperationResult<Body, ErrorEnum>,\n): asserts opRes is OperationOk<Body> {\n if (opRes.type !== \"ok\") {\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR,\n {\n operation: opName,\n error: String(opRes.case),\n detail: \"detail\" in opRes ? opRes.detail : undefined,\n },\n `Operation ${opName} failed: ${String(opRes.case)}`,\n );\n }\n}\n\nexport type ResultByMethod<\n TT extends object,\n p extends keyof TT,\n> = TT[p] extends (...args: any[]) => infer Ret\n ? Ret extends Promise<infer Result>\n ? Result extends OperationResult<any, any>\n ? Result\n : never\n : never //api always use Promises\n : never; //error cases just for functions\n\nexport type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<\n ResultByMethod<TT, p>,\n OperationOk<any>\n>;\n\nexport type RedirectResult = { redirectURL: URL }\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\n/**\n * @fileoverview\n * Construction and parsing of taler:// URIs.\n * Specification: https://lsd.gnunet.org/lsd0006/\n */\n\n/**\n * Imports.\n */\nimport { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { opFixedSuccess, opKnownTalerFailure } from \"./operation.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { URL, URLSearchParams } from \"./url.js\";\n/**\n * A parsed taler URI.\n */\nexport type TalerUri =\n | PayUriResult\n | PayTemplateUriResult\n | DevExperimentUri\n | PayPullUriResult\n | PayPushUriResult\n | BackupRestoreUri\n | RefundUriResult\n | WithdrawUriResult\n | WithdrawExchangeUri\n | AddExchangeUri;\n\ndeclare const __action_str: unique symbol;\nexport type TalerUriString = string & { [__action_str]: true };\n\nexport function codecForTalerUriString(): Codec<TalerUriString> {\n return {\n decode(x: any, c?: Context): TalerUriString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (parseTalerUri(x) === undefined) {\n throw new DecodingError(\n `invalid taler URI at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as TalerUriString;\n },\n };\n}\n\nexport interface PayUriResult {\n type: TalerUriAction.Pay;\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken?: string;\n noncePriv?: string;\n}\n\nexport type TemplateParams = {\n amount?: string;\n summary?: string;\n};\n\nexport interface PayTemplateUriResult {\n type: TalerUriAction.PayTemplate;\n merchantBaseUrl: string;\n templateId: string;\n templateParams: TemplateParams;\n}\n\nexport interface WithdrawUriResult {\n type: TalerUriAction.Withdraw;\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n type: TalerUriAction.Refund;\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface PayPushUriResult {\n type: TalerUriAction.PayPush;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n type: TalerUriAction.PayPull;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n type: TalerUriAction.DevExperiment;\n devExperimentId: string;\n}\n\nexport interface BackupRestoreUri {\n type: TalerUriAction.Restore;\n walletRootPriv: string;\n providers: Array<string>;\n}\n\nexport interface WithdrawExchangeUri {\n type: TalerUriAction.WithdrawExchange;\n exchangeBaseUrl: string;\n exchangePub?: string;\n amount?: AmountString;\n}\n\nexport interface AddExchangeUri {\n type: TalerUriAction.AddExchange;\n exchangeBaseUrl: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"withdraw\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 const result: WithdrawUriResult = {\n type: TalerUriAction.Withdraw,\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n withdrawalOperationId: withdrawId,\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const r = parseWithdrawUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseAddExchangeUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"add-exchange\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 p = [host, ...pathSegments].join(\"/\");\n\n const result: AddExchangeUri = {\n type: TalerUriAction.AddExchange,\n exchangeBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseAddExchangeUri(s: string): AddExchangeUri | undefined {\n const r = parseAddExchangeUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * @deprecated use TalerUriAction\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\nexport enum TalerUriAction {\n Pay = \"pay\",\n Withdraw = \"withdraw\",\n Refund = \"refund\",\n PayPull = \"pay-pull\",\n PayPush = \"pay-push\",\n PayTemplate = \"pay-template\",\n Restore = \"restore\",\n DevExperiment = \"dev-experiment\",\n WithdrawExchange = \"withdraw-exchange\",\n AddExchange = \"add-exchange\",\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\nfunction parseProtoInfoWithError(s: string, action: string) {\n if (\n !s.toLowerCase().startsWith(\"taler://\") &&\n !s.toLowerCase().startsWith(\"taler+http://\")\n ) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return opFixedSuccess({\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n });\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return opFixedSuccess({\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n });\n } else {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n}\n\ntype Parser = (s: string) => TalerUri | undefined;\nconst parsers: { [A in TalerUriAction]: Parser } = {\n [TalerUriAction.Pay]: parsePayUri,\n [TalerUriAction.PayPull]: parsePayPullUri,\n [TalerUriAction.PayPush]: parsePayPushUri,\n [TalerUriAction.PayTemplate]: parsePayTemplateUri,\n [TalerUriAction.Restore]: parseRestoreUri,\n [TalerUriAction.Refund]: parseRefundUri,\n [TalerUriAction.Withdraw]: parseWithdrawUri,\n [TalerUriAction.DevExperiment]: parseDevExperimentUri,\n [TalerUriAction.WithdrawExchange]: parseWithdrawExchangeUri,\n [TalerUriAction.AddExchange]: parseAddExchangeUri,\n};\n\nexport function parseTalerUri(string: string): TalerUri | undefined {\n const https = string.startsWith(\"taler://\");\n const http = string.startsWith(\"taler+http://\");\n if (!https && !http) return undefined;\n const actionStart = https ? 8 : 13;\n const actionEnd = string.indexOf(\"/\", actionStart + 1);\n const action = string.substring(actionStart, actionEnd);\n const found = Object.values(TalerUriAction).find((x) => x === action);\n if (!found) return undefined;\n return parsers[found](string);\n}\n\nexport function stringifyTalerUri(uri: TalerUri): string {\n switch (uri.type) {\n case TalerUriAction.DevExperiment: {\n return stringifyDevExperimentUri(uri);\n }\n case TalerUriAction.Pay: {\n return stringifyPayUri(uri);\n }\n case TalerUriAction.PayPull: {\n return stringifyPayPullUri(uri);\n }\n case TalerUriAction.PayPush: {\n return stringifyPayPushUri(uri);\n }\n case TalerUriAction.PayTemplate: {\n return stringifyPayTemplateUri(uri);\n }\n case TalerUriAction.Restore: {\n return stringifyRestoreUri(uri);\n }\n case TalerUriAction.Refund: {\n return stringifyRefundUri(uri);\n }\n case TalerUriAction.Withdraw: {\n return stringifyWithdrawUri(uri);\n }\n case TalerUriAction.WithdrawExchange: {\n return stringifyWithdrawExchange(uri);\n }\n case TalerUriAction.AddExchange: {\n return stringifyAddExchange(uri);\n }\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 type: TalerUriAction.Pay,\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n uriString: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(uriString, TalerUriAction.PayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi.rest.split(\"?\");\n\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n\n const q = new URLSearchParams(c[1] ?? \"\");\n const params: Record<string, string> = {};\n q.forEach((v, k) => {\n params[k] = v;\n });\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayTemplate,\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPush);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPush,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPull);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPull,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parseWithdrawExchangeUri(\n s: string,\n): WithdrawExchangeUri | undefined {\n const pi = parseProtoInfo(s, \"withdraw-exchange\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 1) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;\n const pathSegments = parts.slice(1, parts.length - 1);\n const hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n const q = new URLSearchParams(c[1] ?? \"\");\n const amount = (q.get(\"a\") ?? undefined) as AmountString | undefined;\n\n return {\n type: TalerUriAction.WithdrawExchange,\n exchangeBaseUrl,\n exchangePub: exchangePub != \"\" ? exchangePub : undefined,\n amount,\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.Refund,\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 parts = c[0].split(\"/\");\n return {\n type: TalerUriAction.DevExperiment,\n devExperimentId: parts[0],\n };\n}\n\nexport function parseRestoreUri(uri: string): BackupRestoreUri | undefined {\n const pi = parseProtoInfo(uri, \"restore\");\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\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<string>();\n parts[1].split(\",\").map((name) => {\n const url = canonicalizeBaseUrl(\n `${pi.innerProto}://${decodeURIComponent(name)}/`,\n );\n providers.push(url);\n });\n return {\n type: TalerUriAction.Restore,\n walletRootPriv,\n providers,\n };\n}\n\n// ================================================\n// To string functions\n// ================================================\n\nexport function stringifyPayUri({\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n}: Omit<PayUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, {\n c: claimToken,\n n: noncePriv,\n });\n return `${proto}://pay/${path}${orderId}/${sessionId}${query}`;\n}\n\nexport function stringifyPayPullUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPullUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://pay-pull/${path}${contractPriv}`;\n}\n\nexport function stringifyPayPushUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPushUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n\n return `${proto}://pay-push/${path}${contractPriv}`;\n}\n\nexport function stringifyRestoreUri({\n providers,\n walletRootPriv,\n}: Omit<BackupRestoreUri, \"type\">): string {\n const list = providers\n .map((url) => `${encodeURIComponent(new URL(url).href)}`)\n .join(\",\");\n return `taler://restore/${walletRootPriv}/${list}`;\n}\n\nexport function stringifyWithdrawExchange({\n exchangeBaseUrl,\n exchangePub,\n amount,\n}: Omit<WithdrawExchangeUri, \"type\">): string {\n const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {\n a: amount,\n });\n return `${proto}://withdraw-exchange/${path}${exchangePub ?? \"\"}${query}`;\n}\n\nexport function stringifyAddExchange({\n exchangeBaseUrl,\n}: Omit<AddExchangeUri, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://add-exchange/${path}`;\n}\n\nexport function stringifyDevExperimentUri({\n devExperimentId,\n}: Omit<DevExperimentUri, \"type\">): string {\n return `taler://dev-experiment/${devExperimentId}`;\n}\n\nexport function stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams,\n}: Omit<PayTemplateUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, templateParams);\n return `${proto}://pay-template/${path}${templateId}${query}`;\n}\n\nexport function stringifyRefundUri({\n merchantBaseUrl,\n orderId,\n}: Omit<RefundUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(merchantBaseUrl);\n return `${proto}://refund/${path}${orderId}/`;\n}\n\nexport function stringifyWithdrawUri({\n bankIntegrationApiBaseUrl,\n withdrawalOperationId,\n}: Omit<WithdrawUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(bankIntegrationApiBaseUrl);\n return `${proto}://withdraw/${path}${withdrawalOperationId}`;\n}\n\n/**\n * Use baseUrl to defined http or https\n * create path using host+port+pathname\n * use params to create a query parameter string or empty\n */\nfunction getUrlInfo(\n baseUrl: string,\n params: Record<string, string | undefined> = {},\n): { proto: string; path: string; query: string } {\n const url = new URL(baseUrl);\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 URL protocol in ${baseUrl}`);\n }\n let path = url.hostname;\n if (url.port) {\n path = path + \":\" + url.port;\n }\n if (url.pathname) {\n path = path + url.pathname;\n }\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n const qp = new URLSearchParams();\n let withParams = false;\n Object.entries(params).forEach(([name, value]) => {\n if (value !== undefined) {\n withParams = true;\n qp.append(name, value);\n }\n });\n const query = withParams ? \"?\" + qp.toString() : \"\";\n\n return { proto, path, query };\n}\n", "import { deprecate } from \"util\";\nimport { codecForAmountString } from \"../amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"../codec.js\";\nimport { PaytoString, codecForPaytoString } from \"../payto.js\";\nimport {\n AmountString,\n InternationalizedString,\n codecForInternationalizedString,\n codecForLocation,\n} from \"../taler-types.js\";\nimport { TalerUriString, codecForTalerUriString } from \"../taleruri.js\";\nimport {\n AbsoluteTime,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n} from \"../time.js\";\n\nexport type UserAndPassword = {\n username: string;\n password: string;\n};\n\nexport type UserAndToken = {\n username: string;\n token: AccessToken;\n};\n\ndeclare const opaque_OfficerAccount: unique symbol;\nexport type LockedAccount = string & { [opaque_OfficerAccount]: true };\n\ndeclare const opaque_OfficerId: unique symbol;\nexport type OfficerId = string & { [opaque_OfficerId]: true };\n\ndeclare const opaque_OfficerSigningKey: unique symbol;\nexport type SigningKey = Uint8Array & { [opaque_OfficerSigningKey]: true };\n\nexport interface OfficerAccount {\n id: OfficerId;\n signingKey: SigningKey;\n}\n\nexport type PaginationParams = {\n /**\n * row identifier as the starting point of the query\n */\n offset?: string;\n /**\n * max number of element in the result response\n * always greater than 0\n */\n limit?: number;\n /**\n * order\n */\n order?: \"asc\" | \"dec\";\n};\n\nexport type LongPollParams = {\n /**\n * milliseconds the server should wait for at least one result to be shown\n */\n timeoutMs?: number;\n};\n///\n/// HASH\n///\n\n// 64-byte hash code.\ntype HashCode = string;\n\ntype PaytoHash = string;\n\ntype AmlOfficerPublicKeyP = string;\n\n// 32-byte hash code.\ntype ShortHashCode = string;\n\n// 16-byte salt.\ntype WireSalt = string;\n\ntype SHA256HashCode = ShortHashCode;\n\ntype SHA512HashCode = HashCode;\n\n// 32-byte nonce value, must only be used once.\ntype CSNonce = string;\n\n// 32-byte nonce value, must only be used once.\ntype RefreshMasterSeed = string;\n\n// 32-byte value representing a point on Curve25519.\ntype Cs25519Point = string;\n\n// 32-byte value representing a scalar multiplier\n// for scalar operations on points on Curve25519.\ntype Cs25519Scalar = string;\n\n///\n/// KEYS\n///\n\n// 16-byte access token used to authorize access.\ntype ClaimToken = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPublicKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPrivateKey = string;\n\n// Edx25519 public keys are points on Curve25519 and represented using the\n// standard 256 bits Ed25519 compact format converted to Crockford\n// Base32.\ntype Edx25519PublicKey = string;\n\n// Edx25519 private keys are always points on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype Edx25519PrivateKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePublicKey = string;\n\n// Point on Curve25519 represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype CsRPublic = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePrivateKey = string;\n\ntype CoinPublicKey = EddsaPublicKey;\n\n// RSA public key converted to Crockford Base32.\ntype RsaPublicKey = string;\n\ntype Integer = number;\n\ntype WireTransferIdentifierRawP = string;\n// Subset of numbers: Integers in the\n// inclusive range 0 .. (2^53 - 1).\ntype SafeUint64 = number;\n\n// The string must be a data URL according to RFC 2397\n// with explicit mediatype and base64 parameters.\n//\n// data:<mediatype>;base64,<data>\n//\n// Supported mediatypes are image/jpeg and image/png.\n// Invalid strings will be rejected by the wallet.\ntype ImageDataUrl = string;\n\ntype WadId = string;\n\ntype Timestamp = TalerProtocolTimestamp;\n\ntype RelativeTime = TalerProtocolDuration;\n\nexport interface LoginToken {\n token: AccessToken;\n expiration: Timestamp;\n}\n\ndeclare const __ac_token: unique symbol;\n/**\n * Use `createAccessToken(string)` function to build one.\n */\nexport type AccessToken = string & {\n [__ac_token]: true;\n};\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n * Encode the token with rfc7230 to send in a http header.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessTokenEncoded(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\")\n ? token\n : `secret-token:${encodeURIComponent(token)}`\n ) as AccessToken;\n}\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessTokenPlain(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\") ? token : `secret-token:${token}`\n ) as AccessToken;\n}\n\n/**\n * Convert string to access token.\n *\n * @param clientSecret\n * @returns\n */\nexport function createClientSecretAccessToken(\n clientSecret: string,\n): AccessToken {\n return clientSecret as AccessToken;\n}\n\ndeclare const __officer_signature: unique symbol;\nexport type OfficerSignature = string & {\n [__officer_signature]: true;\n};\n\nexport namespace TalerAuthentication {\n export interface TokenRequest {\n // Service-defined scope for the token.\n // Typical scopes would be \"readonly\" or \"readwrite\".\n scope: string;\n\n // Server may impose its own upper bound\n // on the token validity duration\n duration?: RelativeTime;\n\n // Is the token refreshable into a new token during its\n // validity?\n // Refreshable tokens effectively provide indefinite\n // access if they are refreshed in time.\n refreshable?: boolean;\n }\n\n export interface TokenSuccessResponse {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n access_token: AccessToken;\n }\n export interface TokenSuccessResponseMerchant {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n token: AccessToken;\n }\n}\n\n// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html\nexport interface CurrencySpecification {\n // Name of the currency.\n name: string;\n\n // how many digits the user may enter after the decimal_separator\n num_fractional_input_digits: Integer;\n\n // Number of fractional digits to render in normal font and size.\n num_fractional_normal_digits: Integer;\n\n // Number of fractional digits to render always, if needed by\n // padding with zeros.\n num_fractional_trailing_zero_digits: Integer;\n\n // map of powers of 10 to alternative currency names / symbols, must\n // always have an entry under \"0\" that defines the base name,\n // e.g. \"0 => \u20AC\" or \"3 => k\u20AC\". For BTC, would be \"0 => BTC, -3 => mBTC\".\n // Communicates the currency symbol to be used.\n alt_unit_names: { [log10: string]: string };\n}\n\n//FIXME: implement this codec\nexport const codecForAccessToken = codecForString as () => Codec<AccessToken>;\nexport const codecForTokenSuccessResponse =\n (): Codec<TalerAuthentication.TokenSuccessResponse> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponse>()\n .property(\"access_token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponse\");\n\nexport const codecForTokenSuccessResponseMerchant =\n (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()\n .property(\"token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponseMerchant\");\n\nexport const codecForCurrencySpecificiation =\n (): Codec<CurrencySpecification> =>\n buildCodecForObject<CurrencySpecification>()\n .property(\"name\", codecForString())\n .property(\"num_fractional_input_digits\", codecForNumber())\n .property(\"num_fractional_normal_digits\", codecForNumber())\n .property(\"num_fractional_trailing_zero_digits\", codecForNumber())\n .property(\"alt_unit_names\", codecForMap(codecForString()))\n .build(\"CurrencySpecification\");\n\nexport const codecForIntegrationBankConfig =\n (): Codec<TalerCorebankApi.IntegrationConfig> =>\n buildCodecForObject<TalerCorebankApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .build(\"TalerCorebankApi.IntegrationConfig\");\n\nexport const codecForCoreBankConfig = (): Codec<TalerCorebankApi.Config> =>\n buildCodecForObject<TalerCorebankApi.Config>()\n .property(\"name\", codecForConstString(\"libeufin-bank\"))\n .property(\"version\", codecForString())\n .property(\"bank_name\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"allow_conversion\", codecForBoolean())\n .property(\"allow_registrations\", codecForBoolean())\n .property(\"allow_deletions\", codecForBoolean())\n .property(\"allow_edit_name\", codecForBoolean())\n .property(\"allow_edit_cashout_payto_uri\", codecForBoolean())\n .property(\"default_debit_threshold\", codecForAmountString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"supported_tan_channels\",\n codecForList(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\"wire_type\", codecForString())\n .build(\"TalerCorebankApi.Config\");\n\n//FIXME: implement this codec\nexport const codecForURN = codecForString;\n\nexport const codecForExchangeConfigInfo =\n (): Codec<TalerMerchantApi.ExchangeConfigInfo> =>\n buildCodecForObject<TalerMerchantApi.ExchangeConfigInfo>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"master_pub\", codecForString())\n .build(\"TalerMerchantApi.ExchangeConfigInfo\");\n\nexport const codecForMerchantConfig =\n (): Codec<TalerMerchantApi.VersionResponse> =>\n buildCodecForObject<TalerMerchantApi.VersionResponse>()\n .property(\"name\", codecForConstString(\"taler-merchant\"))\n .property(\"currency\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currencies\", codecForMap(codecForCurrencySpecificiation()))\n .property(\"exchanges\", codecForList(codecForExchangeConfigInfo()))\n .build(\"TalerMerchantApi.VersionResponse\");\n\nexport const codecForClaimResponse =\n (): Codec<TalerMerchantApi.ClaimResponse> =>\n buildCodecForObject<TalerMerchantApi.ClaimResponse>()\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.ClaimResponse\");\n\nexport const codecForPaymentResponse =\n (): Codec<TalerMerchantApi.PaymentResponse> =>\n buildCodecForObject<TalerMerchantApi.PaymentResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForStatusPaid = (): Codec<TalerMerchantApi.StatusPaid> =>\n buildCodecForObject<TalerMerchantApi.StatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refunded\", codecForBoolean())\n .property(\"type\", codecForConstString(\"paid\"))\n .build(\"TalerMerchantApi.StatusPaid\");\n\nexport const codecForStatusGoto =\n (): Codec<TalerMerchantApi.StatusGotoResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusGotoResponse>()\n .property(\"public_reorder_url\", codecForURL())\n .property(\"type\", codecForConstString(\"goto\"))\n .build(\"TalerMerchantApi.StatusGotoResponse\");\n\nexport const codecForStatusStatusUnpaid =\n (): Codec<TalerMerchantApi.StatusUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusUnpaidResponse>()\n .property(\"type\", codecForConstString(\"unpaid\"))\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForPaidRefundStatusResponse =\n (): Codec<TalerMerchantApi.PaidRefundStatusResponse> =>\n buildCodecForObject<TalerMerchantApi.PaidRefundStatusResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"refunded\", codecForBoolean())\n .build(\"TalerMerchantApi.PaidRefundStatusResponse\");\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse =\n (): Codec<TalerMerchantApi.AbortResponse> =>\n buildCodecForObject<TalerMerchantApi.AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForWalletRefundResponse =\n (): Codec<TalerMerchantApi.WalletRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.WalletRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantCoinRefundStatus\");\n\nexport const codecForQueryInstancesResponse =\n (): Codec<TalerMerchantApi.QueryInstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.QueryInstancesResponse>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"merchant_pub\", codecForString())\n .property(\"address\", codecForLocation())\n .property(\"jurisdiction\", codecForLocation())\n .property(\"use_stefan\", codecForBoolean())\n .property(\"default_wire_transfer_delay\", codecForDuration)\n .property(\"default_pay_delay\", codecForDuration)\n .property(\n \"auth\",\n buildCodecForObject<{\n method: \"external\" | \"token\";\n }>()\n .property(\n \"method\",\n codecForEither(\n codecForConstString(\"token\"),\n codecForConstString(\"external\"),\n ),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse.auth\"),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse\");\n\nexport const codecForAccountKycRedirects =\n (): Codec<TalerMerchantApi.AccountKycRedirects> =>\n buildCodecForObject<TalerMerchantApi.AccountKycRedirects>()\n .property(\n \"pending_kycs\",\n codecForList(codecForMerchantAccountKycRedirect()),\n )\n .property(\"timeout_kycs\", codecForList(codecForExchangeKycTimeout()))\n\n .build(\"TalerMerchantApi.AccountKycRedirects\");\n\nexport const codecForMerchantAccountKycRedirect =\n (): Codec<TalerMerchantApi.MerchantAccountKycRedirect> =>\n buildCodecForObject<TalerMerchantApi.MerchantAccountKycRedirect>()\n .property(\"kyc_url\", codecForURL())\n .property(\"aml_status\", codecForNumber())\n .property(\"exchange_url\", codecForURL())\n .property(\"payto_uri\", codecForPaytoString())\n .build(\"TalerMerchantApi.MerchantAccountKycRedirect\");\n\nexport const codecForExchangeKycTimeout =\n (): Codec<TalerMerchantApi.ExchangeKycTimeout> =>\n buildCodecForObject<TalerMerchantApi.ExchangeKycTimeout>()\n .property(\"exchange_url\", codecForURL())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .build(\"TalerMerchantApi.ExchangeKycTimeout\");\n\nexport const codecForAccountAddResponse =\n (): Codec<TalerMerchantApi.AccountAddResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountAddResponse>()\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .build(\"TalerMerchantApi.AccountAddResponse\");\n\nexport const codecForAccountsSummaryResponse =\n (): Codec<TalerMerchantApi.AccountsSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountsSummaryResponse>()\n .property(\"accounts\", codecForList(codecForBankAccountSummaryEntry()))\n .build(\"TalerMerchantApi.AccountsSummaryResponse\");\n\nexport const codecForBankAccountSummaryEntry =\n (): Codec<TalerMerchantApi.BankAccountSummaryEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountSummaryEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .build(\"TalerMerchantApi.BankAccountSummaryEntry\");\n\nexport const codecForBankAccountEntry =\n (): Codec<TalerMerchantApi.BankAccountEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .property(\"credit_facade_url\", codecOptional(codecForURL()))\n .property(\"active\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.BankAccountEntry\");\n\nexport const codecForInventorySummaryResponse =\n (): Codec<TalerMerchantApi.InventorySummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.InventorySummaryResponse>()\n .property(\"products\", codecForList(codecForInventoryEntry()))\n .build(\"TalerMerchantApi.InventorySummaryResponse\");\n\nexport const codecForInventoryEntry =\n (): Codec<TalerMerchantApi.InventoryEntry> =>\n buildCodecForObject<TalerMerchantApi.InventoryEntry>()\n .property(\"product_id\", codecForString())\n .property(\"product_serial\", codecForNumber())\n .build(\"TalerMerchantApi.InventoryEntry\");\n\nexport const codecForProductDetail =\n (): Codec<TalerMerchantApi.ProductDetail> =>\n buildCodecForObject<TalerMerchantApi.ProductDetail>()\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"unit\", codecForString())\n .property(\"price\", codecForAmountString())\n .property(\"image\", codecForString())\n .property(\"taxes\", codecForList(codecForTax()))\n .property(\"address\", codecForLocation())\n .property(\"next_restock\", codecForTimestamp)\n .property(\"total_stock\", codecForNumber())\n .property(\"total_sold\", codecForNumber())\n .property(\"total_lost\", codecForNumber())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"TalerMerchantApi.ProductDetail\");\n\nexport const codecForTax = (): Codec<TalerMerchantApi.Tax> =>\n buildCodecForObject<TalerMerchantApi.Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForAmountString())\n .build(\"TalerMerchantApi.Tax\");\n\nexport const codecForPostOrderResponse =\n (): Codec<TalerMerchantApi.PostOrderResponse> =>\n buildCodecForObject<TalerMerchantApi.PostOrderResponse>()\n .property(\"order_id\", codecForString())\n .property(\"token\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.PostOrderResponse\");\n\nexport const codecForOutOfStockResponse =\n (): Codec<TalerMerchantApi.OutOfStockResponse> =>\n buildCodecForObject<TalerMerchantApi.OutOfStockResponse>()\n .property(\"product_id\", codecForString())\n .property(\"available_quantity\", codecForNumber())\n .property(\"requested_quantity\", codecForNumber())\n .property(\"restock_expected\", codecForTimestamp)\n .build(\"TalerMerchantApi.OutOfStockResponse\");\n\nexport const codecForOrderHistory = (): Codec<TalerMerchantApi.OrderHistory> =>\n buildCodecForObject<TalerMerchantApi.OrderHistory>()\n .property(\"orders\", codecForList(codecForOrderHistoryEntry()))\n .build(\"TalerMerchantApi.OrderHistory\");\n\nexport const codecForOrderHistoryEntry =\n (): Codec<TalerMerchantApi.OrderHistoryEntry> =>\n buildCodecForObject<TalerMerchantApi.OrderHistoryEntry>()\n .property(\"order_id\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"refundable\", codecForBoolean())\n .property(\"paid\", codecForBoolean())\n .build(\"TalerMerchantApi.OrderHistoryEntry\");\n\nexport const codecForMerchant = (): Codec<TalerMerchantApi.Merchant> =>\n buildCodecForObject<TalerMerchantApi.Merchant>()\n .property(\"name\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"TalerMerchantApi.MerchantInfo\");\n\nexport const codecForExchange = (): Codec<TalerMerchantApi.Exchange> =>\n buildCodecForObject<TalerMerchantApi.Exchange>()\n .property(\"master_pub\", codecForString())\n .property(\"priority\", codecForNumber())\n .property(\"url\", codecForString())\n .build(\"TalerMerchantApi.Exchange\");\n\nexport const codecForContractTerms =\n (): Codec<TalerMerchantApi.ContractTerms> =>\n buildCodecForObject<TalerMerchantApi.ContractTerms>()\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(\n \"summary_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"merchant\", codecForMerchant())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchange()))\n .property(\"products\", codecForList(codecForProduct()))\n .property(\"extra\", codecForAny())\n .build(\"TalerMerchantApi.ContractTerms\");\n\nexport const codecForProduct = (): Codec<TalerMerchantApi.Product> =>\n buildCodecForObject<TalerMerchantApi.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(codecForAmountString()))\n .property(\"image\", codecOptional(codecForString()))\n .property(\"taxes\", codecOptional(codecForList(codecForTax())))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .build(\"TalerMerchantApi.Product\");\n\nexport const codecForCheckPaymentPaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentPaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentPaidResponse>()\n .property(\"order_status\", codecForConstString(\"paid\"))\n .property(\"refunded\", codecForBoolean())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"wired\", codecForBoolean())\n .property(\"deposit_total\", codecForAmountString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"wire_reports\", codecForList(codecForTransactionWireReport()))\n .property(\"wire_details\", codecForList(codecForTransactionWireTransfer()))\n .property(\"refund_details\", codecForList(codecForRefundDetails()))\n .property(\"order_status_url\", codecForURL())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentUnpaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentUnpaidResponse>()\n .property(\"order_status\", codecForConstString(\"unpaid\"))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .property(\"creation_time\", codecForTimestamp)\n .property(\"summary\", codecForString())\n .property(\"total_amount\", codecForAmountString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"already_paid_fulfillment_url\", codecOptional(codecForString()))\n .property(\"order_status_url\", codecForString())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentClaimedResponse =\n (): Codec<TalerMerchantApi.CheckPaymentClaimedResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentClaimedResponse>()\n .property(\"order_status\", codecForConstString(\"claimed\"))\n .property(\"contract_terms\", codecForContractTerms())\n .build(\"TalerMerchantApi.CheckPaymentClaimedResponse\");\n\nexport const codecForMerchantOrderPrivateStatusResponse =\n (): Codec<TalerMerchantApi.MerchantOrderStatusResponse> =>\n buildCodecForUnion<TalerMerchantApi.MerchantOrderStatusResponse>()\n .discriminateOn(\"order_status\")\n .alternative(\"paid\", codecForCheckPaymentPaidResponse())\n .alternative(\"unpaid\", codecForCheckPaymentUnpaidResponse())\n .alternative(\"claimed\", codecForCheckPaymentClaimedResponse())\n .build(\"TalerMerchantApi.MerchantOrderStatusResponse\");\n\nexport const codecForRefundDetails =\n (): Codec<TalerMerchantApi.RefundDetails> =>\n buildCodecForObject<TalerMerchantApi.RefundDetails>()\n .property(\"reason\", codecForString())\n .property(\"pending\", codecForBoolean())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .build(\"TalerMerchantApi.RefundDetails\");\n\nexport const codecForTransactionWireTransfer =\n (): Codec<TalerMerchantApi.TransactionWireTransfer> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireTransfer>()\n .property(\"exchange_url\", codecForURL())\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"confirmed\", codecForBoolean())\n .build(\"TalerMerchantApi.TransactionWireTransfer\");\n\nexport const codecForTransactionWireReport =\n (): Codec<TalerMerchantApi.TransactionWireReport> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireReport>()\n .property(\"code\", codecForNumber())\n .property(\"hint\", codecForString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"coin_pub\", codecForString())\n .build(\"TalerMerchantApi.TransactionWireReport\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<TalerMerchantApi.MerchantRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.MerchantRefundResponse>()\n .property(\"taler_refund_uri\", codecForTalerUriString())\n .property(\"h_contract\", codecForString())\n .build(\"TalerMerchantApi.MerchantRefundResponse\");\n\nexport const codecForTansferList = (): Codec<TalerMerchantApi.TransferList> =>\n buildCodecForObject<TalerMerchantApi.TransferList>()\n .property(\"transfers\", codecForList(codecForTransferDetails()))\n .build(\"TalerMerchantApi.TransferList\");\n\nexport const codecForTransferDetails =\n (): Codec<TalerMerchantApi.TransferDetails> =>\n buildCodecForObject<TalerMerchantApi.TransferDetails>()\n .property(\"credit_amount\", codecForAmountString())\n .property(\"wtid\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"exchange_url\", codecForURL())\n .property(\"transfer_serial_id\", codecForNumber())\n .property(\"execution_time\", codecOptional(codecForTimestamp))\n .property(\"verified\", codecOptional(codecForBoolean()))\n .property(\"confirmed\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.TransferDetails\");\n\nexport const codecForOtpDeviceSummaryResponse =\n (): Codec<TalerMerchantApi.OtpDeviceSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceSummaryResponse>()\n .property(\"otp_devices\", codecForList(codecForOtpDeviceEntry()))\n .build(\"TalerMerchantApi.OtpDeviceSummaryResponse\");\n\nexport const codecForOtpDeviceEntry =\n (): Codec<TalerMerchantApi.OtpDeviceEntry> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceEntry>()\n .property(\"otp_device_id\", codecForString())\n .property(\"device_description\", codecForString())\n .build(\"TalerMerchantApi.OtpDeviceEntry\");\n\nexport const codecForOtpDeviceDetails =\n (): Codec<TalerMerchantApi.OtpDeviceDetails> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceDetails>()\n .property(\"device_description\", codecForString())\n .property(\"otp_algorithm\", codecForNumber())\n .property(\"otp_ctr\", codecOptional(codecForNumber()))\n .property(\"otp_timestamp\", codecForNumber())\n .property(\"otp_code\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.OtpDeviceDetails\");\n\nexport const codecForTemplateSummaryResponse =\n (): Codec<TalerMerchantApi.TemplateSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.TemplateSummaryResponse>()\n .property(\"templates\", codecForList(codecForTemplateEntry()))\n .build(\"TalerMerchantApi.TemplateSummaryResponse\");\n\nexport const codecForTemplateEntry =\n (): Codec<TalerMerchantApi.TemplateEntry> =>\n buildCodecForObject<TalerMerchantApi.TemplateEntry>()\n .property(\"template_id\", codecForString())\n .property(\"template_description\", codecForString())\n .build(\"TalerMerchantApi.TemplateEntry\");\n\nexport const codecForTemplateDetails =\n (): Codec<TalerMerchantApi.TemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateDetails>()\n .property(\"template_description\", codecForString())\n .property(\"otp_id\", codecOptional(codecForString()))\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.TemplateDetails\");\n\nexport const codecForTemplateContractDetails =\n (): Codec<TalerMerchantApi.TemplateContractDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetails>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecForNumber())\n .property(\"pay_duration\", codecForDuration)\n .build(\"TalerMerchantApi.TemplateContractDetails\");\n\nexport const codecForTemplateContractDetailsDefaults =\n (): Codec<TalerMerchantApi.TemplateContractDetailsDefaults> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetailsDefaults>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .property(\"pay_duration\", codecOptional(codecForDuration))\n .build(\"TalerMerchantApi.TemplateContractDetailsDefaults\");\n\nexport const codecForWalletTemplateDetails =\n (): Codec<TalerMerchantApi.WalletTemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.WalletTemplateDetails>()\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.WalletTemplateDetails\");\n\nexport const codecForWebhookSummaryResponse =\n (): Codec<TalerMerchantApi.WebhookSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.WebhookSummaryResponse>()\n .property(\"webhooks\", codecForList(codecForWebhookEntry()))\n .build(\"TalerMerchantApi.WebhookSummaryResponse\");\n\nexport const codecForWebhookEntry = (): Codec<TalerMerchantApi.WebhookEntry> =>\n buildCodecForObject<TalerMerchantApi.WebhookEntry>()\n .property(\"webhook_id\", codecForString())\n .property(\"event_type\", codecForString())\n .build(\"TalerMerchantApi.WebhookEntry\");\n\nexport const codecForWebhookDetails =\n (): Codec<TalerMerchantApi.WebhookDetails> =>\n buildCodecForObject<TalerMerchantApi.WebhookDetails>()\n .property(\"event_type\", codecForString())\n .property(\"url\", codecForString())\n .property(\"http_method\", codecForString())\n .property(\"header_template\", codecOptional(codecForString()))\n .property(\"body_template\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.WebhookDetails\");\n\nexport const codecForTokenFamilyKind =\n (): Codec<TalerMerchantApi.TokenFamilyKind> =>\n codecForEither(\n codecForConstString(\"discount\"),\n codecForConstString(\"subscription\"),\n ) as any; //FIXME: create a codecForEnum\nexport const codecForTokenFamilyDetails =\n (): Codec<TalerMerchantApi.TokenFamilyDetails> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilyDetails>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"duration\", codecForDuration)\n .property(\"kind\", codecForTokenFamilyKind())\n .property(\"issued\", codecForNumber())\n .property(\"redeemed\", codecForNumber())\n .build(\"TalerMerchantApi.TokenFamilyDetails\");\n\nexport const codecForTokenFamiliesList =\n (): Codec<TalerMerchantApi.TokenFamiliesList> =>\n buildCodecForObject<TalerMerchantApi.TokenFamiliesList>()\n .property(\"token_families\", codecForList(codecForTokenFamilySummary()))\n .build(\"TalerMerchantApi.TokenFamiliesList\");\n\nexport const codecForTokenFamilySummary =\n (): Codec<TalerMerchantApi.TokenFamilySummary> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilySummary>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"kind\", codecForTokenFamilyKind())\n .build(\"TalerMerchantApi.TokenFamilySummary\");\n\nexport const codecForInstancesResponse =\n (): Codec<TalerMerchantApi.InstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.InstancesResponse>()\n .property(\"instances\", codecForList(codecForInstance()))\n .build(\"TalerMerchantApi.InstancesResponse\");\n\nexport const codecForInstance = (): Codec<TalerMerchantApi.Instance> =>\n buildCodecForObject<TalerMerchantApi.Instance>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"id\", codecForString())\n .property(\"merchant_pub\", codecForString())\n .property(\"payment_targets\", codecForList(codecForString()))\n .property(\"deleted\", codecForBoolean())\n .build(\"TalerMerchantApi.Instance\");\n\nexport const codecForExchangeConfig =\n (): Codec<TalerExchangeApi.ExchangeVersionResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeVersionResponse>()\n .property(\"version\", codecForString())\n .property(\"name\", codecForConstString(\"taler-exchange\"))\n .property(\"implementation\", codecOptional(codecForURN()))\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"supported_kyc_requirements\", codecForList(codecForString()))\n .build(\"TalerExchangeApi.ExchangeVersionResponse\");\n\nexport const codecForExchangeKeys =\n (): Codec<TalerExchangeApi.ExchangeKeysResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeKeysResponse>()\n .property(\"version\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"TalerExchangeApi.ExchangeKeysResponse\");\n\nconst codecForBalance = (): Codec<TalerCorebankApi.Balance> =>\n buildCodecForObject<TalerCorebankApi.Balance>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"credit_debit_indicator\",\n codecForEither(\n codecForConstString(\"credit\"),\n codecForConstString(\"debit\"),\n ),\n )\n .build(\"TalerCorebankApi.Balance\");\n\nconst codecForPublicAccount = (): Codec<TalerCorebankApi.PublicAccount> =>\n buildCodecForObject<TalerCorebankApi.PublicAccount>()\n .property(\"username\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.PublicAccount\");\n\nexport const codecForPublicAccountsResponse =\n (): Codec<TalerCorebankApi.PublicAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.PublicAccountsResponse>()\n .property(\"public_accounts\", codecForList(codecForPublicAccount()))\n .build(\"TalerCorebankApi.PublicAccountsResponse\");\n\nexport const codecForAccountMinimalData =\n (): Codec<TalerCorebankApi.AccountMinimalData> =>\n buildCodecForObject<TalerCorebankApi.AccountMinimalData>()\n .property(\"username\", codecForString())\n .property(\"name\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"balance\", codecForBalance())\n .property(\"row_id\", codecForNumber())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"min_cashout\", codecOptional(codecForAmountString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"status\",\n codecOptional(\n codecForEither(\n codecForConstString(\"active\"),\n codecForConstString(\"deleted\"),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountMinimalData\");\n\nexport const codecForListBankAccountsResponse =\n (): Codec<TalerCorebankApi.ListBankAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.ListBankAccountsResponse>()\n .property(\"accounts\", codecForList(codecForAccountMinimalData()))\n .build(\"TalerCorebankApi.ListBankAccountsResponse\");\n\nexport const codecForAccountData = (): Codec<TalerCorebankApi.AccountData> =>\n buildCodecForObject<TalerCorebankApi.AccountData>()\n .property(\"name\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"min_cashout\", codecOptional(codecForAmountString()))\n .property(\"contact_data\", codecOptional(codecForChallengeContactData()))\n .property(\"cashout_payto_uri\", codecOptional(codecForPaytoString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"tan_channel\",\n codecOptional(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\n \"status\",\n codecOptional(\n codecForEither(\n codecForConstString(\"active\"),\n codecForConstString(\"deleted\"),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountData\");\n\nexport const codecForChallengeContactData =\n (): Codec<TalerCorebankApi.ChallengeContactData> =>\n buildCodecForObject<TalerCorebankApi.ChallengeContactData>()\n .property(\"email\", codecOptional(codecForString()))\n .property(\"phone\", codecOptional(codecForString()))\n .build(\"TalerCorebankApi.ChallengeContactData\");\n\nexport const codecForWithdrawalPublicInfo =\n (): Codec<TalerCorebankApi.WithdrawalPublicInfo> =>\n buildCodecForObject<TalerCorebankApi.WithdrawalPublicInfo>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"username\", codecForString())\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\n \"selected_exchange_account\",\n codecOptional(codecForPaytoString()),\n )\n .build(\"TalerCorebankApi.WithdrawalPublicInfo\");\n\nexport const codecForBankAccountTransactionsResponse =\n (): Codec<TalerCorebankApi.BankAccountTransactionsResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionsResponse>()\n .property(\n \"transactions\",\n codecForList(codecForBankAccountTransactionInfo()),\n )\n .build(\"TalerCorebankApi.BankAccountTransactionsResponse\");\n\nexport const codecForBankAccountTransactionInfo =\n (): Codec<TalerCorebankApi.BankAccountTransactionInfo> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionInfo>()\n .property(\"creditor_payto_uri\", codecForPaytoString())\n .property(\"debtor_payto_uri\", codecForPaytoString())\n .property(\"amount\", codecForAmountString())\n .property(\n \"direction\",\n codecForEither(\n codecForConstString(\"debit\"),\n codecForConstString(\"credit\"),\n ),\n )\n .property(\"subject\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"date\", codecForTimestamp)\n .build(\"TalerCorebankApi.BankAccountTransactionInfo\");\n\nexport const codecForCreateTransactionResponse =\n (): Codec<TalerCorebankApi.CreateTransactionResponse> =>\n buildCodecForObject<TalerCorebankApi.CreateTransactionResponse>()\n .property(\"row_id\", codecForNumber())\n .build(\"TalerCorebankApi.CreateTransactionResponse\");\n\nexport const codecForRegisterAccountResponse =\n (): Codec<TalerCorebankApi.RegisterAccountResponse> =>\n buildCodecForObject<TalerCorebankApi.RegisterAccountResponse>()\n .property(\"internal_payto_uri\", codecForPaytoString())\n .build(\"TalerCorebankApi.RegisterAccountResponse\");\n\nexport const codecForBankAccountCreateWithdrawalResponse =\n (): Codec<TalerCorebankApi.BankAccountCreateWithdrawalResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountCreateWithdrawalResponse>()\n .property(\"taler_withdraw_uri\", codecForTalerUriString())\n .property(\"withdrawal_id\", codecForString())\n .build(\"TalerCorebankApi.BankAccountCreateWithdrawalResponse\");\n\nexport const codecForCashoutPending =\n (): Codec<TalerCorebankApi.CashoutResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutResponse>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutPending\");\n\nexport const codecForCashoutConversionResponse =\n (): Codec<TalerBankConversionApi.CashoutConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashoutConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashoutConversionResponse\");\n\nexport const codecForCashinConversionResponse =\n (): Codec<TalerBankConversionApi.CashinConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashinConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashinConversionResponse\");\n\nexport const codecForCashouts = (): Codec<TalerCorebankApi.Cashouts> =>\n buildCodecForObject<TalerCorebankApi.Cashouts>()\n .property(\"cashouts\", codecForList(codecForCashoutInfo()))\n .build(\"TalerCorebankApi.Cashouts\");\n\nexport const codecForCashoutInfo = (): Codec<TalerCorebankApi.CashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.CashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutInfo\");\n\nexport const codecForGlobalCashouts =\n (): Codec<TalerCorebankApi.GlobalCashouts> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashouts>()\n .property(\"cashouts\", codecForList(codecForGlobalCashoutInfo()))\n .build(\"TalerCorebankApi.GlobalCashouts\");\n\nexport const codecForGlobalCashoutInfo =\n (): Codec<TalerCorebankApi.GlobalCashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .property(\"username\", codecForString())\n .build(\"TalerCorebankApi.GlobalCashoutInfo\");\n\nexport const codecForCashoutStatusResponse =\n (): Codec<TalerCorebankApi.CashoutStatusResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutStatusResponse>()\n .property(\"amount_debit\", codecForAmountString())\n .property(\"amount_credit\", codecForAmountString())\n .property(\"subject\", codecForString())\n .property(\"creation_time\", codecForTimestamp)\n .build(\"TalerCorebankApi.CashoutStatusResponse\");\n\nexport const codecForConversionRatesResponse =\n (): Codec<TalerCorebankApi.ConversionRatesResponse> =>\n buildCodecForObject<TalerCorebankApi.ConversionRatesResponse>()\n .property(\"buy_at_ratio\", codecForDecimalNumber())\n .property(\"buy_in_fee\", codecForDecimalNumber())\n .property(\"sell_at_ratio\", codecForDecimalNumber())\n .property(\"sell_out_fee\", codecForDecimalNumber())\n .build(\"TalerCorebankApi.ConversionRatesResponse\");\n\nexport const codecForMonitorResponse =\n (): Codec<TalerCorebankApi.MonitorResponse> =>\n buildCodecForUnion<TalerCorebankApi.MonitorResponse>()\n .discriminateOn(\"type\")\n .alternative(\"no-conversions\", codecForMonitorNoConversion())\n .alternative(\"with-conversions\", codecForMonitorWithCashout())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForMonitorNoConversion =\n (): Codec<TalerCorebankApi.MonitorNoConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorNoConversion>()\n .property(\"type\", codecForConstString(\"no-conversions\"))\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorJustPayouts\");\n\nexport const codecForMonitorWithCashout =\n (): Codec<TalerCorebankApi.MonitorWithConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorWithConversion>()\n .property(\"type\", codecForConstString(\"with-conversions\"))\n .property(\"cashinCount\", codecForNumber())\n .property(\"cashinFiatVolume\", codecForAmountString())\n .property(\"cashinRegionalVolume\", codecForAmountString())\n .property(\"cashoutCount\", codecForNumber())\n .property(\"cashoutFiatVolume\", codecForAmountString())\n .property(\"cashoutRegionalVolume\", codecForAmountString())\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorWithCashout\");\n\nexport const codecForBankVersion =\n (): Codec<TalerBankIntegrationApi.BankVersion> =>\n buildCodecForObject<TalerBankIntegrationApi.BankVersion>()\n .property(\"currency\", codecForCurrencyName())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForLibtoolVersion())\n .build(\"TalerBankIntegrationApi.BankVersion\");\n\nexport const codecForBankWithdrawalOperationStatus =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"sender_wire\", codecOptional(codecForPaytoString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .property(\"wire_types\", codecForList(codecForString()))\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\"selected_exchange_account\", codecOptional(codecForString()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationStatus\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationPostResponse\");\n\nexport const codecForRevenueConfig = (): Codec<TalerRevenueApi.RevenueConfig> =>\n buildCodecForObject<TalerRevenueApi.RevenueConfig>()\n .property(\"name\", codecForConstString(\"taler-revenue\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"TalerRevenueApi.RevenueConfig\");\n\nexport const codecForRevenueIncomingHistory =\n (): Codec<TalerRevenueApi.RevenueIncomingHistory> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForRevenueIncomingBankTransaction()),\n )\n .build(\"TalerRevenueApi.MerchantIncomingHistory\");\n\nexport const codecForRevenueIncomingBankTransaction =\n (): Codec<TalerRevenueApi.RevenueIncomingBankTransaction> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"row_id\", codecForNumber())\n .property(\"subject\", codecForString())\n .build(\"TalerRevenueApi.RevenueIncomingBankTransaction\");\n\nexport const codecForTransferResponse =\n (): Codec<TalerWireGatewayApi.TransferResponse> =>\n buildCodecForObject<TalerWireGatewayApi.TransferResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.TransferResponse\");\n\nexport const codecForIncomingHistory =\n (): Codec<TalerWireGatewayApi.IncomingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForIncomingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.IncomingHistory\");\n\nexport const codecForIncomingBankTransaction =\n (): Codec<TalerWireGatewayApi.IncomingBankTransaction> =>\n buildCodecForUnion<TalerWireGatewayApi.IncomingBankTransaction>()\n .discriminateOn(\"type\")\n .alternative(\"RESERVE\", codecForIncomingReserveTransaction())\n .alternative(\"WAD\", codecForIncomingWadTransaction())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForIncomingReserveTransaction =\n (): Codec<TalerWireGatewayApi.IncomingReserveTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingReserveTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"reserve_pub\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"RESERVE\"))\n .build(\"TalerWireGatewayApi.IncomingReserveTransaction\");\n\nexport const codecForIncomingWadTransaction =\n (): Codec<TalerWireGatewayApi.IncomingWadTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingWadTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"origin_exchange_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"WAD\"))\n .property(\"wad_id\", codecForString())\n .build(\"TalerWireGatewayApi.IncomingWadTransaction\");\n\nexport const codecForOutgoingHistory =\n (): Codec<TalerWireGatewayApi.OutgoingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingHistory>()\n .property(\"debit_account\", codecForPaytoString())\n .property(\n \"outgoing_transactions\",\n codecForList(codecForOutgoingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.OutgoingHistory\");\n\nexport const codecForOutgoingBankTransaction =\n (): Codec<TalerWireGatewayApi.OutgoingBankTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"exchange_base_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"wtid\", codecForString())\n .build(\"TalerWireGatewayApi.OutgoingBankTransaction\");\n\nexport const codecForAddIncomingResponse =\n (): Codec<TalerWireGatewayApi.AddIncomingResponse> =>\n buildCodecForObject<TalerWireGatewayApi.AddIncomingResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.AddIncomingResponse\");\n\nexport const codecForAmlRecords = (): Codec<TalerExchangeApi.AmlRecords> =>\n buildCodecForObject<TalerExchangeApi.AmlRecords>()\n .property(\"records\", codecForList(codecForAmlRecord()))\n .build(\"TalerExchangeApi.AmlRecords\");\n\nexport const codecForAmlRecord = (): Codec<TalerExchangeApi.AmlRecord> =>\n buildCodecForObject<TalerExchangeApi.AmlRecord>()\n .property(\"current_state\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .property(\"rowid\", codecForNumber())\n .property(\"threshold\", codecForAmountString())\n .build(\"TalerExchangeApi.AmlRecord\");\n\nexport const codecForAmlDecisionDetails =\n (): Codec<TalerExchangeApi.AmlDecisionDetails> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetails>()\n .property(\"aml_history\", codecForList(codecForAmlDecisionDetail()))\n .property(\"kyc_attributes\", codecForList(codecForKycDetail()))\n .build(\"TalerExchangeApi.AmlDecisionDetails\");\n\nexport const codecForAmlDecisionDetail =\n (): Codec<TalerExchangeApi.AmlDecisionDetail> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetail>()\n .property(\"justification\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"new_threshold\", codecForAmountString())\n .property(\"decider_pub\", codecForString())\n .build(\"TalerExchangeApi.AmlDecisionDetail\");\n\nexport const codecForChallenge = (): Codec<TalerCorebankApi.Challenge> =>\n buildCodecForObject<TalerCorebankApi.Challenge>()\n .property(\"challenge_id\", codecForNumber())\n .build(\"TalerCorebankApi.Challenge\");\n\nexport const codecForTanTransmission =\n (): Codec<TalerCorebankApi.TanTransmission> =>\n buildCodecForObject<TalerCorebankApi.TanTransmission>()\n .property(\n \"tan_channel\",\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n )\n .property(\"tan_info\", codecForString())\n .build(\"TalerCorebankApi.TanTransmission\");\n\ninterface KycDetail {\n provider_section: string;\n attributes?: Object;\n collection_time: Timestamp;\n expiration_time: Timestamp;\n}\nexport const codecForKycDetail = (): Codec<TalerExchangeApi.KycDetail> =>\n buildCodecForObject<TalerExchangeApi.KycDetail>()\n .property(\"provider_section\", codecForString())\n .property(\"attributes\", codecOptional(codecForAny()))\n .property(\"collection_time\", codecForTimestamp)\n .property(\"expiration_time\", codecForTimestamp)\n .build(\"TalerExchangeApi.KycDetail\");\n\nexport const codecForAmlDecision = (): Codec<TalerExchangeApi.AmlDecision> =>\n buildCodecForObject<TalerExchangeApi.AmlDecision>()\n .property(\"justification\", codecForString())\n .property(\"new_threshold\", codecForAmountString())\n .property(\"h_payto\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"officer_sig\", codecForString())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"kyc_requirements\", codecOptional(codecForList(codecForString())))\n .build(\"TalerExchangeApi.AmlDecision\");\n\nexport const codecForConversionInfo =\n (): Codec<TalerBankConversionApi.ConversionInfo> =>\n buildCodecForObject<TalerBankConversionApi.ConversionInfo>()\n .property(\"cashin_fee\", codecForAmountString())\n .property(\"cashin_min_amount\", codecForAmountString())\n .property(\"cashin_ratio\", codecForDecimalNumber())\n .property(\n \"cashin_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashin_tiny_amount\", codecForAmountString())\n .property(\"cashout_fee\", codecForAmountString())\n .property(\"cashout_min_amount\", codecForAmountString())\n .property(\"cashout_ratio\", codecForDecimalNumber())\n .property(\n \"cashout_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashout_tiny_amount\", codecForAmountString())\n .build(\"ConversionBankConfig.ConversionInfo\");\n\nexport const codecForConversionBankConfig =\n (): Codec<TalerBankConversionApi.IntegrationConfig> =>\n buildCodecForObject<TalerBankConversionApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .property(\"fiat_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n\n .property(\"conversion_rate\", codecForConversionInfo())\n .build(\"ConversionBankConfig.IntegrationConfig\");\n\nexport const codecForChallengerTermsOfServiceResponse =\n (): Codec<ChallengerApi.ChallengerTermsOfServiceResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerTermsOfServiceResponse>()\n .property(\"name\", codecForConstString(\"challenger\"))\n .property(\"version\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"ChallengerApi.ChallengerTermsOfServiceResponse\");\n\nexport const codecForChallengeSetupResponse =\n (): Codec<ChallengerApi.ChallengeSetupResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeSetupResponse>()\n .property(\"nonce\", codecForString())\n .build(\"ChallengerApi.ChallengeSetupResponse\");\n\nexport const codecForChallengeStatus =\n (): Codec<ChallengerApi.ChallengeStatus> =>\n buildCodecForObject<ChallengerApi.ChallengeStatus>()\n .property(\"restrictions\", codecOptional(codecForMap(codecForAny())))\n .property(\"fix_address\", codecForBoolean())\n .property(\"last_address\", codecOptional(codecForMap(codecForAny())))\n .property(\"changes_left\", codecForNumber())\n .build(\"ChallengerApi.ChallengeStatus\");\nexport const codecForChallengeCreateResponse =\n (): Codec<ChallengerApi.ChallengeCreateResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeCreateResponse>()\n .property(\"attempts_left\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"transmitted\", codecForBoolean())\n .property(\"next_tx_time\", codecForString())\n .build(\"ChallengerApi.ChallengeCreateResponse\");\n\nexport const codecForInvalidPinResponse =\n (): Codec<ChallengerApi.InvalidPinResponse> =>\n buildCodecForObject<ChallengerApi.InvalidPinResponse>()\n .property(\"ec\", codecOptional(codecForNumber()))\n .property(\"hint\", codecForAny())\n .property(\"addresses_left\", codecForNumber())\n .property(\"pin_transmissions_left\", codecForNumber())\n .property(\"auth_attempts_left\", codecForNumber())\n .property(\"exhausted\", codecForBoolean())\n .property(\"no_challenge\", codecForBoolean())\n .build(\"ChallengerApi.InvalidPinResponse\");\n\nexport const codecForChallengerAuthResponse =\n (): Codec<ChallengerApi.ChallengerAuthResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerAuthResponse>()\n .property(\"access_token\", codecForString())\n .property(\"token_type\", codecForAny())\n .property(\"expires_in\", codecForNumber())\n .build(\"ChallengerApi.ChallengerAuthResponse\");\n\nexport const codecForChallengerInfoResponse =\n (): Codec<ChallengerApi.ChallengerInfoResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerInfoResponse>()\n .property(\"id\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"address_type\", codecForString())\n .property(\"expires\", codecForTimestamp)\n .build(\"ChallengerApi.ChallengerInfoResponse\");\n\ntype EmailAddress = string;\ntype PhoneNumber = string;\ntype EddsaSignature = string;\n// base32 encoded RSA blinded signature.\ntype BlindedRsaSignature = string;\ntype Base32 = string;\n\ntype DecimalNumber = string;\ntype RsaSignature = string;\ntype Float = number;\ntype LibtoolVersion = string;\n// The type of a coin's blinded envelope depends on the cipher that is used\n// for signing with a denomination key.\ntype CoinEnvelope = RSACoinEnvelope | CSCoinEnvelope;\n// For denomination signatures based on RSA, the planchet is just a blinded\n// coin's public EdDSA key.\ninterface RSACoinEnvelope {\n cipher: \"RSA\" | \"RSA+age_restricted\";\n rsa_blinded_planchet: string; // Crockford Base32 encoded\n}\n// For denomination signatures based on Blind Clause-Schnorr, the planchet\n// consists of the public nonce and two Curve25519 scalars which are two\n// blinded challenges in the Blinded Clause-Schnorr signature scheme.\n// See https://taler.net/papers/cs-thesis.pdf for details.\ninterface CSCoinEnvelope {\n cipher: \"CS\" | \"CS+age_restricted\";\n cs_nonce: string; // Crockford Base32 encoded\n cs_blinded_c0: string; // Crockford Base32 encoded\n cs_blinded_c1: string; // Crockford Base32 encoded\n}\n// Secret for blinding/unblinding.\n// An RSA blinding secret, which is basically\n// a 256-bit nonce, converted to Crockford Base32.\ntype DenominationBlindingKeyP = string;\n\n//FIXME: implement this codec\nconst codecForURL = codecForString;\n//FIXME: implement this codec\nconst codecForLibtoolVersion = codecForString;\n//FIXME: implement this codec\nconst codecForCurrencyName = codecForString;\n//FIXME: implement this codec\nconst codecForDecimalNumber = codecForString;\n\nexport type WithdrawalOperationStatus =\n | \"pending\"\n | \"selected\"\n | \"aborted\"\n | \"confirmed\";\n\nexport namespace TalerWireGatewayApi {\n export interface TransferResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n\n export interface TransferRequest {\n // Nonce to make the request idempotent. Requests with the same\n // transaction_uid that differ in any of the other fields\n // are rejected.\n request_uid: HashCode;\n\n // Amount to transfer.\n amount: AmountString;\n\n // Base URL of the exchange. Shall be included by the bank gateway\n // in the appropriate section of the wire transfer details.\n exchange_base_url: string;\n\n // Wire transfer identifier chosen by the exchange,\n // used by the merchant to identify the Taler order(s)\n // associated with this wire transfer.\n wtid: ShortHashCode;\n\n // The recipient's account identifier as a payto URI.\n credit_account: PaytoString;\n }\n\n export interface IncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: IncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if incoming transaction is empty\n credit_account?: PaytoString;\n }\n\n // Union discriminated by the \"type\" field.\n export type IncomingBankTransaction =\n | IncomingReserveTransaction\n | IncomingWadTransaction;\n\n export interface IncomingReserveTransaction {\n type: \"RESERVE\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // The reserve public key extracted from the transaction details.\n reserve_pub: EddsaPublicKey;\n }\n\n export interface IncomingWadTransaction {\n type: \"WAD\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n credit_account: PaytoString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // Base URL of the exchange that originated the wad.\n origin_exchange_url: string;\n\n // The reserve public key extracted from the transaction details.\n wad_id: WadId;\n }\n\n export interface OutgoingHistory {\n // Array of outgoing transactions.\n outgoing_transactions: OutgoingBankTransaction[];\n\n // Payto URI to identify the sender of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if outgoing transactions is empty\n debit_account?: PaytoString;\n }\n\n export interface OutgoingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n credit_account: PaytoString;\n\n // The wire transfer ID in the outgoing transaction.\n wtid: ShortHashCode;\n\n // Base URL of the exchange.\n exchange_base_url: string;\n }\n\n export interface AddIncomingRequest {\n // Amount to transfer.\n amount: AmountString;\n\n // Reserve public key that is included in the wire transfer details\n // to identify the reserve that is being topped up.\n reserve_pub: EddsaPublicKey;\n\n // Account (as payto URI) that makes the wire transfer to the exchange.\n // Usually this account must be created by the test harness before this API is\n // used. An exception is the \"exchange-fakebank\", where any debit account can be\n // specified, as it is automatically created.\n debit_account: PaytoString;\n }\n\n export interface AddIncomingResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n}\n\nexport namespace TalerRevenueApi {\n export interface RevenueConfig {\n // Name of the API.\n name: \"taler-revenue\";\n\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this gateway.\n currency: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface RevenueIncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: RevenueIncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n credit_account: string;\n }\n\n export interface RevenueIncomingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: string;\n\n // The wire transfer subject.\n subject: string;\n }\n}\n\nexport namespace TalerBankConversionApi {\n export interface ConversionInfo {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n }\n\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n // Currency used by this bank.\n regional_currency: string;\n\n // How the bank SPA should render this currency.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency: string;\n\n // How the bank SPA should render this currency.\n fiat_currency_specification: CurrencySpecification;\n\n // Extra conversion rate information.\n // Only present if server opts in to report the static conversion rate.\n conversion_rate: ConversionInfo;\n }\n\n export interface CashinConversionResponse {\n // Amount that the user will get deducted from their fiat\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their regional\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export interface CashoutConversionResponse {\n // Amount that the user will get deducted from their regional\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their fiat\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export type RoundingMode = \"zero\" | \"up\" | \"nearest\";\n\n export interface ConversionRate {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: RoundingMode;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: RoundingMode;\n }\n}\n\nexport namespace TalerBankIntegrationApi {\n export interface BankVersion {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification?: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n\n export interface BankWithdrawalOperationStatus {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Bank account of the customer that is withdrawing, as a\n // payto URI.\n sender_wire?: PaytoString;\n\n // Suggestion for an exchange given by the bank.\n suggested_exchange?: string;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Wire transfer types supported by the bank.\n wire_types: string[];\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: string;\n }\n\n export interface BankWithdrawalOperationPostRequest {\n // Reserve public key.\n reserve_pub: string;\n\n // Payto address of the exchange selected for the withdrawal.\n selected_exchange: PaytoString;\n }\n\n export interface BankWithdrawalOperationPostResponse {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: Omit<\"pending\", WithdrawalOperationStatus>;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n }\n}\n\nexport namespace TalerCorebankApi {\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n export interface Config {\n // Name of this API, always \"taler-corebank\".\n name: \"libeufin-bank\";\n // name: \"taler-corebank\";\n\n // API version in the form $n:$n:$n\n version: string;\n\n // Bank display name to be used in user interfaces.\n // For consistency use \"Taler Bank\" if missing.\n // @since v4, will become mandatory in the next version.\n bank_name: string;\n\n // Advertised base URL to use when you sharing an URL with another\n // program.\n // @since v4.\n base_url?: string;\n\n // If 'true' the server provides local currency conversion support\n // If 'false' some parts of the API are not supported and return 501\n allow_conversion: boolean;\n\n // If 'true' anyone can register\n // If 'false' only the admin can\n allow_registrations: boolean;\n\n // If 'true' account can delete themselves\n // If 'false' only the admin can delete accounts\n allow_deletions: boolean;\n\n // If 'true' anyone can edit their name\n // If 'false' only admin can\n allow_edit_name: boolean;\n\n // If 'true' anyone can edit their cashout account\n // If 'false' only the admin\n allow_edit_cashout_payto_uri: boolean;\n\n // Default debt limit for newly created accounts\n default_debit_threshold: AmountString;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // TAN channels supported by the server\n supported_tan_channels: TanChannel[];\n\n // Wire transfer type supported by the bank.\n // Default to 'iban' is missing\n // @since v4, may become mandatory in the future.\n wire_type: string;\n }\n\n export interface BankAccountCreateWithdrawalRequest {\n // Amount to withdraw.\n amount: AmountString;\n }\n export interface BankAccountCreateWithdrawalResponse {\n // ID of the withdrawal, can be used to view/modify the withdrawal operation.\n withdrawal_id: string;\n\n // URI that can be passed to the wallet to initiate the withdrawal.\n taler_withdraw_uri: TalerUriString;\n }\n export interface WithdrawalPublicInfo {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Account username\n username: string;\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: PaytoString;\n }\n\n export interface BankAccountTransactionsResponse {\n transactions: BankAccountTransactionInfo[];\n }\n\n export interface BankAccountTransactionInfo {\n creditor_payto_uri: PaytoString;\n debtor_payto_uri: PaytoString;\n\n amount: AmountString;\n direction: \"debit\" | \"credit\";\n\n subject: string;\n\n // Transaction unique ID. Matches\n // $transaction_id from the URI.\n row_id: number;\n date: Timestamp;\n }\n\n export interface CreateTransactionRequest {\n // Address in the Payto format of the wire transfer receiver.\n // It needs at least the 'message' query string parameter.\n payto_uri: PaytoString;\n\n // Transaction amount (in the $currency:x.y format), optional.\n // However, when not given, its value must occupy the 'amount'\n // query string parameter of the 'payto' field. In case it\n // is given in both places, the paytoUri's takes the precedence.\n amount?: AmountString;\n\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n // @since v4, will become mandatory in the next version.\n request_uid?: ShortHashCode;\n }\n\n export interface CreateTransactionResponse {\n // ID identifying the transaction being created\n row_id: Integer;\n }\n\n export interface RegisterAccountResponse {\n // Internal payto URI of this bank account.\n internal_payto_uri: PaytoString;\n }\n\n export interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n contact_data?: ChallengeContactData;\n\n // 'payto' address of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n cashout_payto_uri?: PaytoString;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: PaytoString;\n\n // If present, set the max debit allowed for this user\n // Only admin can set this property.\n debit_threshold?: AmountString;\n\n // If present, set a custom minimum cashout amount for this account.\n // Only admin can set this property\n // @since v4\n min_cashout?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n // Only admin can set this property, other user can reconfig their account\n // after creation.\n tan_channel?: TanChannel;\n }\n\n export interface ChallengeContactData {\n // E-Mail address\n email?: EmailAddress;\n\n // Phone number.\n phone?: PhoneNumber;\n }\n\n export interface AccountReconfiguration {\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n // Only admin can change this property.\n contact_data?: ChallengeContactData;\n\n // 'payto' URI of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n // Only admin can change this property if not allowed in config\n cashout_payto_uri?: PaytoString;\n\n // If present, change the legal name associated with $username.\n // Only admin can change this property if not allowed in config\n name?: string;\n\n // Make this account visible to anyone?\n is_public?: boolean;\n\n // If present, change the max debit allowed for this user\n // Only admin can change this property.\n debit_threshold?: AmountString;\n\n // If present, change the custom minimum cashout amount for this account.\n // Only admin can set this property\n // @since v4\n min_cashout?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n tan_channel?: TanChannel | null;\n }\n\n export interface AccountPasswordChange {\n // New password.\n new_password: string;\n // Old password. If present, check that the old password matches.\n // Optional for admin account.\n old_password?: string;\n }\n\n export interface PublicAccountsResponse {\n public_accounts: PublicAccount[];\n }\n export interface PublicAccount {\n // Username of the account\n username: string;\n\n // Internal payto URI of this bank account.\n payto_uri: string;\n\n // Current balance of the account\n balance: Balance;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface ListBankAccountsResponse {\n accounts: AccountMinimalData[];\n }\n export interface Balance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n }\n export interface AccountMinimalData {\n // Username\n username: string;\n\n // Legal name of the account owner.\n name: string;\n\n // Internal payto URI of this bank account.\n payto_uri: PaytoString;\n\n // current balance of the account\n balance: Balance;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Custom minimum cashout amount for this account.\n // If null or absent, the global conversion fee is used.\n // @since v4\n min_cashout?: AmountString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n\n // Current status of the account\n // active: the account can be used\n // deleted: the account has been deleted but is retained for compliance\n // reasons, only the administrator can access it\n // Default to 'active' is missing\n // @since v4, will become mandatory in the next version.\n status?: \"active\" | \"deleted\";\n }\n\n export interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: Balance;\n\n // payto://-URI of the account.\n payto_uri: PaytoString;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Custom minimum cashout amount for this account.\n // If null or absent, the global conversion fee is used.\n // @since v4\n min_cashout?: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: PaytoString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Is 2FA enabled and what channel is used for challenges?\n tan_channel?: TanChannel;\n \n // Current status of the account\n // active: the account can be used\n // deleted: the account has been deleted but is retained for compliance\n // reasons, only the administrator can access it\n // Default to 'active' is missing\n // @since v4, will become mandatory in the next version.\n status?: \"active\" | \"deleted\";\n }\n\n export interface CashoutRequest {\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n request_uid: ShortHashCode;\n\n // Optional subject to associate to the\n // cashout operation. This data will appear\n // as the incoming wire transfer subject in\n // the user's fiat bank account.\n subject?: string;\n\n // That is the plain amount that the user specified\n // to cashout. Its $currency is the (regional) currency of the\n // bank instance.\n amount_debit: AmountString;\n\n // That is the amount that will effectively be\n // transferred by the bank to the user's bank\n // account, that is external to the regional currency.\n // It is expressed in the fiat currency and\n // is calculated after the cashout fee and the\n // exchange rate. See the /cashout-rates call.\n // The client needs to calculate this amount\n // correctly based on the amount_debit and the cashout rate,\n // otherwise the request will fail.\n amount_credit: AmountString;\n }\n\n export interface CashoutResponse {\n // ID identifying the operation being created\n cashout_id: number;\n }\n\n /**\n * @deprecated since 4, use 2fa\n */\n export interface CashoutConfirmRequest {\n // the TAN that confirms $CASHOUT_ID.\n tan: string;\n }\n\n export interface Cashouts {\n // Every string represents a cash-out operation ID.\n cashouts: CashoutInfo[];\n }\n\n export interface CashoutInfo {\n cashout_id: number;\n /**\n * @deprecated since 4, use new 2fa\n */\n status?: \"pending\" | \"aborted\" | \"confirmed\";\n }\n export interface GlobalCashouts {\n // Every string represents a cash-out operation ID.\n cashouts: GlobalCashoutInfo[];\n }\n export interface GlobalCashoutInfo {\n cashout_id: number;\n username: string;\n }\n\n export interface CashoutStatusResponse {\n // Amount debited to the internal\n // regional currency bank account.\n amount_debit: AmountString;\n\n // Amount credited to the external bank account.\n amount_credit: AmountString;\n\n // Transaction subject.\n subject: string;\n\n // Time when the cashout was created.\n creation_time: Timestamp;\n }\n\n export interface ConversionRatesResponse {\n // Exchange rate to buy the local currency from the external one\n buy_at_ratio: DecimalNumber;\n\n // Exchange rate to sell the local currency for the external one\n sell_at_ratio: DecimalNumber;\n\n // Fee to subtract after applying the buy ratio.\n buy_in_fee: DecimalNumber;\n\n // Fee to subtract after applying the sell ratio.\n sell_out_fee: DecimalNumber;\n }\n\n export enum MonitorTimeframeParam {\n hour,\n day,\n month,\n year,\n decade,\n }\n\n export type MonitorResponse = MonitorNoConversion | MonitorWithConversion;\n\n // Monitoring stats when conversion is not supported\n export interface MonitorNoConversion {\n type: \"no-conversions\";\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n // Monitoring stats when conversion is supported\n export interface MonitorWithConversion {\n type: \"with-conversions\";\n\n // How many cashin operations were confirmed by a\n // wallet owner. Note: wallet owners\n // are NOT required to be customers of the libeufin-bank.\n cashinCount: number;\n\n // Overall regional currency that has been paid by the regional admin account\n // to regional bank accounts to fulfill all the confirmed cashin operations.\n cashinRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid to the fiat admin account\n // by fiat bank accounts to fulfill all the confirmed cashin operations.\n cashinFiatVolume: AmountString;\n\n // How many cashout operations were confirmed.\n cashoutCount: number;\n\n // Overall regional currency that has been paid to the regional admin account\n // by fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid by the fiat admin account\n // to fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutFiatVolume: AmountString;\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n export interface TanTransmission {\n // Channel of the last successful transmission of the TAN challenge.\n tan_channel: TanChannel;\n\n // Info of the last successful transmission of the TAN challenge.\n tan_info: string;\n }\n\n export interface Challenge {\n // Unique identifier of the challenge to solve to run this protected\n // operation.\n challenge_id: number;\n }\n\n export interface ChallengeSolve {\n // The TAN code that solves $CHALLENGE_ID\n tan: string;\n }\n\n export enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n }\n}\n\nexport namespace TalerExchangeApi {\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n export interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: AmountString;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: AmountString;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n export interface AmlDecision {\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: AmountString;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n export interface ExchangeVersionResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-exchange\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v18, may become mandatory in the future.\n implementation?: string;\n\n // Currency supported by this exchange, given\n // as a currency code (\"USD\" or \"EUR\").\n currency: string;\n\n // How wallets should render this currency.\n currency_specification: CurrencySpecification;\n\n // Names of supported KYC requirements.\n supported_kyc_requirements: string[];\n }\n\n export type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n // Account restriction that disables this type of\n // account for the indicated operation categorically.\n export interface DenyAllAccountRestriction {\n type: \"deny\";\n }\n // Accounts interacting with this type of account\n // restriction must have a payto://-URI matching\n // the given regex.\n export interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: { [lang_tag: string]: string };\n }\n\n export interface WireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: PaytoString;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignature;\n }\n\n export interface ExchangeKeysResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // The exchange's base URL.\n base_url: string;\n\n // The exchange's currency or asset unit.\n currency: string;\n\n /**\n * FIXME: PARTIALLY IMPLEMENTED!!\n */\n\n // How wallets should render this currency.\n // currency_specification: CurrencySpecification;\n\n // // Absolute cost offset for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // stefan_abs: AmountString;\n\n // // Factor to multiply the logarithm of the amount\n // // with to (over) approximate fees payable by amount.\n // // Note that the total to be paid is first to be\n // // divided by the smallest denomination to obtain\n // // the value that the logarithm is to be taken of.\n // stefan_log: AmountString;\n\n // // Linear cost factor for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // //\n // // Note that this is a scalar, as it is multiplied\n // // with the actual amount.\n // stefan_lin: Float;\n\n // // Type of the asset. \"fiat\", \"crypto\", \"regional\"\n // // or \"stock\". Wallets should adjust their UI/UX\n // // based on this value.\n // asset_type: string;\n\n // // Array of wire accounts operated by the exchange for\n // // incoming wire transfers.\n // accounts: WireAccount[];\n\n // // Object mapping names of wire methods (i.e. \"iban\" or \"x-taler-bank\")\n // // to wire fees.\n // wire_fees: { method: AggregateTransferFee[] };\n\n // // List of exchanges that this exchange is partnering\n // // with to enable wallet-to-wallet transfers.\n // wads: ExchangePartner[];\n\n // // Set to true if this exchange allows the use\n // // of reserves for rewards.\n // // @deprecated in protocol v18.\n // rewards_allowed: false;\n\n // // EdDSA master public key of the exchange, used to sign entries\n // // in denoms and signkeys.\n // master_public_key: EddsaPublicKey;\n\n // // Relative duration until inactive reserves are closed;\n // // not signed (!), can change without notice.\n // reserve_closing_delay: RelativeTime;\n\n // // Threshold amounts beyond which wallet should\n // // trigger the KYC process of the issuing\n // // exchange. Optional option, if not given there is no limit.\n // // Currency must match currency.\n // wallet_balance_limit_without_kyc?: AmountString[];\n\n // // Denominations offered by this exchange\n // denominations: DenomGroup[];\n\n // // Compact EdDSA signature (binary-only) over the\n // // contatentation of all of the master_sigs (in reverse\n // // chronological order by group) in the arrays under\n // // \"denominations\". Signature of TALER_ExchangeKeySetPS\n // exchange_sig: EddsaSignature;\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 signkeys. It is given\n // // explicitly as the client might otherwise be confused by clock skew as to\n // // which signing key was used for the exchange_sig.\n // exchange_pub: EddsaPublicKey;\n\n // // Denominations for which the exchange currently offers/requests recoup.\n // recoup: Recoup[];\n\n // // Array of globally applicable fees by time range.\n // global_fees: GlobalFees[];\n\n // // The date when the denomination keys were last updated.\n // list_issue_date: Timestamp;\n\n // // Auditors of the exchange.\n // auditors: AuditorKeys[];\n\n // // The exchange's signing keys.\n // signkeys: SignKey[];\n\n // // Optional field with a dictionary of (name, object) pairs defining the\n // // supported and enabled extensions, such as age_restriction.\n // extensions?: { name: ExtensionManifest };\n\n // // Signature by the exchange master key of the SHA-256 hash of the\n // // normalized JSON-object of field extensions, if it was set.\n // // The signature has purpose TALER_SIGNATURE_MASTER_EXTENSIONS.\n // extensions_sig?: EddsaSignature;\n }\n\n interface ExtensionManifest {\n // The criticality of the extension MUST be provided. It has the same\n // semantics as \"critical\" has for extensions in X.509:\n // - if \"true\", the client must \"understand\" the extension before\n // proceeding,\n // - if \"false\", clients can safely skip extensions they do not\n // understand.\n // (see https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)\n critical: boolean;\n\n // The version information MUST be provided in Taler's protocol version\n // ranges notation, see\n // https://docs.taler.net/core/api-common.html#protocol-version-ranges\n version: LibtoolVersion;\n\n // Optional configuration object, defined by the feature itself\n config?: object;\n }\n\n interface SignKey {\n // The actual exchange's EdDSA signing public key.\n key: EddsaPublicKey;\n\n // Initial validity date for the signing key.\n stamp_start: Timestamp;\n\n // Date when the exchange will stop using the signing key, allowed to overlap\n // slightly with the next signing key's validity to allow for clock skew.\n stamp_expire: Timestamp;\n\n // Date when all signatures made by the signing key expire and should\n // henceforth no longer be considered valid in legal disputes.\n stamp_end: Timestamp;\n\n // Signature over key and stamp_expire by the exchange master key.\n // Signature of TALER_ExchangeSigningKeyValidityPS.\n // Must have purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.\n master_sig: EddsaSignature;\n }\n\n interface AuditorKeys {\n // The auditor's EdDSA signing public key.\n auditor_pub: EddsaPublicKey;\n\n // The auditor's URL.\n auditor_url: string;\n\n // The auditor's name (for humans).\n auditor_name: string;\n\n // An array of denomination keys the auditor affirms with its signature.\n // Note that the message only includes the hash of the public key, while the\n // signature is actually over the expanded information including expiration\n // times and fees. The exact format is described below.\n denomination_keys: AuditorDenominationKey[];\n }\n interface AuditorDenominationKey {\n // Hash of the public RSA key used to sign coins of the respective\n // denomination. Note that the auditor's signature covers more than just\n // the hash, but this other information is already provided in denoms and\n // thus not repeated here.\n denom_pub_h: HashCode;\n\n // Signature of TALER_ExchangeKeyValidityPS.\n auditor_sig: EddsaSignature;\n }\n\n interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: Timestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: Timestamp;\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: RelativeTime;\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: Integer;\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: RelativeTime;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: EddsaSignature;\n }\n\n interface Recoup {\n // Hash of the public key of the denomination that is being revoked under\n // emergency protocol (see /recoup).\n h_denom_pub: HashCode;\n\n // We do not include any signature here, as the primary use-case for\n // this emergency involves the exchange having lost its signing keys,\n // so such a signature here would be pretty worthless. However, the\n // exchange will not honor /recoup requests unless they are for\n // denomination keys listed here.\n }\n\n interface AggregateTransferFee {\n // Per transfer wire transfer fee.\n wire_fee: AmountString;\n\n // Per transfer closing fee.\n closing_fee: AmountString;\n\n // What date (inclusive) does this fee go into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n start_date: Timestamp;\n\n // What date (exclusive) does this fee stop going into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n end_date: Timestamp;\n\n // Signature of TALER_MasterWireFeePS with\n // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.\n sig: EddsaSignature;\n }\n\n interface ExchangePartner {\n // Base URL of the partner exchange.\n partner_base_url: string;\n\n // Public master key of the partner exchange.\n partner_master_pub: EddsaPublicKey;\n\n // Per exchange-to-exchange transfer (wad) fee.\n wad_fee: AmountString;\n\n // Exchange-to-exchange wad (wire) transfer frequency.\n wad_frequency: RelativeTime;\n\n // When did this partnership begin (under these conditions)?\n start_date: Timestamp;\n\n // How long is this partnership expected to last?\n end_date: Timestamp;\n\n // Signature using the exchange's offline key over\n // TALER_WadPartnerSignaturePS\n // with purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS.\n master_sig: EddsaSignature;\n }\n\n type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n\n // Binary representation of the age groups.\n // The bits set in the mask mark the edges at the beginning of a next age\n // group. F.e. for the age groups\n // 0-7, 8-9, 10-11, 12-13, 14-15, 16-17, 18-21, 21-*\n // the following bits are set:\n //\n // 31 24 16 8 0\n // | | | | |\n // oooooooo oo1oo1o1 o1o1o1o1 ooooooo1\n //\n // A value of 0 means that the exchange does not support the extension for\n // age-restriction.\n type AgeMask = Integer;\n\n interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n // Common attributes for all denomination groups\n interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n }\n interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignature;\n\n // When does the denomination key become valid?\n stamp_start: Timestamp;\n\n // When is it no longer possible to withdraw coins\n // of this denomination?\n stamp_expire_withdraw: Timestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_deposit: Timestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: Timestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n }\n type DenominationKey = RsaDenominationKey | CSDenominationKey;\n interface RsaDenominationKey {\n cipher: \"RSA\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // RSA public key\n rsa_public_key: RsaPublicKey;\n }\n interface CSDenominationKey {\n cipher: \"CS\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // Public key of the denomination.\n cs_public_key: Cs25519Point;\n }\n}\n\nexport namespace TalerMerchantApi {\n export interface VersionResponse {\n // libtool-style representation of the Merchant protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-merchant\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since **v8**, may become mandatory in the future.\n implementation?: string;\n\n // Default (!) currency supported by this backend.\n // This is the currency that the backend should\n // suggest by default to the user when entering\n // amounts. See currencies for a list of\n // supported currencies and how to render them.\n currency: string;\n\n // How services should render currencies supported\n // by this backend. Maps\n // currency codes (e.g. \"EUR\" or \"KUDOS\") to\n // the respective currency specification.\n // All currencies in this map are supported by\n // the backend. Note that the actual currency\n // specifications are a *hint* for applications\n // that would like *advice* on how to render amounts.\n // Applications *may* ignore the currency specification\n // if they know how to render currencies that they are\n // used with.\n currencies: { [currency: string]: CurrencySpecification };\n\n // Array of exchanges trusted by the merchant.\n // Since protocol **v6**.\n exchanges: ExchangeConfigInfo[];\n }\n\n export interface ExchangeConfigInfo {\n // Base URL of the exchange REST API.\n base_url: string;\n\n // Currency for which the merchant is configured\n // to trust the exchange.\n // May not be the one the exchange actually uses,\n // but is the only one we would trust this exchange for.\n currency: string;\n\n // Offline master public key of the exchange. The\n // /keys data must be signed with this public\n // key for us to trust it.\n master_pub: EddsaPublicKey;\n }\n export interface ClaimRequest {\n // Nonce to identify the wallet that claimed the order.\n nonce: string;\n\n // Token that authorizes the wallet to claim the order.\n // *Optional* as the merchant may not have required it\n // (create_token set to false in PostOrderRequest).\n token?: ClaimToken;\n }\n\n export interface ClaimResponse {\n // Contract terms of the claimed order\n contract_terms: ContractTerms;\n\n // Signature by the merchant over the contract terms.\n sig: EddsaSignature;\n }\n\n export interface PaymentResponse {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Text to be shown to the point-of-sale staff as a proof of\n // payment.\n pos_confirmation?: string;\n }\n\n export interface PaymentStatusRequestParams {\n // Hash of the order\u2019s contract terms (this is used to\n // authenticate the wallet/customer in case\n // $ORDER_ID is guessable).\n // Required once an order was claimed.\n contractTermHash?: string;\n // Authorizes the request via the claim token that\n // was returned in the PostOrderResponse. Used with\n // unclaimed orders only. Whether token authorization is\n // required is determined by the merchant when the\n // frontend creates the order.\n claimToken?: string;\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // If specified, the merchant backend will wait up to\n // timeout_ms milliseconds for completion of the payment\n // before sending the HTTP response. A client must never\n // rely on this behavior, as the merchant backend may return\n // a response immediately.\n timeout?: number;\n // If set to \u201Cyes\u201D, poll for the order\u2019s pending refunds\n // to be picked up. timeout_ms specifies how long we\n // will wait for the refund.\n awaitRefundObtained?: boolean;\n // Indicates that we are polling for a refund above the\n // given AMOUNT. timeout_ms will specify how long we\n // will wait for the refund.\n refund?: AmountString;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface GetKycStatusRequestParams {\n // If specified, the KYC check should return\n // the KYC status only for this wire account.\n // Otherwise, for all wire accounts.\n wireHash?: string;\n // If specified, the KYC check should return\n // the KYC status only for the given exchange.\n // Otherwise, for all exchanges we interacted with.\n exchangeURL?: string;\n // If specified, the merchant will wait up to\n // timeout_ms milliseconds for the exchanges to\n // confirm completion of the KYC process(es).\n timeout?: number;\n }\n export interface GetOtpDeviceRequestParams {\n // Timestamp in seconds to use when calculating\n // the current OTP code of the device. Since protocol v10.\n faketime?: number;\n // Price to use when calculating the current OTP\n // code of the device. Since protocol v10.\n price?: AmountString;\n }\n export interface GetOrderRequestParams {\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // Timeout in milliseconds to wait for a payment if\n // the answer would otherwise be negative (long polling).\n timeout?: number;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface ListWireTransferRequestParams {\n // Filter for transfers to the given bank account\n // (subject and amount MUST NOT be given in the payto URI).\n paytoURI?: string;\n // Filter for transfers executed before the given timestamp.\n before?: number;\n // Filter for transfers executed after the given timestamp.\n after?: number;\n // At most return the given number of results. Negative for\n // descending in execution time, positive for ascending in\n // execution time. Default is -20.\n limit?: number;\n // Starting transfer_serial_id for an iteration.\n offset?: string;\n // Filter transfers by verification status.\n verified?: boolean;\n order?: \"asc\" | \"dec\";\n }\n export interface ListOrdersRequestParams {\n // If set to yes, only return paid orders, if no only\n // unpaid orders. Do not give (or use \u201Call\u201D) to see all\n // orders regardless of payment status.\n paid?: boolean;\n // If set to yes, only return refunded orders, if no only\n // unrefunded orders. Do not give (or use \u201Call\u201D) to see\n // all orders regardless of refund status.\n refunded?: boolean;\n // If set to yes, only return wired orders, if no only\n // orders with missing wire transfers. Do not give (or\n // use \u201Call\u201D) to see all orders regardless of wire transfer\n // status.\n wired?: boolean;\n // At most return the given number of results. Negative\n // for descending by row ID, positive for ascending by\n // row ID. Default is 20. Since protocol v12.\n limit?: number;\n // Non-negative date in seconds after the UNIX Epoc, see delta\n // for its interpretation. If not specified, we default to the\n // oldest or most recent entry, depending on delta.\n date?: AbsoluteTime;\n // Starting product_serial_id for an iteration.\n // Since protocol v12.\n offset?: string;\n // Timeout in milliseconds to wait for additional orders if the\n // answer would otherwise be negative (long polling). Only useful\n // if delta is positive. Note that the merchant MAY still return\n // a response that contains fewer than delta orders.\n timeout?: number;\n // Since protocol v6. Filters by session ID.\n sessionId?: string;\n // Since protocol v6. Filters by fulfillment URL.\n fulfillmentUrl?: string;\n\n order?: \"asc\" | \"dec\";\n }\n\n export interface PayRequest {\n // The coins used to make the payment.\n coins: CoinPaySig[];\n\n // Custom inputs from the wallet for the contract.\n wallet_data?: Object;\n\n // The session for which the payment is made (or replayed).\n // Only set for session-based payments.\n session_id?: string;\n }\n export interface CoinPaySig {\n // Signature by the coin.\n coin_sig: EddsaSignature;\n\n // Public key of the coin being spent.\n coin_pub: EddsaPublicKey;\n\n // Signature made by the denomination public key.\n ub_sig: RsaSignature;\n\n // The hash of the denomination public key associated with this coin.\n h_denom: HashCode;\n\n // The amount that is subtracted from this coin with this payment.\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n }\n\n export interface StatusPaid {\n type: \"paid\";\n\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 export interface StatusGotoResponse {\n type: \"goto\";\n // The client should go to the reorder URL, there a fresh\n // order might be created as this one is taken by another\n // customer or wallet (or repurchase detection logic may\n // apply).\n public_reorder_url: string;\n }\n export interface StatusUnpaidResponse {\n type: \"unpaid\";\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n fulfillment_url?: string;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n }\n\n export interface PaidRefundStatusResponse {\n // Text to be shown to the point-of-sale staff as a proof of\n // payment (present only if reusable OTP algorithm is used).\n pos_confirmation?: string;\n\n // True if the order has been subjected to\n // refunds. False if it was simply paid.\n refunded: boolean;\n }\n export interface PaidRequest {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer and to enable signature verification without\n // database access).\n h_contract: HashCode;\n\n // Hash over custom inputs from the wallet for the contract.\n wallet_data_hash?: HashCode;\n\n // Session id for which the payment is proven.\n session_id: string;\n }\n\n export 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: HashCode;\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 interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKey;\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 export 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 export type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n // Details about why a refund failed.\n export 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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\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.\n export 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: EddsaSignature;\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: EddsaPublicKey;\n }\n\n export interface WalletRefundRequest {\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer).\n h_contract: HashCode;\n }\n export interface WalletRefundResponse {\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Successful refunds for this payment, empty array for none.\n refunds: MerchantCoinRefundStatus[];\n\n // Public key of the merchant.\n merchant_pub: EddsaPublicKey;\n }\n export type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n // Details about why a refund failed.\n export interface MerchantCoinRefundFailureStatus {\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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\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.\n export interface MerchantCoinRefundSuccessStatus {\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: EddsaSignature;\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: EddsaPublicKey;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\n }\n\n interface RewardInformation {\n // Exchange from which the reward will be withdrawn. Needed by the\n // wallet to determine denominations, fees, etc.\n exchange_url: string;\n\n // URL where to go after obtaining the reward.\n next_url: string;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n // Note that rewards that have expired MAY also result in a 404 response.\n expiration: Timestamp;\n }\n\n interface RewardPickupRequest {\n // List of planchets the wallet wants to use for the reward.\n planchets: PlanchetDetail[];\n }\n interface PlanchetDetail {\n // Hash of the denomination's public key (hashed to reduce\n // bandwidth consumption).\n denom_pub_hash: HashCode;\n\n // Coin's blinded public key.\n coin_ev: CoinEnvelope;\n }\n interface RewardResponse {\n // Blind RSA signatures over the planchets.\n // The order of the signatures matches the planchets list.\n blind_sigs: BlindSignature[];\n }\n interface BlindSignature {\n // The (blind) RSA signature. Still needs to be unblinded.\n blind_sig: BlindedRsaSignature;\n }\n\n export interface InstanceConfigurationMessage {\n // Name of the merchant instance to create (will become $INSTANCE).\n // Must match the regex ^[A-Za-z0-9][A-Za-z0-9_.@-]+$.\n id: string;\n\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Authentication settings for this instance\n auth: InstanceAuthConfigurationMessage;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstanceAuthConfigurationMessage {\n // Type of authentication.\n // \"external\": The mechant backend does not do\n // any authentication checks. Instead an API\n // gateway must do the authentication.\n // \"token\": The merchant checks an auth token.\n // See \"token\" for details.\n method: \"external\" | \"token\";\n\n // For method \"token\", this field is mandatory.\n // The token MUST begin with the string \"secret-token:\".\n // After the auth token has been set (with method \"token\"),\n // the value must be provided in a \"Authorization: Bearer $token\"\n // header.\n token?: AccessToken;\n }\n\n export interface InstanceReconfigurationMessage {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstancesResponse {\n // List of instances that are present in the backend (see Instance).\n instances: Instance[];\n }\n\n export interface Instance {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Merchant instance this response is about ($INSTANCE).\n id: string;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // List of the payment targets supported by this instance. Clients can\n // specify the desired payment target in /order requests. Note that\n // front-ends do not have to support wallets selecting payment targets.\n payment_targets: string[];\n\n // Has this instance been deleted (but not purged)?\n deleted: boolean;\n }\n\n export interface QueryInstancesResponse {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n\n // Authentication configuration.\n // Does not contain the token when token auth is configured.\n auth: {\n method: \"external\" | \"token\";\n };\n }\n\n export interface AccountKycRedirects {\n // Array of pending KYCs.\n pending_kycs: MerchantAccountKycRedirect[];\n\n // Array of exchanges with no reply.\n timeout_kycs: ExchangeKycTimeout[];\n }\n\n export interface MerchantAccountKycRedirect {\n // URL that the user should open in a browser to\n // proceed with the KYC process (as returned\n // by the exchange's /kyc-check/ endpoint).\n // Optional, missing if the account is blocked\n // due to AML and not due to KYC.\n kyc_url?: string;\n\n // AML status of the account.\n aml_status: Integer;\n\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Our bank wire account this is about.\n payto_uri: PaytoString;\n }\n\n export interface ExchangeKycTimeout {\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Numeric error code indicating errors the exchange\n // returned, or TALER_EC_INVALID for none.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information about the KYC status.\n // 0 if there was no response at all.\n exchange_http_status: number;\n }\n\n export interface AccountAddDetails {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export type FacadeCredentials =\n | NoFacadeCredentials\n | BasicAuthFacadeCredentials;\n export interface NoFacadeCredentials {\n type: \"none\";\n }\n export interface BasicAuthFacadeCredentials {\n type: \"basic\";\n\n // Username to use to authenticate\n username: string;\n\n // Password to use to authenticate\n password: string;\n }\n export interface AccountAddResponse {\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n }\n\n export interface AccountPatchDetails {\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n // If the argument is omitted, the old credentials\n // are simply preserved.\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export interface AccountsSummaryResponse {\n // List of accounts that are known for the instance.\n accounts: BankAccountSummaryEntry[];\n }\n\n // TODO: missing in docs\n export interface BankAccountSummaryEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n }\n export interface BankAccountEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // true if this account is active,\n // false if it is historic.\n active?: boolean;\n }\n\n export interface ProductAddDetail {\n // Product ID to use.\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface ProductPatchDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost?: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface InventorySummaryResponse {\n // List of products that are present in the inventory.\n products: InventoryEntry[];\n }\n\n export interface InventoryEntry {\n // Product identifier, as found in the product.\n product_id: string;\n // product_serial_id of the product in the database.\n product_serial: Integer;\n }\n\n export interface ProductDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that have already been sold.\n total_sold: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost: Integer;\n\n // Identifies where the product is in stock.\n address: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years).\n minimum_age?: Integer;\n }\n export interface LockRequest {\n // UUID that identifies the frontend performing the lock\n // Must be unique for the lifetime of the lock.\n lock_uuid: string;\n\n // How long does the frontend intend to hold the lock?\n duration: RelativeTime;\n\n // How many units should be locked?\n quantity: Integer;\n }\n\n export interface PostOrderRequest {\n // The order must at least contain the minimal\n // order detail, but can override all.\n order: Order;\n\n // If set, the backend will then set the refund deadline to the current\n // time plus the specified delay. If it's not set, refunds will not be\n // possible.\n refund_delay?: RelativeTime;\n\n // Specifies the payment target preferred by the client. Can be used\n // to select among the various (active) wire methods supported by the instance.\n payment_target?: string;\n\n // Specifies that some products are to be included in the\n // order from the inventory. For these inventory management\n // is performed (so the products must be in stock) and\n // details are completed from the product data of the backend.\n inventory_products?: MinimalInventoryProduct[];\n\n // Specifies a lock identifier that was used to\n // lock a product in the inventory. Only useful if\n // inventory_products is set. Used in case a frontend\n // reserved quantities of the individual products while\n // the shopping cart was being built. Multiple UUIDs can\n // be used in case different UUIDs were used for different\n // products (i.e. in case the user started with multiple\n // shopping sessions that were combined during checkout).\n lock_uuids?: string[];\n\n // Should a token for claiming the order be generated?\n // False can make sense if the ORDER_ID is sufficiently\n // high entropy to prevent adversarial claims (like it is\n // if the backend auto-generates one). Default is 'true'.\n create_token?: boolean;\n\n // OTP device ID to associate with the order.\n // This parameter is optional.\n otp_id?: string;\n }\n\n type Order = MinimalOrderDetail | ContractTerms;\n\n interface MinimalOrderDetail {\n // Amount to be paid by the customer.\n amount: AmountString;\n\n // Short summary of the order.\n summary: string;\n\n // See documentation of fulfillment_url in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n // When creating an order, the fulfillment URL can\n // contain ${ORDER_ID} which will be substituted with the\n // order ID of the newly created order.\n fulfillment_url?: string;\n\n // See documentation of fulfillment_message in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n }\n\n interface MinimalInventoryProduct {\n // Which product is requested (here mandatory!).\n product_id: string;\n\n // How many units of the product are requested.\n quantity: Integer;\n }\n\n export interface PostOrderResponse {\n // Order ID of the response that was just created.\n order_id: string;\n\n // Token that authorizes the wallet to claim the order.\n // Provided only if \"create_token\" was set to 'true'\n // in the request.\n token?: ClaimToken;\n }\n export interface OutOfStockResponse {\n // Product ID of an out-of-stock item.\n product_id: string;\n\n // Requested quantity.\n requested_quantity: Integer;\n\n // Available quantity (must be below requested_quantity).\n available_quantity: Integer;\n\n // When do we expect the product to be again in stock?\n // Optional, not given if unknown.\n restock_expected?: Timestamp;\n }\n\n export interface OrderHistory {\n // Timestamp-sorted array of all orders matching the query.\n // The order of the sorting depends on the sign of delta.\n orders: OrderHistoryEntry[];\n }\n export interface OrderHistoryEntry {\n // Order ID of the transaction related to this entry.\n order_id: string;\n\n // Row ID of the order in the database.\n row_id: number;\n\n // When the order was created.\n timestamp: Timestamp;\n\n // The amount of money the order is for.\n amount: AmountString;\n\n // The summary of the order.\n summary: string;\n\n // Whether some part of the order is refundable,\n // that is the refund deadline has not yet expired\n // and the total amount refunded so far is below\n // the value of the original transaction.\n refundable: boolean;\n\n // Whether the order has been paid or not.\n paid: boolean;\n }\n\n export type MerchantOrderStatusResponse =\n | CheckPaymentPaidResponse\n | CheckPaymentClaimedResponse\n | CheckPaymentUnpaidResponse;\n export interface CheckPaymentPaidResponse {\n // The customer paid for this contract.\n order_status: \"paid\";\n\n // Was the payment refunded (even partially)?\n refunded: boolean;\n\n // True if there are any approved refunds that the wallet has\n // not yet obtained.\n refund_pending: boolean;\n\n // Did the exchange wire us the funds?\n wired: boolean;\n\n // Total amount the exchange deposited into our bank account\n // for this contract, excluding fees.\n deposit_total: AmountString;\n\n // Numeric error code indicating errors the exchange\n // encountered tracking the wire transfer for this purchase (before\n // we even got to specific coin issues).\n // 0 if there were no issues.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information to track the wire transfer for this purchase.\n // 0 if there were no issues.\n exchange_http_status: number;\n\n // Total amount that was refunded, 0 if refunded is false.\n refund_amount: AmountString;\n\n // Contract terms.\n contract_terms: ContractTerms;\n\n // The wire transfer status from the exchange for this order if\n // available, otherwise empty array.\n wire_details: TransactionWireTransfer[];\n\n // Reports about trouble obtaining wire transfer details,\n // empty array if no trouble were encountered.\n wire_reports: TransactionWireReport[];\n\n // The refund details for this order. One entry per\n // refunded coin; empty array if there are no refunds.\n refund_details: RefundDetails[];\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n }\n export interface CheckPaymentClaimedResponse {\n // A wallet claimed the order, but did not yet pay for the contract.\n order_status: \"claimed\";\n\n // Contract terms.\n contract_terms: ContractTerms;\n }\n export interface CheckPaymentUnpaidResponse {\n // The order was neither claimed nor paid.\n order_status: \"unpaid\";\n\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // when was the order created\n creation_time: Timestamp;\n\n // Order summary text.\n summary: string;\n\n // Total amount of the order (to be paid by the customer).\n total_amount: AmountString;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n\n // Fulfillment URL of an already paid order. Only given if under this\n // session an already paid order with a fulfillment URL exists.\n already_paid_fulfillment_url?: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n\n // We do we NOT return the contract terms here because they may not\n // exist in case the wallet did not yet claim them.\n }\n export interface RefundDetails {\n // Reason given for the refund.\n reason: string;\n\n // Set to true if a refund is still available for the wallet for this payment.\n pending: boolean;\n\n // When was the refund approved.\n timestamp: Timestamp;\n\n // Total amount that was refunded (minus a refund fee).\n amount: AmountString;\n }\n export interface TransactionWireTransfer {\n // Responsible exchange.\n exchange_url: string;\n\n // 32-byte wire transfer identifier.\n wtid: Base32;\n\n // Execution time of the wire transfer.\n execution_time: Timestamp;\n\n // Total amount that has been wire transferred\n // to the merchant.\n amount: AmountString;\n\n // Was this transfer confirmed by the merchant via the\n // POST /transfers API, or is it merely claimed by the exchange?\n confirmed: boolean;\n }\n export interface TransactionWireReport {\n // Numerical error code.\n code: number;\n\n // Human-readable error description.\n hint: string;\n\n // Numerical error code from the exchange.\n exchange_code: number;\n\n // HTTP status code received from the exchange.\n exchange_http_status: number;\n\n // Public key of the coin for which we got the exchange error.\n coin_pub: CoinPublicKey;\n }\n\n export interface ForgetRequest {\n // Array of valid JSON paths to forgettable fields in the order's\n // contract terms.\n fields: string[];\n }\n\n export interface RefundRequest {\n // Amount to be refunded.\n refund: AmountString;\n\n // Human-readable refund justification.\n reason: string;\n }\n export interface MerchantRefundResponse {\n // URL (handled by the backend) that the wallet should access to\n // trigger refund processing.\n // taler://refund/...\n taler_refund_uri: string;\n\n // Contract hash that a client may need to authenticate an\n // HTTP request to obtain the above URI in a wallet-friendly way.\n h_contract: HashCode;\n }\n\n export interface TransferInformation {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n }\n\n export interface TransferList {\n // List of all the transfers that fit the filter that we know.\n transfers: TransferDetails[];\n }\n export interface TransferDetails {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n\n // Serial number identifying the transfer in the merchant backend.\n // Used for filtering via offset.\n transfer_serial_id: number;\n\n // Time of the execution of the wire transfer by the exchange, according to the exchange\n // Only provided if we did get an answer from the exchange.\n execution_time?: Timestamp;\n\n // True if we checked the exchange's answer and are happy with it.\n // False if we have an answer and are unhappy, missing if we\n // do not have an answer from the exchange.\n verified?: boolean;\n\n // True if the merchant uses the POST /transfers API to confirm\n // that this wire transfer took place (and it is thus not\n // something merely claimed by the exchange).\n confirmed?: boolean;\n }\n\n\n export interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n // \"NONE\" or 0: No algorithm (no pos confirmation will be generated)\n // \"TOTP_WITHOUT_PRICE\" or 1: Without amounts (typical OTP device)\n // \"TOTP_WITH_PRICE\" or 2: With amounts (special-purpose OTP device)\n // The \"String\" variants are supported @since protocol **v7**.\n otp_algorithm: Integer | string;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDevicePatchDetails {\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDeviceSummaryResponse {\n // Array of devices that are present in our backend.\n otp_devices: OtpDeviceEntry[];\n }\n export interface OtpDeviceEntry {\n // Device identifier.\n otp_device_id: string;\n\n // Human-readable description for the device.\n device_description: string;\n }\n\n export interface OtpDeviceDetails {\n // Human-readable description for the device.\n device_description: string;\n\n // Algorithm for computing the POS confirmation.\n //\n // Currently, the following numbers are defined:\n // 0: None\n // 1: TOTP without price\n // 2: TOTP with price\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n\n // Current time for time-based OTP devices.\n // Will match the faketime argument of the\n // query if one was present, otherwise the current\n // time at the backend.\n //\n // Available since protocol **v10**.\n otp_timestamp: Integer;\n\n // Current OTP confirmation string of the device.\n // Matches exactly the string that would be returned\n // as part of a payment confirmation for the given\n // amount and time (so may contain multiple OTP codes).\n //\n // If the otp_algorithm is time-based, the code is\n // returned for the current time, or for the faketime\n // if a TIMESTAMP query argument was provided by the client.\n //\n // When using OTP with counters, the counter is **NOT**\n // increased merely because this endpoint created\n // an OTP code (this is a GET request, after all!).\n //\n // If the otp_algorithm requires an amount, the\n // amount argument must be specified in the\n // query, otherwise the otp_code is not\n // generated.\n //\n // This field is *optional* in the response, as it is\n // only provided if we could compute it based on the\n // otp_algorithm and matching client query arguments.\n //\n // Available since protocol **v10**.\n otp_code?: string;\n }\n export interface TemplateAddDetails {\n // Template ID to use.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface TemplateContractDetails {\n // Human-readable summary for the template.\n summary?: string;\n\n // Required currency for payments to the template.\n // The user may specify any amount, but it must be\n // in this currency.\n // This parameter is optional and should not be present\n // if \"amount\" is given.\n currency?: string;\n\n // The price is imposed by the merchant and cannot be changed by the customer.\n // This parameter is optional.\n amount?: AmountString;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age: Integer;\n\n // The time the customer need to pay before his order will be deleted.\n // It is deleted if the customer did not pay and if the duration is over.\n pay_duration: RelativeTime;\n }\n\n export interface TemplateContractDetailsDefaults {\n summary?: string;\n\n currency?: string;\n\n amount?: AmountString;\n\n minimum_age?: Integer;\n\n pay_duration?: RelativeTime;\n }\n export interface TemplatePatchDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateSummaryResponse {\n // List of templates that are present in our backend.\n templates: TemplateEntry[];\n }\n\n export interface TemplateEntry {\n // Template identifier, as found in the template.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n }\n\n export interface WalletTemplateDetails {\n // Hard-coded information about the contrac terms\n // for this template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface UsingTemplateDetails {\n // Summary of the template\n summary?: string;\n\n // The amount entered by the customer.\n amount?: AmountString;\n }\n\n export interface WebhookAddDetails {\n // Webhook ID to use.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookPatchDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookSummaryResponse {\n // Return webhooks that are present in our backend.\n webhooks: WebhookEntry[];\n }\n\n export interface WebhookEntry {\n // Webhook identifier, as found in the webhook.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n }\n\n export interface WebhookDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface TokenFamilyCreateRequest {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n // If not specified, merchant backend will use the current time.\n valid_after?: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export enum TokenFamilyKind {\n Discount = \"discount\",\n Subscription = \"subscription\",\n }\n\n export interface TokenFamilyUpdateRequest {\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n }\n\n export interface TokenFamiliesList {\n // All configured token families of this instance.\n token_families: TokenFamilySummary[];\n }\n\n export interface TokenFamilySummary {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export interface TokenFamilyDetails {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n\n // How many tokens have been issued for this family.\n issued: Integer;\n\n // How many tokens have been redeemed for this family.\n redeemed: Integer;\n }\n export interface ContractTerms {\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: { [lang_tag: string]: string };\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: AmountString;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional. When POSTing to the\n // merchant, the placeholder \"${ORDER_ID}\" will be\n // replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL).\n // Note that this placeholder can only be used once.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: { [lang_tag: string]: string };\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: AmountString;\n\n // List of products that are part of the purchase (see Product).\n products: Product[];\n\n // Time when this contract was generated.\n timestamp: Timestamp;\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: Timestamp;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: Timestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: Timestamp;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: EddsaPublicKey;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // More info about the merchant, see below.\n merchant: Merchant;\n\n // The hash of the merchant instance's wire details.\n h_wire: HashCode;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: Exchange[];\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: Timestamp;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: RelativeTime;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\n }\n\n export 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?: Integer;\n\n // 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?: ImageDataUrl;\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?: Timestamp;\n }\n\n export interface Tax {\n // The name of the tax.\n name: string;\n\n // Amount paid in tax.\n tax: AmountString;\n }\n export interface Merchant {\n // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\n }\n // Delivery location, loosely modeled as a subset of\n // ISO20022's PostalAddress25.\n export 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 interface Auditor {\n // Official name.\n name: string;\n\n // Auditor's public key.\n auditor_pub: EddsaPublicKey;\n\n // Base URL of the auditor.\n url: string;\n }\n export interface Exchange {\n // The exchange's base URL.\n url: string;\n\n // How much would the merchant like to use this exchange.\n // The wallet should use a suitable exchange with high\n // priority. The following priority values are used, but\n // it should be noted that they are NOT in any way normative.\n //\n // 0: likely it will not work (recently seen with account\n // restriction that would be bad for this merchant)\n // 512: merchant does not know, might be down (merchant\n // did not yet get /wire response).\n // 1024: good choice (recently confirmed working)\n priority: Integer;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKey;\n }\n}\n\nexport namespace ChallengerApi {\n export interface ChallengerTermsOfServiceResponse {\n // Name of the service\n name: \"challenger\";\n\n // libtool-style representation of the Challenger protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface ChallengeSetupResponse {\n // Nonce to use when constructing /authorize endpoint.\n nonce: string;\n }\n\n export interface Restriction {\n regex?: string;\n hint?: string;\n hint_i18n?: InternationalizedString;\n }\n\n export interface ChallengeStatus {\n // Object; map of keys (names of the fields of the address\n // to be entered by the user) to objects with a \"regex\" (string)\n // containing an extended Posix regular expression for allowed\n // address field values, and a \"hint\"/\"hint_i18n\" giving a\n // human-readable explanation to display if the value entered\n // by the user does not match the regex. Keys that are not mapped\n // to such an object have no restriction on the value provided by\n // the user. See \"ADDRESS_RESTRICTIONS\" in the challenger configuration.\n restrictions: Record<string, Restriction> | undefined;\n\n // indicates if the given address cannot be changed anymore, the\n // form should be read-only if set to true.\n fix_address: boolean;\n\n // form values from the previous submission if available, details depend\n // on the ADDRESS_TYPE, should be used to pre-populate the form\n last_address: Record<string, string> | undefined;\n\n // number of times the address can still be changed, may or may not be\n // shown to the user\n changes_left: Integer;\n }\n\n export interface ChallengeCreateResponse {\n // how many more attempts are allowed, might be shown to the user,\n // highlighting might be appropriate for low values such as 1 or 2 (the\n // form will never be used if the value is zero)\n attempts_left: Integer;\n\n // the address that is being validated, might be shown or not\n address: Object;\n\n // true if we just retransmitted the challenge, false if we sent a\n // challenge recently and thus refused to transmit it again this time;\n // might make a useful hint to the user\n transmitted: boolean;\n\n // timestamp explaining when we would re-transmit the challenge the next\n // time (at the earliest) if requested by the user\n next_tx_time: string;\n }\n\n export interface InvalidPinResponse {\n // numeric Taler error code, should be shown to indicate the error\n // compactly for reporting to developers\n ec?: number;\n\n // human-readable Taler error code, should be shown for the user to\n // understand the error\n hint: string;\n\n // how many times is the user still allowed to change the address;\n // if 0, the user should not be shown a link to jump to the\n // address entry form\n addresses_left: Integer;\n\n // how many times might the PIN still be retransmitted\n pin_transmissions_left: Integer;\n\n // how many times might the user still try entering the PIN code\n auth_attempts_left: Integer;\n\n // if true, the PIN was not even evaluated as the user previously\n // exhausted the number of attempts\n exhausted: boolean;\n\n // if true, the PIN was not even evaluated as no challenge was ever\n // issued (the user must have skipped the step of providing their\n // address first!)\n no_challenge: boolean;\n }\n\n export interface ChallengerAuthResponse {\n // Token used to authenticate access in /info.\n access_token: string;\n\n // Type of the access token.\n token_type: \"Bearer\";\n\n // Amount of time that an access token is valid (in seconds).\n expires_in: Integer;\n }\n\n export interface ChallengerInfoResponse {\n // Unique ID of the record within Challenger\n // (identifies the rowid of the token).\n id: Integer;\n\n // Address that was validated.\n // Key-value pairs, details depend on the\n // address_type.\n address: Object;\n\n // Type of the address.\n address_type: string;\n\n // How long do we consider the address to be\n // valid for this user.\n expires: Timestamp;\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 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\n/**\n * Imports.\n */\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http.js\";\n\n/**\n * Implementation of the HTTP request library interface for node.\n */\nexport class HttpLibImpl implements HttpRequestLibrary {\n fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n throw new Error(\"Method not implemented.\");\n }\n}\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 * Helpers for doing XMLHttpRequest-s that are based on ES6 promises.\n * Allows for easy mocking for test cases.\n *\n * The API is inspired by the HTML5 fetch API.\n */\n\n/**\n * Imports\n */\n\nimport * as impl from \"#http-impl\";\nimport * as common from \"./http-common.js\";\n\nexport * from \"./http-common.js\";\n\nexport function createPlatformHttpLib(\n args?: common.HttpLibArgs,\n): common.HttpRequestLibrary {\n return new impl.HttpLibImpl(args);\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) 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 { codecForAny } from \"./codec.js\";\nimport {\n TalerMerchantApi,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n} from \"./http-client/types.js\";\nimport { HttpStatusCode } from \"./http-status-codes.js\";\nimport {\n createPlatformHttpLib,\n expectSuccessResponseOrThrow,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http.js\";\nimport { FacadeCredentials } from \"./libeufin-api-types.js\";\nimport { LibtoolVersion } from \"./libtool-version.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n MerchantInstancesResponse,\n MerchantPostOrderRequest,\n MerchantPostOrderResponse,\n MerchantTemplateAddDetails,\n codecForMerchantPostOrderResponse,\n} from \"./merchant-api-types.js\";\nimport {\n FailCasesByMethod,\n OperationFail,\n OperationOk,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"./operation.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { TalerProtocolDuration } from \"./time.js\";\n\nconst logger = new Logger(\"MerchantApiClient.ts\");\n\n// FIXME: Explain!\nexport type TalerMerchantResultByMethod<prop extends keyof MerchantApiClient> =\n ResultByMethod<MerchantApiClient, prop>;\n\n// FIXME: Explain!\nexport type TalerMerchantErrorsByMethod<prop extends keyof MerchantApiClient> =\n FailCasesByMethod<MerchantApiClient, prop>;\n\nexport interface MerchantAuthConfiguration {\n method: \"external\" | \"token\";\n token?: string;\n}\n\n// FIXME: Why do we need this? Describe / fix!\nexport interface PartialMerchantInstanceConfig {\n auth?: MerchantAuthConfiguration;\n id: string;\n name: string;\n paytoUris: string[];\n address?: unknown;\n jurisdiction?: unknown;\n defaultWireTransferDelay?: TalerProtocolDuration;\n defaultPayDelay?: TalerProtocolDuration;\n}\n\nexport interface CreateMerchantTippingReserveRequest {\n // Amount that the merchant promises to put into the reserve\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for tipping\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\"\n wire_method: string;\n}\n\nexport interface DeleteTippingReserveArgs {\n reservePub: string;\n purge?: boolean;\n}\n\ninterface MerchantBankAccount {\n // The payto:// URI where the wallet will send coins.\n payto_uri: string;\n\n // Optional base URL for a facade where the\n // merchant backend can see incoming wire\n // transfers to reconcile its accounting\n // with that of the exchange. Used by\n // taler-merchant-wirewatch.\n credit_facade_url?: string;\n\n // Credentials for accessing the credit facade.\n credit_facade_credentials?: FacadeCredentials;\n}\n\nexport interface MerchantInstanceConfig {\n auth: MerchantAuthConfiguration;\n id: string;\n name: string;\n address: unknown;\n jurisdiction: unknown;\n use_stefan: boolean;\n default_wire_transfer_delay: TalerProtocolDuration;\n default_pay_delay: TalerProtocolDuration;\n}\n\nexport interface PrivateOrderStatusQuery {\n instance?: string;\n orderId: string;\n sessionId?: string;\n}\n\nexport interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A base64-encoded key\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: number;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: number;\n}\n\n/**\n * Client for the GNU Taler merchant backend.\n */\nexport class MerchantApiClient {\n /**\n * Base URL for the particular instance that this merchant API client\n * is for.\n */\n private baseUrl: string;\n\n readonly auth: MerchantAuthConfiguration;\n\n public readonly PROTOCOL_VERSION = \"6:0:2\";\n\n constructor(\n baseUrl: string,\n options: { auth?: MerchantAuthConfiguration } = {},\n ) {\n this.baseUrl = baseUrl;\n\n this.auth = options?.auth ?? {\n method: \"external\",\n };\n }\n\n httpClient = createPlatformHttpLib();\n\n async changeAuth(auth: MerchantAuthConfiguration): Promise<void> {\n const url = new URL(\"private/auth\", this.baseUrl);\n const res = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: auth,\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(res);\n }\n\n async getPrivateInstanceInfo(): Promise<any> {\n const url = new URL(\"private\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n return await resp.json();\n }\n\n async deleteInstance(instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(resp);\n }\n\n async createInstance(req: MerchantInstanceConfig): Promise<void> {\n const url = new URL(\"management/instances\", this.baseUrl);\n await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n }\n\n async getInstances(): Promise<MerchantInstancesResponse> {\n const url = new URL(\"management/instances\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getInstanceFullDetails(instanceId: string): Promise<any> {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n try {\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return resp.json();\n } catch (e) {\n throw e;\n }\n }\n\n async createOrder(\n req: MerchantPostOrderRequest,\n ): Promise<MerchantPostOrderResponse> {\n let url = new URL(\"private/orders\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantPostOrderResponse(),\n );\n }\n\n async deleteOrder(req: { orderId: string; force?: boolean }): Promise<void> {\n let url = new URL(`private/orders/${req.orderId}`, this.baseUrl);\n if (req.force) {\n url.searchParams.set(\"force\", \"yes\");\n }\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n if (resp.status !== 204) {\n throw Error(`failed to delete order (status ${resp.status})`);\n }\n }\n\n async queryPrivateOrderStatus(\n query: PrivateOrderStatusQuery,\n ): Promise<TalerMerchantApi.MerchantOrderStatusResponse> {\n const reqUrl = new URL(`private/orders/${query.orderId}`, this.baseUrl);\n if (query.sessionId) {\n reqUrl.searchParams.set(\"session_id\", query.sessionId);\n }\n const resp = await this.httpClient.fetch(reqUrl.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n }\n\n async giveRefund(r: {\n instance: string;\n orderId: string;\n amount: string;\n justification: string;\n }): Promise<{ talerRefundUri: string }> {\n const reqUrl = new URL(`private/orders/${r.orderId}/refund`, this.baseUrl);\n const resp = await this.httpClient.fetch(reqUrl.href, {\n method: \"POST\",\n body: {\n refund: r.amount,\n reason: r.justification,\n },\n });\n const respBody = await resp.json();\n return {\n talerRefundUri: respBody.taler_refund_uri,\n };\n }\n\n async createTemplate(req: MerchantTemplateAddDetails) {\n let url = new URL(\"private/templates\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async getTemplate(templateId: string) {\n let url = new URL(`private/templates/${templateId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAny());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig(): Promise<OperationOk<TalerMerchantApi.VersionResponse>> {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async createOtpDevice(\n req: OtpDeviceAddDetails,\n ): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>> {\n let url = new URL(\"private/otp-devices\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n private makeAuthHeader(): Record<string, string> {\n switch (this.auth.method) {\n case \"external\":\n return {};\n case \"token\":\n return {\n Authorization: `Bearer ${this.auth.token}`,\n };\n }\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 TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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", "/*\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 { codecForAmountString } from \"./amounts.js\";\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\", codecForAmountString())\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\", codecForAmountString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"closing_fee\", codecForAmountString())\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\", codecForAmountString())\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 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, Duration } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\n/**\n * Logger.\n */\nconst logger = new Logger(\"OperationThrottler.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 task.\n */\nclass TaskState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n 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 TaskThrottler {\n private perTaskInfo: { [taskId: string]: TaskState } = {};\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): TaskState {\n const s = this.perTaskInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perTaskInfo[origin] = new TaskState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(taskId: string): boolean {\n for (let [k, v] of Object.entries(this.perTaskInfo)) {\n // Remove throttled tasks that haven't seen an update in more than one hour.\n if (\n Duration.cmp(\n AbsoluteTime.difference(v.lastUpdate, AbsoluteTime.now()),\n Duration.fromSpec({ hours: 1 }),\n ) > 1\n ) {\n delete this.perTaskInfo[k];\n }\n }\n return this.getState(taskId).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(taskId: string): Record<string, unknown> {\n const state = this.getState(taskId);\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", "/*\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 * Client for the Taler (demo-)bank.\n */\n\n/**\n * Imports.\n */\nimport {\n AmountString,\n base64FromArrayBuffer,\n buildCodecForObject,\n Codec,\n codecForAny,\n codecForString,\n encodeCrock,\n getRandomBytes,\n HttpStatusCode,\n j2s,\n Logger,\n opEmptySuccess,\n opKnownHttpFailure,\n opUnknownFailure,\n stringToBytes,\n TalerError,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n checkSuccessResponseOrThrow,\n createPlatformHttpLib,\n HttpRequestLibrary,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"bank-api-client.ts\");\n\nexport enum CreditDebitIndicator {\n Credit = \"credit\",\n Debit = \"debit\",\n}\n\nexport interface BankAccountBalanceResponse {\n balance: {\n amount: AmountString;\n credit_debit_indicator: CreditDebitIndicator;\n };\n}\n\nexport interface BankUser {\n username: string;\n password: string;\n accountPaytoUri: string;\n}\n\nexport interface WithdrawalOperationInfo {\n withdrawal_id: string;\n taler_withdraw_uri: string;\n}\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nfunction makeBasicAuthHeader(username: string, password: string): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\nconst codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>\n buildCodecForObject<WithdrawalOperationInfo>()\n .property(\"withdrawal_id\", codecForString())\n .property(\"taler_withdraw_uri\", codecForString())\n .build(\"WithdrawalOperationInfo\");\n\nexport interface BankAccessApiClientArgs {\n auth?: { username: string; password: string };\n httpClient?: HttpRequestLibrary;\n}\n\nexport interface BankAccessApiCreateTransactionRequest {\n amount: AmountString;\n paytoUri: string;\n}\n\nexport class WireGatewayApiClientArgs {\n auth?: {\n username: string;\n password: string;\n };\n httpClient?: HttpRequestLibrary;\n}\n\n/**\n * This API look like it belongs to harness\n * but it will be nice to have in utils to be used by others\n */\nexport class WireGatewayApiClient {\n httpLib;\n\n constructor(\n private baseUrl: string,\n private args: WireGatewayApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n private makeAuthHeader(): Record<string, string> {\n const auth = this.args.auth;\n if (auth) {\n return {\n Authorization: makeBasicAuthHeader(auth.username, auth.password),\n };\n }\n return {};\n }\n\n async adminAddIncoming(params: {\n amount: string;\n reservePub: string;\n debitAccountPayto: string;\n }): Promise<void> {\n let url = new URL(`admin/add-incoming`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount: params.amount,\n reserve_pub: params.reservePub,\n debit_account: params.debitAccountPayto,\n },\n headers: this.makeAuthHeader(),\n });\n logger.info(`add-incoming response status: ${resp.status}`);\n await checkSuccessResponseOrThrow(resp);\n }\n}\n\nexport interface ChallengeContactData {\n // E-Mail address\n email?: string;\n\n // Phone number.\n phone?: string;\n}\n\nexport interface AccountBalance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n}\n\nexport interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n challenge_contact_data?: ChallengeContactData;\n\n // 'payto' address pointing a bank account\n // external to the libeufin-bank.\n // Payments will be sent to this bank account\n // when the user wants to convert the local currency\n // back to fiat currency outside libeufin-bank.\n cashout_payto_uri?: string;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: string;\n}\n\nexport interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: AccountBalance;\n\n // payto://-URI of the account.\n payto_uri: string;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: string;\n}\n\nexport interface ConfirmWithdrawalArgs {\n withdrawalOperationId: string;\n}\n\n/**\n * Client for the Taler corebank API.\n */\nexport class TalerCorebankApiClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n private baseUrl: string,\n private args: BankAccessApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n setAuth(auth: { username: string; password: string }) {\n this.args.auth = auth;\n }\n\n private makeAuthHeader(): Record<string, string> {\n if (!this.args.auth) {\n return {};\n }\n const authHeaderValue = makeBasicAuthHeader(\n this.args.auth.username,\n this.args.auth.password,\n );\n return {\n Authorization: authHeaderValue,\n };\n }\n\n async getAccountBalance(\n username: string,\n ): Promise<BankAccountBalanceResponse> {\n const url = new URL(`accounts/${username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getTransactions(username: string): Promise<void> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"GET\",\n headers: {\n ...this.makeAuthHeader(),\n },\n });\n\n const res = await readSuccessResponseJsonOrThrow(resp, codecForAny());\n logger.info(`result: ${j2s(res)}`);\n }\n\n async createTransaction(\n username: string,\n req: BankAccessApiCreateTransactionRequest,\n ): Promise<any> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n return await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async registerAccountExtended(req: RegisterAccountRequest): Promise<void> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n }\n\n /**\n * Register a new account and return information about it.\n *\n * This is a helper, as it does both the registration and the\n * account info query.\n */\n async registerAccount(username: string, password: string): Promise<BankUser> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n username,\n password,\n name: username,\n },\n headers: this.makeAuthHeader(),\n });\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n // FIXME: Corebank should directly return this info!\n const infoUrl = new URL(`accounts/${username}`, this.baseUrl);\n const infoResp = await this.httpLib.fetch(infoUrl.href, {\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n });\n // FIXME: Validate!\n const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(\n infoResp,\n codecForAny(),\n );\n return {\n password,\n username,\n accountPaytoUri: acctInfo.payto_uri,\n };\n }\n\n async createRandomBankUser(): Promise<BankUser> {\n const username = \"user-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n const password = \"pw-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n return await this.registerAccount(username, password);\n }\n\n async createWithdrawalOperation(\n user: string,\n amount: string,\n ): Promise<WithdrawalOperationInfo> {\n const url = new URL(`accounts/${user}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount,\n },\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForWithdrawalOperationInfo(),\n );\n }\n\n async confirmWithdrawalOperation(\n username: string,\n wopi: ConfirmWithdrawalArgs,\n ) {\n const url = new URL(\n `accounts/${username}/withdrawals/${wopi.withdrawalOperationId}/confirm`,\n this.baseUrl,\n );\n logger.info(`confirming withdrawal operation via ${url.href}`);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async abortWithdrawalOperation(wopi: WithdrawalOperationInfo): Promise<void> {\n const url = new URL(\n `withdrawals/${wopi.withdrawal_id}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\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\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) 2019-2020 Taler Systems SA\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Classes and helpers for error handling specific to wallet operations.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport {\n AbsoluteTime,\n CancellationToken,\n PaymentInsufficientBalanceDetails,\n TalerErrorCode,\n TalerErrorDetail,\n TransactionType,\n} from \"@gnu-taler/taler-util\";\n\ntype empty = Record<string, never>;\n\nexport interface DetailsMap {\n [TalerErrorCode.WALLET_PENDING_OPERATION_FAILED]: {\n innerError: TalerErrorDetail;\n transactionId?: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT]: {\n exchangeBaseUrl: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE]: {\n exchangeProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK]: empty;\n [TalerErrorCode.WALLET_REWARD_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_ORDER_ALREADY_CLAIMED]: {\n orderId: string;\n claimUrl: string;\n };\n [TalerErrorCode.WALLET_ORDER_ALREADY_PAID]: {\n orderId: string;\n fulfillmentUrl: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_MALFORMED]: empty;\n [TalerErrorCode.WALLET_CONTRACT_TERMS_SIGNATURE_INVALID]: {\n merchantPub: string;\n orderId: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_BASE_URL_MISMATCH]: {\n baseUrlForDownload: string;\n baseUrlFromContractTerms: string;\n };\n [TalerErrorCode.WALLET_INVALID_TALER_PAY_URI]: {\n talerPayUri: string;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n errorResponse?: any;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION]: {\n stack?: string;\n };\n [TalerErrorCode.WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE]: {\n bankProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN]: {\n operation: string;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED]: {\n requestUrl: string;\n requestMethod: string;\n throttleStats: Record<string, unknown>;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.WALLET_NETWORK_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n };\n [TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n validationError?: string;\n /**\n * Content type of the response, usually only specified if not the\n * expected content type.\n */\n contentType?: string;\n };\n [TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR]: {\n operation: string;\n error: string;\n detail: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: {\n numErrors: number;\n errorsPerCoin: Record<number, TalerErrorDetail>;\n };\n [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: {\n lastError?: TalerErrorDetail;\n };\n [TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR]: {\n httpStatusCode: number;\n };\n [TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR]: {\n requestError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_ERROR]: {\n innerError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_BAD_REQUEST]: {\n detail: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED]: {\n kycUrl: string;\n };\n [TalerErrorCode.WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_REFRESH_GROUP_INCOMPLETE]: {\n numErrors: number;\n /**\n * Errors, can be truncated.\n */\n errors: TalerErrorDetail[];\n };\n [TalerErrorCode.WALLET_EXCHANGE_BASE_URL_MISMATCH]: {\n urlWallet: string;\n urlExchange: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_UNAVAILABLE]: {\n exchangeBaseUrl: string;\n innerError: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_DB_UNAVAILABLE]: {\n innerError: TalerErrorDetail | undefined;\n };\n}\n\ntype ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : empty;\n\nexport function makeErrorDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n): TalerErrorDetail {\n if (!hint && !(detail as any).hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return { code, when, hint, ...detail };\n}\n\nexport function makePendingOperationFailedError(\n innerError: TalerErrorDetail,\n tag: TransactionType,\n uid: string,\n): TalerError {\n return TalerError.fromDetail(TalerErrorCode.WALLET_PENDING_OPERATION_FAILED, {\n innerError,\n transactionId: `${tag}:${uid}`,\n });\n}\n\nexport function summarizeTalerErrorDetail(ed: TalerErrorDetail): string {\n const errName = TalerErrorCode[ed.code] ?? \"<unknown>\";\n return `Error (${ed.code}/${errName})`;\n}\n\nfunction getDefaultHint(code: number): string {\n const errName = TalerErrorCode[code];\n if (errName) {\n return `Error (${errName})`;\n } else {\n return `Error (<unknown>)`;\n }\n}\n\nexport class TalerProtocolViolationError extends Error {\n constructor(hint?: string) {\n let msg: string;\n if (hint) {\n msg = `Taler protocol violation error (${hint})`;\n } else {\n msg = `Taler protocol violation error`;\n }\n super(msg);\n Object.setPrototypeOf(this, TalerProtocolViolationError.prototype);\n }\n}\n\n// compute a subset of TalerError, just for http request\ntype HttpErrors =\n | TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT\n | TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED\n | TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE\n | TalerErrorCode.WALLET_NETWORK_ERROR\n | TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR;\n\ntype TalerHttpErrorsDetails = {\n [code in HttpErrors]: TalerError<DetailsMap[code]>;\n};\n\nexport type TalerHttpError =\n TalerHttpErrorsDetails[keyof TalerHttpErrorsDetails];\n\nexport class TalerError<T = any> extends Error {\n errorDetail: TalerErrorDetail & T;\n cause: Error | undefined;\n private constructor(d: TalerErrorDetail & T, cause?: Error) {\n super(d.hint ?? `Error (code ${d.code})`);\n this.errorDetail = d;\n this.cause = cause;\n Object.setPrototypeOf(this, TalerError.prototype);\n }\n\n static fromDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n cause?: Error,\n ): TalerError {\n if (!hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return new TalerError<unknown>({ code, when, hint, ...detail }, cause);\n }\n\n static fromUncheckedDetail(d: TalerErrorDetail, c?: Error): TalerError {\n return new TalerError<unknown>({ ...d }, c);\n }\n\n static fromException(e: any): TalerError {\n const errDetail = getErrorDetailFromException(e);\n return new TalerError(errDetail, e);\n }\n\n hasErrorCode<C extends keyof DetailsMap>(\n code: C,\n ): this is TalerError<DetailsMap[C]> {\n return this.errorDetail.code === code;\n }\n\n toString(): string {\n return `TalerError: ${JSON.stringify(this.errorDetail)}`;\n }\n}\n\nexport function safeStringifyException(e: any): string {\n return JSON.stringify(getErrorDetailFromException(e), undefined, 2);\n}\n\n/**\n * Convert an exception (or anything that was thrown) into\n * a TalerErrorDetail object.\n */\nexport function getErrorDetailFromException(e: any): TalerErrorDetail {\n if (e instanceof TalerError) {\n return e.errorDetail;\n }\n if (e instanceof CancellationToken.CancellationError) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_CORE_REQUEST_CANCELLED,\n {},\n );\n return err;\n }\n if (e instanceof Error) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {\n stack: e.stack,\n },\n `unexpected exception (message: ${e.message})`,\n );\n return err;\n }\n // Something was thrown that is not even an exception!\n // Try to stringify it.\n let excString: string;\n try {\n excString = e.toString();\n } catch (e) {\n // Something went horribly wrong.\n excString = \"can't stringify exception\";\n }\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {},\n `unexpected exception (not an exception, ${excString})`,\n );\n return err;\n}\n\nexport function assertUnreachable(x: never): never {\n throw new Error(\"Didn't expect to get here\");\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 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 {\n Codec,\n buildCodecForObject,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport {\n AmountString,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n} from \"./taler-types.js\";\nimport { TalerPreciseTimestamp, TalerProtocolTimestamp } from \"./time.js\";\nimport {\n RefreshReason,\n ScopeInfo,\n TalerErrorDetail,\n TransactionIdStr,\n TransactionStateFilter,\n WithdrawalExchangeAccountDetails,\n codecForScopeInfo,\n} from \"./wallet-types.js\";\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n *\n * it will be removed in next release\n *\n * @deprecated use scopeInfo\n */\n currency?: string;\n\n /**\n * return only transactions in the given scopeInfo\n */\n scopeInfo?: ScopeInfo;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * Sort order of the transaction items.\n * By default, items are sorted ascending by their\n * main timestamp.\n *\n * ascending: ascending by timestamp, but pending transactions first\n * descending: ascending by timestamp, but pending transactions first\n * stable-ascending: ascending by timestamp, with pending transactions amidst other transactions\n * (stable in the sense of: pending transactions don't jump around)\n */\n sort?: \"ascending\" | \"descending\" | \"stable-ascending\";\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n\n filterByState?: TransactionStateFilter;\n}\n\nexport interface TransactionState {\n major: TransactionMajorState;\n minor?: TransactionMinorState;\n}\n\nexport enum TransactionMajorState {\n // No state, only used when reporting transitions into the initial state\n None = \"none\",\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Suspended = \"suspended\",\n Dialog = \"dialog\",\n SuspendedAborting = \"suspended-aborting\",\n Failed = \"failed\",\n Expired = \"expired\",\n // Only used for the notification, never in the transaction history\n Deleted = \"deleted\",\n}\n\nexport enum TransactionMinorState {\n // Placeholder until D37 is fully implemented\n Unknown = \"unknown\",\n Deposit = \"deposit\",\n KycRequired = \"kyc\",\n AmlRequired = \"aml\",\n MergeKycRequired = \"merge-kyc\",\n Track = \"track\",\n SubmitPayment = \"submit-payment\",\n RebindSession = \"rebind-session\",\n Refresh = \"refresh\",\n Pickup = \"pickup\",\n AutoRefund = \"auto-refund\",\n User = \"user\",\n Bank = \"bank\",\n Exchange = \"exchange\",\n ClaimProposal = \"claim-proposal\",\n CheckRefund = \"check-refund\",\n CreatePurse = \"create-purse\",\n DeletePurse = \"delete-purse\",\n RefreshExpired = \"refresh-expired\",\n Ready = \"ready\",\n Merge = \"merge\",\n Repurchase = \"repurchase\",\n BankRegisterReserve = \"bank-register-reserve\",\n BankConfirmTransfer = \"bank-confirm-transfer\",\n WithdrawCoins = \"withdraw-coins\",\n ExchangeWaitReserve = \"exchange-wait-reserve\",\n AbortingBank = \"aborting-bank\",\n Aborting = \"aborting\",\n Refused = \"refused\",\n Withdraw = \"withdraw\",\n MerchantOrderProposed = \"merchant-order-proposed\",\n Proposed = \"proposed\",\n RefundAvailable = \"refund-available\",\n AcceptRefund = \"accept-refund\",\n PaidByOther = \"paid-by-other\",\n CompletedByOtherWallet = \"completed-by-other-wallet\",\n}\n\nexport enum TransactionAction {\n Delete = \"delete\",\n Suspend = \"suspend\",\n Resume = \"resume\",\n Abort = \"abort\",\n Fail = \"fail\",\n Retry = \"retry\",\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: TalerPreciseTimestamp;\n\n /**\n * Transaction state, as per DD37.\n */\n txState: TransactionState;\n\n /**\n * Possible transitions based on the current state.\n */\n txActions: TransactionAction[];\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 /**\n * If the transaction minor state is in KycRequired this field is going to\n * have the location where the user need to go to complete KYC information.\n */\n kycUrl?: string;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit\n | TransactionInternalWithdrawal\n | TransactionRecoup\n | TransactionDenomLoss;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n InternalWithdrawal = \"internal-withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n Recoup = \"recoup\",\n DenomLoss = \"denom-loss\",\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 * @deprecated in favor of exchangeCreditAccounts\n */\n exchangePaytoUris: string[];\n\n exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\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 exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\n}\n\nexport enum DenomLossEventType {\n DenomExpired = \"denom-expired\",\n DenomVanished = \"denom-vanished\",\n DenomUnoffered = \"denom-unoffered\",\n}\n\n/**\n * A transaction to indicate financial loss due to denominations\n * that became unusable for deposits.\n */\nexport interface TransactionDenomLoss extends TransactionCommon {\n type: TransactionType.DenomLoss;\n lossEventType: DenomLossEventType;\n exchangeBaseUrl: string;\n}\n\n/**\n * A withdrawal transaction (either bank-integrated or manual).\n */\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\n/**\n * Internal withdrawal operation, only reported on request.\n *\n * Some transactions (peer-*-credit) internally do a withdrawal,\n * but only the peer-*-credit transaction is reported.\n *\n * The internal withdrawal transaction allows to access the details of\n * the underlying withdrawal for testing/debugging.\n *\n * It is usually not reported, so that amounts of transactions properly\n * add up, since the amountEffecive of the withdrawal is already reported\n * in the peer-*-credit transaction.\n */\nexport interface TransactionInternalWithdrawal extends TransactionCommon {\n type: TransactionType.InternalWithdrawal;\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 * Only available in the right state.\n */\n talerUri: string | undefined;\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 * Only present if the transaction is in a state where the other party can\n * 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\n/**\n * The exchange revoked a key and the wallet recoups funds.\n */\nexport interface TransactionRecoup extends TransactionCommon {\n type: TransactionType.Recoup;\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 * 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 /**\n * Does this purchase has an pos validation\n */\n posConfirmation: string | undefined;\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 * 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\n/**\n * Summary information about the payment that we got a refund for.\n */\nexport interface RefundPaymentInfo {\n summary: string;\n summary_i18n?: InternationalizedString;\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\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 // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n paymentInfo: RefundPaymentInfo | undefined;\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\nexport interface DepositTransactionTrackingState {\n // Raw wire transfer identifier of the deposit.\n wireTransferId: string;\n // When was the wire transfer given to the bank.\n timestampExecuted: TalerProtocolTimestamp;\n // Total amount transfer for this wtid (including fees)\n amountRaw: AmountString;\n // Wire fee amount for this exchange\n wireFee: 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 trackingState: Array<DepositTransactionTrackingState>;\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 interface WithdrawalTransactionByURIRequest {\n talerWithdrawUri: string;\n}\n\nexport const codecForWithdrawalTransactionByURIRequest =\n (): Codec<WithdrawalTransactionByURIRequest> =>\n buildCodecForObject<WithdrawalTransactionByURIRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .build(\"WithdrawalTransactionByURIRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"scopeInfo\", codecOptional(codecForScopeInfo()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\n \"sort\",\n codecOptional(\n codecForEither(\n codecForConstString(\"ascending\"),\n codecForConstString(\"descending\"),\n codecForConstString(\"stable-ascending\"),\n ),\n ),\n )\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(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n\nexport interface ListAssociatedRefreshesRequest {\n transactionId: string;\n}\n\nexport const codecForListAssociatedRefreshesRequest =\n (): Codec<ListAssociatedRefreshesRequest> =>\n buildCodecForObject<ListAssociatedRefreshesRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ListAssociatedRefreshesRequest\");\n\nexport interface ListAssociatedRefreshesResponse {\n transactionIds: string[];\n}\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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n renderContext,\n} from \"./codec.js\";\nimport {\n CurrencySpecification,\n TemplateParams,\n WithdrawalOperationStatus,\n canonicalizeBaseUrl,\n} from \"./index.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 AccountRestriction,\n AmountString,\n AuditorDenomSig,\n CoinEnvelope,\n DenomKeyType,\n DenominationPubKey,\n EddsaPrivateKeyString,\n ExchangeAuditor,\n ExchangeWireAccount,\n InternationalizedString,\n MerchantContractTerms,\n MerchantInfo,\n PeerContractTerms,\n UnblindedSignature,\n codecForExchangeWireAccount,\n codecForMerchantContractTerms,\n codecForPeerContractTerms,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n TalerPreciseTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForPreciseTimestamp,\n codecForTimestamp,\n} from \"./time.js\";\nimport {\n OrderShortInfo,\n TransactionState,\n TransactionType,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\ndeclare const __txId: unique symbol;\nexport type TransactionIdStr = `txn:${string}:${string}` & { [__txId]: true };\n\n/**\n * Identifier for a pending task in the wallet.\n */\ndeclare const __pndId: unique symbol;\nexport type PendingIdStr = `pnd:${string}:${string}` & { [__pndId]: true };\n\ndeclare const __tmbId: unique symbol;\nexport type TombstoneIdStr = `tmb:${string}:${string}` & { [__tmbId]: true };\n\nfunction codecForTransactionIdStr(): Codec<TransactionIdStr> {\n return {\n decode(x: any, c?: Context): TransactionIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as TransactionIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForPendingIdStr(): Codec<PendingIdStr> {\n return {\n decode(x: any, c?: Context): PendingIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as PendingIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForTombstoneIdStr(): Codec<TombstoneIdStr> {\n return {\n decode(x: any, c?: Context): TombstoneIdStr {\n if (typeof x === \"string\" && x.startsWith(\"tmb:\")) {\n return x as TombstoneIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"tmb:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nexport function codecForCanonBaseUrl(): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x === \"string\") {\n const canon = canonicalizeBaseUrl(x);\n if (x !== canon) {\n throw new DecodingError(\n `expected canonicalized base URL at ${renderContext(\n c,\n )} but got value '${x}'`,\n );\n }\n return x;\n }\n throw new DecodingError(\n `expected base URL at ${renderContext(c)} but got type ${typeof x}`,\n );\n },\n };\n}\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\n/**\n * How the amount should be interpreted in a transaction\n * Effective = how the balance is change\n * Raw = effective amount without fee\n *\n * Depending on the transaction, raw can be higher than effective\n */\nexport enum TransactionAmountMode {\n Effective = \"effective\",\n Raw = \"raw\",\n}\n\nexport type GetPlanForOperationRequest =\n | GetPlanForWithdrawRequest\n | GetPlanForDepositRequest;\n// | GetPlanForPushDebitRequest\n// | GetPlanForPullCreditRequest\n// | GetPlanForPaymentRequest\n// | GetPlanForTipRequest\n// | GetPlanForRefundRequest\n// | GetPlanForPullDebitRequest\n// | GetPlanForPushCreditRequest;\n\ninterface GetPlanForWalletInitiatedOperation {\n instructedAmount: AmountString;\n mode: TransactionAmountMode;\n}\n\nexport interface ConvertAmountRequest {\n amount: AmountString;\n type: TransactionAmountMode;\n}\n\nexport const codecForConvertAmountRequest =\n buildCodecForObject<ConvertAmountRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"type\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .build(\"ConvertAmountRequest\");\n\nexport interface GetAmountRequest {\n currency: string;\n}\n\nexport const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetAmountRequest\");\n\ninterface GetPlanToCompleteOperation {\n instructedAmount: AmountString;\n}\n\nconst codecForGetPlanForWalletInitiatedOperation = <\n T extends GetPlanForWalletInitiatedOperation,\n>() =>\n buildCodecForObject<T>()\n .property(\n \"mode\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .property(\"instructedAmount\", codecForAmountString());\n\ninterface GetPlanForWithdrawRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Withdrawal;\n exchangeUrl?: string;\n}\ninterface GetPlanForDepositRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Deposit;\n account: string; //payto string\n}\ninterface GetPlanForPushDebitRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPushDebit;\n}\n\ninterface GetPlanForPullCreditRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPullCredit;\n exchangeUrl: string;\n}\n\nconst codecForGetPlanForWithdrawRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForWithdrawRequest>()\n .property(\"type\", codecForConstString(TransactionType.Withdrawal))\n .property(\"exchangeUrl\", codecOptional(codecForString()))\n .build(\"GetPlanForWithdrawRequest\");\n\nconst codecForGetPlanForDepositRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForDepositRequest>()\n .property(\"type\", codecForConstString(TransactionType.Deposit))\n .property(\"account\", codecForString())\n .build(\"GetPlanForDepositRequest\");\n\nconst codecForGetPlanForPushDebitRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPushDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushDebit))\n .build(\"GetPlanForPushDebitRequest\");\n\nconst codecForGetPlanForPullCreditRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPullCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullCredit))\n .property(\"exchangeUrl\", codecForString())\n .build(\"GetPlanForPullCreditRequest\");\n\ninterface GetPlanForPaymentRequest extends GetPlanToCompleteOperation {\n type: TransactionType.Payment;\n wireMethod: string;\n ageRestriction: number;\n maxDepositFee: AmountString;\n}\n\ninterface GetPlanForPullDebitRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPullDebit;\n}\n\ninterface GetPlanForPushCreditRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPushCredit;\n}\n\nconst codecForGetPlanForPaymentRequest =\n buildCodecForObject<GetPlanForPaymentRequest>()\n .property(\"type\", codecForConstString(TransactionType.Payment))\n .property(\"maxDepositFee\", codecForAmountString())\n .build(\"GetPlanForPaymentRequest\");\n\nconst codecForGetPlanForPullDebitRequest =\n buildCodecForObject<GetPlanForPullDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullDebit))\n .build(\"GetPlanForPullDebitRequest\");\n\nconst codecForGetPlanForPushCreditRequest =\n buildCodecForObject<GetPlanForPushCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushCredit))\n .build(\"GetPlanForPushCreditRequest\");\n\nexport const codecForGetPlanForOperationRequest =\n (): Codec<GetPlanForOperationRequest> =>\n buildCodecForUnion<GetPlanForOperationRequest>()\n .discriminateOn(\"type\")\n .alternative(\n TransactionType.Withdrawal,\n codecForGetPlanForWithdrawRequest,\n )\n .alternative(TransactionType.Deposit, codecForGetPlanForDepositRequest)\n // .alternative(\n // TransactionType.PeerPushDebit,\n // codecForGetPlanForPushDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPullCredit,\n // codecForGetPlanForPullCreditRequest,\n // )\n // .alternative(TransactionType.Payment, codecForGetPlanForPaymentRequest)\n // .alternative(\n // TransactionType.PeerPullDebit,\n // codecForGetPlanForPullDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPushCredit,\n // codecForGetPlanForPushCreditRequest,\n // )\n .build(\"GetPlanForOperationRequest\");\n\nexport interface GetPlanForOperationResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n counterPartyAmount?: AmountString;\n details: any;\n}\n\nexport const codecForGetPlanForOperationResponse =\n (): Codec<GetPlanForOperationResponse> =>\n buildCodecForObject<GetPlanForOperationResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .property(\"details\", codecForAny())\n .property(\"counterPartyAmount\", codecOptional(codecForAmountString()))\n .build(\"GetPlanForOperationResponse\");\n\nexport interface AmountResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n}\n\nexport const codecForAmountResponse = (): Codec<AmountResponse> =>\n buildCodecForObject<AmountResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .build(\"AmountResponse\");\n\nexport enum BalanceFlag {\n IncomingKyc = \"incoming-kyc\",\n IncomingAml = \"incoming-aml\",\n IncomingConfirmation = \"incoming-confirmation\",\n OutgoingKyc = \"outgoing-kyc\",\n}\n\nexport interface WalletBalance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n /**\n * Does the balance for this currency have a pending\n * transaction?\n *\n * @deprecated use flags and pendingIncoming/pendingOutgoing instead\n */\n hasPendingTransactions: boolean;\n\n /**\n * Is there a transaction that requires user input?\n *\n * @deprecated use flags instead\n */\n requiresUserInput: boolean;\n\n flags: BalanceFlag[];\n}\n\nexport const codecForScopeInfoGlobal = (): Codec<ScopeInfoGlobal> =>\n buildCodecForObject<ScopeInfoGlobal>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Global))\n .build(\"ScopeInfoGlobal\");\n\nexport const codecForScopeInfoExchange = (): Codec<ScopeInfoExchange> =>\n buildCodecForObject<ScopeInfoExchange>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Exchange))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoExchange\");\n\nexport const codecForScopeInfoAuditor = (): Codec<ScopeInfoAuditor> =>\n buildCodecForObject<ScopeInfoAuditor>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Auditor))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoAuditor\");\n\nexport const codecForScopeInfo = (): Codec<ScopeInfo> =>\n buildCodecForUnion<ScopeInfo>()\n .discriminateOn(\"type\")\n .alternative(ScopeType.Global, codecForScopeInfoGlobal())\n .alternative(ScopeType.Exchange, codecForScopeInfoExchange())\n .alternative(ScopeType.Auditor, codecForScopeInfoAuditor())\n .build(\"ScopeInfo\");\n\nexport interface GetCurrencySpecificationRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForGetCurrencyInfoRequest =\n (): Codec<GetCurrencySpecificationRequest> =>\n buildCodecForObject<GetCurrencySpecificationRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"GetCurrencySpecificationRequest\");\n\nexport interface ListExchangesForScopedCurrencyRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForListExchangesForScopedCurrencyRequest =\n (): Codec<ListExchangesForScopedCurrencyRequest> =>\n buildCodecForObject<ListExchangesForScopedCurrencyRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"ListExchangesForScopedCurrencyRequest\");\n\nexport interface GetCurrencySpecificationResponse {\n currencySpecification: CurrencySpecification;\n}\n\nexport interface BuiltinExchange {\n exchangeBaseUrl: string;\n currencyHint: string;\n}\n\nexport interface PartialWalletRunConfig {\n builtin?: Partial<WalletRunConfig[\"builtin\"]>;\n testing?: Partial<WalletRunConfig[\"testing\"]>;\n features?: Partial<WalletRunConfig[\"features\"]>;\n}\n\nexport interface WalletRunConfig {\n /**\n * Initialization values useful for a complete startup.\n *\n * These are values may be overridden by different wallets\n */\n builtin: {\n exchanges: BuiltinExchange[];\n };\n\n /**\n * Unsafe options which it should only be used to create\n * testing environment.\n */\n testing: {\n /**\n * Allow withdrawal of denominations even though they are about to expire.\n */\n denomselAllowLate: boolean;\n devModeActive: boolean;\n insecureTrustExchange: boolean;\n preventThrottling: boolean;\n skipDefaults: boolean;\n emitObservabilityEvents?: boolean;\n };\n\n /**\n * Configurations values that may be safe to show to the user\n */\n features: {\n allowHttp: boolean;\n };\n}\n\nexport interface InitRequest {\n config?: PartialWalletRunConfig;\n}\n\nexport const codecForInitRequest = (): Codec<InitRequest> =>\n buildCodecForObject<InitRequest>()\n .property(\"config\", codecForAny())\n .build(\"InitRequest\");\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 ScopeInfoGlobal = { type: ScopeType.Global; currency: string };\nexport type ScopeInfoExchange = {\n type: ScopeType.Exchange;\n currency: string;\n url: string;\n};\nexport type ScopeInfoAuditor = {\n type: ScopeType.Auditor;\n currency: string;\n url: string;\n};\n\nexport type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;\n\nexport interface BalancesResponse {\n balances: WalletBalance[];\n}\n\nexport const codecForBalance = (): Codec<WalletBalance> =>\n buildCodecForObject<WalletBalance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForAmountString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForAmountString())\n .property(\"pendingOutgoing\", codecForAmountString())\n .property(\"requiresUserInput\", codecForBoolean())\n .property(\"flags\", codecForAny()) // FIXME\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 * Coin was lost as the denomination is not usable anymore.\n */\n DenomLoss = \"denom-loss\",\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: AmountString;\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: TransactionIdStr;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: TransactionIdStr;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecOptional(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\", codecForTransactionIdStr())\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\", codecForTransactionIdStr())\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 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(\"transactionId\", codecForTransactionIdStr())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\nexport interface BalanceDetails {}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PaymentInsufficientBalanceDetails {\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 balanceReceiverAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceReceiverDepositable: AmountString;\n\n balanceExchangeDepositable: AmountString;\n\n /**\n * Maximum effective amount that the wallet can spend,\n * when all fees are paid by the wallet.\n */\n maxEffectiveSpendAmount: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n balanceExchangeDepositable: AmountString;\n balanceAgeAcceptable: AmountString;\n balanceReceiverAcceptable: AmountString;\n balanceReceiverDepositable: AmountString;\n maxEffectiveSpendAmount: AmountString;\n /**\n * Exchange doesn't have global fees configured for the relevant year,\n * p2p payments aren't possible.\n */\n missingGlobalFees: boolean;\n };\n };\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PaymentInsufficientBalanceDetails> =>\n buildCodecForObject<PaymentInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceReceiverAcceptable\", codecForAmountString())\n .property(\"balanceReceiverDepositable\", codecForAmountString())\n .property(\"balanceExchangeDepositable\", codecForAmountString())\n .property(\"perExchange\", codecForAny())\n .property(\"maxEffectiveSpendAmount\", 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(\"transactionId\", codecForTransactionIdStr())\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\", codecOptional(codecForAmountString()))\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecForString())\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\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 transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId instead\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: AmountString;\n talerUri: string;\n balanceDetails: PaymentInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n transactionId: TransactionIdStr;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: AmountString;\n amountEffective: AmountString | undefined;\n contractTermsHash: string;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n talerUri: string;\n}\n\nexport interface BankWithdrawDetails {\n status: WithdrawalOperationStatus;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n operationId: string;\n apiBaseUrl: string;\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: TransactionIdStr;\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/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 AbortDeposit = \"abort-deposit\",\n AbortPeerPushDebit = \"abort-peer-push-debit\",\n AbortPeerPullDebit = \"abort-peer-pull-debit\",\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 * 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 ExchangesShortListResponse {\n exchanges: ShortExchangeListItem[];\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n implementationSemver: string;\n implementationGitHash: string;\n\n /**\n * Wallet-core protocol version supported by this implementation\n * of the API (\"server\" version).\n */\n version: string;\n exchange: string;\n merchant: string;\n\n bankIntegrationApiRange: string;\n bankConversionApiRange: string;\n corebankApiRange: string;\n\n /**\n * @deprecated as bank was split into multiple APIs with separate versioning\n */\n bank: string;\n\n /**\n * @deprecated\n */\n hash: string | undefined;\n\n /**\n * @deprecated will be removed\n */\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\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\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeWireAccount[];\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 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(codecForExchangeWireAccount()))\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 auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n Pending = \"pending\",\n Proposed = \"proposed\",\n Accepted = \"accepted\",\n}\n\nexport enum ExchangeEntryStatus {\n Preset = \"preset\",\n Ephemeral = \"ephemeral\",\n Used = \"used\",\n}\n\nexport enum ExchangeUpdateStatus {\n Initial = \"initial\",\n InitialUpdate = \"initial-update\",\n Suspended = \"suspended\",\n UnavailableUpdate = \"unavailable-update\",\n Ready = \"ready\",\n ReadyUpdate = \"ready-update\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\nexport interface ShortExchangeListItem {\n exchangeBaseUrl: string;\n}\n\n/**\n * Info about an exchange entry in the wallet.\n */\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n masterPub: string | undefined;\n currency: string;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n ageRestrictionOptions: number[];\n\n /**\n * P2P payments are disabled with this exchange\n * (e.g. because no global fees are configured).\n */\n peerPaymentsDisabled: boolean;\n\n /**\n * Set to true if this exchange doesn't charge any fees.\n */\n noFees: boolean;\n\n scopeInfo: ScopeInfo;\n\n lastUpdateTimestamp: TalerPreciseTimestamp | undefined;\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\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\", codecForCanonBaseUrl())\n .property(\"paytoUris\", codecForList(codecForString()))\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\", codecForCanonBaseUrl())\n .property(\"masterPub\", codecOptional(codecForString()))\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeEntryStatus\", codecForAny())\n .property(\"exchangeUpdateStatus\", codecForAny())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .property(\"scopeInfo\", codecForScopeInfo())\n .property(\"lastUpdateErrorInfo\", codecForAny())\n .property(\"lastUpdateTimestamp\", codecOptional(codecForPreciseTimestamp))\n .property(\"noFees\", codecForBoolean())\n .property(\"peerPaymentsDisabled\", codecForBoolean())\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 * @deprecated in favor of withdrawalAccountsList\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\n\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawalDetailsForAmount {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n *\n * @deprecated the client should query the exchange entry instead\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 * Number of coins that would be used for withdrawal.\n *\n * The UIs should warn if this number is too high (roughly at >100).\n */\n numCoins: number;\n\n /**\n * Ways to pay the exchange.\n *\n * @deprecated in favor of withdrawalAccountsList\n */\n paytoUris: string[];\n\n /**\n * Ways to pay the exchange, including accounts that require currency conversion.\n */\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\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 * Scope info of the currency withdrawn.\n */\n scopeInfo: ScopeInfo;\n}\n\nexport interface DenomSelItem {\n denomPubHash: string;\n count: number;\n /**\n * Number of denoms/planchets to skip, because\n * a re-denomination effectively deleted them.\n */\n skip?: number;\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: DenomSelItem[];\n earliestDepositExpiration: TalerProtocolTimestamp;\n hasDenomWithAgeRestriction: boolean;\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 exchangeCreditAccountDetails: WithdrawalExchangeAccountDetails[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\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 scopeInfo: ScopeInfo;\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 /**\n * Language of the returned content.\n *\n * If missing, language is unknown.\n */\n contentLanguage: string | undefined;\n\n /**\n * Available languages as advertised by the exchange.\n */\n tosAvailableLanguages: string[];\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: AmountString;\n summary: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForTestPayArgs = (): Codec<TestPayArgs> =>\n buildCodecForObject<TestPayArgs>()\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: AmountString;\n amountToSpend: AmountString;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"IntegrationTestArgs\");\n\nexport interface IntegrationTestV2Args {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n}\n\nexport const codecForIntegrationTestV2Args = (): Codec<IntegrationTestV2Args> =>\n buildCodecForObject<IntegrationTestV2Args>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"IntegrationTestV2Args\");\n\nexport interface GetExchangeEntryByUrlRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeEntryByUrlRequest =\n (): Codec<GetExchangeEntryByUrlRequest> =>\n buildCodecForObject<GetExchangeEntryByUrlRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"GetExchangeEntryByUrlRequest\");\n\nexport type GetExchangeEntryByUrlResponse = ExchangeListItem;\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use a separate API call to start a forced exchange update instead\n */\n forceUpdate?: boolean;\n\n masterPub?: string;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .property(\"masterPub\", codecOptional(codecForString()))\n .build(\"AddExchangeRequest\");\n\nexport interface UpdateExchangeEntryRequest {\n exchangeBaseUrl: string;\n force?: boolean;\n}\n\nexport const codecForUpdateExchangeEntryRequest =\n (): Codec<UpdateExchangeEntryRequest> =>\n buildCodecForObject<UpdateExchangeEntryRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"force\", codecOptional(codecForBoolean()))\n .build(\"UpdateExchangeEntryRequest\");\n\nexport interface GetExchangeResourcesRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeResourcesRequest =\n (): Codec<GetExchangeResourcesRequest> =>\n buildCodecForObject<GetExchangeResourcesRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"GetExchangeResourcesRequest\");\n\nexport interface GetExchangeResourcesResponse {\n hasResources: boolean;\n}\n\nexport interface DeleteExchangeRequest {\n exchangeBaseUrl: string;\n purge?: boolean;\n}\n\nexport const codecForDeleteExchangeRequest = (): Codec<DeleteExchangeRequest> =>\n buildCodecForObject<DeleteExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"purge\", codecOptional(codecForBoolean()))\n .build(\"DeleteExchangeRequest\");\n\nexport interface ForceExchangeUpdateRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForceExchangeUpdateRequest =\n (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"AddExchangeRequest\");\n\nexport interface GetExchangeTosRequest {\n exchangeBaseUrl: string;\n acceptedFormat?: string[];\n acceptLanguage?: string;\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .property(\"acceptLanguage\", codecOptional(codecForString()))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * Instead of generating a fresh, random reserve key pair,\n * use the provided reserve private key.\n *\n * Use with caution. Usage of this field may be restricted\n * to developer mode.\n */\n forceReservePriv?: EddsaPrivateKeyString;\n}\n\nexport const codecForAcceptManualWithdrawalRequest =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"forceReservePriv\", codecOptional(codecForString()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * ID provided by the client to cancel the request.\n *\n * If the same request is made again with the same clientCancellationId,\n * all previous requests are cancelled.\n *\n * The cancelled request will receive an error response with\n * an error code that indicates the cancellation.\n *\n * The cancellation is best-effort, responses might still arrive.\n */\n clientCancellationId?: string;\n}\n\nexport interface PrepareBankIntegratedWithdrawalRequest {\n talerWithdrawUri: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\n restrictAge?: number;\n}\n\nexport const codecForPrepareBankIntegratedWithdrawalRequest =\n (): Codec<PrepareBankIntegratedWithdrawalRequest> =>\n buildCodecForObject<PrepareBankIntegratedWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"PrepareBankIntegratedWithdrawalRequest\");\n\nexport interface PrepareBankIntegratedWithdrawalResponse {\n transactionId: string;\n}\n\nexport interface ConfirmWithdrawalRequest {\n transactionId: string;\n}\n\nexport const codecForConfirmWithdrawalRequestRequest =\n (): Codec<ConfirmWithdrawalRequest> =>\n buildCodecForObject<ConfirmWithdrawalRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmWithdrawalRequest\");\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\", codecForCanonBaseUrl())\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\", codecForCanonBaseUrl())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"clientCancellationId\", codecOptional(codecForString()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ForgetExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForgetExchangeTosRequest =\n (): Codec<ForgetExchangeTosRequest> =>\n buildCodecForObject<ForgetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"ForgetExchangeTosRequest\");\n\nexport interface AcceptRefundRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<AcceptRefundRequest> =>\n buildCodecForObject<AcceptRefundRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AcceptRefundRequest\");\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 // @deprecated use transaction id\n proposalId?: string;\n transactionId?: string;\n}\n\nexport const codecForGetContractTermsDetails =\n (): Codec<GetContractTermsDetailsRequest> =>\n buildCodecForObject<GetContractTermsDetailsRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(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 SharePaymentRequest {\n merchantBaseUrl: string;\n orderId: string;\n}\nexport const codecForSharePaymentRequest = (): Codec<SharePaymentRequest> =>\n buildCodecForObject<SharePaymentRequest>()\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"orderId\", codecForString())\n .build(\"SharePaymentRequest\");\n\nexport interface SharePaymentResult {\n privatePayUri: string;\n}\nexport const codecForSharePaymentResult = (): Codec<SharePaymentResult> =>\n buildCodecForObject<SharePaymentResult>()\n .property(\"privatePayUri\", codecForString())\n .build(\"SharePaymentResult\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams?: TemplateParams;\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 /**\n * @deprecated use transactionId instead\n */\n proposalId?: string;\n transactionId?: TransactionIdStr;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\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}\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: AmountString;\n /**\n * Corebank API base URL.\n */\n corebankApiBaseUrl: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\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\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"WithdrawTestBalanceRequest\");\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 RefreshCoinSpec {\n coinPub: string;\n amount?: AmountString;\n}\n\nexport const codecForRefreshCoinSpec = (): Codec<RefreshCoinSpec> =>\n buildCodecForObject<RefreshCoinSpec>()\n .property(\"amount\", codecForAmountString())\n .property(\"coinPub\", codecForString())\n .build(\"ForceRefreshRequest\");\n\nexport interface ForceRefreshRequest {\n refreshCoinSpecs: RefreshCoinSpec[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"refreshCoinSpecs\", codecForList(codecForRefreshCoinSpec()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport interface StartRefundQueryForUriResponse {\n /**\n * Transaction id of the *payment* where the refund query was started.\n */\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface StartRefundQueryRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForStartRefundQueryRequest =\n (): Codec<StartRefundQueryRequest> =>\n buildCodecForObject<StartRefundQueryRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"StartRefundQueryRequest\");\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForFailTransactionRequest =\n (): Codec<FailTransactionRequest> =>\n buildCodecForObject<FailTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"FailTransactionRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForResumeTransaction = (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AbortTransactionRequest\");\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n /**\n * Pre-allocated transaction ID.\n * Allows clients to easily handle notifications\n * that occur while the operation has been created but\n * before the creation request has returned.\n */\n transactionId?: TransactionIdStr;\n depositPaytoUri: string;\n amount: AmountString;\n}\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 fees: DepositGroupFees;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: TransactionIdStr;\n}\n\nexport interface TxIdResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawUriInfoResponse {\n operationId: string;\n status: WithdrawalOperationStatus;\n confirmTransferUrl?: string;\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"operationId\", codecForString())\n .property(\"confirmTransferUrl\", codecOptional(codecForString()))\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"defaultExchangeBaseUrl\", codecOptional(codecForCanonBaseUrl()))\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 TestingListTasksForTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface TestingListTasksForTransactionsResponse {\n taskIdList: string[];\n}\n\nexport const codecForTestingListTasksForTransactionRequest =\n (): Codec<TestingListTasksForTransactionRequest> =>\n buildCodecForObject<TestingListTasksForTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"TestingListTasksForTransactionRequest\");\n\nexport interface DeleteTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\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: TransactionIdStr;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: TransactionIdStr;\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: TransactionIdStr;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: TransactionIdStr;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: TalerPreciseTimestamp;\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 ActiveTask {\n taskId: string;\n transaction: TransactionIdStr | undefined;\n firstTry: AbsoluteTime | undefined;\n nextTry: AbsoluteTime | undefined;\n retryCounter: number | undefined;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport interface GetActiveTasksResponse {\n tasks: ActiveTask[];\n}\n\nexport const codecForActiveTask = (): Codec<ActiveTask> =>\n buildCodecForObject<ActiveTask>()\n .property(\"taskId\", codecForString())\n .property(\"transaction\", codecOptional(codecForTransactionIdStr()))\n .property(\"retryCounter\", codecOptional(codecForNumber()))\n .property(\"firstTry\", codecOptional(codecForAbsoluteTime))\n .property(\"nextTry\", codecOptional(codecForAbsoluteTime))\n .property(\"lastError\", codecOptional(codecForTalerErrorDetail()))\n .build(\"ActiveTask\");\n\nexport const codecForGetActiveTasks = (): Codec<GetActiveTasksResponse> =>\n buildCodecForObject<GetActiveTasksResponse>()\n .property(\"tasks\", codecForList(codecForActiveTask()))\n .build(\"GetActiveTasks\");\n\nexport interface ImportDbRequest {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDbRequest> =>\n buildCodecForObject<ImportDbRequest>()\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 /**\n * Number of coins used for the payment.\n */\n numCoins: number;\n}\n\nexport interface SelectedCoin {\n denomPubHash: string;\n coinPub: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\nexport interface SelectedProspectiveCoin {\n denomPubHash: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n coins: SelectedCoin[];\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 ProspectivePayCoinSelection {\n prospectiveCoins: SelectedProspectiveCoin[];\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(codecForCanonBaseUrl()))\n .property(\"amount\", codecForAmountString())\n .build(\"CheckPeerPushDebitRequest\");\n\nexport interface CheckPeerPushDebitResponse {\n amountRaw: AmountString;\n amountEffective: AmountString;\n exchangeBaseUrl: string;\n /**\n * Maximum expiration date, based on how close the coins\n * used for the payment are to expiry.\n *\n * The value is based on when the wallet would typically\n * automatically refresh the coins on its own, leaving enough\n * time to get a refund for the push payment and refresh the\n * coin.\n */\n maxExpirationDate: TalerProtocolTimestamp;\n}\n\nexport interface InitiatePeerPushDebitRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushDebitResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n transactionId: TransactionIdStr;\n}\n\nexport const codecForInitiatePeerPushDebitRequest =\n (): Codec<InitiatePeerPushDebitRequest> =>\n buildCodecForObject<InitiatePeerPushDebitRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushDebitRequest\");\n\nexport interface PreparePeerPushCreditRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n transactionId: TransactionIdStr;\n\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use transaction ID instead.\n */\n peerPushCreditId: string;\n\n /**\n * @deprecated\n */\n amount: AmountString;\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 peerPullDebitId: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCreditRequest> =>\n buildCodecForObject<PreparePeerPushCreditRequest>()\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 transactionId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n transactionId: TransactionIdStr;\n}\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(\"transactionId\", codecForTransactionIdStr())\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(codecForCanonBaseUrl()))\n .build(\"CheckPeerPullCreditRequest\");\n\nexport interface CheckPeerPullCreditResponse {\n exchangeBaseUrl: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n /**\n * Number of coins that will be used,\n * can be used by the UI to warn if excessively large.\n */\n numCoins: number;\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(codecForCanonBaseUrl()))\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 * @deprecated since it's not necessarily valid yet until the tx is in the right state\n */\n talerUri: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport interface CanonicalizeBaseUrlRequest {\n url: string;\n}\n\nexport const codecForCanonicalizeBaseUrlRequest =\n (): Codec<CanonicalizeBaseUrlRequest> =>\n buildCodecForObject<CanonicalizeBaseUrlRequest>()\n .property(\"url\", codecForString())\n .build(\"CanonicalizeBaseUrlRequest\");\n\nexport interface CanonicalizeBaseUrlResponse {\n url: string;\n}\n\nexport interface ValidateIbanRequest {\n iban: string;\n}\n\nexport const codecForValidateIbanRequest = (): Codec<ValidateIbanRequest> =>\n buildCodecForObject<ValidateIbanRequest>()\n .property(\"iban\", codecForString())\n .build(\"ValidateIbanRequest\");\n\nexport interface ValidateIbanResponse {\n valid: boolean;\n}\n\nexport const codecForValidateIbanResponse = (): Codec<ValidateIbanResponse> =>\n buildCodecForObject<ValidateIbanResponse>()\n .property(\"valid\", codecForBoolean())\n .build(\"ValidateIbanResponse\");\n\nexport type TransactionStateFilter = \"nonfinal\";\n\nexport interface TransactionRecordFilter {\n onlyState?: TransactionStateFilter;\n onlyCurrency?: string;\n}\n\nexport interface StoredBackupList {\n storedBackups: {\n name: string;\n }[];\n}\n\nexport interface CreateStoredBackupResponse {\n name: string;\n}\n\nexport interface RecoverStoredBackupRequest {\n name: string;\n}\n\nexport interface DeleteStoredBackupRequest {\n name: string;\n}\n\nexport const codecForDeleteStoredBackupRequest =\n (): Codec<DeleteStoredBackupRequest> =>\n buildCodecForObject<DeleteStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"DeleteStoredBackupRequest\");\n\nexport const codecForRecoverStoredBackupRequest =\n (): Codec<RecoverStoredBackupRequest> =>\n buildCodecForObject<RecoverStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"RecoverStoredBackupRequest\");\n\nexport interface TestingSetTimetravelRequest {\n offsetMs: number;\n}\n\nexport const codecForTestingSetTimetravelRequest =\n (): Codec<TestingSetTimetravelRequest> =>\n buildCodecForObject<TestingSetTimetravelRequest>()\n .property(\"offsetMs\", codecForNumber())\n .build(\"TestingSetTimetravelRequest\");\n\nexport interface AllowedAuditorInfo {\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport interface AllowedExchangeInfo {\n exchangeBaseUrl: string;\n exchangePub: string;\n}\n\n/**\n * Data extracted from the contract terms that is relevant for payment\n * processing in the wallet.\n */\nexport interface WalletContractData {\n /**\n * Fulfillment URL, or the empty string if the order has no fulfillment URL.\n *\n * Stored as a non-nullable string as we use this field for IndexedDB indexing.\n */\n fulfillmentUrl: string;\n\n contractTermsHash: string;\n fulfillmentMessage?: string;\n fulfillmentMessageI18n?: InternationalizedString;\n merchantSig: string;\n merchantPub: string;\n merchant: MerchantInfo;\n amount: AmountString;\n orderId: string;\n merchantBaseUrl: string;\n summary: string;\n summaryI18n: { [lang_tag: string]: string } | undefined;\n autoRefund: TalerProtocolDuration | undefined;\n payDeadline: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n allowedExchanges: AllowedExchangeInfo[];\n timestamp: TalerProtocolTimestamp;\n wireMethod: string;\n wireInfoHash: string;\n maxDepositFee: AmountString;\n minimumAge?: number;\n}\n\nexport interface TestingWaitTransactionRequest {\n transactionId: TransactionIdStr;\n txState: TransactionState;\n}\n\nexport interface TestingGetDenomStatsRequest {\n exchangeBaseUrl: string;\n}\n\nexport interface TestingGetDenomStatsResponse {\n numKnown: number;\n numOffered: number;\n numLost: number;\n}\n\nexport const codecForTestingGetDenomStatsRequest =\n (): Codec<TestingGetDenomStatsRequest> =>\n buildCodecForObject<TestingGetDenomStatsRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"TestingGetDenomStatsRequest\");\n\nexport interface WithdrawalExchangeAccountDetails {\n /**\n * Payto URI to credit the exchange.\n *\n * Depending on whether the (manual!) withdrawal is accepted or just\n * being checked, this already includes the subject with the\n * reserve public key.\n */\n paytoUri: string;\n\n /**\n * Status that indicates whether the account can be used\n * by the user to send funds for a withdrawal.\n *\n * ok: account should be shown to the user\n * error: account should not be shown to the user, UIs might render the error (in conversionError),\n * especially in dev mode.\n */\n status: \"ok\" | \"error\";\n\n /**\n * Transfer amount. Might be in a different currency than the requested\n * amount for withdrawal.\n *\n * Absent if this is a conversion account and the conversion failed.\n */\n transferAmount?: AmountString;\n\n /**\n * Currency specification for the external currency.\n *\n * Only included if this account requires a currency conversion.\n */\n currencySpecification?: CurrencySpecification;\n\n /**\n * Further restrictions for sending money to the\n * exchange.\n */\n creditRestrictions?: AccountRestriction[];\n\n /**\n * Label given to the account or the account's bank by the exchange.\n */\n bankLabel?: string;\n\n /*\n * Display priority assigned to this bank account by the exchange.\n */\n priority?: number;\n\n /**\n * Error that happened when attempting to request the conversion rate.\n */\n conversionError?: TalerErrorDetail;\n}\n\nexport interface PrepareWithdrawExchangeRequest {\n /**\n * A taler://withdraw-exchange URI.\n */\n talerUri: string;\n}\n\nexport const codecForPrepareWithdrawExchangeRequest =\n (): Codec<PrepareWithdrawExchangeRequest> =>\n buildCodecForObject<PrepareWithdrawExchangeRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PrepareWithdrawExchangeRequest\");\n\nexport interface PrepareWithdrawExchangeResponse {\n /**\n * Base URL of the exchange that already existed\n * or was ephemerally added as an exchange entry to\n * the wallet.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount from the taler://withdraw-exchange URI.\n * Only present if specified in the URI.\n */\n amount?: AmountString;\n}\n\nexport interface ExchangeEntryState {\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n}\n\nexport interface ListGlobalCurrencyAuditorsResponse {\n auditors: {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n }[];\n}\n\nexport interface ListGlobalCurrencyExchangesResponse {\n exchanges: {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n }[];\n}\n\nexport interface AddGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForAddGlobalCurrencyExchangeRequest =\n (): Codec<AddGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<AddGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"AddGlobalCurrencyExchangeRequest\");\n\nexport interface RemoveGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyExchangeRequest =\n (): Codec<RemoveGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"RemoveGlobalCurrencyExchangeRequest\");\n\nexport interface AddGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForAddGlobalCurrencyAuditorRequest =\n (): Codec<AddGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<AddGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForCanonBaseUrl())\n .property(\"auditorPub\", codecForString())\n .build(\"AddGlobalCurrencyAuditorRequest\");\n\nexport interface RemoveGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyAuditorRequest =\n (): Codec<RemoveGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForCanonBaseUrl())\n .property(\"auditorPub\", codecForString())\n .build(\"RemoveGlobalCurrencyAuditorRequest\");\n\n/**\n * Information about one provider.\n *\n * We don't store the account key here,\n * as that's derived from the wallet root key.\n */\nexport interface ProviderInfo {\n active: boolean;\n syncProviderBaseUrl: string;\n name: string;\n terms?: BackupProviderTerms;\n /**\n * Last communication issue with the provider.\n */\n lastError?: TalerErrorDetail;\n lastSuccessfulBackupTimestamp?: TalerPreciseTimestamp;\n lastAttemptedBackupTimestamp?: TalerPreciseTimestamp;\n paymentProposalIds: string[];\n backupProblem?: BackupProblem;\n paymentStatus: ProviderPaymentStatus;\n}\n\nexport interface BackupProviderTerms {\n supportedProtocolVersion: string;\n annualFee: AmountString;\n storageLimitInMegabytes: number;\n}\n\nexport type BackupProblem =\n | BackupUnreadableProblem\n | BackupConflictingDeviceProblem;\n\nexport interface BackupUnreadableProblem {\n type: \"backup-unreadable\";\n}\n\nexport interface BackupConflictingDeviceProblem {\n type: \"backup-conflicting-device\";\n otherDeviceId: string;\n myDeviceId: string;\n backupTimestamp: AbsoluteTime;\n}\n\nexport type ProviderPaymentStatus =\n | ProviderPaymentTermsChanged\n | ProviderPaymentPaid\n | ProviderPaymentInsufficientBalance\n | ProviderPaymentUnpaid\n | ProviderPaymentPending;\n\nexport enum ProviderPaymentType {\n Unpaid = \"unpaid\",\n Pending = \"pending\",\n InsufficientBalance = \"insufficient-balance\",\n Paid = \"paid\",\n TermsChanged = \"terms-changed\",\n}\n\nexport interface ProviderPaymentUnpaid {\n type: ProviderPaymentType.Unpaid;\n}\n\nexport interface ProviderPaymentInsufficientBalance {\n type: ProviderPaymentType.InsufficientBalance;\n amount: AmountString;\n}\n\nexport interface ProviderPaymentPending {\n type: ProviderPaymentType.Pending;\n talerUri?: string;\n}\n\nexport interface ProviderPaymentPaid {\n type: ProviderPaymentType.Paid;\n paidUntil: AbsoluteTime;\n}\n\nexport interface ProviderPaymentTermsChanged {\n type: ProviderPaymentType.TermsChanged;\n paidUntil: AbsoluteTime;\n oldTerms: BackupProviderTerms;\n newTerms: BackupProviderTerms;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport interface SyncTermsOfServiceResponse {\n // maximum backup size supported\n storage_limit_in_megabytes: number;\n\n // Fee for an account, per year.\n annual_fee: AmountString;\n\n // protocol version supported by the server,\n // for now always \"0.0\".\n version: string;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport const codecForSyncTermsOfServiceResponse =\n (): Codec<SyncTermsOfServiceResponse> =>\n buildCodecForObject<SyncTermsOfServiceResponse>()\n .property(\"storage_limit_in_megabytes\", codecForNumber())\n .property(\"annual_fee\", codecForAmountString())\n .property(\"version\", codecForString())\n .build(\"SyncTermsOfServiceResponse\");\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { base64FromArrayBuffer } from \"../base64.js\";\nimport { encodeCrock, getRandomBytes, stringToBytes } from \"../taler-crypto.js\";\nimport { AccessToken, LongPollParams, PaginationParams } from \"./types.js\";\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\n/**\n * rfc8959\n * @param token\n * @returns\n */\nexport function makeBearerTokenAuthHeader(token: AccessToken): string {\n return `Bearer ${token}`;\n}\n\n/**\n * https://bugs.gnunet.org/view.php?id=7949\n */\nexport function addPaginationParams(url: URL, pagination?: PaginationParams) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"start\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"delta\", String(order * limit));\n}\n\nexport function addMerchantPaginationParams(\n url: URL,\n pagination?: PaginationParams,\n) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"offset\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"limit\", String(order * limit));\n}\n\nexport function addLongPollingParam(url: URL, param?: LongPollParams) {\n if (!param) return;\n if (param.timeoutMs) {\n url.searchParams.set(\"long_poll_ms\", String(param.timeoutMs));\n }\n}\n\nexport interface CacheEvictor<T> {\n notifySuccess: (op: T) => Promise<void>;\n}\n\nexport const nullEvictor: CacheEvictor<unknown> = {\n notifySuccess: () => Promise.resolve(),\n};\n\nexport class IdempotencyRetry {\n public readonly uid: string;\n public readonly timesLeft: number;\n public readonly maxTries: number;\n\n private constructor(timesLeft: number, maxTimesLeft: number) {\n this.timesLeft = timesLeft;\n this.maxTries = maxTimesLeft;\n this.uid = encodeCrock(getRandomBytes(32))\n }\n \n static tryFiveTimes() {\n return new IdempotencyRetry(5, 5)\n }\n\n next(): IdempotencyRetry | undefined {\n const left = this.timesLeft -1\n if (left <= 0) {\n return undefined\n }\n return new IdempotencyRetry(left, this.maxTries);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { AmountJson, Amounts } from \"../amounts.js\";\nimport { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport { TalerErrorCode } from \"../taler-error-codes.js\";\nimport { codecForTalerErrorDetail } from \"../wallet-types.js\";\nimport {\n AccessToken,\n TalerBankConversionApi,\n codecForCashinConversionResponse,\n codecForCashoutConversionResponse,\n codecForConversionBankConfig,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerBankConversionResultByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = ResultByMethod<TalerBankConversionHttpClient, prop>;\nexport type TalerBankConversionErrorsByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;\n\nexport enum TalerBankConversionCacheEviction {\n UPDATE_RATE,\n}\n\n/**\n * The API is used by the wallets.\n */\nexport class TalerBankConversionHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForConversionBankConfig());\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate\n *\n */\n async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) {\n const url = new URL(`cashin-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashinConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate\n *\n */\n async getCashoutRate(conversion: {\n debit?: AmountJson;\n credit?: AmountJson;\n }) {\n const url = new URL(`cashout-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate\n *\n */\n async updateConversionRate(\n auth: AccessToken,\n body: TalerBankConversionApi.ConversionRate,\n ) {\n const url = new URL(`conversion-rate`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerBankConversionCacheEviction.UPDATE_RATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n LibtoolVersion,\n LongPollParams,\n OperationAlternative,\n OperationFail,\n OperationOk,\n TalerErrorCode,\n codecForChallenge,\n codecForTanTransmission,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opKnownTalerFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n PaginationParams,\n TalerCorebankApi,\n UserAndToken,\n WithdrawalOperationStatus,\n codecForAccountData,\n codecForBankAccountCreateWithdrawalResponse,\n codecForBankAccountTransactionInfo,\n codecForBankAccountTransactionsResponse,\n codecForCashoutPending,\n codecForCashoutStatusResponse,\n codecForCashouts,\n codecForCoreBankConfig,\n codecForCreateTransactionResponse,\n codecForGlobalCashouts,\n codecForListBankAccountsResponse,\n codecForMonitorResponse,\n codecForPublicAccountsResponse,\n codecForRegisterAccountResponse,\n codecForWithdrawalPublicInfo,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n IdempotencyRetry,\n addLongPollingParam,\n addPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerCoreBankResultByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = ResultByMethod<TalerCoreBankHttpClient, prop>;\nexport type TalerCoreBankErrorsByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;\n\nexport enum TalerCoreBankCacheEviction {\n DELETE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_ACCOUNT,\n UPDATE_PASSWORD,\n CREATE_TRANSACTION,\n CONFIRM_WITHDRAWAL,\n ABORT_WITHDRAWAL,\n CREATE_WITHDRAWAL,\n CREATE_CASHOUT,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerCoreBankHttpClient {\n public readonly PROTOCOL_VERSION = \"4:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCoreBankConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // ACCOUNTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts\n *\n */\n async createAccount(\n auth: AccessToken | undefined,\n body: TalerCorebankApi.RegisterAccountRequest,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n const headers: Record<string, string> = {};\n if (auth) {\n headers.Authorization = makeBearerTokenAuthHeader(auth);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers: headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n TalerCoreBankCacheEviction.CREATE_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForRegisterAccountResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-corebank.html#delete--accounts-$USERNAME\n *\n */\n async deleteAccount(auth: UserAndToken, cid?: string) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME\n *\n */\n async updateAccount(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountReconfiguration,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME-auth\n *\n */\n async updatePassword(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountPasswordChange,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/auth`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--public-accounts\n *\n */\n async getPublicAccounts(\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`public-accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForPublicAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ public_accounts: [] });\n case HttpStatusCode.NotFound:\n return opFixedSuccess({ public_accounts: [] });\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts\n *\n */\n async getAccounts(\n auth: AccessToken,\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForListBankAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ accounts: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME\n *\n */\n async getAccount(auth: UserAndToken) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountData());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // TRANSACTIONS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions\n *\n */\n async getTransactions(\n auth: UserAndToken,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountTransactionsResponse(),\n );\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ transactions: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions-$TRANSACTION_ID\n *\n */\n async getTransactionById(auth: UserAndToken, txid: number) {\n const url = new URL(\n `accounts/${auth.username}/transactions/${String(txid)}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountTransactionInfo());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions\n *\n */\n async createTransaction(\n auth: UserAndToken,\n body: TalerCorebankApi.CreateTransactionRequest,\n idempotencyCheck: IdempotencyRetry | undefined,\n cid?: string,\n ): Promise<\n //manually definition all return types because of recursion\n | OperationOk<TalerCorebankApi.CreateTransactionResponse>\n | OperationAlternative<HttpStatusCode.Accepted, TalerCorebankApi.Challenge>\n | OperationFail<HttpStatusCode.NotFound>\n | OperationFail<HttpStatusCode.BadRequest>\n | OperationFail<HttpStatusCode.Unauthorized>\n | OperationFail<TalerErrorCode.BANK_UNALLOWED_DEBIT>\n | OperationFail<TalerErrorCode.BANK_ADMIN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_SAME_ACCOUNT>\n | OperationFail<TalerErrorCode.BANK_UNKNOWN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED>\n > {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n if (idempotencyCheck) {\n body.request_uid = idempotencyCheck.uid;\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCreateTransactionResponse());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n if (!idempotencyCheck) {\n return opKnownTalerFailure(details.code, details);\n }\n const nextRetry = idempotencyCheck.next();\n return this.createTransaction(auth, body, nextRetry, cid);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // WITHDRAWALS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals\n *\n */\n async createWithdrawal(\n auth: UserAndToken,\n body: TalerCorebankApi.BankAccountCreateWithdrawalRequest,\n ) {\n const url = new URL(`accounts/${auth.username}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountCreateWithdrawalResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-confirm\n *\n */\n async confirmWithdrawalById(auth: UserAndToken, wid: string, cid?: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-abort\n *\n */\n async abortWithdrawalById(auth: UserAndToken, wid: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--withdrawals-$WITHDRAWAL_ID\n *\n */\n async getWithdrawalById(\n wid: string,\n params?: {\n old_state?: WithdrawalOperationStatus;\n } & LongPollParams,\n ) {\n const url = new URL(`withdrawals/${wid}`, this.baseUrl);\n addLongPollingParam(url, params);\n if (params) {\n url.searchParams.set(\n \"old_state\",\n !params.old_state ? \"pending\" : params.old_state,\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWithdrawalPublicInfo());\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // CASHOUTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts\n *\n */\n async createCashout(\n auth: UserAndToken,\n body: TalerCorebankApi.CashoutRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutPending());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONVERSION_AMOUNT_TO_SMALL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts-$CASHOUT_ID\n *\n */\n async getCashoutById(auth: UserAndToken, cid: number) {\n const url = new URL(\n `accounts/${auth.username}/cashouts/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutStatusResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts\n *\n */\n async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--cashouts\n *\n */\n async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {\n const url = new URL(`cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForGlobalCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // 2FA\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID\n *\n */\n async sendChallenge(auth: UserAndToken, cid: string) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTanTransmission());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID-confirm\n *\n */\n async confirmChallenge(\n auth: UserAndToken,\n cid: string,\n body: TalerCorebankApi.ChallengeSolve,\n ) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // MONITOR\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--monitor\n *\n */\n async getMonitor(\n auth: AccessToken,\n params: {\n timeframe?: TalerCorebankApi.MonitorTimeframeParam;\n date?: AbsoluteTime;\n } = {},\n ) {\n const url = new URL(`monitor`, this.baseUrl);\n if (params.timeframe) {\n url.searchParams.set(\n \"timeframe\",\n TalerCorebankApi.MonitorTimeframeParam[params.timeframe],\n );\n }\n if (params.date) {\n const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);\n if (seconds !== \"never\") {\n url.searchParams.set(\"date_s\", String(seconds));\n }\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMonitorResponse());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Others API\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getIntegrationAPI(): URL {\n return new URL(`taler-integration/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getWireGatewayAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-wire-gateway/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getRevenueAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getAuthenticationAPI(username: string): URL {\n return new URL(`accounts/${username}/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getConversionInfoAPI(): URL {\n return new URL(`conversion-info/`, this.baseUrl);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n FailCasesByMethod,\n HttpStatusCode,\n LibtoolVersion,\n PaginationParams,\n ResultByMethod,\n TalerMerchantApi,\n codecForAbortResponse,\n codecForAccountAddResponse,\n codecForAccountKycRedirects,\n codecForAccountsSummaryResponse,\n codecForBankAccountEntry,\n codecForClaimResponse,\n codecForInstancesResponse,\n codecForInventorySummaryResponse,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n codecForMerchantRefundResponse,\n codecForOrderHistory,\n codecForOtpDeviceDetails,\n codecForOtpDeviceSummaryResponse,\n codecForOutOfStockResponse,\n codecForPaidRefundStatusResponse,\n codecForPaymentResponse,\n codecForPostOrderResponse,\n codecForProductDetail,\n codecForQueryInstancesResponse,\n codecForStatusGoto,\n codecForStatusPaid,\n codecForStatusStatusUnpaid,\n codecForTansferList,\n codecForTemplateDetails,\n codecForTemplateSummaryResponse,\n codecForTokenFamiliesList,\n codecForTokenFamilyDetails,\n codecForWalletRefundResponse,\n codecForWalletTemplateDetails,\n codecForWebhookDetails,\n codecForWebhookSummaryResponse,\n opEmptySuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n HttpResponse,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport { opSuccessFromHttp, opUnknownFailure } from \"../operation.js\";\nimport {\n CacheEvictor,\n addMerchantPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerMerchantInstanceResultByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = ResultByMethod<TalerMerchantInstanceHttpClient, prop>;\nexport type TalerMerchantInstanceErrorsByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = FailCasesByMethod<TalerMerchantInstanceHttpClient, prop>;\n\nexport enum TalerMerchantInstanceCacheEviction {\n CREATE_ORDER,\n UPDATE_ORDER,\n DELETE_ORDER,\n UPDATE_CURRENT_INSTANCE,\n DELETE_CURRENT_INSTANCE,\n CREATE_BANK_ACCOUNT,\n UPDATE_BANK_ACCOUNT,\n DELETE_BANK_ACCOUNT,\n CREATE_PRODUCT,\n UPDATE_PRODUCT,\n DELETE_PRODUCT,\n CREATE_TRANSFER,\n DELETE_TRANSFER,\n CREATE_DEVICE,\n UPDATE_DEVICE,\n DELETE_DEVICE,\n CREATE_TEMPLATE,\n UPDATE_TEMPLATE,\n DELETE_TEMPLATE,\n CREATE_WEBHOOK,\n UPDATE_WEBHOOK,\n DELETE_WEBHOOK,\n CREATE_TOKENFAMILY,\n UPDATE_TOKENFAMILY,\n DELETE_TOKENFAMILY,\n LAST,\n}\nexport enum TalerMerchantManagementCacheEviction {\n CREATE_INSTANCE = TalerMerchantInstanceCacheEviction.LAST + 1,\n UPDATE_INSTANCE,\n DELETE_INSTANCE,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerMerchantInstanceHttpClient {\n public readonly PROTOCOL_VERSION = \"10:0:6\";\n\n readonly httpLib: HttpRequestLibrary;\n readonly cacheEvictor: CacheEvictor<TalerMerchantInstanceCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerMerchantInstanceCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wallet API\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim\n */\n async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {\n const url = new URL(`orders/${orderId}/claim`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForClaimResponse());\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-pay\n */\n async makePayment(orderId: string, body: TalerMerchantApi.PayRequest) {\n const url = new URL(`orders/${orderId}/pay`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaymentResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PaymentRequired:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.RequestTimeout:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PreconditionFailed:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID\n */\n\n async getPaymentStatus(\n orderId: string,\n params: TalerMerchantApi.PaymentStatusRequestParams = {},\n ) {\n const url = new URL(`orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.awaitRefundObtained !== undefined) {\n url.searchParams.set(\n \"await_refund_obtained\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.claimToken !== undefined) {\n url.searchParams.set(\"token\", params.claimToken);\n }\n if (params.contractTermHash !== undefined) {\n url.searchParams.set(\"h_contract\", params.contractTermHash);\n }\n if (params.refund !== undefined) {\n url.searchParams.set(\"refund\", params.refund);\n }\n if (params.sessionId !== undefined) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout !== undefined) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n // body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForStatusPaid());\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForStatusGoto());\n // case HttpStatusCode.Found: not possible since content is not HTML\n case HttpStatusCode.PaymentRequired:\n return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#demonstrating-payment\n */\n async demostratePayment(orderId: string, body: TalerMerchantApi.PaidRequest) {\n const url = new URL(`orders/${orderId}/paid`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments\n */\n async abortIncompletePayment(\n orderId: string,\n body: TalerMerchantApi.AbortRequest,\n ) {\n const url = new URL(`orders/${orderId}/abort`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForAbortResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#obtaining-refunds\n */\n async obtainRefund(\n orderId: string,\n body: TalerMerchantApi.WalletRefundRequest,\n ) {\n const url = new URL(`orders/${orderId}/refund`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForWalletRefundResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth\n */\n async updateCurrentInstanceAuthentication(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(`private/auth`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: // FIXME: missing in docs\n return opEmptySuccess(resp);\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private\n */\n async updateCurrentInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private\n *\n */\n async getCurrentInstanceDetails(token: AccessToken) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private\n */\n async deleteCurrentInstance(\n token: AccessToken | undefined,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc\n */\n async getCurrentIntanceKycStatus(\n token: AccessToken | undefined,\n params: TalerMerchantApi.GetKycStatusRequestParams = {},\n ) {\n const url = new URL(`private/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForAccountKycRedirects(),\n );\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Bank Accounts\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts\n */\n async addBankAccount(\n token: AccessToken | undefined,\n body: TalerMerchantApi.AccountAddDetails,\n ) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForAccountAddResponse());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async updateBankAccount(\n token: AccessToken | undefined,\n wireAccount: string,\n body: TalerMerchantApi.AccountPatchDetails,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts\n */\n async listBankAccounts(token: AccessToken, params?: PaginationParams) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n // addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async getBankAccountDetails(\n token: AccessToken | undefined,\n wireAccount: string,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountEntry());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async deleteBankAccount(token: AccessToken | undefined, wireAccount: string) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Inventory Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products\n */\n async addProduct(\n token: AccessToken | undefined,\n body: TalerMerchantApi.ProductAddDetail,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async updateProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.ProductPatchDetail,\n ) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products\n */\n async listProducts(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInventorySummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: not in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async getProductDetails(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForProductDetail());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#reserving-inventory\n */\n async lockProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.LockRequest,\n ) {\n const url = new URL(`private/products/${productId}/lock`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory\n */\n async deleteProduct(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Payment processing\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders\n */\n async createOrder(\n token: AccessToken | undefined,\n body: TalerMerchantApi.PostOrderRequest,\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n return this.procesOrderCreationResponse(resp);\n }\n\n private async procesOrderCreationResponse(resp: HttpResponse) {\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPostOrderResponse());\n }\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-orders\n */\n async listOrders(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListOrdersRequestParams = {},\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n if (params.date) {\n url.searchParams.set(\"date_s\", String(params.date));\n }\n if (params.fulfillmentUrl) {\n url.searchParams.set(\"fulfillment_url\", params.fulfillmentUrl);\n }\n if (params.paid !== undefined) {\n url.searchParams.set(\"paid\", params.paid ? \"YES\" : \"NO\");\n }\n if (params.refunded !== undefined) {\n url.searchParams.set(\"refunded\", params.refunded ? \"YES\" : \"NO\");\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout\", String(params.timeout));\n }\n if (params.wired !== undefined) {\n url.searchParams.set(\"wired\", params.wired ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOrderHistory());\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async getOrderDetails(\n token: AccessToken | undefined,\n orderId: string,\n params: TalerMerchantApi.GetOrderRequestParams = {},\n ) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup\n */\n async forgetOrder(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.ForgetRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async deleteOrder(token: AccessToken | undefined, orderId: string) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Refunds\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund\n */\n async addRefund(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.RefundRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForMerchantRefundResponse());\n }\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wire Transfer\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers\n */\n async informWireTransfer(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TransferInformation,\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers\n */\n async listWireTransfers(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListWireTransferRequestParams = {},\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n if (params.after) {\n url.searchParams.set(\"after\", String(params.after));\n }\n if (params.before) {\n url.searchParams.set(\"before\", String(params.before));\n }\n if (params.paytoURI) {\n url.searchParams.set(\"payto_uri\", params.paytoURI);\n }\n if (params.verified !== undefined) {\n url.searchParams.set(\"verified\", params.verified ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTansferList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID\n */\n async deleteWireTransfer(token: AccessToken | undefined, transferId: string) {\n const url = new URL(`private/transfers/${transferId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // OTP Devices\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices\n */\n async addOtpDevice(\n token: AccessToken | undefined,\n body: TalerMerchantApi.OtpDeviceAddDetails,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async updateOtpDevice(\n token: AccessToken | undefined,\n deviceId: string,\n body: TalerMerchantApi.OtpDevicePatchDetails,\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices\n */\n async listOtpDevices(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async getOtpDeviceDetails(\n token: AccessToken | undefined,\n deviceId: string,\n params: TalerMerchantApi.GetOtpDeviceRequestParams = {},\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n if (params.faketime) {\n url.searchParams.set(\"faketime\", String(params.faketime));\n }\n if (params.price) {\n url.searchParams.set(\"price\", params.price);\n }\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async deleteOtpDevice(token: AccessToken | undefined, deviceId: string) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Templates\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates\n */\n async addTemplate(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TemplateAddDetails,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async updateTemplate(\n token: AccessToken | undefined,\n templateId: string,\n body: TalerMerchantApi.TemplatePatchDetails,\n ) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-template\n */\n async listTemplates(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async getTemplateDetails(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async deleteTemplate(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-templates-$TEMPLATE_ID\n */\n async useTemplateGetInfo(templateId: string) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWalletTemplateDetails());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID\n */\n async useTemplateCreateOrder(\n templateId: string,\n body: TalerMerchantApi.UsingTemplateDetails,\n ) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n return this.procesOrderCreationResponse(resp);\n }\n\n //\n // Webhooks\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks\n */\n async addWebhook(\n token: AccessToken | undefined,\n body: TalerMerchantApi.WebhookAddDetails,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async updateWebhook(\n token: AccessToken | undefined,\n webhookId: string,\n body: TalerMerchantApi.WebhookPatchDetails,\n ) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks\n */\n async listWebhooks(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWebhookSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async getWebhookDetails(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opSuccessFromHttp(resp, codecForWebhookDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async deleteWebhook(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // token families\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async createTokenFamily(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TokenFamilyCreateRequest,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async updateTokenFamily(\n token: AccessToken | undefined,\n tokenSlug: string,\n body: TalerMerchantApi.TokenFamilyUpdateRequest,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY,\n );\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async listTokenFamilies(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamiliesList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async getTokenFamilyDetails(\n token: AccessToken | undefined,\n tokenSlug: string,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async deleteTokenFamily(token: AccessToken | undefined, tokenSlug: string) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * Get the auth api against the current instance\n *\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token\n */\n getAuthenticationAPI(): URL {\n return new URL(`private/`, this.baseUrl);\n }\n}\n\nexport type TalerMerchantManagementResultByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = ResultByMethod<TalerMerchantManagementHttpClient, prop>;\nexport type TalerMerchantManagementErrorsByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = FailCasesByMethod<TalerMerchantManagementHttpClient, prop>;\n\nexport class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {\n readonly cacheManagementEvictor: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n // cacheManagementEvictor?: CacheEvictor<TalerMerchantManagementCacheEviction>,\n cacheEvictor?: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >,\n ) {\n super(baseUrl, httpClient, cacheEvictor);\n this.cacheManagementEvictor = cacheEvictor ?? nullEvictor;\n }\n\n getSubInstanceAPI(instanceId: string) {\n return new URL(`instances/${instanceId}/`, this.baseUrl);\n }\n\n //\n // Instance Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances\n */\n async createInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceConfigurationMessage,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.CREATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth\n */\n async updateInstanceAuthentication(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(\n `management/instances/${instanceId}/auth`,\n this.baseUrl,\n );\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE\n */\n async updateInstance(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.UPDATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances\n */\n async listInstances(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE\n *\n */\n async getInstanceDetails(token: AccessToken | undefined, instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE\n */\n async deleteInstance(\n token: AccessToken | undefined,\n instanceId: string,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.DELETE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc\n */\n async getIntanceKycStatus(\n token: AccessToken | undefined,\n instanceId: string,\n params: TalerMerchantApi.GetKycStatusRequestParams,\n ) {\n const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { TalerCoreBankCacheEviction } from \"../index.node.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n RedirectResult,\n ResultByMethod,\n opFixedSuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n codecForChallengeCreateResponse,\n codecForChallengeSetupResponse,\n codecForChallengeStatus,\n codecForChallengerAuthResponse,\n codecForChallengerInfoResponse,\n codecForChallengerTermsOfServiceResponse,\n codecForInvalidPinResponse,\n} from \"./types.js\";\nimport { CacheEvictor, makeBearerTokenAuthHeader, nullEvictor } from \"./utils.js\";\n\nexport type ChallengerResultByMethod<prop extends keyof ChallengerHttpClient> =\n ResultByMethod<ChallengerHttpClient, prop>;\nexport type ChallengerErrorsByMethod<prop extends keyof ChallengerHttpClient> =\n FailCasesByMethod<ChallengerHttpClient, prop>;\n\nexport enum ChallengerCacheEviction {\n CREATE_CHALLENGE,\n}\n\n/**\n */\nexport class ChallengerHttpClient {\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<ChallengerCacheEviction>;\n public readonly PROTOCOL_VERSION = \"1:0:0\";\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<ChallengerCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForChallengerTermsOfServiceResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#post--setup-$CLIENT_ID\n *\n */\n async setup(clientId: string, token: AccessToken) {\n const url = new URL(`setup/${clientId}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeSetupResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // LOGIN\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--authorize-$NONCE\n *\n */\n async login(\n nonce: string,\n clientId: string,\n redirectUri: string,\n state: string | undefined,\n ) {\n const url = new URL(`authorize/${nonce}`, this.baseUrl);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n if (state) {\n url.searchParams.set(\"state\", state);\n }\n // url.searchParams.set(\"scope\", \"code\");\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeStatus());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // CHALLENGE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--challenge-$NONCE\n *\n */\n async challenge(nonce: string, body: Record<\"email\", string>) {\n const url = new URL(`challenge/${nonce}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n ChallengerCacheEviction.CREATE_CHALLENGE,\n );\n return opSuccessFromHttp(resp, codecForChallengeCreateResponse());\n }\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // SOLVE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--solve-$NONCE\n *\n */\n async solve(nonce: string, body: Record<string, string>) {\n const url = new URL(`solve/${nonce}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForInvalidPinResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // AUTH\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--token\n *\n */\n async token(\n client_id: string,\n redirect_uri: string,\n client_secret: AccessToken,\n code: string,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams(\n Object.entries({\n client_id,\n redirect_uri,\n client_secret,\n code,\n grant_type: \"authorization_code\",\n }),\n ).toString(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerAuthResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // INFO\n\n /**\n * https://docs.taler.net/core/api-challenger.html#get--info\n *\n */\n async info(token: AccessToken) {\n const url = new URL(`info`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerInfoResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport { hash } from \"../nacl-fast.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n TalerSignaturePurpose,\n amountToBuffer,\n bufferForUint32,\n buildSigPS,\n decodeCrock,\n eddsaSign,\n encodeCrock,\n stringToBytes,\n timestampRoundedToBuffer,\n} from \"../taler-crypto.js\";\nimport {\n OfficerAccount,\n PaginationParams,\n SigningKey,\n TalerExchangeApi,\n codecForAmlDecisionDetails,\n codecForAmlRecords,\n codecForExchangeConfig,\n codecForExchangeKeys,\n} from \"./types.js\";\nimport { CacheEvictor, addPaginationParams, nullEvictor } from \"./utils.js\";\n\nexport type TalerExchangeResultByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = ResultByMethod<TalerExchangeHttpClient, prop>;\nexport type TalerExchangeErrorsByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = FailCasesByMethod<TalerExchangeHttpClient, prop>;\n\nexport enum TalerExchangeCacheEviction {\n CREATE_DESCISION,\n}\n\n\n/**\n */\nexport class TalerExchangeHttpClient {\n httpLib: HttpRequestLibrary;\n public readonly PROTOCOL_VERSION = \"18:0:1\";\n cacheEvictor: CacheEvictor<TalerExchangeCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerExchangeCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--seed\n *\n */\n async getSeed() {\n const url = new URL(`seed`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n const buffer = await resp.bytes();\n const uintar = new Uint8Array(buffer);\n\n return opFixedSuccess(uintar);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n * PARTIALLY IMPLEMENTED!!\n */\n async getKeys() {\n const url = new URL(`keys`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeKeys());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // TERMS\n\n //\n // AML operations\n //\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decisions-$STATE\n *\n */\n async getDecisionsByState(\n auth: OfficerAccount,\n state: TalerExchangeApi.AmlState,\n pagination?: PaginationParams,\n ) {\n const url = new URL(\n `aml/${auth.id}/decisions/${TalerExchangeApi.AmlState[state]}`,\n this.baseUrl,\n );\n addPaginationParams(url, pagination);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlRecords());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ records: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decision-$H_PAYTO\n *\n */\n async getDecisionDetails(auth: OfficerAccount, account: string) {\n const url = new URL(`aml/${auth.id}/decision/${account}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlDecisionDetails());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ aml_history: [], kyc_attributes: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#post--aml-$OFFICER_PUB-decision\n *\n */\n async addDecisionDetails(\n auth: OfficerAccount,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n ) {\n const url = new URL(`aml/${auth.id}/decision`, this.baseUrl);\n\n const body = buildDecisionSignature(auth.signingKey, decision);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: this two need to be split by error code\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n\nfunction buildQuerySignature(key: SigningKey): string {\n const sigBlob = buildSigPS(\n TalerSignaturePurpose.TALER_SIGNATURE_AML_QUERY,\n ).build();\n\n return encodeCrock(eddsaSign(sigBlob, key));\n}\n\nfunction buildDecisionSignature(\n key: SigningKey,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n): TalerExchangeApi.AmlDecision {\n const zero = new Uint8Array(new ArrayBuffer(64));\n\n const sigBlob = buildSigPS(TalerSignaturePurpose.TALER_SIGNATURE_AML_DECISION)\n //TODO: new need the null terminator, also in the exchange\n .put(hash(stringToBytes(decision.justification))) //check null\n .put(timestampRoundedToBuffer(decision.decision_time))\n .put(amountToBuffer(decision.new_threshold))\n .put(decodeCrock(decision.h_payto))\n .put(zero) //kyc_requirement\n .put(bufferForUint32(decision.new_state))\n .build();\n\n const officer_sig = encodeCrock(eddsaSign(sigBlob, key));\n return {\n ...decision,\n officer_sig,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 EncryptionNonce,\n LockedAccount,\n OfficerAccount,\n OfficerId,\n SigningKey,\n createEddsaKeyPair,\n decodeCrock,\n decryptWithDerivedKey,\n eddsaGetPublic,\n encodeCrock,\n encryptWithDerivedKey,\n getRandomBytesF,\n kdf,\n stringToBytes,\n} from \"@gnu-taler/taler-util\";\n\n/**\n * Restore previous session and unlock account with password\n *\n * @param salt string from which crypto params will be derived\n * @param key secured private key\n * @param password password for the private key\n * @returns\n */\nexport async function unlockOfficerAccount(\n account: LockedAccount,\n password: string,\n): Promise<OfficerAccount> {\n const rawKey = decodeCrock(account);\n const rawPassword = stringToBytes(password);\n\n const signingKey = (await decryptWithDerivedKey(\n rawKey,\n rawPassword,\n password,\n ).catch((e: Error) => {\n throw new UnwrapKeyError(e.message);\n })) as SigningKey;\n\n const publicKey = eddsaGetPublic(signingKey);\n\n const accountId = encodeCrock(publicKey) as OfficerId;\n\n return { id: accountId, signingKey };\n}\n\n/**\n * Create new account (secured private key)\n * secured with the given password\n *\n * @param sessionId\n * @param password\n * @returns\n */\nexport async function createNewOfficerAccount(\n password: string,\n extraNonce: EncryptionNonce,\n): Promise<OfficerAccount & { safe: LockedAccount }> {\n const { eddsaPriv, eddsaPub } = createEddsaKeyPair();\n\n const key = stringToBytes(password);\n\n const localRnd = getRandomBytesF(24);\n const mergedRnd: EncryptionNonce = extraNonce\n ? kdf(24, stringToBytes(\"aml-officer\"), extraNonce, localRnd)\n : localRnd;\n\n const protectedPrivKey = await encryptWithDerivedKey(\n mergedRnd,\n key,\n eddsaPriv,\n password,\n );\n\n const signingKey = eddsaPriv as SigningKey;\n const accountId = encodeCrock(eddsaPub) as OfficerId;\n const safe = encodeCrock(protectedPrivKey) as LockedAccount;\n\n return { id: accountId, signingKey, safe };\n}\n\nexport class UnwrapKeyError extends Error {\n public cause: string;\n constructor(cause: string) {\n super(`Recovering private key failed on: ${cause}`);\n this.cause = cause;\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) 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 * IBAN validation.\n *\n * Currently only validates the checksum.\n *\n * It does not validate:\n * - Country-specific length\n * - Country-specific checksums\n *\n * The country list is also not complete.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\nexport type IbanValidationResult =\n | { type: \"invalid\" }\n | {\n type: \"valid\";\n normalizedIban: string;\n };\n\nexport interface IbanCountryInfo {\n name: string;\n isSepa?: boolean;\n length?: number;\n}\n\n/**\n * Incomplete list, see https://www.swift.com/resource/iban-registry-pdf\n */\nexport const ibanCountryInfoTable: Record<string, IbanCountryInfo> = {\n AE: { name: \"U.A.E.\" },\n AF: { name: \"Afghanistan\" },\n AL: { name: \"Albania\" },\n AM: { name: \"Armenia\" },\n AN: { name: \"Netherlands Antilles\" },\n AR: { name: \"Argentina\" },\n AT: { name: \"Austria\" },\n AU: { name: \"Australia\" },\n AZ: { name: \"Azerbaijan\" },\n BA: { name: \"Bosnia and Herzegovina\" },\n BD: { name: \"Bangladesh\" },\n BE: { name: \"Belgium\" },\n BG: { name: \"Bulgaria\" },\n BH: { name: \"Bahrain\" },\n BN: { name: \"Brunei Darussalam\" },\n BO: { name: \"Bolivia\" },\n BR: { name: \"Brazil\" },\n BT: { name: \"Bhutan\" },\n BY: { name: \"Belarus\" },\n BZ: { name: \"Belize\" },\n CA: { name: \"Canada\" },\n CG: { name: \"Congo\" },\n CH: { name: \"Switzerland\" },\n CI: { name: \"Cote d'Ivoire\" },\n CL: { name: \"Chile\" },\n CM: { name: \"Cameroon\" },\n CN: { name: \"People's Republic of China\" },\n CO: { name: \"Colombia\" },\n CR: { name: \"Costa Rica\" },\n CS: { name: \"Serbia and Montenegro\" },\n CZ: { name: \"Czech Republic\" },\n DE: { name: \"Germany\" },\n DK: { name: \"Denmark\" },\n DO: { name: \"Dominican Republic\" },\n DZ: { name: \"Algeria\" },\n EC: { name: \"Ecuador\" },\n EE: { name: \"Estonia\" },\n EG: { name: \"Egypt\" },\n ER: { name: \"Eritrea\" },\n ES: { name: \"Spain\" },\n ET: { name: \"Ethiopia\" },\n FI: { name: \"Finland\" },\n FO: { name: \"Faroe Islands\" },\n FR: { name: \"France\" },\n GB: { name: \"United Kingdom\" },\n GD: { name: \"Caribbean\" },\n GE: { name: \"Georgia\" },\n GL: { name: \"Greenland\" },\n GR: { name: \"Greece\" },\n GT: { name: \"Guatemala\" },\n HK: { name: \"Hong Kong S.A.R.\" },\n HN: { name: \"Honduras\" },\n HR: { name: \"Croatia\" },\n HT: { name: \"Haiti\" },\n HU: { name: \"Hungary\" },\n ID: { name: \"Indonesia\" },\n IE: { name: \"Ireland\" },\n IL: { name: \"Israel\" },\n IN: { name: \"India\" },\n IQ: { name: \"Iraq\" },\n IR: { name: \"Iran\" },\n IS: { name: \"Iceland\" },\n IT: { name: \"Italy\" },\n JM: { name: \"Jamaica\" },\n JO: { name: \"Jordan\" },\n JP: { name: \"Japan\" },\n KE: { name: \"Kenya\" },\n KG: { name: \"Kyrgyzstan\" },\n KH: { name: \"Cambodia\" },\n KR: { name: \"South Korea\" },\n KW: { name: \"Kuwait\" },\n KZ: { name: \"Kazakhstan\" },\n LA: { name: \"Laos\" },\n LB: { name: \"Lebanon\" },\n LI: { name: \"Liechtenstein\" },\n LK: { name: \"Sri Lanka\" },\n LT: { name: \"Lithuania\" },\n LU: { name: \"Luxembourg\" },\n LV: { name: \"Latvia\" },\n LY: { name: \"Libya\" },\n MA: { name: \"Morocco\" },\n MC: { name: \"Principality of Monaco\" },\n MD: { name: \"Moldava\" },\n ME: { name: \"Montenegro\" },\n MK: { name: \"Former Yugoslav Republic of Macedonia\" },\n ML: { name: \"Mali\" },\n MM: { name: \"Myanmar\" },\n MN: { name: \"Mongolia\" },\n MO: { name: \"Macau S.A.R.\" },\n MT: { name: \"Malta\" },\n MV: { name: \"Maldives\" },\n MX: { name: \"Mexico\" },\n MY: { name: \"Malaysia\" },\n NG: { name: \"Nigeria\" },\n NI: { name: \"Nicaragua\" },\n NL: { name: \"Netherlands\" },\n NO: { name: \"Norway\" },\n NP: { name: \"Nepal\" },\n NZ: { name: \"New Zealand\" },\n OM: { name: \"Oman\" },\n PA: { name: \"Panama\" },\n PE: { name: \"Peru\" },\n PH: { name: \"Philippines\" },\n PK: { name: \"Islamic Republic of Pakistan\" },\n PL: { name: \"Poland\" },\n PR: { name: \"Puerto Rico\" },\n PT: { name: \"Portugal\" },\n PY: { name: \"Paraguay\" },\n QA: { name: \"Qatar\" },\n RE: { name: \"Reunion\" },\n RO: { name: \"Romania\" },\n RS: { name: \"Serbia\" },\n RU: { name: \"Russia\" },\n RW: { name: \"Rwanda\" },\n SA: { name: \"Saudi Arabia\" },\n SE: { name: \"Sweden\" },\n SG: { name: \"Singapore\" },\n SI: { name: \"Slovenia\" },\n SK: { name: \"Slovak\" },\n SN: { name: \"Senegal\" },\n SO: { name: \"Somalia\" },\n SR: { name: \"Suriname\" },\n SV: { name: \"El Salvador\" },\n SY: { name: \"Syria\" },\n TH: { name: \"Thailand\" },\n TJ: { name: \"Tajikistan\" },\n TM: { name: \"Turkmenistan\" },\n TN: { name: \"Tunisia\" },\n TR: { name: \"Turkey\" },\n TT: { name: \"Trinidad and Tobago\" },\n TW: { name: \"Taiwan\" },\n TZ: { name: \"Tanzania\" },\n UA: { name: \"Ukraine\" },\n US: { name: \"United States\" },\n UY: { name: \"Uruguay\" },\n VA: { name: \"Vatican\" },\n VE: { name: \"Venezuela\" },\n VN: { name: \"Viet Nam\" },\n YE: { name: \"Yemen\" },\n ZA: { name: \"South Africa\" },\n ZW: { name: \"Zimbabwe\" },\n};\n\nlet ccZero = \"0\".charCodeAt(0);\nlet ccNine = \"9\".charCodeAt(0);\nlet ccA = \"A\".charCodeAt(0);\nlet ccZ = \"Z\".charCodeAt(0);\n\n/**\n * Append a IBAN digit(s) based on a char code.\n */\nfunction appendDigit(digits: number[], cc: number): boolean {\n if (cc >= ccZero && cc <= ccNine) {\n digits.push(cc - ccZero);\n } else if (cc >= ccA && cc <= ccZ) {\n const n = cc - ccA + 10;\n digits.push(Math.floor(n / 10) % 10);\n digits.push(n % 10);\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Compute MOD-97-10 as per ISO/IEC 7064:2003.\n */\nfunction mod97(digits: number[]): number {\n let i = 0;\n let modAccum = 0;\n while (i < digits.length) {\n let n = 0;\n while (n < 9 && i < digits.length) {\n modAccum = modAccum * 10 + digits[i];\n i++;\n n++;\n }\n modAccum = modAccum % 97;\n }\n return modAccum;\n}\n\nexport function validateIban(ibanString: string): IbanValidationResult {\n let myIban = ibanString.toLocaleUpperCase().replace(\" \", \"\");\n let countryCode = myIban.substring(0, 2);\n let countryInfo = ibanCountryInfoTable[countryCode];\n\n if (!countryInfo) {\n return {\n type: \"invalid\",\n };\n }\n\n let digits: number[] = [];\n\n for (let i = 4; i < myIban.length; i++) {\n const cc = myIban.charCodeAt(i);\n if (!appendDigit(digits, cc)) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n for (let i = 0; i < 4; i++) {\n if (!appendDigit(digits, ibanString.charCodeAt(i))) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n const rem = mod97(digits);\n if (rem === 1) {\n return {\n type: \"valid\",\n normalizedIban: myIban,\n };\n } else {\n return {\n type: \"invalid\",\n };\n }\n}\n\nexport function generateIban(countryCode: string, length: number): string {\n let ibanSuffix = \"\";\n let digits: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const cc = ccZero + (Math.floor(Math.random() * 100) % 10);\n appendDigit(digits, cc);\n ibanSuffix += String.fromCharCode(cc);\n }\n\n appendDigit(digits, countryCode.charCodeAt(0));\n appendDigit(digits, countryCode.charCodeAt(1));\n\n // Try using \"00\" as check digits\n appendDigit(digits, ccZero);\n appendDigit(digits, ccZero);\n\n const requiredChecksum = 98 - mod97(digits);\n\n const checkDigit1 = Math.floor(requiredChecksum / 10) % 10;\n const checkDigit2 = requiredChecksum % 10;\n\n return countryCode + checkDigit1 + checkDigit2 + ibanSuffix;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019-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 * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { AbsoluteTime } from \"./time.js\";\nimport { TransactionState } from \"./transactions-types.js\";\nimport { ExchangeEntryState, TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n BalanceChange = \"balance-change\",\n BackupOperationError = \"backup-error\",\n TransactionStateTransition = \"transaction-state-transition\",\n /**\n * @deprecated\n */\n WithdrawalOperationTransition = \"withdrawal-operation-transition\",\n ExchangeStateTransition = \"exchange-state-transition\",\n Idle = \"idle\",\n TaskObservabilityEvent = \"task-observability-event\",\n RequestObservabilityEvent = \"request-observability-event\",\n}\n\nexport interface ErrorInfoSummary {\n code: number;\n hint?: string;\n message?: string;\n}\n\nexport interface TransactionStateTransitionNotification {\n type: NotificationType.TransactionStateTransition;\n transactionId: string;\n oldTxState: TransactionState;\n newTxState: TransactionState;\n errorInfo?: ErrorInfoSummary;\n\n /**\n * Additional \"user data\" that is dependent on the\n * state transition.\n *\n * Usage should be avoided.\n *\n * Currently used to notify the iOS app about\n * the KYC URL.\n */\n experimentalUserData?: any;\n}\n\nexport interface ExchangeStateTransitionNotification {\n type: NotificationType.ExchangeStateTransition;\n /**\n * Identification of the exchange entry that this\n * notification is about.\n */\n exchangeBaseUrl: string;\n\n /**\n * If missing, the notification means that\n * the exchange entry is newly created.\n */\n oldExchangeState?: ExchangeEntryState;\n\n /**\n * New state of the exchange.\n */\n newExchangeState: ExchangeEntryState;\n\n /**\n * Summary of the error that occurred when trying to update the exchange entry,\n * if applicable.\n */\n errorInfo?: ErrorInfoSummary;\n}\n\nexport interface BalanceChangeNotification {\n type: NotificationType.BalanceChange;\n\n /**\n * Transaction ID of the transaction that caused the balance update.\n *\n * Only used as a hint for debugging, should not be relied upon by clients.\n */\n hintTransactionId: string;\n}\n\nexport interface TaskProgressNotification {\n type: NotificationType.TaskObservabilityEvent;\n taskId: string;\n event: ObservabilityEvent;\n}\n\nexport interface RequestProgressNotification {\n type: NotificationType.RequestObservabilityEvent;\n requestId: string;\n operation: string;\n event: ObservabilityEvent;\n}\n\nexport enum ObservabilityEventType {\n HttpFetchStart = \"http-fetch-start\",\n HttpFetchFinishError = \"http-fetch-finish-error\",\n HttpFetchFinishSuccess = \"http-fetch-finish-success\",\n DbQueryStart = \"db-query-start\",\n DbQueryFinishSuccess = \"db-query-finish-success\",\n DbQueryFinishError = \"db-query-finish-error\",\n RequestStart = \"request-start\",\n RequestFinishSuccess = \"request-finish-success\",\n RequestFinishError = \"request-finish-error\",\n TaskStart = \"task-start\",\n TaskStop = \"task-stop\",\n TaskReset = \"task-reset\",\n ShepherdTaskResult = \"sheperd-task-result\",\n DeclareTaskDependency = \"declare-task-dependency\",\n CryptoStart = \"crypto-start\",\n CryptoFinishSuccess = \"crypto-finish-success\",\n CryptoFinishError = \"crypto-finish-error\",\n Message = \"message\",\n}\n\nexport type ObservabilityEvent =\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchStart;\n url: string;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishSuccess;\n url: string;\n status: number;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishError;\n url: string;\n error: TalerErrorDetail;\n }\n | {\n type: ObservabilityEventType.DbQueryStart;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishSuccess;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishError;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.RequestStart;\n }\n | {\n type: ObservabilityEventType.RequestFinishSuccess;\n durationMs: number;\n }\n | {\n type: ObservabilityEventType.RequestFinishError;\n }\n | {\n type: ObservabilityEventType.TaskStart;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskStop;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskReset;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.DeclareTaskDependency;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.CryptoStart;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishSuccess;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishError;\n operation: string;\n }\n | {\n type: ObservabilityEventType.ShepherdTaskResult;\n resultType: string;\n }\n | {\n type: ObservabilityEventType.Message;\n contents: string;\n };\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n/**\n * This notification is required to signal UI that\n * the withdrawal operation changed the state.\n *\n * https://bugs.gnunet.org/view.php?id=8099\n */\nexport interface WithdrawalOperationTransitionNotification {\n type: NotificationType.WithdrawalOperationTransition;\n uri: string;\n}\n\nexport interface IdleNotification {\n type: NotificationType.Idle;\n}\n\nexport type WalletNotification =\n | BalanceChangeNotification\n | WithdrawalOperationTransitionNotification\n | BackupOperationErrorNotification\n | ExchangeStateTransitionNotification\n | TransactionStateTransitionNotification\n | TaskProgressNotification\n | RequestProgressNotification\n | IdleNotification;\n", "/*\n This file is part of GNU Taler\n (C) 2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n CancellationToken,\n ObservabilityEvent,\n} from \"./index.js\";\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http-common.js\";\nimport { ObservabilityEventType } from \"./notifications.js\";\nimport { getErrorDetailFromException } from \"./errors.js\";\n\n/**\n * Observability sink can be passed into various operations (HTTP requests, DB access)\n * to do structured logging within a particular context (task, request, ...).\n */\nexport interface ObservabilityContext {\n observe(evt: ObservabilityEvent): void;\n}\n\nlet seqId = 1000;\n\nexport class ObservableHttpClientLibrary implements HttpRequestLibrary {\n private readonly cancelatorById = new Map<string, CancellationToken.Source>();\n constructor(\n private impl: HttpRequestLibrary,\n private oc: ObservabilityContext,\n ) {}\n\n public cancelRequest(id: string): void {\n const cancelator = this.cancelatorById.get(id);\n if (!cancelator) return;\n cancelator.cancel();\n }\n\n async fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n const id = `req-${seqId}`;\n seqId = seqId + 1;\n\n const cancelator = CancellationToken.create();\n if (opt?.cancellationToken) {\n opt.cancellationToken.onCancelled(cancelator.cancel);\n }\n this.cancelatorById.set(id, cancelator);\n\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchStart,\n url: url,\n });\n\n const optsWithCancel = opt ?? {};\n optsWithCancel.cancellationToken = cancelator.token;\n try {\n const res = await this.impl.fetch(url, optsWithCancel);\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishSuccess,\n url,\n status: res.status,\n });\n return res;\n } catch (e) {\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishError,\n url,\n error: getErrorDetailFromException(e),\n });\n throw e;\n } finally {\n this.cancelatorById.delete(id);\n }\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 * Cross-platform timers.\n *\n * NodeJS and the browser use slightly different timer API,\n * this abstracts over these differences.\n */\n\n/**\n * Imports.\n */\nimport { Logger, Duration } from \"@gnu-taler/taler-util\";\n\nconst logger = new Logger(\"timer.ts\");\n\n/**\n * Cancelable timer.\n */\nexport interface TimerHandle {\n clear(): void;\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void;\n}\n\nclass IntervalHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearInterval(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\nclass TimeoutHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearTimeout(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\n/**\n * Get a performance counter in nanoseconds.\n */\nexport const performanceNow: () => bigint = (() => {\n // @ts-ignore\n if (typeof process !== \"undefined\" && process.hrtime) {\n return () => {\n return process.hrtime.bigint();\n };\n }\n\n // @ts-ignore\n if (typeof performance !== \"undefined\") {\n // @ts-ignore\n return () => BigInt(Math.floor(performance.now() * 1000)) * BigInt(1000);\n }\n\n return () => BigInt(new Date().getTime()) * BigInt(1000) * BigInt(1000);\n})();\n\nconst nullTimerHandle = {\n clear() {\n // do nothing\n return;\n },\n unref() {\n // do nothing\n return;\n },\n};\n\n/**\n * Group of timers that can be destroyed at once.\n */\nexport interface TimerAPI {\n after(delayMs: number, callback: () => void): TimerHandle;\n every(delayMs: number, callback: () => void): TimerHandle;\n}\n\nexport class SetTimeoutTimerAPI implements TimerAPI {\n /**\n * Call a function every time the delay given in milliseconds passes.\n */\n every(delayMs: number, callback: () => void): TimerHandle {\n return new IntervalHandle(setInterval(callback, delayMs));\n }\n\n /**\n * Call a function after the delay given in milliseconds passes.\n */\n after(delayMs: number, callback: () => void): TimerHandle {\n return new TimeoutHandle(setTimeout(callback, delayMs));\n }\n}\n\nexport const timer = new SetTimeoutTimerAPI();\n\n/**\n * Implementation of [[TimerGroup]] using setTimeout\n */\nexport class TimerGroup {\n private stopped = false;\n\n private readonly timerMap: { [index: number]: TimerHandle } = {};\n\n private idGen = 1;\n\n constructor(public readonly timerApi: TimerAPI) {}\n\n stopCurrentAndFutureTimers(): void {\n this.stopped = true;\n for (const x in this.timerMap) {\n if (!this.timerMap.hasOwnProperty(x)) {\n continue;\n }\n this.timerMap[x].clear();\n delete this.timerMap[x];\n }\n }\n\n resolveAfter(delayMs: Duration): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (delayMs.d_ms !== \"forever\") {\n this.after(delayMs.d_ms, () => {\n resolve();\n });\n }\n });\n }\n\n after(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.after(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\n }\n\n every(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.every(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\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\nimport {\n TransactionType,\n PaymentStatus,\n TransactionMajorState,\n} from \"./transactions-types.js\";\nimport { RefreshReason } from \"./wallet-types.js\";\n\n/**\n * Sample transaction list entries.\n */\nexport const sampleWalletCoreTransactions = [\n {\n type: TransactionType.Payment,\n txState: {\n major: TransactionMajorState.Done,\n },\n amountRaw: \"KUDOS:10\",\n amountEffective: \"KUDOS:10\",\n totalRefundRaw: \"KUDOS:0\",\n totalRefundEffective: \"KUDOS:0\",\n status: PaymentStatus.Paid,\n refundPending: undefined,\n posConfirmation: undefined,\n pending: false,\n refunds: [],\n timestamp: {\n t_s: 1677166045,\n },\n transactionId:\n \"txn:payment:NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n proposalId: \"NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n info: {\n merchant: {\n name: \"woocommerce\",\n website: \"woocommerce.demo.taler.net\",\n email: \"foo@example.com\",\n address: {},\n jurisdiction: {},\n },\n orderId: \"wc_order_KQCRldghIgDRB-100\",\n products: [\n {\n description: \"Using GCC\",\n quantity: 1,\n price: \"KUDOS:10\",\n product_id: \"28\",\n },\n ],\n summary: \"WooTalerShop #100\",\n contractTermsHash:\n \"A02E1M6ARWKBJ87K2TV4S6WQ4X5YH7BRVR6MYCHCTVAED8MBXTFD6PZ5Q50Y7Z5K18PYBTDA14NQ56XPC1VCQW1EVRWTSB7ZYT65B5G\",\n fulfillmentUrl:\n \"https://woocommerce.demo.taler.net/?wc-api=wc_gnutaler_gateway&order_id=wc_order_KQCRldghIgDRB-100\",\n },\n refundQueryActive: false,\n frozen: false,\n },\n {\n type: TransactionType.Refresh,\n txState: {\n major: TransactionMajorState.Pending,\n },\n refreshReason: RefreshReason.PayMerchant,\n amountEffective: \"KUDOS:0\",\n amountRaw: \"KUDOS:0\",\n refreshInputAmount: \"KUDOS:1.5\",\n refreshOutputAmount: \"KUDOS:1.4\",\n originatingTransactionId:\n \"txn:proposal:ZCGBZFE8KZ1CBYYGSC3ZC8E40KVJWV16VYCTHGC8FFSVZ5HD24BG\",\n pending: true,\n timestamp: {\n t_s: 1681376214,\n },\n transactionId:\n \"txn:refresh:QQSWHHXCRQ269G0E3RW14JMC6F7NFDYDW26NSFHRTXSKDS6CMCZ0\",\n frozen: false,\n error: {\n code: 7029,\n when: {\n t_ms: 1681376473665,\n },\n hint: \"Error (WALLET_REFRESH_GROUP_INCOMPLETE)\",\n numErrors: 1,\n errors: [\n {\n code: 7001,\n when: {\n t_ms: 1681376473189,\n },\n hint: \"unexpected exception (message: exchange wire fee signature invalid)\",\n stack:\n \" at validateWireInfo (../taler-wallet-core-qjs.mjs:23166)\\n\",\n },\n ],\n },\n },\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 { AbsoluteTime, Codec, codecForString } from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport {\n ObservableMap,\n browserStorageMap,\n localStorageMap,\n memoryMap,\n} from \"../utils/observable.js\";\n\ndeclare const opaque_StorageKey: unique symbol;\n\nexport type StorageKey<Key> = {\n id: string;\n [opaque_StorageKey]: true;\n codec: Codec<Key>;\n};\n\nexport function buildStorageKey<Key>(\n name: string,\n codec: Codec<Key>,\n): StorageKey<Key>;\nexport function buildStorageKey(name: string): StorageKey<string>;\nexport function buildStorageKey<Key = string>(\n name: string,\n codec?: Codec<Key>,\n): StorageKey<Key> {\n return {\n id: name,\n codec: codec ?? (codecForString() as Codec<Key>),\n } as StorageKey<Key>;\n}\n\nexport interface StorageState<Type = string> {\n value?: Type;\n update: (s: Type) => void;\n reset: () => void;\n}\n\nconst supportLocalStorage = typeof window !== \"undefined\";\nconst supportBrowserStorage =\n typeof chrome !== \"undefined\" && typeof chrome.storage !== \"undefined\";\n\n/**\n * Build setting storage\n */\nconst storage: ObservableMap<string, string> = (function buildStorage() {\n if (supportBrowserStorage) {\n //browser storage is like local storage but\n //with app sync.\n //Works for almost every browser\n if (supportLocalStorage) {\n return browserStorageMap(localStorageMap());\n } else {\n // service worker doesn't have local storage\n return browserStorageMap(memoryMap<string>());\n }\n } else if (supportLocalStorage) {\n // fallback if browser is too old\n return localStorageMap();\n } else {\n // new need to save settings somewhere\n return memoryMap<string>();\n }\n})();\n//with initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//without initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n): StorageState<Type>;\n// impl\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue?: Type,\n): StorageState<Type> {\n const current = convert(storage.get(key.id), key, defaultValue);\n\n const [_, setStoredValue] = useState(AbsoluteTime.now().t_ms);\n\n useEffect(() => {\n return storage.onUpdate(key.id, () => {\n // const newValue = storage.get(key.id);\n setStoredValue(AbsoluteTime.now().t_ms);\n });\n }, [key.id]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key.id);\n } else {\n storage.set(\n key.id,\n key.codec ? JSON.stringify(value) : (value as string),\n );\n }\n };\n\n return {\n value: current,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n\nfunction convert<Type>(updated: string | undefined, key: StorageKey<Type>, defaultValue?: Type): Type | undefined {\n if (updated === undefined) return defaultValue; //optional\n try {\n return key.codec.decode(JSON.parse(updated));\n } catch (e) {\n //decode error\n return defaultValue;\n }\n}\n", "import { isArrayBufferView } from \"util/types\";\n\nexport type ObservableMap<K, V> = Map<K, V> & {\n onAnyUpdate: (callback: () => void) => () => void;\n onUpdate: (key: string, callback: () => void) => () => void;\n};\n\n//FIXME: allow different type for different properties\nexport function memoryMap<T>(\n backend: Map<string, T> = new Map<string, T>(),\n): ObservableMap<string, T> {\n const obs = new EventTarget();\n const theMemoryMap: ObservableMap<string, T> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const result = backend.delete(key);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return result;\n },\n set: (key: string, value: T) => {\n backend.set(key, value);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theMemoryMap;\n },\n clear: () => {\n backend.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: backend.entries.bind(backend),\n forEach: backend.forEach.bind(backend),\n get: backend.get.bind(backend),\n has: backend.has.bind(backend),\n keys: backend.keys.bind(backend),\n size: backend.size,\n values: backend.values.bind(backend),\n [Symbol.iterator]: backend[Symbol.iterator],\n [Symbol.toStringTag]: \"theMemoryMap\",\n };\n return theMemoryMap;\n}\n\n//FIXME: change this implementation to match the\n// browser storage. instead of creating a sync implementation\n// of observable map it should reuse the memoryMap and\n// sync the state with local storage\nexport function localStorageMap(): ObservableMap<string, string> {\n const obs = new EventTarget();\n const theLocalStorageMap: ObservableMap<string, string> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n window.addEventListener(\"storage\", handler);\n return () => {\n window.removeEventListener(\"storage\", handler);\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n function handleStorageEvent(ev: StorageEvent) {\n if (ev.key === null || ev.key === key) {\n handler();\n }\n }\n window.addEventListener(\"storage\", handleStorageEvent);\n return () => {\n window.removeEventListener(\"storage\", handleStorageEvent);\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const exists = localStorage.getItem(key) !== null;\n localStorage.removeItem(key);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return exists;\n },\n set: (key: string, v: string) => {\n localStorage.setItem(key, v);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theLocalStorageMap;\n },\n clear: () => {\n localStorage.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: (): IterableIterator<[string, string]> => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: [key, item] };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n forEach: (cb) => {\n for (let index = 0; index < localStorage.length; index++) {\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n cb(key, item, theLocalStorageMap);\n }\n },\n get: (key: string) => {\n const item = localStorage.getItem(key);\n if (item === null) return undefined;\n return item;\n },\n has: (key: string) => {\n return localStorage.getItem(key) === null;\n },\n keys: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n index = index + 1;\n return { done: false, value: key };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n size: localStorage.length,\n values: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: item };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n [Symbol.iterator]: function (): IterableIterator<[string, string]> {\n return theLocalStorageMap.entries();\n },\n [Symbol.toStringTag]: \"theLocalStorageMap\",\n };\n return theLocalStorageMap;\n}\n\nconst isFirefox =\n typeof (window as any) !== \"undefined\" &&\n typeof (window as any)[\"InstallTrigger\"] !== \"undefined\";\n\nasync function getAllContent() {\n //Firefox and Chrome has different storage api\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.get();\n } else {\n return chrome.storage.local.get();\n }\n}\n\nasync function updateContent(obj: Record<string, any>) {\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.set(obj);\n } else {\n return chrome.storage.local.set(obj);\n }\n}\ntype Changes = { [key: string]: { oldValue?: any; newValue?: any } };\nfunction onBrowserStorageUpdate(cb: (changes: Changes) => void): void {\n if (isFirefox) {\n // @ts-ignore\n browser.storage.local.onChanged.addListener(cb);\n } else {\n chrome.storage.local.onChanged.addListener(cb);\n }\n}\n\nexport function browserStorageMap(\n backend: ObservableMap<string, string>,\n): ObservableMap<string, string> {\n getAllContent().then(content => {\n Object.entries(content ?? {}).forEach(([k, v]) => {\n backend.set(k, v as string);\n });\n })\n\n backend.onAnyUpdate(async () => {\n const result: Record<string, string> = {};\n for (const [key, value] of backend.entries()) {\n result[key] = value;\n }\n await updateContent(result);\n });\n\n onBrowserStorageUpdate((changes) => {\n //another chrome instance made the change\n const changedItems = Object.keys(changes);\n if (changedItems.length === 0) {\n backend.clear();\n } else {\n for (const key of changedItems) {\n if (!changes[key].newValue) {\n backend.delete(key);\n } else {\n if (changes[key].newValue !== changes[key].oldValue) {\n backend.set(key, changes[key].newValue);\n }\n }\n }\n }\n });\n\n return backend;\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 {\n StorageState,\n buildStorageKey,\n useLocalStorage,\n} from \"./useLocalStorage.js\";\n\nconst MIN_LANG_COVERAGE_THRESHOLD = 90;\n/**\n * choose the best from the browser config based on the completeness\n * on the translation\n */\nfunction getBrowserLang(completeness: Record<string, number>): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n\n if (window.navigator.language) {\n if (completeness[window.navigator.language] >= MIN_LANG_COVERAGE_THRESHOLD) {\n return window.navigator.language\n }\n }\n if (window.navigator.languages) {\n const match = Object.entries(completeness).filter(([code, value]) => {\n if (value < MIN_LANG_COVERAGE_THRESHOLD) return false; //do not consider langs below 90%\n return window.navigator.languages.findIndex(l => l.startsWith(code)) !== -1\n }).map(([code, value]) => ({ code, value }))\n\n if (match.length > 0) {\n let max = match[0]\n match.forEach(v => {\n if (v.value > max.value) {\n max = v\n }\n })\n return max.code\n }\n };\n\n return undefined;\n}\n\nconst langPreferenceKey = buildStorageKey(\"lang-preference\");\n\nexport function useLang(initial: string | undefined, completeness: Record<string, number>): Required<StorageState> {\n const defaultValue = (getBrowserLang(completeness) || initial || \"en\").substring(0, 2);\n return useLocalStorage(langPreferenceKey, defaultValue);\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ObservableMap, memoryMap } from \"../utils/observable.js\";\nimport { StorageKey, StorageState } from \"./useLocalStorage.js\";\n\nconst storage: ObservableMap<string, any> = memoryMap<any>();\n\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n): StorageState<Type>;\n// impl\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue?: Type,\n): StorageState<Type> {\n const [storedValue, setStoredValue] = useState<Type | undefined>(\n (): Type | undefined => {\n const prev = storage.get(key);\n return prev === undefined ? defaultValue : prev;\n },\n );\n\n useEffect(() => {\n return storage.onUpdate(key, () => {\n const newValue = storage.get(key);\n setStoredValue(newValue === undefined ? defaultValue : newValue);\n });\n }, [key]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key);\n } else {\n storage.set(key, value);\n }\n };\n\n return {\n value: storedValue,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n", "import {\n AbsoluteTime,\n Duration,\n OperationAlternative,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ButtonHandler, OnOperationFailReturnType, OnOperationSuccesReturnType } from \"../components/Button.js\";\nimport {\n InternationalizationAPI,\n memoryMap,\n useTranslationContext,\n} from \"../index.browser.js\";\n\nexport type NotificationMessage = ErrorNotification | InfoNotification;\n\nexport interface ErrorNotification {\n type: \"error\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n description?: TranslatedString;\n debug?: any;\n when: AbsoluteTime;\n}\nexport interface InfoNotification {\n type: \"info\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n when: AbsoluteTime;\n}\n\nconst storage = memoryMap<Map<string, NotificationMessage>>();\nconst NOTIFICATION_KEY = \"notification\";\n\nexport const GLOBAL_NOTIFICATION_TIMEOUT = Duration.fromSpec({\n seconds: 5,\n});\n\nfunction updateInStorage(n: NotificationMessage) {\n const h = hash(n);\n const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = new Map(mem);\n newState.set(h, n);\n storage.set(NOTIFICATION_KEY, newState);\n}\n\nexport function notify(notif: NotificationMessage): void {\n const currentState: Map<string, NotificationMessage> =\n storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = currentState.set(hash(notif), notif);\n\n if (GLOBAL_NOTIFICATION_TIMEOUT.d_ms !== \"forever\") {\n setTimeout(() => {\n notif.timeout = true;\n updateInStorage(notif);\n }, GLOBAL_NOTIFICATION_TIMEOUT.d_ms);\n }\n\n storage.set(NOTIFICATION_KEY, newState);\n}\nexport function notifyError(\n title: TranslatedString,\n description: TranslatedString | undefined,\n debug?: any,\n) {\n notify({\n type: \"error\" as const,\n title,\n description,\n debug,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyException(title: TranslatedString, ex: Error) {\n notify({\n type: \"error\" as const,\n title,\n description: ex.message as TranslatedString,\n debug: ex.stack,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyInfo(title: TranslatedString) {\n notify({\n type: \"info\" as const,\n title,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type Notification = {\n message: NotificationMessage;\n acknowledge: () => void;\n};\n\nexport function useNotifications(): Notification[] {\n const [, setLastUpdate] = useState<number>();\n const value = storage.get(NOTIFICATION_KEY) ?? new Map();\n\n useEffect(() => {\n return storage.onUpdate(NOTIFICATION_KEY, () => {\n setLastUpdate(Date.now())\n // const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n // setter(structuredClone(mem));\n });\n });\n\n return Array.from(value.values()).map((message, idx) => {\n return {\n message,\n acknowledge: () => {\n message.ack = true;\n updateInStorage(message);\n },\n };\n });\n}\n\nfunction hashCode(str: string): string {\n if (str.length === 0) return \"0\";\n let hash = 0;\n let chr;\n for (let i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash.toString(16);\n}\n\nfunction hash(msg: NotificationMessage): string {\n let str = (msg.type + \":\" + msg.title) as string;\n if (msg.type === \"error\") {\n if (msg.description) {\n str += \":\" + msg.description;\n }\n if (msg.debug) {\n str += \":\" + msg.debug;\n }\n }\n return hashCode(str);\n}\n\nfunction errorMap<T extends OperationFail<unknown>>(\n resp: T,\n map: (d: T[\"case\"]) => TranslatedString,\n): void {\n notify({\n type: \"error\",\n title: map(resp.case),\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type ErrorNotificationHandler = (\n cb: (notify: typeof errorMap) => Promise<void>,\n) => Promise<void>;\n\n/**\n * @deprecated use useLocalNotificationHandler\n *\n * @returns\n */\nexport function useLocalNotification(): [\n Notification | undefined,\n (n: NotificationMessage) => void,\n ErrorNotificationHandler,\n] {\n const { i18n } = useTranslationContext();\n\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n async function errorHandling(cb: (notify: typeof errorMap) => Promise<void>) {\n try {\n return await cb(errorMap);\n } catch (error: unknown) {\n if (error instanceof TalerError) {\n notify(buildUnifiedRequestErrorMessage(i18n, error));\n } else {\n notifyError(\n i18n.str`Operation failed, please report`,\n (error instanceof Error\n ? error.message\n : JSON.stringify(error)) as TranslatedString,\n );\n }\n }\n }\n return [notif, setter, errorHandling];\n}\n\ntype HandlerMaker = <T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess: OnOperationSuccesReturnType<T>,\n onOperationFail?: OnOperationFailReturnType<T>,\n onOperationComplete?: () => void,\n) => ButtonHandler<T, A, B>;\n\nexport function useLocalNotificationHandler(): [\n Notification | undefined,\n HandlerMaker,\n (n: NotificationMessage) => void,\n] {\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n function makeHandler<T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:OnOperationSuccesReturnType<T>,\n onOperationFail?: OnOperationFailReturnType<T>,\n onOperationComplete?: () => void,\n ): ButtonHandler<T, A, B> {\n return {\n onClick,\n onNotification: setter,\n onOperationFail,\n onOperationSuccess,\n onOperationComplete,\n };\n }\n\n return [notif, makeHandler, setter];\n}\n\nexport function buildUnifiedRequestErrorMessage(\n i18n: InternationalizationAPI,\n cause: TalerError,\n): ErrorNotification {\n let result: ErrorNotification;\n switch (cause.errorDetail.code) {\n case TalerErrorCode.GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Request cancelled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n result = {\n type: \"error\",\n title: i18n.str`Request throttled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n result = {\n type: \"error\",\n title: i18n.str`Malformed response`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Network error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected request error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n default: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n }\n return result;\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport enum ErrorType {\n CLIENT,\n SERVER,\n UNREADABLE,\n TIMEOUT,\n UNEXPECTED,\n}\n\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 * @deprecated do not use it, it will be removed\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 secret-token:${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 || options.contentType === \"json\" ? \"application/json\" : \"text/plain\";\n\n if (options.talerAmlOfficerSignature) {\n requestHeaders[\"Taler-AML-Officer-Signature\"] =\n options.talerAmlOfficerSignature;\n }\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 const requestPreventCache = options.preventCache ?? false;\n const requestPreventCors = options.preventCors ?? false;\n\n const validURL = validateURL(baseUrl, endpoint);\n\n if (!validURL) {\n const error: HttpResponseUnexpectedError = {\n info: {\n url: `${baseUrl}${endpoint}`,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `invalid URL: \"${baseUrl}${endpoint}\"`,\n };\n throw new RequestError(error)\n }\n\n Object.entries(requestParams).forEach(([key, value]) => {\n validURL.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 const error: HttpResponseUnexpectedError = {\n info: {\n url: validURL.href,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `unsupported request body type: \"${typeof requestBody}\"`,\n };\n throw new RequestError(error)\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(validURL.href, {\n headers: requestHeaders,\n method: requestMethod,\n credentials: \"omit\",\n mode: requestPreventCors ? \"no-cors\" : \"cors\",\n cache: requestPreventCache ? \"no-cache\" : \"default\",\n body: payload,\n signal: controller.signal,\n });\n } catch (ex) {\n const info: RequestInfo = {\n payload,\n url: validURL.href,\n hasToken: !!options.token,\n status: 0,\n options,\n };\n\n if (ex instanceof Error) {\n if (ex.message === \"HTTP_REQUEST_TIMEOUT\") {\n const error: HttpRequestTimeoutError = {\n info,\n type: ErrorType.TIMEOUT,\n message: \"request timeout\",\n };\n throw new RequestError(error);\n }\n }\n\n const error: HttpResponseUnexpectedError = {\n info,\n type: ErrorType.UNEXPECTED,\n exception: ex,\n loading: false,\n message: (ex instanceof Error ? ex.message : \"\"),\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 validURL.href,\n payload,\n !!options.token,\n options,\n );\n return result;\n } else {\n const dataTxt = await response.text();\n const error = buildRequestFailed(\n validURL.href,\n dataTxt,\n response.status,\n payload,\n options,\n );\n throw new RequestError(error);\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponse<T, ErrorDetail> =\n | HttpResponseOk<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponsePaginated<T, ErrorDetail> =\n | HttpResponseOkPaginated<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestInfo {\n url: string;\n hasToken: boolean;\n payload: any;\n status: number;\n options: RequestOptions;\n}\n\ninterface HttpResponseLoading<T> {\n ok?: false;\n loading: true;\n clientError?: false;\n serverError?: false;\n\n data?: T;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface WithPagination {\n loadMore: () => void;\n loadMorePrev: () => void;\n isReachingEnd?: boolean;\n isReachingStart?: boolean;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpError<ErrorDetail> =\n | HttpRequestTimeoutError\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface HttpResponseServerError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.SERVER;\n payload: ErrorDetail;\n status: HttpStatusCode;\n message: string;\n info: RequestInfo;\n}\ninterface HttpRequestTimeoutError {\n ok?: false;\n loading?: false;\n type: ErrorType.TIMEOUT;\n\n info: RequestInfo;\n\n message: string;\n}\ninterface HttpResponseClientError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.CLIENT;\n\n info: RequestInfo;\n status: HttpStatusCode;\n payload: ErrorDetail;\n message: string;\n}\n\ninterface HttpResponseUnexpectedError {\n ok?: false;\n loading: false;\n type: ErrorType.UNEXPECTED;\n\n info: RequestInfo;\n status?: HttpStatusCode;\n exception: unknown;\n message: string;\n}\n\ninterface HttpResponseUnreadableError {\n ok?: false;\n loading: false;\n type: ErrorType.UNREADABLE;\n\n info: RequestInfo;\n status: HttpStatusCode;\n exception: unknown;\n body: string;\n message: string;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestOptions {\n method?: Methods;\n token?: string;\n basicAuth?: {\n username: string;\n password: string;\n };\n preventCache?: boolean;\n preventCors?: boolean;\n data?: any;\n params?: unknown;\n timeout?: number;\n contentType?: \"text\" | \"json\";\n talerAmlOfficerSignature?: string;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nasync function buildRequestOk<T>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n options: RequestOptions,\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 options,\n status: response.status,\n },\n };\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport function buildRequestFailed<ErrorDetail>(\n url: string,\n dataTxt: string,\n status: number,\n payload: any,\n maybeOptions?: RequestOptions,\n):\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError {\n const options = maybeOptions ?? {};\n const info: RequestInfo = {\n payload,\n url,\n hasToken: !!options.token,\n options,\n status: status || 0,\n };\n\n // const dataTxt = await response.text();\n try {\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n const errorCode = !data || !data.code ? \"\" : `(code: ${data.code})`;\n const errorHint =\n !data || !data.hint ? \"Not hint.\" : `${data.hint} ${errorCode}`;\n\n if (status && status >= 400 && status < 500) {\n const message =\n data === undefined\n ? `Client error (${status}) without data.`\n : errorHint;\n\n const error: HttpResponseClientError<ErrorDetail> = {\n type: ErrorType.CLIENT,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n if (status && status >= 500 && status < 600) {\n const message =\n data === undefined\n ? `Server error (${status}) without data.`\n : errorHint;\n const error: HttpResponseServerError<ErrorDetail> = {\n type: ErrorType.SERVER,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n return {\n info,\n loading: false,\n type: ErrorType.UNEXPECTED,\n status,\n exception: undefined,\n message: `http status code not handled: ${status}`,\n };\n } catch (ex) {\n const error: HttpResponseUnreadableError = {\n info,\n loading: false,\n status,\n type: ErrorType.UNREADABLE,\n exception: ex,\n body: dataTxt,\n message: \"Could not parse body as json\",\n };\n\n return error;\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nfunction validateURL(baseUrl: string, endpoint: string): URL | undefined {\n try {\n return new URL(`${baseUrl}${endpoint}`)\n } catch (ex) {\n return undefined\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 * Imports.\n */\nimport {\n Logger,\n RequestThrottler,\n TalerErrorCode,\n TalerError,\n Duration,\n} from \"@gnu-taler/taler-util\";\n\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n Headers,\n getDefaultHeaders,\n encodeBody,\n DEFAULT_REQUEST_TIMEOUT_MS,\n HttpLibArgs,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"browserHttpLib\");\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n * \n * @deprecated use BrowserFetchHttpLib\n */\nexport class BrowserHttpLibDepreacted implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n let myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n return new Promise<HttpResponse>((resolve, reject) => {\n const myRequest = new XMLHttpRequest();\n\n myRequest.onerror = (e) => {\n logger.error(\"http request error\");\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"Could not make request\",\n ),\n );\n };\n\n myRequest.open(requestMethod, requestUrl);\n\n let timeoutId: any | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n myRequest.abort();\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `request to ${requestUrl} timed out`,\n ),\n );\n }, requestTimeout.d_ms);\n }\n\n Object.keys(requestHeadersMap).forEach((headerName) => {\n myRequest.setRequestHeader(headerName, requestHeadersMap[headerName]);\n });\n\n myRequest.responseType = \"arraybuffer\";\n myRequest.send(myBody);\n\n myRequest.addEventListener(\"readystatechange\", (e) => {\n if (myRequest.readyState === XMLHttpRequest.DONE) {\n if (myRequest.status === 0) {\n const exc = TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"HTTP request failed (status 0, maybe URI scheme was wrong?)\",\n );\n reject(exc);\n return;\n }\n const makeText = async (): Promise<string> => {\n const td = new TextDecoder();\n return td.decode(myRequest.response);\n };\n let responseJson: unknown = undefined;\n const makeJson = async (): Promise<any> => {\n if (responseJson === undefined) {\n try {\n const td = new TextDecoder();\n const responseString = td.decode(myRequest.response);\n responseJson = JSON.parse(responseString);\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n return responseJson;\n };\n\n const headers = myRequest.getAllResponseHeaders();\n const arr = headers.trim().split(/[\\r\\n]+/);\n\n // Create a map of header names to values\n const headerMap: Headers = new Headers();\n arr.forEach(function (line) {\n const parts = line.split(\": \");\n const headerName = parts.shift();\n if (!headerName) {\n logger.warn(\"skipping invalid header\");\n return;\n }\n const value = parts.join(\": \");\n headerMap.set(headerName, value);\n });\n const resp: HttpResponse = {\n requestUrl: requestUrl,\n status: myRequest.status,\n headers: headerMap,\n requestMethod: requestMethod,\n json: makeJson,\n text: makeText,\n bytes: async () => myRequest.response,\n };\n resolve(resp);\n }\n });\n });\n }\n\n get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"GET\",\n ...opt,\n });\n }\n\n postJson(\n url: string,\n body: any,\n opt?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n ...opt,\n });\n }\n\n stop(): void {\n // Nothing to do\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 * Imports.\n */\nimport {\n Duration,\n RequestThrottler,\n TalerError,\n TalerErrorCode\n} from \"@gnu-taler/taler-util\";\n\nimport {\n DEFAULT_REQUEST_TIMEOUT_MS,\n Headers,\n HttpLibArgs,\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n encodeBody,\n getDefaultHeaders,\n} from \"@gnu-taler/taler-util/http\";\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n */\nexport class BrowserFetchHttpLib implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n public constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n async fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n const requestCancel = options?.cancellationToken;\n const requestRedirect = options?.redirect;\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n const myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n controller.abort(TalerErrorCode.GENERIC_TIMEOUT);\n }, requestTimeout.d_ms);\n }\n if (requestCancel) {\n requestCancel.onCancelled(() => {\n controller.abort(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)\n });\n }\n\n try {\n const response = await fetch(requestUrl, {\n headers: requestHeadersMap,\n body: myBody,\n method: requestMethod,\n signal: controller.signal,\n redirect: requestRedirect\n });\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n const headerMap = new Headers();\n response.headers.forEach((value, key) => {\n headerMap.set(key, value);\n });\n return {\n headers: headerMap,\n status: response.status,\n requestMethod,\n requestUrl,\n json: makeJsonHandler(response, requestUrl, requestMethod),\n text: makeTextHandler(response, requestUrl, requestMethod),\n bytes: async () => (await response.blob()).arrayBuffer(),\n };\n } catch (e) {\n if (controller.signal) {\n throw TalerError.fromDetail(\n controller.signal.reason,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `HTTP request failed.`,\n );\n }\n throw e;\n }\n }\n\n}\n\nfunction makeTextHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n return async function getTextFromResponse(): Promise<any> {\n let respText;\n try {\n respText = await response.text();\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid text from HTTP response\",\n );\n }\n return respText;\n };\n}\n\nfunction makeJsonHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n let responseJson: unknown = undefined;\n return async function getJsonFromResponse(): Promise<any> {\n if (responseJson === undefined) {\n try {\n responseJson = await response.json();\n } catch (e) {\n const message = e instanceof Error ? `Invalid JSON from HTTP response: ${e.message}` : \"Invalid JSON from HTTP response\"\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n message,\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid JSON from HTTP response: null or not object\",\n );\n }\n return responseJson;\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\ndeclare const __location: unique symbol;\n/**\n * special string that defined a location in the application\n *\n * this help to prevent wrong path\n */\nexport type AppLocation = string & {\n [__location]: true;\n};\n\nexport type EmptyObject = Record<string, never>;\n\nexport function urlPattern<\n T extends Record<string, string | undefined> = EmptyObject,\n>(pattern: RegExp, reverse: (p: T) => string): RouteDefinition<T> {\n const url = reverse as (p: T) => AppLocation;\n return {\n pattern: new RegExp(pattern),\n url,\n };\n}\n\n/**\n * defines a location in the app\n *\n * pattern: how a string will trigger this location\n * url(): how a state serialize to a location\n */\n\nexport type ObjectOf<T> = Record<string, T> | EmptyObject;\n\nexport type RouteDefinition<\n T extends ObjectOf<string | undefined> = EmptyObject,\n> = {\n pattern: RegExp;\n url: (p: T) => AppLocation;\n};\n\nconst nullRountDef = {\n pattern: new RegExp(/.*/),\n url: () => \"\" as AppLocation,\n};\nexport function buildNullRoutDefinition<\n T extends ObjectOf<string>,\n>(): RouteDefinition<T> {\n return nullRountDef;\n}\n\n/**\n * Search path in the pageList\n * get the values from the path found\n * add params from searchParams\n *\n * @param path\n * @param params\n */\nexport function findMatch<T extends ObjectOf<RouteDefinition>>(\n pagesMap: T,\n pageList: Array<keyof T>,\n path: string,\n params: Record<string, string[]>,\n): Location<T> | undefined {\n for (let idx = 0; idx < pageList.length; idx++) {\n const name = pageList[idx];\n const found = pagesMap[name].pattern.exec(path);\n if (found !== null) {\n const values = {} as Record<string, unknown>;\n\n if (found.groups !== undefined) {\n Object.entries(found.groups).forEach(([key, value]) => {\n values[key] = value;\n });\n }\n\n // @ts-expect-error values is a map string which is equivalent to the RouteParamsType\n return { name, parent: pagesMap, values, params };\n }\n }\n return undefined;\n}\n\n/**\n * get the type of the params of a location\n *\n */\ntype RouteParamsType<\n RouteType,\n Key extends keyof RouteType,\n> = RouteType[Key] extends RouteDefinition<infer ParamType> ? ParamType : never;\n\n/**\n * Helps to create a map of a type with the key\n */\ntype MapKeyValue<Type> = {\n [Key in keyof Type]: Key extends string\n ? {\n parent: Type;\n name: Key;\n values: RouteParamsType<Type, Key>;\n params: Record<string, string[]>;\n }\n : never;\n};\n\n/**\n * create a enumeration of value of a mapped type\n */\ntype EnumerationOf<T> = T[keyof T];\n\nexport type Location<T> = EnumerationOf<MapKeyValue<T>>;\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 { TalerBankIntegrationHttpClient, TalerCoreBankHttpClient, TalerRevenueHttpClient, TalerWireGatewayHttpClient } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { defaultRequestHandler } from \"../utils/request.js\";\n\ninterface Type {\n /**\n * @deprecated this show not be used\n */\n request: typeof defaultRequestHandler;\n bankCore: TalerCoreBankHttpClient,\n bankIntegration: TalerBankIntegrationHttpClient,\n bankWire: TalerWireGatewayHttpClient,\n bankRevenue: TalerRevenueHttpClient,\n}\n\nconst Context = createContext<Type>({ request: defaultRequestHandler } as any);\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\";\nimport { Locale } from \"date-fns\";\nimport {\n es as esLocale,\n enGB as enLocale,\n fr as frLocale,\n de as deLocale\n} from \"date-fns/locale\"\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 dateLocale: Locale,\n completeness: { [id in keyof typeof supportedLang]: number }\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};\n\nconst initial: Type = {\n lang: \"en\",\n supportedLang,\n changeLanguage: () => {\n // do not change anything\n },\n i18n,\n dateLocale: enLocale,\n completeness: {\n de: 0,\n en: 0,\n es: 0,\n fr: 0,\n it: 0,\n sv: 0,\n }\n};\nconst Context = createContext<Type>(initial);\n\ninterface Props {\n initial?: string;\n children: ComponentChildren;\n forceLang?: string;\n source: Record<string, any>;\n completeness?: Record<string, number>;\n}\n\n// Outmost UI wrapper.\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\n source,\n completeness: completenessProp\n}: Props): VNode => {\n const completeness = {\n en: 100,\n de: !completenessProp || !completenessProp[\"de\"] ? 0 : completenessProp[\"de\"],\n es: !completenessProp || !completenessProp[\"es\"] ? 0 : completenessProp[\"es\"],\n fr: !completenessProp || !completenessProp[\"fr\"] ? 0 : completenessProp[\"fr\"],\n it: !completenessProp || !completenessProp[\"it\"] ? 0 : completenessProp[\"it\"],\n sv: !completenessProp || !completenessProp[\"sv\"] ? 0 : completenessProp[\"sv\"],\n }\n const { value: lang, update: changeLanguage } = useLang(initial, completeness);\n\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 const dateLocale = lang === \"es\" ? esLocale :\n lang === \"fr\" ? frLocale :\n lang === \"de\" ? deLocale :\n enLocale;\n\n return h(Context.Provider, {\n value: { lang, changeLanguage, supportedLang, i18n, dateLocale, completeness },\n children,\n });\n};\n\nexport const useTranslationContext = (): Type => useContext(Context);\n", "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}", "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}", "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}", "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}", "import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\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}", "/**\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;", "import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\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 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 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 requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n var _options$step;\n\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start 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 start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\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;", "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;", "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;", "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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\n\nexport default function getMinutes(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var minutes = date.getMinutes();\n return minutes;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\n\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\n\nexport default function getSeconds(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var seconds = date.getSeconds();\n return seconds;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\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\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n function Setter() {\n _classCallCheck(this, Setter);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n _createClass(Setter, [{\n key: \"validate\",\n value: function validate(_utcDate, _options) {\n return true;\n }\n }]);\n\n return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n _inherits(ValueSetter, _Setter);\n\n var _super = _createSuper(ValueSetter);\n\n function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n var _this;\n\n _classCallCheck(this, ValueSetter);\n\n _this = _super.call(this);\n _this.value = value;\n _this.validateValue = validateValue;\n _this.setValue = setValue;\n _this.priority = priority;\n\n if (subPriority) {\n _this.subPriority = subPriority;\n }\n\n return _this;\n }\n\n _createClass(ValueSetter, [{\n key: \"validate\",\n value: function validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n }, {\n key: \"set\",\n value: function set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n }]);\n\n return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n _inherits(DateToSystemTimezoneSetter, _Setter2);\n\n var _super2 = _createSuper(DateToSystemTimezoneSetter);\n\n function DateToSystemTimezoneSetter() {\n var _this2;\n\n _classCallCheck(this, DateToSystemTimezoneSetter);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n\n return _this2;\n }\n\n _createClass(DateToSystemTimezoneSetter, [{\n key: \"set\",\n value: function set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n }]);\n\n return DateToSystemTimezoneSetter;\n}(Setter);", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: \"run\",\n value: function run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n }, {\n key: \"validate\",\n value: function validate(_utcDate, _value, _options) {\n return true;\n }\n }]);\n\n return Parser;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n _inherits(EraParser, _Parser);\n\n var _super = _createSuper(EraParser);\n\n function EraParser() {\n var _this;\n\n _classCallCheck(this, EraParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n\n return _this;\n }\n\n _createClass(EraParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return EraParser;\n}(Parser);", "export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};", "import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\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 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n _inherits(YearParser, _Parser);\n\n var _super = _createSuper(YearParser);\n\n function YearParser() {\n var _this;\n\n _classCallCheck(this, YearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(YearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return YearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekYearParser, _Parser);\n\n var _super = _createSuper(LocalWeekYearParser);\n\n function LocalWeekYearParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n }]);\n\n return LocalWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekYearParser, _Parser);\n\n var _super = _createSuper(ISOWeekYearParser);\n\n function ISOWeekYearParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n }]);\n\n return ISOWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ExtendedYearParser, _Parser);\n\n var _super = _createSuper(ExtendedYearParser);\n\n function ExtendedYearParser() {\n var _this;\n\n _classCallCheck(this, ExtendedYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ExtendedYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ExtendedYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(QuarterParser, _Parser);\n\n var _super = _createSuper(QuarterParser);\n\n function QuarterParser() {\n var _this;\n\n _classCallCheck(this, QuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(QuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return QuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneQuarterParser, _Parser);\n\n var _super = _createSuper(StandAloneQuarterParser);\n\n function StandAloneQuarterParser() {\n var _this;\n\n _classCallCheck(this, StandAloneQuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneQuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneQuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(MonthParser, _Parser);\n\n var _super = _createSuper(MonthParser);\n\n function MonthParser() {\n var _this;\n\n _classCallCheck(this, MonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n return _this;\n }\n\n _createClass(MonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return MonthParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneMonthParser, _Parser);\n\n var _super = _createSuper(StandAloneMonthParser);\n\n function StandAloneMonthParser() {\n var _this;\n\n _classCallCheck(this, StandAloneMonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneMonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneMonthParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekParser, _Parser);\n\n var _super = _createSuper(LocalWeekParser);\n\n function LocalWeekParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n }]);\n\n return LocalWeekParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekParser, _Parser);\n\n var _super = _createSuper(ISOWeekParser);\n\n function ISOWeekParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n }]);\n\n return ISOWeekParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n _inherits(DateParser, _Parser);\n\n var _super = _createSuper(DateParser);\n\n function DateParser() {\n var _this;\n\n _classCallCheck(this, DateParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DateParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DateParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayOfYearParser, _Parser);\n\n var _super = _createSuper(DayOfYearParser);\n\n function DayOfYearParser() {\n var _this;\n\n _classCallCheck(this, DayOfYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayOfYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayOfYearParser;\n}(Parser);", "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 setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, 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 = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayParser, _Parser);\n\n var _super = _createSuper(DayParser);\n\n function DayParser() {\n var _this;\n\n _classCallCheck(this, DayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalDayParser, _Parser);\n\n var _super = _createSuper(LocalDayParser);\n\n function LocalDayParser() {\n var _this;\n\n _classCallCheck(this, LocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return LocalDayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneLocalDayParser, _Parser);\n\n var _super = _createSuper(StandAloneLocalDayParser);\n\n function StandAloneLocalDayParser() {\n var _this;\n\n _classCallCheck(this, StandAloneLocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneLocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneLocalDayParser;\n}(Parser);", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISODayParser, _Parser);\n\n var _super = _createSuper(ISODayParser);\n\n function ISODayParser() {\n var _this;\n\n _classCallCheck(this, ISODayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISODayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ISODayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMParser, _Parser);\n\n var _super = _createSuper(AMPMParser);\n\n function AMPMParser() {\n var _this;\n\n _classCallCheck(this, AMPMParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMMidnightParser, _Parser);\n\n var _super = _createSuper(AMPMMidnightParser);\n\n function AMPMMidnightParser() {\n var _this;\n\n _classCallCheck(this, AMPMMidnightParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMMidnightParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMMidnightParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayPeriodParser, _Parser);\n\n var _super = _createSuper(DayPeriodParser);\n\n function DayPeriodParser() {\n var _this;\n\n _classCallCheck(this, DayPeriodParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayPeriodParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return DayPeriodParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1to12Parser, _Parser);\n\n var _super = _createSuper(Hour1to12Parser);\n\n function Hour1to12Parser() {\n var _this;\n\n _classCallCheck(this, Hour1to12Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1to12Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour1to12Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0to23Parser, _Parser);\n\n var _super = _createSuper(Hour0to23Parser);\n\n function Hour0to23Parser() {\n var _this;\n\n _classCallCheck(this, Hour0to23Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0to23Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour0to23Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0To11Parser, _Parser);\n\n var _super = _createSuper(Hour0To11Parser);\n\n function Hour0To11Parser() {\n var _this;\n\n _classCallCheck(this, Hour0To11Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0To11Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour0To11Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1To24Parser, _Parser);\n\n var _super = _createSuper(Hour1To24Parser);\n\n function Hour1To24Parser() {\n var _this;\n\n _classCallCheck(this, Hour1To24Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1To24Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour1To24Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n _inherits(MinuteParser, _Parser);\n\n var _super = _createSuper(MinuteParser);\n\n function MinuteParser() {\n var _this;\n\n _classCallCheck(this, MinuteParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(MinuteParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n }]);\n\n return MinuteParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(SecondParser, _Parser);\n\n var _super = _createSuper(SecondParser);\n\n function SecondParser() {\n var _this;\n\n _classCallCheck(this, SecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(SecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n }]);\n\n return SecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(FractionOfSecondParser, _Parser);\n\n var _super = _createSuper(FractionOfSecondParser);\n\n function FractionOfSecondParser() {\n var _this;\n\n _classCallCheck(this, FractionOfSecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(FractionOfSecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n }]);\n\n return FractionOfSecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneWithZParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneWithZParser);\n\n function ISOTimezoneWithZParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneWithZParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneWithZParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneWithZParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneParser);\n\n function ISOTimezoneParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampSecondsParser, _Parser);\n\n var _super = _createSuper(TimestampSecondsParser);\n\n function TimestampSecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampSecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampSecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampSecondsParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampMillisecondsParser, _Parser);\n\n var _super = _createSuper(TimestampMillisecondsParser);\n\n function TimestampMillisecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampMillisecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampMillisecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampMillisecondsParser;\n}(Parser);", "import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\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 | | P | |\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 `parse` 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 */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\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\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/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 { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/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 notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\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 in the format string 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 *\n * Format of the format 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 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\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) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\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 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\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) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\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 | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | 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) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\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) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\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 | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | 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] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | 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) | 10 | 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 * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\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 * In `format` function, they will produce different result:\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 * `parse` will try to match both formatting and stand-alone units interchangably.\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:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. 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` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\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 [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. 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 * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `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 * 7. `D` and `DD` tokens represent days of the year but they are ofthen 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 * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\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 {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\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 {Date} the parsed date\n * @throws {TypeError} 3 arguments required\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} `options.locale` must contain `match` property\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 * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, 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(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\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\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\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 (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _iterator = _createForOfIteratorHelper(tokens),\n _step;\n\n try {\n var _loop = function _loop() {\n var token = _step.value;\n\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return {\n v: new Date(NaN)\n };\n }\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ret = _loop();\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var setter = _step2.value;\n\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}", "import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days 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 days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months 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 months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\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 subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from 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 subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(date, 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; // Subtract years and months\n\n var dateWithoutMonths = subMonths(date, months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}", "var formatDistanceLocale = {\n lessThanXSeconds: {\n standalone: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n },\n withPreposition: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n }\n },\n xSeconds: {\n standalone: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n },\n withPreposition: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n }\n },\n halfAMinute: {\n standalone: 'halbe Minute',\n withPreposition: 'halben Minute'\n },\n lessThanXMinutes: {\n standalone: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n },\n withPreposition: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n }\n },\n xMinutes: {\n standalone: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n },\n withPreposition: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n }\n },\n aboutXHours: {\n standalone: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n },\n withPreposition: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n }\n },\n xHours: {\n standalone: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n },\n withPreposition: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n }\n },\n xDays: {\n standalone: {\n one: '1 Tag',\n other: '{{count}} Tage'\n },\n withPreposition: {\n one: '1 Tag',\n other: '{{count}} Tagen'\n }\n },\n aboutXWeeks: {\n standalone: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n },\n withPreposition: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n }\n },\n xWeeks: {\n standalone: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n },\n withPreposition: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n }\n },\n aboutXMonths: {\n standalone: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monate'\n },\n withPreposition: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monaten'\n }\n },\n xMonths: {\n standalone: {\n one: '1 Monat',\n other: '{{count}} Monate'\n },\n withPreposition: {\n one: '1 Monat',\n other: '{{count}} Monaten'\n }\n },\n aboutXYears: {\n standalone: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahre'\n },\n withPreposition: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahren'\n }\n },\n xYears: {\n standalone: {\n one: '1 Jahr',\n other: '{{count}} Jahre'\n },\n withPreposition: {\n one: '1 Jahr',\n other: '{{count}} Jahren'\n }\n },\n overXYears: {\n standalone: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahre'\n },\n withPreposition: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahren'\n }\n },\n almostXYears: {\n standalone: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahre'\n },\n withPreposition: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahren'\n }\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\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}}', String(count));\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 'vor ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\n// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n full: 'EEEE, do MMMM y',\n // Montag, 7. Januar 2018\n long: 'do MMMM y',\n // 7. Januar 2018\n medium: 'do MMM y',\n // 7. Jan. 2018\n short: 'dd.MM.y' // 07.01.2018\n\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'um' {{time}}\",\n long: \"{{date}} 'um' {{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: \"'letzten' eeee 'um' p\",\n yesterday: \"'gestern um' p\",\n today: \"'heute um' p\",\n tomorrow: \"'morgen um' p\",\n nextWeek: \"eeee 'um' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['v.Chr.', 'n.Chr.'],\n abbreviated: ['v.Chr.', 'n.Chr.'],\n wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n}; // Note: in German, 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', 'M\u00E4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n wide: ['Januar', 'Februar', 'M\u00E4rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n}; // https://st.unicode.org/cldr-apps/v#/de/Gregorian/\n\nvar formattingMonthValues = {\n narrow: monthValues.narrow,\n abbreviated: ['Jan.', 'Feb.', 'M\u00E4rz', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n wide: monthValues.wide\n};\nvar dayValues = {\n narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n}; // https://www.unicode.org/cldr/charts/32/summary/de.html#1881\n\nvar dayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachm.',\n evening: 'Abend',\n night: 'Nacht'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachm.',\n evening: 'abends',\n night: 'nachts'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n var number = Number(dirtyNumber);\n return number + '.';\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 formattingValues: formattingMonthValues,\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;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i\n};\nvar parseEraPatterns = {\n any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(j[a\u00E4]n|feb|m\u00E4r[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\\.?/i,\n wide: /^(januar|februar|m\u00E4rz|april|mai|juni|juli|august|september|oktober|november|dezember)/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: [/^j[a\u00E4]/i, /^f/i, /^m\u00E4r/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smdmf]/i,\n short: /^(so|mo|di|mi|do|fr|sa)/i,\n abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\\.?/i,\n wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i\n};\nvar parseDayPatterns = {\n any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(vm\\.?|nm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n abbreviated: /^(vorm\\.?|nachm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^v/i,\n pm: /^n/i,\n midnight: /^Mitte/i,\n noon: /^Mitta/i,\n morning: /morgens/i,\n afternoon: /nachmittags/i,\n // will never be matched. Afternoon is matched by `pm`\n evening: /abends/i,\n night: /nachts/i // will never be matched. Night is matched by `pm`\n\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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: 'wide',\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 German locale.\n * @language German\n * @iso-639-2 deu\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Asia [@asia-t]{@link https://github.com/asia-t}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author RomanErnst [@pex]{@link https://github.com/pex}\n * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}\n */\nvar locale = {\n code: 'de',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, d MMMM yyyy',\n long: 'd MMMM yyyy',\n medium: 'd MMM yyyy',\n short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\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;", "import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\n\nvar locale = {\n code: 'en-GB',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'menos de un segundo',\n other: 'menos de {{count}} segundos'\n },\n xSeconds: {\n one: '1 segundo',\n other: '{{count}} segundos'\n },\n halfAMinute: 'medio minuto',\n lessThanXMinutes: {\n one: 'menos de un minuto',\n other: 'menos de {{count}} minutos'\n },\n xMinutes: {\n one: '1 minuto',\n other: '{{count}} minutos'\n },\n aboutXHours: {\n one: 'alrededor de 1 hora',\n other: 'alrededor de {{count}} horas'\n },\n xHours: {\n one: '1 hora',\n other: '{{count}} horas'\n },\n xDays: {\n one: '1 d\u00EDa',\n other: '{{count}} d\u00EDas'\n },\n aboutXWeeks: {\n one: 'alrededor de 1 semana',\n other: 'alrededor de {{count}} semanas'\n },\n xWeeks: {\n one: '1 semana',\n other: '{{count}} semanas'\n },\n aboutXMonths: {\n one: 'alrededor de 1 mes',\n other: 'alrededor de {{count}} meses'\n },\n xMonths: {\n one: '1 mes',\n other: '{{count}} meses'\n },\n aboutXYears: {\n one: 'alrededor de 1 a\u00F1o',\n other: 'alrededor de {{count}} a\u00F1os'\n },\n xYears: {\n one: '1 a\u00F1o',\n other: '{{count}} a\u00F1os'\n },\n overXYears: {\n one: 'm\u00E1s de 1 a\u00F1o',\n other: 'm\u00E1s de {{count}} a\u00F1os'\n },\n almostXYears: {\n one: 'casi 1 a\u00F1o',\n other: 'casi {{count}} a\u00F1os'\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 'en ' + result;\n } else {\n return 'hace ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'a las' {{time}}\",\n long: \"{{date}} 'a las' {{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: \"'el' eeee 'pasado a la' p\",\n yesterday: \"'ayer a la' p\",\n today: \"'hoy a la' p\",\n tomorrow: \"'ma\u00F1ana a la' p\",\n nextWeek: \"eeee 'a la' p\",\n other: 'P'\n};\nvar formatRelativeLocalePlural = {\n lastWeek: \"'el' eeee 'pasado a las' p\",\n yesterday: \"'ayer a las' p\",\n today: \"'hoy a las' p\",\n tomorrow: \"'ma\u00F1ana a las' p\",\n nextWeek: \"eeee 'a las' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n if (date.getUTCHours() !== 1) {\n return formatRelativeLocalePlural[token];\n } else {\n return formatRelativeLocale[token];\n }\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['AC', 'DC'],\n abbreviated: ['AC', 'DC'],\n wide: ['antes de cristo', 'despu\u00E9s de cristo']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['T1', 'T2', 'T3', 'T4'],\n wide: ['1\u00BA trimestre', '2\u00BA trimestre', '3\u00BA trimestre', '4\u00BA trimestre']\n};\nvar monthValues = {\n narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n abbreviated: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']\n};\nvar dayValues = {\n narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 's\u00E1'],\n abbreviated: ['dom', 'lun', 'mar', 'mi\u00E9', 'jue', 'vie', 's\u00E1b'],\n wide: ['domingo', 'lunes', 'martes', 'mi\u00E9rcoles', 'jueves', 'viernes', 's\u00E1bado']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n return number + '\u00BA';\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 Number(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;", "import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\u00BA)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|antes de la era com[u\u00FA]n|despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i\n};\nvar parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [/^(antes de cristo|antes de la era com[u\u00FA]n)/i, /^(despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](\u00BA)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[efmajsond]/i,\n abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^e/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: [/^en/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]\n};\nvar matchDayPatterns = {\n narrow: /^[dlmjvs]/i,\n short: /^(do|lu|ma|mi|ju|vi|s[\u00E1a])/i,\n abbreviated: /^(dom|lun|mar|mi[\u00E9e]|jue|vie|s[\u00E1a]b)/i,\n wide: /^(domingo|lunes|martes|mi[\u00E9e]rcoles|jueves|viernes|s[\u00E1a]bado)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(de la|a las) (ma\u00F1ana|tarde|noche))/i,\n any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (ma\u00F1ana|tarde|noche))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn/i,\n noon: /^md/i,\n morning: /ma\u00F1ana/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noche/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 Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Fernando Ag\u00FCero [@fjaguero]{@link https://github.com/fjaguero}\n * @author Gast\u00F3n Haro [@harogaston]{@link https://github.com/harogaston}\n * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n code: 'es',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'moins d\u2019une seconde',\n other: 'moins de {{count}} secondes'\n },\n xSeconds: {\n one: '1 seconde',\n other: '{{count}} secondes'\n },\n halfAMinute: '30 secondes',\n lessThanXMinutes: {\n one: 'moins d\u2019une minute',\n other: 'moins de {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'environ 1 heure',\n other: 'environ {{count}} heures'\n },\n xHours: {\n one: '1 heure',\n other: '{{count}} heures'\n },\n xDays: {\n one: '1 jour',\n other: '{{count}} jours'\n },\n aboutXWeeks: {\n one: 'environ 1 semaine',\n other: 'environ {{count}} semaines'\n },\n xWeeks: {\n one: '1 semaine',\n other: '{{count}} semaines'\n },\n aboutXMonths: {\n one: 'environ 1 mois',\n other: 'environ {{count}} mois'\n },\n xMonths: {\n one: '1 mois',\n other: '{{count}} mois'\n },\n aboutXYears: {\n one: 'environ 1 an',\n other: 'environ {{count}} ans'\n },\n xYears: {\n one: '1 an',\n other: '{{count}} ans'\n },\n overXYears: {\n one: 'plus d\u2019un an',\n other: 'plus de {{count}} ans'\n },\n almostXYears: {\n one: 'presqu\u2019un an',\n other: 'presque {{count}} ans'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var form = formatDistanceLocale[token];\n\n if (typeof form === 'string') {\n result = form;\n } else if (count === 1) {\n result = form.one;\n } else {\n result = form.other.replace('{{count}}', String(count));\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'dans ' + result;\n } else {\n return 'il y a ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE d MMMM y',\n long: 'd MMMM y',\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} '\u00E0' {{time}}\",\n long: \"{{date}} '\u00E0' {{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: \"eeee 'dernier \u00E0' p\",\n yesterday: \"'hier \u00E0' p\",\n today: \"'aujourd\u2019hui \u00E0' p\",\n tomorrow: \"'demain \u00E0' p'\",\n nextWeek: \"eeee 'prochain \u00E0' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['av. J.-C', 'ap. J.-C'],\n abbreviated: ['av. J.-C', 'ap. J.-C'],\n wide: ['avant J\u00E9sus-Christ', 'apr\u00E8s J\u00E9sus-Christ']\n};\nvar quarterValues = {\n narrow: ['T1', 'T2', 'T3', 'T4'],\n abbreviated: ['1er trim.', '2\u00E8me trim.', '3\u00E8me trim.', '4\u00E8me trim.'],\n wide: ['1er trimestre', '2\u00E8me trimestre', '3\u00E8me trimestre', '4\u00E8me trimestre']\n};\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['janv.', 'f\u00E9vr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'ao\u00FBt', 'sept.', 'oct.', 'nov.', 'd\u00E9c.'],\n wide: ['janvier', 'f\u00E9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\u00FBt', 'septembre', 'octobre', 'novembre', 'd\u00E9cembre']\n};\nvar dayValues = {\n narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\n short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\n abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n wide: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'mat.',\n afternoon: 'ap.m.',\n evening: 'soir',\n night: 'mat.'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'matin',\n afternoon: 'apr\u00E8s-midi',\n evening: 'soir',\n night: 'matin'\n },\n wide: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'du matin',\n afternoon: 'de l\u2019apr\u00E8s-midi',\n evening: 'du soir',\n night: 'du matin'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n var number = Number(dirtyNumber);\n var unit = options === null || options === void 0 ? void 0 : options.unit;\n if (number === 0) return '0';\n var feminineUnits = ['year', 'week', 'hour', 'minute', 'second'];\n var suffix;\n\n if (number === 1) {\n suffix = unit && feminineUnits.includes(unit) ? '\u00E8re' : 'er';\n } else {\n suffix = '\u00E8me';\n }\n\n return number + suffix;\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 })\n};\nexport default localize;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(i\u00E8me|\u00E8re|\u00E8me|er|e)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(av\\.J\\.C|ap\\.J\\.C|ap\\.J\\.-C)/i,\n abbreviated: /^(av\\.J\\.-C|av\\.J-C|apr\\.J\\.-C|apr\\.J-C|ap\\.J-C)/i,\n wide: /^(avant J\u00E9sus-Christ|apr\u00E8s J\u00E9sus-Christ)/i\n};\nvar parseEraPatterns = {\n any: [/^av/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^T?[1234]/i,\n abbreviated: /^[1234](er|\u00E8me|e)? trim\\.?/i,\n wide: /^[1234](er|\u00E8me|e)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(janv|f\u00E9vr|mars|avr|mai|juin|juill|juil|ao\u00FBt|sept|oct|nov|d\u00E9c)\\.?/i,\n wide: /^(janvier|f\u00E9vrier|mars|avril|mai|juin|juillet|ao\u00FBt|septembre|octobre|novembre|d\u00E9cembre)/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, /^av/i, /^ma/i, /^juin/i, /^juil/i, /^ao/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[lmjvsd]/i,\n short: /^(di|lu|ma|me|je|ve|sa)/i,\n abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\\.?/i,\n wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|minuit|midi|mat\\.?|ap\\.?m\\.?|soir|nuit)/i,\n any: /^([ap]\\.?\\s?m\\.?|du matin|de l'apr\u00E8s[-\\s]midi|du soir|de la nuit)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^min/i,\n noon: /^mid/i,\n morning: /mat/i,\n afternoon: /ap/i,\n evening: /soir/i,\n night: /nuit/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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 * @type {Locale}\n * @category Locales\n * @summary French locale.\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author Fran\u00E7ois B [@fbonzon]{@link https://github.com/fbonzon}\n */\n\nvar locale = {\n code: 'fr',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerBankConversionCacheEviction,\n TalerBankConversionHttpClient,\n TalerCoreBankCacheEviction,\n TalerCoreBankHttpClient,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { APIClient, ActiviyTracker, BankLib, Subscriber } from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type BankContextType = {\n url: URL;\n config: TalerCorebankApi.Config;\n lib: BankLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst BankContext = createContext<BankContextType>(undefined);\n\nexport const useBankCoreApiContext = (): BankContextType =>\n useContext(BankContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n conversion?: CacheEvictor<TalerBankConversionCacheEviction>;\n bank?: CacheEvictor<TalerCoreBankCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const BankApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerCorebankApi.Config>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildBankApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: BankContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildBankApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<BankLib, TalerCorebankApi.Config> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const bank = new TalerCoreBankHttpClient(url.href, httpLib, evictors.bank);\n const conversion = new TalerBankConversionHttpClient(\n bank.getConversionInfoAPI().href,\n httpLib,\n evictors.conversion,\n );\n const auth = (user: string) =>\n new TalerAuthenticationHttpClient(\n bank.getAuthenticationAPI(user).href,\n httpLib,\n );\n\n async function getRemoteConfig(): Promise<TalerCorebankApi.Config> {\n const resp = await bank.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: bank.PROTOCOL_VERSION,\n lib: {\n bank,\n conversion,\n auth,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const BankApiProviderTesting = ({\n children,\n value,\n}: {\n value: BankContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { ChallengerHttpClient, ObservabilityEvent, TalerAuthenticationHttpClient, TalerBankConversionHttpClient, TalerCoreBankHttpClient, TalerExchangeHttpClient, TalerMerchantInstanceHttpClient, TalerMerchantManagementHttpClient } from \"@gnu-taler/taler-util\";\n\ntype Listener<Event> = (e: Event) => void;\ntype Unsuscriber = () => void;\nexport type Subscriber<Event> = (fn: Listener<Event>) => Unsuscriber;\n\nexport class ActiviyTracker<Event> {\n private observers = new Array<Listener<Event>>();\n constructor() {\n this.notify = this.notify.bind(this)\n this.subscribe = this.subscribe.bind(this)\n }\n notify(data: Event): void {\n this.observers.forEach((observer) => observer(data))\n }\n subscribe(func: Listener<Event>): Unsuscriber {\n this.observers.push(func);\n return () => {\n this.observers.forEach((observer, index) => {\n if (observer === func) {\n this.observers.splice(index, 1);\n }\n });\n };\n }\n}\n\n/**\n * build http client with cache breaker due to SWR\n * @param url\n * @returns\n */\nexport interface APIClient<T, C> {\n getRemoteConfig(): Promise<C>;\n VERSION: string;\n lib: T,\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest(id: string): void;\n}\n\nexport interface MerchantLib {\n instance: TalerMerchantManagementHttpClient;\n authenticate: TalerAuthenticationHttpClient;\n subInstanceApi: (instanceId: string) => MerchantLib;\n}\n\nexport interface ExchangeLib {\n exchange: TalerExchangeHttpClient;\n}\n\nexport interface BankLib {\n bank: TalerCoreBankHttpClient;\n conversion: TalerBankConversionHttpClient;\n auth: (user: string) => TalerAuthenticationHttpClient;\n}\n\nexport interface ChallengerLib {\n challenger: ChallengerHttpClient;\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n ChallengerApi,\n ChallengerCacheEviction,\n ChallengerHttpClient,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerError\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n ChallengerLib,\n Subscriber\n} from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type ChallengerContextType = {\n url: URL;\n config: ChallengerApi.ChallengerTermsOfServiceResponse;\n lib: ChallengerLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst ChallengerContext = createContext<ChallengerContextType>(undefined);\n\nexport const useChallengerApiContext = (): ChallengerContextType =>\n useContext(ChallengerContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n challenger?: CacheEvictor<ChallengerCacheEviction>;\n}\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const ChallengerApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<ChallengerApi.ChallengerTermsOfServiceResponse>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildChallengerApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: ChallengerContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(ChallengerContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildChallengerApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<ChallengerLib, ChallengerApi.ChallengerTermsOfServiceResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const challenger = new ChallengerHttpClient(url.href, httpLib, evictors.challenger);\n\n async function getRemoteConfig(): Promise<ChallengerApi.ChallengerTermsOfServiceResponse> {\n const resp = await challenger.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: challenger.PROTOCOL_VERSION,\n lib: {\n challenger,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const ChallengerApiProviderTesting = ({\n children,\n value,\n}: {\n value: ChallengerContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(ChallengerContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerError,\n TalerMerchantApi,\n TalerMerchantInstanceCacheEviction,\n TalerMerchantManagementCacheEviction,\n TalerMerchantManagementHttpClient,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n MerchantLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type MerchantContextType = {\n url: URL;\n config: TalerMerchantApi.VersionResponse;\n lib: MerchantLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n changeBackend: (url: URL) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst MerchantContext = createContext<MerchantContextType>(undefined);\n\nexport const useMerchantApiContext = (): MerchantContextType =>\n useContext(MerchantContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n management?: CacheEvictor<\n TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction\n >;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\nexport type ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const MerchantApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{\n state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;\n }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerMerchantApi.VersionResponse>>();\n\n const [merchantEndpoint, changeMerchantEndpoint] = useState(baseUrl);\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildMerchantApiClient(merchantEndpoint, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (!checked || checked.type !== \"ok\") {\n return h(frameOnError, { state: checked }, []);\n }\n\n const value: MerchantContextType = {\n url: merchantEndpoint,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n changeBackend: changeMerchantEndpoint,\n hints: checked.hints,\n };\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildMerchantApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<MerchantLib, TalerMerchantApi.VersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const instance = new TalerMerchantManagementHttpClient(\n url.href,\n httpLib,\n evictors.management,\n );\n const authenticate = new TalerAuthenticationHttpClient(\n instance.getAuthenticationAPI().href,\n httpLib,\n );\n\n function getSubInstanceAPI(instanceId: string): MerchantLib {\n const api = buildMerchantApiClient(\n instance.getSubInstanceAPI(instanceId) as URL,\n evictors,\n );\n return api.lib;\n }\n\n async function getRemoteConfig(): Promise<TalerMerchantApi.VersionResponse> {\n const resp = await instance.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: instance.PROTOCOL_VERSION,\n lib: {\n instance,\n authenticate,\n subInstanceApi: getSubInstanceAPI,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const MerchantApiProviderTesting = ({\n children,\n value,\n}: {\n value: MerchantContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerError,\n TalerExchangeApi,\n TalerExchangeCacheEviction,\n TalerExchangeHttpClient\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib, ErrorLoading, useTranslationContext } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n ExchangeLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type ExchangeContextType = {\n url: URL;\n config: TalerExchangeApi.ExchangeVersionResponse;\n lib: ExchangeLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst ExchangeContext = createContext<ExchangeContextType>(undefined);\n\nexport const useExchangeApiContext = (): ExchangeContextType =>\n useContext(ExchangeContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n exchange?: CacheEvictor<TalerExchangeCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\ntype ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const ExchangeApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerExchangeApi.ExchangeVersionResponse>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildExchangeApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: ExchangeContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(ExchangeContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildExchangeApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<ExchangeLib, TalerExchangeApi.ExchangeVersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const ex = new TalerExchangeHttpClient(url.href, httpLib, evictors.exchange);\n\n async function getRemoteConfig(): Promise<TalerExchangeApi.ExchangeVersionResponse> {\n const resp = await ex.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: ex.PROTOCOL_VERSION,\n lib: {\n exchange: ex,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const ExchangeApiProviderTesting = ({\n children,\n value,\n}: {\n value: ExchangeContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(ExchangeContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport {\n AppLocation,\n ObjectOf,\n Location,\n findMatch,\n RouteDefinition,\n} from \"../utils/route.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = {\n path: string;\n params: Record<string, string[]>;\n navigateTo: (path: AppLocation) => void;\n // addNavigationListener: (listener: (path: string, params: Record<string, string>) => void) => (() => void);\n};\n\n// @ts-expect-error should not be used without provider\nconst Context = createContext<Type>(undefined);\n\nexport const useNavigationContext = (): Type => useContext(Context);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useCurrentLocation<T extends ObjectOf<RouteDefinition<any>>>(\n pagesMap: T,\n): Location<T> | undefined {\n const pageList = Object.keys(pagesMap as object) as Array<keyof T>;\n const { path, params } = useNavigationContext();\n\n return findMatch(pagesMap, pageList, path, params);\n}\n\nfunction getPathAndParamsFromWindow(): {\n path: string;\n params: Record<string, string[]>;\n} {\n const path =\n typeof window !== \"undefined\" ? window.location.hash.substring(1) : \"/\";\n const params: Record<string, string[]> = {};\n if (typeof window !== \"undefined\") {\n for (const [key, value] of new URLSearchParams(window.location.search)) {\n if (!params[key]) {\n params[key] = [];\n }\n params[key].push(value);\n }\n }\n return { path, params };\n}\n\nconst { path: initialPath, params: initialParams } =\n getPathAndParamsFromWindow();\n\n// there is a possibility that if the browser does a redirection\n// (which doesn't go through navigatTo function) and that executed\n// too early (before addEventListener runs) it won't be taking\n// into account\nconst PopStateEventType = \"popstate\";\n\nexport const BrowserHashNavigationProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const [{ path, params }, setState] = useState({\n path: initialPath,\n params: initialParams,\n });\n if (typeof window === \"undefined\") {\n throw Error(\n \"Can't use BrowserHashNavigationProvider if there is no window object\",\n );\n }\n function navigateTo(path: string): void {\n const { params } = getPathAndParamsFromWindow();\n setState({ path, params });\n window.location.href = path;\n }\n\n useEffect(() => {\n function eventListener(): void {\n setState(getPathAndParamsFromWindow());\n }\n window.addEventListener(PopStateEventType, eventListener);\n return () => {\n window.removeEventListener(PopStateEventType, eventListener);\n };\n }, []);\n return h(Context.Provider, {\n value: { path, params, navigateTo },\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { stringifyTalerUri, TalerUri } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\n/**\n * https://docs.taler.net/design-documents/039-taler-browser-integration.html\n *\n * @param uri\n */\nfunction createHeadMetaTag(uri: TalerUri, onNotFound?: () => void) {\n const meta = document.createElement(\"meta\");\n meta.setAttribute(\"name\", \"taler-uri\");\n meta.setAttribute(\"content\", stringifyTalerUri(uri));\n\n document.head.appendChild(meta);\n\n let walletFound = false;\n window.addEventListener(\"beforeunload\", () => {\n walletFound = true;\n });\n setTimeout(() => {\n if (!walletFound && onNotFound) {\n onNotFound();\n }\n }, 10); //very short timeout\n}\ninterface Type {\n /**\n * Tell the active wallet that an action is found\n *\n * @param uri\n * @returns\n */\n publishTalerAction: (uri: TalerUri, onNotFound?: () => void) => void;\n}\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst Context = createContext<Type>(undefined);\n\nexport const useTalerWalletIntegrationAPI = (): Type => useContext(Context);\n\nexport const TalerWalletIntegrationBrowserProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const value: Type = {\n publishTalerAction: createHeadMetaTag,\n };\n return h(Context.Provider, {\n value,\n children,\n });\n};\n\nexport const TalerWalletIntegrationTestingProvider = ({\n children,\n value,\n}: {\n children: ComponentChildren;\n value: Type;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\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\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\nexport function recursive<PType>(\n hook: (p: PType) => RecursiveState<VNode>,\n): (p: PType) => VNode {\n\n function withHook(stateHook: () => RecursiveState<VNode>): () => 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 return 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/**\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", "import { Duration, TranslatedString, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\n\ninterface Props {\n type?: \"info\" | \"success\" | \"warning\" | \"danger\" | \"low\",\n onClose?: () => void,\n title: TranslatedString,\n children?: ComponentChildren,\n timeout?: Duration,\n}\nexport function Attention({ type = \"info\", title, children, onClose, timeout = Duration.getForever() }: Props): VNode {\n\n return <div class={`group attention-${type} mt-2 shadow-lg`}>\n {timeout.d_ms === \"forever\" ? undefined : <style>{`\n .progress {\n animation: notificationTimeoutBar ${Math.round(timeout.d_ms / 1000)}s ease-in-out;\n animation-fill-mode:both; \n }\n\n @keyframes notificationTimeoutBar {\n 0% { width: 0; }\n 100% { width: 100%; }\n }\n `}</style>\n }\n\n <div data-timed={timeout.d_ms !== \"forever\"} class=\"rounded-md data-[timed=true]:rounded-b-none group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 p-4 shadow\">\n <div class=\"flex\">\n <div >\n {type === \"low\" ? undefined :\n <svg xmlns=\"http://www.w3.org/2000/svg\" stroke=\"none\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-8 h-8 group-[.attention-info]:text-blue-400 group-[.attention-warning]:text-yellow-400 group-[.attention-danger]:text-red-400 group-[.attention-success]:text-green-400\">\n {(() => {\n switch (type) {\n case \"info\":\n return <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\" />\n case \"warning\":\n return <path fill-rule=\"evenodd\" d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"danger\":\n return <path fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"success\":\n return <path fill-rule=\"evenodd\" d=\"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z\" />\n default:\n assertUnreachable(type)\n }\n })()}\n </svg>\n }\n </div>\n <div class=\"ml-3 w-full\">\n <h3 class=\"text-sm font-bold group-[.attention-info]:text-blue-800 group-[.attention-success]:text-green-800 group-[.attention-warning]:text-yellow-800 group-[.attention-danger]:text-red-800\">\n {title}\n </h3>\n <div class=\"mt-2 text-sm group-[.attention-info]:text-blue-700 group-[.attention-warning]:text-yellow-700 group-[.attention-danger]:text-red-700 group-[.attention-success]:text-green-700\">\n {children}\n </div>\n </div>\n {onClose &&\n <div>\n <button type=\"button\" class=\"font-semibold items-center rounded bg-transparent px-2 py-1 text-xs text-gray-900 hover:bg-gray-50\"\n onClick={(e) => {\n e.preventDefault();\n onClose();\n }}\n >\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n }\n </div>\n </div>\n {timeout.d_ms === \"forever\" ? undefined :\n <div class=\"meter group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 h-1 relative overflow-hidden -mt-1\">\n <span class=\"w-full h-full block\"><span class=\"h-full block progress group-[.attention-info]:bg-blue-600 group-[.attention-low]:bg-gray-600 group-[.attention-warning]:bg-yellow-600 group-[.attention-danger]:bg-red-600 group-[.attention-success]:bg-green-600\"></span></span>\n </div>\n }\n\n </div>\n}\n", "import { ComponentChildren, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nexport function CopyIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75\" />\n </svg>\n )\n};\n\nexport function CopiedIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n )\n};\n\nexport function CopyButton({ class: clazz, children, getContent }: { children?: ComponentChildren, class: string, getContent: () => string }): VNode {\n const [copied, setCopied] = useState(false);\n function copyText(): void {\n if (!navigator.clipboard && !window.isSecureContext) {\n alert('clipboard is not available on insecure context (http)')\n }\n if (navigator.clipboard) {\n navigator.clipboard.writeText(getContent() || \"\");\n setCopied(true);\n }\n }\n useEffect(() => {\n if (copied) {\n setTimeout(() => {\n setCopied(false);\n }, 1000);\n }\n }, [copied]);\n\n if (!copied) {\n return (\n <button class={clazz} onClick={e => {\n e.preventDefault()\n copyText()\n }} >\n <CopyIcon />\n {children}\n </button>\n );\n }\n return (\n <button class={clazz} disabled>\n <CopiedIcon />\n {children}\n </button>\n );\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\nimport { TalerError, TalerErrorCode, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function ErrorLoading({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {\n const { i18n } = useTranslationContext()\n switch (error.errorDetail.code) {\n //////////////////\n // Every error that can be produce in a Http Request\n //////////////////\n case TalerErrorCode.GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request was cancelled.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {\n const { requestMethod, requestUrl, throttleStats } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`A lot of request were made to the same server and this action was throttled`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {\n const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The response of the request is malformed.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {\n const { requestMethod, requestUrl } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Could not complete the request due to a network problem.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {\n const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Unexpected request error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n //////////////////\n // Every other error \n //////////////////\n // case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n // return <Attention type=\"danger\" title={i18n.str``}>\n // </Attention>\n // }\n //////////////////\n // Default message for unhandled case\n //////////////////\n default: return <Attention type=\"danger\" title={i18n.str`Unexpected error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify(error.errorDetail, undefined, 2)}\n </pre>\n }\n </Attention>\n }\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 */\n\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n// import { strings as messages } from \"../i18n/strings.js\";\nimport langIcon from \"../assets/lang.svg\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\ntype LangsNames = {\n [P: string]: 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): string {\n if (names[s]) return names[s];\n return String(s);\n}\n\nexport function LangSelector({ }: {}): VNode {\n const [updatingLang, setUpdatingLang] = useState(false);\n const { lang, changeLanguage, completeness, supportedLang } = useTranslationContext();\n const [hidden, setHidden] = useState(true);\n\n useEffect(() => {\n function bodyKeyPress(event: KeyboardEvent) {\n if (event.code === \"Escape\") setHidden(true);\n }\n function bodyOnClick(event: Event) {\n setHidden(true);\n }\n document.body.addEventListener(\"click\", bodyOnClick);\n document.body.addEventListener(\"keydown\", bodyKeyPress as any);\n return () => {\n document.body.removeEventListener(\"keydown\", bodyKeyPress as any);\n document.body.removeEventListener(\"click\", bodyOnClick);\n };\n }, []);\n return (\n <div>\n <div class=\"relative mt-2\">\n <button type=\"button\" class=\"relative w-full cursor-default rounded-md bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600 sm:text-sm sm:leading-6\" aria-haspopup=\"listbox\" aria-expanded=\"true\" aria-labelledby=\"listbox-label\"\n onClick={(e) => {\n setHidden(!hidden);\n e.stopPropagation()\n }}>\n <span class=\"flex items-center\">\n <img alt=\"language\" class=\"h-5 w-5 flex-shrink-0 rounded-full\" src={langIcon} />\n <span class=\"ml-3 block truncate\">{getLangName(lang)}</span>\n </span>\n <span class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <svg class=\"h-5 w-5 text-gray-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </button>\n\n {!hidden &&\n <ul class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\" tabIndex={-1} role=\"listbox\" aria-labelledby=\"listbox-label\" aria-activedescendant=\"listbox-option-3\">\n {Object.keys(supportedLang)\n .filter((l) => l !== lang)\n .map((lang) => (\n <li class=\"text-gray-900 hover:bg-indigo-600 hover:text-white cursor-pointer relative select-none py-2 pl-3 pr-9\" role=\"option\"\n onClick={() => {\n changeLanguage(lang);\n setUpdatingLang(false);\n setHidden(true)\n }}\n >\n <span class=\"font-normal truncate flex justify-between \">\n <span>{getLangName(lang)}</span>\n <span>{(completeness as any)[lang]}%</span>\n </span>\n\n <span class=\"text-indigo-600 absolute inset-y-0 right-0 flex items-center pr-4\">\n {/* <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clip-rule=\"evenodd\" />\n </svg> */}\n </span>\n </li>\n ))}\n\n </ul>\n }\n\n </div>\n </div>\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\nimport { h, VNode } from \"preact\";\n\nexport function Loading(): VNode {\n return (\n <div\n class=\"columns is-centered is-vcentered\"\n style={{\n width: \"100%\",\n height: \"200px\",\n display: \"flex\",\n margin: \"auto\",\n justifyContent: \"center\",\n }}\n >\n <Spinner />\n </div>\n );\n}\n\nfunction Spinner(): VNode {\n return (\n <div class=\"lds-ring\" style={{ margin: \"auto\" }}>\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n}\n", "import { useState } from \"preact/hooks\";\nimport { LangSelector, useNotifications, useTranslationContext } from \"../index.browser.js\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport logo from \"../assets/logo-2021.svg\";\n\ninterface Props {\n title: string;\n iconLinkURL: string;\n profileURL?: string;\n notificationURL?: string;\n children?: ComponentChildren;\n onLogout: (() => void) | undefined;\n sites: Array<Array<string>>;\n supportedLangs: string[]\n}\n\nexport function Header({ title, profileURL, notificationURL, iconLinkURL, sites, onLogout, children }: Props): VNode {\n const { i18n } = useTranslationContext();\n const [open, setOpen] = useState(false)\n const ns = useNotifications();\n\n return <Fragment>\n <header class=\"bg-indigo-600 w-full mx-auto px-2 border-b border-opacity-25 border-indigo-400\">\n <div class=\"flex flex-row h-16 items-center \">\n <div class=\"flex px-2 justify-start\">\n <div class=\"flex-shrink-0 bg-white rounded-lg\">\n <a href={iconLinkURL ?? \"#\"} name=\"logo\">\n <img\n class=\"h-8 w-auto\"\n src={logo}\n alt=\"GNU Taler\"\n style={{ height: \"1.5rem\", margin: \".5rem\" }}\n />\n </a>\n </div>\n <span class=\"flex items-center text-white text-lg font-bold ml-4\">\n {title}\n </span>\n </div>\n <div class=\"flex-1 ml-6 \">\n <div class=\"flex flex-1 space-x-4\">\n {sites.map((site) => {\n if (site.length !== 2) return;\n const [name, url] = site\n return <a href={url} name={`site header ${name}`} class=\"hidden sm:block text-white hover:bg-indigo-500 hover:bg-opacity-75 rounded-md py-2 px-3 text-sm font-medium\">{name}</a>\n })}\n </div>\n </div>\n <div class=\"flex justify-end\">\n {!notificationURL ? undefined :\n <a href={notificationURL} name=\"notifications\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Show notifications</i18n.Translate></span>\n {ns.length > 0 ?\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-10 h-10\">\n <path d=\"M5.85 3.5a.75.75 0 0 0-1.117-1 9.719 9.719 0 0 0-2.348 4.876.75.75 0 0 0 1.479.248A8.219 8.219 0 0 1 5.85 3.5ZM19.267 2.5a.75.75 0 1 0-1.118 1 8.22 8.22 0 0 1 1.987 4.124.75.75 0 0 0 1.48-.248A9.72 9.72 0 0 0 19.266 2.5Z\" />\n <path fill-rule=\"evenodd\" d=\"M12 2.25A6.75 6.75 0 0 0 5.25 9v.75a8.217 8.217 0 0 1-2.119 5.52.75.75 0 0 0 .298 1.206c1.544.57 3.16.99 4.831 1.243a3.75 3.75 0 1 0 7.48 0 24.583 24.583 0 0 0 4.83-1.244.75.75 0 0 0 .298-1.205 8.217 8.217 0 0 1-2.118-5.52V9A6.75 6.75 0 0 0 12 2.25ZM9.75 18c0-.034 0-.067.002-.1a25.05 25.05 0 0 0 4.496 0l.002.1a2.25 2.25 0 1 1-4.5 0Z\" clip-rule=\"evenodd\" />\n </svg>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\" />\n </svg>\n }\n </a>\n }\n {!profileURL ? undefined :\n <a href={profileURL} name=\"profile\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open profile</i18n.Translate></span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </svg>\n </a>\n }\n <button type=\"button\" name=\"toggle sidebar\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\"\n onClick={(e) => {\n setOpen(!open)\n }}>\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open settings</i18n.Translate></span>\n <svg class=\"block h-10 w-10\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n </svg>\n </button>\n </div>\n </div>\n </header>\n\n {\n open &&\n <div class=\"relative z-10\" name=\"sidebar overlay\" aria-labelledby=\"slide-over-title\" role=\"dialog\" aria-modal=\"true\"\n onClick={() => {\n setOpen(false)\n }}>\n <div class=\"fixed inset-0\"></div>\n\n <div class=\"fixed inset-0 overflow-hidden\">\n <div class=\"absolute inset-0 overflow-hidden\">\n <div class=\"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10\">\n <div class=\"pointer-events-auto w-screen max-w-md\" >\n <div class=\"flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl\" onClick={(e) => {\n //do not trigger close if clicking inside the sidebar\n e.stopPropagation();\n }}>\n <div class=\"px-4 sm:px-6\" >\n <div class=\"flex items-start justify-between\" >\n <h2 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"slide-over-title\">\n <i18n.Translate>Menu</i18n.Translate>\n </h2>\n <div class=\"ml-3 flex h-7 items-center\">\n <button type=\"button\" name=\"close sidebar\" class=\"relative rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2\"\n onClick={(e) => {\n setOpen(false)\n }}\n\n >\n <span class=\"absolute -inset-2.5\"></span>\n <span class=\"sr-only\">\n <i18n.Translate>Close panel</i18n.Translate>\n </span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"relative mt-6 flex-1 px-4 sm:px-6\">\n <nav class=\"flex flex-1 flex-col\" aria-label=\"Sidebar\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n {onLogout ?\n <li>\n <a href=\"#\"\n name=\"logout\"\n class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\"\n onClick={() => {\n onLogout();\n setOpen(false)\n }}\n >\n <svg class=\"h-6 w-6 shrink-0 text-indigo-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\" />\n </svg>\n <i18n.Translate>Log out</i18n.Translate>\n </a>\n </li>\n : undefined}\n <li>\n <LangSelector />\n </li>\n {/* CHILDREN */}\n {children}\n {/* /CHILDREN */}\n {sites.length > 0 ?\n <li class=\"block sm:hidden\">\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Sites</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-1\">\n {sites.map(([name, url]) => {\n return <li>\n <a href={url} name={`site ${name}`} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n <span class=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-lg border text-[0.625rem] font-medium bg-white text-gray-400 border-gray-200 group-hover:border-indigo-600 group-hover:text-indigo-600\">&gt;</span>\n <span class=\"truncate\">{name}</span>\n </a>\n </li>\n })}\n </ul>\n </li>\n : undefined\n }\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </Fragment >\n}\n", "import { useTranslationContext } from \"../index.browser.js\";\nimport { h } from \"preact\";\n\nexport function Footer({ testingUrlKey, VERSION, GIT_HASH }: { VERSION?: string, GIT_HASH?: string, testingUrlKey?: string }) {\n const { i18n } = useTranslationContext()\n\n const testingUrl = (testingUrlKey && typeof localStorage !== \"undefined\") && localStorage.getItem(testingUrlKey) ?\n localStorage.getItem(testingUrlKey) ?? undefined :\n undefined\n const versionText = VERSION\n ? GIT_HASH\n ? <a href={`https://git.taler.net/wallet-core.git/tree/?id=${GIT_HASH}`} target=\"_blank\" rel=\"noreferrer noopener\">\n Version {VERSION} ({GIT_HASH.substring(0, 8)})\n </a>\n : VERSION\n : \"\";\n return (\n <footer class=\"bottom-4 my-4 mx-8 bg-slate-200\">\n <div>\n <p class=\"text-xs leading-5 text-gray-400\">\n <i18n.Translate>\n Learn more about <a target=\"_blank\" rel=\"noreferrer noopener\" class=\"font-semibold text-gray-500 hover:text-gray-400\" href=\"https://taler.net\">GNU Taler</a>\n </i18n.Translate>\n </p>\n </div>\n <div style=\"flex-grow:1\" />\n <p class=\"text-xs leading-5 text-gray-400\">\n Copyright &copy; 2014&mdash;2023 Taler Systems SA. {versionText}{\" \"}\n </p>\n {testingUrlKey && testingUrl &&\n\n <p class=\"text-xs leading-5 text-gray-300\">\n Testing with {testingUrl}{\" \"}\n <a\n href=\"\"\n onClick={(e) => {\n e.preventDefault();\n localStorage.removeItem(testingUrlKey);\n window.location.reload();\n }}\n >\n stop testing\n </a>\n </p>\n }\n </footer>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n OperationAlternative,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\n// import { NotificationMessage, notifyInfo } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { HTMLAttributes, useState } from \"preact/compat\";\nimport {\n NotificationMessage,\n buildUnifiedRequestErrorMessage,\n notifyInfo,\n useTranslationContext,\n} from \"../index.browser.js\";\n// import { useBankCoreApiContext } from \"../context/config.js\";\n\n// function errorMap<T extends OperationFail<unknown>>(resp: T, map: (d: T[\"case\"]) => TranslatedString): void {\n\nexport type OnOperationSuccesReturnType<T> = (\n result: T extends OperationOk<any> ? T : never,\n) => TranslatedString | void;\nexport type OnOperationFailReturnType<T> = (\n (d: (T extends OperationFail<any> ? T : never) | (T extends OperationAlternative<any,any> ? T : never)) => TranslatedString)\n\nexport interface ButtonHandler<T extends OperationResult<A, B>, A, B> {\n onClick: () => Promise<T | undefined>;\n onNotification: (n: NotificationMessage) => void;\n onOperationSuccess: OnOperationSuccesReturnType<T>;\n onOperationFail?: OnOperationFailReturnType<T>;\n onOperationComplete?: () => void;\n}\n\ninterface Props<T extends OperationResult<A, B>, A, B>\n extends HTMLAttributes<HTMLButtonElement> {\n handler: ButtonHandler<T, A, B> | undefined;\n}\n\n/**\n * This button accept an async function and report a notification\n * on error or success.\n *\n * When the async function is running the inner text will change into\n * a \"loading\" animation.\n *\n * @param param0\n * @returns\n */\nexport function Button<T extends OperationResult<A, B>, A, B>({\n handler,\n children,\n disabled,\n onClick: clickEvent,\n ...rest\n}: Props<T, A, B>): VNode {\n const { i18n } = useTranslationContext();\n const [running, setRunning] = useState(false);\n return (\n <button\n {...rest}\n disabled={disabled || running}\n onClick={(e) => {\n e.preventDefault();\n if (!handler) {\n return;\n }\n setRunning(true);\n handler\n .onClick()\n .then((resp) => {\n if (resp) {\n if (resp.type === \"ok\") {\n const result: OperationOk<any> = resp;\n // @ts-expect-error this is an operationOk\n const msg = handler.onOperationSuccess(result);\n if (msg) {\n notifyInfo(msg);\n }\n }\n if (resp.type === \"fail\") {\n const d = 'detail' in resp ? resp.detail : undefined\n \n const title = !handler.onOperationFail ? \"Unexpected error.\" as TranslatedString : handler.onOperationFail(resp as any);\n handler.onNotification({\n title,\n type: \"error\",\n description: d && d.hint ? d.hint as TranslatedString : undefined,\n debug: d,\n when: AbsoluteTime.now(),\n });\n }\n }\n if (handler.onOperationComplete) {\n handler.onOperationComplete();\n }\n setRunning(false);\n })\n .catch((error) => {\n console.error(error);\n\n if (error instanceof TalerError) {\n handler.onNotification(\n buildUnifiedRequestErrorMessage(i18n, error),\n );\n } else {\n const description = (\n error instanceof Error ? error.message : String(error)\n ) as TranslatedString;\n\n handler.onNotification({\n title: i18n.str`Operation failed`,\n type: \"error\",\n description,\n when: AbsoluteTime.now(),\n });\n }\n\n if (handler.onOperationComplete) {\n handler.onOperationComplete();\n }\n setRunning(false);\n });\n }}\n >\n {running ? <Wait /> : children}\n </button>\n );\n}\n\nfunction Wait(): VNode {\n return (\n <Fragment>\n <style>\n {`\n #l1 { width: 120px;\n height: 20px;\n -webkit-mask: radial-gradient(circle closest-side, currentColor 90%, #0000) left/20% 100%;\n background: linear-gradient(currentColor 0 0) left/0% 100% no-repeat #ddd;\n animation: l17 2s infinite steps(6);\n }\n @keyframes l17 {\n 100% {background-size:120% 100%}\n`}\n </style>\n <div id=\"l1\" />\n </Fragment>\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\nimport { Fragment, h, VNode } from \"preact\";\n\nexport function ShowInputErrorLabel({\n isDirty,\n message,\n}: {\n message: string | undefined;\n isDirty: boolean;\n}): VNode {\n if (message && isDirty)\n return <div class=\"text-base\" style={{ color: \"red\" }}>{message}</div>;\n return <div class=\"text-base\" style={{ }}> </div>;\n}\n", "import { h, Fragment, VNode } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { Notification } from \"../index.browser.js\";\n\nexport function LocalNotificationBanner({ notification, showDebug }: { notification?: Notification, showDebug?: boolean }): VNode {\n if (!notification) return <Fragment />\n switch (notification.message.type) {\n case \"error\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"danger\" title={notification.message.title} onClose={() => {\n notification.acknowledge()\n }}>\n {notification.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {notification.message.description}\n </div>\n }\n {showDebug && <pre class=\"whitespace-break-spaces \">\n {notification.message.debug}\n </pre>}\n </Attention>\n </div>\n </div>\n case \"info\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"success\" title={notification.message.title} onClose={() => {\n notification.acknowledge();\n }} /></div></div>\n }\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Fragment, VNode, h } from \"preact\"\nimport { Attention, GLOBAL_NOTIFICATION_TIMEOUT as GLOBAL_TOAST_TIMEOUT, Notification, useNotifications } from \"../index.browser.js\"\n\n/**\n * Toasts should be considered when displaying these types of information to the user:\n * \n * Low attention messages that do not require user action\n * Singular status updates\n * Confirmations\n * Information that does not need to be followed up\n * \n * Do not use toasts if the information contains the following:\n * \n * High attention and crtitical information\n * Time-sensitive information\n * Requires user action or input\n * Batch updates\n * \n * @returns \n */\nexport function ToastBanner(): VNode {\n const notifs = useNotifications()\n if (notifs.length === 0) return <Fragment />\n const show = notifs.filter(e => !e.message.ack && !e.message.timeout)\n if (show.length === 0) return <Fragment />\n return <AttentionByType msg={show[0]} />\n}\n\nfunction AttentionByType({ msg }: { msg: Notification }) {\n switch (msg.message.type) {\n case \"error\":\n return <Attention type=\"danger\" title={msg.message.title} onClose={() => {\n msg.acknowledge()\n }} timeout={GLOBAL_TOAST_TIMEOUT}>\n {msg.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {msg.message.description}\n </div>\n }\n </Attention>\n case \"info\":\n return <Attention type=\"success\" title={msg.message.title} onClose={() => {\n msg.acknowledge();\n }} timeout={GLOBAL_TOAST_TIMEOUT} />\n }\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport {\n add as dateAdd,\n sub as dateSub,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n getMonth,\n getYear,\n isSameDay,\n isSameMonth,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function Calendar({\n value,\n onChange,\n}: {\n value: AbsoluteTime | undefined;\n onChange: (v: AbsoluteTime) => void;\n}): VNode {\n const today = startOfDay(new Date());\n const selected = !value ? today : new Date(AbsoluteTime.toStampMs(value));\n const [showingDate, setShowingDate] = useState(selected);\n const month = getMonth(showingDate);\n const year = getYear(showingDate);\n\n const start = startOfWeek(startOfMonth(showingDate));\n const end = endOfWeek(endOfMonth(showingDate));\n const daysInMonth = eachDayOfInterval({ start, end });\n const { i18n } = useTranslationContext();\n const monthNames = [\n i18n.str`January`,\n i18n.str`February`,\n i18n.str`March`,\n i18n.str`April`,\n i18n.str`May`,\n i18n.str`June`,\n i18n.str`July`,\n i18n.str`August`,\n i18n.str`September`,\n i18n.str`October`,\n i18n.str`November`,\n i18n.str`December`,\n ];\n return (\n <div class=\"text-center p-2\">\n <div class=\"flex items-center text-gray-900\">\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { years: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Previous year`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{year}</div>\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { years: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Next year`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n <div class=\"mt-4 flex items-center text-gray-900\">\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { months: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Previous month`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{monthNames[month]}</div>\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 rounded-sm \"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { months: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Next month`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n <div class=\"mt-6 grid grid-cols-7 text-xs leading-6 text-gray-500\">\n <div>M</div>\n <div>T</div>\n <div>W</div>\n <div>T</div>\n <div>F</div>\n <div>S</div>\n <div>S</div>\n </div>\n <div class=\"isolate mt-2\">\n <div class=\"grid grid-cols-7 gap-px rounded-lg bg-gray-200 text-sm shadow ring-1 ring-gray-200\">\n {daysInMonth.map((current, idx) => (\n <button\n type=\"button\"\n key={idx}\n data-month={isSameMonth(current, showingDate)}\n data-today={isSameDay(current, today)}\n data-selected={isSameDay(current, selected)}\n onClick={() => {\n onChange(AbsoluteTime.fromStampMs(current.getTime()));\n }}\n class=\"text-gray-400 hover:bg-gray-700 focus:z-10 py-1.5 \n data-[month=false]:bg-gray-100 data-[month=true]:bg-white \n data-[today=true]:font-semibold \n data-[month=true]:text-gray-900\n data-[today=true]:bg-red-300 data-[today=true]:hover:bg-red-200\n data-[month=true]:hover:bg-gray-200\n data-[selected=true]:!bg-blue-400 data-[selected=true]:hover:!bg-blue-300 \"\n >\n <time\n dateTime={format(current, \"yyyy-MM-dd\")}\n class=\"mx-auto flex h-7 w-7 py-4 px-5 sm:px-8 items-center justify-center rounded-full\"\n >\n {format(current, \"dd\")}\n </time>\n </button>\n ))}\n </div>\n {daysInMonth.length < 40 ? <div class=\"w-7 h-7 m-1.5\" /> : undefined}\n </div>\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired, RenderAddon } from \"./InputLine.js\";\nimport { Addon } from \"./FormProvider.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: Addon;\n after?: Addon;\n}\n\nexport function Caption({ before, after, label, tooltip, help }: Props): VNode {\n return (\n <div class=\"sm:col-span-6 flex\">\n {before !== undefined && <RenderAddon addon={before} />}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && <RenderAddon addon={after} />}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { Addon, UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { useField } from \"./useField.js\";\n\n//@ts-ignore\nconst TooltipIcon = (\n <svg\n class=\"w-5 h-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n);\n\nexport function LabelWithTooltipMaybeRequired({\n label,\n required,\n tooltip,\n}: {\n label: TranslatedString;\n required?: boolean;\n tooltip?: TranslatedString;\n}): VNode {\n const Label = (\n <Fragment>\n <div class=\"flex justify-between\">\n <label\n htmlFor=\"email\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {label}\n </label>\n </div>\n </Fragment>\n );\n const WithTooltip = tooltip ? (\n <div class=\"relative flex flex-grow items-stretch focus-within:z-10\">\n {Label}\n <span class=\"relative flex items-center group pl-2\">\n {TooltipIcon}\n <div class=\"absolute bottom-0 -ml-10 hidden flex-col items-center mb-6 group-hover:flex w-28\">\n <div class=\"relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-black shadow-lg\">\n {tooltip}\n </div>\n <div class=\"w-3 h-3 -mt-2 rotate-45 bg-black\"></div>\n </div>\n </span>\n </div>\n ) : (\n Label\n );\n if (required) {\n return (\n <div class=\"flex justify-between\">\n {WithTooltip}\n <span class=\"text-sm leading-6 text-red-600\">*</span>\n </div>\n );\n }\n return WithTooltip;\n}\n\nexport function RenderAddon({ disabled, addon }: { disabled?: boolean, addon: Addon }): VNode {\n switch (addon.type) {\n case \"text\": {\n return (\n <span class=\"inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {addon.text}\n </span>\n );\n }\n case \"icon\": {\n return (\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n {addon.icon}\n </div>\n );\n }\n case \"button\": {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={addon.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-l-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {addon.children}\n </button>\n );\n }\n }\n}\n\nfunction InputWrapper<T extends object, K extends keyof T>({\n children,\n label,\n tooltip,\n before,\n after,\n help,\n error,\n disabled,\n required,\n}: {\n error?: string;\n disabled: boolean;\n children: ComponentChildren;\n} & UIFormProps<T, K>): VNode {\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <div class=\"relative mt-2 flex rounded-md shadow-sm\">\n {before && <RenderAddon disabled={disabled} addon={before} />}\n\n {children}\n\n {after && <RenderAddon disabled={disabled} addon={after} />}\n </div>\n {error && (\n <p class=\"mt-2 text-sm text-red-600\" id=\"email-error\">\n {error}\n </p>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n\nfunction defaultToString(v: unknown) {\n return v === undefined ? \"\" : typeof v !== \"object\" ? String(v) : \"\";\n}\nfunction defaultFromString(v: string) {\n return v;\n}\n\ntype InputType = \"text\" | \"text-area\" | \"password\" | \"email\" | \"number\";\n\nexport function InputLine<T extends object, K extends keyof T>(\n props: { type: InputType } & UIFormProps<T, K>,\n): VNode {\n const { name, placeholder, before, after, converter, type } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state, error } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n // const [text, setText] = useState(\"\");\n const fromString: (s: string) => any =\n converter?.fromStringUI ?? defaultFromString;\n const toString: (s: any) => string = converter?.toStringUI ?? defaultToString;\n\n // useEffect(() => {\n // const newValue = toString(value);\n // if (newValue) {\n // setText(newValue);\n // }\n // }, [value]);\n\n if (state.hidden) return <div />;\n\n let clazz =\n \"block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200\";\n if (before) {\n switch (before.type) {\n case \"icon\": {\n clazz += \" pl-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-r-md \";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-r-md rounded-none \";\n break;\n }\n }\n }\n if (after) {\n switch (after.type) {\n case \"icon\": {\n clazz += \" pr-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-l-md\";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-l-md rounded-none \";\n break;\n }\n }\n }\n const showError = value !== undefined && error;\n if (showError) {\n clazz +=\n \" text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500\";\n } else {\n clazz +=\n \" text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-indigo-600\";\n }\n\n if (type === \"text-area\") {\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? error : undefined}\n >\n <textarea\n rows={4}\n name={String(name)}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n }\n\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? error : undefined}\n >\n <input\n name={String(name)}\n type={type}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // onBlur={() => {\n // onChange(fromString(value as any));\n // }}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormProvider, UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { useField } from \"./useField.js\";\n\nfunction Option({\n label,\n disabled,\n isFirst,\n isLast,\n isSelected,\n onClick,\n}: {\n label: TranslatedString;\n isFirst?: boolean;\n isLast?: boolean;\n isSelected?: boolean;\n disabled?: boolean;\n onClick: () => void;\n}): VNode {\n let clazz = \"relative flex border p-4 focus:outline-none disabled:text-grey\";\n if (isFirst) {\n clazz += \" rounded-tl-md rounded-tr-md \";\n }\n if (isLast) {\n clazz += \" rounded-bl-md rounded-br-md \";\n }\n if (isSelected) {\n clazz += \" z-10 border-indigo-200 bg-indigo-50 \";\n } else {\n clazz += \" border-gray-200\";\n }\n if (disabled) {\n clazz +=\n \" cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray\";\n } else {\n clazz += \" cursor-pointer\";\n }\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"privacy-setting\"\n checked={isSelected}\n disabled={disabled}\n onClick={onClick}\n class=\"mt-0.5 h-4 w-4 shrink-0 text-indigo-600 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200 focus:ring-indigo-600\"\n aria-labelledby=\"privacy-setting-0-label\"\n aria-describedby=\"privacy-setting-0-description\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n id=\"privacy-setting-0-label\"\n disabled\n class=\"block text-sm font-medium\"\n >\n {label}\n </span>\n {/* <!-- Checked: \"text-indigo-700\", Not Checked: \"text-gray-500\" --> */}\n {/* <span\n id=\"privacy-setting-0-description\"\n class=\"block text-sm\"\n >\n This project would be available to anyone who has the link\n </span> */}\n </span>\n </label>\n );\n}\n\nexport function noHandlerPropsAndNoContextForField(\n field: string | number | symbol,\n): never {\n throw Error(\n `Field ${field.toString()} doesn't have handler and is not in a form provider context.`,\n );\n}\n\nexport function InputArray<T extends object, K extends keyof T>(\n props: {\n fields: UIFormField[];\n labelField: string;\n } & UIFormProps<T, K>,\n): VNode {\n const { fields, labelField, name, label, required, tooltip } = props;\n // const { value, onChange, state } = useField<T, K>(name);\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n if (!props.handler && !fieldCtx) {\n throw Error(\"\");\n }\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const list = (value ?? []) as Array<Record<string, string | undefined>>;\n const [selectedIndex, setSelected] = useState<number | undefined>(undefined);\n const selected =\n selectedIndex === undefined ? undefined : list[selectedIndex];\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n\n <div class=\"-space-y-px rounded-md bg-white \">\n {list.map((v, idx) => {\n return (\n <Option\n label={v[labelField] as TranslatedString}\n key={idx}\n isSelected={selectedIndex === idx}\n isLast={idx === list.length - 1}\n disabled={selectedIndex !== undefined && selectedIndex !== idx}\n isFirst={idx === 0}\n onClick={() => {\n setSelected(selectedIndex === idx ? undefined : idx);\n }}\n />\n );\n })}\n {!state.disabled && (\n <div class=\"pt-2\">\n <Option\n label={\"Add...\" as TranslatedString}\n isSelected={selectedIndex === list.length}\n isLast\n isFirst\n disabled={\n selectedIndex !== undefined && selectedIndex !== list.length\n }\n onClick={() => {\n setSelected(\n selectedIndex === list.length ? undefined : list.length,\n );\n }}\n />\n </div>\n )}\n </div>\n {selectedIndex !== undefined && (\n /**\n * This form provider act as a substate of the parent form\n * Consider creating an InnerFormProvider since not every feature is expected\n */\n <FormProvider\n initial={selected}\n readOnly={state.disabled}\n computeFormState={(v) => {\n // current state is ignored\n // the state is defined by the parent form\n\n // elements should be present in the state object since this is expected to be an array\n //@ts-ignore\n // return state.elements[selectedIndex];\n return {}\n }}\n onSubmit={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as any);\n setSelected(undefined);\n }}\n onUpdate={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as any);\n }}\n >\n <div class=\"px-4 py-6\">\n <div class=\"grid grid-cols-1 gap-y-8 \">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n </div>\n </FormProvider>\n )}\n {selectedIndex !== undefined && (\n <div class=\"flex items-center pt-3\">\n <div class=\"flex-auto\">\n {selected !== undefined && (\n <button\n type=\"button\"\n onClick={() => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1);\n onChange(newValue as any);\n setSelected(undefined);\n }}\n class=\"block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n Remove\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n", "import {\n AbsoluteTime,\n AmountJson,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, VNode, createContext, h } from \"preact\";\nimport { MutableRef, useState } from \"preact/hooks\";\n\nexport interface FormType<T extends object> {\n value: MutableRef<Partial<T>>;\n initial?: Partial<T>;\n readOnly?: boolean;\n onUpdate?: (v: Partial<T>) => void;\n computeFormState?: (v: Partial<T>) => FormState<T>;\n}\n\nexport const FormContext = createContext<FormType<any>| undefined>(undefined);\n\n/**\n * Map of {[field]:FieldUIOptions}\n * for every field of type\n * - any native (string, number, etc...)\n * - absoluteTime\n * - amountJson\n *\n * except for:\n * - object => recurse into\n * - array => behavior result and element field\n */\nexport type FormState<T extends object | undefined> = {\n [field in keyof T]?: T[field] extends AbsoluteTime\n ? FieldUIOptions\n : T[field] extends AmountJson\n ? FieldUIOptions\n : T[field] extends Array<infer P extends object>\n ? InputArrayFieldState<P>\n : T[field] extends object | undefined\n ? FormState<T[field]>\n : FieldUIOptions;\n};\n\n/**\n * Properties that can be defined by design or by computing state\n */\nexport type FieldUIOptions = {\n /* instruction to be shown in the field */\n placeholder?: TranslatedString;\n /* long text help to be shown on demand */\n tooltip?: TranslatedString;\n /* short text to be shown next to the field*/\n\n help?: TranslatedString;\n /* should show as disabled and readonly */\n disabled?: boolean;\n /* should not show */\n hidden?: boolean;\n\n /* show a mark as required*/\n required?: boolean;\n};\n\n/**\n * properties only to be defined on design time\n */\nexport interface UIFormProps<T extends object, K extends keyof T>\n extends FieldUIOptions {\n // property name of the object\n name: K;\n\n // label if the field\n label: TranslatedString;\n before?: Addon;\n after?: Addon;\n\n // converter to string and back\n converter?: StringConverter<T[K]>;\n\n handler?: UIFieldHandler;\n}\n\nexport type UIFieldHandler = {\n value: string | undefined;\n onChange: (s: string) => void;\n state: FieldUIOptions;\n error?: TranslatedString;\n};\n\nexport interface IconAddon {\n type: \"icon\";\n icon: VNode;\n}\nexport interface ButtonAddon {\n type: \"button\";\n onClick: () => void;\n children: ComponentChildren;\n}\nexport interface TextAddon {\n type: \"text\";\n text: TranslatedString;\n}\nexport type Addon = IconAddon | ButtonAddon | TextAddon;\n\nexport interface StringConverter<T> {\n toStringUI: (v?: T) => string;\n fromStringUI: (v?: string) => T;\n}\n\nexport interface InputArrayFieldState<P extends object> extends FieldUIOptions {\n elements?: FormState<P>[];\n}\n\nexport type FormProviderProps<T extends object> = Omit<FormType<T>, \"value\"> & {\n onSubmit?: (v: Partial<T>, s: FormState<T> | undefined) => void;\n children?: ComponentChildren;\n};\n\nexport function FormProvider<T extends object>({\n children,\n initial,\n onUpdate: notify,\n onSubmit,\n computeFormState,\n readOnly,\n}: FormProviderProps<T>): VNode {\n const [state, setState] = useState<Partial<T>>(initial ?? {});\n const value = { current: state };\n const onUpdate = (v: typeof state) => {\n setState(v);\n if (notify) notify(v);\n };\n return (\n <FormContext.Provider\n value={{ initial, value, onUpdate, computeFormState, readOnly }}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n //@ts-ignore\n if (onSubmit)\n onSubmit(\n value.current,\n !computeFormState ? undefined : computeFormState(value.current),\n );\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n", "import { h as create, Fragment, VNode } from \"preact\";\nimport { Caption } from \"./Caption.js\";\nimport { Group } from \"./Group.js\";\nimport { InputAbsoluteTime } from \"./InputAbsoluteTime.js\";\nimport { InputAmount } from \"./InputAmount.js\";\nimport { InputArray } from \"./InputArray.js\";\nimport { InputChoiceHorizontal } from \"./InputChoiceHorizontal.js\";\nimport { InputChoiceStacked } from \"./InputChoiceStacked.js\";\nimport { InputFile } from \"./InputFile.js\";\nimport { InputInteger } from \"./InputInteger.js\";\nimport { InputSelectMultiple } from \"./InputSelectMultiple.js\";\nimport { InputSelectOne } from \"./InputSelectOne.js\";\nimport { InputText } from \"./InputText.js\";\nimport { InputTextArea } from \"./InputTextArea.js\";\nimport { InputToggle } from \"./InputToggle.js\";\nimport { Addon, StringConverter, UIFieldHandler } from \"./FormProvider.js\";\nimport { InternationalizationAPI, UIFieldBaseDescription } from \"../index.browser.js\";\nimport { assertUnreachable, TranslatedString } from \"@gnu-taler/taler-util\";\nimport {UIFormFieldBaseConfig, UIFormFieldConfig} from \"./ui-form.js\";\n/**\n * Constrain the type with the ui props\n */\ntype FieldType<T extends object = any, K extends keyof T = any> = {\n group: Parameters<typeof Group>[0];\n caption: Parameters<typeof Caption>[0];\n array: Parameters<typeof InputArray<T, K>>[0];\n file: Parameters<typeof InputFile<T, K>>[0];\n selectOne: Parameters<typeof InputSelectOne<T, K>>[0];\n selectMultiple: Parameters<typeof InputSelectMultiple<T, K>>[0];\n text: Parameters<typeof InputText<T, K>>[0];\n textArea: Parameters<typeof InputTextArea<T, K>>[0];\n choiceStacked: Parameters<typeof InputChoiceStacked<T, K>>[0];\n choiceHorizontal: Parameters<typeof InputChoiceHorizontal<T, K>>[0];\n absoluteTime: Parameters<typeof InputAbsoluteTime<T, K>>[0];\n integer: Parameters<typeof InputInteger<T, K>>[0];\n toggle: Parameters<typeof InputToggle<T, K>>[0];\n amount: Parameters<typeof InputAmount<T, K>>[0];\n};\n\n/**\n * List all the form fields so typescript can type-check the form instance\n */\nexport type UIFormField =\n | { type: \"group\"; properties: FieldType[\"group\"] }\n | { type: \"caption\"; properties: FieldType[\"caption\"] }\n | { type: \"array\"; properties: FieldType[\"array\"] }\n | { type: \"file\"; properties: FieldType[\"file\"] }\n | { type: \"amount\"; properties: FieldType[\"amount\"] }\n | { type: \"selectOne\"; properties: FieldType[\"selectOne\"] }\n | {\n type: \"selectMultiple\";\n properties: FieldType[\"selectMultiple\"];\n }\n | { type: \"text\"; properties: FieldType[\"text\"] }\n | { type: \"textArea\"; properties: FieldType[\"textArea\"] }\n | {\n type: \"choiceStacked\";\n properties: FieldType[\"choiceStacked\"];\n }\n | {\n type: \"choiceHorizontal\";\n properties: FieldType[\"choiceHorizontal\"];\n }\n | { type: \"integer\"; properties: FieldType[\"integer\"] }\n | { type: \"toggle\"; properties: FieldType[\"toggle\"] }\n | {\n type: \"absoluteTime\";\n properties: FieldType[\"absoluteTime\"];\n };\n\ntype FieldComponentFunction<key extends keyof FieldType> = (\n props: FieldType[key],\n) => VNode;\n\ntype UIFormFieldMap = {\n [key in keyof FieldType]: FieldComponentFunction<key>;\n};\n\n/**\n * Maps input type with component implementation\n */\nconst UIFormConfiguration: UIFormFieldMap = {\n group: Group,\n caption: Caption,\n //@ts-ignore\n array: InputArray,\n text: InputText,\n //@ts-ignore\n file: InputFile,\n textArea: InputTextArea,\n //@ts-ignore\n absoluteTime: InputAbsoluteTime,\n //@ts-ignore\n choiceStacked: InputChoiceStacked,\n //@ts-ignore\n choiceHorizontal: InputChoiceHorizontal,\n integer: InputInteger,\n //@ts-ignore\n selectOne: InputSelectOne,\n //@ts-ignore\n selectMultiple: InputSelectMultiple,\n //@ts-ignore\n toggle: InputToggle,\n //@ts-ignore\n amount: InputAmount,\n};\n\nexport function RenderAllFieldsByUiConfig({\n fields,\n}: {\n fields: UIFormField[];\n}): VNode {\n return create(\n Fragment,\n {},\n fields.map((field, i) => {\n const Component = UIFormConfiguration[\n field.type\n ] as FieldComponentFunction<any>;\n return Component(field.properties);\n }),\n );\n}\n\n// type FormSet<T extends object> = {\n// Provider: typeof FormProvider<T>;\n// InputLine: <K extends keyof T>() => typeof InputLine<T, K>;\n// InputChoiceHorizontal: <K extends keyof T>() => typeof InputChoiceHorizontal<T, K>;\n// };\n\n/**\n * Helper function that created a typed object.\n *\n * @returns\n */\n// export function createNewForm<T extends object>() {\n// const res: FormSet<T> = {\n// Provider: FormProvider,\n// InputLine: () => InputLine,\n// InputChoiceHorizontal: () => InputChoiceHorizontal,\n// };\n// return {\n// Provider: res.Provider,\n// InputLine: res.InputLine(),\n// InputChoiceHorizontal: res.InputChoiceHorizontal(),\n// };\n// }\n\n/**\n * convert field configuration to render function\n * \n * @param i18n_ \n * @param fieldConfig \n * @param form \n * @returns \n */\nexport function convertUiField(\n i18n_: InternationalizationAPI,\n fieldConfig: UIFormFieldConfig[],\n form: object,\n getConverterById: GetConverterById,\n): UIFormField[] {\n return fieldConfig.map((config) => {\n // NON input fields\n switch (config.type) {\n case \"caption\": {\n const resp: UIFormField = {\n type: config.type,\n properties: converBaseFieldsProps(i18n_, config.properties),\n };\n return resp;\n }\n case \"group\": {\n const resp: UIFormField = {\n type: config.type,\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n fields: convertUiField(i18n_, config.properties.fields, form, getConverterById),\n },\n };\n return resp;\n }\n }\n // Input Fields\n switch (config.type) {\n case \"array\": {\n return {\n type: \"array\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n labelField: config.properties.labelFieldId,\n fields: convertUiField(i18n_, config.properties.fields, form, getConverterById),\n },\n } as UIFormField;\n }\n case \"absoluteTime\": {\n return {\n type: \"absoluteTime\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"amount\": {\n return {\n type: \"amount\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById), \n },\n } as UIFormField;\n }\n case \"choiceHorizontal\": {\n return {\n type: \"choiceHorizontal\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"choiceStacked\": {\n return {\n type: \"choiceStacked\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n \n },\n }as UIFormField;\n }\n case \"file\":{\n return {\n type: \"file\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n accept: config.properties.accept,\n maxBites: config.properties.maxBytes,\n },\n } as UIFormField;\n }\n case \"integer\":{\n return {\n type: \"integer\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"selectMultiple\":{\n return {\n type: \"selectMultiple\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"selectOne\": {\n return {\n type: \"selectOne\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"text\": {\n return {\n type: \"text\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"textArea\": {\n return {\n type: \"text\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"toggle\": {\n return {\n type: \"toggle\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n default: {\n assertUnreachable(config);\n }\n }\n });\n}\n\n\n\nfunction getAddonById(_id: string | undefined): Addon {\n return undefined!;\n}\n\n\ntype GetConverterById = (\n id: string | undefined,\n config: unknown,\n) => StringConverter<unknown>;\n\n\nfunction converInputFieldsProps(\n form: object,\n p: UIFormFieldBaseConfig,\n getConverterById: GetConverterById,\n) {\n return {\n converter: getConverterById(p.converterId, p),\n handler: getValueDeeper2(form, p.id.split(\".\")),\n name: p.name,\n required: p.required,\n disabled: p.disabled,\n help: p.help,\n placeholder: p.placeholder,\n tooltip: p.tooltip,\n label: p.label as TranslatedString,\n };\n}\n\nfunction converBaseFieldsProps(\n i18n_: InternationalizationAPI,\n p: UIFieldBaseDescription,\n) {\n return {\n after: getAddonById(p.addonAfterId),\n before: getAddonById(p.addonBeforeId),\n hidden: p.hidden,\n name: p.name,\n help: i18n_.str`${p.help}`,\n label: i18n_.str`${p.label}`,\n tooltip: i18n_.str`${p.tooltip}`,\n };\n}\n\nfunction getValueDeeper2(\n object: Record<string, any>,\n names: string[],\n): UIFieldHandler {\n if (names.length === 0) return object as UIFieldHandler;\n const [head, ...rest] = names;\n if (!head) {\n return getValueDeeper2(object, rest);\n }\n if (object === undefined) {\n throw Error(\"handler not found\");\n }\n return getValueDeeper2(object[head], rest);\n}\n\n\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired, RenderAddon } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField, convertUiField } from \"./forms.js\";\nimport { Addon, FormProvider } from \"./FormProvider.js\";\nimport { useField } from \"./useField.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\nimport { getConverterById } from \"./converter.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: Addon;\n after?: Addon;\n fields: UIFormField[];\n}\n\nexport function Group({\n before,\n after,\n label,\n tooltip,\n help,\n fields,\n}: Props): VNode {\n return (\n <div class=\"sm:col-span-6 p-4 rounded-lg border-r-2 border-2 bg-gray-50\">\n {before !== undefined && <RenderAddon addon={before} />}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && <RenderAddon addon={after} />}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-2 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig \n fields={fields}\n />\n </div>\n </div>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport { format, parse } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Calendar } from \"./Calendar.js\";\nimport { Dialog } from \"./Dialog.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputAbsoluteTime<T extends object, K extends keyof T>(\n properties: { pattern?: string } & UIFormProps<T, K>,\n): VNode {\n const pattern = properties.pattern ?? \"dd/MM/yyyy\";\n const [open, setOpen] = useState(false);\n\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(properties.name);\n const { value, onChange } =\n properties.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(properties.name);\n return (\n <Fragment>\n <InputLine<T, K>\n type=\"text\"\n after={{\n type: \"button\",\n onClick: () => {\n setOpen(true);\n },\n // icon: <CalendarIcon class=\"h-6 w-6\" />,\n children: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\"\n />\n </svg>\n ),\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AbsoluteTime | undefined => {\n if (!v) return undefined;\n try {\n const t_ms = parse(v, pattern, Date.now()).getTime();\n return AbsoluteTime.fromMilliseconds(t_ms);\n } catch (e) {\n return undefined;\n }\n },\n //@ts-ignore\n toStringUI: (v: AbsoluteTime | undefined) => {\n return !v || !v.t_ms\n ? undefined\n : v.t_ms === \"never\"\n ? \"never\"\n : format(v.t_ms, pattern);\n },\n }}\n {...properties}\n />\n {open && (\n <Dialog onClose={() => setOpen(false)}>\n <Calendar\n value={(value as AbsoluteTime) ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any);\n setOpen(false);\n }}\n />\n </Dialog>\n )}\n {/* {open &&\n <Dialog onClose={() => setOpen(false)} >\n <TimePicker value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n }}\n onConfirm={() => {\n setOpen(false)\n }} />\n </Dialog>} */}\n </Fragment>\n );\n}\n", "import { ComponentChildren, VNode, h } from \"preact\";\n\nexport function Dialog({ children, onClose }: { onClose?: () => void; children: ComponentChildren }): VNode {\n return <div class=\"relative z-10\" aria-labelledby=\"modal-title\" role=\"dialog\" aria-modal=\"true\" onClick={onClose}>\n <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n <div class=\"flex min-h-full items-center justify-center p-4 text-center \">\n <div class=\"relative transform overflow-hidden rounded-lg bg-white p-1 text-left shadow-xl transition-all\" onClick={(e) => e.stopPropagation()}>\n {children}\n </div>\n </div>\n </div>\n </div>\n}\n", "import { useContext } from \"preact/compat\";\nimport { FieldUIOptions, FormContext } from \"./FormProvider.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n\nexport interface InputFieldHandler<Type> {\n value: Type;\n onChange: (s: Type) => void;\n state: FieldUIOptions;\n error?: TranslatedString | undefined;\n}\n\n/**\n * @depreacted removing this so we don't depend on context to create a form\n * @param name \n * @returns \n */\nexport function useField<T extends object, K extends keyof T>(\n name: K,\n): InputFieldHandler<T[K]> | undefined {\n const ctx = useContext(FormContext);\n if (!ctx) {\n //no context, can't be used\n return undefined;\n }\n const {\n value: formValue,\n computeFormState,\n onUpdate: notifyUpdate,\n readOnly: readOnlyForm,\n } = ctx\n\n type P = typeof name;\n type V = T[P];\n const formState = computeFormState ? computeFormState(formValue.current) : {};\n\n const fieldValue = readField(formValue.current, String(name)) as V;\n\n const fieldState =\n readField<Partial<FieldUIOptions>>(formState, String(name)) ?? {};\n\n //compute default state\n const state = {\n disabled: readOnlyForm ? true : (fieldState.disabled ?? false),\n hidden: fieldState.hidden ?? false,\n help: fieldState.help,\n elements: \"elements\" in fieldState ? fieldState.elements ?? [] : [],\n };\n\n function onChange(value: V): void {\n // setCurrentValue(value);\n formValue.current = setValueDeeper(\n formValue.current,\n String(name).split(\".\"),\n value,\n );\n if (notifyUpdate) {\n notifyUpdate(formValue.current);\n }\n }\n\n return {\n value: fieldValue,\n onChange,\n state,\n };\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 */\nfunction readField<T>(\n object: any,\n name: string,\n): T | undefined {\n return name.split(\".\").reduce((prev, current) => {\n return prev ? prev[current] : undefined;\n }, object);\n}\n\nfunction setValueDeeper(object: any, names: string[], value: any): any {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n if (object === undefined) {\n return { [head]: setValueDeeper({}, rest, value) };\n }\n return { ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) };\n}\n", "import { AmountJson, Amounts, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputAmount<T extends object, K extends keyof T>(\n props: { currency?: string } & UIFormProps<T, K>,\n): VNode {\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n const currency =\n !value || !(value as any).currency\n ? props.currency\n : (value as any).currency;\n return (\n <InputLine<T, K>\n type=\"text\"\n before={{\n type: \"text\",\n text: currency as TranslatedString,\n }}\n //@ts-ignore \n converter={ props.converter ?? {\n\n fromStringUI: (v): AmountJson => {\n return (\n Amounts.parse(`${currency}:${v}`) ??\n Amounts.zeroOfCurrency(currency)\n );\n },\n toStringUI: (v: AmountJson) => {\n return v === undefined ? \"\" : Amounts.stringifyValue(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport interface ChoiceH<V> {\n label: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceHorizontal<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceH<string>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { choices, label, tooltip, help, required, converter } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"isolate inline-flex rounded-md shadow-sm\">\n {choices.map((choice, idx) => {\n const isFirst = idx === 0;\n const isLast = idx === choices.length - 1;\n let clazz =\n \"relative inline-flex items-center px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 focus:z-10\";\n if (converter?.fromStringUI(choice.value as any) === value) {\n clazz +=\n \" text-white bg-indigo-600 hover:bg-indigo-500 ring-2 ring-indigo-600 hover:ring-indigo-500\";\n } else {\n clazz += \" hover:bg-gray-100 border-gray-300\";\n }\n if (isFirst) {\n clazz += \" rounded-l-md\";\n } else {\n clazz += \" -ml-px\";\n }\n if (isLast) {\n clazz += \" rounded-r-md\";\n }\n return (\n <button\n type=\"button\"\n key={idx}\n disabled={state.disabled}\n label={choice.label}\n class={clazz}\n onClick={(e) => {\n onChange(\n (value === choice.value ? undefined : converter?.fromStringUI(choice.value as any)) as any,\n );\n }}\n >\n {choice.label}\n </button>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport interface ChoiceS<V> {\n label: TranslatedString;\n description?: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceStacked<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"space-y-4\">\n {choices.map((choice, idx) => {\n // const currentValue = !converter\n // ? choice.value\n // : converter.fromStringUI(choice.value) ?? \"\";\n\n let clazz =\n \"border relative block cursor-pointer rounded-lg bg-white px-6 py-4 shadow-sm focus:outline-none sm:flex sm:justify-between\";\n if (choice.value === value) {\n clazz +=\n \" border-transparent border-indigo-600 ring-2 ring-indigo-600\";\n } else {\n clazz += \" border-gray-300\";\n }\n\n return (\n <label key={idx} class={clazz}>\n <input\n type=\"radio\"\n name=\"server-size\"\n // defaultValue={choice.value}\n disabled={state.disabled}\n value={\n (!converter\n ? (choice.value as string)\n : converter?.toStringUI(choice.value)) ?? \"\"\n }\n onClick={(e) => {\n onChange(\n (value === choice.value\n ? undefined\n : choice.value) as any,\n );\n }}\n class=\"sr-only\"\n aria-labelledby=\"server-size-0-label\"\n aria-describedby=\"server-size-0-description-0 server-size-0-description-1\"\n />\n <span class=\"flex items-center\">\n <span class=\"flex flex-col text-sm\">\n <span\n id=\"server-size-0-label\"\n class=\"font-medium text-gray-900\"\n >\n {choice.label}\n </span>\n {choice.description !== undefined && (\n <span\n id=\"server-size-0-description-0\"\n class=\"text-gray-500\"\n >\n <span class=\"block sm:inline\">\n {choice.description}\n </span>\n </span>\n )}\n </span>\n </span>\n </label>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputFile<T extends object, K extends keyof T>(\n props: { maxBites: number; accept?: string } & UIFormProps<T, K>,\n): VNode {\n const {\n label,\n tooltip,\n required,\n help: propsHelp,\n maxBites,\n accept,\n } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const help = propsHelp ?? state.help;\n if (state.hidden) {\n return <div />;\n }\n\n const valueStr = !value ? \"\" : value.toString();\n const firstColon = valueStr.indexOf(\";\");\n\n const { fileName, dataUri } = valueStr.startsWith(\"file:\")\n ? {\n fileName: valueStr.substring(5, firstColon),\n dataUri: valueStr.substring(firstColon + 1),\n }\n : {\n fileName: \"\",\n dataUri: valueStr,\n };\n\n return (\n <div class=\"col-span-full\">\n <LabelWithTooltipMaybeRequired\n label={label}\n tooltip={tooltip}\n required={required}\n />\n {!dataUri ? (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 py-1\">\n <div class=\"text-center\">\n <svg\n class=\"mx-auto h-12 w-12 text-gray-300\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.5 6a2.25 2.25 0 012.25-2.25h16.5A2.25 2.25 0 0122.5 6v12a2.25 2.25 0 01-2.25 2.25H3.75A2.25 2.25 0 011.5 18V6zM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0021 18v-1.94l-2.69-2.689a1.5 1.5 0 00-2.12 0l-.88.879.97.97a.75.75 0 11-1.06 1.06l-5.16-5.159a1.5 1.5 0 00-2.12 0L3 16.061zm10.125-7.81a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n {!state.disabled && (\n <div class=\"my-2 flex text-sm leading-6 text-gray-600\">\n <label\n for={String(props.name)}\n class=\"relative cursor-pointer rounded-md bg-white font-semibold text-indigo-600 focus-within:outline-none focus-within:ring-2 focus-within:ring-indigo-600 focus-within:ring-offset-2 hover:text-indigo-500\"\n >\n <span>Upload a file</span>\n <input\n id={String(props.name)}\n type=\"file\"\n class=\"sr-only\"\n accept={accept}\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 > maxBites) {\n return onChange(undefined!);\n }\n const fileName = f[0].name;\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 if (fileName) {\n return onChange(\n `file:${fileName};data:${f[0].type};base64,${b64}` as any,\n );\n } else {\n return onChange(\n `data:${f[0].type};base64,${b64}` as any,\n );\n }\n });\n }}\n />\n </label>\n {/* <p class=\"pl-1\">or drag and drop</p> */}\n </div>\n )}\n </div>\n </div>\n ) : (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 relative\">\n {(dataUri as string).startsWith(\"data:image/\") ? (\n <img src={dataUri} class=\" h-24 w-full object-cover relative\" />\n ) : (\n <div />\n )}\n {fileName ? (\n <div class=\"absolute rounded-lg border flex justify-center text-xl items-center text-white \">\n {fileName}\n </div>\n ) : (\n <Fragment />\n )}\n\n {!state.disabled && (\n <div\n class=\"opacity-0 hover:opacity-70 duration-300 absolute rounded-lg border inset-0 z-10 flex justify-center text-xl items-center bg-black text-white cursor-pointer \"\n onClick={() => {\n onChange(undefined!);\n }}\n >\n Clear\n </div>\n )}\n </div>\n )}\n {help && <p class=\"text-xs leading-5 text-gray-600 mt-2\">{help}</p>}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputInteger<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return (\n <InputLine\n type=\"number\"\n converter={{\n //@ts-ignore\n fromStringUI: (v): number => {\n return !v ? 0 : Number.parseInt(v, 10);\n },\n //@ts-ignore\n toStringUI: (v?: number): string => {\n return v === undefined ? \"\" : String(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectMultiple<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n unique?: boolean;\n max?: number;\n } & UIFormProps<T, K>,\n): VNode {\n const { converter, label, choices, placeholder, tooltip, required, unique, max } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce(\n (prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n },\n {} as Record<string, string>,\n );\n\n const list = (value ?? []) as string[];\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {list.map((v, idx) => {\n return (\n <span\n key={idx}\n class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 text-xs font-medium text-gray-600\"\n >\n {choiceMap[v]}\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n const newValue = [...list];\n newValue.splice(idx, 1);\n onChange(newValue as any);\n setFilter(undefined);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n );\n })}\n\n {!state.disabled && (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n key={idx}\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n if (unique && list.indexOf(v.value as string) !== -1) {\n return;\n }\n if (max !== undefined && list.length >= max) {\n return;\n }\n const newValue = [...list];\n newValue.splice(0, 0, v.value as string);\n onChange(newValue as any);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputSelectOne<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { label, choices, placeholder, tooltip, required } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce(\n (prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n },\n {} as Record<string, string>,\n );\n\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {value ? (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 font-medium text-gray-600\">\n {choiceMap[value as string]}\n <button\n type=\"button\"\n onClick={() => {\n onChange(undefined!);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n ) : (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n key={idx}\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n onChange(v.value as any);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\n\nexport function InputText<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputTextArea<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text-area\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputToggle<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const isOn = !!value;\n return (\n <div class=\"sm:col-span-6\">\n <div class=\"flex items-center justify-between\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <button\n type=\"button\"\n data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n onChange(!isOn as any);\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={isOn}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { FormProvider, FormProviderProps, FormState } from \"./FormProvider.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n// import { FlexibleForm } from \"./ui-form.js\";\n\n/**\n * Flexible form uses a DoubleColumForm for design\n * and may have a dynamic properties defined by \n * behavior function.\n */\nexport interface FlexibleForm_Deprecated<T extends object> {\n design: DoubleColumnForm_Deprecated;\n behavior?: (form: Partial<T>) => FormState<T>;\n}\n\n/**\n * Double column form\n * \n * Form with sections, every sections have a title and may\n * have a description.\n * Every sections contain a set of fields.\n */\nexport type DoubleColumnForm_Deprecated = Array<DoubleColumnFormSection_Deprecated | undefined>;\n\nexport type DoubleColumnFormSection_Deprecated = {\n title: TranslatedString;\n description?: TranslatedString;\n fields: UIFormField[];\n};\n\n/**\n * Form Provider implementation that use FlexibleForm\n * to defined behavior and fields.\n */\nexport function DefaultForm<T extends object>({\n initial,\n onUpdate,\n form,\n onSubmit,\n children,\n readOnly,\n}: Omit<FormProviderProps<T>, \"computeFormState\"> & { form: FlexibleForm_Deprecated<T> }): VNode {\n return (\n <FormProvider\n initial={initial}\n onUpdate={onUpdate}\n onSubmit={onSubmit}\n readOnly={readOnly}\n // computeFormState={form.behavior}\n >\n <div class=\"space-y-10 divide-y -mt-5 divide-gray-900/10\">\n {form.design.map((section, i) => {\n if (!section) return <Fragment />;\n return (\n <div key={i} class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n {section.title}\n </h2>\n {section.description && (\n <p class=\"mt-1 text-sm leading-6 text-gray-600\">\n {section.description}\n </p>\n )}\n </div>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2\">\n <div class=\"p-3\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig\n key={i}\n fields={section.fields}\n />\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {children}\n </FormProvider>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { getHours, getMinutes, getSeconds, setHours } from \"date-fns\"\nimport { Fragment, VNode, h } from \"preact\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function TimePicker({ value, onChange, onConfirm }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void, onConfirm: () => void }): VNode {\n const date = !value ? new Date() : new Date(AbsoluteTime.toStampMs(value))\n const hours = getHours(date) % 12\n const minutes = getMinutes(date)\n const seconds = getSeconds(date)\n\n const { i18n } = useTranslationContext()\n\n return <Fragment>\n <div class=\"flex flex-col bg-white rounded-t-sm justify-around\" >\n {/* time selection */}\n <div id=\"\" class=\"bg-[#3b71ca] dark:bg-zinc-700 h-24 rounded-t-lg p-12 flex flex-row items-center justify-center\">\n <div class=\"flex w-full justify-evenly\">\n <div class=\"\">\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \"\n style=\"pointer-events: none;\">\n {new String(hours).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(minutes).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(seconds).padStart(2, \"0\")}\n </button>\n </span>\n </div>\n <div class=\"flex flex-col justify-center text-[18px] text-[#ffffff8a] \">\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n AM\n </button>\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n PM\n </button>\n </div>\n </div>\n </div>\n {/* clock */}\n <div id=\"\" class=\"mt-2 min-w-[310px] max-w-[325px] min-h-[305px] overflow-x-hidden h-full flex justify-center mx-auto flex-col items-center dark:bg-zinc-500\" >\n <div class=\"relative rounded-[100%] w-[260px] h-[260px] cursor-default my-0 mx-auto bg-[#00000012] dark:bg-zinc-600/50 animate-[show-up-clock_350ms_linear]\" >\n\n <span class=\"top-1/2 left-1/2 w-[6px] h-[6px] -translate-y-1/2 -translate-x-1/2 rounded-[50%] bg-[#3b71ca] absolute\" ></span>\n <div class=\"bg-[#3b71ca] bottom-1/2 h-2/5 left-[calc(50%-1px)] rtl:!left-auto origin-[center_bottom_0] rtl:!origin-[50%_50%_0] w-[2px] absolute\" style={{ transform: \"rotateZ(60deg)\", height: \"calc(35% + 1px)\" }}>\n {/* <div class=\"-top-[21px] -left-[15px] w-[4px] border-[14px] border-solid border-[#3b71ca] h-[4px] box-content rounded-[100%] absolute\" style=\"background-color: rgb(25, 118, 210);\"></div> */}\n </div>\n\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 12).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 224px;\">\n <span>0</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 1).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 209.263px;\">\n <span >1</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 2).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" data-selected={true} style=\"left: 209.263px; bottom: 169px;\" >\n <span >2</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 3).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 224px; bottom: 114px;\">\n <span >3</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 4).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 209.263px; bottom: 59px;\">\n <span >4</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 5).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 18.7372px;\">\n <span >5</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 6).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 4px;\">\n <span >6</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 7).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 18.7372px;\">\n <span >7</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 8).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 59px;\">\n <span >8</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 9).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 4px; bottom: 114px;\">\n <span >9</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 10).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 169px;\">\n <span >10</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 11).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 209.263px;\">\n <span >11</span>\n </span>\n </div>\n </div>\n </div>\n <div id=\"\" class=\"rounded-b-lg flex justify-between items-center w-full h-[56px] px-[12px] bg-white dark:bg-zinc-500\">\n <div class=\"w-full flex justify-end\">\n <button\n type=\"submit\"\n onClick={onConfirm}\n class=\"rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </div>\n </Fragment>\n}\n", "import {\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForBoolean,\n codecForConstString,\n codecForLazy,\n codecForList,\n codecForNumber,\n codecForString,\n codecForTimestamp,\n codecOptional,\n Integer,\n TalerProtocolTimestamp,\n} from \"@gnu-taler/taler-util\";\n\nexport type FlexibleForm = DoubleColumnForm;\n\nexport interface DoubleColumnForm {\n type: \"double-column\";\n design: Array<DoubleColumnFormSection>;\n // behavior?: (form: Partial<T>) => FormState<T>;\n}\n\nexport type DoubleColumnFormSection = {\n title: string;\n description?: string;\n fields: UIFormFieldConfig[];\n};\n\n// export interface BaseForm {\n// state: TalerExchangeApi.AmlState;\n// threshold: AmountJson;\n// }\n\nexport type UIFormFieldConfig =\n | UIFormFieldConfigAbsoluteTime\n | UIFormFieldConfigAmount\n | UIFormFieldConfigArray\n | UIFormFieldConfigCaption\n | UIFormFieldConfigChoiseHorizontal\n | UIFormFieldConfigChoiseStacked\n | UIFormFieldConfigFile\n | UIFormFieldConfigGroup\n | UIFormFieldConfigInteger\n | UIFormFieldConfigSelectMultiple\n | UIFormFieldConfigSelectOne\n | UIFormFieldConfigText\n | UIFormFieldConfigTextArea\n | UIFormFieldConfigToggle;\n\ntype UIFormFieldConfigAbsoluteTime = {\n type: \"absoluteTime\";\n properties: UIFormFieldBaseConfig & {\n max?: TalerProtocolTimestamp;\n min?: TalerProtocolTimestamp;\n pattern: string;\n };\n};\n\ntype UIFormFieldConfigAmount = {\n type: \"amount\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n currency: string;\n };\n};\n\ntype UIFormFieldConfigArray = {\n type: \"array\";\n properties: UIFormFieldBaseConfig & {\n // id of the field shown when the array is collapsed\n labelFieldId: UIHandlerId;\n fields: UIFormFieldConfig[];\n };\n};\n\ntype UIFormFieldConfigCaption = {\n type: \"caption\";\n properties: UIFieldBaseDescription;\n};\n\ntype UIFormFieldConfigGroup = {\n type: \"group\";\n properties: UIFieldBaseDescription & {\n fields: UIFormFieldConfig[];\n };\n};\n\ntype UIFormFieldConfigChoiseHorizontal = {\n type: \"choiceHorizontal\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\n\ntype UIFormFieldConfigChoiseStacked = {\n type: \"choiceStacked\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\n\ntype UIFormFieldConfigFile = {\n type: \"file\";\n properties: UIFormFieldBaseConfig & {\n maxBytes?: Integer;\n minBytes?: Integer;\n // comma-separated list of one or more file types\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept#unique_file_type_specifiers\n accept?: string;\n };\n};\ntype UIFormFieldConfigInteger = {\n type: \"integer\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n };\n};\n\ninterface SelectUiChoice {\n label: string;\n description?: string;\n value: string;\n}\n\ntype UIFormFieldConfigSelectMultiple = {\n type: \"selectMultiple\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n unique?: boolean;\n choices: Array<SelectUiChoice>;\n };\n};\ntype UIFormFieldConfigSelectOne = {\n type: \"selectOne\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\ntype UIFormFieldConfigText = {\n type: \"text\";\n properties: UIFormFieldBaseConfig;\n};\ntype UIFormFieldConfigTextArea = {\n type: \"textArea\";\n properties: UIFormFieldBaseConfig;\n};\ntype UIFormFieldConfigToggle = {\n type: \"toggle\";\n properties: UIFormFieldBaseConfig;\n};\n\nexport type UIFieldBaseDescription = {\n /* label if the field, visible for the user */\n label: string;\n /* long text to be shown on user demand */\n tooltip?: string;\n\n /* short text to be shown close to the field */\n help?: string;\n\n /* name of the field, useful for a11y */\n name: string;\n\n /* if the field should be initialy hidden */\n hidden?: boolean;\n /* ui element to show before */\n addonBeforeId?: string;\n /* ui element to show after */\n addonAfterId?: string;\n};\n\nexport type UIFormFieldBaseConfig = UIFieldBaseDescription & {\n /* example to be shown inside the field */\n placeholder?: string;\n\n /* show a mark as required */\n required?: boolean;\n\n /* readonly and dim */\n disabled?: boolean;\n\n /* conversion id to conver the string into the value type\n the id should be known to the ui impl\n */\n converterId?: string;\n\n /* property id of the form */\n id: UIHandlerId;\n};\n\ndeclare const __handlerId: unique symbol;\nexport type UIHandlerId = string & { [__handlerId]: true };\n\n// FIXME: validate well formed ui field id\nconst codecForUiFieldId = codecForString as () => Codec<UIHandlerId>;\n\nconst codecForUIFormFieldBaseDescriptionTemplate = <\n T extends UIFieldBaseDescription,\n>() =>\n buildCodecForObject<T>()\n .property(\"addonAfterId\", codecOptional(codecForString()))\n .property(\"addonBeforeId\", codecOptional(codecForString()))\n .property(\"hidden\", codecOptional(codecForBoolean()))\n .property(\"help\", codecOptional(codecForString()))\n .property(\"label\", codecForString())\n .property(\"name\", codecForString())\n .property(\"tooltip\", codecOptional(codecForString()));\n\nconst codecForUIFormFieldBaseConfigTemplate = <\n T extends UIFormFieldBaseConfig,\n>() =>\n codecForUIFormFieldBaseDescriptionTemplate<T>()\n .property(\"id\", codecForUiFieldId())\n .property(\"converterId\", codecOptional(codecForString()))\n .property(\"disabled\", codecOptional(codecForBoolean()))\n .property(\"required\", codecOptional(codecForBoolean()))\n .property(\"placeholder\", codecOptional(codecForString()));\n\nconst codecForUIFormFieldBaseConfig = (): Codec<UIFormFieldBaseConfig> =>\n codecForUIFormFieldBaseConfigTemplate().build(\"UIFieldToggleProperties\");\n\nconst codecForUIFormFieldAbsoluteTimeConfig = (): Codec<\n UIFormFieldConfigAbsoluteTime[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigAbsoluteTime[\"properties\"]\n >()\n .property(\"pattern\", codecForString())\n .property(\"max\", codecOptional(codecForTimestamp))\n .property(\"min\", codecOptional(codecForTimestamp))\n .build(\"UIFormFieldConfigAbsoluteTime.properties\");\n\nconst codecForUiFormFieldAbsoluteTime =\n (): Codec<UIFormFieldConfigAbsoluteTime> =>\n buildCodecForObject<UIFormFieldConfigAbsoluteTime>()\n .property(\"type\", codecForConstString(\"absoluteTime\"))\n .property(\"properties\", codecForUIFormFieldAbsoluteTimeConfig())\n .build(\"UIFormFieldConfigAbsoluteTime\");\n\nconst codecForUIFormFieldAmountConfig = (): Codec<\n UIFormFieldConfigAmount[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigAmount[\"properties\"]>()\n .property(\"currency\", codecForString())\n .property(\"max\", codecOptional(codecForNumber()))\n .property(\"min\", codecOptional(codecForNumber()))\n .build(\"UIFormFieldConfigAmount.properties\");\n\nconst codecForUiFormFieldAmount = (): Codec<UIFormFieldConfigAmount> =>\n buildCodecForObject<UIFormFieldConfigAmount>()\n .property(\"type\", codecForConstString(\"amount\"))\n .property(\"properties\", codecForUIFormFieldAmountConfig())\n .build(\"UIFormFieldConfigAmount\");\n\nconst codecForUIFormFieldArrayConfig = (): Codec<\n UIFormFieldConfigArray[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigArray[\"properties\"]>()\n .property(\"labelFieldId\", codecForUiFieldId())\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"UIFormFieldConfigArray.properties\");\n\nconst codecForUiFormFieldArray = (): Codec<UIFormFieldConfigArray> =>\n buildCodecForObject<UIFormFieldConfigArray>()\n .property(\"type\", codecForConstString(\"array\"))\n .property(\"properties\", codecForUIFormFieldArrayConfig())\n .build(\"UIFormFieldConfigArray\");\n\nconst codecForUiFormFieldCaption = (): Codec<UIFormFieldConfigCaption> =>\n buildCodecForObject<UIFormFieldConfigCaption>()\n .property(\"type\", codecForConstString(\"caption\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigCaption\");\n\nconst codecForUiFormSelectUiChoice = (): Codec<SelectUiChoice> =>\n buildCodecForObject<SelectUiChoice>()\n .property(\"description\", codecOptional(codecForString()))\n .property(\"label\", codecForString())\n .property(\"value\", codecForString())\n .build(\"SelectUiChoice\");\n\nconst codecForUIFormFieldWithChoiseConfig = (): Codec<\n UIFormFieldConfigChoiseHorizontal[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigChoiseHorizontal[\"properties\"]\n >()\n .property(\"choices\", codecForList(codecForUiFormSelectUiChoice()))\n .build(\"UIFormFieldConfigChoiseHorizontal.properties\");\n\nconst codecForUiFormFieldChoiceHorizontal =\n (): Codec<UIFormFieldConfigChoiseHorizontal> =>\n buildCodecForObject<UIFormFieldConfigChoiseHorizontal>()\n .property(\"type\", codecForConstString(\"choiceHorizontal\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigChoiseHorizontal\");\n\nconst codecForUiFormFieldChoiceStacked =\n (): Codec<UIFormFieldConfigChoiseStacked> =>\n buildCodecForObject<UIFormFieldConfigChoiseStacked>()\n .property(\"type\", codecForConstString(\"choiceStacked\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigChoiseStacked\");\n\nconst codecForUIFormFieldFileConfig = (): Codec<\n UIFormFieldConfigFile[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigFile[\"properties\"]>()\n .property(\"accept\", codecOptional(codecForString()))\n .property(\"maxBytes\", codecOptional(codecForNumber()))\n .property(\"minBytes\", codecOptional(codecForNumber()))\n .build(\"UIFormFieldConfigFile.properties\");\n\nconst codecForUiFormFieldFile = (): Codec<UIFormFieldConfigFile> =>\n buildCodecForObject<UIFormFieldConfigFile>()\n .property(\"type\", codecForConstString(\"file\"))\n .property(\"properties\", codecForUIFormFieldFileConfig())\n .build(\"UIFormFieldConfigFile\");\n\nconst codecForUIFormFieldWithFieldsConfig = (): Codec<\n UIFormFieldConfigGroup[\"properties\"]\n> =>\n codecForUIFormFieldBaseDescriptionTemplate<\n UIFormFieldConfigGroup[\"properties\"]\n >()\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"UIFormFieldConfigGroup.properties\");\n\nconst codecForUiFormFieldGroup = (): Codec<UIFormFieldConfigGroup> =>\n buildCodecForObject<UIFormFieldConfigGroup>()\n .property(\"type\", codecForConstString(\"group\"))\n .property(\"properties\", codecForUIFormFieldWithFieldsConfig())\n .build(\"UiFormFieldGroup\");\n\nconst codecForUiFormFieldInteger = (): Codec<UIFormFieldConfigInteger> =>\n buildCodecForObject<UIFormFieldConfigInteger>()\n .property(\"type\", codecForConstString(\"integer\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigInteger\");\n\nconst codecForUIFormFieldSelectMultipleConfig = (): Codec<\n UIFormFieldConfigSelectMultiple[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigSelectMultiple[\"properties\"]\n >()\n .property(\"max\", codecOptional(codecForNumber()))\n .property(\"min\", codecOptional(codecForNumber()))\n .property(\"unique\", codecOptional(codecForBoolean()))\n .property(\"choices\", codecForList(codecForUiFormSelectUiChoice()))\n .build(\"UIFormFieldConfigSelectMultiple.properties\");\n\nconst codecForUiFormFieldSelectMultiple =\n (): Codec<UIFormFieldConfigSelectMultiple> =>\n buildCodecForObject<UIFormFieldConfigSelectMultiple>()\n .property(\"type\", codecForConstString(\"selectMultiple\"))\n .property(\"properties\", codecForUIFormFieldSelectMultipleConfig())\n .build(\"UiFormFieldSelectMultiple\");\n\nconst codecForUiFormFieldSelectOne = (): Codec<UIFormFieldConfigSelectOne> =>\n buildCodecForObject<UIFormFieldConfigSelectOne>()\n .property(\"type\", codecForConstString(\"selectOne\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigSelectOne\");\n\nconst codecForUiFormFieldText = (): Codec<UIFormFieldConfigText> =>\n buildCodecForObject<UIFormFieldConfigText>()\n .property(\"type\", codecForConstString(\"text\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigText\");\n\nconst codecForUiFormFieldTextArea = (): Codec<UIFormFieldConfigTextArea> =>\n buildCodecForObject<UIFormFieldConfigTextArea>()\n .property(\"type\", codecForConstString(\"textArea\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigTextArea\");\n\nconst codecForUiFormFieldToggle = (): Codec<UIFormFieldConfigToggle> =>\n buildCodecForObject<UIFormFieldConfigToggle>()\n .property(\"type\", codecForConstString(\"toggle\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigToggle\");\n\nconst codecForUiFormField = (): Codec<UIFormFieldConfig> =>\n buildCodecForUnion<UIFormFieldConfig>()\n .discriminateOn(\"type\")\n .alternative(\"array\", codecForLazy(codecForUiFormFieldArray))\n .alternative(\"group\", codecForLazy(codecForUiFormFieldGroup))\n .alternative(\"absoluteTime\", codecForUiFormFieldAbsoluteTime())\n .alternative(\"amount\", codecForUiFormFieldAmount())\n .alternative(\"caption\", codecForUiFormFieldCaption())\n .alternative(\"choiceHorizontal\", codecForUiFormFieldChoiceHorizontal())\n .alternative(\"choiceStacked\", codecForUiFormFieldChoiceStacked())\n .alternative(\"file\", codecForUiFormFieldFile())\n .alternative(\"integer\", codecForUiFormFieldInteger())\n .alternative(\"selectMultiple\", codecForUiFormFieldSelectMultiple())\n .alternative(\"selectOne\", codecForUiFormFieldSelectOne())\n .alternative(\"text\", codecForUiFormFieldText())\n .alternative(\"textArea\", codecForUiFormFieldTextArea())\n .alternative(\"toggle\", codecForUiFormFieldToggle())\n .build(\"UIFormField\");\n\nconst codecForDoubleColumnFormSection = (): Codec<DoubleColumnFormSection> =>\n buildCodecForObject<DoubleColumnFormSection>()\n .property(\"title\", codecForString())\n .property(\"description\", codecOptional(codecForString()))\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"DoubleColumnFormSection\");\n\nconst codecForDoubleColumnForm = (): Codec<DoubleColumnForm> =>\n buildCodecForObject<DoubleColumnForm>()\n .property(\"type\", codecForConstString(\"double-column\"))\n .property(\"design\", codecForList(codecForDoubleColumnFormSection()))\n .build(\"DoubleColumnForm\");\n\nconst codecForFlexibleForm = (): Codec<FlexibleForm> =>\n buildCodecForUnion<FlexibleForm>()\n .discriminateOn(\"type\")\n .alternative(\"double-column\", codecForDoubleColumnForm())\n .build<FlexibleForm>(\"FlexibleForm\");\n\nconst codecForFormMetadata = (): Codec<FormMetadata> =>\n buildCodecForObject<FormMetadata>()\n .property(\"label\", codecForString())\n .property(\"id\", codecForString())\n .property(\"version\", codecForNumber())\n .property(\"config\", codecForFlexibleForm())\n .build(\"FormMetadata\");\n\nexport const codecForUIForms = (): Codec<UiForms> =>\n buildCodecForObject<UiForms>()\n .property(\"forms\", codecForList(codecForFormMetadata()))\n .build(\"UiForms\");\n\nexport type FormMetadata = {\n label: string;\n id: string;\n version: number;\n config: FlexibleForm;\n};\n\nexport interface UiForms {\n // Where libeufin backend is localted\n // default: window.origin without \"webui/\"\n forms: Array<FormMetadata>;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n TalerExchangeApi,\n} from \"@gnu-taler/taler-util\";\nimport { format, parse } from \"date-fns\";\nimport { StringConverter } from \"./FormProvider.js\";\n\nexport const amlStateConverter = {\n toStringUI: stringifyAmlState,\n fromStringUI: parseAmlState,\n};\n\nfunction stringifyAmlState(s: TalerExchangeApi.AmlState | undefined): string {\n if (s === undefined) return \"\";\n switch (s) {\n case TalerExchangeApi.AmlState.normal:\n return \"normal\";\n case TalerExchangeApi.AmlState.pending:\n return \"pending\";\n case TalerExchangeApi.AmlState.frozen:\n return \"frozen\";\n }\n}\n\nfunction parseAmlState(s: string | undefined): TalerExchangeApi.AmlState {\n switch (s) {\n case \"normal\":\n return TalerExchangeApi.AmlState.normal;\n case \"pending\":\n return TalerExchangeApi.AmlState.pending;\n case \"frozen\":\n return TalerExchangeApi.AmlState.frozen;\n default:\n throw Error(`unknown AML state: ${s}`);\n }\n}\n\nfunction amountConverter(config: any): StringConverter<AmountJson> {\n const currency = config[\"currency\"];\n if (!currency || typeof currency !== \"string\") {\n throw Error(`amount converter needs a currency`);\n }\n return {\n fromStringUI(v: string | undefined): AmountJson {\n // FIXME: requires currency\n return Amounts.parse(`${currency}:${v}`) ?? Amounts.zeroOfCurrency(currency);\n },\n toStringUI(v: unknown): string {\n return v === undefined ? \"\" : Amounts.stringifyValue(v as AmountJson);\n },\n };\n}\n\nfunction absTimeConverter(config: any): StringConverter<AbsoluteTime> {\n const pattern = config[\"pattern\"];\n if (!pattern || typeof pattern !== \"string\") {\n throw Error(`absTime converter needs a pattern`);\n }\n return {\n fromStringUI(v: string | undefined): AbsoluteTime {\n if (v === undefined) {\n return AbsoluteTime.never();\n }\n try {\n const time = parse(v, pattern, new Date());\n return AbsoluteTime.fromMilliseconds(time.getTime());\n } catch(e) {\n return AbsoluteTime.never();\n }\n },\n toStringUI(v: unknown): string {\n if (v === undefined) return \"\";\n const d = v as AbsoluteTime;\n if (d.t_ms === \"never\") return \"never\";\n try {\n return format(d.t_ms, pattern)\n } catch (e) {\n return \"\"\n }\n },\n };\n}\n\nexport function getConverterById(\n id: string | undefined,\n config: unknown,\n): StringConverter<unknown> {\n if (id === \"Taler.AbsoluteTime\") {\n // @ts-expect-error check this\n return absTimeConverter(config);\n }\n if (id === \"Taler.Amount\") {\n // @ts-expect-error check this\n return amountConverter(config);\n }\n if (id === \"TalerExchangeApi.AmlState\") {\n // @ts-expect-error check this\n return amlStateConverter;\n }\n return undefined!;\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 {\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\";\nimport { ExampleItemSetup } from \"./tests/hook.js\";\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 contextProps: {},\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<Props extends object = {}> {\n name: string;\n examples: ExampleItem<Props>[];\n}\n\nexport interface ExampleItem<Props extends object = {}> {\n group: string;\n component: string;\n name: string;\n render: ExampleItemSetup<Props>;\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 url = new URL(window.location.href);\n const initialSelection = getSelectionFromLocationHash(\n url.hash,\n examplesInGroups,\n );\n\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 (url.hash) {\n const hash = url.hash.substring(1);\n const found = document.getElementById(hash);\n if (found) {\n setTimeout(() => {\n found.scrollIntoView({\n block: \"center\",\n });\n }, 50);\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", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { canonicalizeBaseUrl } from \"@gnu-taler/taler-util\";\nimport {\n BrowserHashNavigationProvider,\n ExchangeApiProvider,\n Loading,\n TranslationProvider,\n UiForms,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { SWRConfig } from \"swr\";\nimport { ExchangeAmlFrame } from \"./ExchangeAmlFrame.js\";\nimport { Routing } from \"./Routing.js\";\nimport { UiSettingsProvider } from \"./context/ui-settings.js\";\nimport { strings } from \"./i18n/strings.js\";\nimport \"./scss/main.css\";\nimport { UiSettings, fetchUiSettings } from \"./context/ui-settings.js\";\nimport { UiFormsProvider, fetchUiForms } from \"./context/ui-forms.js\";\n\nconst WITH_LOCAL_STORAGE_CACHE = false;\n\nexport function App(): VNode {\n const [settings, setSettings] = useState<UiSettings>();\n const [forms, setForms] = useState<UiForms>();\n useEffect(() => {\n fetchUiSettings(setSettings);\n fetchUiForms(setForms);\n }, []);\n if (!settings || !forms) return <Loading />;\n\n const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);\n return (\n <UiSettingsProvider value={settings}>\n <TranslationProvider\n source={strings}\n completeness={{\n es: strings[\"es\"].completeness,\n de: strings[\"de\"].completeness,\n }}\n >\n <ExchangeApiProvider\n baseUrl={new URL(\"/\", baseUrl)}\n frameOnError={ExchangeAmlFrame}\n >\n <SWRConfig\n value={{\n provider: WITH_LOCAL_STORAGE_CACHE\n ? localStorageProvider\n : undefined,\n // normally, do not revalidate\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n revalidateOnMount: undefined,\n focusThrottleInterval: undefined,\n\n // normally, do not refresh\n refreshInterval: undefined,\n dedupingInterval: 2000,\n refreshWhenHidden: false,\n refreshWhenOffline: false,\n\n // ignore errors\n shouldRetryOnError: false,\n errorRetryCount: 0,\n errorRetryInterval: undefined,\n\n // do not go to loading again if already has data\n keepPreviousData: true,\n }}\n >\n <BrowserHashNavigationProvider>\n <UiFormsProvider value={forms}>\n <Routing />\n </UiFormsProvider>\n </BrowserHashNavigationProvider>\n </SWRConfig>\n </ExchangeApiProvider>\n </TranslationProvider>\n </UiSettingsProvider>\n );\n}\n\nfunction localStorageProvider(): Map<unknown, unknown> {\n const map = new Map(JSON.parse(localStorage.getItem(\"app-cache\") || \"[]\"));\n\n window.addEventListener(\"beforeunload\", () => {\n const appCache = JSON.stringify(Array.from(map.entries()));\n localStorage.setItem(\"app-cache\", appCache);\n });\n return map;\n}\n\nfunction getInitialBackendBaseURL(\n backendFromSettings: string | undefined,\n): string {\n const overrideUrl =\n typeof localStorage !== \"undefined\"\n ? localStorage.getItem(\"exchange-base-url\")\n : undefined;\n let result: string;\n\n if (!overrideUrl) {\n // normal path\n if (!backendFromSettings) {\n console.error(\n \"ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'\",\n );\n result = window.origin;\n } else {\n result = backendFromSettings;\n }\n } else {\n // testing/development path\n result = overrideUrl;\n }\n try {\n return canonicalizeBaseUrl(result);\n } catch (e) {\n // fall back\n return canonicalizeBaseUrl(window.origin);\n }\n}\n", "import 'client-only';\nimport ReactExports, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { serialize, OBJECT, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, createCacheHelper, isUndefined, getTimestamp, UNDEFINED, isFunction, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects } from 'swr/_internal';\nexport { mutate, preload, useSWRConfig } from 'swr/_internal';\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = ReactExports.use || ((promise)=>{\n if (promise.status === 'pending') {\n throw promise;\n } else if (promise.status === 'fulfilled') {\n return promise.value;\n } else if (promise.status === 'rejected') {\n throw promise.reason;\n } else {\n promise.status = 'pending';\n promise.then((v)=>{\n promise.status = 'fulfilled';\n promise.value = v;\n }, (e)=>{\n promise.status = 'rejected';\n promise.reason = e;\n });\n throw promise;\n }\n});\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n // `key` is the identifier of the SWR internal state,\n // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n // All of them are derived from `_key`.\n const [key, fnArg] = serialize(_key);\n // If it's the initial render of this hook.\n const 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 const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(prev[t], current[t])) {\n if (!isUndefined(prev[t])) {\n return false;\n }\n if (!compare(returnedData, current[t])) {\n return false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n return false;\n }\n }\n }\n return true;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n if (!isUndefined(revalidateIfStale)) return revalidateIfStale;\n return true;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n const cachedData = getCache();\n const initialData = getInitialCache();\n const clientSnapshot = getSelectedCache(cachedData);\n const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = clientSnapshot;\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n if (compareResult) {\n // Mentally, we should always return the `memorizedSnapshot` here\n // as there's no change between the new and old snapshots.\n // However, since the `isEqual` function only compares selected fields,\n // the values of the unselected fields might be changed. That's\n // simply because we didn't track them.\n // To support the case in https://github.com/vercel/swr/pull/2576,\n // we need to update these fields in the `memorizedSnapshot` too\n // with direct mutations to ensure the snapshot is always up-to-date\n // even for the unselected fields, but only trigger re-renders when\n // the selected fields are changed.\n memorizedSnapshot.data = newSnapshot.data;\n memorizedSnapshot.isLoading = newSnapshot.isLoading;\n memorizedSnapshot.isValidating = newSnapshot.isValidating;\n memorizedSnapshot.error = newSnapshot.error;\n return memorizedSnapshot;\n } else {\n memorizedSnapshot = newSnapshot;\n return newSnapshot;\n }\n },\n ()=>serverSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined(cachedData) ? fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;\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 const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) 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 mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n [newData, startAt] = FETCH[key];\n newData = await newData;\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 (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n const revalidators = EVENT_REVALIDATORS[key];\n if (revalidators && revalidators[0]) {\n revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n }\n }, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `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 [\n key,\n cache\n ]);\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 const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n let nextFocusRevalidatedAt = 0;\n const onRevalidate = (type, opts = {})=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n return revalidate(opts);\n }\n return;\n };\n const 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 // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation\n if (shouldDoInitialRevalidation) {\n if (isUndefined(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\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 ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n // We only start the 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 (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `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 // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any initial data. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using suspense in SSR.');\n }\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 const req = PRELOAD[key];\n if (!isUndefined(req)) {\n const promise = boundMutate(req);\n use(promise);\n }\n if (isUndefined(error)) {\n const promise = revalidate(WITH_DEDUPE);\n if (!isUndefined(returnedData)) {\n promise.status = 'fulfilled';\n promise.value = true;\n }\n use(promise);\n } else {\n throw error;\n }\n }\n return {\n mutate: boundMutate,\n get data () {\n stateDependencies.data = true;\n return returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n};\nconst SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error, isLoading } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (isLoading) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n", "import React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can 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\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst isPromiseLike = (x)=>isFunction(x.then);\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).\nconst table = new WeakMap();\n// counter of the key\nlet 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// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const constructor = arg && arg.constructor;\n const isDate = constructor == Date;\n let result;\n let 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) 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 const 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 } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n }\n ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the 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 workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || 'Deno' in window;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\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.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nconst FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\nconst ERROR_REVALIDATE_EVENT = 3;\n\nvar events = {\n __proto__: null,\n ERROR_REVALIDATE_EVENT: ERROR_REVALIDATE_EVENT,\n FOCUS_EVENT: FOCUS_EVENT,\n MUTATE_EVENT: MUTATE_EVENT,\n RECONNECT_EVENT: RECONNECT_EVENT\n};\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const revalidate = options.revalidate !== false;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for (const key of it){\n if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n const startRevalidate = ()=>{\n const revalidators = EVENT_REVALIDATORS[key];\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 delete PRELOAD[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](MUTATE_EVENT).then(()=>get().data);\n }\n }\n return get().data;\n };\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 startRevalidate();\n }\n let data = _data;\n let error;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isPromiseLike(data)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((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 if (beforeMutationTs !== MUTATION[key][0]) {\n if (error) throw error;\n return data;\n } else if (error && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data: committedData,\n _c: UNDEFINED\n });\n }\n }\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 const populateCachedData = populateCache(data, committedData);\n set({\n data: populateCachedData,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n } else {\n // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n set({\n data,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n }\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n Promise.resolve(startRevalidate()).then(()=>{\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n });\n // Throw error or return data\n if (error) {\n if (throwOnError) throw error;\n return;\n }\n return data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (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 is bound to\n // the cache.\n // The 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 const 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 const EVENT_REVALIDATORS = {};\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = {};\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for (const fn of subs){\n fn(value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n {},\n {},\n {},\n mutate,\n setter,\n subscribe\n ]);\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 be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\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 }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\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 [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = (currentData, newData)=>stableHash(currentData) == stableHash(newData);\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n 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,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1, fallback: f1 } = a;\n const { use: u2, fallback: f2 } = b;\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\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // initialize the cache only on first access.\n const cacheContextRef = useRef(UNDEFINED);\n if (provider && !cacheContextRef.current) {\n cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n }\n const cacheContext = cacheContextRef.current;\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(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\nconst INFINITE_PREFIX = '$inf$';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const [key, fnArg] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(fnArg);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const [key] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n if (key.startsWith(INFINITE_PREFIX)) {\n // we want the infinite fetcher to be called.\n // handling of the PRELOAD cache happens there.\n return fetcher_(...args);\n }\n const req = PRELOAD[key];\n if (isUndefined(req)) return fetcher_(...args);\n delete PRELOAD[key];\n return req;\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const 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\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { INFINITE_PREFIX, IS_REACT_LEGACY, IS_SERVER, OBJECT, SWRConfig, SWRGlobalState, UNDEFINED, cache, compare, createCacheHelper, defaultConfig, defaultConfigOptions, getTimestamp, hasRequestAnimationFrame, initCache, internalMutate, isDocumentDefined, isFunction, isPromiseLike, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, mutate, noop, normalize, preload, preset, rAF, events as revalidateEvents, serialize, slowConnection, stableHash, subscribeCallback, useIsomorphicLayoutEffect, useSWRConfig, withArgs, withMiddleware };\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TranslatedString } from \"@gnu-taler/taler-util\";\nimport {\n Footer,\n Header,\n ToastBanner,\n notifyError,\n notifyException,\n useNavigationContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, VNode, h } from \"preact\";\nimport { useEffect, useErrorBoundary } from \"preact/hooks\";\nimport { privatePages } from \"./Routing.js\";\nimport { useUiSettingsContext } from \"./context/ui-settings.js\";\nimport { OfficerState } from \"./hooks/officer.js\";\nimport {\n getAllBooleanPreferences,\n getLabelForPreferences,\n usePreferences,\n} from \"./hooks/preferences.js\";\nimport { HomeIcon } from \"./pages/Cases.js\";\n\n/**\n * mapping route to view\n * not found (error page)\n * nested, index element, relative routes\n * link interception\n * form POST interception, call action\n * fromData => Object.fromEntries\n * segments in the URL\n * navigationState: idle, submitting, loading\n * form GET interception: does a navigateTo\n * form GET Sync:\n * 1.- back after submit: useEffect to sync URL to form\n * 2.- refresh after submit: input default value\n * useSubmit for form submission onChange, history replace\n *\n * post form without redirect\n *\n *\n * @param param0\n * @returns\n */\n\nconst GIT_HASH = typeof __GIT_HASH__ !== \"undefined\" ? __GIT_HASH__ : undefined;\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : undefined;\n\n/**\n * TO BE FIXED:\n *\n * 1.- when the form change to other form and both form share the same structure\n * the same input component may be rendered in the same place,\n * since input are uncontrolled the are not re-rendered and since they are\n * uncontrolled it will keep the value of the previous form.\n * One solutions could be to remove the form when unloading and when the new\n * form load it will start without previous vdom, preventing the cache\n * to create this behavior.\n * Other solutions could be using IDs in the fields that are constructed\n * with the ID of the form, so two fields of different form will need to re-render\n * cleaning up the state of the previous form.\n *\n * 2.- currently the design prop and the behavior prop of the flexible form\n * are two side of the same coin. From the design point of view, it is important\n * to design the form in a list-of-field manner and there may be additional\n * content that is not directly mapped to the form structure (object)\n * So maybe we want to change the current shape so the computation of the state\n * of the form is in a field level, but this computation required the field value and\n * the whole form values and state (since one field may be disabled/hidden) because\n * of the value of other field.\n *\n * 3.- given the previous requirement, maybe the name of the field of the form could be\n * a function (P: F -> V) where F is the form (or parent object) and V is the type of the\n * property. That will help with the typing of the forms props\n *\n * 4.- tooltip are not placed correctly: the arrow should point the question mark\n * and the text area should be bigger\n *\n */\n\n/**\n * check this fields\n *\n * Signature of Contracting partner, 902_9e\n * Currency and amount of deposited assets, 902_5e\n * Signature on declaration of trust, 902.13e\n * also fundations\n * also life insurance\n *\n * no all state are handled by all the inputs\n * all the input implementation should respect\n * ui props and state\n */\n\nexport function ExchangeAmlFrame({\n children,\n officer,\n}: {\n officer?: OfficerState,\n children?: ComponentChildren;\n}): VNode {\n const { i18n } = useTranslationContext();\n\n const [error] = useErrorBoundary();\n\n useEffect(() => {\n if (error) {\n if (error instanceof Error) {\n notifyException(i18n.str`Internal error, please report.`, error);\n } else {\n notifyError(\n i18n.str`Internal error, please report.`,\n String(error) as TranslatedString,\n );\n }\n console.log(error);\n // resetError()\n }\n }, [error]);\n\n const [preferences, updatePreferences] = usePreferences();\n const settings = useUiSettingsContext()\n\n return (\n <div\n class=\"min-h-full flex flex-col m-0 bg-slate-200\"\n style=\"min-height: 100vh;\"\n >\n <div class=\"bg-indigo-600 pb-32\">\n <Header\n title=\"Exchange\"\n iconLinkURL={settings.backendBaseURL ?? \"#\"}\n onLogout={\n officer?.state !== \"ready\"\n ? undefined\n : () => {\n officer.lock();\n }\n }\n sites={[]}\n supportedLangs={[\"en\", \"es\", \"de\"]}\n >\n <li>\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Preferences</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-1\">\n {getAllBooleanPreferences().map((set) => {\n const isOn: boolean = !!preferences[set];\n return (\n <li key={set} class=\"mt-2 pl-2\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n {getLabelForPreferences(set, i18n)}\n </span>\n </span>\n <button\n type=\"button\"\n data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n updatePreferences(set, !isOn);\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={isOn}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </li>\n );\n })}\n </ul>\n </li>\n </Header>\n </div>\n\n <div class=\"fixed z-20 w-full\">\n <div class=\"mx-auto w-4/5\">\n <ToastBanner />\n </div>\n </div>\n\n <div class=\"-mt-32 flex grow \">\n {officer?.state !== \"ready\" ? undefined : <Navigation />}\n <div class=\"flex mx-auto my-4\">\n <main class=\"rounded-lg bg-white px-5 py-6 shadow\">{children}</main>\n </div>\n </div>\n\n <Footer\n testingUrlKey=\"exchange-base-url\"\n GIT_HASH={GIT_HASH}\n VERSION={VERSION}\n />\n </div>\n );\n}\n\nfunction Navigation(): VNode {\n const { i18n } = useTranslationContext();\n const pageList = [\n { route: privatePages.account, Icon: HomeIcon, label: i18n.str`Account` },\n { route: privatePages.cases, Icon: HomeIcon, label: i18n.str`Cases` },\n ];\n const { path } = useNavigationContext();\n return (\n <div class=\"hidden sm:block min-w-min bg-indigo-600 divide-y rounded-r-lg divide-cyan-800 overflow-y-auto overflow-x-clip\">\n <nav class=\"flex flex-1 flex-col mx-4 mt-4 mb-2\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n <li>\n <ul role=\"list\" class=\"-mx-2 space-y-1\">\n {pageList.map((p, idx) => {\n return (\n <li key={idx}>\n <a\n href={p.route.url({})}\n data-selected={path == p.route.url({})}\n class=\"data-[selected=true]:bg-indigo-700 pr-4 data-[selected=true]:text-white text-indigo-200 hover:text-white hover:bg-indigo-700 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\"\n >\n {p.Icon && <p.Icon />}\n <span class=\"hidden md:inline\">{p.label}</span>\n </a>\n </li>\n );\n })}\n {/* <li>\n <a href=\"#\" class=\"text-indigo-200 hover:text-white hover:bg-indigo-700 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n\n <i18n.Translate>Officer</i18n.Translate>\n </a>\n </li> */}\n </ul>\n </li>\n\n {/* <li class=\"mt-auto \">\n <a href=\"#\" class=\"group -mx-2 flex gap-x-3 rounded-md p-2 text-sm font-semibold leading-6 text-indigo-200 hover:bg-indigo-700 hover:text-white\">\n <svg class=\"h-6 w-6 shrink-0 text-indigo-200 group-hover:text-white\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z\" />\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n Settings\n </a>\n </li> */}\n </ul>\n </nav>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 urlPattern,\n useCurrentLocation,\n useNavigationContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\n\nimport { assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { useEffect } from \"preact/hooks\";\nimport { ExchangeAmlFrame } from \"./ExchangeAmlFrame.js\";\nimport { useOfficer } from \"./hooks/officer.js\";\nimport { Cases } from \"./pages/Cases.js\";\nimport { Officer } from \"./pages/Officer.js\";\nimport { CaseDetails } from \"./pages/CaseDetails.js\";\nimport { CaseUpdate, SelectForm } from \"./pages/CaseUpdate.js\";\nimport { HandleAccountNotReady } from \"./pages/HandleAccountNotReady.js\";\n\nexport function Routing(): VNode {\n const session = useOfficer();\n\n if (session.state === \"ready\") {\n return (\n <ExchangeAmlFrame officer={session}>\n <PrivateRouting />\n </ExchangeAmlFrame>\n );\n }\n return (\n <ExchangeAmlFrame>\n <PublicRounting />\n </ExchangeAmlFrame>\n );\n}\n\nconst publicPages = {\n config: urlPattern(/\\/config/, () => \"#/config\"),\n login: urlPattern(/\\/login/, () => \"#/login\"),\n};\n\nfunction PublicRounting(): VNode {\n const { i18n } = useTranslationContext();\n const location = useCurrentLocation(publicPages);\n // const { navigateTo } = useNavigationContext();\n // const { config, lib } = useExchangeApiContext();\n // const [notification, notify, handleError] = useLocalNotification();\n const session = useOfficer();\n\n if (location === undefined) {\n if (session.state !== \"ready\") {\n return <HandleAccountNotReady officer={session}/>;\n } else {\n return <div />\n }\n }\n\n switch (location.name) {\n case \"config\": {\n return (\n <Fragment>\n <div class=\"sm:mx-auto sm:w-full sm:max-w-sm\">\n <h2 class=\"text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">{i18n.str`Welcome to exchange config!`}</h2>\n </div>\n </Fragment>\n );\n }\n case \"login\": {\n return (\n <Fragment>\n <div class=\"sm:mx-auto sm:w-full sm:max-w-sm\">\n <h2 class=\"text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">{i18n.str`Welcome to exchange config!`}</h2>\n </div>\n </Fragment>\n );\n }\n default:\n assertUnreachable(location);\n }\n}\n\nexport const privatePages = {\n account: urlPattern(/\\/account/, () => \"#/account\"),\n cases: urlPattern(/\\/cases/, () => \"#/cases\"),\n caseUpdate: urlPattern<{ cid: string; type: string }>(\n /\\/case\\/(?<cid>[a-zA-Z0-9]+)\\/new\\/(?<type>[a-zA-Z0-9_.]+)/,\n ({ cid, type }) => `#/case/${cid}/new/${type}`,\n ),\n caseNew: urlPattern<{ cid: string }>(\n /\\/case\\/(?<cid>[a-zA-Z0-9]+)\\/new/,\n ({ cid }) => `#/case/${cid}/new`,\n ),\n caseDetails: urlPattern<{ cid: string }>(\n /\\/case\\/(?<cid>[a-zA-Z0-9]+)/,\n ({ cid }) => `#/case/${cid}`,\n ),\n};\n\nfunction PrivateRouting(): VNode {\n const { navigateTo } = useNavigationContext();\n const location = useCurrentLocation(privatePages);\n useEffect(() => {\n if (location === undefined) {\n navigateTo(privatePages.account.url({}));\n }\n }, [location]);\n\n if (location === undefined) {\n return <Fragment />;\n }\n\n switch (location.name) {\n case \"account\": {\n return <Officer />;\n }\n case \"caseDetails\": {\n return <CaseDetails account={location.values.cid} />;\n }\n case \"caseUpdate\": {\n return (\n <CaseUpdate\n account={location.values.cid}\n type={location.values.type}\n />\n );\n }\n case \"caseNew\": {\n return <SelectForm account={location.values.cid} />;\n }\n case \"cases\": {\n return <Cases />;\n }\n default:\n assertUnreachable(location);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Codec,\n LockedAccount,\n OfficerAccount,\n OfficerId,\n OperationOk,\n SigningKey,\n buildCodecForObject,\n codecForAbsoluteTime,\n codecForString,\n createNewOfficerAccount,\n decodeCrock,\n encodeCrock,\n opFixedSuccess,\n unlockOfficerAccount,\n} from \"@gnu-taler/taler-util\";\nimport { buildStorageKey, useExchangeApiContext, useLocalStorage } from \"@gnu-taler/web-util/browser\";\nimport { useMemo } from \"preact/hooks\";\nimport { usePreferences } from \"./preferences.js\";\n\nexport interface Officer {\n account: LockedAccount;\n when: AbsoluteTime;\n}\n\nconst codecForLockedAccount = codecForString() as Codec<LockedAccount>;\n\ntype OfficerAccountString = {\n id: string;\n strKey: string;\n};\n\nexport const codecForOfficerAccount = (): Codec<OfficerAccountString> =>\n buildCodecForObject<OfficerAccountString>()\n .property(\"id\", codecForString()) // FIXME\n .property(\"strKey\", codecForString()) // FIXME\n .build(\"OfficerAccount\");\n\nexport const codecForOfficer = (): Codec<Officer> =>\n buildCodecForObject<Officer>()\n .property(\"account\", codecForLockedAccount) // FIXME\n .property(\"when\", codecForAbsoluteTime) // FIXME\n .build(\"Officer\");\n\nexport type OfficerState = OfficerNotReady | OfficerReady;\nexport type OfficerNotReady = OfficerNotFound | OfficerLocked;\ninterface OfficerNotFound {\n state: \"not-found\";\n create: (password: string) => Promise<OperationOk<OfficerId>>;\n}\ninterface OfficerLocked {\n state: \"locked\";\n forget: () => OperationOk<void>;\n tryUnlock: (password: string) => Promise<OperationOk<void>>;\n}\ninterface OfficerReady {\n state: \"ready\";\n account: OfficerAccount;\n forget: () => OperationOk<void>;\n lock: () => OperationOk<void>;\n}\n\nconst OFFICER_KEY = buildStorageKey(\"officer\", codecForOfficer());\nconst DEV_ACCOUNT_KEY = buildStorageKey(\n \"account-dev\",\n codecForOfficerAccount(),\n);\n\nexport function useOfficer(): OfficerState {\n const {lib:{exchange: api}} = useExchangeApiContext();\n const [pref] = usePreferences();\n pref.keepSessionAfterReload;\n // dev account, is kept on reloaded.\n const accountStorage = useLocalStorage(DEV_ACCOUNT_KEY);\n const account = useMemo(() => {\n if (!accountStorage.value) return undefined;\n\n return {\n id: accountStorage.value.id as OfficerId,\n signingKey: decodeCrock(accountStorage.value.strKey) as SigningKey,\n };\n }, [accountStorage.value?.id, accountStorage.value?.strKey]);\n\n const officerStorage = useLocalStorage(OFFICER_KEY);\n const officer = useMemo(() => {\n if (!officerStorage.value) return undefined;\n return officerStorage.value;\n }, [officerStorage.value?.account, officerStorage.value?.when.t_ms]);\n\n if (officer === undefined) {\n return {\n state: \"not-found\",\n create: async (pwd: string) => {\n const resp = await api.getSeed()\n const extraEntropy = resp.type === \"ok\" ? resp.body : new Uint8Array();\n\n const { id, safe, signingKey } = await createNewOfficerAccount(\n pwd,\n extraEntropy,\n );\n officerStorage.update({\n account: safe,\n when: AbsoluteTime.now(),\n });\n\n // accountStorage.update({ id, signingKey });\n const strKey = encodeCrock(signingKey);\n accountStorage.update({ id, strKey });\n\n return opFixedSuccess(id)\n },\n };\n }\n\n if (account === undefined) {\n return {\n state: \"locked\",\n forget: () => {\n officerStorage.reset();\n return opFixedSuccess(undefined)\n },\n tryUnlock: async (pwd: string) => {\n const ac = await unlockOfficerAccount(officer.account, pwd);\n // accountStorage.update(ac);\n accountStorage.update({\n id: ac.id,\n strKey: encodeCrock(ac.signingKey),\n });\n return opFixedSuccess(undefined)\n },\n };\n }\n\n return {\n state: \"ready\",\n account,\n lock: () => {\n accountStorage.reset();\n return opFixedSuccess(undefined)\n },\n forget: () => {\n officerStorage.reset();\n accountStorage.reset();\n return opFixedSuccess(undefined)\n },\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Codec,\n TranslatedString,\n buildCodecForObject,\n codecForBoolean\n} from \"@gnu-taler/taler-util\";\nimport {\n buildStorageKey,\n useLocalStorage,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\n\ninterface Preferences {\n allowInsecurePassword: boolean;\n keepSessionAfterReload: boolean;\n}\n\nexport const codecForPreferences = (): Codec<Preferences> =>\n buildCodecForObject<Preferences>()\n .property(\"allowInsecurePassword\", (codecForBoolean()))\n .property(\"keepSessionAfterReload\", (codecForBoolean()))\n .build(\"Preferences\");\n\nconst defaultPreferences: Preferences = {\n allowInsecurePassword: false,\n keepSessionAfterReload: false,\n};\n\nconst PREFERENCES_KEY = buildStorageKey(\n \"exchange-preferences\",\n codecForPreferences(),\n);\n/**\n * User preferences.\n *\n * @returns tuple of [state, update()]\n */\nexport function usePreferences(): [\n Readonly<Preferences>,\n <T extends keyof Preferences>(key: T, value: Preferences[T]) => void,\n] {\n const { value, update } = useLocalStorage(\n PREFERENCES_KEY,\n defaultPreferences,\n );\n\n function updateField<T extends keyof Preferences>(k: T, v: Preferences[T]) {\n const newValue = { ...value, [k]: v };\n update(newValue);\n }\n return [value, updateField];\n}\n\nexport function getAllBooleanPreferences(): Array<keyof Preferences> {\n return [\n \"allowInsecurePassword\",\n \"keepSessionAfterReload\",\n ];\n}\n\nexport function getLabelForPreferences(\n k: keyof Preferences,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): TranslatedString {\n switch (k) {\n case \"allowInsecurePassword\": return i18n.str`Allow Insecure password`\n case \"keepSessionAfterReload\": return i18n.str`Keep session after reload`\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n TalerExchangeApi,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n ErrorLoading,\n InputChoiceHorizontal,\n Loading,\n UIHandlerId,\n amlStateConverter,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { useCases } from \"../hooks/useCases.js\";\n\nimport { privatePages } from \"../Routing.js\";\nimport { FormErrors, RecursivePartial, useFormState } from \"../hooks/form.js\";\nimport { undefinedIfEmpty } from \"./CreateAccount.js\";\nimport { Officer } from \"./Officer.js\";\n\ntype FormType = {\n state: TalerExchangeApi.AmlState;\n};\n\nexport function CasesUI({\n records,\n filter,\n onChangeFilter,\n onFirstPage,\n onNext,\n}: {\n onFirstPage?: () => void;\n onNext?: () => void;\n filter: TalerExchangeApi.AmlState;\n onChangeFilter: (f: TalerExchangeApi.AmlState) => void;\n records: TalerExchangeApi.AmlRecord[];\n}): VNode {\n const { i18n } = useTranslationContext();\n\n const [form, status] = useFormState<FormType>(\n [\".state\"] as Array<UIHandlerId>,\n {\n state: filter,\n },\n (state) => {\n const errors = undefinedIfEmpty<FormErrors<FormType>>({\n state: state.state === undefined ? i18n.str`required` : undefined,\n });\n if (errors === undefined) {\n const result: FormType = {\n state: state.state!,\n };\n return {\n status: \"ok\",\n result,\n errors,\n };\n }\n const result: RecursivePartial<FormType> = {\n state: state.state,\n };\n return {\n status: \"fail\",\n result,\n errors,\n };\n },\n );\n useEffect(() => {\n if (status.status === \"ok\" && filter !== status.result.state) {\n onChangeFilter(status.result.state);\n }\n }, [form?.state?.value]);\n\n return (\n <div>\n <div class=\"sm:flex sm:items-center\">\n <div class=\"px-2 sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Cases</i18n.Translate>\n </h1>\n <p class=\"mt-2 text-sm text-gray-700 w-80\">\n <i18n.Translate>\n A list of all the account with the status\n </i18n.Translate>\n </p>\n </div>\n <div class=\"px-2\">\n <InputChoiceHorizontal<FormType, \"state\">\n name=\"state\"\n label={i18n.str`Filter`}\n handler={form.state}\n converter={amlStateConverter}\n choices={[\n {\n label: i18n.str`Pending`,\n value: \"pending\",\n },\n {\n label: i18n.str`Frozen`,\n value: \"frozen\",\n },\n {\n label: i18n.str`Normal`,\n value: \"normal\",\n },\n ]}\n />\n </div>\n </div>\n <div class=\"mt-8 flow-root\">\n <div class=\"overflow-x-auto\">\n {!records.length ? (\n <div>empty result </div>\n ) : (\n <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-80\"\n >\n <i18n.Translate>Account Id</i18n.Translate>\n </th>\n <th\n scope=\"col\"\n class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-40\"\n >\n <i18n.Translate>Status</i18n.Translate>\n </th>\n <th\n scope=\"col\"\n class=\"sm:hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-40\"\n >\n <i18n.Translate>Threshold</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n {records.map((r) => {\n return (\n <tr key={r.h_payto} class=\"hover:bg-gray-100 \">\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-500 \">\n <div class=\"text-gray-900\">\n <a\n href={privatePages.caseDetails.url({\n cid: r.h_payto,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n {r.h_payto.substring(0, 16)}...\n </a>\n </div>\n </td>\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-500\">\n {((state: TalerExchangeApi.AmlState): VNode => {\n switch (state) {\n case TalerExchangeApi.AmlState.normal: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-green-50 px-2 py-1 text-xs font-medium text-green-700 ring-1 ring-inset ring-green-600/20\">\n Normal\n </span>\n );\n }\n case TalerExchangeApi.AmlState.pending: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-2 py-1 text-xs font-medium text-yellow-700 ring-1 ring-inset ring-green-600/20\">\n Pending\n </span>\n );\n }\n case TalerExchangeApi.AmlState.frozen: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-red-50 px-2 py-1 text-xs font-medium text-red-700 ring-1 ring-inset ring-green-600/20\">\n Frozen\n </span>\n );\n }\n }\n })(r.current_state)}\n </td>\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-900\">\n {r.threshold}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n <Pagination onFirstPage={onFirstPage} onNext={onNext} />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport function Cases() {\n const [stateFilter, setStateFilter] = useState(\n TalerExchangeApi.AmlState.pending,\n );\n\n const list = useCases(stateFilter);\n const { i18n } = useTranslationContext();\n\n if (!list) {\n return <Loading />;\n }\n if (list instanceof TalerError) {\n return <ErrorLoading error={list} />;\n }\n\n if (list.type === \"fail\") {\n switch (list.case) {\n case HttpStatusCode.Forbidden: {\n return (\n <Fragment>\n <Attention type=\"danger\" title={i18n.str`Operation denied`}>\n <i18n.Translate>\n This account doesnt have access. Request account activation\n sending your public key.\n </i18n.Translate>\n </Attention>\n <Officer />\n </Fragment>\n );\n }\n case HttpStatusCode.Unauthorized: {\n return (\n <Fragment>\n <Attention type=\"danger\" title={i18n.str`Operation denied`}>\n <i18n.Translate>\n This account is not allowed to perform list the cases.\n </i18n.Translate>\n </Attention>\n <Officer />\n </Fragment>\n );\n }\n case HttpStatusCode.NotFound:\n case HttpStatusCode.Conflict:\n return <Officer />;\n default:\n assertUnreachable(list);\n }\n }\n\n return (\n <CasesUI\n records={list.body}\n onFirstPage={list.isFirstPage ? undefined : list.loadFirst}\n onNext={list.isLastPage ? undefined : list.loadNext}\n filter={stateFilter}\n onChangeFilter={(d) => {\n setStateFilter(d);\n }}\n />\n );\n}\n\nexport const PeopleIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z\"\n />\n </svg>\n);\n\nexport const HomeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\"\n />\n </svg>\n);\n\nfunction Pagination({\n onFirstPage,\n onNext,\n}: {\n onFirstPage?: () => void;\n onNext?: () => void;\n}) {\n const { i18n } = useTranslationContext();\n return (\n <nav\n class=\"flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 rounded-lg\"\n aria-label=\"Pagination\"\n >\n <div class=\"flex flex-1 justify-between sm:justify-end\">\n <button\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onFirstPage}\n onClick={onFirstPage}\n >\n <i18n.Translate>First page</i18n.Translate>\n </button>\n <button\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 ml-3 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onNext}\n onClick={onNext}\n >\n <i18n.Translate>Next</i18n.Translate>\n </button>\n </div>\n </nav>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useState } from \"preact/hooks\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport {\n OfficerAccount,\n OperationOk,\n TalerExchangeApi,\n TalerExchangeResultByMethod,\n TalerHttpError,\n} from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook } from \"swr\";\nimport { useOfficer } from \"./officer.js\";\nimport { useExchangeApiContext } from \"@gnu-taler/web-util/browser\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport const PAGINATED_LIST_SIZE = 10;\n// when doing paginated request, ask for one more\n// and use it to know if there are more to request\nexport const PAGINATED_LIST_REQUEST = PAGINATED_LIST_SIZE + 1;\n\n/**\n * FIXME: mutate result when balance change (transaction )\n * @param account\n * @param args\n * @returns\n */\nexport function useCases(state: TalerExchangeApi.AmlState) {\n const officer = useOfficer();\n const session = officer.state === \"ready\" ? officer.account : undefined;\n const {\n lib: { exchange: api },\n } = useExchangeApiContext();\n\n const [offset, setOffset] = useState<string>();\n\n async function fetcher([officer, state, offset]: [\n OfficerAccount,\n TalerExchangeApi.AmlState,\n string | undefined,\n ]) {\n return await api.getDecisionsByState(officer, state, {\n order: \"asc\",\n offset,\n limit: PAGINATED_LIST_REQUEST,\n });\n }\n\n const { data, error } = useSWR<\n TalerExchangeResultByMethod<\"getDecisionsByState\">,\n TalerHttpError\n >(\n !session ? undefined : [session, state, offset, \"getDecisionsByState\"],\n fetcher,\n );\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.records, offset, setOffset, (d) =>\n String(d.rowid),\n );\n}\n\ntype PaginatedResult<T> = OperationOk<T> & {\n isLastPage: boolean;\n isFirstPage: boolean;\n loadNext(): void;\n loadFirst(): void;\n};\n\n//TODO: consider sending this to web-util\nexport function buildPaginatedResult<R, OffId>(\n data: R[],\n offset: OffId | undefined,\n setOffset: (o: OffId | undefined) => void,\n getId: (r: R) => OffId,\n): PaginatedResult<R[]> {\n const isLastPage = data.length < PAGINATED_LIST_REQUEST;\n const isFirstPage = offset === undefined;\n\n const result = structuredClone(data);\n if (result.length == PAGINATED_LIST_REQUEST) {\n result.pop();\n }\n return {\n type: \"ok\",\n body: result,\n isLastPage,\n isFirstPage,\n loadNext: () => {\n if (!result.length) return;\n const id = getId(result[result.length - 1]);\n setOffset(id);\n },\n loadFirst: () => {\n setOffset(undefined);\n },\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n TalerExchangeApi,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport {\n UIFieldHandler,\n UIFormFieldConfig,\n UIHandlerId,\n} from \"@gnu-taler/web-util/browser\";\nimport { useState } from \"preact/hooks\";\nimport { undefinedIfEmpty } from \"../pages/CreateAccount.js\";\n\n// export type UIField = {\n// value: string | undefined;\n// onUpdate: (s: string) => void;\n// error: TranslatedString | undefined;\n// };\n\nexport type FormHandler<T> = {\n [k in keyof T]?: T[k] extends string\n ? UIFieldHandler\n : T[k] extends AmountJson\n ? UIFieldHandler\n : T[k] extends TalerExchangeApi.AmlState\n ? UIFieldHandler\n : FormHandler<T[k]>;\n};\n\nexport type FormValues<T> = {\n [k in keyof T]: T[k] extends string ? string | undefined : FormValues<T[k]>;\n};\n\nexport type RecursivePartial<T> = {\n [k in keyof T]?: T[k] extends string\n ? string\n : T[k] extends AmountJson\n ? AmountJson\n : T[k] extends TalerExchangeApi.AmlState\n ? TalerExchangeApi.AmlState\n : RecursivePartial<T[k]>;\n};\n\nexport type FormErrors<T> = {\n [k in keyof T]?: T[k] extends string\n ? TranslatedString\n : T[k] extends AmountJson\n ? TranslatedString\n : T[k] extends AbsoluteTime\n ? TranslatedString\n : T[k] extends TalerExchangeApi.AmlState\n ? TranslatedString\n : FormErrors<T[k]>;\n};\n\nexport type FormStatus<T> =\n | {\n status: \"ok\";\n result: T;\n errors: undefined;\n }\n | {\n status: \"fail\";\n result: RecursivePartial<T>;\n errors: FormErrors<T>;\n };\n\nfunction constructFormHandler<T>(\n shape: Array<UIHandlerId>,\n form: RecursivePartial<FormValues<T>>,\n updateForm: (d: RecursivePartial<FormValues<T>>) => void,\n errors: FormErrors<T> | undefined,\n): FormHandler<T> {\n const handler = shape.reduce((handleForm, fieldId) => {\n const path = fieldId.split(\".\");\n\n function updater(newValue: unknown) {\n updateForm(setValueDeeper(form, path, newValue));\n }\n\n const currentValue = getValueDeeper<string>(form as any, path, undefined);\n const currentError = getValueDeeper<TranslatedString>(\n errors as any,\n path,\n undefined,\n );\n const field: UIFieldHandler = {\n error: currentError,\n value: currentValue,\n onChange: updater,\n state: {}, //FIXME: add the state of the field (hidden, )\n };\n\n return setValueDeeper(handleForm, path, field);\n }, {} as FormHandler<T>);\n\n return handler;\n}\n\n/**\n * FIXME: Consider sending this to web-utils\n *\n *\n * @param defaultValue\n * @param check\n * @returns\n */\nexport function useFormState<T>(\n shape: Array<UIHandlerId>,\n defaultValue: RecursivePartial<FormValues<T>>,\n check: (f: RecursivePartial<FormValues<T>>) => FormStatus<T>,\n): [FormHandler<T>, FormStatus<T>] {\n const [form, updateForm] =\n useState<RecursivePartial<FormValues<T>>>(defaultValue);\n\n const status = check(form);\n const handler = constructFormHandler(shape, form, updateForm, status.errors);\n\n return [handler, status];\n}\n\ninterface Tree<T> extends Record<string, Tree<T> | T> {}\n\nexport function getValueDeeper<T>(\n object: Tree<T> | undefined,\n names: string[],\n notFoundValue?: T,\n): T | undefined {\n if (names.length === 0) return object as T;\n const [head, ...rest] = names;\n if (!head) {\n return getValueDeeper(object, rest, notFoundValue);\n }\n if (object === undefined) {\n return notFoundValue;\n }\n return getValueDeeper(object[head] as Tree<T>, rest, notFoundValue);\n}\n\nexport function setValueDeeper(object: any, names: string[], value: any): any {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n if (!head) {\n return setValueDeeper(object, rest, value);\n }\n if (object === undefined) {\n return undefinedIfEmpty({ [head]: setValueDeeper({}, rest, value) });\n }\n return undefinedIfEmpty({ ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) });\n}\n\nexport function getShapeFromFields(\n fields: UIFormFieldConfig[],\n): Array<UIHandlerId> {\n const shape: Array<UIHandlerId> = [];\n fields.forEach((field) => {\n if (\"id\" in field.properties) {\n // FIXME: this should be a validation when loading the form\n // consistency check\n if (shape.indexOf(field.properties.id) !== -1) {\n throw Error(`already present: ${field.properties.id}`);\n }\n shape.push(field.properties.id);\n } else if (field.type === \"group\") {\n Array.prototype.push.apply(\n shape,\n getShapeFromFields(field.properties.fields),\n );\n }\n });\n return shape;\n}\n\nexport function getRequiredFields(\n fields: UIFormFieldConfig[],\n): Array<UIHandlerId> {\n const shape: Array<UIHandlerId> = [];\n fields.forEach((field) => {\n if (\"id\" in field.properties) {\n // FIXME: this should be a validation when loading the form\n // consistency check\n if (shape.indexOf(field.properties.id) !== -1) {\n throw Error(`already present: ${field.properties.id}`);\n }\n if (!field.properties.required) {\n return;\n }\n shape.push(field.properties.id);\n } else if (field.type === \"group\") {\n Array.prototype.push.apply(\n shape,\n getRequiredFields(field.properties.fields),\n );\n }\n });\n return shape;\n}\nexport function validateRequiredFields<FormType>(\n errors: FormErrors<FormType> | undefined,\n form: object,\n fields: Array<UIHandlerId>,\n): FormErrors<FormType> | undefined {\n let result: FormErrors<FormType> | undefined = errors;\n fields.forEach((f) => {\n const path = f.split(\".\");\n const v = getValueDeeper(form as any, path);\n result = setValueDeeper(result, path, !v ? \"required\" : undefined);\n });\n return result;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Button,\n InputLine,\n InternationalizationAPI,\n LocalNotificationBanner,\n UIHandlerId,\n useLocalNotificationHandler,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport {\n FormErrors,\n FormStatus,\n FormValues,\n RecursivePartial,\n useFormState,\n} from \"../hooks/form.js\";\nimport { useOfficer } from \"../hooks/officer.js\";\nimport { usePreferences } from \"../hooks/preferences.js\";\n\ntype FormType = {\n password: string;\n repeat: string;\n};\nfunction createFormValidator(\n i18n: InternationalizationAPI,\n allowInsecurePassword: boolean,\n) {\n return function check(\n state: RecursivePartial<FormValues<FormType>>,\n ): FormStatus<FormType> {\n const errors = undefinedIfEmpty<FormErrors<FormType>>({\n password: !state.password\n ? i18n.str`required`\n : allowInsecurePassword\n ? undefined\n : state.password.length < 8\n ? i18n.str`should have at least 8 characters`\n : !state.password.match(/[a-z]/) && state.password.match(/[A-Z]/)\n ? i18n.str`should have lowercase and uppercase characters`\n : !state.password.match(/\\d/)\n ? i18n.str`should have numbers`\n : !state.password.match(/[^a-zA-Z\\d]/)\n ? i18n.str`should have at least one character which is not a number or letter`\n : undefined,\n\n repeat: !state.repeat\n ? i18n.str`required`\n : state.password !== state.repeat\n ? i18n.str`doesn't match`\n : undefined,\n });\n\n if (errors === undefined) {\n const result: FormType = {\n password: state.password!,\n repeat: state.repeat!,\n };\n return {\n status: \"ok\",\n result,\n errors,\n };\n }\n const result: RecursivePartial<FormType> = {\n password: state.password,\n repeat: state.repeat,\n };\n return {\n status: \"fail\",\n result,\n errors,\n };\n };\n}\n\nexport function undefinedIfEmpty<T extends object | undefined>(obj: T): T | undefined {\n if (obj === undefined) return undefined;\n return Object.keys(obj).some(\n (k) => (obj as Record<string, T>)[k] !== undefined,\n )\n ? obj\n : undefined;\n}\n\nexport function CreateAccount(): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreferences();\n const officer = useOfficer();\n\n const [notification, withErrorHandler] = useLocalNotificationHandler();\n\n const [form, status] = useFormState<FormType>(\n [\".password\", \".repeat\"] as Array<UIHandlerId>,\n {\n password: undefined,\n repeat: undefined,\n },\n createFormValidator(i18n, settings.allowInsecurePassword),\n );\n\n const createAccountHandler =\n status.status === \"fail\" || officer.state !== \"not-found\"\n ? undefined\n : withErrorHandler(\n async () => officer.create(form.password!.value!),\n () => {},\n );\n return (\n <div class=\"flex min-h-full flex-col \">\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"sm:mx-auto sm:w-full sm:max-w-md\">\n <h2 class=\"mt-6 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">\n <i18n.Translate>Create account</i18n.Translate>\n </h2>\n </div>\n\n <div class=\"mt-10 sm:mx-auto sm:w-full sm:max-w-[480px] \">\n <div class=\"bg-gray-100 px-6 py-6 shadow sm:rounded-lg sm:px-12\">\n <form\n class=\"space-y-6\"\n noValidate\n onSubmit={(e) => {\n e.preventDefault();\n }}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n >\n <div class=\"mt-2\">\n <InputLine<FormType, \"password\">\n label={i18n.str`Password`}\n name=\"password\"\n type=\"password\"\n required\n handler={form.password}\n />\n </div>\n\n <div class=\"mt-2\">\n <InputLine<FormType, \"repeat\">\n label={i18n.str`Repeat password`}\n name=\"repeat\"\n type=\"password\"\n required\n handler={form.repeat}\n />\n </div>\n\n <div class=\"mt-8\">\n <Button\n type=\"submit\"\n disabled={!createAccountHandler}\n class=\"disabled:opacity-50 disabled:cursor-default flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n handler={createAccountHandler}\n >\n <i18n.Translate>Create</i18n.Translate>\n </Button>\n </div>\n </form>\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Show the element when the load ended\n * @param element\n */\nexport function doAutoFocus(element: HTMLElement | null) {\n if (element) {\n setTimeout(() => {\n element.focus({ preventScroll: true });\n element.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n }, 100);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useExchangeApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { h } from \"preact\";\nimport { useOfficer } from \"../hooks/officer.js\";\nimport { HandleAccountNotReady } from \"./HandleAccountNotReady.js\";\nimport { useUiSettingsContext } from \"../context/ui-settings.js\";\n\nexport function Officer() {\n const officer = useOfficer();\n const settings = useUiSettingsContext();\n const { lib } = useExchangeApiContext();\n\n const { i18n } = useTranslationContext();\n if (officer.state !== \"ready\") {\n return <HandleAccountNotReady officer={officer} />;\n }\n\n const url = new URL(\"./\", lib.exchange.baseUrl);\n const signupEmail = settings.signupEmail ?? `aml-signup@${url.hostname}`;\n\n return (\n <div>\n <h1 class=\"my-2 text-3xl font-bold tracking-tight text-gray-900 \">\n <i18n.Translate>Public key</i18n.Translate>\n </h1>\n <div class=\"max-w-xl text-base leading-7 text-gray-700 lg:max-w-lg\">\n <p class=\"mt-6 font-mono break-all\">{officer.account.id}</p>\n </div>\n <p>\n <a\n href={`mailto:${signupEmail}?subject=${encodeURIComponent(\n \"Request AML signup\",\n )}&body=${encodeURIComponent(\n `I want my AML account\\n\\n\\nPubKey: ${officer.account.id}`,\n )}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n class=\"m-4 block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700\"\n >\n <i18n.Translate>Request account activation</i18n.Translate>\n </a>\n </p>\n <p>\n <button\n type=\"button\"\n onClick={() => {\n officer.lock();\n }}\n class=\"m-4 block rounded-md border-0 bg-gray-200 px-3 py-2 text-center text-sm text-black shadow-sm \"\n >\n <i18n.Translate>Lock account</i18n.Translate>\n </button>\n </p>\n <p>\n <button\n type=\"button\"\n onClick={() => {\n officer.forget();\n }}\n class=\"m-4 block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n <i18n.Translate>Forget account</i18n.Translate>\n </button>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { OfficerNotReady } from \"../hooks/officer.js\";\nimport { CreateAccount } from \"./CreateAccount.js\";\nimport { UnlockAccount } from \"./UnlockAccount.js\";\n\nexport function HandleAccountNotReady({\n officer,\n}: {\n officer: OfficerNotReady;\n}): VNode {\n if (officer.state === \"not-found\") {\n return <CreateAccount />;\n }\n\n if (officer.state === \"locked\") {\n return <UnlockAccount />;\n }\n assertUnreachable(officer);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Button,\n InputLine,\n LocalNotificationBanner,\n UIHandlerId,\n useLocalNotificationHandler,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { FormErrors, useFormState } from \"../hooks/form.js\";\nimport { useOfficer } from \"../hooks/officer.js\";\nimport { undefinedIfEmpty } from \"./CreateAccount.js\";\n\ntype FormType = {\n password: string;\n};\n\nexport function UnlockAccount(): VNode {\n const { i18n } = useTranslationContext();\n\n const officer = useOfficer();\n const [notification, withErrorHandler] = useLocalNotificationHandler();\n\n const [form, status] = useFormState<FormType>(\n [\".password\"] as Array<UIHandlerId>,\n {\n password: undefined,\n },\n (state) => {\n const errors = undefinedIfEmpty<FormErrors<FormType>>({\n password: !state.password ? i18n.str`required` : undefined,\n });\n if (errors === undefined) {\n return {\n status: \"ok\",\n result: state as FormType,\n errors,\n };\n }\n return {\n status: \"fail\",\n result: state,\n errors,\n };\n },\n );\n\n const unlockHandler =\n status.status === \"fail\" || officer.state !== \"locked\"\n ? undefined\n : withErrorHandler(\n async () => officer.tryUnlock(form.password!.value!),\n () => {},\n );\n\n const forgetHandler =\n status.status === \"fail\" || officer.state !== \"locked\"\n ? undefined\n : withErrorHandler(\n async () => officer.forget(),\n () => {},\n );\n\n return (\n <div class=\"flex min-h-full flex-col \">\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"sm:mx-auto sm:w-full sm:max-w-md\">\n <h1 class=\"mt-6 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">\n <i18n.Translate>Account locked</i18n.Translate>\n </h1>\n <p class=\"mt-6 text-lg leading-8 text-gray-600\">\n <i18n.Translate>\n Your account is normally locked anytime you reload. To unlock type\n your password again.\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"mt-10 sm:mx-auto sm:w-full sm:max-w-[480px] \">\n <div class=\"bg-gray-100 px-6 py-6 shadow sm:rounded-lg sm:px-12\">\n\n <div class=\"mb-4\">\n <InputLine<FormType, \"password\">\n label={i18n.str`Password`}\n name=\"password\"\n type=\"password\"\n required\n handler={form.password}\n />\n </div>\n\n <div class=\"mt-8\">\n <Button\n type=\"submit\"\n handler={unlockHandler}\n disabled={!unlockHandler}\n class=\"disabled:opacity-50 disabled:cursor-default flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Unlock</i18n.Translate>\n </Button>\n </div>\n\n </div>\n <Button\n type=\"button\"\n handler={forgetHandler}\n disabled={!forgetHandler}\n class=\"disabled:opacity-50 disabled:cursor-default m-4 block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n <i18n.Translate>Forget account</i18n.Translate>\n </Button>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { buildCodecForObject, canonicalizeBaseUrl, Codec, codecForString, codecOptional } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = UiSettings;\n\n/**\n * Global settings for the UI.\n */\nconst defaultSettings: UiSettings = {\n backendBaseURL: buildDefaultBackendBaseURL(),\n signupEmail: undefined,\n};\n\nconst Context = createContext<Type>(defaultSettings);\n\nexport const useUiSettingsContext = (): Type => useContext(Context);\n\nexport const UiSettingsProvider = ({\n children,\n value,\n}: {\n value: UiSettings;\n children: ComponentChildren;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\n\nexport interface UiSettings {\n // Where libeufin backend is localted\n // default: window.origin without \"webui/\"\n backendBaseURL?: string;\n // Shows a button \"create random account\" in the registration form\n // Useful for testing\n // default: false\n signupEmail?: string;\n}\n\nconst codecForUISettings = (): Codec<UiSettings> =>\n buildCodecForObject<UiSettings>()\n .property(\"backendBaseURL\", codecOptional(codecForString()))\n .property(\"signupEmail\", codecOptional(codecForString()))\n .build(\"UiSettings\");\n\nfunction removeUndefineField<T extends object>(obj: T): T {\n const keys = Object.keys(obj) as Array<keyof T>;\n return keys.reduce((prev, cur) => {\n if (typeof prev[cur] === \"undefined\") {\n delete prev[cur];\n }\n return prev;\n }, obj);\n}\n\nexport function fetchUiSettings(listener: (s: UiSettings) => void): void {\n fetch(\"./settings.json\")\n .then((resp) => resp.json())\n .then((json) => codecForUISettings().decode(json))\n .then((result) =>\n listener({\n ...defaultSettings,\n ...removeUndefineField(result),\n }),\n )\n .catch((e) => {\n console.log(\"failed to fetch settings\", e);\n listener(defaultSettings);\n });\n}\n\nfunction buildDefaultBackendBaseURL(): string | undefined {\n if (typeof window !== \"undefined\") {\n const currentLocation = new URL(\n window.location.pathname,\n window.location.origin,\n ).href;\n /**\n * By default, backend serves the html content\n * from the /webui root.\n */\n return canonicalizeBaseUrl(currentLocation.replace(\"/webui\", \"\"));\n }\n throw Error(\"No default URL\");\n}\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 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}", "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 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}", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n Codec,\n HttpStatusCode,\n OperationFail,\n OperationOk,\n TalerError,\n TalerErrorDetail,\n TalerExchangeApi,\n TranslatedString,\n assertUnreachable,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"@gnu-taler/taler-util\";\nimport {\n DefaultForm,\n ErrorLoading,\n FormMetadata,\n InternationalizationAPI,\n Loading,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { privatePages } from \"../Routing.js\";\nimport { useUiFormsContext } from \"../context/ui-forms.js\";\nimport { preloadedForms } from \"../forms/index.js\";\nimport { useCaseDetails } from \"../hooks/useCaseDetails.js\";\nimport { ShowConsolidated } from \"./ShowConsolidated.js\";\n\nexport type AmlEvent =\n | AmlFormEvent\n | AmlFormEventError\n | KycCollectionEvent\n | KycExpirationEvent;\n\ntype AmlFormEvent = {\n type: \"aml-form\";\n when: AbsoluteTime;\n title: TranslatedString;\n justification: Justification;\n metadata: FormMetadata;\n state: TalerExchangeApi.AmlState;\n threshold: AmountJson;\n};\ntype AmlFormEventError = {\n type: \"aml-form-error\";\n when: AbsoluteTime;\n title: TranslatedString;\n justification: undefined;\n metadata: undefined;\n state: TalerExchangeApi.AmlState;\n threshold: AmountJson;\n};\ntype KycCollectionEvent = {\n type: \"kyc-collection\";\n when: AbsoluteTime;\n title: TranslatedString;\n values: object;\n provider: string;\n};\ntype KycExpirationEvent = {\n type: \"kyc-expiration\";\n when: AbsoluteTime;\n title: TranslatedString;\n fields: string[];\n};\n\ntype WithTime = { when: AbsoluteTime };\n\nfunction selectSooner(a: WithTime, b: WithTime) {\n return AbsoluteTime.cmp(a.when, b.when);\n}\n\nfunction titleForJustification(\n op: ReturnType<typeof parseJustification>,\n i18n: InternationalizationAPI,\n): TranslatedString {\n if (op.type === \"ok\") {\n return op.body.justification.label as TranslatedString;\n }\n switch (op.case) {\n case \"not-json\":\n return i18n.str`error: the justification is not a form`;\n case \"id-not-found\":\n return i18n.str`error: justification form's id not found`;\n case \"version-not-found\":\n return i18n.str`error: justification form's version not found`;\n case \"form-not-found\":\n return i18n.str`error: justification form not found`;\n default: {\n assertUnreachable(op.case);\n }\n }\n}\n\nexport function getEventsFromAmlHistory(\n aml: TalerExchangeApi.AmlDecisionDetail[],\n kyc: TalerExchangeApi.KycDetail[],\n i18n: InternationalizationAPI,\n forms: FormMetadata[],\n): AmlEvent[] {\n const ae: AmlEvent[] = aml.map((a) => {\n const just = parseJustification(a.justification, forms);\n return {\n type: just.type === \"ok\" ? \"aml-form\" : \"aml-form-error\",\n state: a.new_state,\n threshold: Amounts.parseOrThrow(a.new_threshold),\n title: titleForJustification(just, i18n),\n metadata: just.type === \"ok\" ? just.body.metadata : undefined,\n justification: just.type === \"ok\" ? just.body.justification : undefined,\n when: {\n t_ms:\n a.decision_time.t_s === \"never\"\n ? \"never\"\n : a.decision_time.t_s * 1000,\n },\n } as AmlEvent;\n });\n const ke = kyc.reduce((prev, k) => {\n prev.push({\n type: \"kyc-collection\",\n title: i18n.str`collection`,\n when: AbsoluteTime.fromProtocolTimestamp(k.collection_time),\n values: !k.attributes ? {} : k.attributes,\n provider: k.provider_section,\n });\n prev.push({\n type: \"kyc-expiration\",\n title: i18n.str`expiration`,\n when: AbsoluteTime.fromProtocolTimestamp(k.expiration_time),\n fields: !k.attributes ? [] : Object.keys(k.attributes),\n });\n return prev;\n }, [] as AmlEvent[]);\n return ae.concat(ke).sort(selectSooner);\n}\n\nexport function CaseDetails({ account }: { account: string }) {\n const [selected, setSelected] = useState<AbsoluteTime>(AbsoluteTime.now());\n const [showForm, setShowForm] = useState<{\n justification: Justification;\n metadata: FormMetadata;\n }>();\n\n const { i18n } = useTranslationContext();\n const details = useCaseDetails(account);\n const { forms } = useUiFormsContext();\n\n const allForms = [...forms, ...preloadedForms(i18n)];\n if (!details) {\n return <Loading />;\n }\n if (details instanceof TalerError) {\n return <ErrorLoading error={details} />;\n }\n if (details.type === \"fail\") {\n switch (details.case) {\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.Forbidden:\n case HttpStatusCode.NotFound:\n case HttpStatusCode.Conflict:\n return <div />;\n default:\n assertUnreachable(details);\n }\n }\n const { aml_history, kyc_attributes } = details.body;\n\n const events = getEventsFromAmlHistory(\n aml_history,\n kyc_attributes,\n i18n,\n allForms,\n );\n\n if (showForm !== undefined) {\n return (\n <DefaultForm\n readOnly={true}\n initial={showForm.justification.value}\n form={showForm.metadata as any} // FIXME: HERE\n >\n <div class=\"mt-6 flex items-center justify-end gap-x-6\">\n <button\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n onClick={() => {\n setShowForm(undefined);\n }}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n </div>\n </DefaultForm>\n );\n }\n return (\n <div>\n <a\n href={privatePages.caseNew.url({ cid: account })}\n class=\"m-4 block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700\"\n >\n <i18n.Translate>New AML form</i18n.Translate>\n </a>\n\n <header class=\"flex items-center justify-between border-b border-white/5 px-4 py-4 sm:px-6 sm:py-6 lg:px-8\">\n <h1 class=\"text-base font-semibold leading-7 text-black\">\n <i18n.Translate>\n Case history for account{\" \"}\n <span title={account}>{account.substring(0, 16)}...</span>\n </i18n.Translate>\n </h1>\n </header>\n <ShowTimeline\n history={events}\n onSelect={(e) => {\n switch (e.type) {\n case \"aml-form\": {\n const { justification, metadata } = e;\n setShowForm({ justification, metadata });\n break;\n }\n case \"kyc-collection\":\n case \"kyc-expiration\": {\n setSelected(e.when);\n break;\n }\n case \"aml-form-error\":\n }\n }}\n />\n {/* {selected && <ShowEventDetails event={selected} />} */}\n {selected && <ShowConsolidated history={events} until={selected} />}\n </div>\n );\n}\n\nfunction AmlStateBadge({ state }: { state: TalerExchangeApi.AmlState }): VNode {\n switch (state) {\n case TalerExchangeApi.AmlState.normal: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-green-50 px-2 py-1 text-xs font-medium text-green-700 ring-1 ring-inset ring-green-600/20\">\n Normal\n </span>\n );\n }\n case TalerExchangeApi.AmlState.pending: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-2 py-1 text-xs font-medium text-yellow-700 ring-1 ring-inset ring-green-600/20\">\n Pending\n </span>\n );\n }\n case TalerExchangeApi.AmlState.frozen: {\n return (\n <span class=\"inline-flex items-center rounded-md bg-red-50 px-2 py-1 text-xs font-medium text-red-700 ring-1 ring-inset ring-green-600/20\">\n Frozen\n </span>\n );\n }\n }\n assertUnreachable(state);\n}\n\nfunction ShowTimeline({\n history,\n onSelect,\n}: {\n onSelect: (e: AmlEvent) => void;\n history: AmlEvent[];\n}): VNode {\n return (\n <div class=\"flow-root\">\n <ul role=\"list\">\n {history.map((e, idx) => {\n const isLast = history.length - 1 === idx;\n return (\n <li\n key={idx}\n data-ok={e.type !== \"aml-form-error\"}\n class=\"hover:bg-gray-200 p-2 rounded data-[ok=true]:cursor-pointer\"\n onClick={() => {\n onSelect(e);\n }}\n >\n <div class=\"relative pb-6\">\n {!isLast ? (\n <span\n class=\"absolute left-4 top-4 -ml-px h-full w-1 bg-gray-200\"\n aria-hidden=\"true\"\n ></span>\n ) : undefined}\n <div class=\"relative flex space-x-3\">\n {(() => {\n switch (e.type) {\n case \"aml-form-error\":\n case \"aml-form\": {\n return (\n <div>\n <AmlStateBadge state={e.state} />\n <span class=\"inline-flex items-center px-2 py-1 text-xs font-medium text-gray-700 \">\n {e.threshold.currency}{\" \"}\n {Amounts.stringifyValue(e.threshold)}\n </span>\n </div>\n );\n }\n case \"kyc-collection\": {\n return (\n // <ArrowDownCircleIcon class=\"h-8 w-8 text-green-700\" />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 12.75l3 3m0 0l3-3m-3 3v-7.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n );\n }\n case \"kyc-expiration\": {\n // return <ClockIcon class=\"h-8 w-8 text-gray-700\" />;\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n );\n }\n }\n assertUnreachable(e);\n })()}\n <div class=\"flex min-w-0 flex-1 justify-between space-x-4 pt-1.5\">\n {e.type === \"aml-form\" ? (\n <span\n // href={Pages.newFormEntry.url({ account })}\n class=\"block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700\"\n >\n {e.title}\n </span>\n ) : (\n <p class=\"text-sm text-gray-900\">{e.title}</p>\n )}\n <div class=\"whitespace-nowrap text-right text-sm text-gray-500\">\n {e.when.t_ms === \"never\" ? (\n \"never\"\n ) : (\n <time dateTime={format(e.when.t_ms, \"dd MMM yyyy\")}>\n {format(e.when.t_ms, \"dd MMM yyyy\")}\n </time>\n )}\n </div>\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\nexport type Justification<T = Record<string, unknown>> = {\n // form values\n value: T;\n} & Omit<Omit<FormMetadata, \"icon\">, \"config\">;\n\ntype SimpleFormMetadata = {\n version?: number;\n id?: string;\n};\n\nexport const codecForSimpleFormMetadata = (): Codec<SimpleFormMetadata> =>\n buildCodecForObject<SimpleFormMetadata>()\n .property(\"id\", codecOptional(codecForString()))\n .property(\"version\", codecOptional(codecForNumber()))\n .build(\"SimpleFormMetadata\");\n\ntype ParseJustificationFail =\n | \"not-json\"\n | \"id-not-found\"\n | \"form-not-found\"\n | \"version-not-found\";\n\nfunction parseJustification(\n s: string,\n listOfAllKnownForms: FormMetadata[],\n):\n | OperationOk<{\n justification: Justification;\n metadata: FormMetadata;\n }>\n | OperationFail<ParseJustificationFail> {\n try {\n const justification = JSON.parse(s);\n const info = codecForSimpleFormMetadata().decode(justification);\n if (!info.id) {\n return {\n type: \"fail\",\n case: \"id-not-found\",\n detail: {} as TalerErrorDetail,\n };\n }\n if (!info.version) {\n return {\n type: \"fail\",\n case: \"version-not-found\",\n detail: {} as TalerErrorDetail,\n };\n }\n const found = listOfAllKnownForms.find((f) => {\n return f.id === info.id && f.version === info.version;\n });\n if (!found) {\n return {\n type: \"fail\",\n case: \"form-not-found\",\n detail: {} as TalerErrorDetail,\n };\n }\n return {\n type: \"ok\",\n body: {\n justification,\n metadata: found,\n },\n };\n } catch (e) {\n return {\n type: \"fail\",\n case: \"not-json\",\n detail: {} as TalerErrorDetail,\n };\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { codecForUIForms, UiForms } from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = UiForms;\n\nconst defaultForms: UiForms = {\n forms: [],\n};\nconst Context = createContext<Type>(defaultForms);\n\nexport type BaseForm = Record<string, unknown>;\n\nexport const useUiFormsContext = (): Type => useContext(Context);\n\nexport const UiFormsProvider = ({\n children,\n value,\n}: {\n value: UiForms;\n children: ComponentChildren;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\n\n\n\nfunction removeUndefineField<T extends object>(obj: T): T {\n const keys = Object.keys(obj) as Array<keyof T>;\n return keys.reduce((prev, cur) => {\n if (typeof prev[cur] === \"undefined\") {\n delete prev[cur];\n }\n return prev;\n }, obj);\n}\n\nexport function fetchUiForms(listener: (s: UiForms) => void): void {\n fetch(\"./forms.json\")\n .then((resp) => resp.json())\n .then((json) => codecForUIForms().decode(json))\n .then((result) =>\n listener({\n ...defaultForms,\n ...removeUndefineField(result),\n }),\n )\n .catch((e) => {\n console.log(\"failed to fetch forms\", e);\n listener(defaultForms);\n });\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 type {\n DoubleColumnForm,\n DoubleColumnFormSection,\n InternationalizationAPI,\n UIHandlerId\n} from \"@gnu-taler/web-util/browser\";\n\nexport const v1 = (i18n: InternationalizationAPI): DoubleColumnForm => ({\n type: \"double-column\" as const,\n design: [\n {\n title: i18n.str`Simple form`,\n fields: [\n {\n type: \"textArea\",\n properties: {\n id: \".comment\" as UIHandlerId,\n name: \"comment\",\n label: i18n.str`Comment`,\n },\n },\n ],\n },\n resolutionSection(i18n),\n ],\n // behavior: function formBehavior(\n // v: Partial<Simplest.Form>,\n // ): FormState<Simplest.Form> {\n // return {\n // comment: {\n // help: ((v.comment?.length ?? 0) > 100 ? \"keep it short\" : \"\") as TranslatedString,\n // },\n // threshold: {\n // disabled: v.state === TalerExchangeApi.AmlState.frozen,\n // },\n // };\n // },\n});\n\nexport function resolutionSection(\n i18n: InternationalizationAPI,\n): DoubleColumnFormSection {\n return {\n title: i18n.str`Resolution`,\n fields: [\n {\n type: \"choiceHorizontal\",\n properties: {\n id: \".state\" as UIHandlerId,\n name: \"state\",\n label: i18n.str`New state`,\n converterId: \"TalerExchangeApi.AmlState\",\n choices: [\n {\n value: \"frozen\",\n label: i18n.str`Frozen`,\n },\n {\n value: \"pending\",\n label: i18n.str`Pending`,\n },\n {\n value: \"normal\",\n label: i18n.str`Normal`,\n },\n ],\n },\n },\n {\n type: \"amount\",\n properties: {\n id: \".threshold\" as UIHandlerId,\n currency: \"NETZBON\",\n name: \"threshold\",\n converterId: \"Taler.Amount\",\n label: i18n.str`New threshold`,\n },\n },\n ],\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 type { FormMetadata, InternationalizationAPI } from \"@gnu-taler/web-util/browser\";\nimport { v1 as simplest } from \"./simplest.js\";\n\nconst languages = (i18n: InternationalizationAPI) => [\n {\n label: i18n.str`Mandarin Chinese`,\n value: \"cmn\",\n },\n {\n label: i18n.str`Spanish`,\n value: \"spa\",\n },\n {\n label: i18n.str`English`,\n value: \"eng\",\n },\n {\n label: i18n.str`Hindi`,\n value: \"hin\",\n },\n {\n label: i18n.str`Portuguese`,\n value: \"por\",\n },\n {\n label: i18n.str`Bengali`,\n value: \"ben\",\n },\n {\n label: i18n.str`Russian`,\n value: \"rus\",\n },\n {\n label: i18n.str`Japanese`,\n value: \"jpn\",\n },\n {\n label: i18n.str`Yue`,\n value: \"yue\",\n },\n {\n label: i18n.str`Vietnamese`,\n value: \"vie\",\n },\n {\n label: i18n.str`Turkish`,\n value: \"tur\",\n },\n {\n label: i18n.str`Wu`,\n value: \"wuu\",\n },\n {\n label: i18n.str`Marathi`,\n value: \"mar\",\n },\n {\n label: i18n.str`Telugu`,\n value: \"ten\",\n },\n {\n label: i18n.str`Korean`,\n value: \"kor\",\n },\n {\n label: i18n.str`French`,\n value: \"fra\",\n },\n {\n label: i18n.str`Tamil`,\n value: \"tam\",\n },\n {\n label: i18n.str`Egyptian Arabic`,\n value: \"arz\",\n },\n {\n label: i18n.str`Standard German`,\n value: \"deu\",\n },\n {\n label: i18n.str`Urdu`,\n value: \"urd\",\n },\n {\n label: i18n.str`Javanese`,\n value: \"jav\",\n },\n {\n label: i18n.str`Punjabi`,\n value: \"pan\",\n },\n {\n label: i18n.str`Italian`,\n value: \"ita\",\n },\n {\n label: i18n.str`Gujarati`,\n value: \"guj\",\n },\n {\n label: i18n.str`Iranian Persian`,\n value: \"pes\",\n },\n {\n label: i18n.str`Bhojpuri`,\n value: \"bho\",\n },\n {\n label: i18n.str`Hausa`,\n value: \"hau\",\n },\n];\n\n\nexport const preloadedForms: (i18n: InternationalizationAPI) => Array<FormMetadata> = (i18n) => [\n {\n label: i18n.str`Simple comment`,\n id: \"__simple_comment\",\n version: 1,\n config: simplest(i18n),\n // }, {\n // label: i18n.str`Identification form`,\n // id: \"902.1e\",\n // version: 1,\n // config: form_902_1e_v1(i18n),\n // }, {\n // label: i18n.str`Operational legal entity or partnership`,\n // id: \"902.11e\",\n // version: 1,\n // config: form_902_11e_v1(i18n),\n // }, {\n // label: i18n.str`Foundations`,\n // id: \"902.12e\",\n // version: 1,\n // config: form_902_12e_v1(i18n),\n // }, {\n // label: i18n.str`Declaration for trusts`,\n // id: \"902.13e\",\n // version: 1,\n // config: form_902_13e_v1(i18n),\n // }, {\n // label: i18n.str`Information on life insurance policies`,\n // id: \"902.15e\",\n // version: 1,\n // config: form_902_15e_v1(i18n),\n // }, {\n // label: i18n.str`Declaration of beneficial owner`,\n // id: \"902.9e\",\n // version: 1,\n // config: form_902_9e_v1(i18n),\n // }, {\n // label: i18n.str`Customer profile`,\n // id: \"902.5e\",\n // version: 1,\n // config: form_902_5e_v1(i18n),\n // }, {\n // label: i18n.str`Risk profile`,\n // id: \"902.4e\",\n // version: 1,\n // config: form_902_4e_v1(i18n),\n },\n];\n\n\nconst currencies = (i18n: InternationalizationAPI) => [\n {\n label: i18n.str`United States dollar`,\n value: \"usd\",\n },\n {\n label: i18n.str`Euro`,\n value: \"eur\",\n },\n {\n label: i18n.str`Swiss franc`,\n value: \"chf\",\n },\n {\n label: i18n.str`Argentine peso`,\n value: \"ars\",\n },\n {\n label: i18n.str`Mexican peso`,\n value: \"mxn\",\n },\n {\n label: i18n.str`Brazilian real`,\n value: \"brl\",\n },\n];\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { OfficerAccount, PaytoString, TalerExchangeResultByMethod, TalerHttpError } from \"@gnu-taler/taler-util\";\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nimport { useOfficer } from \"./officer.js\";\nimport { useExchangeApiContext } from \"@gnu-taler/web-util/browser\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useCaseDetails(paytoHash: string) {\n const officer = useOfficer();\n const session = officer.state === \"ready\" ? officer.account : undefined;\n\n const { lib: {exchange: api} } = useExchangeApiContext();\n\n async function fetcher([officer, account]: [OfficerAccount, PaytoString]) {\n return await api.getDecisionDetails(officer, account)\n }\n\n const { data, error } = useSWR<TalerExchangeResultByMethod<\"getDecisionDetails\">, TalerHttpError>(\n !session ? undefined : [session, paytoHash], 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 keepPreviousData: true,\n });\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n TalerExchangeApi,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport {\n DefaultForm,\n FlexibleForm,\n UIFormField,\n UIFormFieldConfig,\n UIHandlerId,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { AmlEvent } from \"./CaseDetails.js\";\n\nexport function ShowConsolidated({\n history,\n until,\n}: {\n history: AmlEvent[];\n until: AbsoluteTime;\n}): VNode {\n const { i18n } = useTranslationContext();\n\n const cons = getConsolidated(history, until);\n\n const form: FlexibleForm = {\n type: \"double-column\",\n design: [\n {\n title: i18n.str`AML`,\n fields: [\n {\n type: \"amount\",\n properties: {\n id: \".aml.threshold\" as UIHandlerId,\n currency: \"NETZBON\",\n label: i18n.str`Threshold`,\n name: \"aml.threshold\",\n },\n },\n {\n type: \"choiceHorizontal\",\n properties: {\n label: i18n.str`State`,\n name: \"aml.state\",\n id: \".aml.state\" as UIHandlerId,\n choices: [\n {\n label: i18n.str`Frozen`,\n value: \"frozen\",\n },\n {\n label: i18n.str`Pending`,\n value: \"pending\",\n },\n {\n label: i18n.str`Normal`,\n value: \"normal\",\n },\n ],\n },\n },\n ],\n },\n Object.entries(cons.kyc).length > 0\n ? {\n title: i18n.str`KYC`,\n fields: Object.entries(cons.kyc).map(([key, field]) => {\n const result: UIFormFieldConfig = {\n type: \"text\",\n properties: {\n label: key as TranslatedString,\n id: `kyc.${key}.value` as UIHandlerId,\n name: `kyc.${key}.value`,\n help: `${field.provider} since ${\n field.since.t_ms === \"never\"\n ? \"never\"\n : format(field.since.t_ms, \"dd/MM/yyyy\")\n }` as TranslatedString,\n },\n };\n return result;\n }),\n }\n : undefined!,\n ],\n };\n return (\n <Fragment>\n <h1 class=\"text-base font-semibold leading-7 text-black\">\n Consolidated information{\" \"}\n {until.t_ms === \"never\"\n ? \"\"\n : `after ${format(until.t_ms, \"dd MMMM yyyy\")}`}\n </h1>\n <DefaultForm\n key={`${String(Date.now())}`}\n form={form as any}\n initial={cons}\n readOnly\n onUpdate={() => {}}\n />\n </Fragment>\n );\n}\n\ninterface Consolidated {\n aml: {\n state: TalerExchangeApi.AmlState;\n threshold: AmountJson;\n since: AbsoluteTime;\n };\n kyc: {\n [field: string]: {\n value: unknown;\n provider: string;\n since: AbsoluteTime;\n };\n };\n}\n\nfunction getConsolidated(\n history: AmlEvent[],\n when: AbsoluteTime,\n): Consolidated {\n const initial: Consolidated = {\n aml: {\n state: TalerExchangeApi.AmlState.normal,\n threshold: {\n currency: \"ARS\",\n value: 1000,\n fraction: 0,\n },\n since: AbsoluteTime.never(),\n },\n kyc: {},\n };\n return history.reduce((prev, cur) => {\n if (AbsoluteTime.cmp(when, cur.when) < 0) {\n return prev;\n }\n switch (cur.type) {\n case \"kyc-expiration\": {\n cur.fields.forEach((field) => {\n delete prev.kyc[field];\n });\n break;\n }\n case \"aml-form\": {\n prev.aml = {\n since: cur.when,\n state: cur.state,\n threshold: cur.threshold,\n };\n break;\n }\n case \"kyc-collection\": {\n Object.keys(cur.values).forEach((field) => {\n const value = (cur.values as Record<string, unknown>)[field];\n prev.kyc[field] = {\n value,\n provider: cur.provider,\n since: cur.when,\n };\n });\n break;\n }\n }\n return prev;\n }, initial);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n HttpStatusCode,\n TalerExchangeApi,\n TalerProtocolTimestamp,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Button,\n FormMetadata,\n InternationalizationAPI,\n LocalNotificationBanner,\n RenderAllFieldsByUiConfig,\n UIHandlerId,\n convertUiField,\n getConverterById,\n useExchangeApiContext,\n useLocalNotificationHandler,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { privatePages } from \"../Routing.js\";\nimport { useUiFormsContext } from \"../context/ui-forms.js\";\nimport { preloadedForms } from \"../forms/index.js\";\nimport {\n FormErrors,\n getRequiredFields,\n getShapeFromFields,\n useFormState,\n validateRequiredFields,\n} from \"../hooks/form.js\";\nimport { useOfficer } from \"../hooks/officer.js\";\nimport { Justification } from \"./CaseDetails.js\";\nimport { undefinedIfEmpty } from \"./CreateAccount.js\";\nimport { HandleAccountNotReady } from \"./HandleAccountNotReady.js\";\n\nfunction searchForm(\n i18n: InternationalizationAPI,\n forms: FormMetadata[],\n formId: string,\n): FormMetadata | undefined {\n {\n const found = forms.find((v) => v.id === formId);\n if (found) return found;\n }\n {\n const pf = preloadedForms(i18n);\n const found = pf.find((v) => v.id === formId);\n if (found) return found;\n }\n return undefined;\n}\n\ntype FormType = {\n when: AbsoluteTime;\n state: TalerExchangeApi.AmlState;\n threshold: AmountJson;\n comment: string;\n};\n\nexport function CaseUpdate({\n account,\n type: formId,\n}: {\n account: string;\n type: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n const officer = useOfficer();\n const {\n lib: { exchange: api },\n } = useExchangeApiContext();\n\n const [notification, withErrorHandler] = useLocalNotificationHandler();\n const { config } = useExchangeApiContext();\n const { forms } = useUiFormsContext();\n const initial: FormType = {\n when: AbsoluteTime.now(),\n state: TalerExchangeApi.AmlState.pending,\n threshold: Amounts.zeroOfCurrency(config.currency),\n comment: \"\",\n };\n\n if (officer.state !== \"ready\") {\n return <HandleAccountNotReady officer={officer} />;\n }\n const theForm = searchForm(i18n, forms, formId);\n if (!theForm) {\n return <div>form with id {formId} not found</div>;\n }\n\n const shape: Array<UIHandlerId> = [];\n const requiredFields: Array<UIHandlerId> = [];\n\n theForm.config.design.forEach((section) => {\n Array.prototype.push.apply(shape, getShapeFromFields(section.fields));\n Array.prototype.push.apply(\n requiredFields,\n getRequiredFields(section.fields),\n );\n });\n\n const [form, state] = useFormState<FormType>(shape, initial, (st) => {\n const partialErrors = undefinedIfEmpty<FormErrors<FormType>>({\n state: st.state === undefined ? i18n.str`required` : undefined,\n threshold: !st.threshold ? i18n.str`required` : undefined,\n when: !st.when ? i18n.str`required` : undefined,\n });\n\n const errors = undefinedIfEmpty<FormErrors<FormType> | undefined>(\n validateRequiredFields(partialErrors, st, requiredFields),\n );\n\n if (errors === undefined) {\n return {\n status: \"ok\",\n result: st as any,\n errors: undefined,\n };\n }\n\n return {\n status: \"fail\",\n result: st as any,\n errors,\n };\n });\n\n const validatedForm = state.status !== \"ok\" ? undefined : state.result;\n\n console.log(state.errors);\n const submitHandler =\n validatedForm === undefined\n ? undefined\n : withErrorHandler(\n () => {\n const justification: Justification = {\n id: theForm.id,\n label: theForm.label,\n version: theForm.version,\n value: validatedForm,\n };\n\n const decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\"> =\n {\n justification: JSON.stringify(justification),\n decision_time: TalerProtocolTimestamp.now(),\n h_payto: account,\n new_state: justification.value\n .state as TalerExchangeApi.AmlState,\n new_threshold: Amounts.stringify(\n justification.value.threshold as AmountJson,\n ),\n kyc_requirements: undefined,\n };\n\n return api.addDecisionDetails(officer.account, decision);\n },\n () => {\n window.location.href = privatePages.cases.url({});\n },\n (fail) => {\n switch (fail.case) {\n case HttpStatusCode.Forbidden:\n case HttpStatusCode.Unauthorized:\n return i18n.str`Wrong credentials for \"${officer.account}\"`;\n case HttpStatusCode.NotFound:\n return i18n.str`Officer or account not found`;\n case HttpStatusCode.Conflict:\n return i18n.str`Officer disabled or more recent decision was already submitted.`;\n default:\n assertUnreachable(fail);\n }\n },\n );\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n <div class=\"space-y-10 divide-y -mt-5 divide-gray-900/10\">\n {theForm.config.design.map((section, i) => {\n if (!section) return <Fragment />;\n return (\n <div\n key={i}\n class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3\"\n >\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n {section.title}\n </h2>\n {section.description && (\n <p class=\"mt-1 text-sm leading-6 text-gray-600\">\n {section.description}\n </p>\n )}\n </div>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2\">\n <div class=\"p-3\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig\n key={i}\n fields={convertUiField(\n i18n,\n section.fields,\n form,\n getConverterById,\n )}\n />\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n <div class=\"mt-6 flex items-center justify-end gap-x-6\">\n <a\n href={privatePages.caseDetails.url({ cid: account })}\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <Button\n type=\"submit\"\n handler={submitHandler}\n disabled={!submitHandler}\n class=\"disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </Button>\n </div>\n </Fragment>\n );\n}\n\nexport function SelectForm({ account }: { account: string }) {\n const { i18n } = useTranslationContext();\n const { forms } = useUiFormsContext();\n const pf = preloadedForms(i18n);\n return (\n <div>\n <pre>New form for account: {account.substring(0, 16)}...</pre>\n {forms.map((form) => {\n return (\n <a\n key={form.id}\n href={privatePages.caseUpdate.url({ cid: account, type: form.id })}\n class=\"m-4 block rounded-md w-fit border-0 p-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-600\"\n >\n {form.label}\n </a>\n );\n })}\n {pf.map((form) => {\n return (\n <a\n key={form.id}\n href={privatePages.caseUpdate.url({ cid: account, type: form.id })}\n class=\"m-4 block rounded-md w-fit border-0 p-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-600\"\n >\n {form.label}\n </a>\n );\n })}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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: \"de\",\n },\n Logout: [\"\"],\n \"Skip to main content\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"Taler logo\": [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n \"Please login!\": [\"\"],\n \"Username:\": [\"\"],\n \"Password:\": [\"\"],\n Login: [\"\"],\n Register: [\"\"],\n \"Missing IBAN\": [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"Missing subject\": [\"\"],\n \"Missing amount\": [\"\"],\n \"Amount is not valid\": [\"\"],\n \"Should be greater than 0\": [\"\"],\n \"Receiver IBAN:\": [\"\"],\n \"Transfer subject:\": [\"\"],\n \"Amount:\": [\"\"],\n \"Field(s) missing.\": [\"\"],\n \"Want to try the raw payto://-format?\": [\"\"],\n \"Missing payto address\": [\"\"],\n \"Payto does not follow the pattern\": [\"\"],\n \"Transfer money to account identified by payto:// URI:\": [\"\"],\n \"payto URI:\": [\"\"],\n \"payto address\": [\"\"],\n Send: [\"\"],\n \"Use wire-transfer form?\": [\"\"],\n \"No credentials found.\": [\"\"],\n \"Could not create the wire transfer\": [\"\"],\n \"Transfer creation gave response error\": [\"\"],\n \"Wire transfer created!\": [\"\"],\n \"Amount to withdraw:\": [\"\"],\n Withdraw: [\"\"],\n \"No credentials given.\": [\"\"],\n \"Could not create withdrawal operation\": [\"\"],\n \"Withdrawal creation gave response error\": [\"\"],\n \"Obtain digital cash\": [\"\"],\n \"Transfer to bank account\": [\"\"],\n Date: [\"\"],\n Amount: [\"\"],\n Counterpart: [\"\"],\n Subject: [\"\"],\n \"Transfer to Taler Wallet\": [\"\"],\n \"Use this QR code to withdraw to your mobile wallet:\": [\"\"],\n \"Click %1$s to open your Taler wallet!\": [\"\"],\n \"Confirm Withdrawal\": [\"\"],\n \"Authorize withdrawal by solving challenge\": [\"\"],\n \"What is\": [\"\"],\n \"Answer is wrong.\": [\"\"],\n Confirm: [\"\"],\n Cancel: [\"\"],\n \"A this point, a %1$s bank would ask for an additional authentication proof (PIN/TAN, one time password, ..), instead of a simple calculation.\":\n [\"\"],\n \"No withdrawal ID found.\": [\"\"],\n \"Could not confirm the withdrawal\": [\"\"],\n \"Withdrawal confirmation gave response error\": [\"\"],\n \"Withdrawal confirmed!\": [\"\"],\n \"Could not abort the withdrawal.\": [\"\"],\n \"Withdrawal abortion failed.\": [\"\"],\n \"Withdrawal aborted!\": [\"\"],\n Abort: [\"\"],\n \"withdrawal (%1$s) was never (correctly) created at the bank...\": [\"\"],\n \"Waiting the bank to create the operation...\": [\"\"],\n \"This withdrawal was aborted!\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n \"Username or account label '%1$s' not found. Won't login.\": [\"\"],\n \"Wrong credentials given.\": [\"\"],\n \"Account information could not be retrieved.\": [\"\"],\n \"Welcome, %1$s !\": [\"\"],\n \"Bank account balance\": [\"\"],\n Payments: [\"\"],\n \"Latest transactions:\": [\"\"],\n \"List of public accounts was not found.\": [\"\"],\n \"List of public accounts could not be retrieved.\": [\"\"],\n \"History of public accounts\": [\"\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Use only letter and numbers starting with a lower case letter\": [\"\"],\n \"Password don't match\": [\"\"],\n \"Please register!\": [\"\"],\n \"Repeat Password:\": [\"\"],\n \"Registration failed, please report\": [\"\"],\n \"That username is already taken\": [\"\"],\n \"New registration gave response error\": [\"\"],\n \"Bank menu\": [\"\"],\n \"Select option1\": [\"\"],\n \"Select option2\": [\"\"],\n days: [\"\"],\n hours: [\"\"],\n minutes: [\"\"],\n seconds: [\"\"],\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: \"en\",\n },\n Logout: [\"\"],\n \"Skip to main content\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"Taler logo\": [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n \"Please login!\": [\"\"],\n \"Username:\": [\"\"],\n \"Password:\": [\"\"],\n Login: [\"\"],\n Register: [\"\"],\n \"Missing IBAN\": [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"Missing subject\": [\"\"],\n \"Missing amount\": [\"\"],\n \"Amount is not valid\": [\"\"],\n \"Should be greater than 0\": [\"\"],\n \"Receiver IBAN:\": [\"\"],\n \"Transfer subject:\": [\"\"],\n \"Amount:\": [\"\"],\n \"Field(s) missing.\": [\"\"],\n \"Want to try the raw payto://-format?\": [\"\"],\n \"Missing payto address\": [\"\"],\n \"Payto does not follow the pattern\": [\"\"],\n \"Transfer money to account identified by payto:// URI:\": [\"\"],\n \"payto URI:\": [\"\"],\n \"payto address\": [\"\"],\n Send: [\"\"],\n \"Use wire-transfer form?\": [\"\"],\n \"No credentials found.\": [\"\"],\n \"Could not create the wire transfer\": [\"\"],\n \"Transfer creation gave response error\": [\"\"],\n \"Wire transfer created!\": [\"\"],\n \"Amount to withdraw:\": [\"Amount to withdraw\"],\n Withdraw: [\"Confirm withdrawal\"],\n \"No credentials given.\": [\"\"],\n \"Could not create withdrawal operation\": [\"\"],\n \"Withdrawal creation gave response error\": [\"\"],\n \"Obtain digital cash\": [\"\"],\n \"Transfer to bank account\": [\"\"],\n Date: [\"\"],\n Amount: [\"\"],\n Counterpart: [\"\"],\n Subject: [\"\"],\n \"Transfer to Taler Wallet\": [\"Charge Taler wallet\"],\n \"Use this QR code to withdraw to your mobile wallet:\": [\"\"],\n \"Click %1$s to open your Taler wallet!\": [\"\"],\n \"Confirm Withdrawal\": [\"Confirm withdrawal\"],\n \"Authorize withdrawal by solving challenge\": [\"\"],\n \"What is\": [\"\"],\n \"Answer is wrong.\": [\"\"],\n Confirm: [\"\"],\n Cancel: [\"\"],\n \"A this point, a %1$s bank would ask for an additional authentication proof (PIN/TAN, one time password, ..), instead of a simple calculation.\":\n [\"\"],\n \"No withdrawal ID found.\": [\"\"],\n \"Could not confirm the withdrawal\": [\"Confirm withdrawal\"],\n \"Withdrawal confirmation gave response error\": [\"\"],\n \"Withdrawal confirmed!\": [\"\"],\n \"Could not abort the withdrawal.\": [\"Close Taler withdrawal\"],\n \"Withdrawal abortion failed.\": [\"\"],\n \"Withdrawal aborted!\": [\"\"],\n Abort: [\"\"],\n \"withdrawal (%1$s) was never (correctly) created at the bank...\": [\"\"],\n \"Waiting the bank to create the operation...\": [\"\"],\n \"This withdrawal was aborted!\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n \"Username or account label '%1$s' not found. Won't login.\": [\"\"],\n \"Wrong credentials given.\": [\"\"],\n \"Account information could not be retrieved.\": [\"\"],\n \"Welcome, %1$s !\": [\"\"],\n \"Bank account balance\": [\"\"],\n Payments: [\"\"],\n \"Latest transactions:\": [\"\"],\n \"List of public accounts was not found.\": [\"\"],\n \"List of public accounts could not be retrieved.\": [\"\"],\n \"History of public accounts\": [\"\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Use only letter and numbers starting with a lower case letter\": [\"\"],\n \"Password don't match\": [\"\"],\n \"Please register!\": [\"\"],\n \"Repeat Password:\": [\"\"],\n \"Registration failed, please report\": [\"\"],\n \"That username is already taken\": [\"\"],\n \"New registration gave response error\": [\"\"],\n \"Bank menu\": [\"\"],\n \"Select option1\": [\"\"],\n \"Select option2\": [\"\"],\n days: [\"days\"],\n hours: [\"hours\"],\n minutes: [\"minutes\"],\n seconds: [\"seconds\"],\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 Logout: [\"Cierre de sesi\u00F3n\"],\n \"Skip to main content\": [\"Saltar el men\u00FA de navegaci\u00F3n\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\n \"Esta parte de la demostraci\u00F3n muestra c\u00F3mo funciona un banco que soporta Taler directamente. Adem\u00E1s de usar tu propia cuenta de banco, tambi\u00E9n podr\u00E1s ver el historial de transacciones de algunas %1$s.\",\n ],\n \"Taler logo\": [\"Logo Taler\"],\n \"Missing username\": [\"Falta nombre de usuario\"],\n \"Missing password\": [\"Falta contrase\u00F1a\"],\n \"Please login!\": [\"Por favor inicia sesi\u00F3n!\"],\n \"Username:\": [\"Nombre de usuario:\"],\n \"Password:\": [\"Password:\"],\n Login: [\"Iniciar sesi\u00F3n\"],\n Register: [\"Registrarse\"],\n \"Missing IBAN\": [\"Falta IBAN\"],\n \"IBAN should have just uppercased letters and numbers\": [\n \"IBAN deber\u00EDa tener letras may\u00FAsculas y n\u00FAmeros\",\n ],\n \"Missing subject\": [\"Falta asunto\"],\n \"Missing amount\": [\"Falta monto\"],\n \"Amount is not valid\": [\"Monto no v\u00E1lido\"],\n \"Should be greater than 0\": [\"Deber\u00EDa ser mas grande que 0\"],\n \"Receiver IBAN:\": [\"IBAN receptor:\"],\n \"Transfer subject:\": [\"Asunto de transferencia:\"],\n \"Amount:\": [\"Monto:\"],\n \"Field(s) missing.\": [\"Faltan campo(s).\"],\n \"Want to try the raw payto://-format?\": [\n \"Quieres probar el formato payto:// ?\",\n ],\n \"Missing payto address\": [\"Falta direccion payto\"],\n \"Payto does not follow the pattern\": [\"Payto no sigue el patr\u00F3n\"],\n \"Transfer money to account identified by payto:// URI:\": [\n \"Transferir dinero a la cuenta identificada por la URI payto://:\",\n ],\n \"payto URI:\": [\"payto URI:\"],\n \"payto address\": [\"direccion payto\"],\n Send: [\"Env\u00EDar\"],\n \"Use wire-transfer form?\": [\n \"Usar el formulario de transferencia bancaria?\",\n ],\n \"No credentials found.\": [\"Se dieron las credenciales incorrectas.\"],\n \"Could not create the wire transfer\": [\n \"No se pudo create la transferencia bancaria\",\n ],\n \"Transfer creation gave response error\": [\n \"La creaci\u00F3n de la transferencia di\u00F3 una respuesta erronea\",\n ],\n \"Wire transfer created!\": [\"Transferencia bancaria creada!\"],\n \"Amount to withdraw:\": [\"Monto a retirar:\"],\n Withdraw: [\"Retirar\"],\n \"No credentials given.\": [\"Se dieron las credenciales incorrectas.\"],\n \"Could not create withdrawal operation\": [\n \"No se pude create la operaci\u00F3n de retiro\",\n ],\n \"Withdrawal creation gave response error\": [\n \"La creaci\u00F3n de retiro di\u00F3 una respuesta err\u00F3nea\",\n ],\n \"Obtain digital cash\": [\"Obtener dinero digital\"],\n \"Transfer to bank account\": [\"Transferir a una cuenta bancaria\"],\n Date: [\"Fecha\"],\n Amount: [\"Monto\"],\n Counterpart: [\"Contraparte\"],\n Subject: [\"Asunto\"],\n \"Transfer to Taler Wallet\": [\"Transferir a una cartera Taler\"],\n \"Use this QR code to withdraw to your mobile wallet:\": [\n \"Usar el c\u00F3digo QR para retirar a tu cartera m\u00F3vil:\",\n ],\n \"Click %1$s to open your Taler wallet!\": [\n \"Click %1$s para abrir una cartera Taler!\",\n ],\n \"Confirm Withdrawal\": [\"Confirmar retirada\"],\n \"Authorize withdrawal by solving challenge\": [\n \"Autorizar retiro resolviendo una pregunta\",\n ],\n \"What is\": [\"Cuanto es\"],\n \"Answer is wrong.\": [\"La respuesta es incorrecta.\"],\n Confirm: [\"Confirmar\"],\n Cancel: [\"Cancelar\"],\n \"A this point, a %1$s bank would ask for an additional authentication proof (PIN/TAN, one time password, ..), instead of a simple calculation.\":\n [\n \"En este punto, un banco %1$s preguntar\u00EDa por una prueba adicional de autenticaci\u00F3n (PIN/TAN, password de un solo uso, ....), en vez de un simple c\u00E1lculo.\",\n ],\n \"No withdrawal ID found.\": [\"No ID de retiro encontrado.\"],\n \"Could not confirm the withdrawal\": [\"No se pudo confirmar la retirada\"],\n \"Withdrawal confirmation gave response error\": [\n \"La confirmaci\u00F3n de retiro di\u00F3 una respuesta err\u00F3nea\",\n ],\n \"Withdrawal confirmed!\": [\"El retiro fue confirmado!\"],\n \"Could not abort the withdrawal.\": [\"No se pudo cancelar el retiro.\"],\n \"Withdrawal abortion failed.\": [\"La cancelaci\u00F3n del retiro fall\u00F3.\"],\n \"Withdrawal aborted!\": [\"Este retiro fue cancelado!\"],\n Abort: [\"Cancelar\"],\n \"withdrawal (%1$s) was never (correctly) created at the bank...\": [\n \"retiro (%1$s) nunca fue (correctamente) generado en el banco...\",\n ],\n \"Waiting the bank to create the operation...\": [\n \"Esperando que el banco genere la operaci\u00F3n....\",\n ],\n \"This withdrawal was aborted!\": [\"Este retiro fue cancelado!\"],\n \"Welcome to %1$s!\": [\"Bienvenido a %1$s!\"],\n \"Username or account label '%1$s' not found. Won't login.\": [\n \"Nombre de usuario o etiqueta de cuenta '%1$s' no encontrada. No se iniciar\u00E1 sesi\u00F3n.\",\n ],\n \"Wrong credentials given.\": [\"Se dieron las credenciales incorrectas.\"],\n \"Account information could not be retrieved.\": [\n \"La informaci\u00F3n de la cuenta no pudo ser accedida.\",\n ],\n \"Welcome, %1$s !\": [\"Bienvenido/a, %1$s!\"],\n \"Bank account balance\": [\"Balance de cuenta bancaria\"],\n Payments: [\"Pagos\"],\n \"Latest transactions:\": [\"\u00DAltimas transacciones:\"],\n \"List of public accounts was not found.\": [\n \"La lista de cuentas p\u00FAblicas no fue encontrada.\",\n ],\n \"List of public accounts could not be retrieved.\": [\n \"La lista de cuentas p\u00FAblicas no pudo ser accedida.\",\n ],\n \"History of public accounts\": [\"Historial de cuentas p\u00FAblicas\"],\n \"Currently, the bank is not accepting new registrations!\": [\n \"Actualmente, el banco no est\u00E1 aceptado nuevos registros!\",\n ],\n \"Use only letter and numbers starting with a lower case letter\": [\n \"Solo use letras y n\u00FAmeros comenzando con una letra min\u00FAscula\",\n ],\n \"Password don't match\": [\"La contrase\u00F1a no coincide\"],\n \"Please register!\": [\"Por favor, registrese!\"],\n \"Repeat Password:\": [\"Repita la contrase\u00F1a:\"],\n \"Registration failed, please report\": [\n \"El registro fall\u00F3, por favor reportelo\",\n ],\n \"That username is already taken\": [\n \"El nombre del usuario ya est\u00E1 tomado\",\n ],\n \"New registration gave response error\": [\n \"Nuevo registro di\u00F3 una respuesta err\u00F3nea\",\n ],\n \"Bank menu\": [\"Menu del banco\"],\n \"Select option1\": [\"Seleccione opci\u00F3n 1\"],\n \"Select option2\": [\"Seleccione opci\u00F3n 2\"],\n days: [\"d\u00EDas\"],\n hours: [\"horas\"],\n minutes: [\"minutos\"],\n seconds: [\"segundos\"],\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: \"it\",\n },\n Logout: [\"\"],\n \"Skip to main content\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"Taler logo\": [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n \"Please login!\": [\"Accedi!\"],\n \"Username:\": [\"\"],\n \"Password:\": [\"\"],\n Login: [\"Accedi\"],\n Register: [\"Registrati\"],\n \"Missing IBAN\": [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"Missing subject\": [\"\"],\n \"Missing amount\": [\"\"],\n \"Amount is not valid\": [\"\"],\n \"Should be greater than 0\": [\"\"],\n \"Receiver IBAN:\": [\"\"],\n \"Transfer subject:\": [\"\"],\n \"Amount:\": [\"Somma\"],\n \"Field(s) missing.\": [\"\"],\n \"Want to try the raw payto://-format?\": [\n \"Prova il trasferimento tramite il formato Payto!\",\n ],\n \"Missing payto address\": [\"indirizzo Payto\"],\n \"Payto does not follow the pattern\": [\"\"],\n \"Transfer money to account identified by payto:// URI:\": [\n \"Trasferisci fondi a un altro conto di questa banca:\",\n ],\n \"payto URI:\": [\"\"],\n \"payto address\": [\"indirizzo Payto\"],\n Send: [\"\"],\n \"Use wire-transfer form?\": [\"Chiudi il bonifico\"],\n \"No credentials found.\": [\"Credenziali invalide.\"],\n \"Could not create the wire transfer\": [\"\"],\n \"Transfer creation gave response error\": [\"\"],\n \"Wire transfer created!\": [\"Bonifico\"],\n \"Amount to withdraw:\": [\"Somma da ritirare\"],\n Withdraw: [\"Conferma il ritiro\"],\n \"No credentials given.\": [\"Credenziali invalide.\"],\n \"Could not create withdrawal operation\": [\"\"],\n \"Withdrawal creation gave response error\": [\"\"],\n \"Obtain digital cash\": [\"\"],\n \"Transfer to bank account\": [\n \"Trasferisci fondi a un altro conto di questa banca:\",\n ],\n Date: [\"\"],\n Amount: [\"Somma\"],\n Counterpart: [\"Controparte\"],\n Subject: [\"Causale\"],\n \"Transfer to Taler Wallet\": [\"Ritira contante nel portafoglio Taler\"],\n \"Use this QR code to withdraw to your mobile wallet:\": [\n \"Usa questo codice QR per ritirare contante nel tuo wallet:\",\n ],\n \"Click %1$s to open your Taler wallet!\": [\"\"],\n \"Confirm Withdrawal\": [\"Conferma il ritiro\"],\n \"Authorize withdrawal by solving challenge\": [\"\"],\n \"What is\": [\"\"],\n \"Answer is wrong.\": [\"\"],\n Confirm: [\"Conferma\"],\n Cancel: [\"\"],\n \"A this point, a %1$s bank would ask for an additional authentication proof (PIN/TAN, one time password, ..), instead of a simple calculation.\":\n [\"\"],\n \"No withdrawal ID found.\": [\"\"],\n \"Could not confirm the withdrawal\": [\"Conferma il ritiro\"],\n \"Withdrawal confirmation gave response error\": [\"\"],\n \"Withdrawal confirmed!\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"Could not abort the withdrawal.\": [\"Chiudi il ritiro Taler\"],\n \"Withdrawal abortion failed.\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"Withdrawal aborted!\": [\"Questo ritiro \u00E8 stato annullato!\"],\n Abort: [\"Annulla\"],\n \"withdrawal (%1$s) was never (correctly) created at the bank...\": [\"\"],\n \"Waiting the bank to create the operation...\": [\n \"La banca sta creando l'operazione...\",\n ],\n \"This withdrawal was aborted!\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"Welcome to %1$s!\": [\"\"],\n \"Username or account label '%1$s' not found. Won't login.\": [\n \"L'utente '%1$s' non esiste. Login impossibile\",\n ],\n \"Wrong credentials given.\": [\"Credenziali invalide.\"],\n \"Account information could not be retrieved.\": [\n \"Impossibile ricevere le informazioni relative al conto.\",\n ],\n \"Welcome, %1$s !\": [\"\"],\n \"Bank account balance\": [\"Bilancio:\"],\n Payments: [\"\"],\n \"Latest transactions:\": [\"Ultime transazioni:\"],\n \"List of public accounts was not found.\": [\n \"Lista conti pubblici non trovata.\",\n ],\n \"List of public accounts could not be retrieved.\": [\n \"Lista conti pubblici non pervenuta.\",\n ],\n \"History of public accounts\": [\"Storico dei conti pubblici\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Use only letter and numbers starting with a lower case letter\": [\"\"],\n \"Password don't match\": [\"\"],\n \"Please register!\": [\"Accedi!\"],\n \"Repeat Password:\": [\"\"],\n \"Registration failed, please report\": [\"Registrazione\"],\n \"That username is already taken\": [\"\"],\n \"New registration gave response error\": [\"\"],\n \"Bank menu\": [\"\"],\n \"Select option1\": [\"\"],\n \"Select option2\": [\"\"],\n days: [\"\"],\n hours: [\"\"],\n minutes: [\"\"],\n seconds: [\"\"],\n },\n },\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { App } from \"./App.js\";\nimport { h, render } from \"preact\";\n\nconst app = document.getElementById(\"app\");\nif (!app) {\n console.error(\"could not found app element\")\n} else {\n render(<App />, app);\n}\n"],
+ "mappings": "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AAE,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,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,I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",
+ "names": ["undefined", "v", "sign", "n", "i", "x", "add", "a", "b", "r", "base", "l", "j", "y", "d", "c", "l2", "q", "self", "_2", "t", "fn", "p", "e", "isValid", "max", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "parse", "self", "table", "a", "r", "lexer", "c", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "this", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "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", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "createContext", "defaultValue", "contextId", "Consumer", "contextValue", "Provider", "subs", "ctx", "_props", "old", "splice", "isValidElement", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "getHookState", "index", "type", "options", "__h", "currentComponent", "currentHook", "hooks", "__H", "__", "length", "push", "__V", "EMPTY", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "currentIndex", "_reducer", "__c", "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", "useImperativeHandle", "ref", "createHandle", "concat", "factory", "useCallback", "useContext", "context", "provider", "sub", "value", "useDebugValue", "formatter", "useErrorBoundary", "cb", "errState", "componentDidCatch", "err", "errorInfo", "undefined", "useId", "root", "__v", "__m", "mask", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "invokeCleanup", "invokeEffect", "e", "__e", "afterNextFrame", "raf", "done", "clearTimeout", "timeout", "HAS_RAF", "cancelAnimationFrame", "setTimeout", "requestAnimationFrame", "hook", "comp", "cleanup", "oldArgs", "newArgs", "some", "arg", "f", "previousComponent", "prevRaf", "oldBeforeDiff", "oldBeforeRender", "oldAfterDiff", "oldCommit", "oldBeforeUnmount", "diffed", "unmount", "__b", "vnode", "commitQueue", "hasErrored", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "is", "x", "y", "PureComponent", "p", "this", "memo", "c", "comparer", "shouldUpdate", "nextProps", "ref", "updateRef", "call", "current", "Memoed", "shouldComponentUpdate", "createElement", "displayName", "name", "prototype", "isReactComponent", "forwardRef", "fn", "Forwarded", "clone", "$$typeof", "REACT_FORWARD_SYMBOL", "render", "__f", "detachedClone", "vnode", "detachedParent", "parentDom", "__c", "forEach", "effect", "__H", "__P", "__k", "map", "child", "removeOriginal", "originalParent", "__v", "__e", "insertBefore", "__d", "Suspense", "__u", "_suspenders", "suspended", "component", "__", "__a", "lazy", "loader", "prom", "error", "Lazy", "then", "exports", "default", "e", "SuspenseList", "_next", "_map", "ContextProvider", "getChildContext", "context", "children", "Portal", "_this", "container", "_container", "componentWillUnmount", "_temp", "nodeType", "parentNode", "childNodes", "appendChild", "push", "before", "removeChild", "splice", "indexOf", "createPortal", "el", "containerInfo", "parent", "callback", "textContent", "preactRender", "hydrate", "preactHydrate", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "createFactory", "type", "bind", "isValidElement", "element", "REACT_ELEMENT_TYPE", "cloneElement", "preactCloneElement", "apply", "arguments", "unmountComponentAtNode", "findDOMNode", "base", "Fragment", "startTransition", "cb", "useDeferredValue", "val", "useTransition", "useLayoutEffect", "useSyncExternalStore", "subscribe", "getSnapshot", "value", "_useState", "useState", "_instance", "_getSnapshot", "forceUpdate", "useEffect", "oldDiffHook", "mapFn", "Children", "oldCatchError", "oldUnmount", "resolve", "CAMEL_PROPS", "IS_DOM", "onChangeInputType", "oldEventHook", "currentComponent", "classNameDescriptor", "oldVNodeHook", "oldBeforeRender", "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", "version", "unstable_batchedUpdates", "flushSync", "StrictMode", "useInsertionEffect", "index", "Component", "isPureReactComponent", "state", "options", "__b", "Symbol", "for", "toChildArray", "count", "length", "only", "normalized", "toArray", "newVNode", "oldVNode", "errorInfo", "unmount", "__R", "__h", "promise", "suspendingVNode", "suspendingComponent", "resolved", "onResolved", "onSuspensionComplete", "suspendedVNode", "setState", "pop", "wasHydrating", "document", "detachedComponent", "__O", "fallback", "list", "node", "delete", "revealOrder", "size", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "reverse", "set", "componentDidUpdate", "componentDidMount", "test", "key", "Object", "defineProperty", "configurable", "v", "writable", "event", "persist", "nativeEvent", "class", "normalizedProps", "nonCustomElement", "toLowerCase", "replace", "multiple", "Array", "isArray", "selected", "defaultValue", "className", "enumerable", "__r", "ReactCurrentDispatcher", "readContext", "__n", "arg", "useId", "useReducer", "useRef", "useImperativeHandle", "useMemo", "useCallback", "useContext", "useDebugValue", "createContext", "createRef", "e", "h", "a", "b", "k", "l", "m", "n", "p", "q", "d", "f", "c", "g", "r", "t", "u", "r", "i", "x", "n", "h", "l", "y", "d", "o", "p", "k", "c", "j2", "j3", "x2", "x3", "x4", "x5", "u", "m", "b", "z", "s", "sn", "t2", "t3", "t4", "d2", "d3", "d4", "d5", "h2", "h3", "h4", "h5", "r2", "g", "f", "a", "v", "q", "t", "j", "t22", "b2", "b3", "b4", "b5", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "s", "k", "m", "n", "i", "t", "h", "p", "q", "k", "n", "i", "b", "i", "i", "h", "fn", "m", "c", "i", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "timer", "CancellationToken", "a", "r", "n", "x", "c", "a2", "x2", "a", "b", "n", "r", "s", "r2", "i", "names", "normal", "small", "fn", "counter", "k", "i", "n", "j", "w", "t", "m", "q", "i", "c", "a", "b", "R", "n", "counter", "e", "base", "res", "v", "URL", "URLSearchParams", "x", "URL", "e", "s", "i", "s2", "LogLevel", "m", "e", "location", "c", "p", "x", "d", "map", "i", "x", "c", "s", "x", "c", "e", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "TalerPreciseTimestamp", "t", "s", "TalerProtocolTimestamp", "t2", "Duration", "d", "s", "i", "d2", "n", "AbsoluteTime", "t2", "t", "at", "x", "c", "DenomKeyType", "t", "DenominationPubKey", "p2", "ExchangeProtocolVersion", "MerchantProtocolVersion", "n", "a", "d", "v", "N", "i", "j", "s", "c", "p", "hash", "d", "logger", "n", "TalerSignaturePurpose", "WalletAccountMergeFlags", "c", "p", "x", "bigint", "Edx25519", "L", "sign", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "bigint", "i", "b", "v", "s", "logger", "Headers", "r", "m", "v", "k", "e", "e", "r", "s", "error", "s", "p", "r", "TalerUriType", "TalerUriAction", "s", "c", "q", "URLSearchParams", "p", "v", "k", "TalerCorebankApi", "MonitorTimeframeParam", "TanChannel", "TalerExchangeApi", "AmlState", "TalerMerchantApi", "TokenFamilyKind", "HttpStatusCode", "LibtoolVersion", "compare", "v", "logger", "logger", "d", "s", "ReserveTransactionType", "logger", "logger", "CreditDebitIndicator", "logger", "ContractTermsUtil", "i", "x", "h", "k", "e", "hash", "d", "c", "e", "e", "err", "x", "fnutil", "f", "x", "TransactionMajorState", "TransactionMinorState", "TransactionAction", "TransactionType", "WithdrawalType", "DenomLossEventType", "PaymentStatus", "TransactionAmountMode", "BalanceFlag", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "ExchangeUpdateStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "ProviderPaymentType", "TalerBankConversionCacheEviction", "TalerCoreBankCacheEviction", "TalerMerchantInstanceCacheEviction", "TalerMerchantManagementCacheEviction", "ChallengerCacheEviction", "TalerExchangeCacheEviction", "compare", "e", "logger", "strings", "s", "i", "c", "i", "x", "n", "c", "s", "NotificationType", "ObservabilityEventType", "e", "logger", "h", "v", "k", "_", "p", "h", "e", "match", "l", "initial", "storage", "storage", "n", "h", "hash", "AbsoluteTime", "useState", "useEffect", "i", "useState", "i18n", "AbsoluteTime", "error", "d", "logger", "RequestThrottler", "Duration", "DEFAULT_REQUEST_TIMEOUT_MS", "TalerError", "TalerErrorCode", "encodeBody", "getDefaultHeaders", "Headers", "e", "format", "_typeof", "obj", "add", "defaultOptions", "MILLISECONDS_IN_WEEK", "sign", "y", "M", "d", "a", "h", "H", "m", "s", "S", "formatters", "G", "localize", "Y", "R", "u", "Q", "q", "L", "w", "I", "D", "E", "e", "c", "i", "b", "B", "K", "k", "X", "x", "O", "z", "t", "T", "delimiter", "dateLongFormatter", "formatLong", "timeLongFormatter", "dateTimeLongFormatter", "formatDistance", "formatRelative", "ordinalNumber", "valueCallback", "locale", "_typeof", "obj", "o", "p", "_setPrototypeOf", "self", "e", "_getPrototypeOf", "i", "Setter", "ValueSetter", "DateToSystemTimezoneSetter", "_classCallCheck", "_defineProperties", "_createClass", "Parser", "match", "_inherits", "_createSuper", "_isNativeReflectConstruct", "_possibleConstructorReturn", "_assertThisInitialized", "_defineProperty", "EraParser", "parse", "sign", "n", "YearParser", "valueCallback", "LocalWeekYearParser", "ISOWeekYearParser", "ExtendedYearParser", "QuarterParser", "StandAloneQuarterParser", "MonthParser", "StandAloneMonthParser", "LocalWeekParser", "ISOWeekParser", "DateParser", "DayOfYearParser", "defaultOptions", "DayParser", "LocalDayParser", "StandAloneLocalDayParser", "ISODayParser", "AMPMParser", "AMPMMidnightParser", "DayPeriodParser", "Hour1to12Parser", "Hour0to23Parser", "Hour0To11Parser", "Hour1To24Parser", "MinuteParser", "SecondParser", "FractionOfSecondParser", "ISOTimezoneWithZParser", "ISOTimezoneParser", "TimestampSecondsParser", "TimestampMillisecondsParser", "parsers", "F", "s", "f", "formattingTokensRegExp", "longFormattingTokensRegExp", "escapedStringRegExp", "doubleQuoteRegExp", "unescapedLatinCharacterRegExp", "locale", "_loop", "cleanEscapedString", "setter", "a", "b", "_typeof", "obj", "formatDistanceLocale", "formatDistance", "formatDistance_default", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "formatLong_default", "formatRelativeLocale", "formatRelative", "formatRelative_default", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "localize", "argumentCallback", "localize_default", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "valueCallback", "match_default", "locale", "Context", "createContext", "initial", "useEffect", "h", "useContext", "createContext", "createContext", "createContext", "useContext", "CONFIG_FAIL_TRY_AGAIN_MS", "useState", "i18n", "VERSION", "useEffect", "LibtoolVersion", "error", "TalerError", "h", "ObservableHttpClientLibrary", "Context", "createContext", "useContext", "useState", "path", "params", "useEffect", "h", "Context", "createContext", "__export", "p", "h", "e", "Duration", "error", "i18n", "TalerErrorCode", "h", "assertUnreachable", "s", "useState", "supportedLang", "useEffect", "e", "l", "lang", "Fragment", "VERSION", "GIT_HASH", "d", "AbsoluteTime", "TalerError", "h", "Fragment", "e", "AbsoluteTime", "useState", "i18n", "add", "createContext", "initial", "notify", "v", "useContext", "names", "f", "fileName", "b", "i", "convertUiField", "getConverterById", "assertUnreachable", "p", "error", "codecForString", "s", "TalerExchangeApi", "v", "Amounts", "AbsoluteTime", "e", "d", "v", "a", "b", "x", "isDate", "cache", "f", "h", "s", "error", "mutate", "fn", "_", "u2", "f2", "q", "fn", "use", "middleware", "i", "use", "v", "e", "cache", "compare", "_", "t", "cachedData", "T", "error", "timer", "x", "SWRConfig", "k", "v", "i18n", "useSWR", "p", "officer", "state", "offset", "error", "d", "i18n", "errors", "result", "k", "e", "errors", "setValueDeeper", "p", "names", "f", "v", "i18n", "errors", "Context", "q", "e", "i18n", "i18n", "errors", "result", "h", "r", "p", "d", "i18n", "toInteger", "requiredArgs", "_typeof", "obj", "toDate", "requiredArgs", "addMilliseconds", "requiredArgs", "toDate", "toInteger", "defaultOptions", "getDefaultOptions", "getTimezoneOffsetInMilliseconds", "_typeof", "obj", "isDate", "requiredArgs", "isValid", "requiredArgs", "isDate", "toDate", "subMilliseconds", "requiredArgs", "toInteger", "addMilliseconds", "MILLISECONDS_IN_DAY", "getUTCDayOfYear", "requiredArgs", "toDate", "startOfUTCISOWeek", "requiredArgs", "toDate", "getUTCISOWeekYear", "requiredArgs", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "requiredArgs", "getUTCISOWeekYear", "startOfUTCISOWeek", "MILLISECONDS_IN_WEEK", "getUTCISOWeek", "requiredArgs", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "startOfUTCWeek", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "toDate", "getUTCWeekYear", "requiredArgs", "toDate", "defaultOptions", "getDefaultOptions", "toInteger", "startOfUTCWeek", "startOfUTCWeekYear", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "getUTCWeekYear", "startOfUTCWeek", "MILLISECONDS_IN_WEEK", "getUTCWeek", "requiredArgs", "toDate", "startOfUTCWeek", "startOfUTCWeekYear", "addLeadingZeros", "sign", "formatters", "y", "addLeadingZeros", "M", "d", "a", "h", "H", "m", "s", "S", "lightFormatters_default", "dayPeriodEnum", "formatters", "G", "localize", "y", "lightFormatters_default", "Y", "getUTCWeekYear", "addLeadingZeros", "R", "getUTCISOWeekYear", "u", "Q", "q", "M", "L", "w", "getUTCWeek", "I", "getUTCISOWeek", "d", "D", "getUTCDayOfYear", "E", "e", "c", "i", "a", "b", "B", "h", "H", "K", "k", "m", "s", "S", "X", "formatTimezoneWithOptionalMinutes", "formatTimezone", "x", "O", "formatTimezoneShort", "z", "t", "T", "sign", "delimiter", "formatters_default", "dateLongFormatter", "formatLong", "timeLongFormatter", "dateTimeLongFormatter", "longFormatters", "longFormatters_default", "protectedDayOfYearTokens", "protectedWeekYearTokens", "isProtectedDayOfYearToken", "isProtectedWeekYearToken", "throwProtectedError", "format", "formatDistanceLocale", "formatDistance", "formatDistance_default", "buildFormatLongFn", "format", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "buildFormatLongFn", "formatLong_default", "formatRelativeLocale", "formatRelative", "formatRelative_default", "buildLocalizeFn", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "localize", "buildLocalizeFn", "argumentCallback", "localize_default", "buildMatchFn", "findIndex", "findKey", "buildMatchPatternFn", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "buildMatchPatternFn", "valueCallback", "buildMatchFn", "match_default", "locale", "formatDistance_default", "formatLong_default", "formatRelative_default", "localize_default", "match_default", "en_US_default", "defaultLocale_default", "en_US_default", "formattingTokensRegExp", "longFormattingTokensRegExp", "escapedStringRegExp", "doubleQuoteRegExp", "unescapedLatinCharacterRegExp", "format", "requiredArgs", "defaultOptions", "getDefaultOptions", "locale", "defaultLocale_default", "toInteger", "toDate", "isValid", "getTimezoneOffsetInMilliseconds", "subMilliseconds", "longFormatters_default", "cleanEscapedString", "formatters_default", "isProtectedWeekYearToken", "throwProtectedError", "isProtectedDayOfYearToken", "Context", "q", "removeUndefineField", "e", "i18n", "i18n", "useSWR", "officer", "error", "history", "i18n", "format", "p", "initial", "a", "b", "i18n", "k", "p", "events", "e", "history", "format", "s", "f", "i18n", "v", "initial", "errors", "p", "i", "i18n", "location", "p", "h", "i18n", "error", "P", "h", "p", "p", "h", "SWRConfig", "map", "e"]
}
diff --git a/anastasis/index.js b/anastasis/index.js
index cf650f7b7..882901fe9 100644
--- a/anastasis/index.js
+++ b/anastasis/index.js
@@ -111,23 +111,23 @@ function g() {
});
}
function w(n3, l4, u4, i4, t4, o4, r4, c4, s4, a4) {
- var h4, y4, d4, k4, b4, g4, w4, x4 = i4 && i4.__k || e, C3 = x4.length;
+ var h4, y4, d4, k4, b4, g4, w4, x3 = i4 && i4.__k || e, C3 = x3.length;
for (u4.__k = [], h4 = 0; h4 < l4.length; h4++)
if (null != (k4 = u4.__k[h4] = null == (k4 = l4[h4]) || "boolean" == typeof k4 ? null : "string" == typeof k4 || "number" == typeof k4 || "bigint" == typeof k4 ? v(null, k4, null, null, k4) : Array.isArray(k4) ? v(p, { children: k4 }, null, null, null) : k4.__b > 0 ? v(k4.type, k4.props, k4.key, k4.ref ? k4.ref : null, k4.__v) : k4)) {
- if (k4.__ = u4, k4.__b = u4.__b + 1, null === (d4 = x4[h4]) || d4 && k4.key == d4.key && k4.type === d4.type)
- x4[h4] = void 0;
+ if (k4.__ = u4, k4.__b = u4.__b + 1, null === (d4 = x3[h4]) || d4 && k4.key == d4.key && k4.type === d4.type)
+ x3[h4] = void 0;
else
for (y4 = 0; y4 < C3; y4++) {
- if ((d4 = x4[y4]) && k4.key == d4.key && k4.type === d4.type) {
- x4[y4] = void 0;
+ if ((d4 = x3[y4]) && k4.key == d4.key && k4.type === d4.type) {
+ x3[y4] = void 0;
break;
}
d4 = null;
}
- j(n3, k4, d4 = d4 || f, t4, o4, r4, c4, s4, a4), b4 = k4.__e, (y4 = k4.ref) && d4.ref != y4 && (w4 || (w4 = []), d4.ref && w4.push(d4.ref, null, k4), w4.push(y4, k4.__c || b4, k4)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k4.type && k4.__k === d4.__k ? k4.__d = s4 = m(k4, s4, n3) : s4 = A(n3, k4, d4, x4, b4, s4), "function" == typeof u4.type && (u4.__d = s4)) : s4 && d4.__e == s4 && s4.parentNode != n3 && (s4 = _(d4));
+ j(n3, k4, d4 = d4 || f, t4, o4, r4, c4, s4, a4), b4 = k4.__e, (y4 = k4.ref) && d4.ref != y4 && (w4 || (w4 = []), d4.ref && w4.push(d4.ref, null, k4), w4.push(y4, k4.__c || b4, k4)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k4.type && k4.__k === d4.__k ? k4.__d = s4 = m(k4, s4, n3) : s4 = A(n3, k4, d4, x3, b4, s4), "function" == typeof u4.type && (u4.__d = s4)) : s4 && d4.__e == s4 && s4.parentNode != n3 && (s4 = _(d4));
}
for (u4.__e = g4, h4 = C3; h4--; )
- null != x4[h4] && N(x4[h4], x4[h4]);
+ null != x3[h4] && N(x3[h4], x3[h4]);
if (w4)
for (h4 = 0; h4 < w4.length; h4++)
M(w4[h4], w4[++h4], w4[++h4]);
@@ -203,17 +203,17 @@ function T(n3) {
this.l[n3.type + true](l.event ? l.event(n3) : n3);
}
function j(n3, u4, i4, t4, o4, r4, f4, e4, c4) {
- var a4, h4, v4, y4, _4, k4, b4, g4, m4, x4, A4, C3, $3, H3, I4, T4 = u4.type;
+ var a4, h4, v4, y4, _4, k4, b4, g4, m4, x3, A4, C3, $3, H3, I4, T4 = u4.type;
if (void 0 !== u4.constructor)
return null;
null != i4.__h && (c4 = i4.__h, e4 = u4.__e = i4.__e, u4.__h = null, r4 = [e4]), (a4 = l.__b) && a4(u4);
try {
n:
if ("function" == typeof T4) {
- if (g4 = u4.props, m4 = (a4 = T4.contextType) && t4[a4.__c], x4 = a4 ? m4 ? m4.props.value : a4.__ : t4, i4.__c ? b4 = (h4 = u4.__c = i4.__c).__ = h4.__E : ("prototype" in T4 && T4.prototype.render ? u4.__c = h4 = new T4(g4, x4) : (u4.__c = h4 = new d(g4, x4), h4.constructor = T4, h4.render = O), m4 && m4.sub(h4), h4.props = g4, h4.state || (h4.state = {}), h4.context = x4, h4.__n = t4, v4 = h4.__d = true, h4.__h = [], h4._sb = []), null == h4.__s && (h4.__s = h4.state), null != T4.getDerivedStateFromProps && (h4.__s == h4.state && (h4.__s = s({}, h4.__s)), s(h4.__s, T4.getDerivedStateFromProps(g4, h4.__s))), y4 = h4.props, _4 = h4.state, v4)
+ if (g4 = u4.props, m4 = (a4 = T4.contextType) && t4[a4.__c], x3 = a4 ? m4 ? m4.props.value : a4.__ : t4, i4.__c ? b4 = (h4 = u4.__c = i4.__c).__ = h4.__E : ("prototype" in T4 && T4.prototype.render ? u4.__c = h4 = new T4(g4, x3) : (u4.__c = h4 = new d(g4, x3), h4.constructor = T4, h4.render = O), m4 && m4.sub(h4), h4.props = g4, h4.state || (h4.state = {}), h4.context = x3, h4.__n = t4, v4 = h4.__d = true, h4.__h = [], h4._sb = []), null == h4.__s && (h4.__s = h4.state), null != T4.getDerivedStateFromProps && (h4.__s == h4.state && (h4.__s = s({}, h4.__s)), s(h4.__s, T4.getDerivedStateFromProps(g4, h4.__s))), y4 = h4.props, _4 = h4.state, v4)
null == T4.getDerivedStateFromProps && null != h4.componentWillMount && h4.componentWillMount(), null != h4.componentDidMount && h4.__h.push(h4.componentDidMount);
else {
- if (null == T4.getDerivedStateFromProps && g4 !== y4 && null != h4.componentWillReceiveProps && h4.componentWillReceiveProps(g4, x4), !h4.__e && null != h4.shouldComponentUpdate && false === h4.shouldComponentUpdate(g4, h4.__s, x4) || u4.__v === i4.__v) {
+ if (null == T4.getDerivedStateFromProps && g4 !== y4 && null != h4.componentWillReceiveProps && h4.componentWillReceiveProps(g4, x3), !h4.__e && null != h4.shouldComponentUpdate && false === h4.shouldComponentUpdate(g4, h4.__s, x3) || u4.__v === i4.__v) {
for (h4.props = g4, h4.state = h4.__s, u4.__v !== i4.__v && (h4.__d = false), h4.__v = u4, u4.__e = i4.__e, u4.__k = i4.__k, u4.__k.forEach(function(n4) {
n4 && (n4.__ = u4);
}), A4 = 0; A4 < h4._sb.length; A4++)
@@ -221,11 +221,11 @@ function j(n3, u4, i4, t4, o4, r4, f4, e4, c4) {
h4._sb = [], h4.__h.length && f4.push(h4);
break n;
}
- null != h4.componentWillUpdate && h4.componentWillUpdate(g4, h4.__s, x4), null != h4.componentDidUpdate && h4.__h.push(function() {
+ null != h4.componentWillUpdate && h4.componentWillUpdate(g4, h4.__s, x3), null != h4.componentDidUpdate && h4.__h.push(function() {
h4.componentDidUpdate(y4, _4, k4);
});
}
- if (h4.context = x4, h4.props = g4, h4.__v = u4, h4.__P = n3, C3 = l.__r, $3 = 0, "prototype" in T4 && T4.prototype.render) {
+ if (h4.context = x3, h4.props = g4, h4.__v = u4, h4.__P = n3, C3 = l.__r, $3 = 0, "prototype" in T4 && T4.prototype.render) {
for (h4.state = h4.__s, h4.__d = false, C3 && C3(u4), a4 = h4.render(h4.props, h4.state, h4.context), H3 = 0; H3 < h4._sb.length; H3++)
h4.__h.push(h4._sb[H3]);
h4._sb = [];
@@ -433,12 +433,12 @@ var require_BigInteger = __commonJS({
v4.length = i5 + 1;
}
function createArray(length) {
- var x4 = new Array(length);
+ var x3 = new Array(length);
var i5 = -1;
while (++i5 < length) {
- x4[i5] = 0;
+ x3[i5] = 0;
}
- return x4;
+ return x3;
}
function truncate(n3) {
if (n3 > 0)
@@ -647,18 +647,18 @@ var require_BigInteger = __commonJS({
}
return r4;
}
- function shiftLeft(x4, n3) {
+ function shiftLeft(x3, n3) {
var r4 = [];
while (n3-- > 0)
r4.push(0);
- return r4.concat(x4);
+ return r4.concat(x3);
}
- function multiplyKaratsuba(x4, y4) {
- var n3 = Math.max(x4.length, y4.length);
+ function multiplyKaratsuba(x3, y4) {
+ var n3 = Math.max(x3.length, y4.length);
if (n3 <= 30)
- return multiplyLong(x4, y4);
+ return multiplyLong(x3, y4);
n3 = Math.ceil(n3 / 2);
- var b4 = x4.slice(n3), a4 = x4.slice(0, n3), d4 = y4.slice(n3), c4 = y4.slice(0, n3);
+ var b4 = x3.slice(n3), a4 = x3.slice(0, n3), d4 = y4.slice(n3), c4 = y4.slice(0, n3);
var ac = multiplyKaratsuba(a4, c4), bd = multiplyKaratsuba(b4, d4), abcd = multiplyKaratsuba(addAny(a4, b4), addAny(c4, d4));
var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n3)), shiftLeft(bd, 2 * n3));
trim(product);
@@ -914,7 +914,7 @@ var require_BigInteger = __commonJS({
};
SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
BigInteger.prototype.pow = function(v4) {
- var n3 = parseValue(v4), a4 = this.value, b4 = n3.value, value, x4, y4;
+ var n3 = parseValue(v4), a4 = this.value, b4 = n3.value, value, x3, y4;
if (b4 === 0)
return Integer[1];
if (a4 === 0)
@@ -932,17 +932,17 @@ var require_BigInteger = __commonJS({
if (isPrecise(value = Math.pow(a4, b4)))
return new SmallInteger(truncate(value));
}
- x4 = this;
+ x3 = this;
y4 = Integer[1];
while (true) {
if (b4 & true) {
- y4 = y4.times(x4);
+ y4 = y4.times(x3);
--b4;
}
if (b4 === 0)
break;
b4 /= 2;
- x4 = x4.square();
+ x3 = x3.square();
}
return y4;
};
@@ -961,17 +961,17 @@ var require_BigInteger = __commonJS({
return n3.isEven() ? Integer[1] : Integer[-1];
if (n3.isNegative())
return new NativeBigInt(_0);
- var x4 = this;
+ var x3 = this;
var y4 = Integer[1];
while (true) {
if ((b4 & _1) === _1) {
- y4 = y4.times(x4);
+ y4 = y4.times(x3);
--b4;
}
if (b4 === _0)
break;
b4 /= _22;
- x4 = x4.square();
+ x3 = x3.square();
}
return y4;
};
@@ -1170,21 +1170,21 @@ var require_BigInteger = __commonJS({
return true;
}
function millerRabinTest(n3, a4) {
- var nPrev = n3.prev(), b4 = nPrev, r4 = 0, d4, t4, i5, x4;
+ var nPrev = n3.prev(), b4 = nPrev, r4 = 0, d4, t4, i5, x3;
while (b4.isEven())
b4 = b4.divide(2), r4++;
next:
for (i5 = 0; i5 < a4.length; i5++) {
if (n3.lesser(a4[i5]))
continue;
- x4 = bigInt(a4[i5]).modPow(b4, n3);
- if (x4.isUnit() || x4.equals(nPrev))
+ x3 = bigInt(a4[i5]).modPow(b4, n3);
+ if (x3.isUnit() || x3.equals(nPrev))
continue;
for (d4 = r4 - 1; d4 != 0; d4--) {
- x4 = x4.square().mod(n3);
- if (x4.isUnit())
+ x3 = x3.square().mod(n3);
+ if (x3.isUnit())
return false;
- if (x4.equals(nPrev))
+ if (x3.equals(nPrev))
continue next;
}
return false;
@@ -1317,10 +1317,10 @@ var require_BigInteger = __commonJS({
return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
};
NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;
- function bitwise(x4, y4, fn) {
+ function bitwise(x3, y4, fn) {
y4 = parseValue(y4);
- var xSign = x4.isNegative(), ySign = y4.isNegative();
- var xRem = xSign ? x4.not() : x4, yRem = ySign ? y4.not() : y4;
+ var xSign = x3.isNegative(), ySign = y4.isNegative();
+ var xRem = xSign ? x3.not() : x3, yRem = ySign ? y4.not() : y4;
var xDigit = 0, yDigit = 0;
var xDivMod = null, yDivMod = null;
var result = [];
@@ -1369,8 +1369,8 @@ var require_BigInteger = __commonJS({
NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;
var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;
function roughLOB(n3) {
- var v4 = n3.value, x4 = typeof v4 === "number" ? v4 | LOBMASK_I : typeof v4 === "bigint" ? v4 | BigInt(LOBMASK_I) : v4[0] + v4[1] * BASE | LOBMASK_BI;
- return x4 & -x4;
+ var v4 = n3.value, x3 = typeof v4 === "number" ? v4 | LOBMASK_I : typeof v4 === "bigint" ? v4 | BigInt(LOBMASK_I) : v4[0] + v4[1] * BASE | LOBMASK_BI;
+ return x3 & -x3;
}
function integerLogarithm(value, base3) {
if (base3.compareTo(value) <= 0) {
@@ -1573,8 +1573,8 @@ var require_BigInteger = __commonJS({
}
function toBaseString(n3, base3, alphabet) {
var arr = toBase(n3, base3);
- return (arr.isNegative ? "-" : "") + arr.value.map(function(x4) {
- return stringify(x4, alphabet);
+ return (arr.isNegative ? "-" : "") + arr.value.map(function(x3) {
+ return stringify(x3, alphabet);
}).join("");
}
BigInteger.prototype.toArray = function(radix) {
@@ -1623,9 +1623,9 @@ var require_BigInteger = __commonJS({
};
function parseStringValue(v4) {
if (isPrecise(+v4)) {
- var x4 = +v4;
- if (x4 === truncate(x4))
- return supportsNativeBigInt ? new NativeBigInt(BigInt(x4)) : new SmallInteger(x4);
+ var x3 = +v4;
+ if (x3 === truncate(x3))
+ return supportsNativeBigInt ? new NativeBigInt(BigInt(x3)) : new SmallInteger(x3);
throw new Error("Invalid integer: " + v4);
}
var sign2 = v4[0] === "-";
@@ -1704,8 +1704,8 @@ var require_BigInteger = __commonJS({
Integer.min = min;
Integer.gcd = gcd;
Integer.lcm = lcm;
- Integer.isInstance = function(x4) {
- return x4 instanceof BigInteger || x4 instanceof SmallInteger || x4 instanceof NativeBigInt;
+ Integer.isInstance = function(x3) {
+ return x3 instanceof BigInteger || x3 instanceof SmallInteger || x3 instanceof NativeBigInt;
};
Integer.randBetween = randBetween;
Integer.fromArray = function(digits, base3, isNegative) {
@@ -1811,8 +1811,8 @@ var require_jed = __commonJS({
if ({}.toString.call(sArr) != "[object Array]") {
sArr = [].slice.call(arguments, 0);
}
- return (sArr && sArr.length ? Jed2.sprintf : function(x4) {
- return x4;
+ return (sArr && sArr.length ? Jed2.sprintf : function(x3) {
+ return x3;
})(
this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val),
sArr
@@ -2595,7 +2595,7 @@ var require_preact_router = __commonJS({
}
function f4() {
var t5;
- return t5 = b4 && b4.location ? b4.location : b4 && b4.getCurrentLocation ? b4.getCurrentLocation() : "undefined" != typeof location ? location : x4, "" + (t5.pathname || "") + (t5.search || "");
+ return t5 = b4 && b4.location ? b4.location : b4 && b4.getCurrentLocation ? b4.getCurrentLocation() : "undefined" != typeof location ? location : x3, "" + (t5.pathname || "") + (t5.search || "");
}
function l4(t5, e5) {
return void 0 === e5 && (e5 = false), "string" != typeof t5 && t5.url && (e5 = t5.replace, t5 = t5.url), s4(t5) && c4(t5, e5 ? "replace" : "push"), h4(t5);
@@ -2645,7 +2645,7 @@ var require_preact_router = __commonJS({
h4(f4());
}), addEventListener("click", m4)), A4 = true);
}
- var C3 = {}, b4 = null, U2 = [], k4 = [], x4 = {}, A4 = false, R2 = function(i5) {
+ var C3 = {}, b4 = null, U2 = [], k4 = [], x3 = {}, A4 = false, R2 = function(i5) {
function u5(t5) {
i5.call(this, t5), t5.history && (b4 = t5.history), this.state = { url: t5.url || f4() }, v4();
}
@@ -3186,9 +3186,9 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max2 = size - margin;
- return createDataURL(size, size, function(x4, y4) {
- if (min <= x4 && x4 < max2 && min <= y4 && y4 < max2) {
- var c4 = Math.floor((x4 - min) / cellSize);
+ return createDataURL(size, size, function(x3, y4) {
+ if (min <= x3 && x3 < max2 && min <= y4 && y4 < max2) {
+ var c4 = Math.floor((x3 - min) / cellSize);
var r4 = Math.floor((y4 - min) / cellSize);
return _this.isDark(r4, c4) ? 0 : 1;
} else {
@@ -3249,7 +3249,7 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max2 = size - margin;
- var y4, x4, r1, r22, p5;
+ var y4, x3, r1, r22, p5;
var blocks = {
"\u2588\u2588": "\u2588",
"\u2588 ": "\u2580",
@@ -3266,12 +3266,12 @@ var require_qrcode = __commonJS({
for (y4 = 0; y4 < size; y4 += 2) {
r1 = Math.floor((y4 - min) / cellSize);
r22 = Math.floor((y4 + 1 - min) / cellSize);
- for (x4 = 0; x4 < size; x4 += 1) {
+ for (x3 = 0; x3 < size; x3 += 1) {
p5 = "\u2588";
- if (min <= x4 && x4 < max2 && min <= y4 && y4 < max2 && _this.isDark(r1, Math.floor((x4 - min) / cellSize))) {
+ if (min <= x3 && x3 < max2 && min <= y4 && y4 < max2 && _this.isDark(r1, Math.floor((x3 - min) / cellSize))) {
p5 = " ";
}
- if (min <= x4 && x4 < max2 && min <= y4 + 1 && y4 + 1 < max2 && _this.isDark(r22, Math.floor((x4 - min) / cellSize))) {
+ if (min <= x3 && x3 < max2 && min <= y4 + 1 && y4 + 1 < max2 && _this.isDark(r22, Math.floor((x3 - min) / cellSize))) {
p5 += " ";
} else {
p5 += "\u2588";
@@ -3295,7 +3295,7 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max2 = size - margin;
- var y4, x4, r4, p5;
+ var y4, x3, r4, p5;
var white = Array(cellSize + 1).join("\u2588\u2588");
var black = Array(cellSize + 1).join(" ");
var ascii = "";
@@ -3303,9 +3303,9 @@ var require_qrcode = __commonJS({
for (y4 = 0; y4 < size; y4 += 1) {
r4 = Math.floor((y4 - min) / cellSize);
line = "";
- for (x4 = 0; x4 < size; x4 += 1) {
+ for (x3 = 0; x3 < size; x3 += 1) {
p5 = 1;
- if (min <= x4 && x4 < max2 && min <= y4 && y4 < max2 && _this.isDark(r4, Math.floor((x4 - min) / cellSize))) {
+ if (min <= x3 && x3 < max2 && min <= y4 && y4 < max2 && _this.isDark(r4, Math.floor((x3 - min) / cellSize))) {
p5 = 0;
}
line += p5 ? white : black;
@@ -4301,8 +4301,8 @@ var require_qrcode = __commonJS({
var _height = height;
var _data = new Array(width * height);
var _this = {};
- _this.setPixel = function(x4, y4, pixel) {
- _data[y4 * _width + x4] = pixel;
+ _this.setPixel = function(x3, y4, pixel) {
+ _data[y4 * _width + x3] = pixel;
};
_this.write = function(out) {
out.writeString("GIF87a");
@@ -4427,8 +4427,8 @@ var require_qrcode = __commonJS({
var createDataURL = function(width, height, getPixel) {
var gif = gifImage(width, height);
for (var y4 = 0; y4 < height; y4 += 1) {
- for (var x4 = 0; x4 < width; x4 += 1) {
- gif.setPixel(x4, y4, getPixel(x4, y4));
+ for (var x3 = 0; x3 < width; x3 += 1) {
+ gif.setPixel(x3, y4, getPixel(x3, y4));
}
}
var b4 = byteArrayOutputStream();
@@ -4504,7 +4504,7 @@ var gf = function(init = []) {
r4[i4] = init[i4];
return r4;
};
-var randombytes = function(x4, n3) {
+var randombytes = function(x3, n3) {
throw new Error("no PRNG");
};
var _9 = new Uint8Array(32);
@@ -4602,31 +4602,31 @@ var I2 = gf([
9344,
11139
]);
-function ts64(x4, i4, h4, l4) {
- x4[i4] = h4 >> 24 & 255;
- x4[i4 + 1] = h4 >> 16 & 255;
- x4[i4 + 2] = h4 >> 8 & 255;
- x4[i4 + 3] = h4 & 255;
- x4[i4 + 4] = l4 >> 24 & 255;
- x4[i4 + 5] = l4 >> 16 & 255;
- x4[i4 + 6] = l4 >> 8 & 255;
- x4[i4 + 7] = l4 & 255;
-}
-function vn(x4, xi, y4, yi, n3) {
+function ts64(x3, i4, h4, l4) {
+ x3[i4] = h4 >> 24 & 255;
+ x3[i4 + 1] = h4 >> 16 & 255;
+ x3[i4 + 2] = h4 >> 8 & 255;
+ x3[i4 + 3] = h4 & 255;
+ x3[i4 + 4] = l4 >> 24 & 255;
+ x3[i4 + 5] = l4 >> 16 & 255;
+ x3[i4 + 6] = l4 >> 8 & 255;
+ x3[i4 + 7] = l4 & 255;
+}
+function vn(x3, xi, y4, yi, n3) {
let i4, d4 = 0;
for (i4 = 0; i4 < n3; i4++)
- d4 |= x4[xi + i4] ^ y4[yi + i4];
+ d4 |= x3[xi + i4] ^ y4[yi + i4];
return (1 & d4 - 1 >>> 8) - 1;
}
-function crypto_verify_16(x4, xi, y4, yi) {
- return vn(x4, xi, y4, yi, 16);
+function crypto_verify_16(x3, xi, y4, yi) {
+ return vn(x3, xi, y4, yi, 16);
}
-function crypto_verify_32(x4, xi, y4, yi) {
- return vn(x4, xi, y4, yi, 32);
+function crypto_verify_32(x3, xi, y4, yi) {
+ return vn(x3, xi, y4, yi, 32);
}
function core_salsa20(o4, p5, k4, c4) {
var j0 = c4[0] & 255 | (c4[1] & 255) << 8 | (c4[2] & 255) << 16 | (c4[3] & 255) << 24, j1 = k4[0] & 255 | (k4[1] & 255) << 8 | (k4[2] & 255) << 16 | (k4[3] & 255) << 24, j22 = k4[4] & 255 | (k4[5] & 255) << 8 | (k4[6] & 255) << 16 | (k4[7] & 255) << 24, j32 = k4[8] & 255 | (k4[9] & 255) << 8 | (k4[10] & 255) << 16 | (k4[11] & 255) << 24, j4 = k4[12] & 255 | (k4[13] & 255) << 8 | (k4[14] & 255) << 16 | (k4[15] & 255) << 24, j5 = c4[4] & 255 | (c4[5] & 255) << 8 | (c4[6] & 255) << 16 | (c4[7] & 255) << 24, j6 = p5[0] & 255 | (p5[1] & 255) << 8 | (p5[2] & 255) << 16 | (p5[3] & 255) << 24, j7 = p5[4] & 255 | (p5[5] & 255) << 8 | (p5[6] & 255) << 16 | (p5[7] & 255) << 24, j8 = p5[8] & 255 | (p5[9] & 255) << 8 | (p5[10] & 255) << 16 | (p5[11] & 255) << 24, j9 = p5[12] & 255 | (p5[13] & 255) << 8 | (p5[14] & 255) << 16 | (p5[15] & 255) << 24, j10 = c4[8] & 255 | (c4[9] & 255) << 8 | (c4[10] & 255) << 16 | (c4[11] & 255) << 24, j11 = k4[16] & 255 | (k4[17] & 255) << 8 | (k4[18] & 255) << 16 | (k4[19] & 255) << 24, j12 = k4[20] & 255 | (k4[21] & 255) << 8 | (k4[22] & 255) << 16 | (k4[23] & 255) << 24, j13 = k4[24] & 255 | (k4[25] & 255) << 8 | (k4[26] & 255) << 16 | (k4[27] & 255) << 24, j14 = k4[28] & 255 | (k4[29] & 255) << 8 | (k4[30] & 255) << 16 | (k4[31] & 255) << 24, j15 = c4[12] & 255 | (c4[13] & 255) << 8 | (c4[14] & 255) << 16 | (c4[15] & 255) << 24;
- var x0 = j0, x1 = j1, x22 = j22, x32 = j32, x4 = j4, x5 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u4;
+ var x0 = j0, x1 = j1, x22 = j22, x3 = j32, x4 = j4, x5 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u4;
for (var i4 = 0; i4 < 20; i4 += 2) {
u4 = x0 + x12 | 0;
x4 ^= u4 << 7 | u4 >>> 32 - 7;
@@ -4653,20 +4653,20 @@ function core_salsa20(o4, p5, k4, c4) {
u4 = x6 + x22 | 0;
x10 ^= u4 << 18 | u4 >>> 32 - 18;
u4 = x15 + x11 | 0;
- x32 ^= u4 << 7 | u4 >>> 32 - 7;
- u4 = x32 + x15 | 0;
+ x3 ^= u4 << 7 | u4 >>> 32 - 7;
+ u4 = x3 + x15 | 0;
x7 ^= u4 << 9 | u4 >>> 32 - 9;
- u4 = x7 + x32 | 0;
+ u4 = x7 + x3 | 0;
x11 ^= u4 << 13 | u4 >>> 32 - 13;
u4 = x11 + x7 | 0;
x15 ^= u4 << 18 | u4 >>> 32 - 18;
- u4 = x0 + x32 | 0;
+ u4 = x0 + x3 | 0;
x1 ^= u4 << 7 | u4 >>> 32 - 7;
u4 = x1 + x0 | 0;
x22 ^= u4 << 9 | u4 >>> 32 - 9;
u4 = x22 + x1 | 0;
- x32 ^= u4 << 13 | u4 >>> 32 - 13;
- u4 = x32 + x22 | 0;
+ x3 ^= u4 << 13 | u4 >>> 32 - 13;
+ u4 = x3 + x22 | 0;
x0 ^= u4 << 18 | u4 >>> 32 - 18;
u4 = x5 + x4 | 0;
x6 ^= u4 << 7 | u4 >>> 32 - 7;
@@ -4696,7 +4696,7 @@ function core_salsa20(o4, p5, k4, c4) {
x0 = x0 + j0 | 0;
x1 = x1 + j1 | 0;
x22 = x22 + j22 | 0;
- x32 = x32 + j32 | 0;
+ x3 = x3 + j32 | 0;
x4 = x4 + j4 | 0;
x5 = x5 + j5 | 0;
x6 = x6 + j6 | 0;
@@ -4721,10 +4721,10 @@ function core_salsa20(o4, p5, k4, c4) {
o4[9] = x22 >>> 8 & 255;
o4[10] = x22 >>> 16 & 255;
o4[11] = x22 >>> 24 & 255;
- o4[12] = x32 >>> 0 & 255;
- o4[13] = x32 >>> 8 & 255;
- o4[14] = x32 >>> 16 & 255;
- o4[15] = x32 >>> 24 & 255;
+ o4[12] = x3 >>> 0 & 255;
+ o4[13] = x3 >>> 8 & 255;
+ o4[14] = x3 >>> 16 & 255;
+ o4[15] = x3 >>> 24 & 255;
o4[16] = x4 >>> 0 & 255;
o4[17] = x4 >>> 8 & 255;
o4[18] = x4 >>> 16 & 255;
@@ -4776,7 +4776,7 @@ function core_salsa20(o4, p5, k4, c4) {
}
function core_hsalsa20(o4, p5, k4, c4) {
var j0 = c4[0] & 255 | (c4[1] & 255) << 8 | (c4[2] & 255) << 16 | (c4[3] & 255) << 24, j1 = k4[0] & 255 | (k4[1] & 255) << 8 | (k4[2] & 255) << 16 | (k4[3] & 255) << 24, j22 = k4[4] & 255 | (k4[5] & 255) << 8 | (k4[6] & 255) << 16 | (k4[7] & 255) << 24, j32 = k4[8] & 255 | (k4[9] & 255) << 8 | (k4[10] & 255) << 16 | (k4[11] & 255) << 24, j4 = k4[12] & 255 | (k4[13] & 255) << 8 | (k4[14] & 255) << 16 | (k4[15] & 255) << 24, j5 = c4[4] & 255 | (c4[5] & 255) << 8 | (c4[6] & 255) << 16 | (c4[7] & 255) << 24, j6 = p5[0] & 255 | (p5[1] & 255) << 8 | (p5[2] & 255) << 16 | (p5[3] & 255) << 24, j7 = p5[4] & 255 | (p5[5] & 255) << 8 | (p5[6] & 255) << 16 | (p5[7] & 255) << 24, j8 = p5[8] & 255 | (p5[9] & 255) << 8 | (p5[10] & 255) << 16 | (p5[11] & 255) << 24, j9 = p5[12] & 255 | (p5[13] & 255) << 8 | (p5[14] & 255) << 16 | (p5[15] & 255) << 24, j10 = c4[8] & 255 | (c4[9] & 255) << 8 | (c4[10] & 255) << 16 | (c4[11] & 255) << 24, j11 = k4[16] & 255 | (k4[17] & 255) << 8 | (k4[18] & 255) << 16 | (k4[19] & 255) << 24, j12 = k4[20] & 255 | (k4[21] & 255) << 8 | (k4[22] & 255) << 16 | (k4[23] & 255) << 24, j13 = k4[24] & 255 | (k4[25] & 255) << 8 | (k4[26] & 255) << 16 | (k4[27] & 255) << 24, j14 = k4[28] & 255 | (k4[29] & 255) << 8 | (k4[30] & 255) << 16 | (k4[31] & 255) << 24, j15 = c4[12] & 255 | (c4[13] & 255) << 8 | (c4[14] & 255) << 16 | (c4[15] & 255) << 24;
- var x0 = j0, x1 = j1, x22 = j22, x32 = j32, x4 = j4, x5 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u4;
+ var x0 = j0, x1 = j1, x22 = j22, x3 = j32, x4 = j4, x5 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u4;
for (var i4 = 0; i4 < 20; i4 += 2) {
u4 = x0 + x12 | 0;
x4 ^= u4 << 7 | u4 >>> 32 - 7;
@@ -4803,20 +4803,20 @@ function core_hsalsa20(o4, p5, k4, c4) {
u4 = x6 + x22 | 0;
x10 ^= u4 << 18 | u4 >>> 32 - 18;
u4 = x15 + x11 | 0;
- x32 ^= u4 << 7 | u4 >>> 32 - 7;
- u4 = x32 + x15 | 0;
+ x3 ^= u4 << 7 | u4 >>> 32 - 7;
+ u4 = x3 + x15 | 0;
x7 ^= u4 << 9 | u4 >>> 32 - 9;
- u4 = x7 + x32 | 0;
+ u4 = x7 + x3 | 0;
x11 ^= u4 << 13 | u4 >>> 32 - 13;
u4 = x11 + x7 | 0;
x15 ^= u4 << 18 | u4 >>> 32 - 18;
- u4 = x0 + x32 | 0;
+ u4 = x0 + x3 | 0;
x1 ^= u4 << 7 | u4 >>> 32 - 7;
u4 = x1 + x0 | 0;
x22 ^= u4 << 9 | u4 >>> 32 - 9;
u4 = x22 + x1 | 0;
- x32 ^= u4 << 13 | u4 >>> 32 - 13;
- u4 = x32 + x22 | 0;
+ x3 ^= u4 << 13 | u4 >>> 32 - 13;
+ u4 = x3 + x22 | 0;
x0 ^= u4 << 18 | u4 >>> 32 - 18;
u4 = x5 + x4 | 0;
x6 ^= u4 << 7 | u4 >>> 32 - 7;
@@ -4895,16 +4895,16 @@ var sigma = new Uint8Array([
107
]);
function crypto_stream_salsa20_xor(c4, cpos, m4, mpos, b4, n3, k4) {
- var z4 = new Uint8Array(16), x4 = new Uint8Array(64);
+ var z4 = new Uint8Array(16), x3 = new Uint8Array(64);
var u4, i4;
for (i4 = 0; i4 < 16; i4++)
z4[i4] = 0;
for (i4 = 0; i4 < 8; i4++)
z4[i4] = n3[i4];
while (b4 >= 64) {
- core_salsa20(x4, z4, k4, sigma);
+ core_salsa20(x3, z4, k4, sigma);
for (i4 = 0; i4 < 64; i4++)
- c4[cpos + i4] = m4[mpos + i4] ^ x4[i4];
+ c4[cpos + i4] = m4[mpos + i4] ^ x3[i4];
u4 = 1;
for (i4 = 8; i4 < 16; i4++) {
u4 = u4 + (z4[i4] & 255) | 0;
@@ -4916,23 +4916,23 @@ function crypto_stream_salsa20_xor(c4, cpos, m4, mpos, b4, n3, k4) {
mpos += 64;
}
if (b4 > 0) {
- core_salsa20(x4, z4, k4, sigma);
+ core_salsa20(x3, z4, k4, sigma);
for (i4 = 0; i4 < b4; i4++)
- c4[cpos + i4] = m4[mpos + i4] ^ x4[i4];
+ c4[cpos + i4] = m4[mpos + i4] ^ x3[i4];
}
return 0;
}
function crypto_stream_salsa20(c4, cpos, b4, n3, k4) {
- var z4 = new Uint8Array(16), x4 = new Uint8Array(64);
+ var z4 = new Uint8Array(16), x3 = new Uint8Array(64);
var u4, i4;
for (i4 = 0; i4 < 16; i4++)
z4[i4] = 0;
for (i4 = 0; i4 < 8; i4++)
z4[i4] = n3[i4];
while (b4 >= 64) {
- core_salsa20(x4, z4, k4, sigma);
+ core_salsa20(x3, z4, k4, sigma);
for (i4 = 0; i4 < 64; i4++)
- c4[cpos + i4] = x4[i4];
+ c4[cpos + i4] = x3[i4];
u4 = 1;
for (i4 = 8; i4 < 16; i4++) {
u4 = u4 + (z4[i4] & 255) | 0;
@@ -4943,9 +4943,9 @@ function crypto_stream_salsa20(c4, cpos, b4, n3, k4) {
cpos += 64;
}
if (b4 > 0) {
- core_salsa20(x4, z4, k4, sigma);
+ core_salsa20(x3, z4, k4, sigma);
for (i4 = 0; i4 < b4; i4++)
- c4[cpos + i4] = x4[i4];
+ c4[cpos + i4] = x3[i4];
}
return 0;
}
@@ -5314,9 +5314,9 @@ function crypto_onetimeauth(out, outpos, m4, mpos, n3, k4) {
return 0;
}
function crypto_onetimeauth_verify(h4, hpos, m4, mpos, n3, k4) {
- var x4 = new Uint8Array(16);
- crypto_onetimeauth(x4, 0, m4, mpos, n3, k4);
- return crypto_verify_16(h4, hpos, x4, 0);
+ var x3 = new Uint8Array(16);
+ crypto_onetimeauth(x3, 0, m4, mpos, n3, k4);
+ return crypto_verify_16(h4, hpos, x3, 0);
}
function crypto_secretbox(c4, m4, d4, n3, k4) {
var i4;
@@ -5330,11 +5330,11 @@ function crypto_secretbox(c4, m4, d4, n3, k4) {
}
function crypto_secretbox_open(m4, c4, d4, n3, k4) {
var i4;
- var x4 = new Uint8Array(32);
+ var x3 = new Uint8Array(32);
if (d4 < 32)
return -1;
- crypto_stream(x4, 0, 32, n3, k4);
- if (crypto_onetimeauth_verify(c4, 16, c4, 32, d4 - 32, x4) !== 0)
+ crypto_stream(x3, 0, 32, n3, k4);
+ if (crypto_onetimeauth_verify(c4, 16, c4, 32, d4 - 32, x3) !== 0)
return -1;
crypto_stream_xor(m4, 0, c4, 0, d4, n3, k4);
for (i4 = 0; i4 < 32; i4++)
@@ -6312,7 +6312,7 @@ function crypto_hashblocks_hl(hh, hl, m4, n3) {
function crypto_hash(out, m4, n3) {
const hh = new Int32Array(8);
const hl = new Int32Array(8);
- const x4 = new Uint8Array(256);
+ const x3 = new Uint8Array(256);
const b4 = n3;
hh[0] = 1779033703;
hh[1] = 3144134277;
@@ -6333,12 +6333,12 @@ function crypto_hash(out, m4, n3) {
crypto_hashblocks_hl(hh, hl, m4, n3);
n3 %= 128;
for (let i4 = 0; i4 < n3; i4++)
- x4[i4] = m4[b4 - n3 + i4];
- x4[n3] = 128;
+ x3[i4] = m4[b4 - n3 + i4];
+ x3[n3] = 128;
n3 = 256 - 128 * (n3 < 112 ? 1 : 0);
- x4[n3 - 9] = 0;
- ts64(x4, n3 - 8, b4 / 536870912 | 0, b4 << 3);
- crypto_hashblocks_hl(hh, hl, x4, n3);
+ x3[n3 - 9] = 0;
+ ts64(x3, n3 - 8, b4 / 536870912 | 0, b4 << 3);
+ crypto_hashblocks_hl(hh, hl, x3, n3);
for (let i4 = 0; i4 < 8; i4++)
ts64(out, 8 * i4, hh[i4], hl[i4]);
return 0;
@@ -6392,15 +6392,15 @@ var HashState = class {
finish() {
const out = new Uint8Array(64);
let n3 = this.p;
- const x4 = new Uint8Array(256);
+ const x3 = new Uint8Array(256);
const b4 = this.total;
for (let i4 = 0; i4 < n3; i4++)
- x4[i4] = this.next[i4];
- x4[n3] = 128;
+ x3[i4] = this.next[i4];
+ x3[n3] = 128;
n3 = 256 - 128 * (n3 < 112 ? 1 : 0);
- x4[n3 - 9] = 0;
- ts64(x4, n3 - 8, b4 / 536870912 | 0, b4 << 3);
- crypto_hashblocks_hl(this.hh, this.hl, x4, n3);
+ x3[n3 - 9] = 0;
+ ts64(x3, n3 - 8, b4 / 536870912 | 0, b4 << 3);
+ crypto_hashblocks_hl(this.hh, this.hl, x3, n3);
for (let i4 = 0; i4 < 8; i4++)
ts64(out, 8 * i4, this.hh[i4], this.hl[i4]);
return out;
@@ -6512,43 +6512,43 @@ var L2 = new Float64Array([
0,
16
]);
-function modL(r4, x4) {
+function modL(r4, x3) {
let carry, i4, j4, k4;
for (i4 = 63; i4 >= 32; --i4) {
carry = 0;
for (j4 = i4 - 32, k4 = i4 - 12; j4 < k4; ++j4) {
- x4[j4] += carry - 16 * x4[i4] * L2[j4 - (i4 - 32)];
- carry = Math.floor((x4[j4] + 128) / 256);
- x4[j4] -= carry * 256;
+ x3[j4] += carry - 16 * x3[i4] * L2[j4 - (i4 - 32)];
+ carry = Math.floor((x3[j4] + 128) / 256);
+ x3[j4] -= carry * 256;
}
- x4[j4] += carry;
- x4[i4] = 0;
+ x3[j4] += carry;
+ x3[i4] = 0;
}
carry = 0;
for (j4 = 0; j4 < 32; j4++) {
- x4[j4] += carry - (x4[31] >> 4) * L2[j4];
- carry = x4[j4] >> 8;
- x4[j4] &= 255;
+ x3[j4] += carry - (x3[31] >> 4) * L2[j4];
+ carry = x3[j4] >> 8;
+ x3[j4] &= 255;
}
for (j4 = 0; j4 < 32; j4++)
- x4[j4] -= carry * L2[j4];
+ x3[j4] -= carry * L2[j4];
for (i4 = 0; i4 < 32; i4++) {
- x4[i4 + 1] += x4[i4] >> 8;
- r4[i4] = x4[i4] & 255;
+ x3[i4 + 1] += x3[i4] >> 8;
+ r4[i4] = x3[i4] & 255;
}
}
function reduce(r4) {
- const x4 = new Float64Array(64);
+ const x3 = new Float64Array(64);
for (let i4 = 0; i4 < 64; i4++)
- x4[i4] = r4[i4];
+ x3[i4] = r4[i4];
for (let i4 = 0; i4 < 64; i4++)
r4[i4] = 0;
- modL(r4, x4);
+ modL(r4, x3);
}
function crypto_sign(sm, m4, n3, sk) {
const d4 = new Uint8Array(64), h4 = new Uint8Array(64), r4 = new Uint8Array(64);
let i4, j4;
- const x4 = new Float64Array(64);
+ const x3 = new Float64Array(64);
const p5 = [gf(), gf(), gf(), gf()];
crypto_hash(d4, sk, 32);
d4[0] &= 248;
@@ -6568,15 +6568,15 @@ function crypto_sign(sm, m4, n3, sk) {
crypto_hash(h4, sm, n3 + 64);
reduce(h4);
for (i4 = 0; i4 < 64; i4++)
- x4[i4] = 0;
+ x3[i4] = 0;
for (i4 = 0; i4 < 32; i4++)
- x4[i4] = r4[i4];
+ x3[i4] = r4[i4];
for (i4 = 0; i4 < 32; i4++) {
for (j4 = 0; j4 < 32; j4++) {
- x4[i4 + j4] += h4[i4] * d4[j4];
+ x3[i4 + j4] += h4[i4] * d4[j4];
}
}
- modL(sm.subarray(32), x4);
+ modL(sm.subarray(32), x3);
return smlen;
}
function unpackpos(r4, p5) {
@@ -6758,19 +6758,19 @@ function secretbox_open(box, nonce, key) {
return void 0;
return m4.subarray(crypto_secretbox_ZEROBYTES);
}
-function crypto_core_ed25519_scalar_reduce(x4) {
- const len = x4.length;
+function crypto_core_ed25519_scalar_reduce(x3) {
+ const len = x3.length;
const z4 = new Float64Array(64);
for (let i4 = 0; i4 < len; i4++)
- z4[i4] = x4[i4];
+ z4[i4] = x3[i4];
const o4 = new Uint8Array(32);
modL(o4, z4);
return o4;
}
-function crypto_core_ed25519_scalar_sub(x4, y4) {
+function crypto_core_ed25519_scalar_sub(x3, y4) {
const z4 = new Float64Array(64);
for (let i4 = 0; i4 < 32; i4++) {
- z4[i4] = x4[i4] - y4[i4];
+ z4[i4] = x3[i4] - y4[i4];
}
const o4 = new Uint8Array(32);
modL(o4, z4);
@@ -6796,7 +6796,7 @@ function crypto_edx25519_sign_detached(m4, skx, pkx) {
const h4 = new Uint8Array(64);
const r4 = new Uint8Array(64);
let i4, j4;
- const x4 = new Float64Array(64);
+ const x3 = new Float64Array(64);
const p5 = [gf(), gf(), gf(), gf()];
const sm = new Uint8Array(n3 + 64);
for (i4 = 0; i4 < n3; i4++)
@@ -6812,15 +6812,15 @@ function crypto_edx25519_sign_detached(m4, skx, pkx) {
crypto_hash(h4, sm, n3 + 64);
reduce(h4);
for (i4 = 0; i4 < 64; i4++)
- x4[i4] = 0;
+ x3[i4] = 0;
for (i4 = 0; i4 < 32; i4++)
- x4[i4] = r4[i4];
+ x3[i4] = r4[i4];
for (i4 = 0; i4 < 32; i4++) {
for (j4 = 0; j4 < 32; j4++) {
- x4[i4 + j4] += h4[i4] * skx[j4];
+ x3[i4 + j4] += h4[i4] * skx[j4];
}
}
- modL(sm.subarray(32), x4);
+ modL(sm.subarray(32), x3);
return sm.subarray(0, 64);
}
function crypto_edx25519_sign_detached_verify(msg, sig, publicKey) {
@@ -6843,14 +6843,14 @@ function crypto_edx25519_sign_detached_verify(msg, sig, publicKey) {
function loadBrowserPrng() {
const cr = typeof self !== "undefined" ? self.crypto || self.msCrypto : null;
const QUOTA = 65536;
- setPRNG(function(x4, n3) {
+ setPRNG(function(x3, n3) {
let i4;
const v4 = new Uint8Array(n3);
for (i4 = 0; i4 < n3; i4 += QUOTA) {
cr.getRandomValues(v4.subarray(i4, i4 + Math.min(n3 - i4, QUOTA)));
}
for (i4 = 0; i4 < n3; i4++)
- x4[i4] = v4[i4];
+ x3[i4] = v4[i4];
for (i4 = 0; i4 < v4.length; i4++)
v4[i4] = 0;
});
@@ -7169,6 +7169,13 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED"] = 2173] = "MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING"] = 2174] = "MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED"] = 2175] = "MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING"] = 2176] = "MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS"] = 2177] = "MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_INPUT_TOKENS_MISMATCH"] = 2178] = "MERCHANT_POST_ORDERS_ID_PAY_INPUT_TOKENS_MISMATCH";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ISSUE_SIG_INVALID"] = 2179] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ISSUE_SIG_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_USE_SIG_INVALID"] = 2180] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_USE_SIG_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH"] = 2181] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH"] = 2182] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH"] = 2200] = "MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID"] = 2201] = "MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_TOKEN_FAMILY_CONFLICT"] = 2225] = "MERCHANT_POST_TOKEN_FAMILY_CONFLICT";
@@ -7213,6 +7220,7 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT"] = 2530] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID"] = 2531] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT"] = 2532] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN"] = 2533] = "MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN"] = 2550] = "MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR"] = 2551] = "MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS"] = 2552] = "MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS";
@@ -7254,6 +7262,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS"] = 2910] = "MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS";
TalerErrorCode2[TalerErrorCode2["AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID"] = 3100] = "AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED"] = 3101] = "AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED";
+ TalerErrorCode2[TalerErrorCode2["AUDITOR_RESOURCE_NOT_FOUND"] = 3102] = "AUDITOR_RESOURCE_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["AUDITOR_URI_MISSING_PATH_COMPONENT"] = 3103] = "AUDITOR_URI_MISSING_PATH_COMPONENT";
TalerErrorCode2[TalerErrorCode2["BANK_SAME_ACCOUNT"] = 5101] = "BANK_SAME_ACCOUNT";
TalerErrorCode2[TalerErrorCode2["BANK_UNALLOWED_DEBIT"] = 5102] = "BANK_UNALLOWED_DEBIT";
TalerErrorCode2[TalerErrorCode2["BANK_NEGATIVE_NUMBER_AMOUNT"] = 5103] = "BANK_NEGATIVE_NUMBER_AMOUNT";
@@ -7298,6 +7308,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["BANK_CHALLENGE_NOT_FOUND"] = 5143] = "BANK_CHALLENGE_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["BANK_TAN_CHALLENGE_EXPIRED"] = 5144] = "BANK_TAN_CHALLENGE_EXPIRED";
TalerErrorCode2[TalerErrorCode2["BANK_NON_ADMIN_SET_TAN_CHANNEL"] = 5145] = "BANK_NON_ADMIN_SET_TAN_CHANNEL";
+ TalerErrorCode2[TalerErrorCode2["BANK_NON_ADMIN_SET_MIN_CASHOUT"] = 5146] = "BANK_NON_ADMIN_SET_MIN_CASHOUT";
+ TalerErrorCode2[TalerErrorCode2["BANK_CONVERSION_AMOUNT_TO_SMALL"] = 5147] = "BANK_CONVERSION_AMOUNT_TO_SMALL";
TalerErrorCode2[TalerErrorCode2["SYNC_ACCOUNT_UNKNOWN"] = 6100] = "SYNC_ACCOUNT_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["SYNC_BAD_IF_NONE_MATCH"] = 6101] = "SYNC_BAD_IF_NONE_MATCH";
TalerErrorCode2[TalerErrorCode2["SYNC_BAD_IF_MATCH"] = 6102] = "SYNC_BAD_IF_MATCH";
@@ -7419,6 +7431,7 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["DONAU_GENERIC_KEYS_MISSING"] = 8607] = "DONAU_GENERIC_KEYS_MISSING";
TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_SIGNATURE_INVALID"] = 8608] = "DONAU_CHARITY_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_NOT_FOUND"] = 8609] = "DONAU_CHARITY_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["DONAU_EXCEEDING_DONATION_LIMIT"] = 8610] = "DONAU_EXCEEDING_DONATION_LIMIT";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_GENERIC_ERROR"] = 9e3] = "LIBEUFIN_NEXUS_GENERIC_ERROR";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION"] = 9001] = "LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_SANDBOX_GENERIC_ERROR"] = 9500] = "LIBEUFIN_SANDBOX_GENERIC_ERROR";
@@ -7648,14 +7661,14 @@ var Amount = class _Amount {
};
function codecForAmountString() {
return {
- decode(x4, c4) {
- if (typeof x4 !== "string") {
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x4}`);
+ decode(x3, c4) {
+ if (typeof x3 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x3}`);
}
- if (Amounts.parse(x4) === void 0) {
- throw new DecodingError(`invalid amount at ${renderContext(c4)} got "${x4}"`);
+ if (Amounts.parse(x3) === void 0) {
+ throw new DecodingError(`invalid amount at ${renderContext(c4)} got "${x3}"`);
}
- return x4;
+ return x3;
}
};
}
@@ -7717,7 +7730,7 @@ var Amounts = class _Amounts {
if (amounts.length <= 0) {
throw Error("can't sum zero amounts");
}
- const jsonAmounts = amounts.map((x4) => _Amounts.jsonifyAmount(x4));
+ const jsonAmounts = amounts.map((x3) => _Amounts.jsonifyAmount(x3));
return _Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));
}
static sumOrZero(currency, amounts) {
@@ -7727,7 +7740,7 @@ var Amounts = class _Amounts {
saturated: false
};
}
- const jsonAmounts = amounts.map((x4) => _Amounts.jsonifyAmount(x4));
+ const jsonAmounts = amounts.map((x3) => _Amounts.jsonifyAmount(x3));
return _Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));
}
/**
@@ -7752,8 +7765,8 @@ var Amounts = class _Amounts {
};
}
let fraction = firstJ.fraction % amountFractionalBase;
- for (const x4 of rest) {
- const xJ = _Amounts.jsonifyAmount(x4);
+ for (const x3 of rest) {
+ const xJ = _Amounts.jsonifyAmount(x3);
if (xJ.currency.toUpperCase() !== currency.toUpperCase()) {
throw Error(`Mismatched currency: ${xJ.currency} and ${currency}`);
}
@@ -7965,26 +7978,26 @@ var Amounts = class _Amounts {
saturated: false
};
}
- let x4 = a4;
+ let x3 = a4;
let acc = _Amounts.zeroOfCurrency(a4.currency);
while (n3 > 1) {
if (n3 % 2 == 0) {
n3 = n3 / 2;
} else {
n3 = (n3 - 1) / 2;
- const r23 = _Amounts.add(acc, x4);
+ const r23 = _Amounts.add(acc, x3);
if (r23.saturated) {
return r23;
}
acc = r23.amount;
}
- const r22 = _Amounts.add(x4, x4);
+ const r22 = _Amounts.add(x3, x3);
if (r22.saturated) {
return r22;
}
- x4 = r22.amount;
+ x3 = r22.amount;
}
- return _Amounts.add(acc, x4);
+ return _Amounts.add(acc, x3);
}
/**
* Check if the argument is a valid amount in string form.
@@ -9887,13 +9900,13 @@ function canonicalizeBaseUrl(url) {
if (!url.startsWith("http") && !url.startsWith("https")) {
url = "https://" + url;
}
- const x4 = new URL2(url);
- if (!x4.pathname.endsWith("/")) {
- x4.pathname = x4.pathname + "/";
+ const x3 = new URL2(url);
+ if (!x3.pathname.endsWith("/")) {
+ x3.pathname = x3.pathname + "/";
}
- x4.search = "";
- x4.hash = "";
- return x4.href;
+ x3.search = "";
+ x3.hash = "";
+ return x3.href;
}
function canonicalJson(obj) {
obj = JSON.parse(JSON.stringify(obj));
@@ -9931,8 +9944,8 @@ function strcmp(s1, s22) {
}
return 0;
}
-function j2s(x4) {
- return JSON.stringify(x4, void 0, 2);
+function j2s(x3) {
+ return JSON.stringify(x3, void 0, 2);
}
// ../taler-util/lib/logging.js
@@ -10149,11 +10162,11 @@ var ObjectCodecBuilder = class {
/**
* Define a property for the object.
*/
- property(x4, codec) {
+ property(x3, codec) {
if (!codec) {
throw Error("inner codec must be defined");
}
- this.propList.push({ name: x4, codec });
+ this.propList.push({ name: x3, codec });
return this;
}
/**
@@ -10165,18 +10178,18 @@ var ObjectCodecBuilder = class {
build(objectDisplayName) {
const propList = this.propList;
return {
- decode(x4, c4) {
+ decode(x3, c4) {
if (!c4) {
c4 = {
path: [`(${objectDisplayName})`]
};
}
- if (typeof x4 !== "object") {
- throw new DecodingError(`expected object for ${objectDisplayName} at ${renderContext(c4)} but got ${typeof x4}`);
+ if (typeof x3 !== "object") {
+ throw new DecodingError(`expected object for ${objectDisplayName} at ${renderContext(c4)} but got ${typeof x3}`);
}
const obj = {};
for (const prop of propList) {
- const propRawVal = x4[prop.name];
+ const propRawVal = x3[prop.name];
const propVal = prop.codec.decode(propRawVal, joinContext(c4, prop.name));
obj[prop.name] = propVal;
}
@@ -10212,13 +10225,13 @@ var UnionCodecBuilder = class {
const discriminator = this.discriminator;
const baseCodec = this.baseCodec;
return {
- decode(x4, c4) {
+ decode(x3, c4) {
if (!c4) {
c4 = {
path: [`(${objectDisplayName})`]
};
}
- const d4 = x4[discriminator];
+ const d4 = x3[discriminator];
if (d4 === void 0) {
throw new DecodingError(`expected tag for ${objectDisplayName} at ${renderContext(c4)}.${String(discriminator)}`);
}
@@ -10226,9 +10239,9 @@ var UnionCodecBuilder = class {
if (!alt) {
throw new DecodingError(`unknown tag for ${objectDisplayName} ${d4} at ${renderContext(c4)}.${String(discriminator)}`);
}
- const altDecoded = alt.codec.decode(x4);
+ const altDecoded = alt.codec.decode(x3);
if (baseCodec) {
- const baseDecoded = baseCodec.decode(x4, c4);
+ const baseDecoded = baseCodec.decode(x3, c4);
return { ...baseDecoded, ...altDecoded };
} else {
return altDecoded;
@@ -10253,13 +10266,13 @@ function codecForList(innerCodec) {
throw Error("inner codec must be defined");
}
return {
- decode(x4, c4) {
+ decode(x3, c4) {
const arr = [];
- if (!Array.isArray(x4)) {
+ if (!Array.isArray(x3)) {
throw new DecodingError(`expected array at ${renderContext(c4)}`);
}
- for (const i4 in x4) {
- arr.push(innerCodec.decode(x4[i4], joinContext(c4, `[${i4}]`)));
+ for (const i4 in x3) {
+ arr.push(innerCodec.decode(x3[i4], joinContext(c4, `[${i4}]`)));
}
return arr;
}
@@ -10267,72 +10280,71 @@ function codecForList(innerCodec) {
}
function codecForNumber() {
return {
- decode(x4, c4) {
- if (typeof x4 === "number") {
- return x4;
+ decode(x3, c4) {
+ if (typeof x3 === "number") {
+ return x3;
}
- throw new DecodingError(`expected number at ${renderContext(c4)} but got ${typeof x4}`);
+ throw new DecodingError(`expected number at ${renderContext(c4)} but got ${typeof x3}`);
}
};
}
function codecForString() {
return {
- decode(x4, c4) {
- if (typeof x4 === "string") {
- return x4;
+ decode(x3, c4) {
+ if (typeof x3 === "string") {
+ return x3;
}
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x4}`);
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x3}`);
}
};
}
function codecForAny() {
return {
- decode(x4, c4) {
- return x4;
+ decode(x3, c4) {
+ return x3;
}
};
}
function codecForConstString(s4) {
return {
- decode(x4, c4) {
- if (x4 === s4) {
- return x4;
+ decode(x3, c4) {
+ if (x3 === s4) {
+ return x3;
}
- if (typeof x4 !== "string") {
- throw new DecodingError(`expected string constant "${s4}" at ${renderContext(c4)} but got ${typeof x4}`);
+ if (typeof x3 !== "string") {
+ throw new DecodingError(`expected string constant "${s4}" at ${renderContext(c4)} but got ${typeof x3}`);
}
- throw new DecodingError(`expected string constant "${s4}" at ${renderContext(c4)} but got string value "${x4}"`);
+ throw new DecodingError(`expected string constant "${s4}" at ${renderContext(c4)} but got string value "${x3}"`);
}
};
}
function codecOptional(innerCodec) {
return {
- decode(x4, c4) {
- if (x4 === void 0 || x4 === null) {
+ decode(x3, c4) {
+ if (x3 === void 0 || x3 === null) {
return void 0;
}
- return innerCodec.decode(x4, c4);
+ return innerCodec.decode(x3, c4);
}
};
}
function codecForEither(...alts) {
return {
- decode(x4, c4) {
+ decode(x3, c4) {
for (const alt of alts) {
try {
- return alt.decode(x4, c4);
+ return alt.decode(x3, c4);
} catch (e4) {
continue;
}
}
if (logger.shouldLogTrace()) {
- logger.trace(`offending value: ${j2s(x4)}`);
+ logger.trace(`offending value: ${j2s(x3)}`);
}
throw new DecodingError(`No alternative matched at at ${renderContext(c4)}`);
}
};
}
-var x2 = codecForEither(codecForString(), codecForNumber());
// ../taler-util/lib/sha256.js
var digestLength = 32;
@@ -11058,8 +11070,8 @@ function encodeResult(salt, options, res) {
return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;
}
var uint32View = new DataView(new ArrayBuffer(4));
-function int32LE(x4) {
- uint32View.setInt32(0, x4, true);
+function int32LE(x3) {
+ uint32View.setInt32(0, x3, true);
return new Uint8Array(uint32View.buffer);
}
function hashFunc(blake512, buf, len) {
@@ -11720,11 +11732,11 @@ function durationMul(d4, n3) {
return { d_ms: Math.round(d4.d_ms * n3) };
}
var codecForTimestamp = {
- decode(x4, c4) {
- if (x4 === void 0) {
+ decode(x3, c4) {
+ if (x3 === void 0) {
throw Error(`got undefined and expected timestamp at ${renderContext(c4)}`);
}
- const t_ms = x4.t_ms;
+ const t_ms = x3.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
return { t_s: "never" };
@@ -11732,7 +11744,7 @@ var codecForTimestamp = {
} else if (typeof t_ms === "number") {
return { t_s: Math.floor(t_ms / 1e3) };
}
- const t_s = x4.t_s;
+ const t_s = x3.t_s;
if (typeof t_s === "string") {
if (t_s === "never") {
return { t_s: "never" };
@@ -11898,12 +11910,12 @@ var fd = _b.b;
var revfd = _b.r;
var rev = new u16(32768);
for (i4 = 0; i4 < 32768; ++i4) {
- x4 = (i4 & 43690) >> 1 | (i4 & 21845) << 1;
- x4 = (x4 & 52428) >> 2 | (x4 & 13107) << 2;
- x4 = (x4 & 61680) >> 4 | (x4 & 3855) << 4;
- rev[i4] = ((x4 & 65280) >> 8 | (x4 & 255) << 8) >> 1;
+ x3 = (i4 & 43690) >> 1 | (i4 & 21845) << 1;
+ x3 = (x3 & 52428) >> 2 | (x3 & 13107) << 2;
+ x3 = (x3 & 61680) >> 4 | (x3 & 3855) << 4;
+ rev[i4] = ((x3 & 65280) >> 8 | (x3 & 255) << 8) >> 1;
}
-var x4;
+var x3;
var i4;
var hMap = function(cd, mb, r4) {
var s4 = cd.length;
@@ -12793,9 +12805,9 @@ var SignaturePurposeBuilder = class {
function buildSigPS(purposeNum) {
return new SignaturePurposeBuilder(purposeNum);
}
-function bigintToNaclArr(x4, size) {
+function bigintToNaclArr(x3, size) {
const byteArr = new Uint8Array(size);
- const arr = x4.toArray(256).value.reverse();
+ const arr = x3.toArray(256).value.reverse();
byteArr.set(arr, 0);
return byteArr;
}
@@ -12963,10 +12975,10 @@ var AgeRestriction;
return {
commitment: {
mask: ageMask,
- publicKeys: pubs.map((x4) => encodeCrock(x4))
+ publicKeys: pubs.map((x3) => encodeCrock(x3))
},
proof: {
- privateKeys: privs.map((x4) => encodeCrock(x4))
+ privateKeys: privs.map((x3) => encodeCrock(x3))
}
};
}
@@ -13003,10 +13015,10 @@ var AgeRestriction;
return {
commitment: {
mask: ageMask,
- publicKeys: pubs.map((x4) => encodeCrock(x4))
+ publicKeys: pubs.map((x3) => encodeCrock(x3))
},
proof: {
- privateKeys: privs.map((x4) => encodeCrock(x4))
+ privateKeys: privs.map((x3) => encodeCrock(x3))
}
};
}
@@ -13037,10 +13049,10 @@ var AgeRestriction;
return {
commitment: {
mask: commitmentProof.commitment.mask,
- publicKeys: newPubs.map((x4) => encodeCrock(x4))
+ publicKeys: newPubs.map((x3) => encodeCrock(x3))
},
proof: {
- privateKeys: newPrivs.map((x4) => encodeCrock(x4))
+ privateKeys: newPrivs.map((x3) => encodeCrock(x3))
}
};
}
@@ -13576,31 +13588,31 @@ var ContractTermsUtil;
}
} else if (typeof dup === "object" && dup != null) {
if (typeof dup.$forgettable === "object") {
- for (const x4 of Object.keys(dup.$forgettable)) {
- if (!pred([...path, x4])) {
+ for (const x3 of Object.keys(dup.$forgettable)) {
+ if (!pred([...path, x3])) {
continue;
}
if (!dup.$forgotten) {
dup.$forgotten = {};
}
- if (!dup.$forgotten[x4]) {
- const membValCanon = stringToBytes(canonicalJson(scrub(dup[x4])) + "\0");
- const membSalt = stringToBytes(dup.$forgettable[x4] + "\0");
+ if (!dup.$forgotten[x3]) {
+ const membValCanon = stringToBytes(canonicalJson(scrub(dup[x3])) + "\0");
+ const membSalt = stringToBytes(dup.$forgettable[x3] + "\0");
const h4 = kdf(64, membValCanon, membSalt, new Uint8Array([]));
- dup.$forgotten[x4] = encodeCrock(h4);
+ dup.$forgotten[x3] = encodeCrock(h4);
}
- delete dup[x4];
- delete dup.$forgettable[x4];
+ delete dup[x3];
+ delete dup.$forgettable[x3];
}
if (Object.keys(dup.$forgettable).length === 0) {
delete dup.$forgettable;
}
}
- for (const x4 of Object.keys(dup)) {
- if (x4.startsWith("$")) {
+ for (const x3 of Object.keys(dup)) {
+ if (x3.startsWith("$")) {
continue;
}
- dup[x4] = forgetAllImpl(dup[x4], [...path, x4], pred);
+ dup[x3] = forgetAllImpl(dup[x3], [...path, x3], pred);
}
}
return dup;
@@ -13628,11 +13640,11 @@ var ContractTermsUtil;
}
}
}
- for (const x4 of Object.keys(dup)) {
- if (x4.startsWith("$")) {
+ for (const x3 of Object.keys(dup)) {
+ if (x3.startsWith("$")) {
continue;
}
- dup[x4] = saltForgettable(dup[x4]);
+ dup[x3] = saltForgettable(dup[x3]);
}
}
return dup;
@@ -13653,7 +13665,7 @@ var ContractTermsUtil;
return true;
}
if (Array.isArray(anyJson)) {
- return anyJson.every((x4) => validateForgettable(x4));
+ return anyJson.every((x3) => validateForgettable(x3));
}
if (typeof anyJson === "object") {
for (const k4 of Object.keys(anyJson)) {
@@ -13735,8 +13747,8 @@ var ContractTermsUtil;
var fnutil;
(function(fnutil2) {
function all(arr, f4) {
- for (const x4 of arr) {
- if (!f4(x4)) {
+ for (const x3 of arr) {
+ if (!f4(x3)) {
return false;
}
}
@@ -13744,8 +13756,8 @@ var fnutil;
}
fnutil2.all = all;
function any(arr, f4) {
- for (const x4 of arr) {
- if (f4(x4)) {
+ for (const x3 of arr) {
+ if (f4(x3)) {
return true;
}
}
@@ -13806,6 +13818,7 @@ var TransactionMinorState;
TransactionMinorState2["RefundAvailable"] = "refund-available";
TransactionMinorState2["AcceptRefund"] = "accept-refund";
TransactionMinorState2["PaidByOther"] = "paid-by-other";
+ TransactionMinorState2["CompletedByOtherWallet"] = "completed-by-other-wallet";
})(TransactionMinorState || (TransactionMinorState = {}));
var TransactionAction;
(function(TransactionAction2) {
@@ -14104,13 +14117,13 @@ function replacePlaceholderWithValues(translation, childArray) {
const tr = translation.split(/%(\d+)\$s/);
const placeholderChildren = [];
for (let i4 = 0; i4 < childArray.length; i4++) {
- const x4 = childArray[i4];
- if (x4 === void 0) {
+ const x3 = childArray[i4];
+ if (x3 === void 0) {
continue;
- } else if (typeof x4 === "string") {
+ } else if (typeof x3 === "string") {
continue;
} else {
- placeholderChildren.push(x4);
+ placeholderChildren.push(x3);
}
}
const result = [];
@@ -15513,7 +15526,7 @@ function typedArrayConcat2(chunks) {
return u8buf;
}
async function policyKeyDerive(keyShares, policySalt) {
- const chunks = keyShares.map((x4) => decodeCrock(x4));
+ const chunks = keyShares.map((x3) => decodeCrock(x3));
const polKey = kdfKw({
outputLength: 64,
ikm: typedArrayConcat2(chunks),
@@ -15547,10 +15560,10 @@ async function anastasisDecrypt(keySeed, ciphertext, salt) {
}
return encodeCrock(clearText);
}
-var asOpaque = (x4) => x4;
-var asEncryptedKeyShare = (x4) => x4;
-var asEncryptedTruth = (x4) => x4;
-var asKeyShare = (x4) => x4;
+var asOpaque = (x3) => x3;
+var asEncryptedKeyShare = (x3) => x3;
+var asEncryptedTruth = (x3) => x3;
+var asKeyShare = (x3) => x3;
async function encryptKeyshare(keyShare, userId, answerSalt) {
const s4 = answerSalt ?? "eks";
const nonce = encodeCrock(getRandomBytes(24));
@@ -15653,8 +15666,8 @@ function suggestPolicies(methods, providers) {
logger11.info(`suggesting policies ${j2s(policies)}`);
return {
policies,
- policy_providers: providers.map((x4) => ({
- provider_url: x4.url
+ policy_providers: providers.map((x3) => ({
+ provider_url: x3.url
}))
};
}
@@ -15724,9 +15737,9 @@ function assignProviders(existingPolicies, methods, providers, methodSelection)
return void 0;
}
return {
- methods: bestProvSel.map((x4, i4) => ({
+ methods: bestProvSel.map((x3, i4) => ({
authentication_method: methodSelection[i4],
- provider: providers[x4].url
+ provider: providers[x3].url
}))
};
}
@@ -15868,7 +15881,7 @@ var ReducerError = class _ReducerError extends Error {
}
};
function getCountries(continent) {
- const countries = anastasisData.countriesList.countries.filter((x4) => x4.continent === continent);
+ const countries = anastasisData.countriesList.countries.filter((x3) => x3.continent === continent);
if (countries.length <= 0) {
throw new ReducerError({
code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID,
@@ -15893,7 +15906,7 @@ async function getRecoveryStartState() {
}
async function selectCountry(selectedContinent, args) {
const countryCode = args.country_code;
- const country = anastasisData.countriesList.countries.find((x4) => x4.code === countryCode);
+ const country = anastasisData.countriesList.countries.find((x3) => x3.code === countryCode);
if (!country) {
throw new ReducerError({
code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,
@@ -15973,9 +15986,9 @@ async function getProviderInfo(providerBaseUrl) {
business_name: jsonResp.business_name,
currency: jsonResp.currency,
liability_limit: jsonResp.liability_limit,
- methods: jsonResp.methods.map((x4) => ({
- type: x4.type,
- usage_fee: x4.cost
+ methods: jsonResp.methods.map((x3) => ({
+ type: x3.type,
+ usage_fee: x3.cost
})),
provider_salt: jsonResp.provider_salt,
storage_limit_in_megabytes: jsonResp.storage_limit_in_megabytes,
@@ -16086,7 +16099,7 @@ async function prepareRecoveryData(state) {
secret_name: secretName,
encrypted_core_secret: csr.encCoreSecret,
escrow_methods: escrowMethods,
- policies: policies.map((x4, i4) => {
+ policies: policies.map((x3, i4) => {
return {
master_key: csr.encMasterKeys[i4],
uuids: policyUuids[i4],
@@ -16209,7 +16222,7 @@ async function uploadSecret(state) {
policy_hash: recoveryDocHash,
secret_name: state.secret_name ?? "<unnamed secret>"
});
- const talerPayUri = state.policy_payment_requests?.find((x4) => x4.provider === prov.provider_url)?.payto;
+ const talerPayUri = state.policy_payment_requests?.find((x3) => x3.provider === prov.provider_url)?.payto;
let paySecret;
if (talerPayUri) {
paySecret = parsePayUri(talerPayUri).orderId;
@@ -16283,10 +16296,10 @@ async function uploadSecret(state) {
...state,
backup_state: BackupStates.PoliciesPaying,
payments: policyPayUris,
- policy_payment_requests: Object.keys(policyPayUriMap).map((x4) => {
+ policy_payment_requests: Object.keys(policyPayUriMap).map((x3) => {
return {
- payto: policyPayUriMap[x4],
- provider: x4
+ payto: policyPayUriMap[x3],
+ provider: x3
};
})
};
@@ -16362,17 +16375,17 @@ async function downloadPolicy(state) {
}
const challenges = [];
const recoveryDoc = policyDownloadResult.recoveryDoc;
- for (const x4 of recoveryDoc.escrow_methods) {
+ for (const x3 of recoveryDoc.escrow_methods) {
challenges.push({
- instructions: x4.instructions,
- type: x4.escrow_type,
- uuid: x4.uuid
+ instructions: x3.instructions,
+ type: x3.escrow_type,
+ uuid: x3.uuid
});
}
const recoveryInfo = {
challenges,
- policies: recoveryDoc.policies.map((x4) => {
- return x4.uuids.map((m4) => {
+ policies: recoveryDoc.policies.map((x3) => {
+ return x3.uuids.map((m4) => {
return {
uuid: m4
};
@@ -16424,7 +16437,7 @@ async function pollChallenges(state, args) {
break;
}
const feedback = state.challenge_feedback[truthUuid];
- const truth = state.verbatim_recovery_document.escrow_methods.find((x4) => x4.uuid === truthUuid);
+ const truth = state.verbatim_recovery_document.escrow_methods.find((x3) => x3.uuid === truthUuid);
if (!truth) {
logger12.warn("truth for challenge feedback entry not found in recovery document");
continue;
@@ -16548,7 +16561,7 @@ async function requestTruth(state, truth, solveRequest) {
}
async function solveChallenge(state, ta) {
const recDoc = state.verbatim_recovery_document;
- const truth = recDoc.escrow_methods.find((x4) => x4.uuid === state.selected_challenge_uuid);
+ const truth = recDoc.escrow_methods.find((x3) => x3.uuid === state.selected_challenge_uuid);
if (!truth) {
throw Error("truth for challenge not found");
}
@@ -16571,7 +16584,7 @@ async function changeVersion(state, args) {
}
async function selectChallenge(state, ta) {
const recDoc = state.verbatim_recovery_document;
- const truth = recDoc.escrow_methods.find((x4) => x4.uuid === ta.uuid);
+ const truth = recDoc.escrow_methods.find((x3) => x3.uuid === ta.uuid);
if (!truth) {
throw "truth for challenge not found";
}
@@ -16838,9 +16851,9 @@ async function updateUploadFees(state) {
}
logger12.info("updating upload fees");
const feePerCurrency = {};
- const addFee = (x4) => {
- x4 = Amounts.jsonifyAmount(x4);
- feePerCurrency[x4.currency] = Amounts.add(feePerCurrency[x4.currency] ?? Amounts.zeroOfAmount(x4), x4).amount;
+ const addFee = (x3) => {
+ x3 = Amounts.jsonifyAmount(x3);
+ feePerCurrency[x3.currency] = Amounts.add(feePerCurrency[x3.currency] ?? Amounts.zeroOfAmount(x3), x3).amount;
};
const expirationTime = AbsoluteTime.fromProtocolTimestamp(expiration);
const years = Duration.toIntegerYears(Duration.getRemaining(expirationTime));
@@ -16854,8 +16867,8 @@ async function updateUploadFees(state) {
}
}
const coveredProvTruth = /* @__PURE__ */ new Set();
- for (const x4 of state.policies ?? []) {
- for (const m4 of x4.methods) {
+ for (const x3 of state.policies ?? []) {
+ for (const m4 of x3.methods) {
const prov = state.authentication_providers[m4.provider];
const authMethod = state.authentication_methods[m4.authentication_method];
const key = `${m4.authentication_method}@${m4.provider}`;
@@ -16869,8 +16882,8 @@ async function updateUploadFees(state) {
}
return {
...state,
- upload_fees: Object.values(feePerCurrency).map((x4) => ({
- fee: Amounts.stringify(x4)
+ upload_fees: Object.values(feePerCurrency).map((x3) => ({
+ fee: Amounts.stringify(x3)
}))
};
}
@@ -16907,18 +16920,18 @@ async function syncOneProviderRecoveryTransition(state, args) {
hint: "Can't sync, no escrow methods in recovery doc."
};
}
- for (const x4 of escrowMethods) {
- const pi = state.authentication_providers?.[x4.url];
+ for (const x3 of escrowMethods) {
+ const pi = state.authentication_providers?.[x3.url];
if (pi?.status === "ok") {
- logger12.info(`provider ${x4.url} is synced`);
+ logger12.info(`provider ${x3.url} is synced`);
continue;
}
- const newPi = await getProviderInfo(x4.url);
+ const newPi = await getProviderInfo(x3.url);
return {
...state,
authentication_providers: {
...state.authentication_providers,
- [x4.url]: newPi
+ [x3.url]: newPi
}
};
}
@@ -17325,7 +17338,7 @@ var useAnastasisContext = () => q2(Context2);
// src/components/menu/SideBar.tsx
var VERSION = true ? "0.10.7" : "dev";
-var GIT_HASH = true ? "a1c5917e626856f2abd9dbe6ddaa71c1458334c6".substring(0, 7) : void 0;
+var GIT_HASH = true ? "6fd830ad57fe12ce6acac453f523dcf00f71a5bb".substring(0, 7) : void 0;
var VERSION_WITH_HASH = GIT_HASH ? `${VERSION}-${GIT_HASH}` : VERSION;
function Sidebar({ mobile }) {
const reducer = useAnastasisContext();
@@ -23823,7 +23836,7 @@ function z3(t4, n3, e4, r4, i4) {
s4 = (65535 & t4.N) + (65535 & n3.N) + (65535 & e4.N) + (65535 & r4.N) + (65535 & i4.N) + (o4 >>> 16), o4 = (t4.N >>> 16) + (n3.N >>> 16) + (e4.N >>> 16) + (r4.N >>> 16) + (i4.N >>> 16) + (s4 >>> 16);
return new B3((65535 & o4) << 16 | 65535 & s4, h4);
}
-function x3(t4, n3) {
+function x2(t4, n3) {
return new B3(t4.N ^ n3.N, t4.I ^ n3.I);
}
function _3(t4) {
@@ -23892,22 +23905,22 @@ function W(t4, n3) {
const o4 = [], h4 = [];
if (null !== t4)
for (r4 = 0; r4 < t4.length; r4 += 2)
- n3[(r4 >>> 1) % 5][(r4 >>> 1) / 5 | 0] = x3(n3[(r4 >>> 1) % 5][(r4 >>> 1) / 5 | 0], new B3(t4[r4 + 1], t4[r4]));
+ n3[(r4 >>> 1) % 5][(r4 >>> 1) / 5 | 0] = x2(n3[(r4 >>> 1) % 5][(r4 >>> 1) / 5 | 0], new B3(t4[r4 + 1], t4[r4]));
for (e4 = 0; e4 < 24; e4 += 1) {
for (s4 = J(), r4 = 0; r4 < 5; r4 += 1)
o4[r4] = (u4 = n3[r4][0], w4 = n3[r4][1], c4 = n3[r4][2], f4 = n3[r4][3], a4 = n3[r4][4], new B3(u4.N ^ w4.N ^ c4.N ^ f4.N ^ a4.N, u4.I ^ w4.I ^ c4.I ^ f4.I ^ a4.I));
for (r4 = 0; r4 < 5; r4 += 1)
- h4[r4] = x3(o4[(r4 + 4) % 5], L3(o4[(r4 + 1) % 5], 1));
+ h4[r4] = x2(o4[(r4 + 4) % 5], L3(o4[(r4 + 1) % 5], 1));
for (r4 = 0; r4 < 5; r4 += 1)
for (i4 = 0; i4 < 5; i4 += 1)
- n3[r4][i4] = x3(n3[r4][i4], h4[r4]);
+ n3[r4][i4] = x2(n3[r4][i4], h4[r4]);
for (r4 = 0; r4 < 5; r4 += 1)
for (i4 = 0; i4 < 5; i4 += 1)
s4[i4][(2 * r4 + 3 * i4) % 5] = L3(n3[r4][i4], G[r4][i4]);
for (r4 = 0; r4 < 5; r4 += 1)
for (i4 = 0; i4 < 5; i4 += 1)
- n3[r4][i4] = x3(s4[r4][i4], new B3(~s4[(r4 + 1) % 5][i4].N & s4[(r4 + 2) % 5][i4].N, ~s4[(r4 + 1) % 5][i4].I & s4[(r4 + 2) % 5][i4].I));
- n3[0][0] = x3(n3[0][0], D3[e4]);
+ n3[r4][i4] = x2(s4[r4][i4], new B3(~s4[(r4 + 1) % 5][i4].N & s4[(r4 + 2) % 5][i4].N, ~s4[(r4 + 1) % 5][i4].I & s4[(r4 + 2) % 5][i4].I));
+ n3[0][0] = x2(n3[0][0], D3[e4]);
}
var u4, w4, c4, f4, a4;
return n3;
@@ -25007,7 +25020,7 @@ function ChallengeOverviewScreen() {
/* @__PURE__ */ h(ChallengeButton, { id: uuid, feedback: info.feedback })
);
});
- const policyName = policy.challenges.map((x4) => x4.info.type).join(" + ");
+ const policyName = policy.challenges.map((x3) => x3.info.type).join(" + ");
const opa = !atLeastThereIsOnePolicySolved ? void 0 : policy.isPolicySolved ? void 0 : "0.6";
return /* @__PURE__ */ h(
"div",
@@ -25038,8 +25051,8 @@ function ChallengePayingScreen() {
return /* @__PURE__ */ h("div", null, "invalid state");
}
const payments = [""];
- return /* @__PURE__ */ h(AnastasisClientFrame, { hideNav: true, title: "Recovery: Challenge Paying" }, /* @__PURE__ */ h("p", null, "Some of the providers require a payment to store the encrypted authentication information."), /* @__PURE__ */ h("ul", null, payments.map((x4, i4) => {
- return /* @__PURE__ */ h("li", { key: i4 }, x4);
+ return /* @__PURE__ */ h(AnastasisClientFrame, { hideNav: true, title: "Recovery: Challenge Paying" }, /* @__PURE__ */ h("p", null, "Some of the providers require a payment to store the encrypted authentication information."), /* @__PURE__ */ h("ul", null, payments.map((x3, i4) => {
+ return /* @__PURE__ */ h("li", { key: i4 }, x3);
})), /* @__PURE__ */ h("button", { onClick: () => reducer.transition("pay", {}) }, "Check payment status now"));
}
@@ -25113,8 +25126,8 @@ function PoliciesPayingScreen() {
return /* @__PURE__ */ h("div", null, "invalid state");
}
const payments = reducer.currentReducerState.policy_payment_requests ?? [];
- return /* @__PURE__ */ h(AnastasisClientFrame, { hideNav: true, title: "Backup: Recovery Document Payments" }, /* @__PURE__ */ h("p", null, "Some of the providers require a payment to store the encrypted recovery document."), /* @__PURE__ */ h("ul", null, payments.map((x4, i4) => {
- return /* @__PURE__ */ h("li", { key: i4 }, x4.provider, ": ", x4.payto);
+ return /* @__PURE__ */ h(AnastasisClientFrame, { hideNav: true, title: "Backup: Recovery Document Payments" }, /* @__PURE__ */ h("p", null, "Some of the providers require a payment to store the encrypted recovery document."), /* @__PURE__ */ h("ul", null, payments.map((x3, i4) => {
+ return /* @__PURE__ */ h("li", { key: i4 }, x3.provider, ": ", x3.payto);
})), /* @__PURE__ */ h("button", { onClick: () => reducer.transition("pay", {}) }, "Check payment status now"));
}
@@ -25348,12 +25361,12 @@ function ReviewPoliciesScreen() {
)),
policies.map((p5, policy_index) => {
const methods = p5.methods.map(
- (x4) => configuredAuthMethods[x4.authentication_method] && {
- ...configuredAuthMethods[x4.authentication_method],
- provider: x4.provider
+ (x3) => configuredAuthMethods[x3.authentication_method] && {
+ ...configuredAuthMethods[x3.authentication_method],
+ provider: x3.provider
}
- ).filter((x4) => !!x4);
- const policyName = methods.map((x4) => x4.type).join(" + ");
+ ).filter((x3) => !!x3);
+ const policyName = methods.map((x3) => x3.type).join(" + ");
if (p5.methods.length > methods.length) {
return null;
}
@@ -25731,8 +25744,8 @@ function TruthsPayingScreen() {
return /* @__PURE__ */ h("div", null, "invalid state");
}
const payments = reducer.currentReducerState.payments ?? [];
- return /* @__PURE__ */ h(AnastasisClientFrame, { hideNext: "FIXME", title: "Backup: Truths Paying" }, /* @__PURE__ */ h("p", null, "Some of the providers require a payment to store the encrypted authentication information."), /* @__PURE__ */ h("ul", null, payments.map((x4, i4) => {
- return /* @__PURE__ */ h("li", { key: i4 }, x4);
+ return /* @__PURE__ */ h(AnastasisClientFrame, { hideNext: "FIXME", title: "Backup: Truths Paying" }, /* @__PURE__ */ h("p", null, "Some of the providers require a payment to store the encrypted authentication information."), /* @__PURE__ */ h("ul", null, payments.map((x3, i4) => {
+ return /* @__PURE__ */ h("li", { key: i4 }, x3);
})), /* @__PURE__ */ h("button", { onClick: () => reducer.transition("pay", {}) }, "Check payment status now"));
}
diff --git a/anastasis/index.js.map b/anastasis/index.js.map
index 10e6cce6d..cdff12bf6 100644
--- a/anastasis/index.js.map
+++ b/anastasis/index.js.map
@@ -1,7 +1,7 @@
{
"version": 3,
"sources": ["../../../../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/big-integer@1.6.52/node_modules/big-integer/BigInteger.js", "../../../../node_modules/.pnpm/jed@1.1.1/node_modules/jed/jed.js", "../../../../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/preact-router@3.2.1_preact@10.11.3/node_modules/preact-router/match.js", "../../../../node_modules/.pnpm/qrcode-generator@1.4.4/node_modules/qrcode-generator/qrcode.js", "../../src/index.ts", "../../src/components/app.tsx", "../../../taler-util/src/nacl-fast.ts", "../../../taler-util/src/prng-browser.ts", "../../../taler-util/src/taler-error-codes.ts", "../../../taler-util/src/CancellationToken.ts", "../../../taler-util/src/amounts.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/logging.ts", "../../../taler-util/src/codec.ts", "../../../taler-util/src/sha256.ts", "../../../taler-util/src/kdf.ts", "../../../taler-util/src/taler-crypto.ts", "../../../../node_modules/.pnpm/hash-wasm@4.11.0/node_modules/hash-wasm/dist/index.esm.js", "../../../taler-util/src/argon2-impl.wasm.ts", "../../../taler-util/src/argon2.ts", "../../../taler-util/src/time.ts", "../../../taler-util/src/taler-types.ts", "../../../../node_modules/.pnpm/fflate@0.8.1/node_modules/fflate/esm/browser.js", "../../../taler-util/src/http-common.ts", "../../../taler-util/src/operation.ts", "../../../taler-util/src/taleruri.ts", "../../../taler-util/src/http-client/types.ts", "../../../taler-util/src/http-status-codes.ts", "../../../taler-util/src/libtool-version.ts", "../../../taler-util/src/MerchantApiClient.ts", "../../../taler-util/src/RequestThrottler.ts", "../../../taler-util/src/ReserveTransaction.ts", "../../../taler-util/src/TaskThrottler.ts", "../../../taler-util/src/bank-api-client.ts", "../../../taler-util/src/contract-terms.ts", "../../../taler-util/src/fnutils.ts", "../../../taler-util/src/transactions-types.ts", "../../../taler-util/src/wallet-types.ts", "../../../taler-util/src/http-client/bank-conversion.ts", "../../../taler-util/src/http-client/bank-core.ts", "../../../taler-util/src/http-client/merchant.ts", "../../../taler-util/src/http-client/challenger.ts", "../../../taler-util/src/http-client/exchange.ts", "../../../taler-util/src/i18n.ts", "../../../taler-util/src/iban.ts", "../../../taler-util/src/notifications.ts", "../../../taler-util/src/timer.ts", "../../../taler-util/src/transaction-test-data.ts", "../../../taler-util/src/index.browser.ts", "../../src/context/translation.ts", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/hooks/src/index.js", "../../src/hooks/useLocalStorage.ts", "../../src/hooks/useLang.ts", "../../src/i18n/strings.ts", "../../../anastasis-core/src/anastasis-data.ts", "../../../anastasis-core/src/provider-types.ts", "../../../anastasis-core/src/reducer-types.ts", "../../../anastasis-core/src/crypto.ts", "../../../anastasis-core/src/recovery-document-types.ts", "../../../anastasis-core/src/policy-suggestion.ts", "../../../anastasis-core/src/challenge-feedback-types.ts", "../../../anastasis-core/src/validators.ts", "../../../anastasis-core/src/index.ts", "../../src/pages/home/index.tsx", "../../src/components/AsyncButton.tsx", "../../src/hooks/async.ts", "../../src/components/menu/index.tsx", "../../src/components/menu/NavigationBar.tsx", "../../src/components/menu/SideBar.tsx", "../../src/context/anastasis.ts", "../../src/components/Notifications.tsx", "../../src/hooks/use-anastasis-reducer.ts", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/toInteger/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/requiredArgs/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/toDate/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/addMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/addMilliseconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/defaultOptions/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/addYears/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/constants/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/isDate/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/isValid/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/subMilliseconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/getUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/addLeadingZeros/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/format/lightFormatters/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/format/formatters/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/format/longFormatters/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/protectedTokens/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/en-US/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/locale/en-US/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/defaultLocale/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/format/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/isAfter/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/Setter.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/constants.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/utils.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/setUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/setUTCDay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/_lib/setUTCISODay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/_lib/parsers/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/parse/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.2/node_modules/date-fns/esm/subYears/index.js", "../../src/pages/home/AttributeEntryScreen.tsx", "../../src/components/fields/DateInput.tsx", "../../src/components/picker/DatePicker.tsx", "../../src/components/fields/NumberInput.tsx", "../../src/components/fields/TextInput.tsx", "../../src/pages/home/ConfirmModal.tsx", "../../src/pages/home/AuthenticationEditorScreen.tsx", "../../src/components/InvalidState.tsx", "../../src/components/NoReducer.tsx", "../../src/utils/index.tsx", "../../src/pages/home/authMethod/index.tsx", "../../src/pages/home/authMethod/AuthMethodEmailSetup.tsx", "../../src/components/fields/EmailInput.tsx", "../../src/pages/home/authMethod/AuthMethodEmailSolve.tsx", "../../src/pages/home/SolveScreen.tsx", "../../src/pages/home/authMethod/helpers.ts", "../../src/pages/home/authMethod/AuthMethodIbanSetup.tsx", "../../src/pages/home/authMethod/AuthMethodIbanSolve.tsx", "../../src/pages/home/authMethod/AuthMethodPostSetup.tsx", "../../src/pages/home/authMethod/AuthMethodPostSolve.tsx", "../../src/pages/home/authMethod/AuthMethodQuestionSetup.tsx", "../../src/pages/home/authMethod/AuthMethodQuestionSolve.tsx", "../../src/pages/home/authMethod/AuthMethodSmsSetup.tsx", "../../src/pages/home/authMethod/AuthMethodSmsSolve.tsx", "../../src/pages/home/authMethod/AuthMethodTotpSetup.tsx", "../../src/components/QR.tsx", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/converters.ts", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/common.ts", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/primitives_32.ts", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/sha1.ts", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/sha256.ts", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/primitives_64.ts", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/sha512.ts", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/sha3.ts", "../../../../node_modules/.pnpm/jssha@3.3.0/node_modules/jssha/src/sha.ts", "../../src/pages/home/authMethod/totp.ts", "../../src/pages/home/authMethod/AuthMethodTotpSolve.tsx", "../../src/pages/home/AddingProviderScreen/state.ts", "../../src/pages/home/AddingProviderScreen/views.tsx", "../../src/pages/home/AddingProviderScreen/index.ts", "../../src/pages/home/BackupFinishedScreen.tsx", "../../src/pages/home/ChallengeOverviewScreen.tsx", "../../src/pages/home/ChallengePayingScreen.tsx", "../../src/pages/home/ContinentSelectionScreen.tsx", "../../src/pages/home/PoliciesPayingScreen.tsx", "../../src/pages/home/RecoveryFinishedScreen.tsx", "../../src/pages/home/ReviewPoliciesScreen.tsx", "../../src/pages/home/EditPoliciesScreen.tsx", "../../src/pages/home/SecretEditorScreen.tsx", "../../src/components/fields/FileInput.tsx", "../../src/pages/home/SecretSelectionScreen.tsx", "../../src/pages/home/StartScreen.tsx", "../../src/components/FlieButton.tsx", "../../src/pages/home/TruthsPayingScreen.tsx"],
- "sourcesContent": ["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", "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 || alphabet) 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 || alphabet) 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", "\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", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.Link = exports.Match = undefined;\n\nvar _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; };\n\nvar _preact = require('preact');\n\nvar _preactRouter = require('preact-router');\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Match = exports.Match = function (_Component) {\n\t_inherits(Match, _Component);\n\n\tfunction Match() {\n\t\tvar _temp, _this, _ret;\n\n\t\t_classCallCheck(this, Match);\n\n\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\targs[_key] = arguments[_key];\n\t\t}\n\n\t\treturn _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.update = function (url) {\n\t\t\t_this.nextUrl = url;\n\t\t\t_this.setState({});\n\t\t}, _temp), _possibleConstructorReturn(_this, _ret);\n\t}\n\n\tMatch.prototype.componentDidMount = function componentDidMount() {\n\t\t_preactRouter.subscribers.push(this.update);\n\t};\n\n\tMatch.prototype.componentWillUnmount = function componentWillUnmount() {\n\t\t_preactRouter.subscribers.splice(_preactRouter.subscribers.indexOf(this.update) >>> 0, 1);\n\t};\n\n\tMatch.prototype.render = function render(props) {\n\t\tvar url = this.nextUrl || (0, _preactRouter.getCurrentUrl)(),\n\t\t path = url.replace(/\\?.+$/, '');\n\t\tthis.nextUrl = null;\n\t\treturn props.children({\n\t\t\turl: url,\n\t\t\tpath: path,\n\t\t\tmatches: (0, _preactRouter.exec)(path, props.path, {}) !== false\n\t\t});\n\t};\n\n\treturn Match;\n}(_preact.Component);\n\nvar Link = function Link(_ref) {\n\tvar activeClassName = _ref.activeClassName,\n\t path = _ref.path,\n\t props = _objectWithoutProperties(_ref, ['activeClassName', 'path']);\n\n\treturn (0, _preact.h)(\n\t\tMatch,\n\t\t{ path: path || props.href },\n\t\tfunction (_ref2) {\n\t\t\tvar matches = _ref2.matches;\n\t\t\treturn (0, _preact.h)(_preactRouter.Link, _extends({}, props, { 'class': [props.class || props.className, matches && activeClassName].filter(Boolean).join(' ') }));\n\t\t}\n\t);\n};\n\nexports.Link = Link;\nexports.default = Match;\n\nMatch.Link = Link;\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", "/*\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 */\nimport { setupI18n } from \"@gnu-taler/taler-util\";\nimport { h, render } from \"preact\";\nimport App from \"./components/app.js\";\nimport \"./scss/main.scss\";\n\nfunction main(): void {\n try {\n const container = document.getElementById(\"container\");\n if (!container) {\n throw new Error(\"container not found, can't mount page contents\");\n }\n render(h(App, {}), container);\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\n// setupI18n(\"en\", strings);\n\nif (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", main);\n} else {\n main();\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 */\nimport { FunctionalComponent, h } from \"preact\";\nimport { TranslationProvider } from \"../context/translation.js\";\nimport AnastasisClient from \"../pages/home/index.js\";\n\nconst App: FunctionalComponent = () => {\n return (\n <TranslationProvider>\n <div id=\"app\" class=\"has-navbar-fixed-top\">\n <AnastasisClient />\n </div>\n </TranslationProvider>\n );\n};\n\nexport default App;\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 * An error response did not include an error code in the format expected by the client. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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. Details should be in the local logs. Check if you are using the latest available version or file a report with the developers.\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 in the expected format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 * The operation timed out. Trying again might help. Check the network connection.\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 protocol version given by the server does not follow the required format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 the right data format, but the content did not satisfy the protocol. Please file a bug report.\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 an option is set to an invalid value. Check the logs and fix the local 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 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. Please file a bug report.\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 token used by the client to authorize the request does not grant the required permissions for the request. Check the requirements and obtain a suitable authorization token to proceed.\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 GENERIC_TOKEN_PERMISSION_INSUFFICIENT = 16,\n\n\n /**\n * The HTTP method used is invalid for this endpoint. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you used the correct URL and/or file a report with the developers of the client software.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 were malformed and caused the server to not be able to handle the request. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check that you are using the correct syntax as of RFC 8905 and/or that you entered the bank account number correctly.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 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 body in the request could not be decompressed by the server. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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_COMPRESSION_INVALID = 28,\n\n\n /**\n * The currency involved in the operation is not acceptable for this server. Check your configuration and make sure the currency specified for a given service provider is one of the currencies supported by that provider.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\n * Returned with an HTTP status code of #MHD_HTTP_CONTENT_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 refused the request due to lack of proper 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 GENERIC_UNAUTHORIZED = 40,\n\n\n /**\n * The service refused the request as the given authorization token is unknown.\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 GENERIC_TOKEN_UNKNOWN = 41,\n\n\n /**\n * The service refused the request as the given authorization token expired.\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 GENERIC_TOKEN_EXPIRED = 42,\n\n\n /**\n * The service refused the request as the given authorization token is malformed.\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 GENERIC_TOKEN_MALFORMED = 43,\n\n\n /**\n * The service refused the request due to lack of proper rights on the resource.\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 GENERIC_FORBIDDEN = 44,\n\n\n /**\n * The service failed initialize its connection to the database. The system administrator should check that the service has permissions to access the database and that the database is running.\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. The system administrator should check that the database is running.\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. The system administrator should check that the database is running and review the service logs.\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. The system administrator should check that the database is running and review the service logs.\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 unrecoverable error trying to commit a transaction to the database. The system administrator should check that the database is running and review the service logs.\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; it should only happen if some client maliciously tries to create conflicting concurrent transactions. It could also be a sign of a missing index. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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). Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. The system administrator should check if the resource files are installed in the correct location and are readable to the 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 GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply. The system administrator should investigate the logs and check if the templates are well-formed.\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 coin is not known to the exchange (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_GENERIC_COIN_UNKNOWN = 1019,\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 failed to start a KYC attribute conversion helper process. It is likely configured incorrectly.\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_KYC_CONVERTER_FAILED = 1037,\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 client provided an unknown commitment for an age-withdraw 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 EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN = 1161,\n\n\n /**\n * The total sum of amounts from the denominations did overflow.\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_AGE_WITHDRAW_AMOUNT_OVERFLOW = 1162,\n\n\n /**\n * The total sum of value and fees from the denominations differs from the committed amount with fees.\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_AGE_WITHDRAW_AMOUNT_INCORRECT = 1163,\n\n\n /**\n * The original commitment differs from the calculated hash\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_AGE_WITHDRAW_REVEAL_INVALID_HASH = 1164,\n\n\n /**\n * The maximum age in the commitment is too large for the reserve\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_MAXIMUM_AGE_TOO_LARGE = 1165,\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 coin 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_COIN_HISTORY_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_RESERVE_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 * Withdrawal from the reserve requires age restriction to be set.\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_AGE_RESTRICTION_REQUIRED = 1681,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys or the helpers had no denominations (properly) configured.\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_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_BAD_GATEWAY (502).\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 * TOTP key 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_TOTP_KEY_INVALID = 1980,\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 reward ID is unknown. This could happen if the reward 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_REWARD_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 backend could not find the OTP device(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_OTP_DEVICE_UNKNOWN = 2021,\n\n\n /**\n * The account 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_ACCOUNT_UNKNOWN = 2022,\n\n\n /**\n * The wire hash 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 MERCHANT_GENERIC_H_WIRE_MALFORMED = 2023,\n\n\n /**\n * The currency specified in the operation does not work with the current state of the given resource.\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_GENERIC_CURRENCY_MISMATCH = 2024,\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_BAD_REQUEST (400).\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_BAD_REQUEST (400).\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 exchange does not support the selected bank account of the merchant. Likely the merchant had stale data on the bank accounts of the exchange and thus selected an inappropriate exchange when making the offer.\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_WIRE_METHOD_UNSUPPORTED = 2175,\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 * A token family with this ID but conflicting data 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_POST_TOKEN_FAMILY_CONFLICT = 2225,\n\n\n /**\n * The backend is unaware of a token family with the given ID.\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_PATCH_TOKEN_FAMILY_NOT_FOUND = 2226,\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 are waiting for the exchange to provide us with key material before checking the wire transfer.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS = 2258,\n\n\n /**\n * We are waiting for the exchange to provide us with the list of aggregated transactions.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST = 2259,\n\n\n /**\n * The endpoint indicated in the wire transfer does not belong to a GNU Taler exchange.\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_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE = 2260,\n\n\n /**\n * The exchange indicated in the wire transfer claims to know nothing about the wire transfer.\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_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND = 2261,\n\n\n /**\n * The interaction with the exchange is delayed due to rate limiting.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED = 2262,\n\n\n /**\n * We experienced a transient failure in our interaction with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE = 2263,\n\n\n /**\n * The response from the exchange was unacceptable and should be reviewed with an auditor.\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_EXCHANGE_TRANSFERS_HARD_FAILURE = 2264,\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_REWARD_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_REWARD_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_REWARD_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The reward 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_REWARD_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_REWARD_PICKUP_AMOUNT_EXCEEDS_REWARD_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_REWARD_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The merchant instance has no active bank accounts configured. However, at least one bank account must be available to create 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 merchant backend failed to obtain the current local time.\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; likely 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 * A conflicting order (sharing the same order identifier) already exists at this merchant backend instance.\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 order creation request is invalid because the given 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 order creation request is invalid because the delivery date given 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 order creation request is invalid because a wire deadline of \"never\" 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_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The order creation request is invalid because the given payment deadline 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 order creation request is invalid because the given refund deadline 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 * The backend does not trust any exchange that would allow funds to be wired to any bank account of this instance using the wire method specified with the order. Note that right now, we do not support the use of exchange bank accounts with mandatory currency conversion.\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_NO_EXCHANGES_FOR_WIRE_METHOD = 2509,\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. Deletion may work later after the offer has expired if it remains unpaid.\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 exceeds the original price paid by the customer.\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 * Only paid orders can be refunded, and the frontend specified an unpaid order to issue a refund for.\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 ever 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 amount transferred differs between what was submitted and what the exchange claimed.\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_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS = 2563,\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 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 MERCHANT_PRIVATE_ACCOUNT_DELETE_UNKNOWN_ACCOUNT = 2626,\n\n\n /**\n * The bank account specified in the request already exists at the merchant.\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_ACCOUNT_EXISTS = 2627,\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 requested exchange does not allow rewards.\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_REWARDS_NOT_ALLOWED = 2701,\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 rewards 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_REWARD_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the rewards 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_REWARD_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the reward, and it was configured for rewardping. However, the funds remaining are insufficient to cover the reward, 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_REWARD_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the reward.\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_REWARD_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 * The OTP device 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_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS = 2851,\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 * 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 client tried to register a new account under a reserved username (like 'admin' for example).\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_RESERVED_USERNAME_CONFLICT = 5120,\n\n\n /**\n * The client tried to register a new account with an username 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 BANK_REGISTER_USERNAME_REUSE = 5121,\n\n\n /**\n * The client tried to register a new account with a payto:// URI 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 BANK_REGISTER_PAYTO_URI_REUSE = 5122,\n\n\n /**\n * The client tried to delete an account with a non null 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 BANK_ACCOUNT_BALANCE_NOT_ZERO = 5123,\n\n\n /**\n * The client tried to create a transaction or an operation that credit an unknown account.\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_UNKNOWN_CREDITOR = 5124,\n\n\n /**\n * The client tried to create a transaction or an operation that debit an unknown account.\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_UNKNOWN_DEBTOR = 5125,\n\n\n /**\n * The client tried to perform an action prohibited for exchange accounts.\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_ACCOUNT_IS_EXCHANGE = 5126,\n\n\n /**\n * The client tried to perform an action reserved for exchange accounts.\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_ACCOUNT_IS_NOT_EXCHANGE = 5127,\n\n\n /**\n * Received currency conversion is wrong.\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_BAD_CONVERSION = 5128,\n\n\n /**\n * The account referenced in this operation is missing tan info for the chosen channel.\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_MISSING_TAN_INFO = 5129,\n\n\n /**\n * The client attempted to confirm a transaction with incomplete info.\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_INCOMPLETE = 5130,\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 BANK_TAN_RATE_LIMITED = 5131,\n\n\n /**\n * This TAN channel is not supported.\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 BANK_TAN_CHANNEL_NOT_SUPPORTED = 5132,\n\n\n /**\n * Failed to send TAN using the helper script. Either script is not found, or script timeout, or script 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 BANK_TAN_CHANNEL_SCRIPT_FAILED = 5133,\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 BANK_TAN_CHALLENGE_FAILED = 5134,\n\n\n /**\n * A non-admin user has tried to change their legal 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_NON_ADMIN_PATCH_LEGAL_NAME = 5135,\n\n\n /**\n * A non-admin user has tried to change their debt limit.\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_NON_ADMIN_PATCH_DEBT_LIMIT = 5136,\n\n\n /**\n * A non-admin user has tried to change their password whihout providing the current 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 BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD = 5137,\n\n\n /**\n * Provided old password does not match current password.\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_PATCH_BAD_OLD_PASSWORD = 5138,\n\n\n /**\n * An admin user has tried to become an 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 BANK_PATCH_ADMIN_EXCHANGE = 5139,\n\n\n /**\n * A non-admin user has tried to change their cashout account.\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_NON_ADMIN_PATCH_CASHOUT = 5140,\n\n\n /**\n * A non-admin user has tried to change their contact info.\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_NON_ADMIN_PATCH_CONTACT = 5141,\n\n\n /**\n * The client tried to create a transaction that credit the admin account.\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_ADMIN_CREDITOR = 5142,\n\n\n /**\n * The referenced challenge 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_CHALLENGE_NOT_FOUND = 5143,\n\n\n /**\n * The referenced challenge has expired.\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_TAN_CHALLENGE_EXPIRED = 5144,\n\n\n /**\n * A non-admin user has tried to create an account with 2fa.\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_NON_ADMIN_SET_TAN_CHANNEL = 5145,\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_CONTENT_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_CONTENT_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 a reward) 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_REWARD_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 * The exchange's self-reported base URL does not match the one that the wallet is using.\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_BASE_URL_MISMATCH = 7030,\n\n\n /**\n * The order has already been paid 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_PAID = 7031,\n\n\n /**\n * An exchange that is required for some request is currently 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_EXCHANGE_UNAVAILABLE = 7032,\n\n\n /**\n * An exchange entry is still used by the exchange, thus it can't be deleted without purging.\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_ENTRY_USED = 7033,\n\n\n /**\n * The wallet database is unavailable and the wallet thus is not operational.\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_DB_UNAVAILABLE = 7034,\n\n\n /**\n * A taler:// URI is malformed and 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_TALER_URI_MALFORMED = 7035,\n\n\n /**\n * A wallet-core request was cancelled and thus can't provide a 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_CORE_REQUEST_CANCELLED = 7036,\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_CONTENT_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 * The Donau failed to perform the operation as it could not find the private keys. This is a problem with the Donau 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 DONAU_GENERIC_KEYS_MISSING = 8607,\n\n\n /**\n * The signature of the charity key 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 DONAU_CHARITY_SIGNATURE_INVALID = 8608,\n\n\n /**\n * The charity 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 DONAU_CHARITY_NOT_FOUND = 8609,\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 * The client is unknown or unauthorized.\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 CHALLENGER_GENERIC_CLIENT_UNKNOWN = 9750,\n\n\n /**\n * The client is not authorized to use the given redirect URI.\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 CHALLENGER_GENERIC_CLIENT_FORBIDDEN_BAD_REDIRECT_URI = 9751,\n\n\n /**\n * The service failed to execute its helper process to send the challenge.\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 CHALLENGER_HELPER_EXEC_FAILED = 9752,\n\n\n /**\n * The grant is unknown to the service (it could also have 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 CHALLENGER_GRANT_UNKNOWN = 9753,\n\n\n /**\n * The code given is not even well-formed.\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 CHALLENGER_CLIENT_FORBIDDEN_BAD_CODE = 9754,\n\n\n /**\n * The service is not aware of the referenced validation process.\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 CHALLENGER_GENERIC_VALIDATION_UNKNOWN = 9755,\n\n\n /**\n * The code given 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 CHALLENGER_CLIENT_FORBIDDEN_INVALID_CODE = 9756,\n\n\n /**\n * Too many attempts have been made, validation is temporarily disabled for this address.\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 CHALLENGER_TOO_MANY_ATTEMPTS = 9757,\n\n\n /**\n * The PIN code provided is incorrect.\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 CHALLENGER_INVALID_PIN = 9758,\n\n\n /**\n * The token cannot be valid as no address was ever provided by the client.\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 CHALLENGER_MISSING_ADDRESS = 9759,\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", "/*\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) 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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n renderContext,\n} from \"./codec.js\";\nimport { CurrencySpecification } from \"./index.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 * Separator character between integer and fractional\n */\nexport const FRAC_SEPARATOR = \".\";\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\n/**\n * Immutable amount.\n */\nexport class Amount {\n static from(a: AmountLike): Amount {\n return new Amount(Amounts.parseOrThrow(a), 0);\n }\n\n static zeroOfCurrency(currency: string): Amount {\n return new Amount(Amounts.zeroOfCurrency(currency), 0);\n }\n\n add(...a: AmountLike[]): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.add(this.val, ...a);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n mult(n: number): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.mult(this, n);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n toJson(): AmountJson {\n return { ...this.val };\n }\n\n toString(): AmountString {\n return Amounts.stringify(this.val);\n }\n\n private constructor(\n private val: AmountJson,\n private saturated: number,\n ) {}\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 function codecForAmountString(): Codec<AmountString> {\n return {\n decode(x: any, c?: Context): AmountString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (Amounts.parse(x) === undefined) {\n throw new DecodingError(\n `invalid amount at ${renderContext(c)} got \"${x}\"`,\n );\n }\n return x as AmountString;\n },\n };\n}\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 = string | AmountString | AmountJson | Amount;\n\nexport interface DivmodResult {\n quotient: number;\n remainder: AmountJson;\n}\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 if (amt instanceof Amount) {\n return amt.toJson();\n }\n return amt;\n }\n\n static divmod(a1: AmountLike, a2: AmountLike): DivmodResult {\n const am1 = Amounts.jsonifyAmount(a1);\n const am2 = Amounts.jsonifyAmount(a2);\n if (am1.currency != am2.currency) {\n throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);\n }\n\n const x1 =\n BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);\n const x2 =\n BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);\n\n const quotient = x1 / x2;\n const remainderScaled = x1 % x2;\n\n return {\n quotient: Number(quotient),\n remainder: {\n currency: am1.currency,\n value: Number(remainderScaled / BigInt(amountFractionalBase)),\n fraction: Number(remainderScaled % BigInt(amountFractionalBase)),\n },\n };\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 * Check whether a string is a valid currency for a Taler amount.\n */\n static isCurrency(s: string): boolean {\n return /^[a-zA-Z]{1,11}$/.test(s);\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n *\n * Currency name size limit is 11 of ASCII letters\n * Fraction size limit is 8\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z]{1,11}):([0-9]+)([.][0-9]{1,8})?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || FRAC_SEPARATOR + \"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 (s instanceof Amount) {\n return s.toJson();\n }\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 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 multiplied 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): AmountString {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}` as AmountString;\n }\n\n static amountHasSameCurrency(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 isSameCurrency(curr1: string, curr2: string): boolean {\n return curr1.toLowerCase() === curr2.toLowerCase();\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 + FRAC_SEPARATOR;\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 static stringifyValueWithSpec(\n value: AmountJson,\n spec: CurrencySpecification,\n ): { currency: string; normal: string; small?: string } {\n const strValue = Amounts.stringifyValue(value);\n const pos = strValue.indexOf(FRAC_SEPARATOR);\n const originalPosition = pos < 0 ? strValue.length : pos;\n\n let currency = value.currency;\n const names = Object.keys(spec.alt_unit_names);\n let FRAC_POS_NEW_POSITION = originalPosition;\n //find symbol\n //FIXME: this should be based on a cache to speed up\n if (names.length > 0) {\n let unitIndex: string = \"0\"; //default entry by DD51\n names.forEach((index) => {\n const i = Number.parseInt(index, 10);\n if (Number.isNaN(i)) return; //skip\n if (originalPosition - i <= 0) return; //too big\n if (originalPosition - i < FRAC_POS_NEW_POSITION) {\n FRAC_POS_NEW_POSITION = originalPosition - i;\n unitIndex = index;\n }\n });\n currency = spec.alt_unit_names[unitIndex];\n }\n\n if (originalPosition === FRAC_POS_NEW_POSITION) {\n const { normal, small } = splitNormalAndSmall(\n strValue,\n originalPosition,\n spec,\n );\n return { currency, normal, small };\n }\n\n const intPart = strValue.substring(0, originalPosition);\n const fracPArt = strValue.substring(originalPosition + 1);\n //indexSize is always smaller than originalPosition\n const newValue =\n intPart.substring(0, FRAC_POS_NEW_POSITION) +\n FRAC_SEPARATOR +\n intPart.substring(FRAC_POS_NEW_POSITION) +\n fracPArt;\n const { normal, small } = splitNormalAndSmall(\n newValue,\n FRAC_POS_NEW_POSITION,\n spec,\n );\n return { currency, normal, small };\n }\n}\n\nfunction splitNormalAndSmall(\n decimal: string,\n fracSeparatorIndex: number,\n spec: CurrencySpecification,\n): { normal: string; small?: string } {\n let normal: string;\n let small: string | undefined;\n if (\n decimal.length - fracSeparatorIndex - 1 >\n spec.num_fractional_normal_digits\n ) {\n const limit = fracSeparatorIndex + spec.num_fractional_normal_digits + 1;\n normal = decimal.substring(0, limit);\n small = decimal.substring(limit);\n } else {\n normal = decimal;\n small = undefined;\n }\n return { normal, small };\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 //Include URL type for \"url\" and \"base\" params.\n constructor(url: string | URL, base?: string | URL) {\n let parsedBase = null;\n if (base !== undefined) {\n if (base instanceof URL) {\n base = base.href;\n }\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n if (url instanceof URL) {\n url = url.href;\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) 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\nlet globalLogLevel = LogLevel.Info;\nconst byTagLogLevel: Record<string, LogLevel> = {};\n\nlet nativeLogging: boolean = false;\n\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString\nError.prototype.toString = function () {\n if (\n this === null ||\n (typeof this !== \"object\" && typeof this !== \"function\")\n ) {\n throw new TypeError();\n }\n let name = this.name;\n name = name === undefined ? \"Error\" : `${name}`;\n let msg = this.message;\n msg = msg === undefined ? \"\" : `${msg}`;\n\n let cause = \"\";\n if (\"cause\" in this) {\n cause = `\\n Caused by: ${this.cause}`;\n }\n return `${name}: ${msg}${cause}`;\n};\n\nexport function getGlobalLogLevel(): string {\n return globalLogLevel;\n}\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nexport function enableNativeLogging() {\n nativeLogging = true;\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 writeNativeLog(\n message: any,\n tag: string,\n level: number,\n args: any[],\n): void {\n const logFn = (globalThis as any).__nativeLog;\n if (logFn) {\n let m: string;\n if (args.length == 0) {\n m = message;\n } else {\n m = message + \" \" + args.toString();\n }\n logFn(level, tag, message);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 2, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 3, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 4, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 1, args);\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", "/*\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\nimport { j2s } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\nconst logger = new Logger(\"codec.ts\");\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 * Return a codec for a value that must be a string.\n */\nexport function codecForStringURL(shouldEndWithSlash?: boolean): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return x;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n }\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForURL(shouldEndWithSlash?: boolean): Codec<URL> {\n return {\n decode(x: any, c?: Context): URL {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return url;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\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 if (logger.shouldLogTrace()) {\n logger.trace(`offending value: ${j2s(x)}`);\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\n\nconst x = codecForEither(codecForString(), codecForNumber());\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 reuse 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 * as argon2 from \"./argon2.js\";\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\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\nimport { AmountLike, Amounts } from \"./amounts.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 hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n ): 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 async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n if (tart) {\n return tart.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\n }\n return await argon2.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\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 global/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 public 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 public 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\n/**\n * This makes the assumption that the uint64 fits a float,\n * which should be true for all Taler protocol messages.\n */\nexport function bufferForUint64(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(8);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n if (n < 0 || !Number.isInteger(n)) {\n throw Error(\"non-negative integer expected\");\n }\n dv.setBigUint64(0, BigInt(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 MERCHANT_REFUND = 1102,\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 WALLET_PURSE_DELETE = 1220,\n WALLET_COIN_HISTORY = 1209,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n TALER_SIGNATURE_AML_DECISION = 1350,\n TALER_SIGNATURE_AML_QUERY = 1351,\n TALER_SIGNATURE_MASTER_AML_KEY = 1017,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport 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 const PublishedAgeRestrictionBaseKey: Edx25519PublicKey = decodeCrock(\n \"CH0VKFDZ2GWRWHQBBGEK9MWV5YDQVJ0RXEE0KYT3NMB69F0R96TG\",\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 < numPrivs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-commitment\"),\n salt: bufferForUint32(i),\n });\n\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n privs.push(priv);\n }\n\n for (let i = numPrivs; i < numPubs; i++) {\n const deriveSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-factor\"),\n salt: bufferForUint32(i),\n });\n const pub = await Edx25519.publicKeyDerive(\n PublishedAgeRestrictionBaseKey,\n deriveSeed,\n );\n pubs.push(pub);\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!\nexport type 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\nexport async 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\nexport async 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 nonce: EncryptionNonce,\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(nonce, key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n nonce: EncryptionNonce,\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(nonce, 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\nexport function amountToBuffer(amount: AmountLike): Uint8Array {\n const amountJ = Amounts.jsonifyAmount(amount);\n const buffer = new ArrayBuffer(8 + 4 + 12);\n const dvbuf = new DataView(buffer);\n const u8buf = new Uint8Array(buffer);\n const curr = stringToBytes(amountJ.currency);\n if (typeof dvbuf.setBigUint64 !== \"undefined\") {\n dvbuf.setBigUint64(0, BigInt(amountJ.value));\n } else {\n const arr = bigint(amountJ.value).toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n dvbuf.setUint8(offset++, arr[i]);\n }\n }\n dvbuf.setUint32(8, amountJ.fraction);\n u8buf.set(curr, 8 + 4);\n\n return u8buf;\n}\n\nexport function timestampRoundedToBuffer(\n ts: TalerProtocolTimestamp,\n): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.t_s) * BigInt(1000 * 1000);\n v.setBigUint64(0, s);\n } else {\n const s =\n ts.t_s === \"never\" ? bigint.zero : bigint(ts.t_s).multiply(1000 * 1000);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n\nexport function durationRoundedToBuffer(ts: TalerProtocolDuration): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.d_us);\n v.setBigUint64(0, s);\n } else {\n const s = ts.d_us === \"forever\" ? bigint.zero : bigint(ts.d_us);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n", "/*!\n * hash-wasm (https://www.npmjs.com/package/hash-wasm)\n * (c) Dani Biro\n * @license MIT\n */\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/* global Reflect, Promise, SuppressedError, Symbol */\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\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nclass Mutex {\n constructor() {\n this.mutex = Promise.resolve();\n }\n lock() {\n let begin = () => { };\n this.mutex = this.mutex.then(() => new Promise(begin));\n return new Promise((res) => {\n begin = res;\n });\n }\n dispatch(fn) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.lock();\n try {\n return yield Promise.resolve(fn());\n }\n finally {\n unlock();\n }\n });\n }\n}\n\n/* eslint-disable import/prefer-default-export */\n/* eslint-disable no-bitwise */\nvar _a;\nfunction getGlobal() {\n if (typeof globalThis !== 'undefined')\n return globalThis;\n // eslint-disable-next-line no-restricted-globals\n if (typeof self !== 'undefined')\n return self;\n if (typeof window !== 'undefined')\n return window;\n return global;\n}\nconst globalObject = getGlobal();\nconst nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;\nconst textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;\nfunction intArrayToString(arr, len) {\n return String.fromCharCode(...arr.subarray(0, len));\n}\nfunction hexCharCodesToInt(a, b) {\n return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));\n}\nfunction writeHexToUInt8(buf, str) {\n const size = str.length >> 1;\n for (let i = 0; i < size; i++) {\n const index = i << 1;\n buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));\n }\n}\nfunction hexStringEqualsUInt8(str, buf) {\n if (str.length !== buf.length * 2) {\n return false;\n }\n for (let i = 0; i < buf.length; i++) {\n const strIndex = i << 1;\n if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {\n return false;\n }\n }\n return true;\n}\nconst alpha = 'a'.charCodeAt(0) - 10;\nconst digit = '0'.charCodeAt(0);\nfunction getDigestHex(tmpBuffer, input, hashLength) {\n let p = 0;\n /* eslint-disable no-plusplus */\n for (let i = 0; i < hashLength; i++) {\n let nibble = input[i] >>> 4;\n tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;\n nibble = input[i] & 0xF;\n tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;\n }\n /* eslint-enable no-plusplus */\n return String.fromCharCode.apply(null, tmpBuffer);\n}\nconst getUInt8Buffer = nodeBuffer !== null\n ? (data) => {\n if (typeof data === 'string') {\n const buf = nodeBuffer.from(data, 'utf8');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n }\n if (nodeBuffer.isBuffer(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.length);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new Error('Invalid data type!');\n }\n : (data) => {\n if (typeof data === 'string') {\n return textEncoder.encode(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new Error('Invalid data type!');\n };\nconst base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst base64Lookup = new Uint8Array(256);\nfor (let i = 0; i < base64Chars.length; i++) {\n base64Lookup[base64Chars.charCodeAt(i)] = i;\n}\nfunction encodeBase64(data, pad = true) {\n const len = data.length;\n const extraBytes = len % 3;\n const parts = [];\n const len2 = len - extraBytes;\n for (let i = 0; i < len2; i += 3) {\n const tmp = ((data[i] << 16) & 0xFF0000)\n + ((data[i + 1] << 8) & 0xFF00)\n + (data[i + 2] & 0xFF);\n const triplet = base64Chars.charAt((tmp >> 18) & 0x3F)\n + base64Chars.charAt((tmp >> 12) & 0x3F)\n + base64Chars.charAt((tmp >> 6) & 0x3F)\n + base64Chars.charAt(tmp & 0x3F);\n parts.push(triplet);\n }\n if (extraBytes === 1) {\n const tmp = data[len - 1];\n const a = base64Chars.charAt(tmp >> 2);\n const b = base64Chars.charAt((tmp << 4) & 0x3F);\n parts.push(`${a}${b}`);\n if (pad) {\n parts.push('==');\n }\n }\n else if (extraBytes === 2) {\n const tmp = (data[len - 2] << 8) + data[len - 1];\n const a = base64Chars.charAt(tmp >> 10);\n const b = base64Chars.charAt((tmp >> 4) & 0x3F);\n const c = base64Chars.charAt((tmp << 2) & 0x3F);\n parts.push(`${a}${b}${c}`);\n if (pad) {\n parts.push('=');\n }\n }\n return parts.join('');\n}\nfunction getDecodeBase64Length(data) {\n let bufferLength = Math.floor(data.length * 0.75);\n const len = data.length;\n if (data[len - 1] === '=') {\n bufferLength -= 1;\n if (data[len - 2] === '=') {\n bufferLength -= 1;\n }\n }\n return bufferLength;\n}\nfunction decodeBase64(data) {\n const bufferLength = getDecodeBase64Length(data);\n const len = data.length;\n const bytes = new Uint8Array(bufferLength);\n let p = 0;\n for (let i = 0; i < len; i += 4) {\n const encoded1 = base64Lookup[data.charCodeAt(i)];\n const encoded2 = base64Lookup[data.charCodeAt(i + 1)];\n const encoded3 = base64Lookup[data.charCodeAt(i + 2)];\n const encoded4 = base64Lookup[data.charCodeAt(i + 3)];\n bytes[p] = (encoded1 << 2) | (encoded2 >> 4);\n p += 1;\n bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n p += 1;\n bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n p += 1;\n }\n return bytes;\n}\n\nconst MAX_HEAP = 16 * 1024;\nconst WASM_FUNC_HASH_LENGTH = 4;\nconst wasmMutex = new Mutex();\nconst wasmModuleCache = new Map();\nfunction WASMInterface(binary, hashLength) {\n return __awaiter(this, void 0, void 0, function* () {\n let wasmInstance = null;\n let memoryView = null;\n let initialized = false;\n if (typeof WebAssembly === 'undefined') {\n throw new Error('WebAssembly is not supported in this environment!');\n }\n const writeMemory = (data, offset = 0) => {\n memoryView.set(data, offset);\n };\n const getMemory = () => memoryView;\n const getExports = () => wasmInstance.exports;\n const setMemorySize = (totalSize) => {\n wasmInstance.exports.Hash_SetMemorySize(totalSize);\n const arrayOffset = wasmInstance.exports.Hash_GetBuffer();\n const memoryBuffer = wasmInstance.exports.memory.buffer;\n memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);\n };\n const getStateSize = () => {\n const view = new DataView(wasmInstance.exports.memory.buffer);\n const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);\n return stateSize;\n };\n const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {\n if (!wasmModuleCache.has(binary.name)) {\n const asm = decodeBase64(binary.data);\n const promise = WebAssembly.compile(asm);\n wasmModuleCache.set(binary.name, promise);\n }\n const module = yield wasmModuleCache.get(binary.name);\n wasmInstance = yield WebAssembly.instantiate(module, {\n // env: {\n // emscripten_memcpy_big: (dest, src, num) => {\n // const memoryBuffer = wasmInstance.exports.memory.buffer;\n // const memView = new Uint8Array(memoryBuffer, 0);\n // memView.set(memView.subarray(src, src + num), dest);\n // },\n // print_memory: (offset, len) => {\n // const memoryBuffer = wasmInstance.exports.memory.buffer;\n // const memView = new Uint8Array(memoryBuffer, 0);\n // console.log('print_int32', memView.subarray(offset, offset + len));\n // },\n // },\n });\n // wasmInstance.exports._start();\n }));\n const setupInterface = () => __awaiter(this, void 0, void 0, function* () {\n if (!wasmInstance) {\n yield loadWASMPromise;\n }\n const arrayOffset = wasmInstance.exports.Hash_GetBuffer();\n const memoryBuffer = wasmInstance.exports.memory.buffer;\n memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);\n });\n const init = (bits = null) => {\n initialized = true;\n wasmInstance.exports.Hash_Init(bits);\n };\n const updateUInt8Array = (data) => {\n let read = 0;\n while (read < data.length) {\n const chunk = data.subarray(read, read + MAX_HEAP);\n read += chunk.length;\n memoryView.set(chunk);\n wasmInstance.exports.Hash_Update(chunk.length);\n }\n };\n const update = (data) => {\n if (!initialized) {\n throw new Error('update() called before init()');\n }\n const Uint8Buffer = getUInt8Buffer(data);\n updateUInt8Array(Uint8Buffer);\n };\n const digestChars = new Uint8Array(hashLength * 2);\n const digest = (outputType, padding = null) => {\n if (!initialized) {\n throw new Error('digest() called before init()');\n }\n initialized = false;\n wasmInstance.exports.Hash_Final(padding);\n if (outputType === 'binary') {\n // the data is copied to allow GC of the original memory object\n return memoryView.slice(0, hashLength);\n }\n return getDigestHex(digestChars, memoryView, hashLength);\n };\n const save = () => {\n if (!initialized) {\n throw new Error('save() can only be called after init() and before digest()');\n }\n const stateOffset = wasmInstance.exports.Hash_GetState();\n const stateLength = getStateSize();\n const memoryBuffer = wasmInstance.exports.memory.buffer;\n const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);\n // prefix is 4 bytes from SHA1 hash of the WASM binary\n // it is used to detect incompatible internal states between different versions of hash-wasm\n const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);\n writeHexToUInt8(prefixedState, binary.hash);\n prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);\n return prefixedState;\n };\n const load = (state) => {\n if (!(state instanceof Uint8Array)) {\n throw new Error('load() expects an Uint8Array generated by save()');\n }\n const stateOffset = wasmInstance.exports.Hash_GetState();\n const stateLength = getStateSize();\n const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;\n const memoryBuffer = wasmInstance.exports.memory.buffer;\n if (state.length !== overallLength) {\n throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);\n }\n if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {\n throw new Error('This state was written by an incompatible hash implementation');\n }\n const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);\n new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);\n initialized = true;\n };\n const isDataShort = (data) => {\n if (typeof data === 'string') {\n // worst case is 4 bytes / char\n return data.length < MAX_HEAP / 4;\n }\n return data.byteLength < MAX_HEAP;\n };\n let canSimplify = isDataShort;\n switch (binary.name) {\n case 'argon2':\n case 'scrypt':\n canSimplify = () => true;\n break;\n case 'blake2b':\n case 'blake2s':\n // if there is a key at blake2 then cannot simplify\n canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);\n break;\n case 'blake3':\n // if there is a key at blake3 then cannot simplify\n canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);\n break;\n case 'xxhash64': // cannot simplify\n case 'xxhash3':\n case 'xxhash128':\n canSimplify = () => false;\n break;\n }\n // shorthand for (init + update + digest) for better performance\n const calculate = (data, initParam = null, digestParam = null) => {\n if (!canSimplify(data, initParam)) {\n init(initParam);\n update(data);\n return digest('hex', digestParam);\n }\n const buffer = getUInt8Buffer(data);\n memoryView.set(buffer);\n wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);\n return getDigestHex(digestChars, memoryView, hashLength);\n };\n yield setupInterface();\n return {\n getMemory,\n writeMemory,\n getExports,\n setMemorySize,\n init,\n update,\n digest,\n save,\n load,\n calculate,\n hashLength,\n };\n });\n}\n\nvar name$k = \"adler32\";\nvar data$k = \"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgUEAQECAgYOAn8BQYCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEK6wkGBQBBgAkLCgBBAEEBNgKECAvjCAEHf0EAKAKECCIBQf//A3EhAiABQRB2IQMCQAJAIABBAUcNACACQQAtAIAJaiIBQY+AfGogASABQfD/A0sbIgEgA2oiBEEQdCIFQYCAPGogBSAEQfD/A0sbIAFyIQEMAQsCQAJAAkACQAJAIABBEEkNAEGACSEGIABBsCtJDQFBgAkhBgNAQQAhBQNAIAYgBWoiASgCACIEQf8BcSACaiICIANqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiAmogAiABQQRqKAIAIgRB/wFxaiICaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEIaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiIEaiAEIAFBDGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiAmohAyAFQRBqIgVBsCtHDQALIANB8f8DcCEDIAJB8f8DcCECIAZBsCtqIQYgAEHQVGoiAEGvK0sNAAsgAEUNBCAAQQ9LDQEMAgsCQCAARQ0AAkACQCAAQQNxIgUNAEGACSEBIAAhBAwBCyAAQXxxIQRBACEBA0AgAiABQYAJai0AAGoiAiADaiEDIAUgAUEBaiIBRw0ACyAFQYAJaiEBCyAAQQRJDQADQCACIAEtAABqIgUgAS0AAWoiBiABLQACaiIAIAFBA2otAABqIgIgACAGIAUgA2pqamohAyABQQRqIQEgBEF8aiIEDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCyAAQX9qIQcCQCAAQQNxIgVFDQAgAEF8cSEAIAUhBCAGIQEDQCACIAEtAABqIgIgA2ohAyABQQFqIQEgBEF/aiIEDQALIAYgBWohBgsgB0EDSQ0AA0AgAiAGLQAAaiIBIAYtAAFqIgQgBi0AAmoiBSAGQQNqLQAAaiICIAUgBCABIANqampqIQMgBkEEaiEGIABBfGoiAA0ACwsgA0Hx/wNwIQMgAkHx/wNwIQILIAIgA0EQdHIhAQtBACABNgKECAsxAQF/QQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwUAQYQICzsAQQBBATYChAggABACQQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA\";\nvar hash$k = \"02ddbd17\";\nvar wasmJson$k = {\n\tname: name$k,\n\tdata: data$k,\n\thash: hash$k\n};\n\nfunction lockedCreate(mutex, binary, hashLength) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield mutex.lock();\n const wasm = yield WASMInterface(binary, hashLength);\n unlock();\n return wasm;\n });\n}\n\nconst mutex$l = new Mutex();\nlet wasmCache$l = null;\n/**\n * Calculates Adler-32 hash. The resulting 32-bit hash is stored in\n * network byte order (big-endian).\n *\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction adler32(data) {\n if (wasmCache$l === null) {\n return lockedCreate(mutex$l, wasmJson$k, 4)\n .then((wasm) => {\n wasmCache$l = wasm;\n return wasmCache$l.calculate(data);\n });\n }\n try {\n const hash = wasmCache$l.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new Adler-32 hash instance\n */\nfunction createAdler32() {\n return WASMInterface(wasmJson$k, 4).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 4,\n digestSize: 4,\n };\n return obj;\n });\n}\n\nvar name$j = \"blake2b\";\nvar data$j = \"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\";\nvar hash$j = \"656e0f66\";\nvar wasmJson$j = {\n\tname: name$j,\n\tdata: data$j,\n\thash: hash$j\n};\n\nconst mutex$k = new Mutex();\nlet wasmCache$k = null;\nfunction validateBits$4(bits) {\n if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) {\n return new Error('Invalid variant! Valid values: 8, 16, ..., 512');\n }\n return null;\n}\nfunction getInitParam$1(outputBits, keyBits) {\n // eslint-disable-next-line no-bitwise\n return outputBits | (keyBits << 16);\n}\n/**\n * Calculates BLAKE2b hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits, which has to be a number\n * divisible by 8, between 8 and 512. Defaults to 512.\n * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.\n * @returns Computed hash as a hexadecimal string\n */\nfunction blake2b(data, bits = 512, key = null) {\n if (validateBits$4(bits)) {\n return Promise.reject(validateBits$4(bits));\n }\n let keyBuffer = null;\n let initParam = bits;\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length > 64) {\n return Promise.reject(new Error('Max key length is 64 bytes'));\n }\n initParam = getInitParam$1(bits, keyBuffer.length);\n }\n const hashLength = bits / 8;\n if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) {\n return lockedCreate(mutex$k, wasmJson$j, hashLength)\n .then((wasm) => {\n wasmCache$k = wasm;\n if (initParam > 512) {\n wasmCache$k.writeMemory(keyBuffer);\n }\n return wasmCache$k.calculate(data, initParam);\n });\n }\n try {\n if (initParam > 512) {\n wasmCache$k.writeMemory(keyBuffer);\n }\n const hash = wasmCache$k.calculate(data, initParam);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new BLAKE2b hash instance\n * @param bits Number of output bits, which has to be a number\n * divisible by 8, between 8 and 512. Defaults to 512.\n * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.\n */\nfunction createBLAKE2b(bits = 512, key = null) {\n if (validateBits$4(bits)) {\n return Promise.reject(validateBits$4(bits));\n }\n let keyBuffer = null;\n let initParam = bits;\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length > 64) {\n return Promise.reject(new Error('Max key length is 64 bytes'));\n }\n initParam = getInitParam$1(bits, keyBuffer.length);\n }\n const outputSize = bits / 8;\n return WASMInterface(wasmJson$j, outputSize).then((wasm) => {\n if (initParam > 512) {\n wasm.writeMemory(keyBuffer);\n }\n wasm.init(initParam);\n const obj = {\n init: initParam > 512\n ? () => {\n wasm.writeMemory(keyBuffer);\n wasm.init(initParam);\n return obj;\n }\n : () => {\n wasm.init(initParam);\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 128,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nvar name$i = \"argon2\";\nvar data$i = \"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvkyBVgBAn9BACEBAkBBACgCiAgiAiAARg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkDyAGFNwPYCUEAIAIpA9ABIAEpA9ABhTcD4AlBACACKQPYASABKQPYAYU3A+gJQQAgAikD4AEgASkD4AGFNwPwCUEAIAIpA+gBIAEpA+gBhTcD+AlBACACKQPwASABKQPwAYU3A4AKQQAgAikD+AEgASkD+AGFNwOICkEAIAIpA4ACIAEpA4AChTcDkApBACACKQOIAiABKQOIAoU3A5gKQQAgAikDkAIgASkDkAKFNwOgCkEAIAIpA5gCIAEpA5gChTcDqApBACACKQOgAiABKQOgAoU3A7AKQQAgAikDqAIgASkDqAKFNwO4CkEAIAIpA7ACIAEpA7AChTcDwApBACACKQO4AiABKQO4AoU3A8gKQQAgAikDwAIgASkDwAKFNwPQCkEAIAIpA8gCIAEpA8gChTcD2ApBACACKQPQAiABKQPQAoU3A+AKQQAgAikD2AIgASkD2AKFNwPoCkEAIAIpA+ACIAEpA+AChTcD8ApBACACKQPoAiABKQPoAoU3A/gKQQAgAikD8AIgASkD8AKFNwOAC0EAIAIpA/gCIAEpA/gChTcDiAtBACACKQOAAyABKQOAA4U3A5ALQQAgAikDiAMgASkDiAOFNwOYC0EAIAIpA5ADIAEpA5ADhTcDoAtBACACKQOYAyABKQOYA4U3A6gLQQAgAikDoAMgASkDoAOFNwOwC0EAIAIpA6gDIAEpA6gDhTcDuAtBACACKQOwAyABKQOwA4U3A8ALQQAgAikDuAMgASkDuAOFNwPIC0EAIAIpA8ADIAEpA8ADhTcD0AtBACACKQPIAyABKQPIA4U3A9gLQQAgAikD0AMgASkD0AOFNwPgC0EAIAIpA9gDIAEpA9gDhTcD6AtBACACKQPgAyABKQPgA4U3A/ALQQAgAikD6AMgASkD6AOFNwP4C0EAIAIpA/ADIAEpA/ADhTcDgAxBACACKQP4AyABKQP4A4U3A4gMQQAgAikDgAQgASkDgASFNwOQDEEAIAIpA4gEIAEpA4gEhTcDmAxBACACKQOQBCABKQOQBIU3A6AMQQAgAikDmAQgASkDmASFNwOoDEEAIAIpA6AEIAEpA6AEhTcDsAxBACACKQOoBCABKQOoBIU3A7gMQQAgAikDsAQgASkDsASFNwPADEEAIAIpA7gEIAEpA7gEhTcDyAxBACACKQPABCABKQPABIU3A9AMQQAgAikDyAQgASkDyASFNwPYDEEAIAIpA9AEIAEpA9AEhTcD4AxBACACKQPYBCABKQPYBIU3A+gMQQAgAikD4AQgASkD4ASFNwPwDEEAIAIpA+gEIAEpA+gEhTcD+AxBACACKQPwBCABKQPwBIU3A4ANQQAgAikD+AQgASkD+ASFNwOIDUEAIAIpA4AFIAEpA4AFhTcDkA1BACACKQOIBSABKQOIBYU3A5gNQQAgAikDkAUgASkDkAWFNwOgDUEAIAIpA5gFIAEpA5gFhTcDqA1BACACKQOgBSABKQOgBYU3A7ANQQAgAikDqAUgASkDqAWFNwO4DUEAIAIpA7AFIAEpA7AFhTcDwA1BACACKQO4BSABKQO4BYU3A8gNQQAgAikDwAUgASkDwAWFNwPQDUEAIAIpA8gFIAEpA8gFhTcD2A1BACACKQPQBSABKQPQBYU3A+ANQQAgAikD2AUgASkD2AWFNwPoDUEAIAIpA+AFIAEpA+AFhTcD8A1BACACKQPoBSABKQPoBYU3A/gNQQAgAikD8AUgASkD8AWFNwOADkEAIAIpA/gFIAEpA/gFhTcDiA5BACACKQOABiABKQOABoU3A5AOQQAgAikDiAYgASkDiAaFNwOYDkEAIAIpA5AGIAEpA5AGhTcDoA5BACACKQOYBiABKQOYBoU3A6gOQQAgAikDoAYgASkDoAaFNwOwDkEAIAIpA6gGIAEpA6gGhTcDuA5BACACKQOwBiABKQOwBoU3A8AOQQAgAikDuAYgASkDuAaFNwPIDkEAIAIpA8AGIAEpA8AGhTcD0A5BACACKQPIBiABKQPIBoU3A9gOQQAgAikD0AYgASkD0AaFNwPgDkEAIAIpA9gGIAEpA9gGhTcD6A5BACACKQPgBiABKQPgBoU3A/AOQQAgAikD6AYgASkD6AaFNwP4DkEAIAIpA/AGIAEpA/AGhTcDgA9BACACKQP4BiABKQP4BoU3A4gPQQAgAikDgAcgASkDgAeFNwOQD0EAIAIpA4gHIAEpA4gHhTcDmA9BACACKQOQByABKQOQB4U3A6APQQAgAikDmAcgASkDmAeFNwOoD0EAIAIpA6AHIAEpA6AHhTcDsA9BACACKQOoByABKQOoB4U3A7gPQQAgAikDsAcgASkDsAeFNwPAD0EAIAIpA7gHIAEpA7gHhTcDyA9BACACKQPAByABKQPAB4U3A9APQQAgAikDyAcgASkDyAeFNwPYD0EAIAIpA9AHIAEpA9AHhTcD4A9BACACKQPYByABKQPYB4U3A+gPQQAgAikD4AcgASkD4AeFNwPwD0EAIAIpA+gHIAEpA+gHhTcD+A9BACACKQPwByABKQPwB4U3A4AQQQAgAikD+AcgASkD+AeFNwOIEEGQCEGYCEGgCEGoCEGwCEG4CEHACEHICEHQCEHYCEHgCEHoCEHwCEH4CEGACUGICRACQZAJQZgJQaAJQagJQbAJQbgJQcAJQcgJQdAJQdgJQeAJQegJQfAJQfgJQYAKQYgKEAJBkApBmApBoApBqApBsApBuApBwApByApB0ApB2ApB4ApB6ApB8ApB+ApBgAtBiAsQAkGQC0GYC0GgC0GoC0GwC0G4C0HAC0HIC0HQC0HYC0HgC0HoC0HwC0H4C0GADEGIDBACQZAMQZgMQaAMQagMQbAMQbgMQcAMQcgMQdAMQdgMQeAMQegMQfAMQfgMQYANQYgNEAJBkA1BmA1BoA1BqA1BsA1BuA1BwA1ByA1B0A1B2A1B4A1B6A1B8A1B+A1BgA5BiA4QAkGQDkGYDkGgDkGoDkGwDkG4DkHADkHIDkHQDkHYDkHgDkHoDkHwDkH4DkGAD0GIDxACQZAPQZgPQaAPQagPQbAPQbgPQcAPQcgPQdAPQdgPQeAPQegPQfAPQfgPQYAQQYgQEAJBkAhBmAhBkAlBmAlBkApBmApBkAtBmAtBkAxBmAxBkA1BmA1BkA5BmA5BkA9BmA8QAkGgCEGoCEGgCUGoCUGgCkGoCkGgC0GoC0GgDEGoDEGgDUGoDUGgDkGoDkGgD0GoDxACQbAIQbgIQbAJQbgJQbAKQbgKQbALQbgLQbAMQbgMQbANQbgNQbAOQbgOQbAPQbgPEAJBwAhByAhBwAlByAlBwApByApBwAtByAtBwAxByAxBwA1ByA1BwA5ByA5BwA9ByA8QAkHQCEHYCEHQCUHYCUHQCkHYCkHQC0HYC0HQDEHYDEHQDUHYDUHQDkHYDkHQD0HYDxACQeAIQegIQeAJQegJQeAKQegKQeALQegLQeAMQegMQeANQegNQeAOQegOQeAPQegPEAJB8AhB+AhB8AlB+AlB8ApB+ApB8AtB+AtB8AxB+AxB8A1B+A1B8A5B+A5B8A9B+A8QAkGACUGICUGACkGICkGAC0GIC0GADEGIDEGADUGIDUGADkGIDkGAD0GID0GAEEGIEBACAkACQCADRQ0AA0AgACAEaiIDIAIgBGoiBSkDACABIARqIgYpAwCFIARBkAhqKQMAhSADKQMAhTcDACADQQhqIgMgBUEIaikDACAGQQhqKQMAhSAEQZgIaikDAIUgAykDAIU3AwAgBEEQaiIEQYAIRw0ADAILC0EAIQQDQCAAIARqIgMgAiAEaiIFKQMAIAEgBGoiBikDAIUgBEGQCGopAwCFNwMAIANBCGogBUEIaikDACAGQQhqKQMAhSAEQZgIaikDAIU3AwAgBEEQaiIEQYAIRw0ACwsL7QcMBX8BfgR/An4CfwF+A38BfgZ/AX4DfwF+AkBBACgCgAgiAiABQQp0aiIDKAIIIAFHDQAgAygCDCEEIAMoAgAhBUEAIAMoAhQiBq03A7gQQQAgBK0iBzcDsBBBACAFIAEgBUECdG4iCGwiCUECdK03A6gQAkACQAJAAkAgBEUNAEF/IQogBUUNASAIQQNsIQsgCEECdCIErSEMIAWtIQ0gBkECRiEOIAZBf2pBAkkhD0IAIRADQEEAIBA3A5AQIA4gEFAiEXEhEiAQpyETQgAhFEEAIQEDQEEAIBQ3A6AQIAZBAUYgEiAUQgJUcXIhFSAQIBSEUCIDIA9xIRZBfyABQQFqQQNxIAhsQX9qIBEbIRcgASATciEYIAEgCGwhGSADQQF0IRpCACEbA0BBAEIANwPAEEEAIBs3A5gQIBohAQJAIBZFDQBBAEIBNwPAEEGQGEGQEEGQIEEAEANBkBhBkBhBkCBBABADQQIhAQsCQCABIAhPDQAgBCAbpyIcbCAZaiABaiEDA0AgA0EAIARBACAUUCIdGyABG2pBf2ohHgJAAkAgFQ0AQQAoAoAIIgIgHkEKdCIeaiEKDAELAkAgAUH/AHEiAg0AQQBBACkDwBBCAXw3A8AQQZAYQZAQQZAgQQAQA0GQGEGQGEGQIEEAEAMLIB5BCnQhHiACQQN0QZAYaiEKQQAoAoAIIQILIAIgA0EKdGogAiAeaiACIAopAwAiH0IgiKcgBXAgHCAYGyIeIARsIAEgAUEAIBsgHq1RIh4bIgogHRsgGWogCiALaiARGyABRSAecmsiHSAXaq0gH0L/////D4MiHyAffkIgiCAdrX5CIIh9IAyCp2pBCnRqQQEQAyADQQFqIQMgCCABQQFqIgFHDQALCyAbQgF8IhsgDVINAAsgFEIBfCIUpyEBIBRCBFINAAsgEEIBfCIQIAdSDQALCyAJQQx0QYB4aiEZQQAoAoAIIQIgBUF/aiIKRQ0CDAELQQBCAzcDoBBBACAEQX9qrTcDkBBBgHghGQsgAiAZaiEdIAhBDHQhCEEAIR4DQCAIIB5BAWoiHmxBgHhqIQRBACEBA0AgHSABaiIDIAMpAwAgAiAEIAFqaikDAIU3AwAgA0EIaiIDIAMpAwAgAiAEIAFBCHJqaikDAIU3AwAgAUEIaiEDIAFBEGohASADQfgHSQ0ACyAeIApHDQALCyACIBlqIR1BeCEBA0AgAiABaiIDQQhqIB0gAWoiBEEIaikDADcDACADQRBqIARBEGopAwA3AwAgA0EYaiAEQRhqKQMANwMAIANBIGogBEEgaikDADcDACABQSBqIgFB+AdJDQALCws=\";\nvar hash$i = \"7ab14c91\";\nvar wasmJson$i = {\n\tname: name$i,\n\tdata: data$i,\n\thash: hash$i\n};\n\nfunction encodeResult(salt, options, res) {\n const parameters = [\n `m=${options.memorySize}`,\n `t=${options.iterations}`,\n `p=${options.parallelism}`,\n ].join(',');\n return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;\n}\nconst uint32View = new DataView(new ArrayBuffer(4));\nfunction int32LE(x) {\n uint32View.setInt32(0, x, true);\n return new Uint8Array(uint32View.buffer);\n}\nfunction hashFunc(blake512, buf, len) {\n return __awaiter(this, void 0, void 0, function* () {\n if (len <= 64) {\n const blake = yield createBLAKE2b(len * 8);\n blake.update(int32LE(len));\n blake.update(buf);\n return blake.digest('binary');\n }\n const r = Math.ceil(len / 32) - 2;\n const ret = new Uint8Array(len);\n blake512.init();\n blake512.update(int32LE(len));\n blake512.update(buf);\n let vp = blake512.digest('binary');\n ret.set(vp.subarray(0, 32), 0);\n for (let i = 1; i < r; i++) {\n blake512.init();\n blake512.update(vp);\n vp = blake512.digest('binary');\n ret.set(vp.subarray(0, 32), i * 32);\n }\n const partialBytesNeeded = len - 32 * r;\n let blakeSmall;\n if (partialBytesNeeded === 64) {\n blakeSmall = blake512;\n blakeSmall.init();\n }\n else {\n blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8);\n }\n blakeSmall.update(vp);\n vp = blakeSmall.digest('binary');\n ret.set(vp.subarray(0, partialBytesNeeded), r * 32);\n return ret;\n });\n}\nfunction getHashType(type) {\n switch (type) {\n case 'd':\n return 0;\n case 'i':\n return 1;\n default:\n return 2;\n }\n}\nfunction argon2Internal(options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const { parallelism, iterations, hashLength } = options;\n const password = getUInt8Buffer(options.password);\n const salt = getUInt8Buffer(options.salt);\n const version = 0x13;\n const hashType = getHashType(options.hashType);\n const { memorySize } = options; // in KB\n const secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : '');\n const [argon2Interface, blake512] = yield Promise.all([\n WASMInterface(wasmJson$i, 1024),\n createBLAKE2b(512),\n ]);\n // last block is for storing the init vector\n argon2Interface.setMemorySize(memorySize * 1024 + 1024);\n const initVector = new Uint8Array(24);\n const initVectorView = new DataView(initVector.buffer);\n initVectorView.setInt32(0, parallelism, true);\n initVectorView.setInt32(4, hashLength, true);\n initVectorView.setInt32(8, memorySize, true);\n initVectorView.setInt32(12, iterations, true);\n initVectorView.setInt32(16, version, true);\n initVectorView.setInt32(20, hashType, true);\n argon2Interface.writeMemory(initVector, memorySize * 1024);\n blake512.init();\n blake512.update(initVector);\n blake512.update(int32LE(password.length));\n blake512.update(password);\n blake512.update(int32LE(salt.length));\n blake512.update(salt);\n blake512.update(int32LE(secret.length));\n blake512.update(secret);\n blake512.update(int32LE(0)); // associatedData length + associatedData\n const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane\n const lanes = segments * 4;\n const param = new Uint8Array(72);\n const H0 = blake512.digest('binary');\n param.set(H0);\n for (let lane = 0; lane < parallelism; lane++) {\n param.set(int32LE(0), 64);\n param.set(int32LE(lane), 68);\n let position = lane * lanes;\n let chunk = yield hashFunc(blake512, param, 1024);\n argon2Interface.writeMemory(chunk, position * 1024);\n position += 1;\n param.set(int32LE(1), 64);\n chunk = yield hashFunc(blake512, param, 1024);\n argon2Interface.writeMemory(chunk, position * 1024);\n }\n const C = new Uint8Array(1024);\n writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize));\n const res = yield hashFunc(blake512, C, hashLength);\n if (options.outputType === 'hex') {\n const digestChars = new Uint8Array(hashLength * 2);\n return getDigestHex(digestChars, res, hashLength);\n }\n if (options.outputType === 'encoded') {\n return encodeResult(salt, options, res);\n }\n // return binary format\n return res;\n });\n}\nconst validateOptions$3 = (options) => {\n var _a;\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (!options.password) {\n throw new Error('Password must be specified');\n }\n options.password = getUInt8Buffer(options.password);\n if (options.password.length < 1) {\n throw new Error('Password must be specified');\n }\n if (!options.salt) {\n throw new Error('Salt must be specified');\n }\n options.salt = getUInt8Buffer(options.salt);\n if (options.salt.length < 8) {\n throw new Error('Salt should be at least 8 bytes long');\n }\n options.secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : '');\n if (!Number.isInteger(options.iterations) || options.iterations < 1) {\n throw new Error('Iterations should be a positive number');\n }\n if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {\n throw new Error('Parallelism should be a positive number');\n }\n if (!Number.isInteger(options.hashLength) || options.hashLength < 4) {\n throw new Error('Hash length should be at least 4 bytes.');\n }\n if (!Number.isInteger(options.memorySize)) {\n throw new Error('Memory size should be specified.');\n }\n if (options.memorySize < 8 * options.parallelism) {\n throw new Error('Memory size should be at least 8 * parallelism.');\n }\n if (options.outputType === undefined) {\n options.outputType = 'hex';\n }\n if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {\n throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);\n }\n};\n/**\n * Calculates hash using the argon2i password-hashing function\n * @returns Computed hash\n */\nfunction argon2i(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$3(options);\n return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'i' }));\n });\n}\n/**\n * Calculates hash using the argon2id password-hashing function\n * @returns Computed hash\n */\nfunction argon2id(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$3(options);\n return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'id' }));\n });\n}\n/**\n * Calculates hash using the argon2d password-hashing function\n * @returns Computed hash\n */\nfunction argon2d(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$3(options);\n return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'd' }));\n });\n}\nconst getHashParameters = (password, encoded, secret) => {\n const regex = /^\\$argon2(id|i|d)\\$v=([0-9]+)\\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\\$([A-Za-z0-9+/]+)\\$([A-Za-z0-9+/]+)$/;\n const match = encoded.match(regex);\n if (!match) {\n throw new Error('Invalid hash');\n }\n const [, hashType, version, parameters, salt, hash] = match;\n if (version !== '19') {\n throw new Error(`Unsupported version: ${version}`);\n }\n const parsedParameters = {};\n const paramMap = { m: 'memorySize', p: 'parallelism', t: 'iterations' };\n parameters.split(',').forEach((x) => {\n const [n, v] = x.split('=');\n parsedParameters[paramMap[n]] = parseInt(v, 10);\n });\n return Object.assign(Object.assign({}, parsedParameters), { password,\n secret, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: 'encoded' });\n};\nconst validateVerifyOptions$1 = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (options.hash === undefined || typeof options.hash !== 'string') {\n throw new Error('Hash should be specified');\n }\n};\n/**\n * Verifies password using the argon2 password-hashing function\n * @returns True if the encoded hash matches the password\n */\nfunction argon2Verify(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateVerifyOptions$1(options);\n const params = getHashParameters(options.password, options.hash, options.secret);\n validateOptions$3(params);\n const hashStart = options.hash.lastIndexOf('$') + 1;\n const result = yield argon2Internal(params);\n return result.substring(hashStart) === options.hash.substring(hashStart);\n });\n}\n\nvar name$h = \"blake2s\";\nvar data$h = \"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\";\nvar hash$h = \"c5c746d4\";\nvar wasmJson$h = {\n\tname: name$h,\n\tdata: data$h,\n\thash: hash$h\n};\n\nconst mutex$j = new Mutex();\nlet wasmCache$j = null;\nfunction validateBits$3(bits) {\n if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) {\n return new Error('Invalid variant! Valid values: 8, 16, ..., 256');\n }\n return null;\n}\nfunction getInitParam(outputBits, keyBits) {\n // eslint-disable-next-line no-bitwise\n return outputBits | (keyBits << 16);\n}\n/**\n * Calculates BLAKE2s hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits, which has to be a number\n * divisible by 8, between 8 and 256. Defaults to 256.\n * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.\n * @returns Computed hash as a hexadecimal string\n */\nfunction blake2s(data, bits = 256, key = null) {\n if (validateBits$3(bits)) {\n return Promise.reject(validateBits$3(bits));\n }\n let keyBuffer = null;\n let initParam = bits;\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length > 32) {\n return Promise.reject(new Error('Max key length is 32 bytes'));\n }\n initParam = getInitParam(bits, keyBuffer.length);\n }\n const hashLength = bits / 8;\n if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) {\n return lockedCreate(mutex$j, wasmJson$h, hashLength)\n .then((wasm) => {\n wasmCache$j = wasm;\n if (initParam > 512) {\n wasmCache$j.writeMemory(keyBuffer);\n }\n return wasmCache$j.calculate(data, initParam);\n });\n }\n try {\n if (initParam > 512) {\n wasmCache$j.writeMemory(keyBuffer);\n }\n const hash = wasmCache$j.calculate(data, initParam);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new BLAKE2s hash instance\n * @param bits Number of output bits, which has to be a number\n * divisible by 8, between 8 and 256. Defaults to 256.\n * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.\n */\nfunction createBLAKE2s(bits = 256, key = null) {\n if (validateBits$3(bits)) {\n return Promise.reject(validateBits$3(bits));\n }\n let keyBuffer = null;\n let initParam = bits;\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length > 32) {\n return Promise.reject(new Error('Max key length is 32 bytes'));\n }\n initParam = getInitParam(bits, keyBuffer.length);\n }\n const outputSize = bits / 8;\n return WASMInterface(wasmJson$h, outputSize).then((wasm) => {\n if (initParam > 512) {\n wasm.writeMemory(keyBuffer);\n }\n wasm.init(initParam);\n const obj = {\n init: initParam > 512\n ? () => {\n wasm.writeMemory(keyBuffer);\n wasm.init(initParam);\n return obj;\n }\n : () => {\n wasm.init(initParam);\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nvar name$g = \"blake3\";\nvar data$g = \"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AAsLIAEpAyAhByABKQMoIQwgASkDMCENIAEpAzghDkEAKQPAiQEQBUEAQQAtAJCKASICQQFqOgCQigEgAkEFdCICQamKAWogCjcDACACQaGKAWogBDcDACACQZmKAWogBTcDACACQZGKAWogBjcDAEEAKQPAiQEgE0IBiHwQBUEAQQAtAJCKASICQQFqOgCQigEgAkEFdCICQamKAWogDjcDACACQaGKAWogDTcDACACQZmKAWogDDcDACACQZGKAWogBzcDAAtBAEEAKQPAiQEgE3wiBDcDwIkBIAMgEmohAyAAIBJrIgBBgAhLDQALIABFDQELQaCJASADIAAQBEEAKQPAiQEQBQsgAUHQAmokAAuGBwIJfwF+IwBBwABrIgMkAAJAAkAgAC0AaCIERQ0AAkBBwAAgBGsiBSACIAUgAkkbIgZFDQAgBkEDcSEHQQAhBQJAIAZBBEkNACAAIARqIQggBkF8cSEJQQAhBQNAIAggBWoiCkEoaiABIAVqIgstAAA6AAAgCkEpaiALQQFqLQAAOgAAIApBKmogC0ECai0AADoAACAKQStqIAtBA2otAAA6AAAgCSAFQQRqIgVHDQALCwJAIAdFDQAgASAFaiEKIAUgBGogAGpBKGohBQNAIAUgCi0AADoAACAKQQFqIQogBUEBaiEFIAdBf2oiBw0ACwsgAC0AaCEECyAAIAQgBmoiBzoAaCABIAZqIQECQCACIAZrIgINAEEAIQIMAgsgAyAAIABBKGpBwAAgACkDICAALQBqIABB6QBqIgUtAAAiCkVyEAIgACADKQMgIAMpAwCFNwMAIAAgAykDKCADKQMIhTcDCCAAIAMpAzAgAykDEIU3AxAgACADKQM4IAMpAxiFNwMYIABBADoAaCAFIApBAWo6AAAgAEHgAGpCADcDACAAQdgAakIANwMAIABB0ABqQgA3AwAgAEHIAGpCADcDACAAQcAAakIANwMAIABBOGpCADcDACAAQTBqQgA3AwAgAEIANwMoC0EAIQcgAkHBAEkNACAAQekAaiIKLQAAIQUgAC0AaiELIAApAyAhDANAIAMgACABQcAAIAwgCyAFQf8BcUVyQf8BcRACIAAgAykDICADKQMAhTcDACAAIAMpAyggAykDCIU3AwggACADKQMwIAMpAxCFNwMQIAAgAykDOCADKQMYhTcDGCAK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DkUNACAFIAdBBnRqIQEgBUGIAWogB0ECdGohAANAIAAgATYCACABQcAAaiEBIABBBGohACAOQX9qIg4NAAsLIAhBAmohAAsgBUGIAWogBkEBQgBBACADQQRyQQBBACAEEAEgACAJTw0AIAQgBkEFdGoiASAFIAZBBnRqIgApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggBkEBaiEGCyAFQeACaiQAIAYLrRAIAn8EfgF/AX4EfwR+BH8EfiMAQfABayIBJAACQCAARQ0AAkBBAC0AkIoBIgINACABQTBqQQApA9CJATcDACABQThqQQApA9iJATcDACABQQApA6CJASIDNwMAIAFBACkDqIkBIgQ3AwggAUEAKQOwiQEiBTcDECABQQApA7iJASIGNwMYIAFBACkDyIkBNwMoQQAtAIqKASECQQAtAImKASEHQQApA8CJASEIQQAtAIiKASEJIAFBwABqQQApA+CJATcDACABQcgAakEAKQPoiQE3AwAgAUHQAGpBACkD8IkBNwMAIAFB2ABqQQApA/iJATcDACABQeAAakEAKQOAigE3AwAgASAJOgBoIAEgCDcDICABIAIgB0VyIgJBAnI6AGkgAUEoaiEKQgAhCEGACSELIAJBCnJB/wFxIQwDQCABQbABaiABIAogCUH/AXEgCCAMEAIgASABKQPQASINIAEpA7ABhTcDcCABIAEpA9gBIg4gASkDuAGFNwN4IAEgASkD4AEiDyABKQPAAYU3A4ABIAEgASkD6AEiECAGhTcDqAEgASAPIAWFNwOgASABIA4gBIU3A5gBIAEgDSADhTcDkAEgASAQIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQAMAgsLAkACQAJAQQAtAImKASIHQQZ0QQBBAC0AiIoBIhFrRg0AIAEgEToAaCABQQApA4CKATcDYCABQQApA/iJATcDWCABQQApA/CJATcDUCABQQApA+iJATcDSCABQQApA+CJATcDQCABQQApA9iJATcDOCABQQApA9CJATcDMCABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIgM3AxggAUEAKQOwiQEiBDcDECABQQApA6iJASIFNwMIIAFBACkDoIkBIgY3AwAgAUEALQCKigEiEyAHRXJBAnIiCzoAaSATQQRyIRNBACkDmIkBIQ1BACkDkIkBIQ5BACkDiIkBIQ9BACkDgIkBIRAMAQtBwAAhESABQcAAOgBoQgAhCCABQgA3AyAgAUEAKQOYiQEiDTcDGCABQQApA5CJASIONwMQIAFBACkDiIkBIg83AwggAUEAKQOAiQEiEDcDACABQQAtAIqKAUEEciITOgBpIAEgAkF+aiICQQV0IgdByYoBaikDADcDYCABIAdBwYoBaikDADcDWCABIAdBuYoBaikDADcDUCABIAdBsYoBaikDADcDSCABIAdBqYoBaikDADcDQCABIAdBoYoBaikDADcDOCABIAdBmYoBaikDADcDMCABIAdBkYoBaikDADcDKCATIQsgECEGIA8hBSAOIQQgDSEDIAJFDQELIAJBf2oiB0EFdCIUQZGKAWopAwAhFSAUQZmKAWopAwAhFiAUQaGKAWopAwAhFyAUQamKAWopAwAhGCABIAM3A4gBIAEgBDcDgAEgASAFNwN4IAEgBjcDcCABQbABaiABQfAAaiABQShqIhQgESAIIAtB/wFxEAIgASATOgBpIAFBwAA6AGggASAYNwNAIAEgFzcDOCABIBY3AzAgASAVNwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggB0UNACACQQV0QemJAWohAiATQf8BcSERA0AgAkFoaikDACEIIAJBcGopAwAhAyACQXhqKQMAIQQgAikDACEFIAEgDTcDiAEgASAONwOAASABIA83A3ggASAQNwNwIAFBsAFqIAFB8ABqIBRBwABCACAREAIgASATOgBpIAFBwAA6AGggASAFNwNAIAEgBDcDOCABIAM3AzAgASAINwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAkFgaiECIAdBf2oiBw0ACwsgAUEoaiEJQgAhCEGACSELIBNBCHJB/wFxIQoDQCABQbABaiABIAlBwAAgCCAKEAIgASABKQPQASIDIAEpA7ABhTcDcCABIAEpA9gBIgQgASkDuAGFNwN4IAEgASkD4AEiBSABKQPAAYU3A4ABIAEgDSABKQPoASIGhTcDqAEgASAOIAWFNwOgASABIA8gBIU3A5gBIAEgECADhTcDkAEgASAGIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABADCwYAIAAQBwsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAMgAhAHCwsLAQBBgAgLBHgHAAA=\";\nvar hash$g = \"540e8b8e\";\nvar wasmJson$g = {\n\tname: name$g,\n\tdata: data$g,\n\thash: hash$g\n};\n\nconst mutex$i = new Mutex();\nlet wasmCache$i = null;\nfunction validateBits$2(bits) {\n if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) {\n return new Error('Invalid variant! Valid values: 8, 16, ...');\n }\n return null;\n}\n/**\n * Calculates BLAKE3 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits, which has to be a number\n * divisible by 8. Defaults to 256.\n * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.\n * @returns Computed hash as a hexadecimal string\n */\nfunction blake3(data, bits = 256, key = null) {\n if (validateBits$2(bits)) {\n return Promise.reject(validateBits$2(bits));\n }\n let keyBuffer = null;\n let initParam = 0; // key is empty by default\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length !== 32) {\n return Promise.reject(new Error('Key length must be exactly 32 bytes'));\n }\n initParam = 32;\n }\n const hashLength = bits / 8;\n const digestParam = hashLength;\n if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) {\n return lockedCreate(mutex$i, wasmJson$g, hashLength)\n .then((wasm) => {\n wasmCache$i = wasm;\n if (initParam === 32) {\n wasmCache$i.writeMemory(keyBuffer);\n }\n return wasmCache$i.calculate(data, initParam, digestParam);\n });\n }\n try {\n if (initParam === 32) {\n wasmCache$i.writeMemory(keyBuffer);\n }\n const hash = wasmCache$i.calculate(data, initParam, digestParam);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new BLAKE3 hash instance\n * @param bits Number of output bits, which has to be a number\n * divisible by 8. Defaults to 256.\n * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.\n */\nfunction createBLAKE3(bits = 256, key = null) {\n if (validateBits$2(bits)) {\n return Promise.reject(validateBits$2(bits));\n }\n let keyBuffer = null;\n let initParam = 0; // key is empty by default\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length !== 32) {\n return Promise.reject(new Error('Key length must be exactly 32 bytes'));\n }\n initParam = 32;\n }\n const outputSize = bits / 8;\n const digestParam = outputSize;\n return WASMInterface(wasmJson$g, outputSize).then((wasm) => {\n if (initParam === 32) {\n wasm.writeMemory(keyBuffer);\n }\n wasm.init(initParam);\n const obj = {\n init: initParam === 32\n ? () => {\n wasm.writeMemory(keyBuffer);\n wasm.init(initParam);\n return obj;\n }\n : () => {\n wasm.init(initParam);\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType, digestParam),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nvar name$f = \"crc32\";\nvar data$f = \"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQZDJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAgtIYXNoX1VwZGF0ZQADCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKkggHBQBBgAkLwwMBA39BgIkBIQFBACECA0AgAUEAQQBBAEEAQQBBAEEAQQAgAkEBcWsgAHEgAkEBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnM2AgAgAUEEaiEBIAJBAWoiAkGAAkcNAAtBACEAA0AgAEGEkQFqIABBhIkBaigCACICQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEmQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYShAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhKkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEsQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYS5AWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhMEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzNgIAIABBBGoiAEH8B0cNAAsLJwACQEEAKAKAyQEgAEYNACAAEAFBACAANgKAyQELQQBBADYChMkBC4gDAQN/QQAoAoTJAUF/cyEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAJBBGooAgAiA0EOdkH8B3FBgJEBaigCACADQRZ2QfwHcUGAiQFqKAIAcyADQQZ2QfwHcUGAmQFqKAIAcyADQf8BcUECdEGAoQFqKAIAcyACKAIAIAFzIgFBFnZB/AdxQYCpAWooAgBzIAFBDnZB/AdxQYCxAWooAgBzIAFBBnZB/AdxQYC5AWooAgBzIAFB/wFxQQJ0QYDBAWooAgBzIQEgAkEIaiECIABBeGoiAEEHSw0ACwsCQCAARQ0AAkACQCAAQQFxDQAgACEDDAELIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiEDCyAAQQFGDQADQCABQf8BcSACLQAAc0ECdEGAiQFqKAIAIAFBCHZzIgFB/wFxIAJBAWotAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQJqIQIgA0F+aiIDDQALC0EAIAFBf3M2AoTJAQsyAQF/QQBBACgChMkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgKACQsGAEGEyQELWQACQEEAKAKAyQEgAUYNACABEAFBACABNgKAyQELQQBBADYChMkBIAAQA0EAQQAoAoTJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCgAkLCwsBAEGACAsEBAAAAA==\";\nvar hash$f = \"d2eba587\";\nvar wasmJson$f = {\n\tname: name$f,\n\tdata: data$f,\n\thash: hash$f\n};\n\nconst mutex$h = new Mutex();\nlet wasmCache$h = null;\n/**\n * Calculates CRC-32 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction crc32(data) {\n if (wasmCache$h === null) {\n return lockedCreate(mutex$h, wasmJson$f, 4)\n .then((wasm) => {\n wasmCache$h = wasm;\n return wasmCache$h.calculate(data, 0xEDB88320);\n });\n }\n try {\n const hash = wasmCache$h.calculate(data, 0xEDB88320);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new CRC-32 hash instance\n */\nfunction createCRC32() {\n return WASMInterface(wasmJson$f, 4).then((wasm) => {\n wasm.init(0xEDB88320);\n const obj = {\n init: () => { wasm.init(0xEDB88320); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 4,\n digestSize: 4,\n };\n return obj;\n });\n}\n\nconst mutex$g = new Mutex();\nlet wasmCache$g = null;\n/**\n * Calculates CRC-32C hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction crc32c(data) {\n if (wasmCache$g === null) {\n return lockedCreate(mutex$g, wasmJson$f, 4)\n .then((wasm) => {\n wasmCache$g = wasm;\n return wasmCache$g.calculate(data, 0x82F63B78);\n });\n }\n try {\n const hash = wasmCache$g.calculate(data, 0x82F63B78);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new CRC-32C hash instance\n */\nfunction createCRC32C() {\n return WASMInterface(wasmJson$f, 4).then((wasm) => {\n wasm.init(0x82F63B78);\n const obj = {\n init: () => { wasm.init(0x82F63B78); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 4,\n digestSize: 4,\n };\n return obj;\n });\n}\n\nvar name$e = \"md4\";\nvar data$e = \"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\";\nvar hash$e = \"74909c24\";\nvar wasmJson$e = {\n\tname: name$e,\n\tdata: data$e,\n\thash: hash$e\n};\n\nconst mutex$f = new Mutex();\nlet wasmCache$f = null;\n/**\n * Calculates MD4 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction md4(data) {\n if (wasmCache$f === null) {\n return lockedCreate(mutex$f, wasmJson$e, 16)\n .then((wasm) => {\n wasmCache$f = wasm;\n return wasmCache$f.calculate(data);\n });\n }\n try {\n const hash = wasmCache$f.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new MD4 hash instance\n */\nfunction createMD4() {\n return WASMInterface(wasmJson$e, 16).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 16,\n };\n return obj;\n });\n}\n\nvar name$d = \"md5\";\nvar data$d = \"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\";\nvar hash$d = \"42fa4d29\";\nvar wasmJson$d = {\n\tname: name$d,\n\tdata: data$d,\n\thash: hash$d\n};\n\nconst mutex$e = new Mutex();\nlet wasmCache$e = null;\n/**\n * Calculates MD5 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction md5(data) {\n if (wasmCache$e === null) {\n return lockedCreate(mutex$e, wasmJson$d, 16)\n .then((wasm) => {\n wasmCache$e = wasm;\n return wasmCache$e.calculate(data);\n });\n }\n try {\n const hash = wasmCache$e.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new MD5 hash instance\n */\nfunction createMD5() {\n return WASMInterface(wasmJson$d, 16).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 16,\n };\n return obj;\n });\n}\n\nvar name$c = \"sha1\";\nvar data$c = \"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\";\nvar hash$c = \"6b530c24\";\nvar wasmJson$c = {\n\tname: name$c,\n\tdata: data$c,\n\thash: hash$c\n};\n\nconst mutex$d = new Mutex();\nlet wasmCache$d = null;\n/**\n * Calculates SHA-1 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha1(data) {\n if (wasmCache$d === null) {\n return lockedCreate(mutex$d, wasmJson$c, 20)\n .then((wasm) => {\n wasmCache$d = wasm;\n return wasmCache$d.calculate(data);\n });\n }\n try {\n const hash = wasmCache$d.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-1 hash instance\n */\nfunction createSHA1() {\n return WASMInterface(wasmJson$c, 20).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 20,\n };\n return obj;\n });\n}\n\nvar name$b = \"sha3\";\nvar data$b = \"AGFzbQEAAAABFARgAAF/YAF/AGACf38AYAN/f38AAwgHAAEBAgEAAwUEAQECAgYOAn8BQZCNBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKqBwHBQBBgAoL1wMAQQBCADcDgI0BQQBCADcD+IwBQQBCADcD8IwBQQBCADcD6IwBQQBCADcD4IwBQQBCADcD2IwBQQBCADcD0IwBQQBCADcDyIwBQQBCADcDwIwBQQBCADcDuIwBQQBCADcDsIwBQQBCADcDqIwBQQBCADcDoIwBQQBCADcDmIwBQQBCADcDkIwBQQBCADcDiIwBQQBCADcDgIwBQQBCADcD+IsBQQBCADcD8IsBQQBCADcD6IsBQQBCADcD4IsBQQBCADcD2IsBQQBCADcD0IsBQQBCADcDyIsBQQBCADcDwIsBQQBCADcDuIsBQQBCADcDsIsBQQBCADcDqIsBQQBCADcDoIsBQQBCADcDmIsBQQBCADcDkIsBQQBCADcDiIsBQQBCADcDgIsBQQBCADcD+IoBQQBCADcD8IoBQQBCADcD6IoBQQBCADcD4IoBQQBCADcD2IoBQQBCADcD0IoBQQBCADcDyIoBQQBCADcDwIoBQQBCADcDuIoBQQBCADcDsIoBQQBCADcDqIoBQQBCADcDoIoBQQBCADcDmIoBQQBCADcDkIoBQQBCADcDiIoBQQBCADcDgIoBQQBBwAwgAEEBdGtBA3Y2AoyNAUEAQQA2AoiNAQuMAwEIfwJAQQAoAoiNASIBQQBIDQBBACABIABqQQAoAoyNASICcDYCiI0BAkACQCABDQBBgAohAwwBCwJAIAIgAWsiBCAAIAQgAEkbIgNFDQAgA0EDcSEFQQAhBgJAIANBBEkNACABQYCKAWohByADQXxxIQhBACEGA0AgByAGaiIDQcgBaiAGQYAKai0AADoAACADQckBaiAGQYEKai0AADoAACADQcoBaiAGQYIKai0AADoAACADQcsBaiAGQYMKai0AADoAACAIIAZBBGoiBkcNAAsLIAVFDQAgAUHIiwFqIQMDQCADIAZqIAZBgApqLQAAOgAAIAZBAWohBiAFQX9qIgUNAAsLIAQgAEsNAUHIiwEgAhADIAAgBGshACAEQYAKaiEDCwJAIAAgAkkNAANAIAMgAhADIAMgAmohAyAAIAJrIgAgAk8NAAsLIABFDQBBACECQcgBIQYDQCAGQYCKAWogAyAGakG4fmotAAA6AAAgBkEBaiEGIAAgAkEBaiICQf8BcUsNAAsLC+QLAS1+IAApA0AhAkEAKQPAigEhAyAAKQM4IQRBACkDuIoBIQUgACkDMCEGQQApA7CKASEHIAApAyghCEEAKQOoigEhCSAAKQMgIQpBACkDoIoBIQsgACkDGCEMQQApA5iKASENIAApAxAhDkEAKQOQigEhDyAAKQMIIRBBACkDiIoBIREgACkDACESQQApA4CKASETQQApA8iKASEUAkACQCABQcgASw0AQQApA9CKASEVQQApA+CKASEWQQApA9iKASEXDAELQQApA+CKASAAKQNghSEWQQApA9iKASAAKQNYhSEXQQApA9CKASAAKQNQhSEVIBQgACkDSIUhFCABQekASQ0AQQBBACkD6IoBIAApA2iFNwPoigFBAEEAKQPwigEgACkDcIU3A/CKAUEAQQApA/iKASAAKQN4hTcD+IoBQQBBACkDgIsBIAApA4ABhTcDgIsBIAFBiQFJDQBBAEEAKQOIiwEgACkDiAGFNwOIiwELIAMgAoUhGCAFIASFIRkgByAGhSEHIAkgCIUhCCALIAqFIRogDSAMhSEJIA8gDoUhCiARIBCFIQsgEyAShSEMQQApA7iLASESQQApA5CLASETQQApA+iKASEbQQApA6CLASEcQQApA/iKASENQQApA7CLASEdQQApA4iLASEOQQApA8CLASEPQQApA5iLASEeQQApA/CKASEQQQApA6iLASERQQApA4CLASEfQcB+IQADQCAaIAcgC4UgF4UgH4UgEYVCAYmFIBSFIBCFIB6FIA+FIQIgDCAZIAqFIBaFIA6FIB2FQgGJhSAIhSAVhSANhSAchSIDIAeFISAgCSAIIAyFIBWFIA2FIByFQgGJhSAYhSAbhSAThSAShSIEIA+FISEgGCAKIBQgGoUgEIUgHoUgD4VCAYmFIBmFIBaFIA6FIB2FIgWFQjeJIiIgCyAYIAmFIBuFIBOFIBKFQgGJhSAHhSAXhSAfhSARhSIGIAqFQj6JIiNCf4WDIAMgEYVCAokiJIUhDyANIAKFQimJIiUgBCAQhUIniSImQn+FgyAihSERIBIgBYVCOIkiEiAGIA6FQg+JIidCf4WDIAMgF4VCCokiKIUhDiAEIBqFQhuJIikgKCAIIAKFQiSJIipCf4WDhSENIAYgGYVCBokiKyADIAuFQgGJIixCf4WDIBwgAoVCEokiLYUhECArIAQgHoVCCIkiLiAbIAWFQhmJIhtCf4WDhSEXIAYgHYVCPYkiGSAEIBSFQhSJIgQgCSAFhUIciSIIQn+Fg4UhFCAIIBlCf4WDIAMgH4VCLYkiA4UhGCAZIANCf4WDIBUgAoVCA4kiCYUhGSAEIAMgCUJ/hYOFIQcgCSAEQn+FgyAIhSEIIAwgAoUiAiAhQg6JIgNCf4WDIBMgBYVCFYkiBIUhCSAGIBaFQiuJIgUgAyAEQn+Fg4UhCiAEIAVCf4WDICBCLIkiBIUhCyAAQdAJaikDACAFIARCf4WDhSAChSEMICcgKEJ/hYMgKoUiBSEfIAMgBCACQn+Fg4UiAiEaICogKUJ/hYMgEoUiAyEeIC0gLkJ/hYMgG4UiBCEWICYgJCAlQn+Fg4UiBiEdIBsgK0J/hYMgLIUiKCEVICMgJiAiQn+Fg4UiIiEcIC4gLCAtQn+Fg4UiJiEbICcgKSASQn+Fg4UiJyETICMgJEJ/hYMgJYUiIyESIABBCGoiAA0AC0EAIBE3A6iLAUEAIAU3A4CLAUEAIBc3A9iKAUEAIAc3A7CKAUEAIAs3A4iKAUEAIA83A8CLAUEAIAM3A5iLAUEAIBA3A/CKAUEAIBQ3A8iKAUEAIAI3A6CKAUEAIAY3A7CLAUEAIA43A4iLAUEAIAQ3A+CKAUEAIBk3A7iKAUEAIAo3A5CKAUEAICI3A6CLAUEAIA03A/iKAUEAICg3A9CKAUEAIAg3A6iKAUEAIAw3A4CKAUEAICM3A7iLAUEAICc3A5CLAUEAICY3A+iKAUEAIBg3A8CKAUEAIAk3A5iKAQv4AgEFf0HkAEEAKAKMjQEiAUEBdmshAgJAQQAoAoiNASIDQQBIDQAgASEEAkAgASADRg0AIANByIsBaiEFQQAhAwNAIAUgA2pBADoAACADQQFqIgMgAUEAKAKIjQEiBGtJDQALCyAEQciLAWoiAyADLQAAIAByOgAAIAFBx4sBaiIDIAMtAABBgAFyOgAAQciLASABEANBAEGAgICAeDYCiI0BCwJAIAJBBEkNACACQQJ2IgNBA3EhBUEAIQQCQCADQX9qQQNJDQAgA0H8////A3EhAUEAIQNBACEEA0AgA0GACmogA0GAigFqKAIANgIAIANBhApqIANBhIoBaigCADYCACADQYgKaiADQYiKAWooAgA2AgAgA0GMCmogA0GMigFqKAIANgIAIANBEGohAyABIARBBGoiBEcNAAsLIAVFDQAgBUECdCEBIARBAnQhAwNAIANBgApqIANBgIoBaigCADYCACADQQRqIQMgAUF8aiIBDQALCwsGAEGAigEL0QYBA39BAEIANwOAjQFBAEIANwP4jAFBAEIANwPwjAFBAEIANwPojAFBAEIANwPgjAFBAEIANwPYjAFBAEIANwPQjAFBAEIANwPIjAFBAEIANwPAjAFBAEIANwO4jAFBAEIANwOwjAFBAEIANwOojAFBAEIANwOgjAFBAEIANwOYjAFBAEIANwOQjAFBAEIANwOIjAFBAEIANwOAjAFBAEIANwP4iwFBAEIANwPwiwFBAEIANwPoiwFBAEIANwPgiwFBAEIANwPYiwFBAEIANwPQiwFBAEIANwPIiwFBAEIANwPAiwFBAEIANwO4iwFBAEIANwOwiwFBAEIANwOoiwFBAEIANwOgiwFBAEIANwOYiwFBAEIANwOQiwFBAEIANwOIiwFBAEIANwOAiwFBAEIANwP4igFBAEIANwPwigFBAEIANwPoigFBAEIANwPgigFBAEIANwPYigFBAEIANwPQigFBAEIANwPIigFBAEIANwPAigFBAEIANwO4igFBAEIANwOwigFBAEIANwOoigFBAEIANwOgigFBAEIANwOYigFBAEIANwOQigFBAEIANwOIigFBAEIANwOAigFBAEHADCABQQF0a0EDdjYCjI0BQQBBADYCiI0BIAAQAkHkAEEAKAKMjQEiAEEBdmshAwJAQQAoAoiNASIBQQBIDQAgACEEAkAgACABRg0AIAFByIsBaiEFQQAhAQNAIAUgAWpBADoAACABQQFqIgEgAEEAKAKIjQEiBGtJDQALCyAEQciLAWoiASABLQAAIAJyOgAAIABBx4sBaiIBIAEtAABBgAFyOgAAQciLASAAEANBAEGAgICAeDYCiI0BCwJAIANBBEkNACADQQJ2IgFBA3EhBUEAIQQCQCABQX9qQQNJDQAgAUH8////A3EhAEEAIQFBACEEA0AgAUGACmogAUGAigFqKAIANgIAIAFBhApqIAFBhIoBaigCADYCACABQYgKaiABQYiKAWooAgA2AgAgAUGMCmogAUGMigFqKAIANgIAIAFBEGohASAAIARBBGoiBEcNAAsLIAVFDQAgBUECdCEAIARBAnQhAQNAIAFBgApqIAFBgIoBaigCADYCACABQQRqIQEgAEF8aiIADQALCwsL2AEBAEGACAvQAZABAAAAAAAAAAAAAAAAAAABAAAAAAAAAIKAAAAAAAAAioAAAAAAAIAAgACAAAAAgIuAAAAAAAAAAQAAgAAAAACBgACAAAAAgAmAAAAAAACAigAAAAAAAACIAAAAAAAAAAmAAIAAAAAACgAAgAAAAACLgACAAAAAAIsAAAAAAACAiYAAAAAAAIADgAAAAAAAgAKAAAAAAACAgAAAAAAAAIAKgAAAAAAAAAoAAIAAAACAgYAAgAAAAICAgAAAAAAAgAEAAIAAAAAACIAAgAAAAIA=\";\nvar hash$b = \"f2f6f5b2\";\nvar wasmJson$b = {\n\tname: name$b,\n\tdata: data$b,\n\thash: hash$b\n};\n\nconst mutex$c = new Mutex();\nlet wasmCache$c = null;\nfunction validateBits$1(bits) {\n if (![224, 256, 384, 512].includes(bits)) {\n return new Error('Invalid variant! Valid values: 224, 256, 384, 512');\n }\n return null;\n}\n/**\n * Calculates SHA-3 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha3(data, bits = 512) {\n if (validateBits$1(bits)) {\n return Promise.reject(validateBits$1(bits));\n }\n const hashLength = bits / 8;\n if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) {\n return lockedCreate(mutex$c, wasmJson$b, hashLength)\n .then((wasm) => {\n wasmCache$c = wasm;\n return wasmCache$c.calculate(data, bits, 0x06);\n });\n }\n try {\n const hash = wasmCache$c.calculate(data, bits, 0x06);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-3 hash instance\n * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n */\nfunction createSHA3(bits = 512) {\n if (validateBits$1(bits)) {\n return Promise.reject(validateBits$1(bits));\n }\n const outputSize = bits / 8;\n return WASMInterface(wasmJson$b, outputSize).then((wasm) => {\n wasm.init(bits);\n const obj = {\n init: () => { wasm.init(bits); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType, 0x06),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 200 - 2 * outputSize,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nconst mutex$b = new Mutex();\nlet wasmCache$b = null;\nfunction validateBits(bits) {\n if (![224, 256, 384, 512].includes(bits)) {\n return new Error('Invalid variant! Valid values: 224, 256, 384, 512');\n }\n return null;\n}\n/**\n * Calculates Keccak hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n * @returns Computed hash as a hexadecimal string\n */\nfunction keccak(data, bits = 512) {\n if (validateBits(bits)) {\n return Promise.reject(validateBits(bits));\n }\n const hashLength = bits / 8;\n if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) {\n return lockedCreate(mutex$b, wasmJson$b, hashLength)\n .then((wasm) => {\n wasmCache$b = wasm;\n return wasmCache$b.calculate(data, bits, 0x01);\n });\n }\n try {\n const hash = wasmCache$b.calculate(data, bits, 0x01);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new Keccak hash instance\n * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n */\nfunction createKeccak(bits = 512) {\n if (validateBits(bits)) {\n return Promise.reject(validateBits(bits));\n }\n const outputSize = bits / 8;\n return WASMInterface(wasmJson$b, outputSize).then((wasm) => {\n wasm.init(bits);\n const obj = {\n init: () => { wasm.init(bits); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType, 0x01),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 200 - 2 * outputSize,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nvar name$a = \"sha256\";\nvar data$a = \"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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\";\nvar hash$a = \"64f06674\";\nvar wasmJson$a = {\n\tname: name$a,\n\tdata: data$a,\n\thash: hash$a\n};\n\nconst mutex$a = new Mutex();\nlet wasmCache$a = null;\n/**\n * Calculates SHA-2 (SHA-224) hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha224(data) {\n if (wasmCache$a === null) {\n return lockedCreate(mutex$a, wasmJson$a, 28)\n .then((wasm) => {\n wasmCache$a = wasm;\n return wasmCache$a.calculate(data, 224);\n });\n }\n try {\n const hash = wasmCache$a.calculate(data, 224);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-2 (SHA-224) hash instance\n */\nfunction createSHA224() {\n return WASMInterface(wasmJson$a, 28).then((wasm) => {\n wasm.init(224);\n const obj = {\n init: () => { wasm.init(224); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 28,\n };\n return obj;\n });\n}\n\nconst mutex$9 = new Mutex();\nlet wasmCache$9 = null;\n/**\n * Calculates SHA-2 (SHA-256) hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha256(data) {\n if (wasmCache$9 === null) {\n return lockedCreate(mutex$9, wasmJson$a, 32)\n .then((wasm) => {\n wasmCache$9 = wasm;\n return wasmCache$9.calculate(data, 256);\n });\n }\n try {\n const hash = wasmCache$9.calculate(data, 256);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-2 (SHA-256) hash instance\n */\nfunction createSHA256() {\n return WASMInterface(wasmJson$a, 32).then((wasm) => {\n wasm.init(256);\n const obj = {\n init: () => { wasm.init(256); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 32,\n };\n return obj;\n });\n}\n\nvar name$9 = \"sha512\";\nvar data$9 = \"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\";\nvar hash$9 = \"cdd57f6a\";\nvar wasmJson$9 = {\n\tname: name$9,\n\tdata: data$9,\n\thash: hash$9\n};\n\nconst mutex$8 = new Mutex();\nlet wasmCache$8 = null;\n/**\n * Calculates SHA-2 (SHA-384) hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha384(data) {\n if (wasmCache$8 === null) {\n return lockedCreate(mutex$8, wasmJson$9, 48)\n .then((wasm) => {\n wasmCache$8 = wasm;\n return wasmCache$8.calculate(data, 384);\n });\n }\n try {\n const hash = wasmCache$8.calculate(data, 384);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-2 (SHA-384) hash instance\n */\nfunction createSHA384() {\n return WASMInterface(wasmJson$9, 48).then((wasm) => {\n wasm.init(384);\n const obj = {\n init: () => { wasm.init(384); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 128,\n digestSize: 48,\n };\n return obj;\n });\n}\n\nconst mutex$7 = new Mutex();\nlet wasmCache$7 = null;\n/**\n * Calculates SHA-2 (SHA-512) hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha512(data) {\n if (wasmCache$7 === null) {\n return lockedCreate(mutex$7, wasmJson$9, 64)\n .then((wasm) => {\n wasmCache$7 = wasm;\n return wasmCache$7.calculate(data, 512);\n });\n }\n try {\n const hash = wasmCache$7.calculate(data, 512);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-2 (SHA-512) hash instance\n */\nfunction createSHA512() {\n return WASMInterface(wasmJson$9, 64).then((wasm) => {\n wasm.init(512);\n const obj = {\n init: () => { wasm.init(512); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 128,\n digestSize: 64,\n };\n return obj;\n });\n}\n\nvar name$8 = \"xxhash32\";\nvar data$8 = \"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\";\nvar hash$8 = \"9e3a00cd\";\nvar wasmJson$8 = {\n\tname: name$8,\n\tdata: data$8,\n\thash: hash$8\n};\n\nconst mutex$6 = new Mutex();\nlet wasmCache$6 = null;\nfunction validateSeed$3(seed) {\n if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n return new Error('Seed must be a valid 32-bit long unsigned integer.');\n }\n return null;\n}\n/**\n * Calculates xxHash32 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)\n * @returns Computed hash as a hexadecimal string\n */\nfunction xxhash32(data, seed = 0) {\n if (validateSeed$3(seed)) {\n return Promise.reject(validateSeed$3(seed));\n }\n if (wasmCache$6 === null) {\n return lockedCreate(mutex$6, wasmJson$8, 4)\n .then((wasm) => {\n wasmCache$6 = wasm;\n return wasmCache$6.calculate(data, seed);\n });\n }\n try {\n const hash = wasmCache$6.calculate(data, seed);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new xxHash32 hash instance\n * @param data Input data (string, Buffer or TypedArray)\n * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)\n */\nfunction createXXHash32(seed = 0) {\n if (validateSeed$3(seed)) {\n return Promise.reject(validateSeed$3(seed));\n }\n return WASMInterface(wasmJson$8, 4).then((wasm) => {\n wasm.init(seed);\n const obj = {\n init: () => { wasm.init(seed); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 16,\n digestSize: 4,\n };\n return obj;\n });\n}\n\nvar name$7 = \"xxhash64\";\nvar data$7 = \"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\";\nvar hash$7 = \"dc61b4e7\";\nvar wasmJson$7 = {\n\tname: name$7,\n\tdata: data$7,\n\thash: hash$7\n};\n\nconst mutex$5 = new Mutex();\nlet wasmCache$5 = null;\nconst seedBuffer$2 = new ArrayBuffer(8);\nfunction validateSeed$2(seed) {\n if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n }\n return null;\n}\nfunction writeSeed$2(arr, low, high) {\n // write in little-endian format\n const buffer = new DataView(arr);\n buffer.setUint32(0, low, true);\n buffer.setUint32(4, high, true);\n}\n/**\n * Calculates xxHash64 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @returns Computed hash as a hexadecimal string\n */\nfunction xxhash64(data, seedLow = 0, seedHigh = 0) {\n if (validateSeed$2(seedLow)) {\n return Promise.reject(validateSeed$2(seedLow));\n }\n if (validateSeed$2(seedHigh)) {\n return Promise.reject(validateSeed$2(seedHigh));\n }\n if (wasmCache$5 === null) {\n return lockedCreate(mutex$5, wasmJson$7, 8)\n .then((wasm) => {\n wasmCache$5 = wasm;\n writeSeed$2(seedBuffer$2, seedLow, seedHigh);\n wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));\n return wasmCache$5.calculate(data);\n });\n }\n try {\n writeSeed$2(seedBuffer$2, seedLow, seedHigh);\n wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));\n const hash = wasmCache$5.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new xxHash64 hash instance\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n */\nfunction createXXHash64(seedLow = 0, seedHigh = 0) {\n if (validateSeed$2(seedLow)) {\n return Promise.reject(validateSeed$2(seedLow));\n }\n if (validateSeed$2(seedHigh)) {\n return Promise.reject(validateSeed$2(seedHigh));\n }\n return WASMInterface(wasmJson$7, 8).then((wasm) => {\n const instanceBuffer = new ArrayBuffer(8);\n writeSeed$2(instanceBuffer, seedLow, seedHigh);\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n const obj = {\n init: () => {\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 32,\n digestSize: 8,\n };\n return obj;\n });\n}\n\nvar name$6 = \"xxhash3\";\nvar data$6 = \"AGFzbQEAAAABNAhgAAF/YAR/f39/AGAHf39/f39/fwBgBH9+fn4BfmAEf39/fgF+YAN/f34BfmAAAGABfwADDg0AAQIDBAUFBQYHBgAGBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAIC0hhc2hfVXBkYXRlAAkKSGFzaF9GaW5hbAAKDUhhc2hfR2V0U3RhdGUACw5IYXNoX0NhbGN1bGF0ZQAMClNUQVRFX1NJWkUDAQrNQg0FAEGACgvvAwEQfgJAIANFDQAgAUE4aiEBIAJBOGohAiAAKQMwIQQgACkDOCEFIAApAyAhBiAAKQMoIQcgACkDECEIIAApAxghCSAAKQMAIQogACkDCCELA0AgByABQWhqKQMAIgx8IAJBcGopAwAgAUFwaikDACINhSIHQiCIIAdC/////w+DfnwhByAJIAFBWGopAwAiDnwgAkFgaikDACABQWBqKQMAIg+FIglCIIggCUL/////D4N+fCEJIAsgAUFIaikDACIQfCACQVBqKQMAIAFBUGopAwAiEYUiC0IgiCALQv////8Pg358IQsgAkF4aikDACABQXhqKQMAIhKFIhNCIIggE0L/////D4N+IAR8IAEpAwAiE3whBCACQWhqKQMAIAyFIgxCIIggDEL/////D4N+IAZ8IA18IQYgAkFYaikDACAOhSIMQiCIIAxC/////w+DfiAIfCAPfCEIIAJBSGopAwAgEIUiDEIgiCAMQv////8Pg34gCnwgEXwhCiAFIBJ8IAIpAwAgE4UiBUIgiCAFQv////8Pg358IQUgAUHAAGohASACQQhqIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCACIAEoAgAiB2siAiAESw0AIAAgAyAFIAdBA3RqIAIQASAAIAUgBmoiBykDACAAKQMAIghCL4iFIAiFQrHz3fEJfjcDACAAIAcpAwggACkDCCIIQi+IhSAIhUKx893xCX43AwggACAHKQMQIAApAxAiCEIviIUgCIVCsfPd8Ql+NwMQIAAgBykDGCAAKQMYIghCL4iFIAiFQrHz3fEJfjcDGCAAIAcpAyAgACkDICIIQi+IhSAIhUKx893xCX43AyAgACAHKQMoIAApAygiCEIviIUgCIVCsfPd8Ql+NwMoIAAgBykDMCAAKQMwIghCL4iFIAiFQrHz3fEJfjcDMCAAIAcpAzggACkDOCIIQi+IhSAIhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAuFAQEBfyACIAGFIAOnIgRBGHQgBEGA/gNxQQh0ciAEQQh2QYD+A3EgBEEYdnJyrUIghiADhX1BADUCgIwBQiCGIABB/IsBajUCAISFIgNCMYkgA0IYiYUgA4VCpb7j9NGMh9mff34iA0IjiCAArXwgA4VCpb7j9NGMh9mff34iA0IciCADhQtnACACIAFzrSADfCIDQiGIQQAtAICMAUEQdCAAQQh0ciAAQQF2QYCMAWotAABBGHRyIABB/4sBai0AAHKthSADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC4kDAQR+AkAgAEEJSQ0AQQApA4CMASABKQMgIAEpAxiFIAJ8hSIDQjiGIANCgP4Dg0IohoQgA0KAgPwHg0IYhiADQoCAgPgPg0IIhoSEIANCCIhCgICA+A+DIANCGIhCgID8B4OEIANCKIhCgP4DgyADQjiIhISEIACtfCAAQfiLAWopAwAgASkDMCABKQMohSACfYUiAnwgAkL/////D4MiBCADQiCIIgV+IgZC/////w+DIAJCIIgiAiADQv////8PgyIDfnwgBCADfiIDQiCIfCIEQiCGIANC/////w+DhCAGQiCIIAIgBX58IARCIIh8hXwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4UPCwJAIABBBEkNACAAIAFBCGopAwAgAUEQaikDACACEAMPCwJAIABFDQAgACABKAIAIAFBBGooAgAgAhAEDwsgASkDOCABKQNAhSAChSIDQiGIIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4UL3ggBBn4gAK1Ch5Wvr5i23puef34hAwJAIABBIUkNAAJAIABBwQBJDQACQCAAQeEASQ0AIAEpA2ggAn1BACkDuIwBhSIEQv////8PgyIFIAEpA2AgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSADfCABKQN4IAJ9IABByIsBaikDAIUiA0L/////D4MiBCABKQNwIAJ8IABBwIsBaikDAIUiBUIgiCIGfiIHQv////8PgyADQiCIIgMgBUL/////D4MiBX58IAQgBX4iBEIgiHwiBUIghiAEQv////8Pg4QgB0IgiCADIAZ+fCAFQiCIfIV8IQMLIAEpA0ggAn1BACkDqIwBhSIEQv////8PgyIFIAEpA0AgAnxBACkDoIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSADfCABKQNYIAJ9IABB2IsBaikDAIUiA0L/////D4MiBCABKQNQIAJ8IABB0IsBaikDAIUiBUIgiCIGfiIHQv////8PgyADQiCIIgMgBUL/////D4MiBX58IAQgBX4iBEIgiHwiBUIghiAEQv////8Pg4QgB0IgiCADIAZ+fCAFQiCIfIV8IQMLIAEpAyggAn1BACkDmIwBhSIEQv////8PgyIFIAEpAyAgAnxBACkDkIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSADfCABKQM4IAJ9IABB6IsBaikDAIUiA0L/////D4MiBCABKQMwIAJ8IABB4IsBaikDAIUiBUIgiCIGfiIHQv////8PgyADQiCIIgMgBUL/////D4MiBX58IAQgBX4iBEIgiHwiBUIghiAEQv////8Pg4QgB0IgiCADIAZ+fCAFQiCIfIV8IQMLIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSADfCABKQMYIAJ9IABB+IsBaikDAIUiA0L/////D4MiBCABKQMQIAJ8IABB8IsBaikDAIUiAkIgiCIFfiIGQv////8PgyADQiCIIgMgAkL/////D4MiAn58IAQgAn4iAkIgiHwiBEIghiACQv////8Pg4QgBkIgiCADIAV+fCAEQiCIfIV8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC/wKBAF/BX4CfwF+QQAhAyABKQN4IAJ9QQApA/iMAYUiBEL/////D4MiBSABKQNwIAJ8QQApA/CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDaCACfUEAKQPojAGFIgRC/////w+DIgUgASkDYCACfEEAKQPgjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA1ggAn1BACkD2IwBhSIEQv////8PgyIFIAEpA1AgAnxBACkD0IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNIIAJ9QQApA8iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA8CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDOCACfUEAKQO4jAGFIgRC/////w+DIgUgASkDMCACfEEAKQOwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAyggAn1BACkDqIwBhSIEQv////8PgyIFIAEpAyAgAnxBACkDoIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMYIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMQIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDCCACfUEAKQOIjAGFIgRC/////w+DIgUgASkDACACfEEAKQOAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIACtQoeVr6+Ytt6bnn9+fHx8fHx8fHwiBEIliCAEhUL5893xmfKZqxZ+IgRCIIggBIUhBAJAIABBkAFIDQAgAEEEdkF4aiEJA0AgASADaiIKQQtqKQMAIAJ9IANBiI0BaikDAIUiBUL/////D4MiBiAKQQNqKQMAIAJ8IANBgI0BaikDAIUiB0IgiCIIfiILQv////8PgyAFQiCIIgUgB0L/////D4MiB358IAYgB34iBkIgiHwiB0IghiAGQv////8Pg4QgC0IgiCAFIAh+fCAHQiCIfIUgBHwhBCADQRBqIQMgCUF/aiIJDQALCyABKQN/IAJ9IABB+IsBaikDAIUiBUL/////D4MiBiABKQN3IAJ8IABB8IsBaikDAIUiAkIgiCIHfiIIQv////8PgyAFQiCIIgUgAkL/////D4MiAn58IAYgAn4iAkIgiHwiBkIghiACQv////8Pg4QgCEIgiCAFIAd+fCAGQiCIfIUgBHwiAkIliCAChUL5893xmfKZqxZ+IgJCIIggAoUL3wUCAX4BfwJAAkBBACkDgAoiAFBFDQBBgAghAUIAIQAMAQsCQEEAKQOgjgEgAFINAEEAIQEMAQtBACEBQQBCr6/v17z3kqD+ACAAfTcD+IsBQQAgAELFluv52NKFgih8NwPwiwFBAEKP8eONrY/0mE4gAH03A+iLAUEAIABCq6z4xdXv0dB8fDcD4IsBQQBC063UspKFtbSefyAAfTcD2IsBQQAgAEKXmvSO9Za87ckAfDcD0IsBQQBCxYOC/a//xLFrIAB9NwPIiwFBACAAQuqLs53I5vT1Q3w3A8CLAUEAQsi/+sucm9655AAgAH03A7iLAUEAIABCiqOB39SZ7awxfDcDsIsBQQBC+bnvvfz4wqcdIAB9NwOoiwFBACAAQqj12/uznKeaP3w3A6CLAUEAQriyvLeU1bfWWCAAfTcDmIsBQQAgAELxyKG6qbTD/M4AfDcDkIsBQQBCiKGX27jjlJejfyAAfTcDiIsBQQAgAEK80Mjam/KwgEt8NwOAiwFBAELg68C0ntCOk8wAIAB9NwP4igFBACAAQriRmKL3/pCSjn98NwPwigFBAEKCtcHux/m/uSEgAH03A+iKAUEAIABCy/OZ98SZ8PL4AHw3A+CKAUEAQvKAkaX69uyzHyAAfTcD2IoBQQAgAELeqbfLvpDky1t8NwPQigFBAEL8goTk8r7I1hwgAH03A8iKAUEAIABCuP2zy7OE6aW+f3w3A8CKAQtBAEIANwOQjgFBAEIANwOIjgFBAEIANwOAjgFBAEK93MqVDDcDgIoBQQBCh5Wvr5i23puefzcDiIoBQQBCz9bTvtLHq9lCNwOQigFBAEL5893xmfaZqxY3A5iKAUEAQuPcypX8zvL1hX83A6CKAUEAQveUr68INwOoigFBAELFz9my8eW66ic3A7CKAUEAQrHz3fEJNwO4igFBACAANwOgjgFBACABNgKwjgFBAEKQgICAgBA3A5iOAQuCCgEIf0EAQQApA5COASAArXw3A5COAQJAAkACQEEAKAKAjgEiASAAaiICQYACSw0AIAFBgIwBaiEDQYAKIQQCQCAAQQhPDQAgACEBDAILAkACQCAAQXhqIgVBA3ZBAWpBB3EiBg0AQYAKIQQgACEBDAELIAZBA3QhAUGACiEEA0AgAyAEKQMANwMAIANBCGohAyAEQQhqIQQgBkF/aiIGDQALIAAgAWshAQsgBUE4SQ0BA0AgAyAEKQMANwMAIANBCGogBEEIaikDADcDACADQRBqIARBEGopAwA3AwAgA0EYaiAEQRhqKQMANwMAIANBIGogBEEgaikDADcDACADQShqIARBKGopAwA3AwAgA0EwaiAEQTBqKQMANwMAIANBOGogBEE4aikDADcDACADQcAAaiEDIARBwABqIQQgAUFAaiIBQQdLDQAMAgsLQYAKIQQgAEGACmohBUEAKAKwjgEiA0HAigEgAxshBgJAIAFFDQAgAUGAjAFqIQNBgAohBAJAAkBBgAIgAWsiB0EITw0AIAchAAwBCwJAAkBB+AEgAWsiCEEDdkEBakEHcSICDQBBgAohBCAHIQAMAQtBgAohBCACQQN0IgAhAgNAIAMgBCkDADcDACADQQhqIQMgBEEIaiEEIAJBeGoiAg0AC0GAAiABIABqayEACyAIQThJDQADQCADIAQpAwA3AwAgA0EIaiAEQQhqKQMANwMAIANBEGogBEEQaikDADcDACADQRhqIARBGGopAwA3AwAgA0EgaiAEQSBqKQMANwMAIANBKGogBEEoaikDADcDACADQTBqIARBMGopAwA3AwAgA0E4aiAEQThqKQMANwMAIANBwABqIQMgBEHAAGohBCAAQUBqIgBBB0sNAAsLAkAgAEUNAAJAAkAgAEEHcSICDQAgACEBDAELIABBeHEhAQNAIAMgBC0AADoAACADQQFqIQMgBEEBaiEEIAJBf2oiAg0ACwsgAEEISQ0AA0AgAyAEKQAANwAAIANBCGohAyAEQQhqIQQgAUF4aiIBDQALC0GAigFBiI4BQQAoApiOAUGAjAFBBCAGQQAoApyOARACQQBBADYCgI4BIAdBgApqIQQLAkAgBEGAAmogBU8NACAFQYB+aiEDA0BBgIoBQYiOAUEAKAKYjgEgBEEEIAZBACgCnI4BEAIgBEGAAmoiBCADSQ0AC0EAIARBQGopAwA3A8CNAUEAIARBSGopAwA3A8iNAUEAIARBUGopAwA3A9CNAUEAIARBWGopAwA3A9iNAUEAIARBYGopAwA3A+CNAUEAIARBaGopAwA3A+iNAUEAIARBcGopAwA3A/CNAUEAIARBeGopAwA3A/iNAQtBgIwBIQMCQAJAIAUgBGsiAkEITw0AIAIhBgwBC0GAjAEhAyACIQYDQCADIAQpAwA3AwAgA0EIaiEDIARBCGohBCAGQXhqIgZBB0sNAAsLIAZFDQEDQCADIAQtAAA6AAAgA0EBaiEDIARBAWohBCAGQX9qIgYNAAwCCwsgAUUNAAJAAkAgAUEHcSIGDQAgASECDAELIAFBeHEhAgNAIAMgBC0AADoAACADQQFqIQMgBEEBaiEEIAZBf2oiBg0ACwsCQCABQQhJDQADQCADIAQpAAA3AAAgA0EIaiEDIARBCGohBCACQXhqIgINAAsLQQAoAoCOASAAaiECC0EAIAI2AoCOAQusEwUEfwJ+AX8VfgV/IwAiACEBIABBgAFrQUBxIgIkAEEAKAKwjgEiAEHAigEgABshAwJAAkBBACkDkI4BIgRC8QFUDQAgAkEAKQOAigE3AwAgAkEAKQOIigE3AwggAkEAKQOQigE3AxAgAkEAKQOYigE3AxggAkEAKQOgigE3AyAgAkEAKQOoigE3AyggAkEAKQOwigEiBDcDMCACQQApA7iKASIFNwM4AkACQEEAKAKAjgEiBkHAAEkNACACQQAoAoiOATYCQCACIAJBwABqQQAoApiOAUGAjAEgBkF/akEGdiADQQAoApyOASIAEAIgAyAAaiIAQXlqKQMAIQcgAEEJaikDACEIIABBGWopAwAhCSAGQcCLAWopAwAhBCAAQQFqKQMAIQogBkHIiwFqKQMAIQUgBkHQiwFqKQMAIQsgAEERaikDACEMIAZB2IsBaikDACENIAZB4IsBaikDACEOIABBIWopAwAhDyAGQeiLAWopAwAhECAAQSlqKQMAIREgAikDACESIAIpAxAhEyACKQMgIRQgAikDCCEVIAIpAxghFiACKQMoIRcgAikDMCEYIAIgAikDOCAGQfCLAWopAwAiGXwgAEExaikDACAGQfiLAWopAwAiGoUiG0IgiCAbQv////8Pg358NwM4IAIgGiAYIBEgGYUiEUIgiCARQv////8Pg358fDcDMCAXIA58IA8gEIUiD0IgiCAPQv////8Pg358IQ8gFiALfCAMIA2FIgxCIIggDEL/////D4N+fCEMIBUgBHwgCiAFhSIKQiCIIApC/////w+DfnwhCiAQIBQgCSAOhSIOQiCIIA5C/////w+Dfnx8IRAgDSATIAggC4UiC0IgiCALQv////8Pg358fCEIIAUgEiAHIASFIgRCIIggBEL/////D4N+fHwhBwwBCyAGQcCNAWohHEHAACAGayEdIAJBwABqIQACQAJAAkAgBkE4TQ0AIB0hHgwBCwJAAkBBOCAGayIfQQN2QQFqQQdxIh4NACACQcAAaiEAIB0hHgwBCyACQcAAaiEAIB5BA3QiICEeA0AgACAcKQMANwMAIABBCGohACAcQQhqIRwgHkF4aiIeDQALQcAAIAYgIGprIR4LAkAgH0E4SQ0AA0AgACAcKQMANwMAIABBCGogHEEIaikDADcDACAAQRBqIBxBEGopAwA3AwAgAEEYaiAcQRhqKQMANwMAIABBIGogHEEgaikDADcDACAAQShqIBxBKGopAwA3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\";\nvar hash$6 = \"0dca92d1\";\nvar wasmJson$6 = {\n\tname: name$6,\n\tdata: data$6,\n\thash: hash$6\n};\n\nconst mutex$4 = new Mutex();\nlet wasmCache$4 = null;\nconst seedBuffer$1 = new ArrayBuffer(8);\nfunction validateSeed$1(seed) {\n if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n }\n return null;\n}\nfunction writeSeed$1(arr, low, high) {\n // write in little-endian format\n const buffer = new DataView(arr);\n buffer.setUint32(0, low, true);\n buffer.setUint32(4, high, true);\n}\n/**\n * Calculates xxHash3 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @returns Computed hash as a hexadecimal string\n */\nfunction xxhash3(data, seedLow = 0, seedHigh = 0) {\n if (validateSeed$1(seedLow)) {\n return Promise.reject(validateSeed$1(seedLow));\n }\n if (validateSeed$1(seedHigh)) {\n return Promise.reject(validateSeed$1(seedHigh));\n }\n if (wasmCache$4 === null) {\n return lockedCreate(mutex$4, wasmJson$6, 8)\n .then((wasm) => {\n wasmCache$4 = wasm;\n writeSeed$1(seedBuffer$1, seedLow, seedHigh);\n wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));\n return wasmCache$4.calculate(data);\n });\n }\n try {\n writeSeed$1(seedBuffer$1, seedLow, seedHigh);\n wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));\n const hash = wasmCache$4.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new xxHash3 hash instance\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n */\nfunction createXXHash3(seedLow = 0, seedHigh = 0) {\n if (validateSeed$1(seedLow)) {\n return Promise.reject(validateSeed$1(seedLow));\n }\n if (validateSeed$1(seedHigh)) {\n return Promise.reject(validateSeed$1(seedHigh));\n }\n return WASMInterface(wasmJson$6, 8).then((wasm) => {\n const instanceBuffer = new ArrayBuffer(8);\n writeSeed$1(instanceBuffer, seedLow, seedHigh);\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n const obj = {\n init: () => {\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 512,\n digestSize: 8,\n };\n return obj;\n });\n}\n\nvar name$5 = \"xxhash128\";\nvar data$5 = \"AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUFBAEBAgIGDgJ/AUHAjgULfwBBwAkLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAcLSGFzaF9VcGRhdGUACApIYXNoX0ZpbmFsAAkNSGFzaF9HZXRTdGF0ZQAKDkhhc2hfQ2FsY3VsYXRlAAsKU1RBVEVfU0laRQMBCuxNDAUAQYAKC+8DARB+AkAgA0UNACABQThqIQEgAkE4aiECIAApAzAhBCAAKQM4IQUgACkDICEGIAApAyghByAAKQMQIQggACkDGCEJIAApAwAhCiAAKQMIIQsDQCAHIAFBaGopAwAiDHwgAkFwaikDACABQXBqKQMAIg2FIgdCIIggB0L/////D4N+fCEHIAkgAUFYaikDACIOfCACQWBqKQMAIAFBYGopAwAiD4UiCUIgiCAJQv////8Pg358IQkgCyABQUhqKQMAIhB8IAJBUGopAwAgAUFQaikDACIRhSILQiCIIAtC/////w+DfnwhCyACQXhqKQMAIAFBeGopAwAiEoUiE0IgiCATQv////8Pg34gBHwgASkDACITfCEEIAJBaGopAwAgDIUiDEIgiCAMQv////8Pg34gBnwgDXwhBiACQVhqKQMAIA6FIgxCIIggDEL/////D4N+IAh8IA98IQggAkFIaikDACAQhSIMQiCIIAxC/////w+DfiAKfCARfCEKIAUgEnwgAikDACAThSIFQiCIIAVC/////w+DfnwhBSABQcAAaiEBIAJBCGohAiADQX9qIgMNAAsgACAJNwMYIAAgCjcDACAAIAs3AwggACAHNwMoIAAgCDcDECAAIAU3AzggACAGNwMgIAAgBDcDMAsL3gICAX8BfgJAIAIgASgCACIHayICIARLDQAgACADIAUgB0EDdGogAhABIAAgBSAGaiIHKQMAIAApAwAiCEIviIUgCIVCsfPd8Ql+NwMAIAAgBykDCCAAKQMIIghCL4iFIAiFQrHz3fEJfjcDCCAAIAcpAxAgACkDECIIQi+IhSAIhUKx893xCX43AxAgACAHKQMYIAApAxgiCEIviIUgCIVCsfPd8Ql+NwMYIAAgBykDICAAKQMgIghCL4iFIAiFQrHz3fEJfjcDICAAIAcpAyggACkDKCIIQi+IhSAIhUKx893xCX43AyggACAHKQMwIAApAzAiCEIviIUgCIVCsfPd8Ql+NwMwIAAgBykDOCAAKQM4IghCL4iFIAiFQrHz3fEJfjcDOCAAIAMgAkEGdGogBSAEIAJrIgcQASABIAc2AgAPCyAAIAMgBSAHQQN0aiAEEAEgASAHIARqNgIAC+0DAQV+IAEpAzggACkDOIUiA0L/////D4MiBCABKQMwIAApAzCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFIAEpAyggACkDKIUiA0L/////D4MiBCABKQMgIAApAyCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFIAEpAxggACkDGIUiA0L/////D4MiBCABKQMQIAApAxCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFIAEpAwggACkDCIUiA0L/////D4MiBCABKQMAIAApAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFIAJ8fHx8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC7oIAgV+A38CQCABQQlJDQAgACABQfiLAWopAwAiBCACKQM4IAIpAzCFIAN8hSIFQv////8Pg0L3lK+vCH4gBUKAgICAcIN8QQApA4CMASACKQMoIAIpAyCFIAN9hSAEhSIDQiCIIgRCsfPd8Ql+fCAEQoeVr68IfiIEQiCIfCAEQv////8PgyADQv////8PgyIDQrHz3fEJfnwgA0KHla+vCH4iBEIgiHwiBUIgiHwiA0I4hiADQoD+A4NCKIaEIANCgID8B4NCGIYgA0KAgID4D4NCCIaEhCADQgiIQoCAgPgPgyADQhiIQoCA/AeDhCADQiiIQoD+A4MgA0I4iISEhCAEQv////8PgyABQX9qrUI2hoQgBUIghnyFIgRCIIgiBULP1tO+An4iBkL/////D4MgBEL/////D4MiBEK93MqVDH58IARCz9bTvgJ+IgRCIIh8IgdCIIYiCEIliCAIIARC/////w+DhIVC+fPd8ZnymasWfiIEQiCIIASFNwMAIAAgBUK93MqVDH4gA0LP1tO+0ser2UJ+fCAGQiCIfCAHQiCIfCIDQiWIIAOFQvnz3fGZ8pmrFn4iA0IgiCADhTcDCA8LAkAgAUEESQ0AIAAgAikDGCACKQMQhSADpyICQRh0IAJBgP4DcUEIdHIgAkEIdkGA/gNxIAJBGHZycq1CIIYgA4V8IAFB/IsBajUCAEIghkEANQKAjAGEhSIDQiCIIgQgAUECdEGHla+veGqtIgV+IgZCIIggBEKx893xCX58IAZC/////w+DIANC/////w+DIgNCsfPd8Ql+fCADIAV+IgNCIIh8IgRCIIh8IARCIIYgA0L/////D4OEIgRCAYZ8IgNCJYggA4VC+fPd8ZnymasWfiIFQiCIIAWFNwMIIAAgA0IDiCAEhSIDQiOIIAOFQqW+4/TRjIfZn39+IgNCHIggA4U3AwAPCwJAIAFFDQAgACACKAIEIAIoAgBzrSADfCIEQiGIQQAtAICMAUEQdCABQQh0ciIJIAFBAXZBgIwBai0AAEEYdHIiCiABQf+LAWotAAAiAXIiC62FIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwAgACACKAIMIAIoAghzrSADfSIDQiGIIAFBGHQgC0GA/gNxQQh0ciAJQQh2QYD+A3EgCkEYdnJyQQ13rYUgA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDCA8LIAAgAikDUCACKQNYhSADhSIEQiGIIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwggACACKQNAIAIpA0iFIAOFIgNCIYggA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDAAvDCgEKfiABrSIEQoeVr6+Ytt6bnn9+IQUCQAJAIAFBIU8NAEIAIQYMAQtCACEHAkAgAUHBAEkNAEIAIQcCQCABQeEASQ0AIAJB+ABqKQMAIAN9IAFByIsBaikDACIIhSIHQv////8PgyIJIAIpA3AgA3wgAUHAiwFqKQMAIgqFIgtCIIgiDH4iDUIgiCAHQiCIIgcgDH58IA1C/////w+DIAcgC0L/////D4MiC358IAkgC34iB0IgiHwiCUIgiHxBACkDuIwBIgtBACkDsIwBIgx8hSAJQiCGIAdC/////w+DhIUhByACQegAaikDACADfSALhSIJQv////8PgyILIAIpA2AgA3wgDIUiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAsgDH4iC0IgiHwiDEIghiALQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgBXwgCCAKfIUhBQsgAkHYAGopAwAgA30gAUHYiwFqKQMAIgiFIglC/////w+DIgogAikDUCADfCABQdCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDqIwBIglBACkDoIwBIgp8hSEHIAJByABqKQMAIAN9IAmFIglC/////w+DIgwgAikDQCADfCAKhSIKQiCIIg1+IgZC/////w+DIAlCIIgiCSAKQv////8PgyIKfnwgDCAKfiIKQiCIfCIMQiCGIApC/////w+DhCAGQiCIIAkgDX58IAxCIIh8hSAFfCAIIAt8hSEFCyACQThqKQMAIAN9IAFB6IsBaikDACIIhSIJQv////8PgyIKIAIpAzAgA3wgAUHgiwFqKQMAIguFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCAKIAx+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAd8QQApA5iMASIHQQApA5CMASIJfIUhBiACQShqKQMAIAN9IAeFIgdC/////w+DIgogAikDICADfCAJhSIJQiCIIgx+Ig1C/////w+DIAdCIIgiByAJQv////8PgyIJfnwgCiAJfiIJQiCIfCIKQiCGIAlC/////w+DhCANQiCIIAcgDH58IApCIIh8hSAFfCAIIAt8hSEFCyAAIAJBGGopAwAgA30gAUH4iwFqKQMAIgeFIghC/////w+DIgkgAikDECADfCABQfCLAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnxBACkDiIwBIghBACkDgIwBIgl8hSILIAJBCGopAwAgA30gCIUiCEL/////D4MiDCACKQMAIAN8IAmFIglCIIgiDX4iBkL/////D4MgCEIgiCIIIAlC/////w+DIgl+fCAMIAl+IglCIIh8IgxCIIYgCUL/////D4OEIAZCIIggCCANfnwgDEIgiHyFIAV8IAcgCnyFIgV8IgdCJYggB4VC+fPd8ZnymasWfiIHQiCIIAeFNwMAIABCACAFQoeVr6+Ytt6bnn9+IAQgA31Cz9bTvtLHq9lCfnwgC0Lj3MqV/M7y9YV/fnwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4V9NwMIC6EPAwF/FH4Cf0EAIQQgAkH4AGopAwAgA31BACkD+IwBIgWFIgZC/////w+DIgcgAikDcCADfEEAKQPwjAEiCIUiCUIgiCIKfiILQv////8PgyAGQiCIIgYgCUL/////D4MiCX58IAcgCX4iB0IgiHwiCUIghiAHQv////8Pg4QgC0IgiCAGIAp+fCAJQiCIfIUgAkHYAGopAwAgA31BACkD2IwBIgeFIgZC/////w+DIgkgAikDUCADfEEAKQPQjAEiCoUiC0IgiCIMfiINQv////8PgyAGQiCIIgYgC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAGIAx+fCALQiCIfIUgAkE4aikDACADfUEAKQO4jAEiCYUiBkL/////D4MiCyACKQMwIAN8QQApA7CMASIMhSINQiCIIg5+Ig9C/////w+DIAZCIIgiBiANQv////8PgyINfnwgCyANfiILQiCIfCINQiCGIAtC/////w+DhCAPQiCIIAYgDn58IA1CIIh8hSACQRhqKQMAIAN9QQApA5iMASILhSIGQv////8PgyINIAIpAxAgA3xBACkDkIwBIg6FIg9CIIgiEH4iEUL/////D4MgBkIgiCIGIA9C/////w+DIg9+fCANIA9+Ig1CIIh8Ig9CIIYgDUL/////D4OEIBFCIIggBiAQfnwgD0IgiHyFQQApA4iMASINQQApA4CMASIPfIV8QQApA6iMASIQQQApA6CMASIRfIV8QQApA8iMASISQQApA8CMASITfIV8QQApA+iMASIUQQApA+CMASIVfIUiBkIliCAGhUL5893xmfKZqxZ+IgZCIIggBoUhBiACQegAaikDACADfSAUhSIUQv////8PgyIWIAIpA2AgA3wgFYUiFUIgiCIXfiIYQv////8PgyAUQiCIIhQgFUL/////D4MiFX58IBYgFX4iFUIgiHwiFkIghiAVQv////8Pg4QgGEIgiCAUIBd+fCAWQiCIfIUgAkHIAGopAwAgA30gEoUiEkL/////D4MiFCACKQNAIAN8IBOFIhNCIIgiFX4iFkL/////D4MgEkIgiCISIBNC/////w+DIhN+fCAUIBN+IhNCIIh8IhRCIIYgE0L/////D4OEIBZCIIggEiAVfnwgFEIgiHyFIAJBKGopAwAgA30gEIUiEEL/////D4MiEiACKQMgIAN8IBGFIhFCIIgiE34iFEL/////D4MgEEIgiCIQIBFC/////w+DIhF+fCASIBF+IhFCIIh8IhJCIIYgEUL/////D4OEIBRCIIggECATfnwgEkIgiHyFIAJBCGopAwAgA30gDYUiDUL/////D4MiECACKQMAIAN8IA+FIg9CIIgiEX4iEkL/////D4MgDUIgiCINIA9C/////w+DIg9+fCAQIA9+Ig9CIIh8IhBCIIYgD0L/////D4OEIBJCIIggDSARfnwgEEIgiHyFIAGtIg9Ch5Wvr5i23puef358IAsgDnyFfCAJIAx8hXwgByAKfIV8IAUgCHyFIgVCJYggBYVC+fPd8ZnymasWfiIFQiCIIAWFIQUCQCABQaABSA0AIAFBBXZBfGohGQNAIAIgBGoiGkEbaikDACADfSAEQZiNAWopAwAiB4UiCEL/////D4MiCSAaQRNqKQMAIAN8IARBkI0BaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfCAEQYiNAWopAwAiCCAEQYCNAWopAwAiCXyFIQYgGkELaikDACADfSAIhSII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QQApA6iKATcDKCACQQApA7CKASIENwMwIAJBACkDuIoBIgU3AzgCQAJAQQAoAoCOASIGQcAASQ0AIAJBACgCiI4BNgJAIAIgAkHAAGpBACgCmI4BQYCMASAGQX9qQQZ2IANBACgCnI4BIgAQAiACIAIpAwggBkHAiwFqKQMAIgR8IAMgAGoiAEEBaikDACAGQciLAWopAwAiBYUiB0IgiCAHQv////8Pg358NwMIIAIgAikDGCAGQdCLAWopAwAiB3wgAEERaikDACAGQdiLAWopAwAiCIUiCUIgiCAJQv////8Pg358NwMYIAIgBSAEIABBeWopAwCFIgRCIIggBEL/////D4N+IAIpAwB8fDcDACACIAggByAAQQlqKQMAhSIEQiCIIARC/////w+DfiACKQMQfHw3AxAgAEEZaikDACEEIAIpAyAhBSACIAIpAyggBkHgiwFqKQMAIgd8IABBIWopAwAgBkHoiwFqKQMAIgiFIglCIIggCUL/////D4N+fDcDKCACIAggBSAEIAeFIgRCIIggBEL/////D4N+fHw3AyAgAiACKQM4IAZB8IsBaikDACIEfCAAQTFqKQMAIAZB+IsBaikDACIFhSIHQiCIIAdC/////w+Dfnw3AzggAiAFIAQgAEEpaikDAIUiBEIgiCAEQv////8Pg34gAikDMHx8NwMwDAELIAZBwI0BaiEKQcAAIAZrIQsgAkHAAGohAAJAAkACQCAGQThNDQAgCyEMDAELAkACQEE4IAZrIg1BA3ZBAWpBB3EiDA0AIAJBwABqIQAgCyEMDAELIAJBwABqIQAgDEEDdCIOIQwDQCAAIAopAwA3AwAgAEEIaiEAIApBCGohCiAMQXhqIgwNAAtBwAAgBiAOamshDAsCQCANQThJDQADQCAAIAopAwA3AwAgAEEIaiAKQQhqKQMANwMAIABBEGogCkEQaikDADcDACAAQRhqIApBGGopAwA3AwAgAEEgaiAKQSBqKQMANwMAIABBKGogCkEoaikDADcDACAAQTBqIApBMGopAwA3AwAgAEE4aiAKQThqKQMANwMAIABBwABqIQAgCkHAAGohCiAMQUBqIgxBB0sNAAsLIAxFDQELIAxBf2ohDgJAIAxBB3EiDUUNACAMQXhxIQwDQCAAIAotAAA6AAAgAEEBaiEAIApBAWohCiANQX9qIg0NAAsLIA5BB0kNAANAIAAgCikAADcAACAAQQhqIQAgCkEIaiEKIAxBeGoiDA0ACwsgAkHAAGogC2ohCkGAjAEhAAJAAkACQCAGQQhJDQACQCAGQThqQQN2QQFqQQdxIgwNAAwCCyAMQQN0IQ1BgIwBIQADQCAKIAApAwA3AwAgCkEIaiEKIABBCGohACAMQX9qIgwNAAsgBiANayEGCyAGRQ0BAkAgBkEHcSINDQAgBiEMDAELIAZBeHEhDANAIAogAC0AADoAACAKQQFqIQogAEEBaiEAIA1Bf2oiDQ0ACwsgBkEISQ0AA0AgCiAAKQAANwAAIApBCGohCiAAQQhqIQAgDEF4aiIMDQALCyACIAIpAwggAikDQCIHfCADQQAoApyOAWoiAEEBaikDACACKQNIIgiFIglCIIggCUL/////D4N+fDcDCCACIAIpAxggAikDUCIJfCAAQRFqKQMAIAIpA1giD4UiEEIgiCAQQv////8Pg358NwMYIAIgCCAHIABBeWopAwCFIgdCIIggB0L/////D4N+IAIpAwB8fDcDACACIA8gCSAAQQlqKQMAhSIHQiCIIAdC/////w+DfiACKQMQfHw3AxAgAEEZaikDACEHIAIpAyAhCCACIAIpAyggAikDYCIJfCAAQSFqKQMAIAIpA2giD4UiEEIgiCAQQv////8Pg358NwMoIAIgDyAIIAcgCYUiB0IgiCAHQv////8Pg358fDcDICACIAUgAikDcCIHfCAAQTFqKQMAIAIpA3giBYUiCEIgiCAIQv////8Pg358NwM4IAIgBSAHIABBKWopAwCFIgdCIIggB0L/////D4N+IAR8fDcDMAsgAiACIANBC2pBACkDkI4BIgRCh5Wvr5i23puef34QAzcDQCACIAIgA0EAKAKcjgFqQXVqIARCz9bTvtLHq9lCfkJ/hRADNwNIDAELIASnIQACQEEAKQOgjgEiBFANAAJAIABBEEsNACACQcAAaiAAQYAIIAQQBAwCCwJAIABBgAFLDQAgAkHAAGogAEGACCAEEAUMAgsgAkHAAGogAEGACCAEEAYMAQsCQCAAQRBLDQAgAkHAAGogACADQgAQBAwBCwJAIABBgAFLDQAgAkHAAGogACADQgAQBQwBCyACQcAAaiAAIANCABAGC0EAIAIpA3A3A7gKQQAgAikDYDcDqApBACACKQNQNwOYCkEAIAJB+ABqKQMANwPACkEAIAJB6ABqKQMANwOwCkEAIAJB2ABqKQMANwOgCkEAIAIpA0giBEI4hiAEQoD+A4NCKIaEIARCgID8B4NCGIYgBEKAgID4D4NCCIaEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhCIENwOACkEAIAQ3A5AKQQAgAikDQCIEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISENwOICiABJAALBgBBgIoBCwIACwvMAQEAQYAIC8QBuP5sOSOkS758AYEs9yGtHN7UbemDkJfbckCkpLezZx/LeeZOzMDleIJa0H3M/3IhuAhGdPdDJI7gNZDmgTomTDwoUruRwwDLiNBlixtTLqNxZEiXog35TjgZ70ap3qzYqPp2P+OcND/53LvHxwtPHYpR4EvNtFkxyJ9+ydl4c2TqxayDNNPrw8WBoP/6E2PrFw3dUbfw2knTFlUmKdRonisWvlh9R6H8j/i40XrQMc5FyzqPlRYEKK/X+8q7S0B+QAIAAA==\";\nvar hash$5 = \"1f682d91\";\nvar wasmJson$5 = {\n\tname: name$5,\n\tdata: data$5,\n\thash: hash$5\n};\n\nconst mutex$3 = new Mutex();\nlet wasmCache$3 = null;\nconst seedBuffer = new ArrayBuffer(8);\nfunction validateSeed(seed) {\n if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n }\n return null;\n}\nfunction writeSeed(arr, low, high) {\n // write in little-endian format\n const buffer = new DataView(arr);\n buffer.setUint32(0, low, true);\n buffer.setUint32(4, high, true);\n}\n/**\n * Calculates xxHash128 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @returns Computed hash as a hexadecimal string\n */\nfunction xxhash128(data, seedLow = 0, seedHigh = 0) {\n if (validateSeed(seedLow)) {\n return Promise.reject(validateSeed(seedLow));\n }\n if (validateSeed(seedHigh)) {\n return Promise.reject(validateSeed(seedHigh));\n }\n if (wasmCache$3 === null) {\n return lockedCreate(mutex$3, wasmJson$5, 16)\n .then((wasm) => {\n wasmCache$3 = wasm;\n writeSeed(seedBuffer, seedLow, seedHigh);\n wasmCache$3.writeMemory(new Uint8Array(seedBuffer));\n return wasmCache$3.calculate(data);\n });\n }\n try {\n writeSeed(seedBuffer, seedLow, seedHigh);\n wasmCache$3.writeMemory(new Uint8Array(seedBuffer));\n const hash = wasmCache$3.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new xxHash128 hash instance\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n */\nfunction createXXHash128(seedLow = 0, seedHigh = 0) {\n if (validateSeed(seedLow)) {\n return Promise.reject(validateSeed(seedLow));\n }\n if (validateSeed(seedHigh)) {\n return Promise.reject(validateSeed(seedHigh));\n }\n return WASMInterface(wasmJson$5, 16).then((wasm) => {\n const instanceBuffer = new ArrayBuffer(8);\n writeSeed(instanceBuffer, seedLow, seedHigh);\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n const obj = {\n init: () => {\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 512,\n digestSize: 16,\n };\n return obj;\n });\n}\n\nvar name$4 = \"ripemd160\";\nvar data$4 = \"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\";\nvar hash$4 = \"c089a7ca\";\nvar wasmJson$4 = {\n\tname: name$4,\n\tdata: data$4,\n\thash: hash$4\n};\n\nconst mutex$2 = new Mutex();\nlet wasmCache$2 = null;\n/**\n * Calculates RIPEMD-160 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction ripemd160(data) {\n if (wasmCache$2 === null) {\n return lockedCreate(mutex$2, wasmJson$4, 20)\n .then((wasm) => {\n wasmCache$2 = wasm;\n return wasmCache$2.calculate(data);\n });\n }\n try {\n const hash = wasmCache$2.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new RIPEMD-160 hash instance\n */\nfunction createRIPEMD160() {\n return WASMInterface(wasmJson$4, 20).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 20,\n };\n return obj;\n });\n}\n\nfunction calculateKeyBuffer(hasher, key) {\n const { blockSize } = hasher;\n const buf = getUInt8Buffer(key);\n if (buf.length > blockSize) {\n hasher.update(buf);\n const uintArr = hasher.digest('binary');\n hasher.init();\n return uintArr;\n }\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n}\nfunction calculateHmac(hasher, key) {\n hasher.init();\n const { blockSize } = hasher;\n const keyBuf = calculateKeyBuffer(hasher, key);\n const keyBuffer = new Uint8Array(blockSize);\n keyBuffer.set(keyBuf);\n const opad = new Uint8Array(blockSize);\n for (let i = 0; i < blockSize; i++) {\n const v = keyBuffer[i];\n opad[i] = v ^ 0x5C;\n keyBuffer[i] = v ^ 0x36;\n }\n hasher.update(keyBuffer);\n const obj = {\n init: () => {\n hasher.init();\n hasher.update(keyBuffer);\n return obj;\n },\n update: (data) => {\n hasher.update(data);\n return obj;\n },\n digest: ((outputType) => {\n const uintArr = hasher.digest('binary');\n hasher.init();\n hasher.update(opad);\n hasher.update(uintArr);\n return hasher.digest(outputType);\n }),\n save: () => {\n throw new Error('save() not supported');\n },\n load: () => {\n throw new Error('load() not supported');\n },\n blockSize: hasher.blockSize,\n digestSize: hasher.digestSize,\n };\n return obj;\n}\n/**\n * Calculates HMAC hash\n * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()\n * @param key Key (string, Buffer or TypedArray)\n */\nfunction createHMAC(hash, key) {\n if (!hash || !hash.then) {\n throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), \"key\").');\n }\n return hash.then((hasher) => calculateHmac(hasher, key));\n}\n\nfunction calculatePBKDF2(digest, salt, iterations, hashLength, outputType) {\n return __awaiter(this, void 0, void 0, function* () {\n const DK = new Uint8Array(hashLength);\n const block1 = new Uint8Array(salt.length + 4);\n const block1View = new DataView(block1.buffer);\n const saltBuffer = getUInt8Buffer(salt);\n const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length);\n block1.set(saltUIntBuffer);\n let destPos = 0;\n const hLen = digest.digestSize;\n const l = Math.ceil(hashLength / hLen);\n let T = null;\n let U = null;\n for (let i = 1; i <= l; i++) {\n block1View.setUint32(salt.length, i);\n digest.init();\n digest.update(block1);\n T = digest.digest('binary');\n U = T.slice();\n for (let j = 1; j < iterations; j++) {\n digest.init();\n digest.update(U);\n U = digest.digest('binary');\n for (let k = 0; k < hLen; k++) {\n T[k] ^= U[k];\n }\n }\n DK.set(T.subarray(0, hashLength - destPos), destPos);\n destPos += hLen;\n }\n if (outputType === 'binary') {\n return DK;\n }\n const digestChars = new Uint8Array(hashLength * 2);\n return getDigestHex(digestChars, DK, hashLength);\n });\n}\nconst validateOptions$2 = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (!options.hashFunction || !options.hashFunction.then) {\n throw new Error('Invalid hash function is provided! Usage: pbkdf2(\"password\", \"salt\", 1000, 32, createSHA1()).');\n }\n if (!Number.isInteger(options.iterations) || options.iterations < 1) {\n throw new Error('Iterations should be a positive number');\n }\n if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {\n throw new Error('Hash length should be a positive number');\n }\n if (options.outputType === undefined) {\n options.outputType = 'hex';\n }\n if (!['hex', 'binary'].includes(options.outputType)) {\n throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);\n }\n};\n/**\n * Generates a new PBKDF2 hash for the supplied password\n */\nfunction pbkdf2(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$2(options);\n const hmac = yield createHMAC(options.hashFunction, options.password);\n return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType);\n });\n}\n\nvar name$3 = \"scrypt\";\nvar data$3 = \"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\";\nvar hash$3 = \"c51b8bf7\";\nvar wasmJson$3 = {\n\tname: name$3,\n\tdata: data$3,\n\thash: hash$3\n};\n\nfunction scryptInternal(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const { costFactor, blockSize, parallelism, hashLength, } = options;\n const SHA256Hasher = createSHA256();\n const blockData = yield pbkdf2({\n password: options.password,\n salt: options.salt,\n iterations: 1,\n hashLength: 128 * blockSize * parallelism,\n hashFunction: SHA256Hasher,\n outputType: 'binary',\n });\n const scryptInterface = yield WASMInterface(wasmJson$3, 0);\n // last block is for storing the temporary vectors\n const VSize = 128 * blockSize * costFactor;\n const XYSize = 256 * blockSize;\n scryptInterface.setMemorySize(blockData.length + VSize + XYSize);\n scryptInterface.writeMemory(blockData, 0);\n // mix blocks\n scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism);\n const expensiveSalt = scryptInterface\n .getMemory()\n .subarray(0, 128 * blockSize * parallelism);\n const outputData = yield pbkdf2({\n password: options.password,\n salt: expensiveSalt,\n iterations: 1,\n hashLength,\n hashFunction: SHA256Hasher,\n outputType: 'binary',\n });\n if (options.outputType === 'hex') {\n const digestChars = new Uint8Array(hashLength * 2);\n return getDigestHex(digestChars, outputData, hashLength);\n }\n // return binary format\n return outputData;\n });\n}\n// eslint-disable-next-line no-bitwise\nconst isPowerOfTwo = (v) => v && !(v & (v - 1));\nconst validateOptions$1 = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (!Number.isInteger(options.blockSize) || options.blockSize < 1) {\n throw new Error('Block size should be a positive number');\n }\n if (!Number.isInteger(options.costFactor)\n || options.costFactor < 2\n || !isPowerOfTwo(options.costFactor)) {\n throw new Error('Cost factor should be a power of 2, greater than 1');\n }\n if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {\n throw new Error('Parallelism should be a positive number');\n }\n if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {\n throw new Error('Hash length should be a positive number.');\n }\n if (options.outputType === undefined) {\n options.outputType = 'hex';\n }\n if (!['hex', 'binary'].includes(options.outputType)) {\n throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);\n }\n};\n/**\n * Calculates hash using the scrypt password-based key derivation function\n * @returns Computed hash as a hexadecimal string or as\n * Uint8Array depending on the outputType option\n */\nfunction scrypt(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$1(options);\n return scryptInternal(options);\n });\n}\n\nvar name$2 = \"bcrypt\";\nvar data$2 = \"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\";\nvar hash$2 = \"497b89b2\";\nvar wasmJson$2 = {\n\tname: name$2,\n\tdata: data$2,\n\thash: hash$2\n};\n\nfunction bcryptInternal(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const { costFactor, password, salt } = options;\n const bcryptInterface = yield WASMInterface(wasmJson$2, 0);\n bcryptInterface.writeMemory(getUInt8Buffer(salt), 0);\n const passwordBuffer = getUInt8Buffer(password);\n bcryptInterface.writeMemory(passwordBuffer, 16);\n const shouldEncode = options.outputType === 'encoded' ? 1 : 0;\n bcryptInterface.getExports().bcrypt(passwordBuffer.length, costFactor, shouldEncode);\n const memory = bcryptInterface.getMemory();\n if (options.outputType === 'encoded') {\n return intArrayToString(memory, 60);\n }\n if (options.outputType === 'hex') {\n const digestChars = new Uint8Array(24 * 2);\n return getDigestHex(digestChars, memory, 24);\n }\n // return binary format\n // the data is copied to allow GC of the original memory buffer\n return memory.slice(0, 24);\n });\n}\nconst validateOptions = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (!Number.isInteger(options.costFactor) || options.costFactor < 4 || options.costFactor > 31) {\n throw new Error('Cost factor should be a number between 4 and 31');\n }\n options.password = getUInt8Buffer(options.password);\n if (options.password.length < 1) {\n throw new Error('Password should be at least 1 byte long');\n }\n if (options.password.length > 72) {\n throw new Error('Password should be at most 72 bytes long');\n }\n options.salt = getUInt8Buffer(options.salt);\n if (options.salt.length !== 16) {\n throw new Error('Salt should be 16 bytes long');\n }\n if (options.outputType === undefined) {\n options.outputType = 'encoded';\n }\n if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {\n throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);\n }\n};\n/**\n * Calculates hash using the bcrypt password-hashing function\n * @returns Computed hash\n */\nfunction bcrypt(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions(options);\n return bcryptInternal(options);\n });\n}\nconst validateHashCharacters = (hash) => {\n if (!/^\\$2[axyb]\\$[0-3][0-9]\\$[./A-Za-z0-9]{53}$/.test(hash)) {\n return false;\n }\n if (hash[4] === '0' && parseInt(hash[5], 10) < 4) {\n return false;\n }\n if (hash[4] === '3' && parseInt(hash[5], 10) > 1) {\n return false;\n }\n return true;\n};\nconst validateVerifyOptions = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (options.hash === undefined || typeof options.hash !== 'string') {\n throw new Error('Hash should be specified');\n }\n if (options.hash.length !== 60) {\n throw new Error('Hash should be 60 bytes long');\n }\n if (!validateHashCharacters(options.hash)) {\n throw new Error('Invalid hash');\n }\n options.password = getUInt8Buffer(options.password);\n if (options.password.length < 1) {\n throw new Error('Password should be at least 1 byte long');\n }\n if (options.password.length > 72) {\n throw new Error('Password should be at most 72 bytes long');\n }\n};\n/**\n * Verifies password using bcrypt password-hashing function\n * @returns True if the encoded hash matches the password\n */\nfunction bcryptVerify(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateVerifyOptions(options);\n const { hash, password } = options;\n const bcryptInterface = yield WASMInterface(wasmJson$2, 0);\n bcryptInterface.writeMemory(getUInt8Buffer(hash), 0);\n const passwordBuffer = getUInt8Buffer(password);\n bcryptInterface.writeMemory(passwordBuffer, 60);\n return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length);\n });\n}\n\nvar name$1 = \"whirlpool\";\nvar data$1 = \"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\";\nvar hash$1 = \"dba12019\";\nvar wasmJson$1 = {\n\tname: name$1,\n\tdata: data$1,\n\thash: hash$1\n};\n\nconst mutex$1 = new Mutex();\nlet wasmCache$1 = null;\n/**\n * Calculates Whirlpool hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction whirlpool(data) {\n if (wasmCache$1 === null) {\n return lockedCreate(mutex$1, wasmJson$1, 64)\n .then((wasm) => {\n wasmCache$1 = wasm;\n return wasmCache$1.calculate(data);\n });\n }\n try {\n const hash = wasmCache$1.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new Whirlpool hash instance\n */\nfunction createWhirlpool() {\n return WASMInterface(wasmJson$1, 64).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 64,\n };\n return obj;\n });\n}\n\nvar name = \"sm3\";\nvar data = \"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\";\nvar hash = \"56515712\";\nvar wasmJson = {\n\tname: name,\n\tdata: data,\n\thash: hash\n};\n\nconst mutex = new Mutex();\nlet wasmCache = null;\n/**\n * Calculates SM3 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sm3(data) {\n if (wasmCache === null) {\n return lockedCreate(mutex, wasmJson, 32)\n .then((wasm) => {\n wasmCache = wasm;\n return wasmCache.calculate(data);\n });\n }\n try {\n const hash = wasmCache.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SM3 hash instance\n */\nfunction createSM3() {\n return WASMInterface(wasmJson, 32).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 32,\n };\n return obj;\n });\n}\n\nexport { adler32, argon2Verify, argon2d, argon2i, argon2id, bcrypt, bcryptVerify, blake2b, blake2s, blake3, crc32, crc32c, createAdler32, createBLAKE2b, createBLAKE2s, createBLAKE3, createCRC32, createCRC32C, createHMAC, createKeccak, createMD4, createMD5, createRIPEMD160, createSHA1, createSHA224, createSHA256, createSHA3, createSHA384, createSHA512, createSM3, createWhirlpool, createXXHash128, createXXHash3, createXXHash32, createXXHash64, keccak, md4, md5, pbkdf2, ripemd160, scrypt, sha1, sha224, sha256, sha3, sha384, sha512, sm3, whirlpool, xxhash128, xxhash3, xxhash32, xxhash64 };\n", "import { argon2id } from \"hash-wasm\";\n\nexport async function HashArgon2idImpl(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n return await argon2id({\n password: password,\n salt: salt,\n iterations: iterations,\n memorySize: memorySize,\n hashLength: hashLength,\n parallelism: 1,\n outputType: \"binary\",\n });\n}\n", "import * as impl from \"#argon2-impl\";\n\nexport async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n return await impl.HashArgon2idImpl(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\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, Context, renderContext } from \"./codec.js\";\n\ndeclare const flavor_AbsoluteTime: unique symbol;\ndeclare const flavor_TalerProtocolTimestamp: unique symbol;\ndeclare const flavor_TalerPreciseTimestamp: unique symbol;\n\nconst opaque_AbsoluteTime: unique symbol = Symbol(\"opaque_AbsoluteTime\");\n\n// FIXME: Make this opaque!\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n\n readonly _flavor?: typeof flavor_AbsoluteTime;\n\n // Make the type opaque, we only want our constructors\n // to able to create an AbsoluteTime value.\n [opaque_AbsoluteTime]: true;\n}\n\nexport interface TalerProtocolTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n readonly _flavor?: typeof flavor_TalerProtocolTimestamp;\n}\n\n/**\n * Precise timestamp, typically used in the wallet-core\n * API but not in other Taler APIs so far.\n */\nexport interface TalerPreciseTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n /**\n * Optional microsecond offset (non-negative integer).\n */\n readonly off_us?: number;\n\n readonly _flavor?: typeof flavor_TalerPreciseTimestamp;\n}\n\nexport namespace TalerPreciseTimestamp {\n export function now(): TalerPreciseTimestamp {\n const absNow = AbsoluteTime.now();\n return AbsoluteTime.toPreciseTimestamp(absNow);\n }\n\n export function round(t: TalerPreciseTimestamp): TalerProtocolTimestamp {\n return {\n t_s: t.t_s,\n };\n }\n\n export function fromSeconds(s: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(s),\n off_us: Math.floor((s - Math.floor(s)) / 1000 / 1000),\n };\n }\n\n export function fromMilliseconds(ms: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(ms / 1000),\n off_us: Math.floor((ms - Math.floor(ms / 1000) * 1000) * 1000),\n };\n }\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toProtocolTimestamp(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 isNever(t: TalerProtocolTimestamp): boolean {\n return t.t_s === \"never\";\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\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\n/**\n * Timeshift in milliseconds.\n */\nlet timeshift = 0;\n\n/**\n * Set timetravel offset in milliseconds.\n *\n * Use carefully and only for testing.\n */\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function toMilliseconds(d: Duration): number {\n if (d.d_ms === \"forever\") {\n return Number.MAX_VALUE;\n }\n return d.d_ms;\n }\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 /**\n * Compare two durations. Returns 0 when equal, -1 when a < b\n * and +1 when a > b.\n */\n export function cmp(d1: Duration, d2: Duration): 1 | 0 | -1 {\n if (d1.d_ms === \"forever\") {\n if (d2.d_ms === \"forever\") {\n return 0;\n }\n return 1;\n }\n if (d2.d_ms === \"forever\") {\n return -1;\n }\n if (d1.d_ms == d2.d_ms) {\n return 0;\n }\n if (d1.d_ms > d2.d_ms) {\n return 1;\n }\n return -1;\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 function fromSpec(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\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: Math.floor(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 fromMilliseconds(ms: number): Duration {\n return {\n d_ms: ms,\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 getStampMsNow(): number {\n return new Date().getTime();\n }\n\n export function getStampMsNever(): number {\n return Number.MAX_SAFE_INTEGER;\n }\n\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromMilliseconds(ms: number): AbsoluteTime {\n return {\n t_ms: ms,\n [opaque_AbsoluteTime]: true,\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, [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\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 isNever(t: AbsoluteTime): boolean {\n return t.t_ms === \"never\";\n }\n\n export function fromProtocolTimestamp(\n t: TalerProtocolTimestamp,\n ): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return {\n t_ms: t.t_s * 1000,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromStampMs(stampMs: number): AbsoluteTime {\n return {\n t_ms: stampMs,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromPreciseTimestamp(t: TalerPreciseTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n const offsetUs = t.off_us ?? 0;\n return {\n t_ms: t.t_s * 1000 + Math.floor(offsetUs / 1000),\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function toStampMs(at: AbsoluteTime): number {\n if (at.t_ms === \"never\") {\n return Number.MAX_SAFE_INTEGER;\n }\n return at.t_ms;\n }\n\n export function toPreciseTimestamp(at: AbsoluteTime): TalerPreciseTimestamp {\n if (at.t_ms == \"never\") {\n return {\n t_s: \"never\",\n };\n }\n const t_s = Math.floor(at.t_ms / 1000);\n const off_us = Math.floor(1000 * (at.t_ms - t_s * 1000));\n return {\n t_s,\n off_us,\n };\n }\n\n export function toProtocolTimestamp(\n at: AbsoluteTime,\n ): 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\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: t1.t_ms + d.d_ms, [opaque_AbsoluteTime]: true };\n }\n\n /**\n * Get the remaining duration until {@param t1}.\n *\n * If {@param t1} already happened, the remaining duration\n * is zero.\n */\n export function remaining(t1: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return Duration.getForever();\n }\n const stampNow = now();\n if (stampNow.t_ms === \"never\") {\n throw Error(\"invariant violated\");\n }\n return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_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\", [opaque_AbsoluteTime]: true };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms), [opaque_AbsoluteTime]: true };\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 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 if (x === undefined) {\n throw Error(`got undefined and expected absolute time at ${renderContext(c)}`);\n }\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms, [opaque_AbsoluteTime]: true };\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 if (x === undefined) {\n throw Error(`got undefined and expected timestamp at ${renderContext(c)}`);\n }\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 protocol timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForPreciseTimestamp: Codec<TalerPreciseTimestamp> = {\n decode(x: any, c?: Context): TalerPreciseTimestamp {\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 throw Error(`expected precise 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 { Amounts, codecForAmountString } from \"./amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecForStringURL,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport {\n CurrencySpecification,\n codecForCurrencySpecificiation,\n codecForEither,\n codecForProduct,\n} from \"./index.js\";\nimport { Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForDuration,\n codecForTimestamp,\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 // The exchange's base URL.\n url: string;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKeyString;\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: EddsaPublicKeyString;\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 // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\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?: InternationalizedString;\n\n // The number of units of the product to deliver to the customer.\n quantity?: Integer;\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?: ImageDataUrl;\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 // The hash of the merchant instance's wire details.\n h_wire: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: TalerProtocolDuration;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: InternationalizedString;\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: string;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: TalerProtocolTimestamp;\n\n // More info about the merchant, see below.\n merchant: MerchantInfo;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: string;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: TalerProtocolTimestamp;\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: ExchangeHandle[];\n\n // List of products that are part of the purchase (see Product).\n products?: Product[];\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: TalerProtocolTimestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // Time when this contract was generated.\n timestamp: TalerProtocolTimestamp;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional, but either fulfillment_url\n // or fulfillment_message must be specified in every\n // contract terms.\n //\n // If a non-unique fulfillment URL is used, a customer can only\n // buy the order once and will be redirected to a previous purchase\n // when trying to buy an order with the same fulfillment URL a second\n // time. This is useful for digital goods that a customer only needs\n // to buy once but should be able to repeatedly download.\n //\n // For orders where the customer is expected to be able to make\n // repeated purchases (for equivalent goods), the fulfillment URL\n // should be made unique for every order. The easiest way to do\n // this is to include a unique order ID in the fulfillment URL.\n //\n // When POSTing to the merchant, the placeholder text \"${ORDER_ID}\"\n // is be replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL). Note that this placeholder can only be used once.\n // Front-ends may use other means to generate a unique fulfillment URL.\n fulfillment_url?: string;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: InternationalizedString;\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: string;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n // Must really be an Object (not a string, integer, float or array).\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\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 * 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 * Canonical, public base URL of the exchange.\n */\n base_url: string;\n\n currency: string;\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 accounts: ExchangeWireAccount[];\n\n wire_fees: { [methodName: string]: WireFeesJson[] };\n\n denominations: DenomGroup[];\n}\n\nexport type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n\nexport interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n\n // XOR of all the SHA-512 hash values of the denominations' public keys\n // in this group. Note that for hashing, the binary format of the\n // public keys is used, and not their base32 encoding.\n hash: HashCodeString;\n}\n\nexport interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignatureString;\n\n // When does the denomination key become valid?\n stamp_start: TalerProtocolTimestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: TalerProtocolTimestamp;\n\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n}\n\nexport type RsaPublicKeySring = string;\nexport type AgeMask = number;\nexport type ImageDataUrl = string;\n\n/**\n * 32-byte value representing a point on Curve25519.\n */\nexport type Cs25519Point = string;\n\nexport interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\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\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 status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\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 RewardPickupGetResponse {\n reward_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 pos_confirmation?: 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 // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected or pending.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Deprecated field use status instead\n // The transfer has been confirmed and registered by the bank.\n // Does not guarantee that the funds have arrived at the exchange already.\n transfer_done: boolean;\n}\n\nexport const codeForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\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\ndeclare const __amount_str: unique symbol;\nexport type AmountString = string & { [__amount_str]: true };\n// export type AmountString = string;\nexport type Base32String = string;\nexport type EddsaSignatureString = string;\nexport type EddsaPublicKeyString = string;\nexport type EddsaPrivateKeyString = 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 codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\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\", codecForAmountString())\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\", codecForAmountString())\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\", codecForAmountString())\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 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\n// FIXME: Validate properly!\nexport const codecForNgDenominations: Codec<DenomGroup> = codecForAny();\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\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 .property(\"accounts\", codecForList(codecForExchangeWireAccount()))\n .property(\"wire_fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .property(\"denominations\", codecForList(codecForNgDenominations))\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 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(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\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 codecForRewardPickupGetResponse =\n (): Codec<RewardPickupGetResponse> =>\n buildCodecForObject<RewardPickupGetResponse>()\n .property(\"reward_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 codecForExchangeWithdrawBatchResponse =\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 .property(\"pos_confirmation\", codecOptional(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 codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\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 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 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\ninterface DepositConfirmationSignature {\n // The EdDSA signature of `TALER_DepositConfirmationPS` using a current\n // `signing key of the exchange <sign-key-priv>` 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: EddsaSignatureString;\n}\n\nexport interface BatchDepositSuccess {\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 // `Public EdDSA key of the exchange <sign-key-pub>` 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: EddsaPublicKeyString;\n\n // Array of deposit confirmation signatures from the exchange\n // Entries must be in the same order the coins were given\n // in the batch deposit request.\n exchange_sig: EddsaSignatureString;\n}\n\nexport const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> =>\n buildCodecForObject<BatchDepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"BatchDepositSuccess\");\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\n/**\n * @deprecated batch deposit should be used.\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 type WireSalt = string;\n\nexport interface ExchangeBatchDepositRequest {\n // The merchant's account details.\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: WireSalt;\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 // The list of coins that are going to be deposited with this Request.\n coins: BatchDepositRequestCoin[];\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 <merchant-pub>`, so that the client can identify the\n // merchant for refund requests.\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 batch-deposit.\n // This might be a refund, auction or escrow policy.\n policy?: any;\n}\n\nexport interface BatchDepositRequestCoin {\n // EdDSA public key of the coin being deposited.\n coin_pub: EddsaPublicKeyString;\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 // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: Amounts;\n\n // Signature over `TALER_DepositRequestPS`, made by the customer with the\n // `coin's private key <coin-priv>`.\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\nexport interface ExchangeRefundRequest {\n // Amount to be refunded, can be a fraction of the\n // coin's total deposit value (including deposit fee);\n // must be larger than the refund fee.\n refund_amount: AmountString;\n\n // SHA-512 hash of the contact of the merchant with the customer.\n h_contract_terms: HashCodeString;\n\n // 64-bit transaction id of the refund transaction between merchant and customer.\n rtransaction_id: number;\n\n // EdDSA public key of the merchant.\n merchant_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the merchant over a\n // TALER_RefundRequestPS with purpose\n // TALER_SIGNATURE_MERCHANT_REFUND\n // affirming the refund.\n merchant_sig: EddsaPublicKeyString;\n}\n\nexport interface ExchangeRefundSuccessResponse {\n // The EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND over\n // a TALER_RecoupRefreshConfirmationPS\n // 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\nexport const codecForExchangeRefundSuccessResponse =\n (): Codec<ExchangeRefundSuccessResponse> =>\n buildCodecForObject<ExchangeRefundSuccessResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .build(\"ExchangeRefundSuccessResponse\");\n\nexport type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n\nexport interface DenyAllAccountRestriction {\n type: \"deny\";\n}\n\n// Accounts interacting with this type of account\n// restriction must have a payto://-URI matching\n// the given regex.\nexport interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: InternationalizedString;\n}\n\nexport interface ExchangeWireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: string;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignatureString;\n\n // Display label wallets should use to show this\n // bank account.\n // Since protocol **v19**.\n bank_label?: string;\n priority?: number;\n}\n\nexport const codecForExchangeWireAccount = (): Codec<ExchangeWireAccount> =>\n buildCodecForObject<ExchangeWireAccount>()\n .property(\"conversion_url\", codecOptional(codecForStringURL()))\n .property(\"credit_restrictions\", codecForList(codecForAny()))\n .property(\"debit_restrictions\", codecForList(codecForAny()))\n .property(\"master_sig\", codecForString())\n .property(\"payto_uri\", codecForString())\n .property(\"bank_label\", codecOptional(codecForString()))\n .property(\"priority\", codecOptional(codecForNumber()))\n .build(\"WireAccount\");\n\nexport type Integer = number;\n\nexport interface BankConversionInfoConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n regional_currency: string;\n\n fiat_currency: string;\n\n // Currency used by this bank.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency_specification: CurrencySpecification;\n}\n\nexport const codecForBankConversionInfoConfig =\n (): Codec<BankConversionInfoConfig> =>\n buildCodecForObject<BankConversionInfoConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"fiat_currency\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .build(\"BankConversionInfoConfig\");\n\nexport interface DenominationExpiredMessage {\n // Taler error code. Note that beyond\n // expiration this message format is also\n // used if the key is not yet valid, or\n // has been revoked.\n code: number;\n\n // Signature by the exchange over a\n // TALER_DenominationExpiredAffirmationPS.\n // Must have purpose TALER_SIGNATURE_EXCHANGE_AFFIRM_DENOM_EXPIRED.\n exchange_sig: EddsaSignatureString;\n\n // Public key of the exchange used to create\n // the 'exchange_sig.\n exchange_pub: EddsaPublicKeyString;\n\n // Hash of the denomination public key that is unknown.\n h_denom_pub: HashCodeString;\n\n // When was the signature created.\n timestamp: TalerProtocolTimestamp;\n\n // What kind of operation was requested that now\n // failed?\n oper: string;\n}\n\nexport const codecForDenominationExpiredMessage = () =>\n buildCodecForObject<DenominationExpiredMessage>()\n .property(\"code\", codecForNumber())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"oper\", codecForString())\n .build(\"DenominationExpiredMessage\");\n\nexport interface CoinHistoryResponse {\n // Current balance of the coin.\n balance: AmountString;\n\n // Hash of the coin's denomination.\n h_denom_pub: HashCodeString;\n\n // Transaction history for the coin.\n history: any[];\n}\n\nexport const codecForCoinHistoryResponse = () =>\n buildCodecForObject<CoinHistoryResponse>()\n .property(\"balance\", codecForAmountString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"history\", codecForAny())\n .build(\"CoinHistoryResponse\");\n", "// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n if (split) {\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n }\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n if (this.p.length)\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this_1 = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, function (offset) { return _this_1.onmember && _this_1.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.o = StrmOpt.call(this, opts, cb) || {};\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_2 = this;\n // enables reuse of this method by AsyncDecompress\n var cb = function () { _this_2.ondata.apply(_this_2, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o, cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o, cb)\n : new this.Z(this.o, cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n Decompress.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this_1 = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this_1.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this_1.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this_1.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this_1.ondata(err, dat, final);\n _this_1.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this_1 = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this_1.d & 1))\n return;\n _this_1.u.splice(-1, 1);\n _this_1.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this_1 = this;\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this_1 = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this_1 = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this_1.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this_1.k[0] == chks_3 && _this_1.c)\n _this_1.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\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 type { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport {\n TalerError,\n base64FromArrayBuffer,\n makeErrorDetail,\n stringToBytes,\n} from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AbsoluteTime, Duration } 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\" | \"PATCH\" | \"PUT\" | \"GET\" | \"DELETE\";\n headers?: { [name: string]: string | undefined };\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 * How to handle redirects.\n * Same semantics as WHATWG fetch.\n */\n redirect?: \"follow\" | \"error\" | \"manual\";\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 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\n/**\n * Read Taler error details from an HTTP response.\n */\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const contentType = httpResponse.headers.get(\"content-type\");\n if (contentType !== \"application/json\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n contentType: contentType || \"<null>\",\n },\n \"Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.\",\n );\n }\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\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 let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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\nexport async function readResponseJsonOrErrorCode<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<{ isError: boolean; response: T }> {\n let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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: !(httpResponse.status >= 200 && httpResponse.status < 300),\n response: parsedResponse,\n };\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 expectSuccessResponseOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (httpResponse.status >= 200 && httpResponse.status <= 299) {\n return;\n }\n const errResp = await readTalerErrorResponse(httpResponse);\n throwUnexpectedRequestError(httpResponse, errResp);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 = AbsoluteTime.fromMilliseconds(expiryDateMs);\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 * Only allow HTTPS connections, not plain http.\n */\n requireTls?: boolean;\n printAsCurl?: 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/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport {\n HttpResponse,\n readResponseJsonOrErrorCode,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http-common.js\";\nimport {\n Codec,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TalerErrorDetail,\n} from \"./index.js\";\n\ntype OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =\n ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;\n\nexport type OperationResult<Body, ErrorEnum, K = never> =\n | OperationOk<Body>\n | OperationAlternative<ErrorEnum, any>\n | OperationFail<ErrorEnum>\n | OperationFailWithBodyOrNever<ErrorEnum, K>;\n\nexport function isOperationOk<T, E>(\n c: OperationResult<T, E>,\n): c is OperationOk<T> {\n return c.type === \"ok\";\n}\n\nexport function isOperationFail<T, E>(\n c: OperationResult<T, E>,\n): c is OperationFail<E> {\n return c.type === \"fail\";\n}\n\n/**\n * successful operation\n */\nexport interface OperationOk<BodyT> {\n type: \"ok\";\n\n /**\n * Parsed response body.\n */\n body: BodyT;\n}\n\n/**\n * unsuccessful operation, see details\n */\nexport interface OperationFail<T> {\n type: \"fail\";\n\n /**\n * Error case (either HTTP status code or TalerErrorCode)\n */\n case: T;\n\n detail: TalerErrorDetail;\n}\n\n/**\n * unsuccessful operation, see body\n */\nexport interface OperationAlternative<T, B> {\n type: \"fail\";\n\n case: T;\n body: B;\n}\n\nexport interface OperationFailWithBody<B> {\n type: \"fail\";\n\n case: keyof B;\n body: B[OperationFailWithBody<B>[\"case\"]];\n}\n\nexport async function opSuccessFromHttp<T>(\n resp: HttpResponse,\n codec: Codec<T>,\n): Promise<OperationOk<T>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"ok\" as const, body };\n}\n\n/**\n * Success case, but instead of the body we're returning a fixed response\n * to the client.\n */\nexport function opFixedSuccess<T>(body: T): OperationOk<T> {\n return { type: \"ok\" as const, body };\n}\n\nexport function opEmptySuccess(resp: HttpResponse): OperationOk<void> {\n return { type: \"ok\" as const, body: void 0 };\n}\n\nexport async function opKnownFailureWithBody<B>(\n case_: keyof B,\n body: B[typeof case_],\n): Promise<OperationFailWithBody<B>> {\n return { type: \"fail\", case: case_, body };\n}\n\nexport async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(\n resp: HttpResponse,\n s: T,\n codec: Codec<B>,\n): Promise<OperationAlternative<T, B>> {\n const body = (await readResponseJsonOrErrorCode(resp, codec)).response;\n return { type: \"fail\", case: s, body };\n}\n\nexport async function opKnownHttpFailure<T extends HttpStatusCode>(\n s: T,\n resp: HttpResponse,\n): Promise<OperationFail<T>> {\n const detail = await readTalerErrorResponse(resp);\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opKnownTalerFailure<T extends TalerErrorCode>(\n s: T,\n detail: TalerErrorDetail,\n): OperationFail<T> {\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: resp.requestUrl,\n requestMethod: resp.requestMethod,\n httpStatusCode: resp.status,\n errorResponse: error,\n },\n `Unexpected HTTP status ${resp.status} in response`,\n );\n}\n\n/**\n * Convenience function to throw an error if the operation is not a success.\n */\nexport function narrowOpSuccessOrThrow<Body, ErrorEnum>(\n opName: string,\n opRes: OperationResult<Body, ErrorEnum>,\n): asserts opRes is OperationOk<Body> {\n if (opRes.type !== \"ok\") {\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR,\n {\n operation: opName,\n error: String(opRes.case),\n detail: \"detail\" in opRes ? opRes.detail : undefined,\n },\n `Operation ${opName} failed: ${String(opRes.case)}`,\n );\n }\n}\n\nexport type ResultByMethod<\n TT extends object,\n p extends keyof TT,\n> = TT[p] extends (...args: any[]) => infer Ret\n ? Ret extends Promise<infer Result>\n ? Result extends OperationResult<any, any>\n ? Result\n : never\n : never //api always use Promises\n : never; //error cases just for functions\n\nexport type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<\n ResultByMethod<TT, p>,\n OperationOk<any>\n>;\n\nexport type RedirectResult = { redirectURL: URL }\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\n/**\n * @fileoverview\n * Construction and parsing of taler:// URIs.\n * Specification: https://lsd.gnunet.org/lsd0006/\n */\n\n/**\n * Imports.\n */\nimport { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { opFixedSuccess, opKnownTalerFailure } from \"./operation.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { URL, URLSearchParams } from \"./url.js\";\n/**\n * A parsed taler URI.\n */\nexport type TalerUri =\n | PayUriResult\n | PayTemplateUriResult\n | DevExperimentUri\n | PayPullUriResult\n | PayPushUriResult\n | BackupRestoreUri\n | RefundUriResult\n | WithdrawUriResult\n | WithdrawExchangeUri\n | AddExchangeUri;\n\ndeclare const __action_str: unique symbol;\nexport type TalerUriString = string & { [__action_str]: true };\n\nexport function codecForTalerUriString(): Codec<TalerUriString> {\n return {\n decode(x: any, c?: Context): TalerUriString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (parseTalerUri(x) === undefined) {\n throw new DecodingError(\n `invalid taler URI at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as TalerUriString;\n },\n };\n}\n\nexport interface PayUriResult {\n type: TalerUriAction.Pay;\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken?: string;\n noncePriv?: string;\n}\n\nexport type TemplateParams = {\n amount?: string;\n summary?: string;\n};\n\nexport interface PayTemplateUriResult {\n type: TalerUriAction.PayTemplate;\n merchantBaseUrl: string;\n templateId: string;\n templateParams: TemplateParams;\n}\n\nexport interface WithdrawUriResult {\n type: TalerUriAction.Withdraw;\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n type: TalerUriAction.Refund;\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface PayPushUriResult {\n type: TalerUriAction.PayPush;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n type: TalerUriAction.PayPull;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n type: TalerUriAction.DevExperiment;\n devExperimentId: string;\n}\n\nexport interface BackupRestoreUri {\n type: TalerUriAction.Restore;\n walletRootPriv: string;\n providers: Array<string>;\n}\n\nexport interface WithdrawExchangeUri {\n type: TalerUriAction.WithdrawExchange;\n exchangeBaseUrl: string;\n exchangePub?: string;\n amount?: AmountString;\n}\n\nexport interface AddExchangeUri {\n type: TalerUriAction.AddExchange;\n exchangeBaseUrl: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"withdraw\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 const result: WithdrawUriResult = {\n type: TalerUriAction.Withdraw,\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n withdrawalOperationId: withdrawId,\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const r = parseWithdrawUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseAddExchangeUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"add-exchange\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 p = [host, ...pathSegments].join(\"/\");\n\n const result: AddExchangeUri = {\n type: TalerUriAction.AddExchange,\n exchangeBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseAddExchangeUri(s: string): AddExchangeUri | undefined {\n const r = parseAddExchangeUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * @deprecated use TalerUriAction\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\nexport enum TalerUriAction {\n Pay = \"pay\",\n Withdraw = \"withdraw\",\n Refund = \"refund\",\n PayPull = \"pay-pull\",\n PayPush = \"pay-push\",\n PayTemplate = \"pay-template\",\n Restore = \"restore\",\n DevExperiment = \"dev-experiment\",\n WithdrawExchange = \"withdraw-exchange\",\n AddExchange = \"add-exchange\",\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\nfunction parseProtoInfoWithError(s: string, action: string) {\n if (\n !s.toLowerCase().startsWith(\"taler://\") &&\n !s.toLowerCase().startsWith(\"taler+http://\")\n ) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return opFixedSuccess({\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n });\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return opFixedSuccess({\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n });\n } else {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n}\n\ntype Parser = (s: string) => TalerUri | undefined;\nconst parsers: { [A in TalerUriAction]: Parser } = {\n [TalerUriAction.Pay]: parsePayUri,\n [TalerUriAction.PayPull]: parsePayPullUri,\n [TalerUriAction.PayPush]: parsePayPushUri,\n [TalerUriAction.PayTemplate]: parsePayTemplateUri,\n [TalerUriAction.Restore]: parseRestoreUri,\n [TalerUriAction.Refund]: parseRefundUri,\n [TalerUriAction.Withdraw]: parseWithdrawUri,\n [TalerUriAction.DevExperiment]: parseDevExperimentUri,\n [TalerUriAction.WithdrawExchange]: parseWithdrawExchangeUri,\n [TalerUriAction.AddExchange]: parseAddExchangeUri,\n};\n\nexport function parseTalerUri(string: string): TalerUri | undefined {\n const https = string.startsWith(\"taler://\");\n const http = string.startsWith(\"taler+http://\");\n if (!https && !http) return undefined;\n const actionStart = https ? 8 : 13;\n const actionEnd = string.indexOf(\"/\", actionStart + 1);\n const action = string.substring(actionStart, actionEnd);\n const found = Object.values(TalerUriAction).find((x) => x === action);\n if (!found) return undefined;\n return parsers[found](string);\n}\n\nexport function stringifyTalerUri(uri: TalerUri): string {\n switch (uri.type) {\n case TalerUriAction.DevExperiment: {\n return stringifyDevExperimentUri(uri);\n }\n case TalerUriAction.Pay: {\n return stringifyPayUri(uri);\n }\n case TalerUriAction.PayPull: {\n return stringifyPayPullUri(uri);\n }\n case TalerUriAction.PayPush: {\n return stringifyPayPushUri(uri);\n }\n case TalerUriAction.PayTemplate: {\n return stringifyPayTemplateUri(uri);\n }\n case TalerUriAction.Restore: {\n return stringifyRestoreUri(uri);\n }\n case TalerUriAction.Refund: {\n return stringifyRefundUri(uri);\n }\n case TalerUriAction.Withdraw: {\n return stringifyWithdrawUri(uri);\n }\n case TalerUriAction.WithdrawExchange: {\n return stringifyWithdrawExchange(uri);\n }\n case TalerUriAction.AddExchange: {\n return stringifyAddExchange(uri);\n }\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 type: TalerUriAction.Pay,\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n uriString: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(uriString, TalerUriAction.PayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi.rest.split(\"?\");\n\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n\n const q = new URLSearchParams(c[1] ?? \"\");\n const params: Record<string, string> = {};\n q.forEach((v, k) => {\n params[k] = v;\n });\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayTemplate,\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPush);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPush,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPull);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPull,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parseWithdrawExchangeUri(\n s: string,\n): WithdrawExchangeUri | undefined {\n const pi = parseProtoInfo(s, \"withdraw-exchange\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 1) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;\n const pathSegments = parts.slice(1, parts.length - 1);\n const hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n const q = new URLSearchParams(c[1] ?? \"\");\n const amount = (q.get(\"a\") ?? undefined) as AmountString | undefined;\n\n return {\n type: TalerUriAction.WithdrawExchange,\n exchangeBaseUrl,\n exchangePub: exchangePub != \"\" ? exchangePub : undefined,\n amount,\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.Refund,\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 parts = c[0].split(\"/\");\n return {\n type: TalerUriAction.DevExperiment,\n devExperimentId: parts[0],\n };\n}\n\nexport function parseRestoreUri(uri: string): BackupRestoreUri | undefined {\n const pi = parseProtoInfo(uri, \"restore\");\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\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<string>();\n parts[1].split(\",\").map((name) => {\n const url = canonicalizeBaseUrl(\n `${pi.innerProto}://${decodeURIComponent(name)}/`,\n );\n providers.push(url);\n });\n return {\n type: TalerUriAction.Restore,\n walletRootPriv,\n providers,\n };\n}\n\n// ================================================\n// To string functions\n// ================================================\n\nexport function stringifyPayUri({\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n}: Omit<PayUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, {\n c: claimToken,\n n: noncePriv,\n });\n return `${proto}://pay/${path}${orderId}/${sessionId}${query}`;\n}\n\nexport function stringifyPayPullUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPullUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://pay-pull/${path}${contractPriv}`;\n}\n\nexport function stringifyPayPushUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPushUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n\n return `${proto}://pay-push/${path}${contractPriv}`;\n}\n\nexport function stringifyRestoreUri({\n providers,\n walletRootPriv,\n}: Omit<BackupRestoreUri, \"type\">): string {\n const list = providers\n .map((url) => `${encodeURIComponent(new URL(url).href)}`)\n .join(\",\");\n return `taler://restore/${walletRootPriv}/${list}`;\n}\n\nexport function stringifyWithdrawExchange({\n exchangeBaseUrl,\n exchangePub,\n amount,\n}: Omit<WithdrawExchangeUri, \"type\">): string {\n const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {\n a: amount,\n });\n return `${proto}://withdraw-exchange/${path}${exchangePub ?? \"\"}${query}`;\n}\n\nexport function stringifyAddExchange({\n exchangeBaseUrl,\n}: Omit<AddExchangeUri, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://add-exchange/${path}`;\n}\n\nexport function stringifyDevExperimentUri({\n devExperimentId,\n}: Omit<DevExperimentUri, \"type\">): string {\n return `taler://dev-experiment/${devExperimentId}`;\n}\n\nexport function stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams,\n}: Omit<PayTemplateUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, templateParams);\n return `${proto}://pay-template/${path}${templateId}${query}`;\n}\n\nexport function stringifyRefundUri({\n merchantBaseUrl,\n orderId,\n}: Omit<RefundUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(merchantBaseUrl);\n return `${proto}://refund/${path}${orderId}/`;\n}\n\nexport function stringifyWithdrawUri({\n bankIntegrationApiBaseUrl,\n withdrawalOperationId,\n}: Omit<WithdrawUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(bankIntegrationApiBaseUrl);\n return `${proto}://withdraw/${path}${withdrawalOperationId}`;\n}\n\n/**\n * Use baseUrl to defined http or https\n * create path using host+port+pathname\n * use params to create a query parameter string or empty\n */\nfunction getUrlInfo(\n baseUrl: string,\n params: Record<string, string | undefined> = {},\n): { proto: string; path: string; query: string } {\n const url = new URL(baseUrl);\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 URL protocol in ${baseUrl}`);\n }\n let path = url.hostname;\n if (url.port) {\n path = path + \":\" + url.port;\n }\n if (url.pathname) {\n path = path + url.pathname;\n }\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n const qp = new URLSearchParams();\n let withParams = false;\n Object.entries(params).forEach(([name, value]) => {\n if (value !== undefined) {\n withParams = true;\n qp.append(name, value);\n }\n });\n const query = withParams ? \"?\" + qp.toString() : \"\";\n\n return { proto, path, query };\n}\n", "import { deprecate } from \"util\";\nimport { codecForAmountString } from \"../amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"../codec.js\";\nimport { PaytoString, codecForPaytoString } from \"../payto.js\";\nimport {\n AmountString,\n InternationalizedString,\n codecForInternationalizedString,\n codecForLocation,\n} from \"../taler-types.js\";\nimport { TalerUriString, codecForTalerUriString } from \"../taleruri.js\";\nimport {\n AbsoluteTime,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n} from \"../time.js\";\n\nexport type UserAndPassword = {\n username: string;\n password: string;\n};\n\nexport type UserAndToken = {\n username: string;\n token: AccessToken;\n};\n\ndeclare const opaque_OfficerAccount: unique symbol;\nexport type LockedAccount = string & { [opaque_OfficerAccount]: true };\n\ndeclare const opaque_OfficerId: unique symbol;\nexport type OfficerId = string & { [opaque_OfficerId]: true };\n\ndeclare const opaque_OfficerSigningKey: unique symbol;\nexport type SigningKey = Uint8Array & { [opaque_OfficerSigningKey]: true };\n\nexport interface OfficerAccount {\n id: OfficerId;\n signingKey: SigningKey;\n}\n\nexport type PaginationParams = {\n /**\n * row identifier as the starting point of the query\n */\n offset?: string;\n /**\n * max number of element in the result response\n * always greater than 0\n */\n limit?: number;\n /**\n * order\n */\n order?: \"asc\" | \"dec\";\n};\n\nexport type LongPollParams = {\n /**\n * milliseconds the server should wait for at least one result to be shown\n */\n timeoutMs?: number;\n};\n///\n/// HASH\n///\n\n// 64-byte hash code.\ntype HashCode = string;\n\ntype PaytoHash = string;\n\ntype AmlOfficerPublicKeyP = string;\n\n// 32-byte hash code.\ntype ShortHashCode = string;\n\n// 16-byte salt.\ntype WireSalt = string;\n\ntype SHA256HashCode = ShortHashCode;\n\ntype SHA512HashCode = HashCode;\n\n// 32-byte nonce value, must only be used once.\ntype CSNonce = string;\n\n// 32-byte nonce value, must only be used once.\ntype RefreshMasterSeed = string;\n\n// 32-byte value representing a point on Curve25519.\ntype Cs25519Point = string;\n\n// 32-byte value representing a scalar multiplier\n// for scalar operations on points on Curve25519.\ntype Cs25519Scalar = string;\n\n///\n/// KEYS\n///\n\n// 16-byte access token used to authorize access.\ntype ClaimToken = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPublicKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPrivateKey = string;\n\n// Edx25519 public keys are points on Curve25519 and represented using the\n// standard 256 bits Ed25519 compact format converted to Crockford\n// Base32.\ntype Edx25519PublicKey = string;\n\n// Edx25519 private keys are always points on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype Edx25519PrivateKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePublicKey = string;\n\n// Point on Curve25519 represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype CsRPublic = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePrivateKey = string;\n\ntype CoinPublicKey = EddsaPublicKey;\n\n// RSA public key converted to Crockford Base32.\ntype RsaPublicKey = string;\n\ntype Integer = number;\n\ntype WireTransferIdentifierRawP = string;\n// Subset of numbers: Integers in the\n// inclusive range 0 .. (2^53 - 1).\ntype SafeUint64 = number;\n\n// The string must be a data URL according to RFC 2397\n// with explicit mediatype and base64 parameters.\n//\n// data:<mediatype>;base64,<data>\n//\n// Supported mediatypes are image/jpeg and image/png.\n// Invalid strings will be rejected by the wallet.\ntype ImageDataUrl = string;\n\ntype WadId = string;\n\ntype Timestamp = TalerProtocolTimestamp;\n\ntype RelativeTime = TalerProtocolDuration;\n\nexport interface LoginToken {\n token: AccessToken;\n expiration: Timestamp;\n}\n\ndeclare const __ac_token: unique symbol;\n/**\n * Use `createAccessToken(string)` function to build one.\n */\nexport type AccessToken = string & {\n [__ac_token]: true;\n};\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n *\n * @deprecated use createRFC8959AccessToken\n * @param token\n * @returns\n */\nexport function createAccessToken(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\") ? token : `secret-token:${token}`\n ) as AccessToken;\n}\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessToken(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\") ? token : `secret-token:${token}`\n ) as AccessToken;\n}\n/**\n * Convert string to access token.\n *\n * @param clientSecret\n * @returns\n */\nexport function createClientSecretAccessToken(\n clientSecret: string,\n): AccessToken {\n return clientSecret as AccessToken;\n}\n\ndeclare const __officer_signature: unique symbol;\nexport type OfficerSignature = string & {\n [__officer_signature]: true;\n};\n\nexport namespace TalerAuthentication {\n export interface TokenRequest {\n // Service-defined scope for the token.\n // Typical scopes would be \"readonly\" or \"readwrite\".\n scope: string;\n\n // Server may impose its own upper bound\n // on the token validity duration\n duration?: RelativeTime;\n\n // Is the token refreshable into a new token during its\n // validity?\n // Refreshable tokens effectively provide indefinite\n // access if they are refreshed in time.\n refreshable?: boolean;\n }\n\n export interface TokenSuccessResponse {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n access_token: AccessToken;\n }\n export interface TokenSuccessResponseMerchant {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n token: AccessToken;\n }\n}\n\n// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html\nexport interface CurrencySpecification {\n // Name of the currency.\n name: string;\n\n // how many digits the user may enter after the decimal_separator\n num_fractional_input_digits: Integer;\n\n // Number of fractional digits to render in normal font and size.\n num_fractional_normal_digits: Integer;\n\n // Number of fractional digits to render always, if needed by\n // padding with zeros.\n num_fractional_trailing_zero_digits: Integer;\n\n // map of powers of 10 to alternative currency names / symbols, must\n // always have an entry under \"0\" that defines the base name,\n // e.g. \"0 => \u20AC\" or \"3 => k\u20AC\". For BTC, would be \"0 => BTC, -3 => mBTC\".\n // Communicates the currency symbol to be used.\n alt_unit_names: { [log10: string]: string };\n}\n\n//FIXME: implement this codec\nexport const codecForAccessToken = codecForString as () => Codec<AccessToken>;\nexport const codecForTokenSuccessResponse =\n (): Codec<TalerAuthentication.TokenSuccessResponse> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponse>()\n .property(\"access_token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponse\");\n\nexport const codecForTokenSuccessResponseMerchant =\n (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()\n .property(\"token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponseMerchant\");\n\nexport const codecForCurrencySpecificiation =\n (): Codec<CurrencySpecification> =>\n buildCodecForObject<CurrencySpecification>()\n .property(\"name\", codecForString())\n .property(\"num_fractional_input_digits\", codecForNumber())\n .property(\"num_fractional_normal_digits\", codecForNumber())\n .property(\"num_fractional_trailing_zero_digits\", codecForNumber())\n .property(\"alt_unit_names\", codecForMap(codecForString()))\n .build(\"CurrencySpecification\");\n\nexport const codecForIntegrationBankConfig =\n (): Codec<TalerCorebankApi.IntegrationConfig> =>\n buildCodecForObject<TalerCorebankApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .build(\"TalerCorebankApi.IntegrationConfig\");\n\nexport const codecForCoreBankConfig = (): Codec<TalerCorebankApi.Config> =>\n buildCodecForObject<TalerCorebankApi.Config>()\n .property(\"name\", codecForConstString(\"libeufin-bank\"))\n .property(\"version\", codecForString())\n .property(\"bank_name\", codecForString())\n .property(\"allow_conversion\", codecForBoolean())\n .property(\"allow_registrations\", codecForBoolean())\n .property(\"allow_deletions\", codecForBoolean())\n .property(\"allow_edit_name\", codecForBoolean())\n .property(\"allow_edit_cashout_payto_uri\", codecForBoolean())\n .property(\"default_debit_threshold\", codecForAmountString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"supported_tan_channels\",\n codecForList(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\"wire_type\", codecForString())\n .build(\"TalerCorebankApi.Config\");\n\n//FIXME: implement this codec\nexport const codecForURN = codecForString;\n\nexport const codecForExchangeConfigInfo =\n (): Codec<TalerMerchantApi.ExchangeConfigInfo> =>\n buildCodecForObject<TalerMerchantApi.ExchangeConfigInfo>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"master_pub\", codecForString())\n .build(\"TalerMerchantApi.ExchangeConfigInfo\");\n\nexport const codecForMerchantConfig =\n (): Codec<TalerMerchantApi.VersionResponse> =>\n buildCodecForObject<TalerMerchantApi.VersionResponse>()\n .property(\"name\", codecForConstString(\"taler-merchant\"))\n .property(\"currency\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currencies\", codecForMap(codecForCurrencySpecificiation()))\n .property(\"exchanges\", codecForList(codecForExchangeConfigInfo()))\n .build(\"TalerMerchantApi.VersionResponse\");\n\nexport const codecForClaimResponse =\n (): Codec<TalerMerchantApi.ClaimResponse> =>\n buildCodecForObject<TalerMerchantApi.ClaimResponse>()\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.ClaimResponse\");\n\nexport const codecForPaymentResponse =\n (): Codec<TalerMerchantApi.PaymentResponse> =>\n buildCodecForObject<TalerMerchantApi.PaymentResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForStatusPaid = (): Codec<TalerMerchantApi.StatusPaid> =>\n buildCodecForObject<TalerMerchantApi.StatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refunded\", codecForBoolean())\n .property(\"type\", codecForConstString(\"paid\"))\n .build(\"TalerMerchantApi.StatusPaid\");\n\nexport const codecForStatusGoto =\n (): Codec<TalerMerchantApi.StatusGotoResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusGotoResponse>()\n .property(\"public_reorder_url\", codecForURL())\n .property(\"type\", codecForConstString(\"goto\"))\n .build(\"TalerMerchantApi.StatusGotoResponse\");\n\nexport const codecForStatusStatusUnpaid =\n (): Codec<TalerMerchantApi.StatusUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusUnpaidResponse>()\n .property(\"type\", codecForConstString(\"unpaid\"))\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForPaidRefundStatusResponse =\n (): Codec<TalerMerchantApi.PaidRefundStatusResponse> =>\n buildCodecForObject<TalerMerchantApi.PaidRefundStatusResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"refunded\", codecForBoolean())\n .build(\"TalerMerchantApi.PaidRefundStatusResponse\");\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse =\n (): Codec<TalerMerchantApi.AbortResponse> =>\n buildCodecForObject<TalerMerchantApi.AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForWalletRefundResponse =\n (): Codec<TalerMerchantApi.WalletRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.WalletRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantCoinRefundStatus\");\n\nexport const codecForQueryInstancesResponse =\n (): Codec<TalerMerchantApi.QueryInstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.QueryInstancesResponse>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"merchant_pub\", codecForString())\n .property(\"address\", codecForLocation())\n .property(\"jurisdiction\", codecForLocation())\n .property(\"use_stefan\", codecForBoolean())\n .property(\"default_wire_transfer_delay\", codecForDuration)\n .property(\"default_pay_delay\", codecForDuration)\n .property(\n \"auth\",\n buildCodecForObject<{\n method: \"external\" | \"token\";\n }>()\n .property(\n \"method\",\n codecForEither(\n codecForConstString(\"token\"),\n codecForConstString(\"external\"),\n ),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse.auth\"),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse\");\n\nexport const codecForAccountKycRedirects =\n (): Codec<TalerMerchantApi.AccountKycRedirects> =>\n buildCodecForObject<TalerMerchantApi.AccountKycRedirects>()\n .property(\n \"pending_kycs\",\n codecForList(codecForMerchantAccountKycRedirect()),\n )\n .property(\"timeout_kycs\", codecForList(codecForExchangeKycTimeout()))\n\n .build(\"TalerMerchantApi.AccountKycRedirects\");\n\nexport const codecForMerchantAccountKycRedirect =\n (): Codec<TalerMerchantApi.MerchantAccountKycRedirect> =>\n buildCodecForObject<TalerMerchantApi.MerchantAccountKycRedirect>()\n .property(\"kyc_url\", codecForURL())\n .property(\"aml_status\", codecForNumber())\n .property(\"exchange_url\", codecForURL())\n .property(\"payto_uri\", codecForPaytoString())\n .build(\"TalerMerchantApi.MerchantAccountKycRedirect\");\n\nexport const codecForExchangeKycTimeout =\n (): Codec<TalerMerchantApi.ExchangeKycTimeout> =>\n buildCodecForObject<TalerMerchantApi.ExchangeKycTimeout>()\n .property(\"exchange_url\", codecForURL())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .build(\"TalerMerchantApi.ExchangeKycTimeout\");\n\nexport const codecForAccountAddResponse =\n (): Codec<TalerMerchantApi.AccountAddResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountAddResponse>()\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .build(\"TalerMerchantApi.AccountAddResponse\");\n\nexport const codecForAccountsSummaryResponse =\n (): Codec<TalerMerchantApi.AccountsSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountsSummaryResponse>()\n .property(\"accounts\", codecForList(codecForBankAccountSummaryEntry()))\n .build(\"TalerMerchantApi.AccountsSummaryResponse\");\n\nexport const codecForBankAccountSummaryEntry =\n (): Codec<TalerMerchantApi.BankAccountSummaryEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountSummaryEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .build(\"TalerMerchantApi.BankAccountSummaryEntry\");\n\nexport const codecForBankAccountEntry =\n (): Codec<TalerMerchantApi.BankAccountEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .property(\"credit_facade_url\", codecOptional(codecForURL()))\n .property(\"active\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.BankAccountEntry\");\n\nexport const codecForInventorySummaryResponse =\n (): Codec<TalerMerchantApi.InventorySummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.InventorySummaryResponse>()\n .property(\"products\", codecForList(codecForInventoryEntry()))\n .build(\"TalerMerchantApi.InventorySummaryResponse\");\n\nexport const codecForInventoryEntry =\n (): Codec<TalerMerchantApi.InventoryEntry> =>\n buildCodecForObject<TalerMerchantApi.InventoryEntry>()\n .property(\"product_id\", codecForString())\n .property(\"product_serial\", codecForNumber())\n .build(\"TalerMerchantApi.InventoryEntry\");\n\nexport const codecForProductDetail =\n (): Codec<TalerMerchantApi.ProductDetail> =>\n buildCodecForObject<TalerMerchantApi.ProductDetail>()\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"unit\", codecForString())\n .property(\"price\", codecForAmountString())\n .property(\"image\", codecForString())\n .property(\"taxes\", codecForList(codecForTax()))\n .property(\"address\", codecForLocation())\n .property(\"next_restock\", codecForTimestamp)\n .property(\"total_stock\", codecForNumber())\n .property(\"total_sold\", codecForNumber())\n .property(\"total_lost\", codecForNumber())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"TalerMerchantApi.ProductDetail\");\n\nexport const codecForTax = (): Codec<TalerMerchantApi.Tax> =>\n buildCodecForObject<TalerMerchantApi.Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForAmountString())\n .build(\"TalerMerchantApi.Tax\");\n\nexport const codecForPostOrderResponse =\n (): Codec<TalerMerchantApi.PostOrderResponse> =>\n buildCodecForObject<TalerMerchantApi.PostOrderResponse>()\n .property(\"order_id\", codecForString())\n .property(\"token\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.PostOrderResponse\");\n\nexport const codecForOutOfStockResponse =\n (): Codec<TalerMerchantApi.OutOfStockResponse> =>\n buildCodecForObject<TalerMerchantApi.OutOfStockResponse>()\n .property(\"product_id\", codecForString())\n .property(\"available_quantity\", codecForNumber())\n .property(\"requested_quantity\", codecForNumber())\n .property(\"restock_expected\", codecForTimestamp)\n .build(\"TalerMerchantApi.OutOfStockResponse\");\n\nexport const codecForOrderHistory = (): Codec<TalerMerchantApi.OrderHistory> =>\n buildCodecForObject<TalerMerchantApi.OrderHistory>()\n .property(\"orders\", codecForList(codecForOrderHistoryEntry()))\n .build(\"TalerMerchantApi.OrderHistory\");\n\nexport const codecForOrderHistoryEntry =\n (): Codec<TalerMerchantApi.OrderHistoryEntry> =>\n buildCodecForObject<TalerMerchantApi.OrderHistoryEntry>()\n .property(\"order_id\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"refundable\", codecForBoolean())\n .property(\"paid\", codecForBoolean())\n .build(\"TalerMerchantApi.OrderHistoryEntry\");\n\nexport const codecForMerchant = (): Codec<TalerMerchantApi.Merchant> =>\n buildCodecForObject<TalerMerchantApi.Merchant>()\n .property(\"name\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"TalerMerchantApi.MerchantInfo\");\n\nexport const codecForExchange = (): Codec<TalerMerchantApi.Exchange> =>\n buildCodecForObject<TalerMerchantApi.Exchange>()\n .property(\"master_pub\", codecForString())\n .property(\"priority\", codecForNumber())\n .property(\"url\", codecForString())\n .build(\"TalerMerchantApi.Exchange\");\n\nexport const codecForContractTerms =\n (): Codec<TalerMerchantApi.ContractTerms> =>\n buildCodecForObject<TalerMerchantApi.ContractTerms>()\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(\n \"summary_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"merchant\", codecForMerchant())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchange()))\n .property(\"products\", codecForList(codecForProduct()))\n .property(\"extra\", codecForAny())\n .build(\"TalerMerchantApi.ContractTerms\");\n\nexport const codecForProduct = (): Codec<TalerMerchantApi.Product> =>\n buildCodecForObject<TalerMerchantApi.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(codecForAmountString()))\n .property(\"image\", codecOptional(codecForString()))\n .property(\"taxes\", codecOptional(codecForList(codecForTax())))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .build(\"TalerMerchantApi.Product\");\n\nexport const codecForCheckPaymentPaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentPaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentPaidResponse>()\n .property(\"order_status\", codecForConstString(\"paid\"))\n .property(\"refunded\", codecForBoolean())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"wired\", codecForBoolean())\n .property(\"deposit_total\", codecForAmountString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"wire_reports\", codecForList(codecForTransactionWireReport()))\n .property(\"wire_details\", codecForList(codecForTransactionWireTransfer()))\n .property(\"refund_details\", codecForList(codecForRefundDetails()))\n .property(\"order_status_url\", codecForURL())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentUnpaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentUnpaidResponse>()\n .property(\"order_status\", codecForConstString(\"unpaid\"))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .property(\"creation_time\", codecForTimestamp)\n .property(\"summary\", codecForString())\n .property(\"total_amount\", codecForAmountString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"already_paid_fulfillment_url\", codecOptional(codecForString()))\n .property(\"order_status_url\", codecForString())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentClaimedResponse =\n (): Codec<TalerMerchantApi.CheckPaymentClaimedResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentClaimedResponse>()\n .property(\"order_status\", codecForConstString(\"claimed\"))\n .property(\"contract_terms\", codecForContractTerms())\n .build(\"TalerMerchantApi.CheckPaymentClaimedResponse\");\n\nexport const codecForMerchantOrderPrivateStatusResponse =\n (): Codec<TalerMerchantApi.MerchantOrderStatusResponse> =>\n buildCodecForUnion<TalerMerchantApi.MerchantOrderStatusResponse>()\n .discriminateOn(\"order_status\")\n .alternative(\"paid\", codecForCheckPaymentPaidResponse())\n .alternative(\"unpaid\", codecForCheckPaymentUnpaidResponse())\n .alternative(\"claimed\", codecForCheckPaymentClaimedResponse())\n .build(\"TalerMerchantApi.MerchantOrderStatusResponse\");\n\nexport const codecForRefundDetails =\n (): Codec<TalerMerchantApi.RefundDetails> =>\n buildCodecForObject<TalerMerchantApi.RefundDetails>()\n .property(\"reason\", codecForString())\n .property(\"pending\", codecForBoolean())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .build(\"TalerMerchantApi.RefundDetails\");\n\nexport const codecForTransactionWireTransfer =\n (): Codec<TalerMerchantApi.TransactionWireTransfer> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireTransfer>()\n .property(\"exchange_url\", codecForURL())\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"confirmed\", codecForBoolean())\n .build(\"TalerMerchantApi.TransactionWireTransfer\");\n\nexport const codecForTransactionWireReport =\n (): Codec<TalerMerchantApi.TransactionWireReport> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireReport>()\n .property(\"code\", codecForNumber())\n .property(\"hint\", codecForString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"coin_pub\", codecForString())\n .build(\"TalerMerchantApi.TransactionWireReport\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<TalerMerchantApi.MerchantRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.MerchantRefundResponse>()\n .property(\"taler_refund_uri\", codecForTalerUriString())\n .property(\"h_contract\", codecForString())\n .build(\"TalerMerchantApi.MerchantRefundResponse\");\n\nexport const codecForTansferList = (): Codec<TalerMerchantApi.TransferList> =>\n buildCodecForObject<TalerMerchantApi.TransferList>()\n .property(\"transfers\", codecForList(codecForTransferDetails()))\n .build(\"TalerMerchantApi.TransferList\");\n\nexport const codecForTransferDetails =\n (): Codec<TalerMerchantApi.TransferDetails> =>\n buildCodecForObject<TalerMerchantApi.TransferDetails>()\n .property(\"credit_amount\", codecForAmountString())\n .property(\"wtid\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"exchange_url\", codecForURL())\n .property(\"transfer_serial_id\", codecForNumber())\n .property(\"execution_time\", codecOptional(codecForTimestamp))\n .property(\"verified\", codecOptional(codecForBoolean()))\n .property(\"confirmed\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.TransferDetails\");\n\nexport const codecForOtpDeviceSummaryResponse =\n (): Codec<TalerMerchantApi.OtpDeviceSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceSummaryResponse>()\n .property(\"otp_devices\", codecForList(codecForOtpDeviceEntry()))\n .build(\"TalerMerchantApi.OtpDeviceSummaryResponse\");\n\nexport const codecForOtpDeviceEntry =\n (): Codec<TalerMerchantApi.OtpDeviceEntry> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceEntry>()\n .property(\"otp_device_id\", codecForString())\n .property(\"device_description\", codecForString())\n .build(\"TalerMerchantApi.OtpDeviceEntry\");\n\nexport const codecForOtpDeviceDetails =\n (): Codec<TalerMerchantApi.OtpDeviceDetails> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceDetails>()\n .property(\"device_description\", codecForString())\n .property(\"otp_algorithm\", codecForNumber())\n .property(\"otp_ctr\", codecOptional(codecForNumber()))\n .property(\"otp_timestamp\", codecForNumber())\n .property(\"otp_code\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.OtpDeviceDetails\");\n\nexport const codecForTemplateSummaryResponse =\n (): Codec<TalerMerchantApi.TemplateSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.TemplateSummaryResponse>()\n .property(\"templates\", codecForList(codecForTemplateEntry()))\n .build(\"TalerMerchantApi.TemplateSummaryResponse\");\n\nexport const codecForTemplateEntry =\n (): Codec<TalerMerchantApi.TemplateEntry> =>\n buildCodecForObject<TalerMerchantApi.TemplateEntry>()\n .property(\"template_id\", codecForString())\n .property(\"template_description\", codecForString())\n .build(\"TalerMerchantApi.TemplateEntry\");\n\nexport const codecForTemplateDetails =\n (): Codec<TalerMerchantApi.TemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateDetails>()\n .property(\"template_description\", codecForString())\n .property(\"otp_id\", codecOptional(codecForString()))\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.TemplateDetails\");\n\nexport const codecForTemplateContractDetails =\n (): Codec<TalerMerchantApi.TemplateContractDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetails>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecForNumber())\n .property(\"pay_duration\", codecForDuration)\n .build(\"TalerMerchantApi.TemplateContractDetails\");\n\nexport const codecForTemplateContractDetailsDefaults =\n (): Codec<TalerMerchantApi.TemplateContractDetailsDefaults> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetailsDefaults>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .property(\"pay_duration\", codecOptional(codecForDuration))\n .build(\"TalerMerchantApi.TemplateContractDetailsDefaults\");\n\nexport const codecForWalletTemplateDetails =\n (): Codec<TalerMerchantApi.WalletTemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.WalletTemplateDetails>()\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.WalletTemplateDetails\");\n\nexport const codecForWebhookSummaryResponse =\n (): Codec<TalerMerchantApi.WebhookSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.WebhookSummaryResponse>()\n .property(\"webhooks\", codecForList(codecForWebhookEntry()))\n .build(\"TalerMerchantApi.WebhookSummaryResponse\");\n\nexport const codecForWebhookEntry = (): Codec<TalerMerchantApi.WebhookEntry> =>\n buildCodecForObject<TalerMerchantApi.WebhookEntry>()\n .property(\"webhook_id\", codecForString())\n .property(\"event_type\", codecForString())\n .build(\"TalerMerchantApi.WebhookEntry\");\n\nexport const codecForWebhookDetails =\n (): Codec<TalerMerchantApi.WebhookDetails> =>\n buildCodecForObject<TalerMerchantApi.WebhookDetails>()\n .property(\"event_type\", codecForString())\n .property(\"url\", codecForString())\n .property(\"http_method\", codecForString())\n .property(\"header_template\", codecOptional(codecForString()))\n .property(\"body_template\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.WebhookDetails\");\n\nexport const codecForTokenFamilyKind =\n (): Codec<TalerMerchantApi.TokenFamilyKind> =>\n codecForEither(\n codecForConstString(\"discount\"),\n codecForConstString(\"subscription\"),\n ) as any; //FIXME: create a codecForEnum\nexport const codecForTokenFamilyDetails =\n (): Codec<TalerMerchantApi.TokenFamilyDetails> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilyDetails>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"duration\", codecForDuration)\n .property(\"kind\", codecForTokenFamilyKind())\n .property(\"issued\", codecForNumber())\n .property(\"redeemed\", codecForNumber())\n .build(\"TalerMerchantApi.TokenFamilyDetails\");\n\nexport const codecForTokenFamiliesList =\n (): Codec<TalerMerchantApi.TokenFamiliesList> =>\n buildCodecForObject<TalerMerchantApi.TokenFamiliesList>()\n .property(\"token_families\", codecForList(codecForTokenFamilySummary()))\n .build(\"TalerMerchantApi.TokenFamiliesList\");\n\nexport const codecForTokenFamilySummary =\n (): Codec<TalerMerchantApi.TokenFamilySummary> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilySummary>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"kind\", codecForTokenFamilyKind())\n .build(\"TalerMerchantApi.TokenFamilySummary\");\n\nexport const codecForInstancesResponse =\n (): Codec<TalerMerchantApi.InstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.InstancesResponse>()\n .property(\"instances\", codecForList(codecForInstance()))\n .build(\"TalerMerchantApi.InstancesResponse\");\n\nexport const codecForInstance = (): Codec<TalerMerchantApi.Instance> =>\n buildCodecForObject<TalerMerchantApi.Instance>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"id\", codecForString())\n .property(\"merchant_pub\", codecForString())\n .property(\"payment_targets\", codecForList(codecForString()))\n .property(\"deleted\", codecForBoolean())\n .build(\"TalerMerchantApi.Instance\");\n\nexport const codecForExchangeConfig =\n (): Codec<TalerExchangeApi.ExchangeVersionResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeVersionResponse>()\n .property(\"version\", codecForString())\n .property(\"name\", codecForConstString(\"taler-exchange\"))\n .property(\"implementation\", codecOptional(codecForURN()))\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"supported_kyc_requirements\", codecForList(codecForString()))\n .build(\"TalerExchangeApi.ExchangeVersionResponse\");\n\nexport const codecForExchangeKeys =\n (): Codec<TalerExchangeApi.ExchangeKeysResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeKeysResponse>()\n .property(\"version\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"TalerExchangeApi.ExchangeKeysResponse\");\n\nconst codecForBalance = (): Codec<TalerCorebankApi.Balance> =>\n buildCodecForObject<TalerCorebankApi.Balance>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"credit_debit_indicator\",\n codecForEither(\n codecForConstString(\"credit\"),\n codecForConstString(\"debit\"),\n ),\n )\n .build(\"TalerCorebankApi.Balance\");\n\nconst codecForPublicAccount = (): Codec<TalerCorebankApi.PublicAccount> =>\n buildCodecForObject<TalerCorebankApi.PublicAccount>()\n .property(\"username\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.PublicAccount\");\n\nexport const codecForPublicAccountsResponse =\n (): Codec<TalerCorebankApi.PublicAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.PublicAccountsResponse>()\n .property(\"public_accounts\", codecForList(codecForPublicAccount()))\n .build(\"TalerCorebankApi.PublicAccountsResponse\");\n\nexport const codecForAccountMinimalData =\n (): Codec<TalerCorebankApi.AccountMinimalData> =>\n buildCodecForObject<TalerCorebankApi.AccountMinimalData>()\n .property(\"username\", codecForString())\n .property(\"name\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"balance\", codecForBalance())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.AccountMinimalData\");\n\nexport const codecForListBankAccountsResponse =\n (): Codec<TalerCorebankApi.ListBankAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.ListBankAccountsResponse>()\n .property(\"accounts\", codecForList(codecForAccountMinimalData()))\n .build(\"TalerCorebankApi.ListBankAccountsResponse\");\n\nexport const codecForAccountData = (): Codec<TalerCorebankApi.AccountData> =>\n buildCodecForObject<TalerCorebankApi.AccountData>()\n .property(\"name\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"contact_data\", codecOptional(codecForChallengeContactData()))\n .property(\"cashout_payto_uri\", codecOptional(codecForPaytoString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"tan_channel\",\n codecOptional(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountData\");\n\nexport const codecForChallengeContactData =\n (): Codec<TalerCorebankApi.ChallengeContactData> =>\n buildCodecForObject<TalerCorebankApi.ChallengeContactData>()\n .property(\"email\", codecOptional(codecForString()))\n .property(\"phone\", codecOptional(codecForString()))\n .build(\"TalerCorebankApi.ChallengeContactData\");\n\nexport const codecForWithdrawalPublicInfo =\n (): Codec<TalerCorebankApi.WithdrawalPublicInfo> =>\n buildCodecForObject<TalerCorebankApi.WithdrawalPublicInfo>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"username\", codecForString())\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\n \"selected_exchange_account\",\n codecOptional(codecForPaytoString()),\n )\n .build(\"TalerCorebankApi.WithdrawalPublicInfo\");\n\nexport const codecForBankAccountTransactionsResponse =\n (): Codec<TalerCorebankApi.BankAccountTransactionsResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionsResponse>()\n .property(\n \"transactions\",\n codecForList(codecForBankAccountTransactionInfo()),\n )\n .build(\"TalerCorebankApi.BankAccountTransactionsResponse\");\n\nexport const codecForBankAccountTransactionInfo =\n (): Codec<TalerCorebankApi.BankAccountTransactionInfo> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionInfo>()\n .property(\"creditor_payto_uri\", codecForPaytoString())\n .property(\"debtor_payto_uri\", codecForPaytoString())\n .property(\"amount\", codecForAmountString())\n .property(\n \"direction\",\n codecForEither(\n codecForConstString(\"debit\"),\n codecForConstString(\"credit\"),\n ),\n )\n .property(\"subject\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"date\", codecForTimestamp)\n .build(\"TalerCorebankApi.BankAccountTransactionInfo\");\n\nexport const codecForCreateTransactionResponse =\n (): Codec<TalerCorebankApi.CreateTransactionResponse> =>\n buildCodecForObject<TalerCorebankApi.CreateTransactionResponse>()\n .property(\"row_id\", codecForNumber())\n .build(\"TalerCorebankApi.CreateTransactionResponse\");\n\nexport const codecForRegisterAccountResponse =\n (): Codec<TalerCorebankApi.RegisterAccountResponse> =>\n buildCodecForObject<TalerCorebankApi.RegisterAccountResponse>()\n .property(\"internal_payto_uri\", codecForPaytoString())\n .build(\"TalerCorebankApi.RegisterAccountResponse\");\n\nexport const codecForBankAccountCreateWithdrawalResponse =\n (): Codec<TalerCorebankApi.BankAccountCreateWithdrawalResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountCreateWithdrawalResponse>()\n .property(\"taler_withdraw_uri\", codecForTalerUriString())\n .property(\"withdrawal_id\", codecForString())\n .build(\"TalerCorebankApi.BankAccountCreateWithdrawalResponse\");\n\nexport const codecForCashoutPending =\n (): Codec<TalerCorebankApi.CashoutResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutResponse>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutPending\");\n\nexport const codecForCashoutConversionResponse =\n (): Codec<TalerBankConversionApi.CashoutConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashoutConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashoutConversionResponse\");\n\nexport const codecForCashinConversionResponse =\n (): Codec<TalerBankConversionApi.CashinConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashinConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashinConversionResponse\");\n\nexport const codecForCashouts = (): Codec<TalerCorebankApi.Cashouts> =>\n buildCodecForObject<TalerCorebankApi.Cashouts>()\n .property(\"cashouts\", codecForList(codecForCashoutInfo()))\n .build(\"TalerCorebankApi.Cashouts\");\n\nexport const codecForCashoutInfo = (): Codec<TalerCorebankApi.CashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.CashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutInfo\");\n\nexport const codecForGlobalCashouts =\n (): Codec<TalerCorebankApi.GlobalCashouts> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashouts>()\n .property(\"cashouts\", codecForList(codecForGlobalCashoutInfo()))\n .build(\"TalerCorebankApi.GlobalCashouts\");\n\nexport const codecForGlobalCashoutInfo =\n (): Codec<TalerCorebankApi.GlobalCashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .property(\"username\", codecForString())\n .build(\"TalerCorebankApi.GlobalCashoutInfo\");\n\nexport const codecForCashoutStatusResponse =\n (): Codec<TalerCorebankApi.CashoutStatusResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutStatusResponse>()\n .property(\"amount_debit\", codecForAmountString())\n .property(\"amount_credit\", codecForAmountString())\n .property(\"subject\", codecForString())\n .property(\"creation_time\", codecForTimestamp)\n .build(\"TalerCorebankApi.CashoutStatusResponse\");\n\nexport const codecForConversionRatesResponse =\n (): Codec<TalerCorebankApi.ConversionRatesResponse> =>\n buildCodecForObject<TalerCorebankApi.ConversionRatesResponse>()\n .property(\"buy_at_ratio\", codecForDecimalNumber())\n .property(\"buy_in_fee\", codecForDecimalNumber())\n .property(\"sell_at_ratio\", codecForDecimalNumber())\n .property(\"sell_out_fee\", codecForDecimalNumber())\n .build(\"TalerCorebankApi.ConversionRatesResponse\");\n\nexport const codecForMonitorResponse =\n (): Codec<TalerCorebankApi.MonitorResponse> =>\n buildCodecForUnion<TalerCorebankApi.MonitorResponse>()\n .discriminateOn(\"type\")\n .alternative(\"no-conversions\", codecForMonitorNoConversion())\n .alternative(\"with-conversions\", codecForMonitorWithCashout())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForMonitorNoConversion =\n (): Codec<TalerCorebankApi.MonitorNoConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorNoConversion>()\n .property(\"type\", codecForConstString(\"no-conversions\"))\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorJustPayouts\");\n\nexport const codecForMonitorWithCashout =\n (): Codec<TalerCorebankApi.MonitorWithConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorWithConversion>()\n .property(\"type\", codecForConstString(\"with-conversions\"))\n .property(\"cashinCount\", codecForNumber())\n .property(\"cashinFiatVolume\", codecForAmountString())\n .property(\"cashinRegionalVolume\", codecForAmountString())\n .property(\"cashoutCount\", codecForNumber())\n .property(\"cashoutFiatVolume\", codecForAmountString())\n .property(\"cashoutRegionalVolume\", codecForAmountString())\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorWithCashout\");\n\nexport const codecForBankVersion =\n (): Codec<TalerBankIntegrationApi.BankVersion> =>\n buildCodecForObject<TalerBankIntegrationApi.BankVersion>()\n .property(\"currency\", codecForCurrencyName())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForLibtoolVersion())\n .build(\"TalerBankIntegrationApi.BankVersion\");\n\nexport const codecForBankWithdrawalOperationStatus =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"sender_wire\", codecOptional(codecForPaytoString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .property(\"wire_types\", codecForList(codecForString()))\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\"selected_exchange_account\", codecOptional(codecForString()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationStatus\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationPostResponse\");\n\nexport const codecForRevenueConfig = (): Codec<TalerRevenueApi.RevenueConfig> =>\n buildCodecForObject<TalerRevenueApi.RevenueConfig>()\n .property(\"name\", codecForConstString(\"taler-revenue\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"TalerRevenueApi.RevenueConfig\");\n\nexport const codecForRevenueIncomingHistory =\n (): Codec<TalerRevenueApi.RevenueIncomingHistory> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForRevenueIncomingBankTransaction()),\n )\n .build(\"TalerRevenueApi.MerchantIncomingHistory\");\n\nexport const codecForRevenueIncomingBankTransaction =\n (): Codec<TalerRevenueApi.RevenueIncomingBankTransaction> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"row_id\", codecForNumber())\n .property(\"subject\", codecForString())\n .build(\"TalerRevenueApi.RevenueIncomingBankTransaction\");\n\nexport const codecForTransferResponse =\n (): Codec<TalerWireGatewayApi.TransferResponse> =>\n buildCodecForObject<TalerWireGatewayApi.TransferResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.TransferResponse\");\n\nexport const codecForIncomingHistory =\n (): Codec<TalerWireGatewayApi.IncomingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForIncomingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.IncomingHistory\");\n\nexport const codecForIncomingBankTransaction =\n (): Codec<TalerWireGatewayApi.IncomingBankTransaction> =>\n buildCodecForUnion<TalerWireGatewayApi.IncomingBankTransaction>()\n .discriminateOn(\"type\")\n .alternative(\"RESERVE\", codecForIncomingReserveTransaction())\n .alternative(\"WAD\", codecForIncomingWadTransaction())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForIncomingReserveTransaction =\n (): Codec<TalerWireGatewayApi.IncomingReserveTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingReserveTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"reserve_pub\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"RESERVE\"))\n .build(\"TalerWireGatewayApi.IncomingReserveTransaction\");\n\nexport const codecForIncomingWadTransaction =\n (): Codec<TalerWireGatewayApi.IncomingWadTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingWadTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"origin_exchange_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"WAD\"))\n .property(\"wad_id\", codecForString())\n .build(\"TalerWireGatewayApi.IncomingWadTransaction\");\n\nexport const codecForOutgoingHistory =\n (): Codec<TalerWireGatewayApi.OutgoingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingHistory>()\n .property(\"debit_account\", codecForPaytoString())\n .property(\n \"outgoing_transactions\",\n codecForList(codecForOutgoingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.OutgoingHistory\");\n\nexport const codecForOutgoingBankTransaction =\n (): Codec<TalerWireGatewayApi.OutgoingBankTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"exchange_base_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"wtid\", codecForString())\n .build(\"TalerWireGatewayApi.OutgoingBankTransaction\");\n\nexport const codecForAddIncomingResponse =\n (): Codec<TalerWireGatewayApi.AddIncomingResponse> =>\n buildCodecForObject<TalerWireGatewayApi.AddIncomingResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.AddIncomingResponse\");\n\nexport const codecForAmlRecords = (): Codec<TalerExchangeApi.AmlRecords> =>\n buildCodecForObject<TalerExchangeApi.AmlRecords>()\n .property(\"records\", codecForList(codecForAmlRecord()))\n .build(\"TalerExchangeApi.PublicAccountsResponse\");\n\nexport const codecForAmlRecord = (): Codec<TalerExchangeApi.AmlRecord> =>\n buildCodecForObject<TalerExchangeApi.AmlRecord>()\n .property(\"current_state\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .property(\"rowid\", codecForNumber())\n .property(\"threshold\", codecForAmountString())\n .build(\"TalerExchangeApi.AmlRecord\");\n\nexport const codecForAmlDecisionDetails =\n (): Codec<TalerExchangeApi.AmlDecisionDetails> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetails>()\n .property(\"aml_history\", codecForList(codecForAmlDecisionDetail()))\n .property(\"kyc_attributes\", codecForList(codecForKycDetail()))\n .build(\"TalerExchangeApi.AmlDecisionDetails\");\n\nexport const codecForAmlDecisionDetail =\n (): Codec<TalerExchangeApi.AmlDecisionDetail> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetail>()\n .property(\"justification\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"new_threshold\", codecForAmountString())\n .property(\"decider_pub\", codecForString())\n .build(\"TalerExchangeApi.AmlDecisionDetail\");\n\nexport const codecForChallenge = (): Codec<TalerCorebankApi.Challenge> =>\n buildCodecForObject<TalerCorebankApi.Challenge>()\n .property(\"challenge_id\", codecForNumber())\n .build(\"TalerCorebankApi.Challenge\");\n\nexport const codecForTanTransmission =\n (): Codec<TalerCorebankApi.TanTransmission> =>\n buildCodecForObject<TalerCorebankApi.TanTransmission>()\n .property(\n \"tan_channel\",\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n )\n .property(\"tan_info\", codecForString())\n .build(\"TalerCorebankApi.TanTransmission\");\n\ninterface KycDetail {\n provider_section: string;\n attributes?: Object;\n collection_time: Timestamp;\n expiration_time: Timestamp;\n}\nexport const codecForKycDetail = (): Codec<TalerExchangeApi.KycDetail> =>\n buildCodecForObject<TalerExchangeApi.KycDetail>()\n .property(\"provider_section\", codecForString())\n .property(\"attributes\", codecOptional(codecForAny()))\n .property(\"collection_time\", codecForTimestamp)\n .property(\"expiration_time\", codecForTimestamp)\n .build(\"TalerExchangeApi.KycDetail\");\n\nexport const codecForAmlDecision = (): Codec<TalerExchangeApi.AmlDecision> =>\n buildCodecForObject<TalerExchangeApi.AmlDecision>()\n .property(\"justification\", codecForString())\n .property(\"new_threshold\", codecForAmountString())\n .property(\"h_payto\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"officer_sig\", codecForString())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"kyc_requirements\", codecOptional(codecForList(codecForString())))\n .build(\"TalerExchangeApi.AmlDecision\");\n\nexport const codecForConversionInfo =\n (): Codec<TalerBankConversionApi.ConversionInfo> =>\n buildCodecForObject<TalerBankConversionApi.ConversionInfo>()\n .property(\"cashin_fee\", codecForAmountString())\n .property(\"cashin_min_amount\", codecForAmountString())\n .property(\"cashin_ratio\", codecForDecimalNumber())\n .property(\n \"cashin_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashin_tiny_amount\", codecForAmountString())\n .property(\"cashout_fee\", codecForAmountString())\n .property(\"cashout_min_amount\", codecForAmountString())\n .property(\"cashout_ratio\", codecForDecimalNumber())\n .property(\n \"cashout_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashout_tiny_amount\", codecForAmountString())\n .build(\"ConversionBankConfig.ConversionInfo\");\n\nexport const codecForConversionBankConfig =\n (): Codec<TalerBankConversionApi.IntegrationConfig> =>\n buildCodecForObject<TalerBankConversionApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .property(\"fiat_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n\n .property(\"conversion_rate\", codecForConversionInfo())\n .build(\"ConversionBankConfig.IntegrationConfig\");\n\nexport const codecForChallengerTermsOfServiceResponse =\n (): Codec<ChallengerApi.ChallengerTermsOfServiceResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerTermsOfServiceResponse>()\n .property(\"name\", codecForConstString(\"challenger\"))\n .property(\"version\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"ChallengerApi.ChallengerTermsOfServiceResponse\");\n\nexport const codecForChallengeSetupResponse =\n (): Codec<ChallengerApi.ChallengeSetupResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeSetupResponse>()\n .property(\"nonce\", codecForString())\n .build(\"ChallengerApi.ChallengeSetupResponse\");\n\nexport const codecForChallengeStatus =\n (): Codec<ChallengerApi.ChallengeStatus> =>\n buildCodecForObject<ChallengerApi.ChallengeStatus>()\n .property(\"restrictions\", codecOptional(codecForMap(codecForAny())))\n .property(\"fix_address\", codecForBoolean())\n .property(\"last_address\", codecOptional(codecForMap(codecForAny())))\n .property(\"changes_left\", codecForNumber())\n .build(\"ChallengerApi.ChallengeStatus\");\nexport const codecForChallengeCreateResponse =\n (): Codec<ChallengerApi.ChallengeCreateResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeCreateResponse>()\n .property(\"attempts_left\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"transmitted\", codecForBoolean())\n .property(\"next_tx_time\", codecForString())\n .build(\"ChallengerApi.ChallengeCreateResponse\");\n\nexport const codecForInvalidPinResponse =\n (): Codec<ChallengerApi.InvalidPinResponse> =>\n buildCodecForObject<ChallengerApi.InvalidPinResponse>()\n .property(\"ec\", codecOptional(codecForNumber()))\n .property(\"hint\", codecForAny())\n .property(\"addresses_left\", codecForNumber())\n .property(\"pin_transmissions_left\", codecForNumber())\n .property(\"auth_attempts_left\", codecForNumber())\n .property(\"exhausted\", codecForBoolean())\n .property(\"no_challenge\", codecForBoolean())\n .build(\"ChallengerApi.InvalidPinResponse\");\n\nexport const codecForChallengerAuthResponse =\n (): Codec<ChallengerApi.ChallengerAuthResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerAuthResponse>()\n .property(\"access_token\", codecForString())\n .property(\"token_type\", codecForAny())\n .property(\"expires_in\", codecForNumber())\n .build(\"ChallengerApi.ChallengerAuthResponse\");\n\nexport const codecForChallengerInfoResponse =\n (): Codec<ChallengerApi.ChallengerInfoResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerInfoResponse>()\n .property(\"id\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"address_type\", codecForString())\n .property(\"expires\", codecForTimestamp)\n .build(\"ChallengerApi.ChallengerInfoResponse\");\n\ntype EmailAddress = string;\ntype PhoneNumber = string;\ntype EddsaSignature = string;\n// base32 encoded RSA blinded signature.\ntype BlindedRsaSignature = string;\ntype Base32 = string;\n\ntype DecimalNumber = string;\ntype RsaSignature = string;\ntype Float = number;\ntype LibtoolVersion = string;\n// The type of a coin's blinded envelope depends on the cipher that is used\n// for signing with a denomination key.\ntype CoinEnvelope = RSACoinEnvelope | CSCoinEnvelope;\n// For denomination signatures based on RSA, the planchet is just a blinded\n// coin's public EdDSA key.\ninterface RSACoinEnvelope {\n cipher: \"RSA\" | \"RSA+age_restricted\";\n rsa_blinded_planchet: string; // Crockford Base32 encoded\n}\n// For denomination signatures based on Blind Clause-Schnorr, the planchet\n// consists of the public nonce and two Curve25519 scalars which are two\n// blinded challenges in the Blinded Clause-Schnorr signature scheme.\n// See https://taler.net/papers/cs-thesis.pdf for details.\ninterface CSCoinEnvelope {\n cipher: \"CS\" | \"CS+age_restricted\";\n cs_nonce: string; // Crockford Base32 encoded\n cs_blinded_c0: string; // Crockford Base32 encoded\n cs_blinded_c1: string; // Crockford Base32 encoded\n}\n// Secret for blinding/unblinding.\n// An RSA blinding secret, which is basically\n// a 256-bit nonce, converted to Crockford Base32.\ntype DenominationBlindingKeyP = string;\n\n//FIXME: implement this codec\nconst codecForURL = codecForString;\n//FIXME: implement this codec\nconst codecForLibtoolVersion = codecForString;\n//FIXME: implement this codec\nconst codecForCurrencyName = codecForString;\n//FIXME: implement this codec\nconst codecForDecimalNumber = codecForString;\n\nexport type WithdrawalOperationStatus =\n | \"pending\"\n | \"selected\"\n | \"aborted\"\n | \"confirmed\";\n\nexport namespace TalerWireGatewayApi {\n export interface TransferResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n\n export interface TransferRequest {\n // Nonce to make the request idempotent. Requests with the same\n // transaction_uid that differ in any of the other fields\n // are rejected.\n request_uid: HashCode;\n\n // Amount to transfer.\n amount: AmountString;\n\n // Base URL of the exchange. Shall be included by the bank gateway\n // in the appropriate section of the wire transfer details.\n exchange_base_url: string;\n\n // Wire transfer identifier chosen by the exchange,\n // used by the merchant to identify the Taler order(s)\n // associated with this wire transfer.\n wtid: ShortHashCode;\n\n // The recipient's account identifier as a payto URI.\n credit_account: PaytoString;\n }\n\n export interface IncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: IncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if incoming transaction is empty\n credit_account?: PaytoString;\n }\n\n // Union discriminated by the \"type\" field.\n export type IncomingBankTransaction =\n | IncomingReserveTransaction\n | IncomingWadTransaction;\n\n export interface IncomingReserveTransaction {\n type: \"RESERVE\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // The reserve public key extracted from the transaction details.\n reserve_pub: EddsaPublicKey;\n }\n\n export interface IncomingWadTransaction {\n type: \"WAD\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n credit_account: PaytoString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // Base URL of the exchange that originated the wad.\n origin_exchange_url: string;\n\n // The reserve public key extracted from the transaction details.\n wad_id: WadId;\n }\n\n export interface OutgoingHistory {\n // Array of outgoing transactions.\n outgoing_transactions: OutgoingBankTransaction[];\n\n // Payto URI to identify the sender of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if outgoing transactions is empty\n debit_account?: PaytoString;\n }\n\n export interface OutgoingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n credit_account: PaytoString;\n\n // The wire transfer ID in the outgoing transaction.\n wtid: ShortHashCode;\n\n // Base URL of the exchange.\n exchange_base_url: string;\n }\n\n export interface AddIncomingRequest {\n // Amount to transfer.\n amount: AmountString;\n\n // Reserve public key that is included in the wire transfer details\n // to identify the reserve that is being topped up.\n reserve_pub: EddsaPublicKey;\n\n // Account (as payto URI) that makes the wire transfer to the exchange.\n // Usually this account must be created by the test harness before this API is\n // used. An exception is the \"exchange-fakebank\", where any debit account can be\n // specified, as it is automatically created.\n debit_account: PaytoString;\n }\n\n export interface AddIncomingResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n}\n\nexport namespace TalerRevenueApi {\n export interface RevenueConfig {\n // Name of the API.\n name: \"taler-revenue\";\n\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this gateway.\n currency: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface RevenueIncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: RevenueIncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n credit_account: string;\n }\n\n export interface RevenueIncomingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: string;\n\n // The wire transfer subject.\n subject: string;\n }\n}\n\nexport namespace TalerBankConversionApi {\n export interface ConversionInfo {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n }\n\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n // Currency used by this bank.\n regional_currency: string;\n\n // How the bank SPA should render this currency.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency: string;\n\n // How the bank SPA should render this currency.\n fiat_currency_specification: CurrencySpecification;\n\n // Extra conversion rate information.\n // Only present if server opts in to report the static conversion rate.\n conversion_rate: ConversionInfo;\n }\n\n export interface CashinConversionResponse {\n // Amount that the user will get deducted from their fiat\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their regional\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export interface CashoutConversionResponse {\n // Amount that the user will get deducted from their regional\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their fiat\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export type RoundingMode = \"zero\" | \"up\" | \"nearest\";\n\n export interface ConversionRate {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: RoundingMode;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: RoundingMode;\n }\n}\n\nexport namespace TalerBankIntegrationApi {\n export interface BankVersion {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification?: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n\n export interface BankWithdrawalOperationStatus {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Bank account of the customer that is withdrawing, as a\n // payto URI.\n sender_wire?: PaytoString;\n\n // Suggestion for an exchange given by the bank.\n suggested_exchange?: string;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Wire transfer types supported by the bank.\n wire_types: string[];\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: string;\n }\n\n export interface BankWithdrawalOperationPostRequest {\n // Reserve public key.\n reserve_pub: string;\n\n // Payto address of the exchange selected for the withdrawal.\n selected_exchange: PaytoString;\n }\n\n export interface BankWithdrawalOperationPostResponse {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: Omit<\"pending\", WithdrawalOperationStatus>;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n }\n}\n\nexport namespace TalerCorebankApi {\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n export interface Config {\n // Name of this API, always \"taler-corebank\".\n name: \"libeufin-bank\";\n // name: \"taler-corebank\";\n\n // API version in the form $n:$n:$n\n version: string;\n\n // Bank display name to be used in user interfaces.\n // For consistency use \"Taler Bank\" if missing.\n // @since v4, will become mandatory in the next version.\n bank_name: string;\n\n // If 'true' the server provides local currency conversion support\n // If 'false' some parts of the API are not supported and return 501\n allow_conversion: boolean;\n\n // If 'true' anyone can register\n // If 'false' only the admin can\n allow_registrations: boolean;\n\n // If 'true' account can delete themselves\n // If 'false' only the admin can delete accounts\n allow_deletions: boolean;\n\n // If 'true' anyone can edit their name\n // If 'false' only admin can\n allow_edit_name: boolean;\n\n // If 'true' anyone can edit their cashout account\n // If 'false' only the admin\n allow_edit_cashout_payto_uri: boolean;\n\n // Default debt limit for newly created accounts\n default_debit_threshold: AmountString;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // TAN channels supported by the server\n supported_tan_channels: TanChannel[];\n\n // Wire transfer type supported by the bank.\n // Default to 'iban' is missing\n // @since v4, may become mandatory in the future.\n wire_type: string;\n }\n\n export interface BankAccountCreateWithdrawalRequest {\n // Amount to withdraw.\n amount: AmountString;\n }\n export interface BankAccountCreateWithdrawalResponse {\n // ID of the withdrawal, can be used to view/modify the withdrawal operation.\n withdrawal_id: string;\n\n // URI that can be passed to the wallet to initiate the withdrawal.\n taler_withdraw_uri: TalerUriString;\n }\n export interface WithdrawalPublicInfo {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Account username\n username: string;\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: PaytoString;\n }\n\n export interface BankAccountTransactionsResponse {\n transactions: BankAccountTransactionInfo[];\n }\n\n export interface BankAccountTransactionInfo {\n creditor_payto_uri: PaytoString;\n debtor_payto_uri: PaytoString;\n\n amount: AmountString;\n direction: \"debit\" | \"credit\";\n\n subject: string;\n\n // Transaction unique ID. Matches\n // $transaction_id from the URI.\n row_id: number;\n date: Timestamp;\n }\n\n export interface CreateTransactionRequest {\n // Address in the Payto format of the wire transfer receiver.\n // It needs at least the 'message' query string parameter.\n payto_uri: PaytoString;\n\n // Transaction amount (in the $currency:x.y format), optional.\n // However, when not given, its value must occupy the 'amount'\n // query string parameter of the 'payto' field. In case it\n // is given in both places, the paytoUri's takes the precedence.\n amount?: AmountString;\n\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n // @since v4, will become mandatory in the next version.\n request_uid?: ShortHashCode;\n }\n\n export interface CreateTransactionResponse {\n // ID identifying the transaction being created\n row_id: Integer;\n }\n\n export interface RegisterAccountResponse {\n // Internal payto URI of this bank account.\n internal_payto_uri: PaytoString;\n }\n\n export interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n contact_data?: ChallengeContactData;\n\n // 'payto' address of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n cashout_payto_uri?: PaytoString;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: PaytoString;\n\n // If present, set the max debit allowed for this user\n // Only admin can set this property.\n debit_threshold?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n // Only admin can set this property, other user can reconfig their account\n // after creation.\n tan_channel?: TanChannel;\n }\n\n export interface ChallengeContactData {\n // E-Mail address\n email?: EmailAddress;\n\n // Phone number.\n phone?: PhoneNumber;\n }\n\n export interface AccountReconfiguration {\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n // Only admin can change this property.\n contact_data?: ChallengeContactData;\n\n // 'payto' URI of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n // Only admin can change this property if not allowed in config\n cashout_payto_uri?: PaytoString;\n\n // If present, change the legal name associated with $username.\n // Only admin can change this property if not allowed in config\n name?: string;\n\n // Make this account visible to anyone?\n is_public?: boolean;\n\n // If present, change the max debit allowed for this user\n // Only admin can change this property.\n debit_threshold?: AmountString;\n\n //FIX: missing in SPEC\n // If present, enables 2FA and set the TAN channel used for challenges\n tan_channel?: TanChannel | null;\n }\n\n export interface AccountPasswordChange {\n // New password.\n new_password: string;\n // Old password. If present, check that the old password matches.\n // Optional for admin account.\n old_password?: string;\n }\n\n export interface PublicAccountsResponse {\n public_accounts: PublicAccount[];\n }\n export interface PublicAccount {\n // Username of the account\n username: string;\n\n // Internal payto URI of this bank account.\n payto_uri: string;\n\n // Current balance of the account\n balance: Balance;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface ListBankAccountsResponse {\n accounts: AccountMinimalData[];\n }\n export interface Balance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n }\n export interface AccountMinimalData {\n // Username\n username: string;\n\n // Legal name of the account owner.\n name: string;\n\n // Internal payto URI of this bank account.\n payto_uri: PaytoString;\n\n // current balance of the account\n balance: Balance;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: Balance;\n\n // payto://-URI of the account.\n payto_uri: PaytoString;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: PaytoString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Is 2FA enabled and what channel is used for challenges?\n tan_channel?: TanChannel;\n }\n\n export interface CashoutRequest {\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n request_uid: ShortHashCode;\n\n // Optional subject to associate to the\n // cashout operation. This data will appear\n // as the incoming wire transfer subject in\n // the user's fiat bank account.\n subject?: string;\n\n // That is the plain amount that the user specified\n // to cashout. Its $currency is the (regional) currency of the\n // bank instance.\n amount_debit: AmountString;\n\n // That is the amount that will effectively be\n // transferred by the bank to the user's bank\n // account, that is external to the regional currency.\n // It is expressed in the fiat currency and\n // is calculated after the cashout fee and the\n // exchange rate. See the /cashout-rates call.\n // The client needs to calculate this amount\n // correctly based on the amount_debit and the cashout rate,\n // otherwise the request will fail.\n amount_credit: AmountString;\n }\n\n export interface CashoutResponse {\n // ID identifying the operation being created\n cashout_id: number;\n }\n\n /**\n * @deprecated since 4, use 2fa\n */\n export interface CashoutConfirmRequest {\n // the TAN that confirms $CASHOUT_ID.\n tan: string;\n }\n\n export interface Cashouts {\n // Every string represents a cash-out operation ID.\n cashouts: CashoutInfo[];\n }\n\n export interface CashoutInfo {\n cashout_id: number;\n /**\n * @deprecated since 4, use new 2fa\n */\n status?: \"pending\" | \"aborted\" | \"confirmed\";\n }\n export interface GlobalCashouts {\n // Every string represents a cash-out operation ID.\n cashouts: GlobalCashoutInfo[];\n }\n export interface GlobalCashoutInfo {\n cashout_id: number;\n username: string;\n }\n\n export interface CashoutStatusResponse {\n // Amount debited to the internal\n // regional currency bank account.\n amount_debit: AmountString;\n\n // Amount credited to the external bank account.\n amount_credit: AmountString;\n\n // Transaction subject.\n subject: string;\n\n // Time when the cashout was created.\n creation_time: Timestamp;\n }\n\n export interface ConversionRatesResponse {\n // Exchange rate to buy the local currency from the external one\n buy_at_ratio: DecimalNumber;\n\n // Exchange rate to sell the local currency for the external one\n sell_at_ratio: DecimalNumber;\n\n // Fee to subtract after applying the buy ratio.\n buy_in_fee: DecimalNumber;\n\n // Fee to subtract after applying the sell ratio.\n sell_out_fee: DecimalNumber;\n }\n\n export enum MonitorTimeframeParam {\n hour,\n day,\n month,\n year,\n decade,\n }\n\n export type MonitorResponse = MonitorNoConversion | MonitorWithConversion;\n\n // Monitoring stats when conversion is not supported\n export interface MonitorNoConversion {\n type: \"no-conversions\";\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n // Monitoring stats when conversion is supported\n export interface MonitorWithConversion {\n type: \"with-conversions\";\n\n // How many cashin operations were confirmed by a\n // wallet owner. Note: wallet owners\n // are NOT required to be customers of the libeufin-bank.\n cashinCount: number;\n\n // Overall regional currency that has been paid by the regional admin account\n // to regional bank accounts to fulfill all the confirmed cashin operations.\n cashinRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid to the fiat admin account\n // by fiat bank accounts to fulfill all the confirmed cashin operations.\n cashinFiatVolume: AmountString;\n\n // How many cashout operations were confirmed.\n cashoutCount: number;\n\n // Overall regional currency that has been paid to the regional admin account\n // by fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid by the fiat admin account\n // to fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutFiatVolume: AmountString;\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n export interface TanTransmission {\n // Channel of the last successful transmission of the TAN challenge.\n tan_channel: TanChannel;\n\n // Info of the last successful transmission of the TAN challenge.\n tan_info: string;\n }\n\n export interface Challenge {\n // Unique identifier of the challenge to solve to run this protected\n // operation.\n challenge_id: number;\n }\n\n export interface ChallengeSolve {\n // The TAN code that solves $CHALLENGE_ID\n tan: string;\n }\n\n export enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n }\n}\n\nexport namespace TalerExchangeApi {\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n export interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: AmountString;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: AmountString;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n export interface AmlDecision {\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: AmountString;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n export interface ExchangeVersionResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-exchange\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v18, may become mandatory in the future.\n implementation?: string;\n\n // Currency supported by this exchange, given\n // as a currency code (\"USD\" or \"EUR\").\n currency: string;\n\n // How wallets should render this currency.\n currency_specification: CurrencySpecification;\n\n // Names of supported KYC requirements.\n supported_kyc_requirements: string[];\n }\n\n export type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n // Account restriction that disables this type of\n // account for the indicated operation categorically.\n export interface DenyAllAccountRestriction {\n type: \"deny\";\n }\n // Accounts interacting with this type of account\n // restriction must have a payto://-URI matching\n // the given regex.\n export interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: { [lang_tag: string]: string };\n }\n\n export interface WireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: PaytoString;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignature;\n }\n\n export interface ExchangeKeysResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // The exchange's base URL.\n base_url: string;\n\n // The exchange's currency or asset unit.\n currency: string;\n\n /**\n * FIXME: PARTIALLY IMPLEMENTED!!\n */\n\n // How wallets should render this currency.\n // currency_specification: CurrencySpecification;\n\n // // Absolute cost offset for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // stefan_abs: AmountString;\n\n // // Factor to multiply the logarithm of the amount\n // // with to (over) approximate fees payable by amount.\n // // Note that the total to be paid is first to be\n // // divided by the smallest denomination to obtain\n // // the value that the logarithm is to be taken of.\n // stefan_log: AmountString;\n\n // // Linear cost factor for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // //\n // // Note that this is a scalar, as it is multiplied\n // // with the actual amount.\n // stefan_lin: Float;\n\n // // Type of the asset. \"fiat\", \"crypto\", \"regional\"\n // // or \"stock\". Wallets should adjust their UI/UX\n // // based on this value.\n // asset_type: string;\n\n // // Array of wire accounts operated by the exchange for\n // // incoming wire transfers.\n // accounts: WireAccount[];\n\n // // Object mapping names of wire methods (i.e. \"iban\" or \"x-taler-bank\")\n // // to wire fees.\n // wire_fees: { method: AggregateTransferFee[] };\n\n // // List of exchanges that this exchange is partnering\n // // with to enable wallet-to-wallet transfers.\n // wads: ExchangePartner[];\n\n // // Set to true if this exchange allows the use\n // // of reserves for rewards.\n // // @deprecated in protocol v18.\n // rewards_allowed: false;\n\n // // EdDSA master public key of the exchange, used to sign entries\n // // in denoms and signkeys.\n // master_public_key: EddsaPublicKey;\n\n // // Relative duration until inactive reserves are closed;\n // // not signed (!), can change without notice.\n // reserve_closing_delay: RelativeTime;\n\n // // Threshold amounts beyond which wallet should\n // // trigger the KYC process of the issuing\n // // exchange. Optional option, if not given there is no limit.\n // // Currency must match currency.\n // wallet_balance_limit_without_kyc?: AmountString[];\n\n // // Denominations offered by this exchange\n // denominations: DenomGroup[];\n\n // // Compact EdDSA signature (binary-only) over the\n // // contatentation of all of the master_sigs (in reverse\n // // chronological order by group) in the arrays under\n // // \"denominations\". Signature of TALER_ExchangeKeySetPS\n // exchange_sig: EddsaSignature;\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 signkeys. It is given\n // // explicitly as the client might otherwise be confused by clock skew as to\n // // which signing key was used for the exchange_sig.\n // exchange_pub: EddsaPublicKey;\n\n // // Denominations for which the exchange currently offers/requests recoup.\n // recoup: Recoup[];\n\n // // Array of globally applicable fees by time range.\n // global_fees: GlobalFees[];\n\n // // The date when the denomination keys were last updated.\n // list_issue_date: Timestamp;\n\n // // Auditors of the exchange.\n // auditors: AuditorKeys[];\n\n // // The exchange's signing keys.\n // signkeys: SignKey[];\n\n // // Optional field with a dictionary of (name, object) pairs defining the\n // // supported and enabled extensions, such as age_restriction.\n // extensions?: { name: ExtensionManifest };\n\n // // Signature by the exchange master key of the SHA-256 hash of the\n // // normalized JSON-object of field extensions, if it was set.\n // // The signature has purpose TALER_SIGNATURE_MASTER_EXTENSIONS.\n // extensions_sig?: EddsaSignature;\n }\n\n interface ExtensionManifest {\n // The criticality of the extension MUST be provided. It has the same\n // semantics as \"critical\" has for extensions in X.509:\n // - if \"true\", the client must \"understand\" the extension before\n // proceeding,\n // - if \"false\", clients can safely skip extensions they do not\n // understand.\n // (see https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)\n critical: boolean;\n\n // The version information MUST be provided in Taler's protocol version\n // ranges notation, see\n // https://docs.taler.net/core/api-common.html#protocol-version-ranges\n version: LibtoolVersion;\n\n // Optional configuration object, defined by the feature itself\n config?: object;\n }\n\n interface SignKey {\n // The actual exchange's EdDSA signing public key.\n key: EddsaPublicKey;\n\n // Initial validity date for the signing key.\n stamp_start: Timestamp;\n\n // Date when the exchange will stop using the signing key, allowed to overlap\n // slightly with the next signing key's validity to allow for clock skew.\n stamp_expire: Timestamp;\n\n // Date when all signatures made by the signing key expire and should\n // henceforth no longer be considered valid in legal disputes.\n stamp_end: Timestamp;\n\n // Signature over key and stamp_expire by the exchange master key.\n // Signature of TALER_ExchangeSigningKeyValidityPS.\n // Must have purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.\n master_sig: EddsaSignature;\n }\n\n interface AuditorKeys {\n // The auditor's EdDSA signing public key.\n auditor_pub: EddsaPublicKey;\n\n // The auditor's URL.\n auditor_url: string;\n\n // The auditor's name (for humans).\n auditor_name: string;\n\n // An array of denomination keys the auditor affirms with its signature.\n // Note that the message only includes the hash of the public key, while the\n // signature is actually over the expanded information including expiration\n // times and fees. The exact format is described below.\n denomination_keys: AuditorDenominationKey[];\n }\n interface AuditorDenominationKey {\n // Hash of the public RSA key used to sign coins of the respective\n // denomination. Note that the auditor's signature covers more than just\n // the hash, but this other information is already provided in denoms and\n // thus not repeated here.\n denom_pub_h: HashCode;\n\n // Signature of TALER_ExchangeKeyValidityPS.\n auditor_sig: EddsaSignature;\n }\n\n interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: Timestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: Timestamp;\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: RelativeTime;\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: Integer;\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: RelativeTime;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: EddsaSignature;\n }\n\n interface Recoup {\n // Hash of the public key of the denomination that is being revoked under\n // emergency protocol (see /recoup).\n h_denom_pub: HashCode;\n\n // We do not include any signature here, as the primary use-case for\n // this emergency involves the exchange having lost its signing keys,\n // so such a signature here would be pretty worthless. However, the\n // exchange will not honor /recoup requests unless they are for\n // denomination keys listed here.\n }\n\n interface AggregateTransferFee {\n // Per transfer wire transfer fee.\n wire_fee: AmountString;\n\n // Per transfer closing fee.\n closing_fee: AmountString;\n\n // What date (inclusive) does this fee go into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n start_date: Timestamp;\n\n // What date (exclusive) does this fee stop going into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n end_date: Timestamp;\n\n // Signature of TALER_MasterWireFeePS with\n // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.\n sig: EddsaSignature;\n }\n\n interface ExchangePartner {\n // Base URL of the partner exchange.\n partner_base_url: string;\n\n // Public master key of the partner exchange.\n partner_master_pub: EddsaPublicKey;\n\n // Per exchange-to-exchange transfer (wad) fee.\n wad_fee: AmountString;\n\n // Exchange-to-exchange wad (wire) transfer frequency.\n wad_frequency: RelativeTime;\n\n // When did this partnership begin (under these conditions)?\n start_date: Timestamp;\n\n // How long is this partnership expected to last?\n end_date: Timestamp;\n\n // Signature using the exchange's offline key over\n // TALER_WadPartnerSignaturePS\n // with purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS.\n master_sig: EddsaSignature;\n }\n\n type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n\n // Binary representation of the age groups.\n // The bits set in the mask mark the edges at the beginning of a next age\n // group. F.e. for the age groups\n // 0-7, 8-9, 10-11, 12-13, 14-15, 16-17, 18-21, 21-*\n // the following bits are set:\n //\n // 31 24 16 8 0\n // | | | | |\n // oooooooo oo1oo1o1 o1o1o1o1 ooooooo1\n //\n // A value of 0 means that the exchange does not support the extension for\n // age-restriction.\n type AgeMask = Integer;\n\n interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n // Common attributes for all denomination groups\n interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n }\n interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignature;\n\n // When does the denomination key become valid?\n stamp_start: Timestamp;\n\n // When is it no longer possible to withdraw coins\n // of this denomination?\n stamp_expire_withdraw: Timestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_deposit: Timestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: Timestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n }\n type DenominationKey = RsaDenominationKey | CSDenominationKey;\n interface RsaDenominationKey {\n cipher: \"RSA\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // RSA public key\n rsa_public_key: RsaPublicKey;\n }\n interface CSDenominationKey {\n cipher: \"CS\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // Public key of the denomination.\n cs_public_key: Cs25519Point;\n }\n}\n\nexport namespace TalerMerchantApi {\n export interface VersionResponse {\n // libtool-style representation of the Merchant protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-merchant\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since **v8**, may become mandatory in the future.\n implementation?: string;\n\n // Default (!) currency supported by this backend.\n // This is the currency that the backend should\n // suggest by default to the user when entering\n // amounts. See currencies for a list of\n // supported currencies and how to render them.\n currency: string;\n\n // How services should render currencies supported\n // by this backend. Maps\n // currency codes (e.g. \"EUR\" or \"KUDOS\") to\n // the respective currency specification.\n // All currencies in this map are supported by\n // the backend. Note that the actual currency\n // specifications are a *hint* for applications\n // that would like *advice* on how to render amounts.\n // Applications *may* ignore the currency specification\n // if they know how to render currencies that they are\n // used with.\n currencies: { [currency: string]: CurrencySpecification };\n\n // Array of exchanges trusted by the merchant.\n // Since protocol **v6**.\n exchanges: ExchangeConfigInfo[];\n }\n\n export interface ExchangeConfigInfo {\n // Base URL of the exchange REST API.\n base_url: string;\n\n // Currency for which the merchant is configured\n // to trust the exchange.\n // May not be the one the exchange actually uses,\n // but is the only one we would trust this exchange for.\n currency: string;\n\n // Offline master public key of the exchange. The\n // /keys data must be signed with this public\n // key for us to trust it.\n master_pub: EddsaPublicKey;\n }\n export interface ClaimRequest {\n // Nonce to identify the wallet that claimed the order.\n nonce: string;\n\n // Token that authorizes the wallet to claim the order.\n // *Optional* as the merchant may not have required it\n // (create_token set to false in PostOrderRequest).\n token?: ClaimToken;\n }\n\n export interface ClaimResponse {\n // Contract terms of the claimed order\n contract_terms: ContractTerms;\n\n // Signature by the merchant over the contract terms.\n sig: EddsaSignature;\n }\n\n export interface PaymentResponse {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Text to be shown to the point-of-sale staff as a proof of\n // payment.\n pos_confirmation?: string;\n }\n\n export interface PaymentStatusRequestParams {\n // Hash of the order\u2019s contract terms (this is used to\n // authenticate the wallet/customer in case\n // $ORDER_ID is guessable).\n // Required once an order was claimed.\n contractTermHash?: string;\n // Authorizes the request via the claim token that\n // was returned in the PostOrderResponse. Used with\n // unclaimed orders only. Whether token authorization is\n // required is determined by the merchant when the\n // frontend creates the order.\n claimToken?: string;\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // If specified, the merchant backend will wait up to\n // timeout_ms milliseconds for completion of the payment\n // before sending the HTTP response. A client must never\n // rely on this behavior, as the merchant backend may return\n // a response immediately.\n timeout?: number;\n // If set to \u201Cyes\u201D, poll for the order\u2019s pending refunds\n // to be picked up. timeout_ms specifies how long we\n // will wait for the refund.\n awaitRefundObtained?: boolean;\n // Indicates that we are polling for a refund above the\n // given AMOUNT. timeout_ms will specify how long we\n // will wait for the refund.\n refund?: AmountString;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface GetKycStatusRequestParams {\n // If specified, the KYC check should return\n // the KYC status only for this wire account.\n // Otherwise, for all wire accounts.\n wireHash?: string;\n // If specified, the KYC check should return\n // the KYC status only for the given exchange.\n // Otherwise, for all exchanges we interacted with.\n exchangeURL?: string;\n // If specified, the merchant will wait up to\n // timeout_ms milliseconds for the exchanges to\n // confirm completion of the KYC process(es).\n timeout?: number;\n }\n export interface GetOtpDeviceRequestParams {\n // Timestamp in seconds to use when calculating\n // the current OTP code of the device. Since protocol v10.\n faketime?: number;\n // Price to use when calculating the current OTP\n // code of the device. Since protocol v10.\n price?: AmountString;\n }\n export interface GetOrderRequestParams {\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // Timeout in milliseconds to wait for a payment if\n // the answer would otherwise be negative (long polling).\n timeout?: number;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface ListWireTransferRequestParams {\n // Filter for transfers to the given bank account\n // (subject and amount MUST NOT be given in the payto URI).\n paytoURI?: string;\n // Filter for transfers executed before the given timestamp.\n before?: number;\n // Filter for transfers executed after the given timestamp.\n after?: number;\n // At most return the given number of results. Negative for\n // descending in execution time, positive for ascending in\n // execution time. Default is -20.\n limit?: number;\n // Starting transfer_serial_id for an iteration.\n offset?: string;\n // Filter transfers by verification status.\n verified?: boolean;\n order?: \"asc\" | \"dec\";\n }\n export interface ListOrdersRequestParams {\n // If set to yes, only return paid orders, if no only\n // unpaid orders. Do not give (or use \u201Call\u201D) to see all\n // orders regardless of payment status.\n paid?: boolean;\n // If set to yes, only return refunded orders, if no only\n // unrefunded orders. Do not give (or use \u201Call\u201D) to see\n // all orders regardless of refund status.\n refunded?: boolean;\n // If set to yes, only return wired orders, if no only\n // orders with missing wire transfers. Do not give (or\n // use \u201Call\u201D) to see all orders regardless of wire transfer\n // status.\n wired?: boolean;\n // At most return the given number of results. Negative\n // for descending by row ID, positive for ascending by\n // row ID. Default is 20. Since protocol v12.\n limit?: number;\n // Non-negative date in seconds after the UNIX Epoc, see delta\n // for its interpretation. If not specified, we default to the\n // oldest or most recent entry, depending on delta.\n date?: AbsoluteTime;\n // Starting product_serial_id for an iteration.\n // Since protocol v12.\n offset?: string;\n // Timeout in milliseconds to wait for additional orders if the\n // answer would otherwise be negative (long polling). Only useful\n // if delta is positive. Note that the merchant MAY still return\n // a response that contains fewer than delta orders.\n timeout?: number;\n // Since protocol v6. Filters by session ID.\n sessionId?: string;\n // Since protocol v6. Filters by fulfillment URL.\n fulfillmentUrl?: string;\n\n order?: \"asc\" | \"dec\";\n }\n\n export interface PayRequest {\n // The coins used to make the payment.\n coins: CoinPaySig[];\n\n // Custom inputs from the wallet for the contract.\n wallet_data?: Object;\n\n // The session for which the payment is made (or replayed).\n // Only set for session-based payments.\n session_id?: string;\n }\n export interface CoinPaySig {\n // Signature by the coin.\n coin_sig: EddsaSignature;\n\n // Public key of the coin being spent.\n coin_pub: EddsaPublicKey;\n\n // Signature made by the denomination public key.\n ub_sig: RsaSignature;\n\n // The hash of the denomination public key associated with this coin.\n h_denom: HashCode;\n\n // The amount that is subtracted from this coin with this payment.\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n }\n\n export interface StatusPaid {\n type: \"paid\";\n\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 export interface StatusGotoResponse {\n type: \"goto\";\n // The client should go to the reorder URL, there a fresh\n // order might be created as this one is taken by another\n // customer or wallet (or repurchase detection logic may\n // apply).\n public_reorder_url: string;\n }\n export interface StatusUnpaidResponse {\n type: \"unpaid\";\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n fulfillment_url?: string;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n }\n\n export interface PaidRefundStatusResponse {\n // Text to be shown to the point-of-sale staff as a proof of\n // payment (present only if reusable OTP algorithm is used).\n pos_confirmation?: string;\n\n // True if the order has been subjected to\n // refunds. False if it was simply paid.\n refunded: boolean;\n }\n export interface PaidRequest {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer and to enable signature verification without\n // database access).\n h_contract: HashCode;\n\n // Hash over custom inputs from the wallet for the contract.\n wallet_data_hash?: HashCode;\n\n // Session id for which the payment is proven.\n session_id: string;\n }\n\n export 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: HashCode;\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 interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKey;\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 export 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 export type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n // Details about why a refund failed.\n export 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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\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.\n export 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: EddsaSignature;\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: EddsaPublicKey;\n }\n\n export interface WalletRefundRequest {\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer).\n h_contract: HashCode;\n }\n export interface WalletRefundResponse {\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Successful refunds for this payment, empty array for none.\n refunds: MerchantCoinRefundStatus[];\n\n // Public key of the merchant.\n merchant_pub: EddsaPublicKey;\n }\n export type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n // Details about why a refund failed.\n export interface MerchantCoinRefundFailureStatus {\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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\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.\n export interface MerchantCoinRefundSuccessStatus {\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: EddsaSignature;\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: EddsaPublicKey;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\n }\n\n interface RewardInformation {\n // Exchange from which the reward will be withdrawn. Needed by the\n // wallet to determine denominations, fees, etc.\n exchange_url: string;\n\n // URL where to go after obtaining the reward.\n next_url: string;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n // Note that rewards that have expired MAY also result in a 404 response.\n expiration: Timestamp;\n }\n\n interface RewardPickupRequest {\n // List of planchets the wallet wants to use for the reward.\n planchets: PlanchetDetail[];\n }\n interface PlanchetDetail {\n // Hash of the denomination's public key (hashed to reduce\n // bandwidth consumption).\n denom_pub_hash: HashCode;\n\n // Coin's blinded public key.\n coin_ev: CoinEnvelope;\n }\n interface RewardResponse {\n // Blind RSA signatures over the planchets.\n // The order of the signatures matches the planchets list.\n blind_sigs: BlindSignature[];\n }\n interface BlindSignature {\n // The (blind) RSA signature. Still needs to be unblinded.\n blind_sig: BlindedRsaSignature;\n }\n\n export interface InstanceConfigurationMessage {\n // Name of the merchant instance to create (will become $INSTANCE).\n // Must match the regex ^[A-Za-z0-9][A-Za-z0-9_.@-]+$.\n id: string;\n\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Authentication settings for this instance\n auth: InstanceAuthConfigurationMessage;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstanceAuthConfigurationMessage {\n // Type of authentication.\n // \"external\": The mechant backend does not do\n // any authentication checks. Instead an API\n // gateway must do the authentication.\n // \"token\": The merchant checks an auth token.\n // See \"token\" for details.\n method: \"external\" | \"token\";\n\n // For method \"token\", this field is mandatory.\n // The token MUST begin with the string \"secret-token:\".\n // After the auth token has been set (with method \"token\"),\n // the value must be provided in a \"Authorization: Bearer $token\"\n // header.\n token?: AccessToken;\n }\n\n export interface InstanceReconfigurationMessage {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstancesResponse {\n // List of instances that are present in the backend (see Instance).\n instances: Instance[];\n }\n\n export interface Instance {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Merchant instance this response is about ($INSTANCE).\n id: string;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // List of the payment targets supported by this instance. Clients can\n // specify the desired payment target in /order requests. Note that\n // front-ends do not have to support wallets selecting payment targets.\n payment_targets: string[];\n\n // Has this instance been deleted (but not purged)?\n deleted: boolean;\n }\n\n export interface QueryInstancesResponse {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n\n // Authentication configuration.\n // Does not contain the token when token auth is configured.\n auth: {\n method: \"external\" | \"token\";\n };\n }\n\n export interface AccountKycRedirects {\n // Array of pending KYCs.\n pending_kycs: MerchantAccountKycRedirect[];\n\n // Array of exchanges with no reply.\n timeout_kycs: ExchangeKycTimeout[];\n }\n\n export interface MerchantAccountKycRedirect {\n // URL that the user should open in a browser to\n // proceed with the KYC process (as returned\n // by the exchange's /kyc-check/ endpoint).\n // Optional, missing if the account is blocked\n // due to AML and not due to KYC.\n kyc_url?: string;\n\n // AML status of the account.\n aml_status: Integer;\n\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Our bank wire account this is about.\n payto_uri: PaytoString;\n }\n\n export interface ExchangeKycTimeout {\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Numeric error code indicating errors the exchange\n // returned, or TALER_EC_INVALID for none.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information about the KYC status.\n // 0 if there was no response at all.\n exchange_http_status: number;\n }\n\n export interface AccountAddDetails {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export type FacadeCredentials =\n | NoFacadeCredentials\n | BasicAuthFacadeCredentials;\n export interface NoFacadeCredentials {\n type: \"none\";\n }\n export interface BasicAuthFacadeCredentials {\n type: \"basic\";\n\n // Username to use to authenticate\n username: string;\n\n // Password to use to authenticate\n password: string;\n }\n export interface AccountAddResponse {\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n }\n\n export interface AccountPatchDetails {\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n // If the argument is omitted, the old credentials\n // are simply preserved.\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export interface AccountsSummaryResponse {\n // List of accounts that are known for the instance.\n accounts: BankAccountSummaryEntry[];\n }\n\n // TODO: missing in docs\n export interface BankAccountSummaryEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n }\n export interface BankAccountEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // true if this account is active,\n // false if it is historic.\n active?: boolean;\n }\n\n export interface ProductAddDetail {\n // Product ID to use.\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface ProductPatchDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost?: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface InventorySummaryResponse {\n // List of products that are present in the inventory.\n products: InventoryEntry[];\n }\n\n export interface InventoryEntry {\n // Product identifier, as found in the product.\n product_id: string;\n // product_serial_id of the product in the database.\n product_serial: Integer;\n }\n\n export interface ProductDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that have already been sold.\n total_sold: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost: Integer;\n\n // Identifies where the product is in stock.\n address: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years).\n minimum_age?: Integer;\n }\n export interface LockRequest {\n // UUID that identifies the frontend performing the lock\n // Must be unique for the lifetime of the lock.\n lock_uuid: string;\n\n // How long does the frontend intend to hold the lock?\n duration: RelativeTime;\n\n // How many units should be locked?\n quantity: Integer;\n }\n\n export interface PostOrderRequest {\n // The order must at least contain the minimal\n // order detail, but can override all.\n order: Order;\n\n // If set, the backend will then set the refund deadline to the current\n // time plus the specified delay. If it's not set, refunds will not be\n // possible.\n refund_delay?: RelativeTime;\n\n // Specifies the payment target preferred by the client. Can be used\n // to select among the various (active) wire methods supported by the instance.\n payment_target?: string;\n\n // Specifies that some products are to be included in the\n // order from the inventory. For these inventory management\n // is performed (so the products must be in stock) and\n // details are completed from the product data of the backend.\n inventory_products?: MinimalInventoryProduct[];\n\n // Specifies a lock identifier that was used to\n // lock a product in the inventory. Only useful if\n // inventory_products is set. Used in case a frontend\n // reserved quantities of the individual products while\n // the shopping cart was being built. Multiple UUIDs can\n // be used in case different UUIDs were used for different\n // products (i.e. in case the user started with multiple\n // shopping sessions that were combined during checkout).\n lock_uuids?: string[];\n\n // Should a token for claiming the order be generated?\n // False can make sense if the ORDER_ID is sufficiently\n // high entropy to prevent adversarial claims (like it is\n // if the backend auto-generates one). Default is 'true'.\n create_token?: boolean;\n\n // OTP device ID to associate with the order.\n // This parameter is optional.\n otp_id?: string;\n }\n\n type Order = MinimalOrderDetail | ContractTerms;\n\n interface MinimalOrderDetail {\n // Amount to be paid by the customer.\n amount: AmountString;\n\n // Short summary of the order.\n summary: string;\n\n // See documentation of fulfillment_url in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n // When creating an order, the fulfillment URL can\n // contain ${ORDER_ID} which will be substituted with the\n // order ID of the newly created order.\n fulfillment_url?: string;\n\n // See documentation of fulfillment_message in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n }\n\n interface MinimalInventoryProduct {\n // Which product is requested (here mandatory!).\n product_id: string;\n\n // How many units of the product are requested.\n quantity: Integer;\n }\n\n export interface PostOrderResponse {\n // Order ID of the response that was just created.\n order_id: string;\n\n // Token that authorizes the wallet to claim the order.\n // Provided only if \"create_token\" was set to 'true'\n // in the request.\n token?: ClaimToken;\n }\n export interface OutOfStockResponse {\n // Product ID of an out-of-stock item.\n product_id: string;\n\n // Requested quantity.\n requested_quantity: Integer;\n\n // Available quantity (must be below requested_quantity).\n available_quantity: Integer;\n\n // When do we expect the product to be again in stock?\n // Optional, not given if unknown.\n restock_expected?: Timestamp;\n }\n\n export interface OrderHistory {\n // Timestamp-sorted array of all orders matching the query.\n // The order of the sorting depends on the sign of delta.\n orders: OrderHistoryEntry[];\n }\n export interface OrderHistoryEntry {\n // Order ID of the transaction related to this entry.\n order_id: string;\n\n // Row ID of the order in the database.\n row_id: number;\n\n // When the order was created.\n timestamp: Timestamp;\n\n // The amount of money the order is for.\n amount: AmountString;\n\n // The summary of the order.\n summary: string;\n\n // Whether some part of the order is refundable,\n // that is the refund deadline has not yet expired\n // and the total amount refunded so far is below\n // the value of the original transaction.\n refundable: boolean;\n\n // Whether the order has been paid or not.\n paid: boolean;\n }\n\n export type MerchantOrderStatusResponse =\n | CheckPaymentPaidResponse\n | CheckPaymentClaimedResponse\n | CheckPaymentUnpaidResponse;\n export interface CheckPaymentPaidResponse {\n // The customer paid for this contract.\n order_status: \"paid\";\n\n // Was the payment refunded (even partially)?\n refunded: boolean;\n\n // True if there are any approved refunds that the wallet has\n // not yet obtained.\n refund_pending: boolean;\n\n // Did the exchange wire us the funds?\n wired: boolean;\n\n // Total amount the exchange deposited into our bank account\n // for this contract, excluding fees.\n deposit_total: AmountString;\n\n // Numeric error code indicating errors the exchange\n // encountered tracking the wire transfer for this purchase (before\n // we even got to specific coin issues).\n // 0 if there were no issues.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information to track the wire transfer for this purchase.\n // 0 if there were no issues.\n exchange_http_status: number;\n\n // Total amount that was refunded, 0 if refunded is false.\n refund_amount: AmountString;\n\n // Contract terms.\n contract_terms: ContractTerms;\n\n // The wire transfer status from the exchange for this order if\n // available, otherwise empty array.\n wire_details: TransactionWireTransfer[];\n\n // Reports about trouble obtaining wire transfer details,\n // empty array if no trouble were encountered.\n wire_reports: TransactionWireReport[];\n\n // The refund details for this order. One entry per\n // refunded coin; empty array if there are no refunds.\n refund_details: RefundDetails[];\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n }\n export interface CheckPaymentClaimedResponse {\n // A wallet claimed the order, but did not yet pay for the contract.\n order_status: \"claimed\";\n\n // Contract terms.\n contract_terms: ContractTerms;\n }\n export interface CheckPaymentUnpaidResponse {\n // The order was neither claimed nor paid.\n order_status: \"unpaid\";\n\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // when was the order created\n creation_time: Timestamp;\n\n // Order summary text.\n summary: string;\n\n // Total amount of the order (to be paid by the customer).\n total_amount: AmountString;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n\n // Fulfillment URL of an already paid order. Only given if under this\n // session an already paid order with a fulfillment URL exists.\n already_paid_fulfillment_url?: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n\n // We do we NOT return the contract terms here because they may not\n // exist in case the wallet did not yet claim them.\n }\n export interface RefundDetails {\n // Reason given for the refund.\n reason: string;\n\n // Set to true if a refund is still available for the wallet for this payment.\n pending: boolean;\n\n // When was the refund approved.\n timestamp: Timestamp;\n\n // Total amount that was refunded (minus a refund fee).\n amount: AmountString;\n }\n export interface TransactionWireTransfer {\n // Responsible exchange.\n exchange_url: string;\n\n // 32-byte wire transfer identifier.\n wtid: Base32;\n\n // Execution time of the wire transfer.\n execution_time: Timestamp;\n\n // Total amount that has been wire transferred\n // to the merchant.\n amount: AmountString;\n\n // Was this transfer confirmed by the merchant via the\n // POST /transfers API, or is it merely claimed by the exchange?\n confirmed: boolean;\n }\n export interface TransactionWireReport {\n // Numerical error code.\n code: number;\n\n // Human-readable error description.\n hint: string;\n\n // Numerical error code from the exchange.\n exchange_code: number;\n\n // HTTP status code received from the exchange.\n exchange_http_status: number;\n\n // Public key of the coin for which we got the exchange error.\n coin_pub: CoinPublicKey;\n }\n\n export interface ForgetRequest {\n // Array of valid JSON paths to forgettable fields in the order's\n // contract terms.\n fields: string[];\n }\n\n export interface RefundRequest {\n // Amount to be refunded.\n refund: AmountString;\n\n // Human-readable refund justification.\n reason: string;\n }\n export interface MerchantRefundResponse {\n // URL (handled by the backend) that the wallet should access to\n // trigger refund processing.\n // taler://refund/...\n taler_refund_uri: string;\n\n // Contract hash that a client may need to authenticate an\n // HTTP request to obtain the above URI in a wallet-friendly way.\n h_contract: HashCode;\n }\n\n export interface TransferInformation {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n }\n\n export interface TransferList {\n // List of all the transfers that fit the filter that we know.\n transfers: TransferDetails[];\n }\n export interface TransferDetails {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n\n // Serial number identifying the transfer in the merchant backend.\n // Used for filtering via offset.\n transfer_serial_id: number;\n\n // Time of the execution of the wire transfer by the exchange, according to the exchange\n // Only provided if we did get an answer from the exchange.\n execution_time?: Timestamp;\n\n // True if we checked the exchange's answer and are happy with it.\n // False if we have an answer and are unhappy, missing if we\n // do not have an answer from the exchange.\n verified?: boolean;\n\n // True if the merchant uses the POST /transfers API to confirm\n // that this wire transfer took place (and it is thus not\n // something merely claimed by the exchange).\n confirmed?: boolean;\n }\n\n interface ReserveCreateRequest {\n // Amount that the merchant promises to put into the reserve.\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for rewards.\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\".\n wire_method: string;\n }\n interface ReserveCreateConfirmation {\n // Public key identifying the reserve.\n reserve_pub: EddsaPublicKey;\n\n // Wire accounts of the exchange where to transfer the funds.\n accounts: TalerExchangeApi.WireAccount[];\n }\n\n interface RewardReserveStatus {\n // Array of all known reserves (possibly empty!).\n reserves: ReserveStatusEntry[];\n }\n interface ReserveStatusEntry {\n // Public key of the reserve.\n reserve_pub: EddsaPublicKey;\n\n // Timestamp when it was established.\n creation_time: Timestamp;\n\n // Timestamp when it expires.\n expiration_time: Timestamp;\n\n // Initial amount as per reserve creation call.\n merchant_initial_amount: AmountString;\n\n // Initial amount as per exchange, 0 if exchange did\n // not confirm reserve creation yet.\n exchange_initial_amount: AmountString;\n\n // Amount picked up so far.\n pickup_amount: AmountString;\n\n // Amount approved for rewards that exceeds the pickup_amount.\n committed_amount: AmountString;\n\n // Is this reserve active (false if it was deleted but not purged)?\n active: boolean;\n }\n\n interface ReserveDetail {\n // Timestamp when it was established.\n creation_time: Timestamp;\n\n // Timestamp when it expires.\n expiration_time: Timestamp;\n\n // Initial amount as per reserve creation call.\n merchant_initial_amount: AmountString;\n\n // Initial amount as per exchange, 0 if exchange did\n // not confirm reserve creation yet.\n exchange_initial_amount: AmountString;\n\n // Amount picked up so far.\n pickup_amount: AmountString;\n\n // Amount approved for rewards that exceeds the pickup_amount.\n committed_amount: AmountString;\n\n // Array of all rewards created by this reserves (possibly empty!).\n // Only present if asked for explicitly.\n rewards?: RewardStatusEntry[];\n\n // Is this reserve active (false if it was deleted but not purged)?\n active: boolean;\n\n // Array of wire accounts of the exchange that could\n // be used to fill the reserve, can be NULL\n // if the reserve is inactive or was already filled\n accounts?: TalerExchangeApi.WireAccount[];\n\n // URL of the exchange hosting the reserve,\n // NULL if the reserve is inactive\n exchange_url: string;\n }\n interface RewardStatusEntry {\n // Unique identifier for the reward.\n reward_id: HashCode;\n\n // Total amount of the reward that can be withdrawn.\n total_amount: AmountString;\n\n // Human-readable reason for why the reward was granted.\n reason: string;\n }\n\n interface RewardCreateRequest {\n // Amount that the customer should be rewarded.\n amount: AmountString;\n\n // Justification for giving the reward.\n justification: string;\n\n // URL that the user should be directed to after receiving the reward,\n // will be included in the reward_token.\n next_url: string;\n }\n interface RewardCreateConfirmation {\n // Unique reward identifier for the reward that was created.\n reward_id: HashCode;\n\n // taler://reward URI for the reward.\n taler_reward_uri: string;\n\n // URL that will directly trigger processing\n // the reward when the browser is redirected to it.\n reward_status_url: string;\n\n // When does the reward expire?\n reward_expiration: Timestamp;\n }\n\n interface RewardDetails {\n // Amount that we authorized for this reward.\n total_authorized: AmountString;\n\n // Amount that was picked up by the user already.\n total_picked_up: AmountString;\n\n // Human-readable reason given when authorizing the reward.\n reason: string;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n expiration: Timestamp;\n\n // Reserve public key from which the reward is funded.\n reserve_pub: EddsaPublicKey;\n\n // Array showing the pickup operations of the wallet (possibly empty!).\n // Only present if asked for explicitly.\n pickups?: PickupDetail[];\n }\n interface PickupDetail {\n // Unique identifier for the pickup operation.\n pickup_id: HashCode;\n\n // Number of planchets involved.\n num_planchets: Integer;\n\n // Total amount requested for this pickup_id.\n requested_amount: AmountString;\n }\n\n interface RewardsResponse {\n // List of rewards that are present in the backend.\n rewards: Reward[];\n }\n interface Reward {\n // ID of the reward in the backend database.\n row_id: number;\n\n // Unique identifier for the reward.\n reward_id: HashCode;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n }\n\n export interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n // \"NONE\" or 0: No algorithm (no pos confirmation will be generated)\n // \"TOTP_WITHOUT_PRICE\" or 1: Without amounts (typical OTP device)\n // \"TOTP_WITH_PRICE\" or 2: With amounts (special-purpose OTP device)\n // The \"String\" variants are supported @since protocol **v7**.\n otp_algorithm: Integer | string;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDevicePatchDetails {\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDeviceSummaryResponse {\n // Array of devices that are present in our backend.\n otp_devices: OtpDeviceEntry[];\n }\n export interface OtpDeviceEntry {\n // Device identifier.\n otp_device_id: string;\n\n // Human-readable description for the device.\n device_description: string;\n }\n\n export interface OtpDeviceDetails {\n // Human-readable description for the device.\n device_description: string;\n\n // Algorithm for computing the POS confirmation.\n //\n // Currently, the following numbers are defined:\n // 0: None\n // 1: TOTP without price\n // 2: TOTP with price\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n\n // Current time for time-based OTP devices.\n // Will match the faketime argument of the\n // query if one was present, otherwise the current\n // time at the backend.\n //\n // Available since protocol **v10**.\n otp_timestamp: Integer;\n\n // Current OTP confirmation string of the device.\n // Matches exactly the string that would be returned\n // as part of a payment confirmation for the given\n // amount and time (so may contain multiple OTP codes).\n //\n // If the otp_algorithm is time-based, the code is\n // returned for the current time, or for the faketime\n // if a TIMESTAMP query argument was provided by the client.\n //\n // When using OTP with counters, the counter is **NOT**\n // increased merely because this endpoint created\n // an OTP code (this is a GET request, after all!).\n //\n // If the otp_algorithm requires an amount, the\n // amount argument must be specified in the\n // query, otherwise the otp_code is not\n // generated.\n //\n // This field is *optional* in the response, as it is\n // only provided if we could compute it based on the\n // otp_algorithm and matching client query arguments.\n //\n // Available since protocol **v10**.\n otp_code?: string;\n }\n export interface TemplateAddDetails {\n // Template ID to use.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface TemplateContractDetails {\n // Human-readable summary for the template.\n summary?: string;\n\n // Required currency for payments to the template.\n // The user may specify any amount, but it must be\n // in this currency.\n // This parameter is optional and should not be present\n // if \"amount\" is given.\n currency?: string;\n\n // The price is imposed by the merchant and cannot be changed by the customer.\n // This parameter is optional.\n amount?: AmountString;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age: Integer;\n\n // The time the customer need to pay before his order will be deleted.\n // It is deleted if the customer did not pay and if the duration is over.\n pay_duration: RelativeTime;\n }\n\n export interface TemplateContractDetailsDefaults {\n summary?: string;\n\n currency?: string;\n\n amount?: AmountString;\n\n minimum_age?: Integer;\n\n pay_duration?: RelativeTime;\n }\n export interface TemplatePatchDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateSummaryResponse {\n // List of templates that are present in our backend.\n templates: TemplateEntry[];\n }\n\n export interface TemplateEntry {\n // Template identifier, as found in the template.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n }\n\n export interface WalletTemplateDetails {\n // Hard-coded information about the contrac terms\n // for this template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface UsingTemplateDetails {\n // Summary of the template\n summary?: string;\n\n // The amount entered by the customer.\n amount?: AmountString;\n }\n\n export interface WebhookAddDetails {\n // Webhook ID to use.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookPatchDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookSummaryResponse {\n // Return webhooks that are present in our backend.\n webhooks: WebhookEntry[];\n }\n\n export interface WebhookEntry {\n // Webhook identifier, as found in the webhook.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n }\n\n export interface WebhookDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface TokenFamilyCreateRequest {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n // If not specified, merchant backend will use the current time.\n valid_after?: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export enum TokenFamilyKind {\n Discount = \"discount\",\n Subscription = \"subscription\",\n }\n\n export interface TokenFamilyUpdateRequest {\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n }\n\n export interface TokenFamiliesList {\n // All configured token families of this instance.\n token_families: TokenFamilySummary[];\n }\n\n export interface TokenFamilySummary {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export interface TokenFamilyDetails {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n\n // How many tokens have been issued for this family.\n issued: Integer;\n\n // How many tokens have been redeemed for this family.\n redeemed: Integer;\n }\n export interface ContractTerms {\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: { [lang_tag: string]: string };\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: AmountString;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional. When POSTing to the\n // merchant, the placeholder \"${ORDER_ID}\" will be\n // replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL).\n // Note that this placeholder can only be used once.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: { [lang_tag: string]: string };\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: AmountString;\n\n // List of products that are part of the purchase (see Product).\n products: Product[];\n\n // Time when this contract was generated.\n timestamp: Timestamp;\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: Timestamp;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: Timestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: Timestamp;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: EddsaPublicKey;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // More info about the merchant, see below.\n merchant: Merchant;\n\n // The hash of the merchant instance's wire details.\n h_wire: HashCode;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: Exchange[];\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: Timestamp;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: RelativeTime;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\n }\n\n export 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?: Integer;\n\n // 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?: ImageDataUrl;\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?: Timestamp;\n }\n\n export interface Tax {\n // The name of the tax.\n name: string;\n\n // Amount paid in tax.\n tax: AmountString;\n }\n export interface Merchant {\n // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\n }\n // Delivery location, loosely modeled as a subset of\n // ISO20022's PostalAddress25.\n export 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 interface Auditor {\n // Official name.\n name: string;\n\n // Auditor's public key.\n auditor_pub: EddsaPublicKey;\n\n // Base URL of the auditor.\n url: string;\n }\n export interface Exchange {\n // The exchange's base URL.\n url: string;\n\n // How much would the merchant like to use this exchange.\n // The wallet should use a suitable exchange with high\n // priority. The following priority values are used, but\n // it should be noted that they are NOT in any way normative.\n //\n // 0: likely it will not work (recently seen with account\n // restriction that would be bad for this merchant)\n // 512: merchant does not know, might be down (merchant\n // did not yet get /wire response).\n // 1024: good choice (recently confirmed working)\n priority: Integer;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKey;\n }\n}\n\nexport namespace ChallengerApi {\n export interface ChallengerTermsOfServiceResponse {\n // Name of the service\n name: \"challenger\";\n\n // libtool-style representation of the Challenger protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface ChallengeSetupResponse {\n // Nonce to use when constructing /authorize endpoint.\n nonce: string;\n }\n\n export interface Restriction {\n regex?: string;\n hint?: string;\n hint_i18n?: InternationalizedString;\n }\n\n export interface ChallengeStatus {\n // Object; map of keys (names of the fields of the address\n // to be entered by the user) to objects with a \"regex\" (string)\n // containing an extended Posix regular expression for allowed\n // address field values, and a \"hint\"/\"hint_i18n\" giving a\n // human-readable explanation to display if the value entered\n // by the user does not match the regex. Keys that are not mapped\n // to such an object have no restriction on the value provided by\n // the user. See \"ADDRESS_RESTRICTIONS\" in the challenger configuration.\n restrictions: Record<string, Restriction> | undefined;\n\n // indicates if the given address cannot be changed anymore, the\n // form should be read-only if set to true.\n fix_address: boolean;\n\n // form values from the previous submission if available, details depend\n // on the ADDRESS_TYPE, should be used to pre-populate the form\n last_address: Record<string, string> | undefined;\n\n // number of times the address can still be changed, may or may not be\n // shown to the user\n changes_left: Integer;\n }\n\n export interface ChallengeCreateResponse {\n // how many more attempts are allowed, might be shown to the user,\n // highlighting might be appropriate for low values such as 1 or 2 (the\n // form will never be used if the value is zero)\n attempts_left: Integer;\n\n // the address that is being validated, might be shown or not\n address: Object;\n\n // true if we just retransmitted the challenge, false if we sent a\n // challenge recently and thus refused to transmit it again this time;\n // might make a useful hint to the user\n transmitted: boolean;\n\n // timestamp explaining when we would re-transmit the challenge the next\n // time (at the earliest) if requested by the user\n next_tx_time: string;\n }\n\n export interface InvalidPinResponse {\n // numeric Taler error code, should be shown to indicate the error\n // compactly for reporting to developers\n ec?: number;\n\n // human-readable Taler error code, should be shown for the user to\n // understand the error\n hint: string;\n\n // how many times is the user still allowed to change the address;\n // if 0, the user should not be shown a link to jump to the\n // address entry form\n addresses_left: Integer;\n\n // how many times might the PIN still be retransmitted\n pin_transmissions_left: Integer;\n\n // how many times might the user still try entering the PIN code\n auth_attempts_left: Integer;\n\n // if true, the PIN was not even evaluated as the user previously\n // exhausted the number of attempts\n exhausted: boolean;\n\n // if true, the PIN was not even evaluated as no challenge was ever\n // issued (the user must have skipped the step of providing their\n // address first!)\n no_challenge: boolean;\n }\n\n export interface ChallengerAuthResponse {\n // Token used to authenticate access in /info.\n access_token: string;\n\n // Type of the access token.\n token_type: \"Bearer\";\n\n // Amount of time that an access token is valid (in seconds).\n expires_in: Integer;\n }\n\n export interface ChallengerInfoResponse {\n // Unique ID of the record within Challenger\n // (identifies the rowid of the token).\n id: Integer;\n\n // Address that was validated.\n // Key-value pairs, details depend on the\n // address_type.\n address: Object;\n\n // Type of the address.\n address_type: string;\n\n // How long do we consider the address to be\n // valid for this user.\n expires: Timestamp;\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 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) 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 { codecForAny } from \"./codec.js\";\nimport {\n TalerMerchantApi,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n} from \"./http-client/types.js\";\nimport { HttpStatusCode } from \"./http-status-codes.js\";\nimport {\n createPlatformHttpLib,\n expectSuccessResponseOrThrow,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http.js\";\nimport { FacadeCredentials } from \"./libeufin-api-types.js\";\nimport { LibtoolVersion } from \"./libtool-version.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n MerchantInstancesResponse,\n MerchantPostOrderRequest,\n MerchantPostOrderResponse,\n MerchantTemplateAddDetails,\n codecForMerchantPostOrderResponse,\n} from \"./merchant-api-types.js\";\nimport {\n FailCasesByMethod,\n OperationFail,\n OperationOk,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"./operation.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { TalerProtocolDuration } from \"./time.js\";\n\nconst logger = new Logger(\"MerchantApiClient.ts\");\n\n// FIXME: Explain!\nexport type TalerMerchantResultByMethod<prop extends keyof MerchantApiClient> =\n ResultByMethod<MerchantApiClient, prop>;\n\n// FIXME: Explain!\nexport type TalerMerchantErrorsByMethod<prop extends keyof MerchantApiClient> =\n FailCasesByMethod<MerchantApiClient, prop>;\n\nexport interface MerchantAuthConfiguration {\n method: \"external\" | \"token\";\n token?: string;\n}\n\n// FIXME: Why do we need this? Describe / fix!\nexport interface PartialMerchantInstanceConfig {\n auth?: MerchantAuthConfiguration;\n id: string;\n name: string;\n paytoUris: string[];\n address?: unknown;\n jurisdiction?: unknown;\n defaultWireTransferDelay?: TalerProtocolDuration;\n defaultPayDelay?: TalerProtocolDuration;\n}\n\nexport interface CreateMerchantTippingReserveRequest {\n // Amount that the merchant promises to put into the reserve\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for tipping\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\"\n wire_method: string;\n}\n\nexport interface DeleteTippingReserveArgs {\n reservePub: string;\n purge?: boolean;\n}\n\ninterface MerchantBankAccount {\n // The payto:// URI where the wallet will send coins.\n payto_uri: string;\n\n // Optional base URL for a facade where the\n // merchant backend can see incoming wire\n // transfers to reconcile its accounting\n // with that of the exchange. Used by\n // taler-merchant-wirewatch.\n credit_facade_url?: string;\n\n // Credentials for accessing the credit facade.\n credit_facade_credentials?: FacadeCredentials;\n}\n\nexport interface MerchantInstanceConfig {\n auth: MerchantAuthConfiguration;\n id: string;\n name: string;\n address: unknown;\n jurisdiction: unknown;\n use_stefan: boolean;\n default_wire_transfer_delay: TalerProtocolDuration;\n default_pay_delay: TalerProtocolDuration;\n}\n\nexport interface PrivateOrderStatusQuery {\n instance?: string;\n orderId: string;\n sessionId?: string;\n}\n\nexport interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A base64-encoded key\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: number;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: number;\n}\n\n/**\n * Client for the GNU Taler merchant backend.\n */\nexport class MerchantApiClient {\n /**\n * Base URL for the particular instance that this merchant API client\n * is for.\n */\n private baseUrl: string;\n\n readonly auth: MerchantAuthConfiguration;\n\n public readonly PROTOCOL_VERSION = \"6:0:2\";\n\n constructor(\n baseUrl: string,\n options: { auth?: MerchantAuthConfiguration } = {},\n ) {\n this.baseUrl = baseUrl;\n\n this.auth = options?.auth ?? {\n method: \"external\",\n };\n }\n\n httpClient = createPlatformHttpLib();\n\n async changeAuth(auth: MerchantAuthConfiguration): Promise<void> {\n const url = new URL(\"private/auth\", this.baseUrl);\n const res = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: auth,\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(res);\n }\n\n async getPrivateInstanceInfo(): Promise<any> {\n const url = new URL(\"private\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n return await resp.json();\n }\n\n async deleteInstance(instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(resp);\n }\n\n async createInstance(req: MerchantInstanceConfig): Promise<void> {\n const url = new URL(\"management/instances\", this.baseUrl);\n await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n }\n\n async getInstances(): Promise<MerchantInstancesResponse> {\n const url = new URL(\"management/instances\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getInstanceFullDetails(instanceId: string): Promise<any> {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n try {\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return resp.json();\n } catch (e) {\n throw e;\n }\n }\n\n async createOrder(\n req: MerchantPostOrderRequest,\n ): Promise<MerchantPostOrderResponse> {\n let url = new URL(\"private/orders\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantPostOrderResponse(),\n );\n }\n\n async deleteOrder(req: { orderId: string; force?: boolean }): Promise<void> {\n let url = new URL(`private/orders/${req.orderId}`, this.baseUrl);\n if (req.force) {\n url.searchParams.set(\"force\", \"yes\");\n }\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n if (resp.status !== 204) {\n throw Error(`failed to delete order (status ${resp.status})`);\n }\n }\n\n async queryPrivateOrderStatus(\n query: PrivateOrderStatusQuery,\n ): Promise<TalerMerchantApi.MerchantOrderStatusResponse> {\n const reqUrl = new URL(`private/orders/${query.orderId}`, this.baseUrl);\n if (query.sessionId) {\n reqUrl.searchParams.set(\"session_id\", query.sessionId);\n }\n const resp = await this.httpClient.fetch(reqUrl.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n }\n\n async giveRefund(r: {\n instance: string;\n orderId: string;\n amount: string;\n justification: string;\n }): Promise<{ talerRefundUri: string }> {\n const reqUrl = new URL(`private/orders/${r.orderId}/refund`, this.baseUrl);\n const resp = await this.httpClient.fetch(reqUrl.href, {\n method: \"POST\",\n body: {\n refund: r.amount,\n reason: r.justification,\n },\n });\n const respBody = await resp.json();\n return {\n talerRefundUri: respBody.taler_refund_uri,\n };\n }\n\n async createTemplate(req: MerchantTemplateAddDetails) {\n let url = new URL(\"private/templates\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async getTemplate(templateId: string) {\n let url = new URL(`private/templates/${templateId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAny());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig(): Promise<OperationOk<TalerMerchantApi.VersionResponse>> {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async createOtpDevice(\n req: OtpDeviceAddDetails,\n ): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>> {\n let url = new URL(\"private/otp-devices\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n private makeAuthHeader(): Record<string, string> {\n switch (this.auth.method) {\n case \"external\":\n return {};\n case \"token\":\n return {\n Authorization: `Bearer ${this.auth.token}`,\n };\n }\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 TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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", "/*\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 { codecForAmountString } from \"./amounts.js\";\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\", codecForAmountString())\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\", codecForAmountString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"closing_fee\", codecForAmountString())\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\", codecForAmountString())\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 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, Duration } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\n/**\n * Logger.\n */\nconst logger = new Logger(\"OperationThrottler.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 task.\n */\nclass TaskState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n 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 TaskThrottler {\n private perTaskInfo: { [taskId: string]: TaskState } = {};\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): TaskState {\n const s = this.perTaskInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perTaskInfo[origin] = new TaskState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(taskId: string): boolean {\n for (let [k, v] of Object.entries(this.perTaskInfo)) {\n // Remove throttled tasks that haven't seen an update in more than one hour.\n if (\n Duration.cmp(\n AbsoluteTime.difference(v.lastUpdate, AbsoluteTime.now()),\n Duration.fromSpec({ hours: 1 }),\n ) > 1\n ) {\n delete this.perTaskInfo[k];\n }\n }\n return this.getState(taskId).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(taskId: string): Record<string, unknown> {\n const state = this.getState(taskId);\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", "/*\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 * Client for the Taler (demo-)bank.\n */\n\n/**\n * Imports.\n */\nimport {\n AmountString,\n base64FromArrayBuffer,\n buildCodecForObject,\n Codec,\n codecForAny,\n codecForString,\n encodeCrock,\n getRandomBytes,\n HttpStatusCode,\n j2s,\n Logger,\n opEmptySuccess,\n opKnownHttpFailure,\n opUnknownFailure,\n stringToBytes,\n TalerError,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n checkSuccessResponseOrThrow,\n createPlatformHttpLib,\n HttpRequestLibrary,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"bank-api-client.ts\");\n\nexport enum CreditDebitIndicator {\n Credit = \"credit\",\n Debit = \"debit\",\n}\n\nexport interface BankAccountBalanceResponse {\n balance: {\n amount: AmountString;\n credit_debit_indicator: CreditDebitIndicator;\n };\n}\n\nexport interface BankUser {\n username: string;\n password: string;\n accountPaytoUri: string;\n}\n\nexport interface WithdrawalOperationInfo {\n withdrawal_id: string;\n taler_withdraw_uri: string;\n}\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nfunction makeBasicAuthHeader(username: string, password: string): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\nconst codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>\n buildCodecForObject<WithdrawalOperationInfo>()\n .property(\"withdrawal_id\", codecForString())\n .property(\"taler_withdraw_uri\", codecForString())\n .build(\"WithdrawalOperationInfo\");\n\nexport interface BankAccessApiClientArgs {\n auth?: { username: string; password: string };\n httpClient?: HttpRequestLibrary;\n}\n\nexport interface BankAccessApiCreateTransactionRequest {\n amount: AmountString;\n paytoUri: string;\n}\n\nexport class WireGatewayApiClientArgs {\n auth?: {\n username: string;\n password: string;\n };\n httpClient?: HttpRequestLibrary;\n}\n\n/**\n * This API look like it belongs to harness\n * but it will be nice to have in utils to be used by others\n */\nexport class WireGatewayApiClient {\n httpLib;\n\n constructor(\n private baseUrl: string,\n private args: WireGatewayApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n private makeAuthHeader(): Record<string, string> {\n const auth = this.args.auth;\n if (auth) {\n return {\n Authorization: makeBasicAuthHeader(auth.username, auth.password),\n };\n }\n return {};\n }\n\n async adminAddIncoming(params: {\n amount: string;\n reservePub: string;\n debitAccountPayto: string;\n }): Promise<void> {\n let url = new URL(`admin/add-incoming`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount: params.amount,\n reserve_pub: params.reservePub,\n debit_account: params.debitAccountPayto,\n },\n headers: this.makeAuthHeader(),\n });\n logger.info(`add-incoming response status: ${resp.status}`);\n await checkSuccessResponseOrThrow(resp);\n }\n}\n\nexport interface ChallengeContactData {\n // E-Mail address\n email?: string;\n\n // Phone number.\n phone?: string;\n}\n\nexport interface AccountBalance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n}\n\nexport interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n challenge_contact_data?: ChallengeContactData;\n\n // 'payto' address pointing a bank account\n // external to the libeufin-bank.\n // Payments will be sent to this bank account\n // when the user wants to convert the local currency\n // back to fiat currency outside libeufin-bank.\n cashout_payto_uri?: string;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: string;\n}\n\nexport interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: AccountBalance;\n\n // payto://-URI of the account.\n payto_uri: string;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: string;\n}\n\nexport interface ConfirmWithdrawalArgs {\n withdrawalOperationId: string;\n}\n\n/**\n * Client for the Taler corebank API.\n */\nexport class TalerCorebankApiClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n private baseUrl: string,\n private args: BankAccessApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n setAuth(auth: { username: string; password: string }) {\n this.args.auth = auth;\n }\n\n private makeAuthHeader(): Record<string, string> {\n if (!this.args.auth) {\n return {};\n }\n const authHeaderValue = makeBasicAuthHeader(\n this.args.auth.username,\n this.args.auth.password,\n );\n return {\n Authorization: authHeaderValue,\n };\n }\n\n async getAccountBalance(\n username: string,\n ): Promise<BankAccountBalanceResponse> {\n const url = new URL(`accounts/${username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getTransactions(username: string): Promise<void> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"GET\",\n headers: {\n ...this.makeAuthHeader(),\n },\n });\n\n const res = await readSuccessResponseJsonOrThrow(resp, codecForAny());\n logger.info(`result: ${j2s(res)}`);\n }\n\n async createTransaction(\n username: string,\n req: BankAccessApiCreateTransactionRequest,\n ): Promise<any> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n return await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async registerAccountExtended(req: RegisterAccountRequest): Promise<void> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n }\n\n /**\n * Register a new account and return information about it.\n *\n * This is a helper, as it does both the registration and the\n * account info query.\n */\n async registerAccount(username: string, password: string): Promise<BankUser> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n username,\n password,\n name: username,\n },\n headers: this.makeAuthHeader(),\n });\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n // FIXME: Corebank should directly return this info!\n const infoUrl = new URL(`accounts/${username}`, this.baseUrl);\n const infoResp = await this.httpLib.fetch(infoUrl.href, {\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n });\n // FIXME: Validate!\n const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(\n infoResp,\n codecForAny(),\n );\n return {\n password,\n username,\n accountPaytoUri: acctInfo.payto_uri,\n };\n }\n\n async createRandomBankUser(): Promise<BankUser> {\n const username = \"user-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n const password = \"pw-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n return await this.registerAccount(username, password);\n }\n\n async createWithdrawalOperation(\n user: string,\n amount: string,\n ): Promise<WithdrawalOperationInfo> {\n const url = new URL(`accounts/${user}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount,\n },\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForWithdrawalOperationInfo(),\n );\n }\n\n async confirmWithdrawalOperation(\n username: string,\n wopi: ConfirmWithdrawalArgs,\n ) {\n const url = new URL(\n `accounts/${username}/withdrawals/${wopi.withdrawalOperationId}/confirm`,\n this.baseUrl,\n );\n logger.info(`confirming withdrawal operation via ${url.href}`);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async abortWithdrawalOperation(wopi: WithdrawalOperationInfo): Promise<void> {\n const url = new URL(\n `withdrawals/${wopi.withdrawal_id}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\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\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) 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 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 {\n Codec,\n buildCodecForObject,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport {\n AmountString,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n} from \"./taler-types.js\";\nimport { TalerPreciseTimestamp, TalerProtocolTimestamp } from \"./time.js\";\nimport {\n RefreshReason,\n ScopeInfo,\n TalerErrorDetail,\n TransactionIdStr,\n TransactionStateFilter,\n WithdrawalExchangeAccountDetails,\n codecForScopeInfo,\n} from \"./wallet-types.js\";\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n *\n * it will be removed in next release\n *\n * @deprecated use scopeInfo\n */\n currency?: string;\n\n /**\n * return only transactions in the given scopeInfo\n */\n scopeInfo?: ScopeInfo;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * Sort order of the transaction items.\n * By default, items are sorted ascending by their\n * main timestamp.\n *\n * ascending: ascending by timestamp, but pending transactions first\n * descending: ascending by timestamp, but pending transactions first\n * stable-ascending: ascending by timestamp, with pending transactions amidst other transactions\n * (stable in the sense of: pending transactions don't jump around)\n */\n sort?: \"ascending\" | \"descending\" | \"stable-ascending\";\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n\n filterByState?: TransactionStateFilter;\n}\n\nexport interface TransactionState {\n major: TransactionMajorState;\n minor?: TransactionMinorState;\n}\n\nexport enum TransactionMajorState {\n // No state, only used when reporting transitions into the initial state\n None = \"none\",\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Suspended = \"suspended\",\n Dialog = \"dialog\",\n SuspendedAborting = \"suspended-aborting\",\n Failed = \"failed\",\n Expired = \"expired\",\n // Only used for the notification, never in the transaction history\n Deleted = \"deleted\",\n}\n\nexport enum TransactionMinorState {\n // Placeholder until D37 is fully implemented\n Unknown = \"unknown\",\n Deposit = \"deposit\",\n KycRequired = \"kyc\",\n AmlRequired = \"aml\",\n MergeKycRequired = \"merge-kyc\",\n Track = \"track\",\n SubmitPayment = \"submit-payment\",\n RebindSession = \"rebind-session\",\n Refresh = \"refresh\",\n Pickup = \"pickup\",\n AutoRefund = \"auto-refund\",\n User = \"user\",\n Bank = \"bank\",\n Exchange = \"exchange\",\n ClaimProposal = \"claim-proposal\",\n CheckRefund = \"check-refund\",\n CreatePurse = \"create-purse\",\n DeletePurse = \"delete-purse\",\n RefreshExpired = \"refresh-expired\",\n Ready = \"ready\",\n Merge = \"merge\",\n Repurchase = \"repurchase\",\n BankRegisterReserve = \"bank-register-reserve\",\n BankConfirmTransfer = \"bank-confirm-transfer\",\n WithdrawCoins = \"withdraw-coins\",\n ExchangeWaitReserve = \"exchange-wait-reserve\",\n AbortingBank = \"aborting-bank\",\n Aborting = \"aborting\",\n Refused = \"refused\",\n Withdraw = \"withdraw\",\n MerchantOrderProposed = \"merchant-order-proposed\",\n Proposed = \"proposed\",\n RefundAvailable = \"refund-available\",\n AcceptRefund = \"accept-refund\",\n PaidByOther = \"paid-by-other\",\n}\n\nexport enum TransactionAction {\n Delete = \"delete\",\n Suspend = \"suspend\",\n Resume = \"resume\",\n Abort = \"abort\",\n Fail = \"fail\",\n Retry = \"retry\",\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: TalerPreciseTimestamp;\n\n /**\n * Transaction state, as per DD37.\n */\n txState: TransactionState;\n\n /**\n * Possible transitions based on the current state.\n */\n txActions: TransactionAction[];\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 /**\n * If the transaction minor state is in KycRequired this field is going to\n * have the location where the user need to go to complete KYC information.\n */\n kycUrl?: string;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit\n | TransactionInternalWithdrawal\n | TransactionRecoup\n | TransactionDenomLoss;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n InternalWithdrawal = \"internal-withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n Recoup = \"recoup\",\n DenomLoss = \"denom-loss\",\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 * @deprecated in favor of exchangeCreditAccounts\n */\n exchangePaytoUris: string[];\n\n exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\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 exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\n}\n\nexport enum DenomLossEventType {\n DenomExpired = \"denom-expired\",\n DenomVanished = \"denom-vanished\",\n DenomUnoffered = \"denom-unoffered\",\n}\n\n/**\n * A transaction to indicate financial loss due to denominations\n * that became unusable for deposits.\n */\nexport interface TransactionDenomLoss extends TransactionCommon {\n type: TransactionType.DenomLoss;\n lossEventType: DenomLossEventType;\n exchangeBaseUrl: string;\n}\n\n/**\n * A withdrawal transaction (either bank-integrated or manual).\n */\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\n/**\n * Internal withdrawal operation, only reported on request.\n *\n * Some transactions (peer-*-credit) internally do a withdrawal,\n * but only the peer-*-credit transaction is reported.\n *\n * The internal withdrawal transaction allows to access the details of\n * the underlying withdrawal for testing/debugging.\n *\n * It is usually not reported, so that amounts of transactions properly\n * add up, since the amountEffecive of the withdrawal is already reported\n * in the peer-*-credit transaction.\n */\nexport interface TransactionInternalWithdrawal extends TransactionCommon {\n type: TransactionType.InternalWithdrawal;\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 * Only available in the right state.\n */\n talerUri: string | undefined;\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 * Only present if the transaction is in a state where the other party can\n * 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\n/**\n * The exchange revoked a key and the wallet recoups funds.\n */\nexport interface TransactionRecoup extends TransactionCommon {\n type: TransactionType.Recoup;\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 * 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 /**\n * Does this purchase has an pos validation\n */\n posConfirmation: string | undefined;\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 * 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\n/**\n * Summary information about the payment that we got a refund for.\n */\nexport interface RefundPaymentInfo {\n summary: string;\n summary_i18n?: InternationalizedString;\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\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 // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n paymentInfo: RefundPaymentInfo | undefined;\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\nexport interface DepositTransactionTrackingState {\n // Raw wire transfer identifier of the deposit.\n wireTransferId: string;\n // When was the wire transfer given to the bank.\n timestampExecuted: TalerProtocolTimestamp;\n // Total amount transfer for this wtid (including fees)\n amountRaw: AmountString;\n // Wire fee amount for this exchange\n wireFee: 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 trackingState: Array<DepositTransactionTrackingState>;\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 interface WithdrawalTransactionByURIRequest {\n talerWithdrawUri: string;\n}\n\nexport const codecForWithdrawalTransactionByURIRequest =\n (): Codec<WithdrawalTransactionByURIRequest> =>\n buildCodecForObject<WithdrawalTransactionByURIRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .build(\"WithdrawalTransactionByURIRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"scopeInfo\", codecOptional(codecForScopeInfo()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\n \"sort\",\n codecOptional(\n codecForEither(\n codecForConstString(\"ascending\"),\n codecForConstString(\"descending\"),\n codecForConstString(\"stable-ascending\"),\n ),\n ),\n )\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(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n\nexport interface ListAssociatedRefreshesRequest {\n transactionId: string;\n}\n\nexport const codecForListAssociatedRefreshesRequest =\n (): Codec<ListAssociatedRefreshesRequest> =>\n buildCodecForObject<ListAssociatedRefreshesRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ListAssociatedRefreshesRequest\");\n\nexport interface ListAssociatedRefreshesResponse {\n transactionIds: string[];\n}\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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n renderContext,\n} from \"./codec.js\";\nimport {\n CurrencySpecification,\n TemplateParams,\n WithdrawalOperationStatus,\n} from \"./index.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 AccountRestriction,\n AmountString,\n AuditorDenomSig,\n CoinEnvelope,\n DenomKeyType,\n DenominationPubKey,\n EddsaPrivateKeyString,\n ExchangeAuditor,\n ExchangeWireAccount,\n InternationalizedString,\n MerchantContractTerms,\n MerchantInfo,\n PeerContractTerms,\n UnblindedSignature,\n codecForExchangeWireAccount,\n codecForMerchantContractTerms,\n codecForPeerContractTerms,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n TalerPreciseTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForPreciseTimestamp,\n codecForTimestamp,\n} from \"./time.js\";\nimport {\n OrderShortInfo,\n TransactionState,\n TransactionType,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\ndeclare const __txId: unique symbol;\nexport type TransactionIdStr = `txn:${string}:${string}` & { [__txId]: true };\n\n/**\n * Identifier for a pending task in the wallet.\n */\ndeclare const __pndId: unique symbol;\nexport type PendingIdStr = `pnd:${string}:${string}` & { [__pndId]: true };\n\ndeclare const __tmbId: unique symbol;\nexport type TombstoneIdStr = `tmb:${string}:${string}` & { [__tmbId]: true };\n\nfunction codecForTransactionIdStr(): Codec<TransactionIdStr> {\n return {\n decode(x: any, c?: Context): TransactionIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as TransactionIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForPendingIdStr(): Codec<PendingIdStr> {\n return {\n decode(x: any, c?: Context): PendingIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as PendingIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForTombstoneIdStr(): Codec<TombstoneIdStr> {\n return {\n decode(x: any, c?: Context): TombstoneIdStr {\n if (typeof x === \"string\" && x.startsWith(\"tmb:\")) {\n return x as TombstoneIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"tmb:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\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\n/**\n * How the amount should be interpreted in a transaction\n * Effective = how the balance is change\n * Raw = effective amount without fee\n *\n * Depending on the transaction, raw can be higher than effective\n */\nexport enum TransactionAmountMode {\n Effective = \"effective\",\n Raw = \"raw\",\n}\n\nexport type GetPlanForOperationRequest =\n | GetPlanForWithdrawRequest\n | GetPlanForDepositRequest;\n// | GetPlanForPushDebitRequest\n// | GetPlanForPullCreditRequest\n// | GetPlanForPaymentRequest\n// | GetPlanForTipRequest\n// | GetPlanForRefundRequest\n// | GetPlanForPullDebitRequest\n// | GetPlanForPushCreditRequest;\n\ninterface GetPlanForWalletInitiatedOperation {\n instructedAmount: AmountString;\n mode: TransactionAmountMode;\n}\n\nexport interface ConvertAmountRequest {\n amount: AmountString;\n type: TransactionAmountMode;\n}\n\nexport const codecForConvertAmountRequest =\n buildCodecForObject<ConvertAmountRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"type\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .build(\"ConvertAmountRequest\");\n\nexport interface GetAmountRequest {\n currency: string;\n}\n\nexport const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetAmountRequest\");\n\ninterface GetPlanToCompleteOperation {\n instructedAmount: AmountString;\n}\n\nconst codecForGetPlanForWalletInitiatedOperation = <\n T extends GetPlanForWalletInitiatedOperation,\n>() =>\n buildCodecForObject<T>()\n .property(\n \"mode\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .property(\"instructedAmount\", codecForAmountString());\n\ninterface GetPlanForWithdrawRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Withdrawal;\n exchangeUrl?: string;\n}\ninterface GetPlanForDepositRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Deposit;\n account: string; //payto string\n}\ninterface GetPlanForPushDebitRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPushDebit;\n}\n\ninterface GetPlanForPullCreditRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPullCredit;\n exchangeUrl: string;\n}\n\nconst codecForGetPlanForWithdrawRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForWithdrawRequest>()\n .property(\"type\", codecForConstString(TransactionType.Withdrawal))\n .property(\"exchangeUrl\", codecOptional(codecForString()))\n .build(\"GetPlanForWithdrawRequest\");\n\nconst codecForGetPlanForDepositRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForDepositRequest>()\n .property(\"type\", codecForConstString(TransactionType.Deposit))\n .property(\"account\", codecForString())\n .build(\"GetPlanForDepositRequest\");\n\nconst codecForGetPlanForPushDebitRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPushDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushDebit))\n .build(\"GetPlanForPushDebitRequest\");\n\nconst codecForGetPlanForPullCreditRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPullCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullCredit))\n .property(\"exchangeUrl\", codecForString())\n .build(\"GetPlanForPullCreditRequest\");\n\ninterface GetPlanForPaymentRequest extends GetPlanToCompleteOperation {\n type: TransactionType.Payment;\n wireMethod: string;\n ageRestriction: number;\n maxDepositFee: AmountString;\n}\n\n// interface GetPlanForTipRequest extends GetPlanForOperationBase {\n// type: TransactionType.Tip;\n// }\n// interface GetPlanForRefundRequest extends GetPlanForOperationBase {\n// type: TransactionType.Refund;\n// }\ninterface GetPlanForPullDebitRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPullDebit;\n}\ninterface GetPlanForPushCreditRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPushCredit;\n}\n\nconst codecForGetPlanForPaymentRequest =\n buildCodecForObject<GetPlanForPaymentRequest>()\n .property(\"type\", codecForConstString(TransactionType.Payment))\n .property(\"maxDepositFee\", codecForAmountString())\n .build(\"GetPlanForPaymentRequest\");\n\nconst codecForGetPlanForPullDebitRequest =\n buildCodecForObject<GetPlanForPullDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullDebit))\n .build(\"GetPlanForPullDebitRequest\");\n\nconst codecForGetPlanForPushCreditRequest =\n buildCodecForObject<GetPlanForPushCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushCredit))\n .build(\"GetPlanForPushCreditRequest\");\n\nexport const codecForGetPlanForOperationRequest =\n (): Codec<GetPlanForOperationRequest> =>\n buildCodecForUnion<GetPlanForOperationRequest>()\n .discriminateOn(\"type\")\n .alternative(\n TransactionType.Withdrawal,\n codecForGetPlanForWithdrawRequest,\n )\n .alternative(TransactionType.Deposit, codecForGetPlanForDepositRequest)\n // .alternative(\n // TransactionType.PeerPushDebit,\n // codecForGetPlanForPushDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPullCredit,\n // codecForGetPlanForPullCreditRequest,\n // )\n // .alternative(TransactionType.Payment, codecForGetPlanForPaymentRequest)\n // .alternative(\n // TransactionType.PeerPullDebit,\n // codecForGetPlanForPullDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPushCredit,\n // codecForGetPlanForPushCreditRequest,\n // )\n .build(\"GetPlanForOperationRequest\");\n\nexport interface GetPlanForOperationResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n counterPartyAmount?: AmountString;\n details: any;\n}\n\nexport const codecForGetPlanForOperationResponse =\n (): Codec<GetPlanForOperationResponse> =>\n buildCodecForObject<GetPlanForOperationResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .property(\"details\", codecForAny())\n .property(\"counterPartyAmount\", codecOptional(codecForAmountString()))\n .build(\"GetPlanForOperationResponse\");\n\nexport interface AmountResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n}\n\nexport const codecForAmountResponse = (): Codec<AmountResponse> =>\n buildCodecForObject<AmountResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .build(\"AmountResponse\");\n\nexport enum BalanceFlag {\n IncomingKyc = \"incoming-kyc\",\n IncomingAml = \"incoming-aml\",\n IncomingConfirmation = \"incoming-confirmation\",\n OutgoingKyc = \"outgoing-kyc\",\n}\n\nexport interface WalletBalance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n /**\n * Does the balance for this currency have a pending\n * transaction?\n *\n * @deprecated use flags and pendingIncoming/pendingOutgoing instead\n */\n hasPendingTransactions: boolean;\n\n /**\n * Is there a transaction that requires user input?\n *\n * @deprecated use flags instead\n */\n requiresUserInput: boolean;\n\n flags: BalanceFlag[];\n}\n\nexport const codecForScopeInfoGlobal = (): Codec<ScopeInfoGlobal> =>\n buildCodecForObject<ScopeInfoGlobal>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Global))\n .build(\"ScopeInfoGlobal\");\n\nexport const codecForScopeInfoExchange = (): Codec<ScopeInfoExchange> =>\n buildCodecForObject<ScopeInfoExchange>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Exchange))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoExchange\");\n\nexport const codecForScopeInfoAuditor = (): Codec<ScopeInfoAuditor> =>\n buildCodecForObject<ScopeInfoAuditor>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Auditor))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoAuditor\");\n\nexport const codecForScopeInfo = (): Codec<ScopeInfo> =>\n buildCodecForUnion<ScopeInfo>()\n .discriminateOn(\"type\")\n .alternative(ScopeType.Global, codecForScopeInfoGlobal())\n .alternative(ScopeType.Exchange, codecForScopeInfoExchange())\n .alternative(ScopeType.Auditor, codecForScopeInfoAuditor())\n .build(\"ScopeInfo\");\n\nexport interface GetCurrencySpecificationRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForGetCurrencyInfoRequest =\n (): Codec<GetCurrencySpecificationRequest> =>\n buildCodecForObject<GetCurrencySpecificationRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"GetCurrencySpecificationRequest\");\n\nexport interface ListExchangesForScopedCurrencyRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForListExchangesForScopedCurrencyRequest =\n (): Codec<ListExchangesForScopedCurrencyRequest> =>\n buildCodecForObject<ListExchangesForScopedCurrencyRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"ListExchangesForScopedCurrencyRequest\");\n\nexport interface GetCurrencySpecificationResponse {\n currencySpecification: CurrencySpecification;\n}\n\nexport interface BuiltinExchange {\n exchangeBaseUrl: string;\n currencyHint: string;\n}\n\nexport interface PartialWalletRunConfig {\n builtin?: Partial<WalletRunConfig[\"builtin\"]>;\n testing?: Partial<WalletRunConfig[\"testing\"]>;\n features?: Partial<WalletRunConfig[\"features\"]>;\n}\n\nexport interface WalletRunConfig {\n /**\n * Initialization values useful for a complete startup.\n *\n * These are values may be overridden by different wallets\n */\n builtin: {\n exchanges: BuiltinExchange[];\n };\n\n /**\n * Unsafe options which it should only be used to create\n * testing environment.\n */\n testing: {\n /**\n * Allow withdrawal of denominations even though they are about to expire.\n */\n denomselAllowLate: boolean;\n devModeActive: boolean;\n insecureTrustExchange: boolean;\n preventThrottling: boolean;\n skipDefaults: boolean;\n emitObservabilityEvents?: boolean;\n };\n\n /**\n * Configurations values that may be safe to show to the user\n */\n features: {\n allowHttp: boolean;\n };\n}\n\nexport interface InitRequest {\n config?: PartialWalletRunConfig;\n}\n\nexport const codecForInitRequest = (): Codec<InitRequest> =>\n buildCodecForObject<InitRequest>()\n .property(\"config\", codecForAny())\n .build(\"InitRequest\");\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 ScopeInfoGlobal = { type: ScopeType.Global; currency: string };\nexport type ScopeInfoExchange = {\n type: ScopeType.Exchange;\n currency: string;\n url: string;\n};\nexport type ScopeInfoAuditor = {\n type: ScopeType.Auditor;\n currency: string;\n url: string;\n};\n\nexport type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;\n\nexport interface BalancesResponse {\n balances: WalletBalance[];\n}\n\nexport const codecForBalance = (): Codec<WalletBalance> =>\n buildCodecForObject<WalletBalance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForAmountString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForAmountString())\n .property(\"pendingOutgoing\", codecForAmountString())\n .property(\"requiresUserInput\", codecForBoolean())\n .property(\"flags\", codecForAny()) // FIXME\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 * Coin was lost as the denomination is not usable anymore.\n */\n DenomLoss = \"denom-loss\",\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: AmountString;\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: TransactionIdStr;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: TransactionIdStr;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecOptional(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\", codecForTransactionIdStr())\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\", codecForTransactionIdStr())\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 * @deprecated use transactionId instead\n */\n walletRewardId: string;\n\n /**\n * Tip transaction ID.\n */\n transactionId: TransactionIdStr;\n\n /**\n * Has the tip already been accepted?\n */\n accepted: boolean;\n\n /**\n * Amount that the merchant gave.\n */\n rewardAmountRaw: AmountString;\n\n /**\n * Amount that arrived at the wallet.\n * Might be lower than the raw amount due to fees.\n */\n rewardAmountEffective: 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: TransactionIdStr;\n next_url?: string;\n}\n\nexport const codecForPrepareTipResult = (): Codec<PrepareTipResult> =>\n buildCodecForObject<PrepareTipResult>()\n .property(\"accepted\", codecForBoolean())\n .property(\"rewardAmountRaw\", codecForAmountString())\n .property(\"rewardAmountEffective\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"expirationTimestamp\", codecForTimestamp)\n .property(\"walletRewardId\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"PrepareRewardResult\");\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(\"transactionId\", codecForTransactionIdStr())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\nexport interface BalanceDetails {}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PaymentInsufficientBalanceDetails {\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 balanceReceiverAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceReceiverDepositable: AmountString;\n\n balanceExchangeDepositable: AmountString;\n\n /**\n * Maximum effective amount that the wallet can spend,\n * when all fees are paid by the wallet.\n */\n maxEffectiveSpendAmount: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n balanceExchangeDepositable: AmountString;\n balanceAgeAcceptable: AmountString;\n balanceReceiverAcceptable: AmountString;\n balanceReceiverDepositable: AmountString;\n maxEffectiveSpendAmount: AmountString;\n /**\n * Exchange doesn't have global fees configured for the relevant year,\n * p2p payments aren't possible.\n */\n missingGlobalFees: boolean;\n };\n };\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PaymentInsufficientBalanceDetails> =>\n buildCodecForObject<PaymentInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceReceiverAcceptable\", codecForAmountString())\n .property(\"balanceReceiverDepositable\", codecForAmountString())\n .property(\"balanceExchangeDepositable\", codecForAmountString())\n .property(\"perExchange\", codecForAny())\n .property(\"maxEffectiveSpendAmount\", 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(\"transactionId\", codecForTransactionIdStr())\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\", codecOptional(codecForAmountString()))\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecForString())\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\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 transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId instead\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: AmountString;\n talerUri: string;\n balanceDetails: PaymentInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n transactionId: TransactionIdStr;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: AmountString;\n amountEffective: AmountString | undefined;\n contractTermsHash: string;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n talerUri: string;\n}\n\nexport interface BankWithdrawDetails {\n status: WithdrawalOperationStatus;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n operationId: string;\n apiBaseUrl: string;\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: TransactionIdStr;\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 AbortDeposit = \"abort-deposit\",\n AbortPeerPushDebit = \"abort-peer-push-debit\",\n AbortPeerPullDebit = \"abort-peer-pull-debit\",\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 * 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 ExchangesShortListResponse {\n exchanges: ShortExchangeListItem[];\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n implementationSemver: string;\n implementationGitHash: string;\n\n /**\n * Wallet-core protocol version supported by this implementation\n * of the API (\"server\" version).\n */\n version: string;\n exchange: string;\n merchant: string;\n\n bankIntegrationApiRange: string;\n bankConversionApiRange: string;\n corebankApiRange: string;\n\n /**\n * @deprecated as bank was split into multiple APIs with separate versioning\n */\n bank: string;\n\n /**\n * @deprecated\n */\n hash: string | undefined;\n\n /**\n * @deprecated will be removed\n */\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\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\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeWireAccount[];\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 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(codecForExchangeWireAccount()))\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 auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n Pending = \"pending\",\n Proposed = \"proposed\",\n Accepted = \"accepted\",\n}\n\nexport enum ExchangeEntryStatus {\n Preset = \"preset\",\n Ephemeral = \"ephemeral\",\n Used = \"used\",\n}\n\nexport enum ExchangeUpdateStatus {\n Initial = \"initial\",\n InitialUpdate = \"initial-update\",\n Suspended = \"suspended\",\n UnavailableUpdate = \"unavailable-update\",\n Ready = \"ready\",\n ReadyUpdate = \"ready-update\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\nexport interface ShortExchangeListItem {\n exchangeBaseUrl: string;\n}\n\n/**\n * Info about an exchange entry in the wallet.\n */\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n masterPub: string | undefined;\n currency: string;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n ageRestrictionOptions: number[];\n\n /**\n * P2P payments are disabled with this exchange\n * (e.g. because no global fees are configured).\n */\n peerPaymentsDisabled: boolean;\n\n /**\n * Set to true if this exchange doesn't charge any fees.\n */\n noFees: boolean;\n\n scopeInfo: ScopeInfo;\n\n lastUpdateTimestamp: TalerPreciseTimestamp | undefined;\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\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(\"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(\"masterPub\", codecOptional(codecForString()))\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeEntryStatus\", codecForAny())\n .property(\"exchangeUpdateStatus\", codecForAny())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .property(\"scopeInfo\", codecForScopeInfo())\n .property(\"lastUpdateErrorInfo\", codecForAny())\n .property(\"lastUpdateTimestamp\", codecOptional(codecForPreciseTimestamp))\n .property(\"noFees\", codecForBoolean())\n .property(\"peerPaymentsDisabled\", codecForBoolean())\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 * @deprecated in favor of withdrawalAccountsList\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\n\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawalDetailsForAmount {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n *\n * @deprecated the client should query the exchange entry instead\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 * Number of coins that would be used for withdrawal.\n *\n * The UIs should warn if this number is too high (roughly at >100).\n */\n numCoins: number;\n\n /**\n * Ways to pay the exchange.\n *\n * @deprecated in favor of withdrawalAccountsList\n */\n paytoUris: string[];\n\n /**\n * Ways to pay the exchange, including accounts that require currency conversion.\n */\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\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 * Scope info of the currency withdrawn.\n */\n scopeInfo: ScopeInfo;\n}\n\nexport interface DenomSelItem {\n denomPubHash: string;\n count: number;\n /**\n * Number of denoms/planchets to skip, because\n * a re-denomination effectively deleted them.\n */\n skip?: number;\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: DenomSelItem[];\n earliestDepositExpiration: TalerProtocolTimestamp;\n hasDenomWithAgeRestriction: boolean;\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 exchangeCreditAccountDetails: WithdrawalExchangeAccountDetails[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\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 scopeInfo: ScopeInfo;\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 /**\n * Language of the returned content.\n *\n * If missing, language is unknown.\n */\n contentLanguage: string | undefined;\n\n /**\n * Available languages as advertised by the exchange.\n */\n tosAvailableLanguages: string[];\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: AmountString;\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\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: AmountString;\n amountToSpend: AmountString;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"IntegrationTestArgs\");\n\nexport interface IntegrationTestV2Args {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n}\n\nexport const codecForIntegrationTestV2Args = (): Codec<IntegrationTestV2Args> =>\n buildCodecForObject<IntegrationTestV2Args>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"IntegrationTestV2Args\");\n\nexport interface GetExchangeEntryByUrlRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeEntryByUrlRequest =\n (): Codec<GetExchangeEntryByUrlRequest> =>\n buildCodecForObject<GetExchangeEntryByUrlRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"GetExchangeEntryByUrlRequest\");\n\nexport type GetExchangeEntryByUrlResponse = ExchangeListItem;\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use a separate API call to start a forced exchange update instead\n */\n forceUpdate?: boolean;\n\n masterPub?: string;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .property(\"masterPub\", codecOptional(codecForString()))\n .build(\"AddExchangeRequest\");\n\nexport interface UpdateExchangeEntryRequest {\n exchangeBaseUrl: string;\n force?: boolean;\n}\n\nexport const codecForUpdateExchangeEntryRequest =\n (): Codec<UpdateExchangeEntryRequest> =>\n buildCodecForObject<UpdateExchangeEntryRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"force\", codecOptional(codecForBoolean()))\n .build(\"UpdateExchangeEntryRequest\");\n\nexport interface GetExchangeResourcesRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeResourcesRequest =\n (): Codec<GetExchangeResourcesRequest> =>\n buildCodecForObject<GetExchangeResourcesRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"GetExchangeResourcesRequest\");\n\nexport interface GetExchangeResourcesResponse {\n hasResources: boolean;\n}\n\nexport interface DeleteExchangeRequest {\n exchangeBaseUrl: string;\n purge?: boolean;\n}\n\nexport const codecForDeleteExchangeRequest = (): Codec<DeleteExchangeRequest> =>\n buildCodecForObject<DeleteExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"purge\", codecOptional(codecForBoolean()))\n .build(\"DeleteExchangeRequest\");\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 acceptLanguage?: string;\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .property(\"acceptLanguage\", codecOptional(codecForString()))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * Instead of generating a fresh, random reserve key pair,\n * use the provided reserve private key.\n *\n * Use with caution. Usage of this field may be restricted\n * to developer mode.\n */\n forceReservePriv?: EddsaPrivateKeyString;\n}\n\nexport const codecForAcceptManualWithdrawalRequest =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"forceReservePriv\", codecOptional(codecForString()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * ID provided by the client to cancel the request.\n *\n * If the same request is made again with the same clientCancellationId,\n * all previous requests are cancelled.\n *\n * The cancelled request will receive an error response with\n * an error code that indicates the cancellation.\n *\n * The cancellation is best-effort, responses might still arrive.\n */\n clientCancellationId?: string;\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\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"clientCancellationId\", codecOptional(codecForString()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ForgetExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForgetExchangeTosRequest =\n (): Codec<ForgetExchangeTosRequest> =>\n buildCodecForObject<ForgetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"ForgetExchangeTosRequest\");\n\nexport interface AcceptRefundRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<AcceptRefundRequest> =>\n buildCodecForObject<AcceptRefundRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AcceptRefundRequest\");\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 notifyChangeFromPendingTimeoutMs?: number;\n}\n\nexport const codecForGetWithdrawalDetailsForUri =\n (): Codec<GetWithdrawalDetailsForUriRequest> =>\n buildCodecForObject<GetWithdrawalDetailsForUriRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\n \"notifyChangeFromPendingTimeoutMs\",\n codecOptional(codecForNumber()),\n )\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 // @deprecated use transaction id\n proposalId?: string;\n transactionId?: string;\n}\n\nexport const codecForGetContractTermsDetails =\n (): Codec<GetContractTermsDetailsRequest> =>\n buildCodecForObject<GetContractTermsDetailsRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(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 SharePaymentRequest {\n merchantBaseUrl: string;\n orderId: string;\n}\nexport const codecForSharePaymentRequest = (): Codec<SharePaymentRequest> =>\n buildCodecForObject<SharePaymentRequest>()\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"orderId\", codecForString())\n .build(\"SharePaymentRequest\");\n\nexport interface SharePaymentResult {\n privatePayUri: string;\n}\nexport const codecForSharePaymentResult = (): Codec<SharePaymentResult> =>\n buildCodecForObject<SharePaymentResult>()\n .property(\"privatePayUri\", codecForString())\n .build(\"SharePaymentResult\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams?: TemplateParams;\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 /**\n * @deprecated use transactionId instead\n */\n proposalId?: string;\n transactionId?: TransactionIdStr;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\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}\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: AmountString;\n /**\n * Corebank API base URL.\n */\n corebankApiBaseUrl: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\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\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"WithdrawTestBalanceRequest\");\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 RefreshCoinSpec {\n coinPub: string;\n amount?: AmountString;\n}\n\nexport const codecForRefreshCoinSpec = (): Codec<RefreshCoinSpec> =>\n buildCodecForObject<RefreshCoinSpec>()\n .property(\"amount\", codecForAmountString())\n .property(\"coinPub\", codecForString())\n .build(\"ForceRefreshRequest\");\n\nexport interface ForceRefreshRequest {\n refreshCoinSpecs: RefreshCoinSpec[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"refreshCoinSpecs\", codecForList(codecForRefreshCoinSpec()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport interface StartRefundQueryForUriResponse {\n /**\n * Transaction id of the *payment* where the refund query was started.\n */\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface StartRefundQueryRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForStartRefundQueryRequest =\n (): Codec<StartRefundQueryRequest> =>\n buildCodecForObject<StartRefundQueryRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"StartRefundQueryRequest\");\n\nexport interface PrepareRewardRequest {\n talerRewardUri: string;\n}\n\nexport const codecForPrepareRewardRequest = (): Codec<PrepareRewardRequest> =>\n buildCodecForObject<PrepareRewardRequest>()\n .property(\"talerRewardUri\", codecForString())\n .build(\"PrepareRewardRequest\");\n\nexport interface AcceptRewardRequest {\n /**\n * @deprecated use transactionId\n */\n walletRewardId?: string;\n /**\n * it will be required when \"walletRewardId\" is removed\n */\n transactionId?: TransactionIdStr;\n}\n\nexport const codecForAcceptTipRequest = (): Codec<AcceptRewardRequest> =>\n buildCodecForObject<AcceptRewardRequest>()\n .property(\"walletRewardId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"AcceptRewardRequest\");\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForFailTransactionRequest =\n (): Codec<FailTransactionRequest> =>\n buildCodecForObject<FailTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"FailTransactionRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForResumeTransaction = (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AbortTransactionRequest\");\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n /**\n * Pre-allocated transaction ID.\n * Allows clients to easily handle notifications\n * that occur while the operation has been created but\n * before the creation request has returned.\n */\n transactionId?: TransactionIdStr;\n depositPaytoUri: string;\n amount: AmountString;\n}\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 fees: DepositGroupFees;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: TransactionIdStr;\n}\n\nexport interface TxIdResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawUriInfoResponse {\n operationId: string;\n status: WithdrawalOperationStatus;\n confirmTransferUrl?: string;\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"operationId\", codecForString())\n .property(\"confirmTransferUrl\", codecOptional(codecForString()))\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\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 TestingListTasksForTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface TestingListTasksForTransactionsResponse {\n taskIdList: string[];\n}\n\nexport const codecForTestingListTasksForTransactionRequest =\n (): Codec<TestingListTasksForTransactionRequest> =>\n buildCodecForObject<TestingListTasksForTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"TestingListTasksForTransactionRequest\");\n\nexport interface DeleteTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\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: TransactionIdStr;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: TransactionIdStr;\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: TransactionIdStr;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: TransactionIdStr;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: TalerPreciseTimestamp;\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 ActiveTask {\n taskId: string;\n transaction: TransactionIdStr | undefined;\n firstTry: AbsoluteTime | undefined;\n nextTry: AbsoluteTime | undefined;\n retryCounter: number | undefined;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport interface GetActiveTasksResponse {\n tasks: ActiveTask[];\n}\n\nexport const codecForActiveTask = (): Codec<ActiveTask> =>\n buildCodecForObject<ActiveTask>()\n .property(\"taskId\", codecForString())\n .property(\"transaction\", codecOptional(codecForTransactionIdStr()))\n .property(\"retryCounter\", codecOptional(codecForNumber()))\n .property(\"firstTry\", codecOptional(codecForAbsoluteTime))\n .property(\"nextTry\", codecOptional(codecForAbsoluteTime))\n .property(\"lastError\", codecOptional(codecForTalerErrorDetail()))\n .build(\"ActiveTask\");\n\nexport const codecForGetActiveTasks = (): Codec<GetActiveTasksResponse> =>\n buildCodecForObject<GetActiveTasksResponse>()\n .property(\"tasks\", codecForList(codecForActiveTask()))\n .build(\"GetActiveTasks\");\n\nexport interface ImportDbRequest {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDbRequest> =>\n buildCodecForObject<ImportDbRequest>()\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 /**\n * Number of coins used for the payment.\n */\n numCoins: number;\n}\n\nexport interface SelectedCoin {\n denomPubHash: string;\n coinPub: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\nexport interface SelectedProspectiveCoin {\n denomPubHash: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n coins: SelectedCoin[];\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 ProspectivePayCoinSelection {\n prospectiveCoins: SelectedProspectiveCoin[];\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 exchangeBaseUrl: string;\n /**\n * Maximum expiration date, based on how close the coins\n * used for the payment are to expiry.\n *\n * The value is based on when the wallet would typically\n * automatically refresh the coins on its own, leaving enough\n * time to get a refund for the push payment and refresh the\n * coin.\n */\n maxExpirationDate: TalerProtocolTimestamp;\n}\n\nexport interface InitiatePeerPushDebitRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushDebitResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n transactionId: TransactionIdStr;\n}\n\nexport const codecForInitiatePeerPushDebitRequest =\n (): Codec<InitiatePeerPushDebitRequest> =>\n buildCodecForObject<InitiatePeerPushDebitRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushDebitRequest\");\n\nexport interface PreparePeerPushCreditRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n transactionId: TransactionIdStr;\n\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use transaction ID instead.\n */\n peerPushCreditId: string;\n\n /**\n * @deprecated\n */\n amount: AmountString;\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 peerPullDebitId: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCreditRequest> =>\n buildCodecForObject<PreparePeerPushCreditRequest>()\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 transactionId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n transactionId: TransactionIdStr;\n}\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(\"transactionId\", codecForTransactionIdStr())\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\n /**\n * Number of coins that will be used,\n * can be used by the UI to warn if excessively large.\n */\n numCoins: number;\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 * @deprecated since it's not necessarily valid yet until the tx is in the right state\n */\n talerUri: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport interface ValidateIbanRequest {\n iban: string;\n}\n\nexport const codecForValidateIbanRequest = (): Codec<ValidateIbanRequest> =>\n buildCodecForObject<ValidateIbanRequest>()\n .property(\"iban\", codecForString())\n .build(\"ValidateIbanRequest\");\n\nexport interface ValidateIbanResponse {\n valid: boolean;\n}\n\nexport const codecForValidateIbanResponse = (): Codec<ValidateIbanResponse> =>\n buildCodecForObject<ValidateIbanResponse>()\n .property(\"valid\", codecForBoolean())\n .build(\"ValidateIbanResponse\");\n\nexport type TransactionStateFilter = \"nonfinal\";\n\nexport interface TransactionRecordFilter {\n onlyState?: TransactionStateFilter;\n onlyCurrency?: string;\n}\n\nexport interface StoredBackupList {\n storedBackups: {\n name: string;\n }[];\n}\n\nexport interface CreateStoredBackupResponse {\n name: string;\n}\n\nexport interface RecoverStoredBackupRequest {\n name: string;\n}\n\nexport interface DeleteStoredBackupRequest {\n name: string;\n}\n\nexport const codecForDeleteStoredBackupRequest =\n (): Codec<DeleteStoredBackupRequest> =>\n buildCodecForObject<DeleteStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"DeleteStoredBackupRequest\");\n\nexport const codecForRecoverStoredBackupRequest =\n (): Codec<RecoverStoredBackupRequest> =>\n buildCodecForObject<RecoverStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"RecoverStoredBackupRequest\");\n\nexport interface TestingSetTimetravelRequest {\n offsetMs: number;\n}\n\nexport const codecForTestingSetTimetravelRequest =\n (): Codec<TestingSetTimetravelRequest> =>\n buildCodecForObject<TestingSetTimetravelRequest>()\n .property(\"offsetMs\", codecForNumber())\n .build(\"TestingSetTimetravelRequest\");\n\nexport interface AllowedAuditorInfo {\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport interface AllowedExchangeInfo {\n exchangeBaseUrl: string;\n exchangePub: string;\n}\n\n/**\n * Data extracted from the contract terms that is relevant for payment\n * processing in the wallet.\n */\nexport interface WalletContractData {\n /**\n * Fulfillment URL, or the empty string if the order has no fulfillment URL.\n *\n * Stored as a non-nullable string as we use this field for IndexedDB indexing.\n */\n fulfillmentUrl: string;\n\n contractTermsHash: string;\n fulfillmentMessage?: string;\n fulfillmentMessageI18n?: InternationalizedString;\n merchantSig: string;\n merchantPub: string;\n merchant: MerchantInfo;\n amount: AmountString;\n orderId: string;\n merchantBaseUrl: string;\n summary: string;\n summaryI18n: { [lang_tag: string]: string } | undefined;\n autoRefund: TalerProtocolDuration | undefined;\n payDeadline: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n allowedExchanges: AllowedExchangeInfo[];\n timestamp: TalerProtocolTimestamp;\n wireMethod: string;\n wireInfoHash: string;\n maxDepositFee: AmountString;\n minimumAge?: number;\n}\n\nexport interface TestingWaitTransactionRequest {\n transactionId: TransactionIdStr;\n txState: TransactionState;\n}\n\nexport interface TestingGetDenomStatsRequest {\n exchangeBaseUrl: string;\n}\n\nexport interface TestingGetDenomStatsResponse {\n numKnown: number;\n numOffered: number;\n numLost: number;\n}\n\nexport const codecForTestingGetDenomStatsRequest =\n (): Codec<TestingGetDenomStatsRequest> =>\n buildCodecForObject<TestingGetDenomStatsRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"TestingGetDenomStatsRequest\");\n\nexport interface WithdrawalExchangeAccountDetails {\n /**\n * Payto URI to credit the exchange.\n *\n * Depending on whether the (manual!) withdrawal is accepted or just\n * being checked, this already includes the subject with the\n * reserve public key.\n */\n paytoUri: string;\n\n /**\n * Status that indicates whether the account can be used\n * by the user to send funds for a withdrawal.\n *\n * ok: account should be shown to the user\n * error: account should not be shown to the user, UIs might render the error (in conversionError),\n * especially in dev mode.\n */\n status: \"ok\" | \"error\";\n\n /**\n * Transfer amount. Might be in a different currency than the requested\n * amount for withdrawal.\n *\n * Absent if this is a conversion account and the conversion failed.\n */\n transferAmount?: AmountString;\n\n /**\n * Currency specification for the external currency.\n *\n * Only included if this account requires a currency conversion.\n */\n currencySpecification?: CurrencySpecification;\n\n /**\n * Further restrictions for sending money to the\n * exchange.\n */\n creditRestrictions?: AccountRestriction[];\n\n /**\n * Label given to the account or the account's bank by the exchange.\n */\n bankLabel?: string;\n\n /*\n * Display priority assigned to this bank account by the exchange.\n */\n priority?: number;\n\n /**\n * Error that happened when attempting to request the conversion rate.\n */\n conversionError?: TalerErrorDetail;\n}\n\nexport interface PrepareWithdrawExchangeRequest {\n /**\n * A taler://withdraw-exchange URI.\n */\n talerUri: string;\n}\n\nexport const codecForPrepareWithdrawExchangeRequest =\n (): Codec<PrepareWithdrawExchangeRequest> =>\n buildCodecForObject<PrepareWithdrawExchangeRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PrepareWithdrawExchangeRequest\");\n\nexport interface PrepareWithdrawExchangeResponse {\n /**\n * Base URL of the exchange that already existed\n * or was ephemerally added as an exchange entry to\n * the wallet.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount from the taler://withdraw-exchange URI.\n * Only present if specified in the URI.\n */\n amount?: AmountString;\n}\n\nexport interface ExchangeEntryState {\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n}\n\nexport interface ListGlobalCurrencyAuditorsResponse {\n auditors: {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n }[];\n}\n\nexport interface ListGlobalCurrencyExchangesResponse {\n exchanges: {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n }[];\n}\n\nexport interface AddGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForAddGlobalCurrencyExchangeRequest =\n (): Codec<AddGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<AddGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"AddGlobalCurrencyExchangeRequest\");\n\nexport interface RemoveGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyExchangeRequest =\n (): Codec<RemoveGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"RemoveGlobalCurrencyExchangeRequest\");\n\nexport interface AddGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForAddGlobalCurrencyAuditorRequest =\n (): Codec<AddGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<AddGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForString())\n .property(\"auditorPub\", codecForString())\n .build(\"AddGlobalCurrencyAuditorRequest\");\n\nexport interface RemoveGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyAuditorRequest =\n (): Codec<RemoveGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForString())\n .property(\"auditorPub\", codecForString())\n .build(\"RemoveGlobalCurrencyAuditorRequest\");\n\n/**\n * Information about one provider.\n *\n * We don't store the account key here,\n * as that's derived from the wallet root key.\n */\nexport interface ProviderInfo {\n active: boolean;\n syncProviderBaseUrl: string;\n name: string;\n terms?: BackupProviderTerms;\n /**\n * Last communication issue with the provider.\n */\n lastError?: TalerErrorDetail;\n lastSuccessfulBackupTimestamp?: TalerPreciseTimestamp;\n lastAttemptedBackupTimestamp?: TalerPreciseTimestamp;\n paymentProposalIds: string[];\n backupProblem?: BackupProblem;\n paymentStatus: ProviderPaymentStatus;\n}\n\nexport interface BackupProviderTerms {\n supportedProtocolVersion: string;\n annualFee: AmountString;\n storageLimitInMegabytes: number;\n}\n\nexport type BackupProblem =\n | BackupUnreadableProblem\n | BackupConflictingDeviceProblem;\n\nexport interface BackupUnreadableProblem {\n type: \"backup-unreadable\";\n}\n\nexport interface BackupConflictingDeviceProblem {\n type: \"backup-conflicting-device\";\n otherDeviceId: string;\n myDeviceId: string;\n backupTimestamp: AbsoluteTime;\n}\n\nexport type ProviderPaymentStatus =\n | ProviderPaymentTermsChanged\n | ProviderPaymentPaid\n | ProviderPaymentInsufficientBalance\n | ProviderPaymentUnpaid\n | ProviderPaymentPending;\n\nexport enum ProviderPaymentType {\n Unpaid = \"unpaid\",\n Pending = \"pending\",\n InsufficientBalance = \"insufficient-balance\",\n Paid = \"paid\",\n TermsChanged = \"terms-changed\",\n}\n\nexport interface ProviderPaymentUnpaid {\n type: ProviderPaymentType.Unpaid;\n}\n\nexport interface ProviderPaymentInsufficientBalance {\n type: ProviderPaymentType.InsufficientBalance;\n amount: AmountString;\n}\n\nexport interface ProviderPaymentPending {\n type: ProviderPaymentType.Pending;\n talerUri?: string;\n}\n\nexport interface ProviderPaymentPaid {\n type: ProviderPaymentType.Paid;\n paidUntil: AbsoluteTime;\n}\n\nexport interface ProviderPaymentTermsChanged {\n type: ProviderPaymentType.TermsChanged;\n paidUntil: AbsoluteTime;\n oldTerms: BackupProviderTerms;\n newTerms: BackupProviderTerms;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport interface SyncTermsOfServiceResponse {\n // maximum backup size supported\n storage_limit_in_megabytes: number;\n\n // Fee for an account, per year.\n annual_fee: AmountString;\n\n // protocol version supported by the server,\n // for now always \"0.0\".\n version: string;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport const codecForSyncTermsOfServiceResponse =\n (): Codec<SyncTermsOfServiceResponse> =>\n buildCodecForObject<SyncTermsOfServiceResponse>()\n .property(\"storage_limit_in_megabytes\", codecForNumber())\n .property(\"annual_fee\", codecForAmountString())\n .property(\"version\", codecForString())\n .build(\"SyncTermsOfServiceResponse\");\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { AmountJson, Amounts } from \"../amounts.js\";\nimport { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport { TalerErrorCode } from \"../taler-error-codes.js\";\nimport { codecForTalerErrorDetail } from \"../wallet-types.js\";\nimport {\n AccessToken,\n TalerBankConversionApi,\n codecForCashinConversionResponse,\n codecForCashoutConversionResponse,\n codecForConversionBankConfig,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerBankConversionResultByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = ResultByMethod<TalerBankConversionHttpClient, prop>;\nexport type TalerBankConversionErrorsByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;\n\nexport enum TalerBankConversionCacheEviction {\n UPDATE_RATE,\n}\n\n/**\n * The API is used by the wallets.\n */\nexport class TalerBankConversionHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForConversionBankConfig());\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate\n *\n */\n async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) {\n const url = new URL(`cashin-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashinConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate\n *\n */\n async getCashoutRate(conversion: {\n debit?: AmountJson;\n credit?: AmountJson;\n }) {\n const url = new URL(`cashout-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate\n *\n */\n async updateConversionRate(\n auth: AccessToken,\n body: TalerBankConversionApi.ConversionRate,\n ) {\n const url = new URL(`conversion-rate`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerBankConversionCacheEviction.UPDATE_RATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n LibtoolVersion,\n LongPollParams,\n OperationAlternative,\n OperationFail,\n OperationOk,\n TalerErrorCode,\n codecForChallenge,\n codecForTanTransmission,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opKnownTalerFailure\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n PaginationParams,\n TalerCorebankApi,\n UserAndToken,\n WithdrawalOperationStatus,\n codecForAccountData,\n codecForBankAccountCreateWithdrawalResponse,\n codecForBankAccountTransactionInfo,\n codecForBankAccountTransactionsResponse,\n codecForCashoutPending,\n codecForCashoutStatusResponse,\n codecForCashouts,\n codecForCoreBankConfig,\n codecForCreateTransactionResponse,\n codecForGlobalCashouts,\n codecForListBankAccountsResponse,\n codecForMonitorResponse,\n codecForPublicAccountsResponse,\n codecForRegisterAccountResponse,\n codecForWithdrawalPublicInfo,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n IdempotencyRetry,\n addLongPollingParam,\n addPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerCoreBankResultByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = ResultByMethod<TalerCoreBankHttpClient, prop>;\nexport type TalerCoreBankErrorsByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;\n\nexport enum TalerCoreBankCacheEviction {\n DELETE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_ACCOUNT,\n UPDATE_PASSWORD,\n CREATE_TRANSACTION,\n CONFIRM_WITHDRAWAL,\n ABORT_WITHDRAWAL,\n CREATE_WITHDRAWAL,\n CREATE_CASHOUT,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerCoreBankHttpClient {\n public readonly PROTOCOL_VERSION = \"4:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCoreBankConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // ACCOUNTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts\n *\n */\n async createAccount(\n auth: AccessToken | undefined,\n body: TalerCorebankApi.RegisterAccountRequest,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n const headers: Record<string, string> = {};\n if (auth) {\n headers.Authorization = makeBearerTokenAuthHeader(auth);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers: headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n TalerCoreBankCacheEviction.CREATE_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForRegisterAccountResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-corebank.html#delete--accounts-$USERNAME\n *\n */\n async deleteAccount(auth: UserAndToken, cid?: string) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME\n *\n */\n async updateAccount(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountReconfiguration,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME-auth\n *\n */\n async updatePassword(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountPasswordChange,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/auth`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--public-accounts\n *\n */\n async getPublicAccounts(\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`public-accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForPublicAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ public_accounts: [] });\n case HttpStatusCode.NotFound:\n return opFixedSuccess({ public_accounts: [] });\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts\n *\n */\n async getAccounts(\n auth: AccessToken,\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForListBankAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ accounts: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME\n *\n */\n async getAccount(auth: UserAndToken) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountData());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // TRANSACTIONS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions\n *\n */\n async getTransactions(\n auth: UserAndToken,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountTransactionsResponse(),\n );\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ transactions: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions-$TRANSACTION_ID\n *\n */\n async getTransactionById(auth: UserAndToken, txid: number) {\n const url = new URL(\n `accounts/${auth.username}/transactions/${String(txid)}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountTransactionInfo());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions\n *\n */\n async createTransaction(\n auth: UserAndToken,\n body: TalerCorebankApi.CreateTransactionRequest,\n idempotencyCheck: IdempotencyRetry | undefined,\n cid?: string,\n ): Promise<\n //manually definition all return types because of recursion\n | OperationOk<TalerCorebankApi.CreateTransactionResponse>\n | OperationAlternative<HttpStatusCode.Accepted, TalerCorebankApi.Challenge>\n | OperationFail<HttpStatusCode.NotFound>\n | OperationFail<HttpStatusCode.BadRequest>\n | OperationFail<HttpStatusCode.Unauthorized>\n | OperationFail<TalerErrorCode.BANK_UNALLOWED_DEBIT>\n | OperationFail<TalerErrorCode.BANK_ADMIN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_SAME_ACCOUNT>\n | OperationFail<TalerErrorCode.BANK_UNKNOWN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED>\n > {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n if (idempotencyCheck) {\n body.request_uid = idempotencyCheck.uid\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCreateTransactionResponse());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n if (!idempotencyCheck) {\n return opKnownTalerFailure(details.code, details);\n }\n const nextRetry = idempotencyCheck.next();\n return this.createTransaction(auth, body, nextRetry, cid);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // WITHDRAWALS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals\n *\n */\n async createWithdrawal(\n auth: UserAndToken,\n body: TalerCorebankApi.BankAccountCreateWithdrawalRequest,\n ) {\n const url = new URL(`accounts/${auth.username}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountCreateWithdrawalResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-confirm\n *\n */\n async confirmWithdrawalById(auth: UserAndToken, wid: string, cid?: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-abort\n *\n */\n async abortWithdrawalById(auth: UserAndToken, wid: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--withdrawals-$WITHDRAWAL_ID\n *\n */\n async getWithdrawalById(\n wid: string,\n params?: {\n old_state?: WithdrawalOperationStatus;\n } & LongPollParams,\n ) {\n const url = new URL(`withdrawals/${wid}`, this.baseUrl);\n addLongPollingParam(url, params);\n if (params) {\n url.searchParams.set(\n \"old_state\",\n !params.old_state ? \"pending\" : params.old_state,\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWithdrawalPublicInfo());\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // CASHOUTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts\n *\n */\n async createCashout(\n auth: UserAndToken,\n body: TalerCorebankApi.CashoutRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutPending());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts-$CASHOUT_ID\n *\n */\n async getCashoutById(auth: UserAndToken, cid: number) {\n const url = new URL(\n `accounts/${auth.username}/cashouts/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutStatusResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts\n *\n */\n async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--cashouts\n *\n */\n async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {\n const url = new URL(`cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForGlobalCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // 2FA\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID\n *\n */\n async sendChallenge(auth: UserAndToken, cid: string) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTanTransmission());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID-confirm\n *\n */\n async confirmChallenge(\n auth: UserAndToken,\n cid: string,\n body: TalerCorebankApi.ChallengeSolve,\n ) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // MONITOR\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--monitor\n *\n */\n async getMonitor(\n auth: AccessToken,\n params: {\n timeframe?: TalerCorebankApi.MonitorTimeframeParam;\n date?: AbsoluteTime;\n } = {},\n ) {\n const url = new URL(`monitor`, this.baseUrl);\n if (params.timeframe) {\n url.searchParams.set(\n \"timeframe\",\n TalerCorebankApi.MonitorTimeframeParam[params.timeframe],\n );\n }\n if (params.date) {\n const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);\n if (seconds !== \"never\") {\n url.searchParams.set(\"date_s\", String(seconds));\n }\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMonitorResponse());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Others API\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getIntegrationAPI(): URL {\n return new URL(`taler-integration/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getWireGatewayAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-wire-gateway/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getRevenueAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getAuthenticationAPI(username: string): URL {\n return new URL(`accounts/${username}/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getConversionInfoAPI(): URL {\n return new URL(`conversion-info/`, this.baseUrl);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n FailCasesByMethod,\n HttpStatusCode,\n LibtoolVersion,\n PaginationParams,\n ResultByMethod,\n TalerMerchantApi,\n codecForAbortResponse,\n codecForAccountAddResponse,\n codecForAccountKycRedirects,\n codecForAccountsSummaryResponse,\n codecForBankAccountEntry,\n codecForClaimResponse,\n codecForInstancesResponse,\n codecForInventorySummaryResponse,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n codecForMerchantRefundResponse,\n codecForOrderHistory,\n codecForOtpDeviceDetails,\n codecForOtpDeviceSummaryResponse,\n codecForOutOfStockResponse,\n codecForPaidRefundStatusResponse,\n codecForPaymentResponse,\n codecForPostOrderResponse,\n codecForProductDetail,\n codecForQueryInstancesResponse,\n codecForStatusGoto,\n codecForStatusPaid,\n codecForStatusStatusUnpaid,\n codecForTansferList,\n codecForTemplateDetails,\n codecForTemplateSummaryResponse,\n codecForTokenFamiliesList,\n codecForTokenFamilyDetails,\n codecForWalletRefundResponse,\n codecForWalletTemplateDetails,\n codecForWebhookDetails,\n codecForWebhookSummaryResponse,\n opEmptySuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n HttpResponse,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport { opSuccessFromHttp, opUnknownFailure } from \"../operation.js\";\nimport {\n CacheEvictor,\n addMerchantPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerMerchantInstanceResultByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = ResultByMethod<TalerMerchantInstanceHttpClient, prop>;\nexport type TalerMerchantInstanceErrorsByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = FailCasesByMethod<TalerMerchantInstanceHttpClient, prop>;\n\nexport enum TalerMerchantInstanceCacheEviction {\n CREATE_ORDER,\n UPDATE_ORDER,\n DELETE_ORDER,\n UPDATE_CURRENT_INSTANCE,\n DELETE_CURRENT_INSTANCE,\n CREATE_BANK_ACCOUNT,\n UPDATE_BANK_ACCOUNT,\n DELETE_BANK_ACCOUNT,\n CREATE_PRODUCT,\n UPDATE_PRODUCT,\n DELETE_PRODUCT,\n CREATE_TRANSFER,\n DELETE_TRANSFER,\n CREATE_DEVICE,\n UPDATE_DEVICE,\n DELETE_DEVICE,\n CREATE_TEMPLATE,\n UPDATE_TEMPLATE,\n DELETE_TEMPLATE,\n CREATE_WEBHOOK,\n UPDATE_WEBHOOK,\n DELETE_WEBHOOK,\n CREATE_TOKENFAMILY,\n UPDATE_TOKENFAMILY,\n DELETE_TOKENFAMILY,\n LAST,\n}\nexport enum TalerMerchantManagementCacheEviction {\n CREATE_INSTANCE = TalerMerchantInstanceCacheEviction.LAST + 1,\n UPDATE_INSTANCE,\n DELETE_INSTANCE,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerMerchantInstanceHttpClient {\n public readonly PROTOCOL_VERSION = \"10:0:6\";\n\n readonly httpLib: HttpRequestLibrary;\n readonly cacheEvictor: CacheEvictor<TalerMerchantInstanceCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerMerchantInstanceCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wallet API\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim\n */\n async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {\n const url = new URL(`orders/${orderId}/claim`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForClaimResponse());\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-pay\n */\n async makePayment(orderId: string, body: TalerMerchantApi.PayRequest) {\n const url = new URL(`orders/${orderId}/pay`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaymentResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PaymentRequired:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.RequestTimeout:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PreconditionFailed:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID\n */\n\n async getPaymentStatus(\n orderId: string,\n params: TalerMerchantApi.PaymentStatusRequestParams = {},\n ) {\n const url = new URL(`orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.awaitRefundObtained !== undefined) {\n url.searchParams.set(\n \"await_refund_obtained\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.claimToken !== undefined) {\n url.searchParams.set(\"token\", params.claimToken);\n }\n if (params.contractTermHash !== undefined) {\n url.searchParams.set(\"h_contract\", params.contractTermHash);\n }\n if (params.refund !== undefined) {\n url.searchParams.set(\"refund\", params.refund);\n }\n if (params.sessionId !== undefined) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout !== undefined) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n // body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForStatusPaid());\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForStatusGoto());\n // case HttpStatusCode.Found: not possible since content is not HTML\n case HttpStatusCode.PaymentRequired:\n return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#demonstrating-payment\n */\n async demostratePayment(orderId: string, body: TalerMerchantApi.PaidRequest) {\n const url = new URL(`orders/${orderId}/paid`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments\n */\n async abortIncompletePayment(\n orderId: string,\n body: TalerMerchantApi.AbortRequest,\n ) {\n const url = new URL(`orders/${orderId}/abort`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForAbortResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#obtaining-refunds\n */\n async obtainRefund(\n orderId: string,\n body: TalerMerchantApi.WalletRefundRequest,\n ) {\n const url = new URL(`orders/${orderId}/refund`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForWalletRefundResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth\n */\n async updateCurrentInstanceAuthentication(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(`private/auth`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: // FIXME: missing in docs\n return opEmptySuccess(resp);\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private\n */\n async updateCurrentInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private\n *\n */\n async getCurrentInstanceDetails(token: AccessToken) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private\n */\n async deleteCurrentInstance(\n token: AccessToken | undefined,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc\n */\n async getCurrentIntanceKycStatus(\n token: AccessToken | undefined,\n params: TalerMerchantApi.GetKycStatusRequestParams = {},\n ) {\n const url = new URL(`private/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForAccountKycRedirects(),\n );\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Bank Accounts\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts\n */\n async addBankAccount(\n token: AccessToken | undefined,\n body: TalerMerchantApi.AccountAddDetails,\n ) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForAccountAddResponse());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async updateBankAccount(\n token: AccessToken | undefined,\n wireAccount: string,\n body: TalerMerchantApi.AccountPatchDetails,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts\n */\n async listBankAccounts(token: AccessToken, params?: PaginationParams) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n // addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async getBankAccountDetails(\n token: AccessToken | undefined,\n wireAccount: string,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountEntry());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async deleteBankAccount(token: AccessToken | undefined, wireAccount: string) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Inventory Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products\n */\n async addProduct(\n token: AccessToken | undefined,\n body: TalerMerchantApi.ProductAddDetail,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async updateProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.ProductPatchDetail,\n ) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products\n */\n async listProducts(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInventorySummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: not in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async getProductDetails(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForProductDetail());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#reserving-inventory\n */\n async lockProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.LockRequest,\n ) {\n const url = new URL(`private/products/${productId}/lock`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory\n */\n async deleteProduct(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Payment processing\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders\n */\n async createOrder(\n token: AccessToken | undefined,\n body: TalerMerchantApi.PostOrderRequest,\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n return this.procesOrderCreationResponse(resp);\n }\n\n private async procesOrderCreationResponse(resp: HttpResponse) {\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPostOrderResponse());\n }\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-orders\n */\n async listOrders(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListOrdersRequestParams = {},\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n if (params.date) {\n url.searchParams.set(\"date_s\", String(params.date));\n }\n if (params.fulfillmentUrl) {\n url.searchParams.set(\"fulfillment_url\", params.fulfillmentUrl);\n }\n if (params.paid !== undefined) {\n url.searchParams.set(\"paid\", params.paid ? \"YES\" : \"NO\");\n }\n if (params.refunded !== undefined) {\n url.searchParams.set(\"refunded\", params.refunded ? \"YES\" : \"NO\");\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout\", String(params.timeout));\n }\n if (params.wired !== undefined) {\n url.searchParams.set(\"wired\", params.wired ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOrderHistory());\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async getOrderDetails(\n token: AccessToken | undefined,\n orderId: string,\n params: TalerMerchantApi.GetOrderRequestParams = {},\n ) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup\n */\n async forgetOrder(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.ForgetRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async deleteOrder(token: AccessToken | undefined, orderId: string) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Refunds\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund\n */\n async addRefund(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.RefundRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForMerchantRefundResponse());\n }\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wire Transfer\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers\n */\n async informWireTransfer(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TransferInformation,\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers\n */\n async listWireTransfers(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListWireTransferRequestParams = {},\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n if (params.after) {\n url.searchParams.set(\"after\", String(params.after));\n }\n if (params.before) {\n url.searchParams.set(\"before\", String(params.before));\n }\n if (params.paytoURI) {\n url.searchParams.set(\"payto_uri\", params.paytoURI);\n }\n if (params.verified !== undefined) {\n url.searchParams.set(\"verified\", params.verified ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTansferList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID\n */\n async deleteWireTransfer(token: AccessToken | undefined, transferId: string) {\n const url = new URL(`private/transfers/${transferId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // OTP Devices\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices\n */\n async addOtpDevice(\n token: AccessToken | undefined,\n body: TalerMerchantApi.OtpDeviceAddDetails,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async updateOtpDevice(\n token: AccessToken | undefined,\n deviceId: string,\n body: TalerMerchantApi.OtpDevicePatchDetails,\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices\n */\n async listOtpDevices(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async getOtpDeviceDetails(\n token: AccessToken | undefined,\n deviceId: string,\n params: TalerMerchantApi.GetOtpDeviceRequestParams = {},\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n if (params.faketime) {\n url.searchParams.set(\"faketime\", String(params.faketime));\n }\n if (params.price) {\n url.searchParams.set(\"price\", params.price);\n }\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async deleteOtpDevice(token: AccessToken | undefined, deviceId: string) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Templates\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates\n */\n async addTemplate(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TemplateAddDetails,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async updateTemplate(\n token: AccessToken | undefined,\n templateId: string,\n body: TalerMerchantApi.TemplatePatchDetails,\n ) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-template\n */\n async listTemplates(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async getTemplateDetails(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async deleteTemplate(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-templates-$TEMPLATE_ID\n */\n async useTemplateGetInfo(templateId: string) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWalletTemplateDetails());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID\n */\n async useTemplateCreateOrder(\n templateId: string,\n body: TalerMerchantApi.UsingTemplateDetails,\n ) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n return this.procesOrderCreationResponse(resp);\n }\n\n //\n // Webhooks\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks\n */\n async addWebhook(\n token: AccessToken | undefined,\n body: TalerMerchantApi.WebhookAddDetails,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async updateWebhook(\n token: AccessToken | undefined,\n webhookId: string,\n body: TalerMerchantApi.WebhookPatchDetails,\n ) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks\n */\n async listWebhooks(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWebhookSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async getWebhookDetails(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opSuccessFromHttp(resp, codecForWebhookDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async deleteWebhook(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // token families\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async createTokenFamily(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TokenFamilyCreateRequest,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async updateTokenFamily(\n token: AccessToken | undefined,\n tokenSlug: string,\n body: TalerMerchantApi.TokenFamilyUpdateRequest,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY,\n );\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async listTokenFamilies(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamiliesList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async getTokenFamilyDetails(\n token: AccessToken | undefined,\n tokenSlug: string,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async deleteTokenFamily(token: AccessToken | undefined, tokenSlug: string) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * Get the auth api against the current instance\n *\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token\n */\n getAuthenticationAPI(): URL {\n return new URL(`private/`, this.baseUrl);\n }\n}\n\nexport type TalerMerchantManagementResultByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = ResultByMethod<TalerMerchantManagementHttpClient, prop>;\nexport type TalerMerchantManagementErrorsByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = FailCasesByMethod<TalerMerchantManagementHttpClient, prop>;\n\nexport class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {\n readonly cacheManagementEvictor: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n // cacheManagementEvictor?: CacheEvictor<TalerMerchantManagementCacheEviction>,\n cacheEvictor?: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >,\n ) {\n super(baseUrl, httpClient, cacheEvictor);\n this.cacheManagementEvictor = cacheEvictor ?? nullEvictor;\n }\n\n getSubInstanceAPI(instanceId: string) {\n return new URL(`instances/${instanceId}/`, this.baseUrl);\n }\n\n //\n // Instance Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances\n */\n async createInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceConfigurationMessage,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.CREATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth\n */\n async updateInstanceAuthentication(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(\n `management/instances/${instanceId}/auth`,\n this.baseUrl,\n );\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE\n */\n async updateInstance(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.UPDATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances\n */\n async listInstances(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE\n *\n */\n async getInstanceDetails(token: AccessToken | undefined, instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE\n */\n async deleteInstance(\n token: AccessToken | undefined,\n instanceId: string,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.DELETE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc\n */\n async getIntanceKycStatus(\n token: AccessToken | undefined,\n instanceId: string,\n params: TalerMerchantApi.GetKycStatusRequestParams,\n ) {\n const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { TalerCoreBankCacheEviction } from \"../index.node.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n RedirectResult,\n ResultByMethod,\n opFixedSuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n codecForChallengeCreateResponse,\n codecForChallengeSetupResponse,\n codecForChallengeStatus,\n codecForChallengerAuthResponse,\n codecForChallengerInfoResponse,\n codecForChallengerTermsOfServiceResponse,\n codecForInvalidPinResponse,\n} from \"./types.js\";\nimport { CacheEvictor, makeBearerTokenAuthHeader, nullEvictor } from \"./utils.js\";\n\nexport type ChallengerResultByMethod<prop extends keyof ChallengerHttpClient> =\n ResultByMethod<ChallengerHttpClient, prop>;\nexport type ChallengerErrorsByMethod<prop extends keyof ChallengerHttpClient> =\n FailCasesByMethod<ChallengerHttpClient, prop>;\n\nexport enum ChallengerCacheEviction {\n CREATE_CHALLENGE,\n}\n\n/**\n */\nexport class ChallengerHttpClient {\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<ChallengerCacheEviction>;\n public readonly PROTOCOL_VERSION = \"1:0:0\";\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<ChallengerCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForChallengerTermsOfServiceResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#post--setup-$CLIENT_ID\n *\n */\n async setup(clientId: string, token: AccessToken) {\n const url = new URL(`setup/${clientId}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeSetupResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // LOGIN\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--authorize-$NONCE\n *\n */\n async login(\n nonce: string,\n clientId: string,\n redirectUri: string,\n state: string | undefined,\n ) {\n const url = new URL(`authorize/${nonce}`, this.baseUrl);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n if (state) {\n url.searchParams.set(\"state\", state);\n }\n // url.searchParams.set(\"scope\", \"code\");\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeStatus());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // CHALLENGE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--challenge-$NONCE\n *\n */\n async challenge(nonce: string, body: Record<\"email\", string>) {\n const url = new URL(`challenge/${nonce}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n ChallengerCacheEviction.CREATE_CHALLENGE,\n );\n return opSuccessFromHttp(resp, codecForChallengeCreateResponse());\n }\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // SOLVE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--solve-$NONCE\n *\n */\n async solve(nonce: string, body: Record<string, string>) {\n const url = new URL(`solve/${nonce}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForInvalidPinResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // AUTH\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--token\n *\n */\n async token(\n client_id: string,\n redirect_uri: string,\n client_secret: AccessToken,\n code: string,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams(\n Object.entries({\n client_id,\n redirect_uri,\n client_secret,\n code,\n grant_type: \"authorization_code\",\n }),\n ).toString(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerAuthResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // INFO\n\n /**\n * https://docs.taler.net/core/api-challenger.html#get--info\n *\n */\n async info(token: AccessToken) {\n const url = new URL(`info`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerInfoResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport { hash } from \"../nacl-fast.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n TalerSignaturePurpose,\n amountToBuffer,\n bufferForUint32,\n buildSigPS,\n decodeCrock,\n eddsaSign,\n encodeCrock,\n stringToBytes,\n timestampRoundedToBuffer,\n} from \"../taler-crypto.js\";\nimport {\n OfficerAccount,\n PaginationParams,\n SigningKey,\n TalerExchangeApi,\n codecForAmlDecisionDetails,\n codecForAmlRecords,\n codecForExchangeConfig,\n codecForExchangeKeys,\n} from \"./types.js\";\nimport { CacheEvictor, addPaginationParams, nullEvictor } from \"./utils.js\";\n\nexport type TalerExchangeResultByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = ResultByMethod<TalerExchangeHttpClient, prop>;\nexport type TalerExchangeErrorsByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = FailCasesByMethod<TalerExchangeHttpClient, prop>;\n\nexport enum TalerExchangeCacheEviction {\n CREATE_DESCISION,\n}\n\n\n/**\n */\nexport class TalerExchangeHttpClient {\n httpLib: HttpRequestLibrary;\n public readonly PROTOCOL_VERSION = \"18:0:1\";\n cacheEvictor: CacheEvictor<TalerExchangeCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerExchangeCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n * PARTIALLY IMPLEMENTED!!\n */\n async getKeys() {\n const url = new URL(`keys`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeKeys());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // TERMS\n\n //\n // AML operations\n //\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decisions-$STATE\n *\n */\n async getDecisionsByState(\n auth: OfficerAccount,\n state: TalerExchangeApi.AmlState,\n pagination?: PaginationParams,\n ) {\n const url = new URL(\n `aml/${auth.id}/decisions/${TalerExchangeApi.AmlState[state]}`,\n this.baseUrl,\n );\n addPaginationParams(url, pagination);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlRecords());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ records: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decision-$H_PAYTO\n *\n */\n async getDecisionDetails(auth: OfficerAccount, account: string) {\n const url = new URL(`aml/${auth.id}/decision/${account}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlDecisionDetails());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ aml_history: [], kyc_attributes: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#post--aml-$OFFICER_PUB-decision\n *\n */\n async addDecisionDetails(\n auth: OfficerAccount,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n ) {\n const url = new URL(`aml/${auth.id}/decision`, this.baseUrl);\n\n const body = buildDecisionSignature(auth.signingKey, decision);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: this two need to be split by error code\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n\nfunction buildQuerySignature(key: SigningKey): string {\n const sigBlob = buildSigPS(\n TalerSignaturePurpose.TALER_SIGNATURE_AML_QUERY,\n ).build();\n\n return encodeCrock(eddsaSign(sigBlob, key));\n}\n\nfunction buildDecisionSignature(\n key: SigningKey,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n): TalerExchangeApi.AmlDecision {\n const zero = new Uint8Array(new ArrayBuffer(64));\n\n const sigBlob = buildSigPS(TalerSignaturePurpose.TALER_SIGNATURE_AML_DECISION)\n //TODO: new need the null terminator, also in the exchange\n .put(hash(stringToBytes(decision.justification))) //check null\n .put(timestampRoundedToBuffer(decision.decision_time))\n .put(amountToBuffer(decision.new_threshold))\n .put(decodeCrock(decision.h_payto))\n .put(zero) //kyc_requirement\n .put(bufferForUint32(decision.new_state))\n .build();\n\n const officer_sig = encodeCrock(eddsaSign(sigBlob, key));\n return {\n ...decision,\n officer_sig,\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) 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 * IBAN validation.\n *\n * Currently only validates the checksum.\n *\n * It does not validate:\n * - Country-specific length\n * - Country-specific checksums\n *\n * The country list is also not complete.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\nexport type IbanValidationResult =\n | { type: \"invalid\" }\n | {\n type: \"valid\";\n normalizedIban: string;\n };\n\nexport interface IbanCountryInfo {\n name: string;\n isSepa?: boolean;\n length?: number;\n}\n\n/**\n * Incomplete list, see https://www.swift.com/resource/iban-registry-pdf\n */\nexport const ibanCountryInfoTable: Record<string, IbanCountryInfo> = {\n AE: { name: \"U.A.E.\" },\n AF: { name: \"Afghanistan\" },\n AL: { name: \"Albania\" },\n AM: { name: \"Armenia\" },\n AN: { name: \"Netherlands Antilles\" },\n AR: { name: \"Argentina\" },\n AT: { name: \"Austria\" },\n AU: { name: \"Australia\" },\n AZ: { name: \"Azerbaijan\" },\n BA: { name: \"Bosnia and Herzegovina\" },\n BD: { name: \"Bangladesh\" },\n BE: { name: \"Belgium\" },\n BG: { name: \"Bulgaria\" },\n BH: { name: \"Bahrain\" },\n BN: { name: \"Brunei Darussalam\" },\n BO: { name: \"Bolivia\" },\n BR: { name: \"Brazil\" },\n BT: { name: \"Bhutan\" },\n BY: { name: \"Belarus\" },\n BZ: { name: \"Belize\" },\n CA: { name: \"Canada\" },\n CG: { name: \"Congo\" },\n CH: { name: \"Switzerland\" },\n CI: { name: \"Cote d'Ivoire\" },\n CL: { name: \"Chile\" },\n CM: { name: \"Cameroon\" },\n CN: { name: \"People's Republic of China\" },\n CO: { name: \"Colombia\" },\n CR: { name: \"Costa Rica\" },\n CS: { name: \"Serbia and Montenegro\" },\n CZ: { name: \"Czech Republic\" },\n DE: { name: \"Germany\" },\n DK: { name: \"Denmark\" },\n DO: { name: \"Dominican Republic\" },\n DZ: { name: \"Algeria\" },\n EC: { name: \"Ecuador\" },\n EE: { name: \"Estonia\" },\n EG: { name: \"Egypt\" },\n ER: { name: \"Eritrea\" },\n ES: { name: \"Spain\" },\n ET: { name: \"Ethiopia\" },\n FI: { name: \"Finland\" },\n FO: { name: \"Faroe Islands\" },\n FR: { name: \"France\" },\n GB: { name: \"United Kingdom\" },\n GD: { name: \"Caribbean\" },\n GE: { name: \"Georgia\" },\n GL: { name: \"Greenland\" },\n GR: { name: \"Greece\" },\n GT: { name: \"Guatemala\" },\n HK: { name: \"Hong Kong S.A.R.\" },\n HN: { name: \"Honduras\" },\n HR: { name: \"Croatia\" },\n HT: { name: \"Haiti\" },\n HU: { name: \"Hungary\" },\n ID: { name: \"Indonesia\" },\n IE: { name: \"Ireland\" },\n IL: { name: \"Israel\" },\n IN: { name: \"India\" },\n IQ: { name: \"Iraq\" },\n IR: { name: \"Iran\" },\n IS: { name: \"Iceland\" },\n IT: { name: \"Italy\" },\n JM: { name: \"Jamaica\" },\n JO: { name: \"Jordan\" },\n JP: { name: \"Japan\" },\n KE: { name: \"Kenya\" },\n KG: { name: \"Kyrgyzstan\" },\n KH: { name: \"Cambodia\" },\n KR: { name: \"South Korea\" },\n KW: { name: \"Kuwait\" },\n KZ: { name: \"Kazakhstan\" },\n LA: { name: \"Laos\" },\n LB: { name: \"Lebanon\" },\n LI: { name: \"Liechtenstein\" },\n LK: { name: \"Sri Lanka\" },\n LT: { name: \"Lithuania\" },\n LU: { name: \"Luxembourg\" },\n LV: { name: \"Latvia\" },\n LY: { name: \"Libya\" },\n MA: { name: \"Morocco\" },\n MC: { name: \"Principality of Monaco\" },\n MD: { name: \"Moldava\" },\n ME: { name: \"Montenegro\" },\n MK: { name: \"Former Yugoslav Republic of Macedonia\" },\n ML: { name: \"Mali\" },\n MM: { name: \"Myanmar\" },\n MN: { name: \"Mongolia\" },\n MO: { name: \"Macau S.A.R.\" },\n MT: { name: \"Malta\" },\n MV: { name: \"Maldives\" },\n MX: { name: \"Mexico\" },\n MY: { name: \"Malaysia\" },\n NG: { name: \"Nigeria\" },\n NI: { name: \"Nicaragua\" },\n NL: { name: \"Netherlands\" },\n NO: { name: \"Norway\" },\n NP: { name: \"Nepal\" },\n NZ: { name: \"New Zealand\" },\n OM: { name: \"Oman\" },\n PA: { name: \"Panama\" },\n PE: { name: \"Peru\" },\n PH: { name: \"Philippines\" },\n PK: { name: \"Islamic Republic of Pakistan\" },\n PL: { name: \"Poland\" },\n PR: { name: \"Puerto Rico\" },\n PT: { name: \"Portugal\" },\n PY: { name: \"Paraguay\" },\n QA: { name: \"Qatar\" },\n RE: { name: \"Reunion\" },\n RO: { name: \"Romania\" },\n RS: { name: \"Serbia\" },\n RU: { name: \"Russia\" },\n RW: { name: \"Rwanda\" },\n SA: { name: \"Saudi Arabia\" },\n SE: { name: \"Sweden\" },\n SG: { name: \"Singapore\" },\n SI: { name: \"Slovenia\" },\n SK: { name: \"Slovak\" },\n SN: { name: \"Senegal\" },\n SO: { name: \"Somalia\" },\n SR: { name: \"Suriname\" },\n SV: { name: \"El Salvador\" },\n SY: { name: \"Syria\" },\n TH: { name: \"Thailand\" },\n TJ: { name: \"Tajikistan\" },\n TM: { name: \"Turkmenistan\" },\n TN: { name: \"Tunisia\" },\n TR: { name: \"Turkey\" },\n TT: { name: \"Trinidad and Tobago\" },\n TW: { name: \"Taiwan\" },\n TZ: { name: \"Tanzania\" },\n UA: { name: \"Ukraine\" },\n US: { name: \"United States\" },\n UY: { name: \"Uruguay\" },\n VA: { name: \"Vatican\" },\n VE: { name: \"Venezuela\" },\n VN: { name: \"Viet Nam\" },\n YE: { name: \"Yemen\" },\n ZA: { name: \"South Africa\" },\n ZW: { name: \"Zimbabwe\" },\n};\n\nlet ccZero = \"0\".charCodeAt(0);\nlet ccNine = \"9\".charCodeAt(0);\nlet ccA = \"A\".charCodeAt(0);\nlet ccZ = \"Z\".charCodeAt(0);\n\n/**\n * Append a IBAN digit(s) based on a char code.\n */\nfunction appendDigit(digits: number[], cc: number): boolean {\n if (cc >= ccZero && cc <= ccNine) {\n digits.push(cc - ccZero);\n } else if (cc >= ccA && cc <= ccZ) {\n const n = cc - ccA + 10;\n digits.push(Math.floor(n / 10) % 10);\n digits.push(n % 10);\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Compute MOD-97-10 as per ISO/IEC 7064:2003.\n */\nfunction mod97(digits: number[]): number {\n let i = 0;\n let modAccum = 0;\n while (i < digits.length) {\n let n = 0;\n while (n < 9 && i < digits.length) {\n modAccum = modAccum * 10 + digits[i];\n i++;\n n++;\n }\n modAccum = modAccum % 97;\n }\n return modAccum;\n}\n\nexport function validateIban(ibanString: string): IbanValidationResult {\n let myIban = ibanString.toLocaleUpperCase().replace(\" \", \"\");\n let countryCode = myIban.substring(0, 2);\n let countryInfo = ibanCountryInfoTable[countryCode];\n\n if (!countryInfo) {\n return {\n type: \"invalid\",\n };\n }\n\n let digits: number[] = [];\n\n for (let i = 4; i < myIban.length; i++) {\n const cc = myIban.charCodeAt(i);\n if (!appendDigit(digits, cc)) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n for (let i = 0; i < 4; i++) {\n if (!appendDigit(digits, ibanString.charCodeAt(i))) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n const rem = mod97(digits);\n if (rem === 1) {\n return {\n type: \"valid\",\n normalizedIban: myIban,\n };\n } else {\n return {\n type: \"invalid\",\n };\n }\n}\n\nexport function generateIban(countryCode: string, length: number): string {\n let ibanSuffix = \"\";\n let digits: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const cc = ccZero + (Math.floor(Math.random() * 100) % 10);\n appendDigit(digits, cc);\n ibanSuffix += String.fromCharCode(cc);\n }\n\n appendDigit(digits, countryCode.charCodeAt(0));\n appendDigit(digits, countryCode.charCodeAt(1));\n\n // Try using \"00\" as check digits\n appendDigit(digits, ccZero);\n appendDigit(digits, ccZero);\n\n const requiredChecksum = 98 - mod97(digits);\n\n const checkDigit1 = Math.floor(requiredChecksum / 10) % 10;\n const checkDigit2 = requiredChecksum % 10;\n\n return countryCode + checkDigit1 + checkDigit2 + ibanSuffix;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019-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 * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { AbsoluteTime } from \"./time.js\";\nimport { TransactionState } from \"./transactions-types.js\";\nimport { ExchangeEntryState, TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n BalanceChange = \"balance-change\",\n BackupOperationError = \"backup-error\",\n TransactionStateTransition = \"transaction-state-transition\",\n WithdrawalOperationTransition = \"withdrawal-operation-transition\",\n ExchangeStateTransition = \"exchange-state-transition\",\n Idle = \"idle\",\n TaskObservabilityEvent = \"task-observability-event\",\n RequestObservabilityEvent = \"request-observability-event\",\n}\n\nexport interface ErrorInfoSummary {\n code: number;\n hint?: string;\n message?: string;\n}\n\nexport interface TransactionStateTransitionNotification {\n type: NotificationType.TransactionStateTransition;\n transactionId: string;\n oldTxState: TransactionState;\n newTxState: TransactionState;\n errorInfo?: ErrorInfoSummary;\n\n /**\n * Additional \"user data\" that is dependent on the\n * state transition.\n *\n * Usage should be avoided.\n *\n * Currently used to notify the iOS app about\n * the KYC URL.\n */\n experimentalUserData?: any;\n}\n\nexport interface ExchangeStateTransitionNotification {\n type: NotificationType.ExchangeStateTransition;\n /**\n * Identification of the exchange entry that this\n * notification is about.\n */\n exchangeBaseUrl: string;\n\n /**\n * If missing, the notification means that\n * the exchange entry is newly created.\n */\n oldExchangeState?: ExchangeEntryState;\n\n /**\n * New state of the exchange.\n */\n newExchangeState: ExchangeEntryState;\n\n /**\n * Summary of the error that occurred when trying to update the exchange entry,\n * if applicable.\n */\n errorInfo?: ErrorInfoSummary;\n}\n\nexport interface BalanceChangeNotification {\n type: NotificationType.BalanceChange;\n\n /**\n * Transaction ID of the transaction that caused the balance update.\n *\n * Only used as a hint for debugging, should not be relied upon by clients.\n */\n hintTransactionId: string;\n}\n\nexport interface TaskProgressNotification {\n type: NotificationType.TaskObservabilityEvent;\n taskId: string;\n event: ObservabilityEvent;\n}\n\nexport interface RequestProgressNotification {\n type: NotificationType.RequestObservabilityEvent;\n requestId: string;\n operation: string;\n event: ObservabilityEvent;\n}\n\nexport enum ObservabilityEventType {\n HttpFetchStart = \"http-fetch-start\",\n HttpFetchFinishError = \"http-fetch-finish-error\",\n HttpFetchFinishSuccess = \"http-fetch-finish-success\",\n DbQueryStart = \"db-query-start\",\n DbQueryFinishSuccess = \"db-query-finish-success\",\n DbQueryFinishError = \"db-query-finish-error\",\n RequestStart = \"request-start\",\n RequestFinishSuccess = \"request-finish-success\",\n RequestFinishError = \"request-finish-error\",\n TaskStart = \"task-start\",\n TaskStop = \"task-stop\",\n TaskReset = \"task-reset\",\n ShepherdTaskResult = \"sheperd-task-result\",\n DeclareTaskDependency = \"declare-task-dependency\",\n CryptoStart = \"crypto-start\",\n CryptoFinishSuccess = \"crypto-finish-success\",\n CryptoFinishError = \"crypto-finish-error\",\n Message = \"message\",\n}\n\nexport type ObservabilityEvent =\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchStart;\n url: string;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishSuccess;\n url: string;\n status: number;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishError;\n url: string;\n error: TalerErrorDetail;\n }\n | {\n type: ObservabilityEventType.DbQueryStart;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishSuccess;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishError;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.RequestStart;\n }\n | {\n type: ObservabilityEventType.RequestFinishSuccess;\n durationMs: number;\n }\n | {\n type: ObservabilityEventType.RequestFinishError;\n }\n | {\n type: ObservabilityEventType.TaskStart;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskStop;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskReset;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.DeclareTaskDependency;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.CryptoStart;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishSuccess;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishError;\n operation: string;\n }\n | {\n type: ObservabilityEventType.ShepherdTaskResult;\n resultType: string;\n }\n | {\n type: ObservabilityEventType.Message;\n contents: string;\n };\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n/**\n * This notification is required to signal UI that\n * the withdrawal operation changed the state.\n *\n * https://bugs.gnunet.org/view.php?id=8099\n */\nexport interface WithdrawalOperationTransitionNotification {\n type: NotificationType.WithdrawalOperationTransition;\n uri: string;\n}\n\nexport interface IdleNotification {\n type: NotificationType.Idle;\n}\n\nexport type WalletNotification =\n | BalanceChangeNotification\n | WithdrawalOperationTransitionNotification\n | BackupOperationErrorNotification\n | ExchangeStateTransitionNotification\n | TransactionStateTransitionNotification\n | TaskProgressNotification\n | RequestProgressNotification\n | IdleNotification;\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 * Cross-platform timers.\n *\n * NodeJS and the browser use slightly different timer API,\n * this abstracts over these differences.\n */\n\n/**\n * Imports.\n */\nimport { Logger, Duration } from \"@gnu-taler/taler-util\";\n\nconst logger = new Logger(\"timer.ts\");\n\n/**\n * Cancelable timer.\n */\nexport interface TimerHandle {\n clear(): void;\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void;\n}\n\nclass IntervalHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearInterval(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\nclass TimeoutHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearTimeout(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\n/**\n * Get a performance counter in nanoseconds.\n */\nexport const performanceNow: () => bigint = (() => {\n // @ts-ignore\n if (typeof process !== \"undefined\" && process.hrtime) {\n return () => {\n return process.hrtime.bigint();\n };\n }\n\n // @ts-ignore\n if (typeof performance !== \"undefined\") {\n // @ts-ignore\n return () => BigInt(Math.floor(performance.now() * 1000)) * BigInt(1000);\n }\n\n return () => BigInt(new Date().getTime()) * BigInt(1000) * BigInt(1000);\n})();\n\nconst nullTimerHandle = {\n clear() {\n // do nothing\n return;\n },\n unref() {\n // do nothing\n return;\n },\n};\n\n/**\n * Group of timers that can be destroyed at once.\n */\nexport interface TimerAPI {\n after(delayMs: number, callback: () => void): TimerHandle;\n every(delayMs: number, callback: () => void): TimerHandle;\n}\n\nexport class SetTimeoutTimerAPI implements TimerAPI {\n /**\n * Call a function every time the delay given in milliseconds passes.\n */\n every(delayMs: number, callback: () => void): TimerHandle {\n return new IntervalHandle(setInterval(callback, delayMs));\n }\n\n /**\n * Call a function after the delay given in milliseconds passes.\n */\n after(delayMs: number, callback: () => void): TimerHandle {\n return new TimeoutHandle(setTimeout(callback, delayMs));\n }\n}\n\nexport const timer = new SetTimeoutTimerAPI();\n\n/**\n * Implementation of [[TimerGroup]] using setTimeout\n */\nexport class TimerGroup {\n private stopped = false;\n\n private readonly timerMap: { [index: number]: TimerHandle } = {};\n\n private idGen = 1;\n\n constructor(public readonly timerApi: TimerAPI) {}\n\n stopCurrentAndFutureTimers(): void {\n this.stopped = true;\n for (const x in this.timerMap) {\n if (!this.timerMap.hasOwnProperty(x)) {\n continue;\n }\n this.timerMap[x].clear();\n delete this.timerMap[x];\n }\n }\n\n resolveAfter(delayMs: Duration): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (delayMs.d_ms !== \"forever\") {\n this.after(delayMs.d_ms, () => {\n resolve();\n });\n }\n });\n }\n\n after(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.after(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\n }\n\n every(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.every(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\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\nimport {\n TransactionType,\n PaymentStatus,\n TransactionMajorState,\n} from \"./transactions-types.js\";\nimport { RefreshReason } from \"./wallet-types.js\";\n\n/**\n * Sample transaction list entries.\n */\nexport const sampleWalletCoreTransactions = [\n {\n type: TransactionType.Payment,\n txState: {\n major: TransactionMajorState.Done,\n },\n amountRaw: \"KUDOS:10\",\n amountEffective: \"KUDOS:10\",\n totalRefundRaw: \"KUDOS:0\",\n totalRefundEffective: \"KUDOS:0\",\n status: PaymentStatus.Paid,\n refundPending: undefined,\n posConfirmation: undefined,\n pending: false,\n refunds: [],\n timestamp: {\n t_s: 1677166045,\n },\n transactionId:\n \"txn:payment:NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n proposalId: \"NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n info: {\n merchant: {\n name: \"woocommerce\",\n website: \"woocommerce.demo.taler.net\",\n email: \"foo@example.com\",\n address: {},\n jurisdiction: {},\n },\n orderId: \"wc_order_KQCRldghIgDRB-100\",\n products: [\n {\n description: \"Using GCC\",\n quantity: 1,\n price: \"KUDOS:10\",\n product_id: \"28\",\n },\n ],\n summary: \"WooTalerShop #100\",\n contractTermsHash:\n \"A02E1M6ARWKBJ87K2TV4S6WQ4X5YH7BRVR6MYCHCTVAED8MBXTFD6PZ5Q50Y7Z5K18PYBTDA14NQ56XPC1VCQW1EVRWTSB7ZYT65B5G\",\n fulfillmentUrl:\n \"https://woocommerce.demo.taler.net/?wc-api=wc_gnutaler_gateway&order_id=wc_order_KQCRldghIgDRB-100\",\n },\n refundQueryActive: false,\n frozen: false,\n },\n {\n type: TransactionType.Refresh,\n txState: {\n major: TransactionMajorState.Pending,\n },\n refreshReason: RefreshReason.PayMerchant,\n amountEffective: \"KUDOS:0\",\n amountRaw: \"KUDOS:0\",\n refreshInputAmount: \"KUDOS:1.5\",\n refreshOutputAmount: \"KUDOS:1.4\",\n originatingTransactionId:\n \"txn:proposal:ZCGBZFE8KZ1CBYYGSC3ZC8E40KVJWV16VYCTHGC8FFSVZ5HD24BG\",\n pending: true,\n timestamp: {\n t_s: 1681376214,\n },\n transactionId:\n \"txn:refresh:QQSWHHXCRQ269G0E3RW14JMC6F7NFDYDW26NSFHRTXSKDS6CMCZ0\",\n frozen: false,\n error: {\n code: 7029,\n when: {\n t_ms: 1681376473665,\n },\n hint: \"Error (WALLET_REFRESH_GROUP_INCOMPLETE)\",\n numErrors: 1,\n errors: [\n {\n code: 7001,\n when: {\n t_ms: 1681376473189,\n },\n hint: \"unexpected exception (message: exchange wire fee signature invalid)\",\n stack:\n \" at validateWireInfo (../taler-wallet-core-qjs.mjs:23166)\\n\",\n },\n ],\n },\n },\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 { i18n, setupI18n } from \"@gnu-taler/taler-util\";\nimport { createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect } from \"preact/hooks\";\nimport { useLang } from \"../hooks/useLang.js\";\nimport { strings } from \"../i18n/strings.js\";\n\ninterface Type {\n lang: string;\n supportedLang: { [id in keyof typeof supportedLang]: string };\n changeLanguage: (l: string) => void;\n i18n: typeof i18n;\n isSaved: boolean;\n}\n\nconst supportedLang = {\n es: \"Espa\u00F1ol [es]\",\n ja: \"\u65E5\u672C\u8A9E [ja]\",\n en: \"English [en]\",\n fr: \"Fran\u00E7ais [fr]\",\n de: \"Deutsch [de]\",\n sv: \"Svenska [sv]\",\n it: \"Italiano [it]\",\n // ko: \"\uD55C\uAD6D\uC5B4 [ko]\",\n // ru: \"\u0420\u0443\u0301\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u0301\u043A [ru]\",\n tr: \"T\u00FCrk [tr]\",\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: any;\n forceLang?: string;\n}\n\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\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, strings);\n }, [lang]);\n if (forceLang) {\n setupI18n(forceLang, strings);\n } else {\n setupI18n(lang, strings);\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 { 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", "/*\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, 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 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\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 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 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/*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 },\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 },\n },\n};\n", "// This file is auto-generated, do not modify.\n// Generated from v0.2.0-151-g2ae958d on Thu, 14 Apr 2022 20:38:58 +0200\n// To re-generate, run contrib/gen-ts.sh from the main anastasis code base.\n\nexport const anastasisData = {\n providersList: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n anastasis_provider: [\n {\n url: \"https://v1.anastasis.taler.net/\",\n name: \"Bern University of Applied Sciences, Switzerland\",\n },\n// {\n// url: \"https://v1.anastasis.codeblau.de/\",\n// name: \"Codeblau GmbH, Germany\",\n// },\n {\n url: \"https://v1.anastasis.lu/\",\n name: \"Anastasis SARL, Luxembourg\",\n },\n {\n url: \"https://v1.anastasis.taler.net/\",\n restricted: \"xx\",\n },\n {\n url: \"https://v1.anastasis.lu/\",\n restricted: \"xx\",\n },\n // {\n // url: \"http://localhost:8086/\",\n // restricted: \"xx\",\n // },\n // {\n // url: \"http://localhost:8087/\",\n // restricted: \"xx\",\n // },\n // {\n // url: \"http://localhost:8088/\",\n // restricted: \"xx\",\n // },\n // {\n // url: \"http://localhost:8089/\",\n // restricted: \"xx\",\n // },\n ],\n },\n countriesList: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n countries: [\n {\n code: \"al\",\n name: \"Albania\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Albanien\",\n en_UK: \"Albania\",\n },\n call_code: \"+355\",\n },\n {\n code: \"be\",\n name: \"Belgium\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Belgien\",\n en_UK: \"Belgium\",\n },\n call_code: \"+32\",\n },\n {\n code: \"ch\",\n name: \"Switzerland\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Schweiz\",\n de_CH: \"Schwiiz\",\n fr_FR: \"Suisse\",\n en_UK: \"Swiss\",\n },\n call_code: \"+41\",\n },\n {\n code: \"cz\",\n name: \"Czech Republic\",\n continent: \"Europe\",\n name_i18n: {\n en_UK: \"Czech Republic\",\n },\n call_code: \"+420\",\n },\n {\n code: \"de\",\n name: \"Germany\",\n continent: \"Europe\",\n continent_i18n: { de_DE: \"Europa\" },\n name_i18n: {\n de_DE: \"Deutschland\",\n de_CH: \"Deutschland\",\n fr_FR: \"Allemagne\",\n en_UK: \"Germany\",\n },\n call_code: \"+49\",\n },\n {\n code: \"dk\",\n name: \"Denmark\",\n continent: \"Europe\",\n continent_i18n: { de_DE: \"Europa\" },\n name_i18n: {\n en_UK: \"Denmark\",\n },\n call_code: \"+45\",\n },\n {\n code: \"es\",\n name: \"Spain\",\n continent: \"Europe\",\n continent_i18n: { es_ES: \"Europa\" },\n name_i18n: {\n es_ES: \"Espa\u00F1a\",\n },\n call_code: \"+44\",\n },\n {\n code: \"fr\",\n name: \"France\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Frankreich\",\n fr_FR: \"La France\",\n },\n call_code: \"+33\",\n },\n {\n code: \"in\",\n name: \"India\",\n continent: \"India\",\n continent_i18n: { en_EN: \"India\" },\n name_i18n: {\n de_DE: \"Indien\",\n de_CH: \"Indien\",\n fr_FR: \"l'Inde\",\n en_UK: \"India\",\n },\n call_code: \"+91\",\n },\n {\n code: \"it\",\n name: \"Italy\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Italien\",\n en_UK: \"Italy\",\n },\n call_code: \"+39\",\n },\n {\n code: \"jp\",\n name: \"Japan\",\n continent: \"Asia\",\n continent_i18n: { en_EN: \"Japan\" },\n name_i18n: {\n de_DE: \"Japan\",\n de_CH: \"Japan\",\n en_UK: \"Japan\",\n },\n call_code: \"+81\",\n },\n {\n code: \"nl\",\n name: \"Netherlands\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Niederlande\",\n nl_NL: \"Nederland\",\n en_UK: \"Netherlands\",\n },\n call_code: \"+31\",\n },\n {\n code: \"sk\",\n name: \"Slovakia\",\n continent: \"Europe\",\n name_i18n: {\n en_UK: \"Slovakia\",\n },\n call_code: \"+421\",\n },\n {\n code: \"us\",\n name: \"United States of America (USA)\",\n continent: \"North America\",\n continent_i18n: { de_DE: \"Nordamerika\" },\n name_i18n: {\n de_DE: \"Vereinigte Staaten von Amerika (USA)\",\n de_CH: \"Vereinigte Staaten von Amerika (USA)\",\n fr_FR: \"\u00C9tats-Unis d'Am\u00E9rique (USA)\",\n en_UK: \"United States of America (USA)\",\n },\n call_code: \"+1\",\n },\n // {\n // code: \"xx\",\n // name: \"Testland\",\n // continent: \"Demoworld\",\n // name_i18n: {\n // de_DE: \"Testlandt\",\n // de_CH: \"Testlandi\",\n // fr_FR: \"Testpais\",\n // en_UK: \"Testland\",\n // },\n // call_code: \"+00\",\n // },\n ].sort((a, b) => a.name > b.name ? 1 : (a.name < b.name ? -1 : 0)),\n },\n countryDetails: {\n al: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"nid_number\",\n label: \"Numri i Identitetit\",\n label_i18n: {\n en: \"Identity Number\",\n al: \"Numri i Identitetit\",\n },\n widget: \"anastasis_gtk_ia_nid_al\",\n uuid: \"256e5d30-d65e-481b-9ac4-55f5ac03b24a\",\n \"validation-regex\":\n \"^[0-9A-T][0-9](((0|5)[0-9])|10|11|51|52)[0-9]{3}[A-W]$\",\n \"validation-logic\": \"AL_NID_check\",\n },\n ],\n },\n be: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"nrn_number\",\n label: \"National Register Number\",\n label_i18n: {\n en: \"National Register Number\",\n },\n widget: \"anastasis_gtk_ia_nid_be\",\n uuid: \"0452f99a-06f7-48bd-8ac0-2e4ed9a24560\",\n \"validation-regex\": \"^[0-9]{11}$\",\n \"validation-logic\": \"BE_NRN_check\",\n },\n ],\n },\n ch: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"ahv_number\",\n label: \"AHV number\",\n label_i18n: {\n de_DE: \"AHV-Nummer\",\n de_CH: \"AHV-Nummer\",\n },\n widget: \"anastasis_gtk_ia_ahv\",\n uuid: \"1da87570-ba16-4f62-8a7e-cbda92f51591\",\n \"validation-regex\":\n \"^(756)\\\\.[0-9]{4}\\\\.[0-9]{4}\\\\.[0-9]{2}|(756)[0-9]{10}$\",\n \"validation-logic\": \"CH_AHV_check\",\n autocomplete: \"???.????.????.??\",\n },\n ],\n },\n cz: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"birth_number\",\n label: \"Birth Number\",\n label_i18n: {\n en: \"Birth Number\",\n cz: \"rodn\u00E9 \u010D\u00EDslo\",\n },\n widget: \"anastasis_gtk_ia_birthnumber_cz\",\n uuid: \"03e3a05b-1192-44f1-ac36-7425512eee1a\",\n \"validation-regex\":\n \"^[0-9]{2}(((0|2|5|7)[0-9])|10|11|31|32|51|52|81|82)/[0-9]{3}[0-9]?$\",\n \"validation-logic\": \"CZ_BN_check\",\n },\n ],\n },\n de: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"social_security_number\",\n label: \"Social security number\",\n label_i18n: {\n de_DE: \"Deutsche Sozialversicherungsnummer\",\n en: \"German Social security number\",\n },\n widget: \"anastasis_gtk_ia_ssn_de\",\n uuid: \"d5e2aa79-1c88-4cf4-a4d2-252508b38e05\",\n \"validation-regex\": \"^[0-9]{8}[[:upper:]][0-9]{3}$\",\n \"validation-logic\": \"DE_SVN_check\",\n optional: true,\n },\n {\n type: \"string\",\n name: \"tax_number\",\n label: \"Taxpayer identification number\",\n label_i18n: {\n de_DE: \"Steuerliche Identifikationsnummer\",\n en: \"German taxpayer identification number\",\n },\n widget: \"anastasis_gtk_ia_tin_de\",\n uuid: \"dae48f85-e3ff-47a4-a4a3-ed981ed8c3c6\",\n \"validation-regex\": \"^[0-9]{11}$\",\n \"validation-logic\": \"DE_TIN_check\",\n },\n ],\n },\n dk: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"cpr_number\",\n label: \"CPR-nummer\",\n label_i18n: {\n en: \"CPR Number\",\n dk: \"CPR-nummer\",\n },\n widget: \"anastasis_gtk_ia_cpr_dk\",\n uuid: \"38f13a4d-4302-4ada-ada1-c3ff4a8ff689\",\n \"validation-regex\":\n \"^(0[1-9]|[1-2][0-9]|30|31)((0[1-9]|10|11|12))[0-9]{2}-[0-9A-Z]{4}$\",\n },\n ],\n },\n es: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"tax_number\",\n label: \"Tax number\",\n label_i18n: {\n es_ES: \"N\u00FAmero de Identificaci\u00F3n Fiscal (DNI, NIE)\",\n },\n widget: \"anastasis_gtk_ia_es_dni\",\n uuid: \"ac8bd865-6be8-445c-b650-6a18eef16a49\",\n \"validation-regex\": \"^[0-9MXYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$\",\n \"validation-logic\": \"ES_DNI_check\",\n },\n {\n type: \"string\",\n name: \"ssn_number\",\n label: \"Social security number\",\n label_i18n: {\n es_ES: \"N\u00FAmero de Seguridad Social\",\n },\n widget: \"anastasis_gtk_ia_es_ssn\",\n uuid: \"22396a19-f3bb-497e-b63a-961fd639140e\",\n \"validation-regex\": \"^[0-9]{11}$\",\n },\n ],\n },\n fr: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"social_security_number\",\n label: \"Code Insee\",\n label_i18n: {\n fr_FR: \"Code Insee\",\n en: \"INSEE code\",\n },\n widget: \"anastasis_gtk_ia_insee_fr\",\n uuid: \"2f36a81c-3f6d-41f3-97ee-9c885bc41873\",\n \"validation-regex\": \"^[0-9]{15}$\",\n \"validation-logic\": \"FR_INSEE_check\",\n },\n ],\n },\n in: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"aadhar_number\",\n label: \"Aadhar number\",\n label_i18n: {\n en: \"Aadhar number\",\n },\n widget: \"anastasis_gtk_ia_aadhar_in\",\n uuid: \"55afe97a-98bc-48d1-bb37-a9658be3fdc9\",\n \"validation-regex\": \"^[2-9]{1}[0-9]{3}\\\\s[0-9]{4}\\\\s[0-9]{4}$\",\n \"validation-logic\": \"IN_AADHAR_check\",\n },\n ],\n },\n it: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"fiscal_code\",\n label: \"Codice fiscale\",\n label_i18n: {\n it: \"Codice fiscale\",\n en: \"Fiscal code\",\n },\n widget: \"anastasis_gtk_ia_cf_it\",\n uuid: \"88f53c51-52ad-4d63-a163-ec042589f925\",\n \"validation-regex\":\n \"^[[:upper:]]{6}[0-9]{2}[A-EHLMPRT](([0-24-6][0-9])|(30|31|70|71))[A-MZ][0-9]{3}[A-Z]$\",\n \"validation-logic\": \"IT_CF_check\",\n },\n ],\n },\n jp: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"my_number\",\n label: \"My number\",\n label_i18n: {\n en: \"My number\",\n jp: \"\u30DE\u30A4\u30CA\u30F3\u30D0\u30FC\",\n },\n widget: \"anastasis_gtk_ia_my_jp\",\n uuid: \"90848f42-a83e-4226-8186-329696c14152\",\n \"validation-regex\": \"^[0-9]{12}$\",\n },\n ],\n },\n nl: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"social_security_number\",\n label: \"Citizen Service Number\",\n label_i18n: {\n nl_NL: \"Burgerservicenummer (BSN)\",\n en: \"Citizen Service Number\",\n },\n widget: \"anastasis_gtk_ia_ssn_nl\",\n uuid: \"b6bf1f14-1f85-4afb-af21-f54b88490bdc\",\n \"validation-regex\": \"^[1-9][0-9]{8}$\",\n \"validation-logic\": \"NL_BSN_check\",\n },\n ],\n },\n sk: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"birth_number\",\n label: \"Birth Number\",\n label_i18n: {\n en: \"Birth Number\",\n sk: \"rodn\u00E9 \u010D\u00EDslo\",\n },\n widget: \"anastasis_gtk_ia_birthnumber_sk\",\n uuid: \"1cd372fe-2cea-4928-9f29-66f2bdd8555c\",\n \"validation-regex\":\n \"^[0-9]{2}(((0|2|5|7)[0-9])|10|11|31|32|51|52|81|82)/[0-9]{3}[0-9]?$\",\n \"validation-logic\": \"CZ_BN_check\",\n },\n ],\n },\n us: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"social_security_number\",\n label: \"Social security number\",\n label_i18n: {\n en: \"US Social security number\",\n },\n widget: \"anastasis_gtk_ia_ssn_us\",\n uuid: \"310a138c-b0b7-4985-b8b8-d00e765e9f9b\",\n \"validation-regex\": \"^[0-9]{3}-[0-9]{2}-[0-9]{4}$\",\n autocomplete: \"???-??-????\",\n },\n ],\n },\n xx: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n restricted: \"xx\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"prime_number\",\n label: \"Prime number\",\n widget: \"anastasis_gtk_xx_prime\",\n uuid: \"39190a95-cacb-4412-8bae-1f7da3f980b4\",\n \"validation-regex\": \"^[0-9]+$\",\n \"validation-logic\": \"XY_PRIME_check\",\n optional: true,\n },\n {\n type: \"string\",\n name: \"sq_number\",\n label: \"Square number\",\n widget: \"anastasis_gtk_xx_square\",\n uuid: \"ed790bca-89bf-11eb-96f2-233996cf644e\",\n \"validation-regex\": \"^[0-9]+$\",\n \"validation-logic\": \"XX_SQUARE_check\",\n },\n ],\n },\n },\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 {\n AmountString,\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForAmountString,\n codecForAny,\n codecForConstString,\n codecForNumber,\n codecForString,\n TalerProtocolTimestamp,\n} from \"@gnu-taler/taler-util\";\n\nexport interface EscrowConfigurationResponse {\n // Protocol identifier, clarifies that this is an Anastasis provider.\n name: \"anastasis\";\n\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency in which this provider processes payments.\n currency: string;\n\n // Supported authorization methods.\n methods: AuthorizationMethodConfig[];\n\n // Maximum policy upload size supported.\n storage_limit_in_megabytes: number;\n\n // Payment required to maintain an account to store policy documents for a year.\n // Users can pay more, in which case the storage time will go up proportionally.\n annual_fee: AmountString;\n\n // Payment required to upload truth. To be paid per upload.\n truth_upload_fee: AmountString;\n\n // Limit on the liability that the provider is offering with\n // respect to the services provided.\n liability_limit: AmountString;\n\n // Salt value with 128 bits of entropy.\n // Different providers\n // will use different high-entropy salt values. The resulting\n // **provider salt** is then used in various operations to ensure\n // cryptographic operations differ by provider. A provider must\n // never change its salt value.\n provider_salt: string;\n\n /**\n * Human-readable business name of the provider.\n */\n business_name: string;\n}\n\nexport interface AuthorizationMethodConfig {\n // Name of the authorization method.\n type: string;\n\n // Fee for accessing key share using this method.\n cost: AmountString;\n}\n\nexport interface TruthUploadRequest {\n // Contains the information of an interface EncryptedKeyShare, but simply\n // as one binary block (in Crockford Base32 encoding for JSON).\n key_share_data: string;\n\n // Key share method, i.e. \"security question\", \"SMS\", \"e-mail\", ...\n type: string;\n\n // Variable-size truth. After decryption,\n // this contains the ground truth, i.e. H(challenge answer),\n // phone number, e-mail address, picture, fingerprint, ...\n // **base32 encoded**.\n //\n // The nonce of the HKDF for this encryption must include the\n // string \"ECT\".\n encrypted_truth: string; //bytearray\n\n // MIME type of truth, i.e. text/ascii, image/jpeg, etc.\n truth_mime?: string;\n\n // For how many years from now would the client like us to\n // store the truth?\n storage_duration_years: number;\n}\n\nexport interface IbanExternalAuthResponse {\n method: \"iban\";\n answer_code: number;\n details: {\n challenge_amount: AmountString;\n credit_iban: string;\n business_name: string;\n wire_transfer_subject: string;\n };\n}\n\nexport interface RecoveryMetaResponse {\n /**\n * Version numbers as a string (!) are used as keys.\n */\n [version: string]: RecoveryMetaDataItem;\n}\n\nexport interface RecoveryMetaDataItem {\n // The meta value can be NULL if the document\n // exists but no meta data was provided.\n meta?: string;\n\n // Server-time indicative of when the recovery\n // document was uploaded.\n upload_time: TalerProtocolTimestamp;\n}\n\nexport type ChallengeInstructionMessage =\n | FileChallengeInstructionMessage\n | IbanChallengeInstructionMessage\n | PinChallengeInstructionMessage;\n\nexport interface IbanChallengeInstructionMessage {\n // What kind of challenge is this?\n challenge_type: \"IBAN_WIRE\";\n\n wire_details: {\n // How much should be wired?\n challenge_amount: AmountString;\n\n // What is the target IBAN?\n credit_iban: string;\n\n // What is the receiver name?\n business_name: string;\n\n // What is the expected wire transfer subject?\n wire_transfer_subject: string;\n\n // What is the numeric code (also part of the\n // wire transfer subject) to be hashed when\n // solving the challenge?\n answer_code: number;\n\n // Hint about the origin account that must be used.\n debit_account_hint: string;\n };\n}\n\nexport interface PinChallengeInstructionMessage {\n // What kind of challenge is this?\n challenge_type: \"TAN_SENT\";\n\n // Where was the PIN code sent? Note that this\n // address will most likely have been obscured\n // to improve privacy.\n tan_address_hint: string;\n}\n\nexport interface FileChallengeInstructionMessage {\n // What kind of challenge is this?\n challenge_type: \"FILE_WRITTEN\";\n\n // Name of the file where the PIN code was written.\n filename: string;\n}\n\nexport const codecForFileChallengeInstructionMessage =\n (): Codec<FileChallengeInstructionMessage> =>\n buildCodecForObject<FileChallengeInstructionMessage>()\n .property(\"challenge_type\", codecForConstString(\"FILE_WRITTEN\"))\n .property(\"filename\", codecForString())\n .build(\"FileChallengeInstructionMessage\");\n\nexport const codecForPinChallengeInstructionMessage =\n (): Codec<PinChallengeInstructionMessage> =>\n buildCodecForObject<PinChallengeInstructionMessage>()\n .property(\"challenge_type\", codecForConstString(\"TAN_SENT\"))\n .property(\"tan_address_hint\", codecForString())\n .build(\"PinChallengeInstructionMessage\");\n\nexport const codecForIbanChallengeInstructionMessage =\n (): Codec<IbanChallengeInstructionMessage> =>\n buildCodecForObject<IbanChallengeInstructionMessage>()\n .property(\"challenge_type\", codecForConstString(\"IBAN_WIRE\"))\n .property(\"wire_details\", codecForAny())\n .build(\"IbanChallengeInstructionMessage\");\n\nexport const codecForChallengeInstructionMessage =\n (): Codec<ChallengeInstructionMessage> =>\n buildCodecForUnion<ChallengeInstructionMessage>()\n .discriminateOn(\"challenge_type\")\n .alternative(\"FILE_WRITTEN\", codecForFileChallengeInstructionMessage())\n .alternative(\"IBAN_WIRE\", codecForIbanChallengeInstructionMessage())\n .alternative(\"TAN_SENT\", codecForPinChallengeInstructionMessage())\n .build(\"ChallengeInstructionMessage\");\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 {\n AmountString,\n buildCodecForObject,\n codecForAny,\n codecForList,\n codecForNumber,\n codecForString,\n codecForTimestamp,\n TalerProtocolTimestamp,\n} from \"@gnu-taler/taler-util\";\nimport { ChallengeFeedback } from \"./challenge-feedback-types.js\";\nimport { KeyShare } from \"./crypto.js\";\nimport { RecoveryDocument } from \"./recovery-document-types.js\";\n\nexport type ReducerState =\n | ReducerStateBackup\n | ReducerStateRecovery\n | ReducerStateError;\n\nexport interface ContinentInfo {\n name: string;\n}\n\nexport interface CountryInfo {\n code: string;\n name: string;\n continent: string;\n}\n\nexport interface Policy {\n methods: {\n authentication_method: number;\n provider: string;\n }[];\n}\n\nexport interface PolicyProvider {\n provider_url: string;\n}\n\nexport interface SuccessDetails {\n [provider_url: string]: {\n policy_version: number;\n policy_expiration: TalerProtocolTimestamp;\n };\n}\n\nexport interface CoreSecret {\n mime: string;\n value: string;\n /**\n * Filename, only set if the secret comes from\n * a file. Should be set unless the mime type is \"text/plain\";\n */\n filename?: string;\n}\n\nexport interface ReducerStateBackup {\n reducer_type: \"backup\";\n\n backup_state: BackupStates;\n\n continents?: ContinentInfo[];\n\n countries?: CountryInfo[];\n\n identity_attributes?: { [n: string]: string };\n\n authentication_providers?: AuthenticationProviderStatusMap;\n\n authentication_methods?: AuthMethod[];\n\n required_attributes?: UserAttributeSpec[];\n\n selected_continent?: string;\n\n selected_country?: string;\n\n secret_name?: string;\n\n policies?: Policy[];\n\n recovery_data?: {\n /**\n * Map from truth key (`${methodIndex}/${providerUrl}`) to\n * the truth metadata.\n */\n truth_metadata: Record<string, TruthMetaData>;\n recovery_document: RecoveryDocument;\n };\n\n /**\n * Policy providers are providers that we checked to be functional\n * and that are actually used in policies.\n */\n policy_providers?: PolicyProvider[];\n success_details?: SuccessDetails;\n\n /**\n * Currently requested payments.\n *\n * List of taler://pay URIs.\n *\n * FIXME: There should be more information in this,\n * including the provider and amount.\n */\n payments?: string[];\n\n /**\n * FIXME: Why is this not a map from provider to payto?\n */\n policy_payment_requests?: {\n /**\n * FIXME: This is not a payto URI, right?!\n */\n payto: string;\n provider: string;\n }[];\n\n core_secret?: CoreSecret;\n\n expiration?: TalerProtocolTimestamp;\n\n upload_fees?: { fee: AmountString }[];\n\n // FIXME: The payment secrets and pay URIs should\n // probably be consolidated into a single field.\n truth_upload_payment_secrets?: Record<string, string>;\n}\n\nexport interface AuthMethod {\n type: string;\n instructions: string;\n challenge: string;\n mime_type?: string;\n}\n\nexport interface ChallengeInfo {\n instructions: string;\n type: string;\n uuid: string;\n}\n\nexport interface UserAttributeSpec {\n label: string;\n name: string;\n type: string;\n uuid: string;\n widget: string;\n optional?: boolean;\n \"validation-regex\": string | undefined;\n \"validation-logic\": string | undefined;\n autocomplete?: string;\n}\n\nexport interface RecoveryInternalData {\n secret_name: string;\n provider_url: string;\n version: number;\n}\n\nexport interface RecoveryInformation {\n challenges: ChallengeInfo[];\n policies: {\n /**\n * UUID of the associated challenge.\n */\n uuid: string;\n }[][];\n}\n\nexport interface AuthenticationProviderStatusMap {\n [url: string]: AuthenticationProviderStatus;\n}\n\nexport interface ReducerStateRecovery {\n reducer_type: \"recovery\";\n\n recovery_state: RecoveryStates;\n\n identity_attributes?: { [n: string]: string };\n\n continents?: ContinentInfo[];\n countries?: CountryInfo[];\n\n selected_continent?: string;\n selected_country?: string;\n\n required_attributes?: UserAttributeSpec[];\n\n /**\n * Recovery information, used by the UI.\n */\n recovery_information?: RecoveryInformation;\n\n // FIXME: This should really be renamed to recovery_internal_data\n recovery_document?: RecoveryInternalData;\n\n // FIXME: The C reducer should also use this!\n verbatim_recovery_document?: RecoveryDocument;\n\n selected_challenge_uuid?: string;\n\n /**\n * Explicitly selected version by the user.\n */\n selected_version?: SelectedVersionInfo;\n\n challenge_feedback?: { [uuid: string]: ChallengeFeedback };\n\n /**\n * Key shares that we managed to recover so far.\n */\n recovered_key_shares?: { [truth_uuid: string]: KeyShare };\n\n core_secret?: CoreSecret;\n\n authentication_providers?: AuthenticationProviderStatusMap;\n}\n\n/**\n * Truth data as stored in the reducer.\n */\nexport interface TruthMetaData {\n uuid: string;\n\n key_share: string;\n\n policy_index: number;\n\n pol_method_index: number;\n\n /**\n * Nonce used for encrypting the truth.\n */\n nonce: string;\n\n /**\n * Key that the truth (i.e. secret question answer, email address, mobile number, ...)\n * is encrypted with when stored at the provider.\n */\n truth_key: string;\n\n /**\n * Truth-specific salt.\n */\n master_salt: string;\n}\n\nexport interface ReducerStateError {\n reducer_type: \"error\";\n code: number;\n hint?: string;\n detail?: string;\n}\n\nexport enum BackupStates {\n ContinentSelecting = \"CONTINENT_SELECTING\",\n CountrySelecting = \"COUNTRY_SELECTING\",\n UserAttributesCollecting = \"USER_ATTRIBUTES_COLLECTING\",\n AuthenticationsEditing = \"AUTHENTICATIONS_EDITING\",\n PoliciesReviewing = \"POLICIES_REVIEWING\",\n SecretEditing = \"SECRET_EDITING\",\n TruthsPaying = \"TRUTHS_PAYING\",\n PoliciesPaying = \"POLICIES_PAYING\",\n BackupFinished = \"BACKUP_FINISHED\",\n}\n\nexport enum RecoveryStates {\n ContinentSelecting = \"CONTINENT_SELECTING\",\n CountrySelecting = \"COUNTRY_SELECTING\",\n UserAttributesCollecting = \"USER_ATTRIBUTES_COLLECTING\",\n SecretSelecting = \"SECRET_SELECTING\",\n ChallengeSelecting = \"CHALLENGE_SELECTING\",\n ChallengePaying = \"CHALLENGE_PAYING\",\n ChallengeSolving = \"CHALLENGE_SOLVING\",\n RecoveryFinished = \"RECOVERY_FINISHED\",\n}\n\nexport interface MethodSpec {\n type: string;\n usage_fee: AmountString;\n}\n\nexport type AuthenticationProviderStatusNotContacted = {\n status: \"not-contacted\";\n};\n\nexport interface AuthenticationProviderStatusOk {\n status: \"ok\";\n\n annual_fee: string;\n business_name: string;\n currency: string;\n http_status: 200;\n liability_limit: string;\n provider_salt: string;\n storage_limit_in_megabytes: number;\n truth_upload_fee: string;\n methods: MethodSpec[];\n // FIXME: add timestamp?\n}\n\nexport interface AuthenticationProviderStatusDisabled {\n status: \"disabled\";\n}\n\nexport interface AuthenticationProviderStatusError {\n status: \"error\";\n\n http_status?: number;\n code: number;\n hint?: string;\n // FIXME: add timestamp?\n}\n\nexport type AuthenticationProviderStatus =\n | AuthenticationProviderStatusNotContacted\n | AuthenticationProviderStatusDisabled\n | AuthenticationProviderStatusError\n | AuthenticationProviderStatusOk;\n\nexport interface ReducerStateBackupUserAttributesCollecting\n extends ReducerStateBackup {\n backup_state: BackupStates.UserAttributesCollecting;\n selected_country: string;\n currencies: string[];\n required_attributes: UserAttributeSpec[];\n authentication_providers: AuthenticationProviderStatusMap;\n}\n\nexport interface ActionArgsEnterUserAttributes {\n identity_attributes: Record<string, string>;\n}\n\nexport const codecForActionArgsEnterUserAttributes = () =>\n buildCodecForObject<ActionArgsEnterUserAttributes>()\n .property(\"identity_attributes\", codecForAny())\n .build(\"ActionArgsEnterUserAttributes\");\n\nexport interface ActionArgsAddProvider {\n provider_url: string;\n}\n\nexport interface ActionArgsDeleteProvider {\n provider_url: string;\n}\n\nexport interface ActionArgsAddAuthentication {\n authentication_method: {\n type: string;\n instructions: string;\n challenge: string;\n mime?: string;\n };\n}\n\nexport interface ActionArgsDeleteAuthentication {\n authentication_method: number;\n}\n\nexport interface ActionArgsDeletePolicy {\n policy_index: number;\n}\n\nexport interface ActionArgsEnterSecretName {\n name: string;\n}\n\nexport interface ActionArgsEnterSecret {\n secret: {\n value: string;\n mime?: string;\n filename?: string;\n };\n expiration: TalerProtocolTimestamp;\n}\n\nexport interface ActionArgsSelectContinent {\n continent: string;\n}\n\nexport const codecForActionArgSelectContinent = () =>\n buildCodecForObject<ActionArgsSelectContinent>()\n .property(\"continent\", codecForString())\n .build(\"ActionArgSelectContinent\");\n\nexport interface ActionArgsSelectCountry {\n country_code: string;\n}\n\nexport interface ActionArgsSelectChallenge {\n uuid: string;\n}\n\nexport type ActionArgsSolveChallengeRequest =\n | SolveChallengeAnswerRequest\n | SolveChallengePinRequest\n | SolveChallengeHashRequest;\n\n/**\n * Answer to a challenge.\n *\n * For \"question\" challenges, this is a string with the answer.\n *\n * For \"sms\" / \"email\" / \"post\" this is a numeric code with optionally\n * the \"A-\" prefix.\n */\nexport interface SolveChallengeAnswerRequest {\n answer: string;\n}\n\n/**\n * Answer to a challenge that requires a numeric response.\n *\n * XXX: Should be deprecated in favor of just \"answer\".\n */\nexport interface SolveChallengePinRequest {\n pin: number;\n}\n\n/**\n * Answer to a challenge by directly providing the hash.\n *\n * XXX: When / why is this even used?\n */\nexport interface SolveChallengeHashRequest {\n /**\n * Base32-crock encoded hash code.\n */\n hash: string;\n}\n\nexport interface PolicyMember {\n authentication_method: number;\n provider: string;\n}\n\nexport interface ActionArgsAddPolicy {\n policy: PolicyMember[];\n}\n\nexport interface ActionArgsUpdateExpiration {\n expiration: TalerProtocolTimestamp;\n}\n\nexport interface SelectedVersionInfo {\n attribute_mask: number;\n providers: {\n url: string;\n version: number;\n }[];\n}\n\nexport type ActionArgsChangeVersion = SelectedVersionInfo;\n\nexport interface ActionArgsUpdatePolicy {\n policy_index: number;\n policy: PolicyMember[];\n}\n\n/**\n * Cursor for a provider discovery process.\n */\nexport interface DiscoveryCursor {\n position: {\n provider_url: string;\n mask: number;\n max_version?: number;\n }[];\n}\n\nexport interface PolicyMetaInfo {\n policy_hash: string;\n provider_url: string;\n version: number;\n attribute_mask: number;\n server_time: TalerProtocolTimestamp;\n secret_name?: string;\n}\n\n/**\n * Aggregated / de-duplicated policy meta info.\n */\nexport interface AggregatedPolicyMetaInfo {\n secret_name?: string;\n policy_hash: string;\n attribute_mask: number;\n providers: {\n url: string;\n version: number;\n }[];\n}\n\nexport interface DiscoveryResult {\n /**\n * Found policies.\n */\n policies: PolicyMetaInfo[];\n\n /**\n * Cursor that allows getting more results.\n */\n cursor?: DiscoveryCursor;\n}\n\n// FIXME: specify schema!\nexport const codecForActionArgsChangeVersion = codecForAny;\n\nexport const codecForPolicyMember = () =>\n buildCodecForObject<PolicyMember>()\n .property(\"authentication_method\", codecForNumber())\n .property(\"provider\", codecForString())\n .build(\"PolicyMember\");\n\nexport const codecForActionArgsAddPolicy = () =>\n buildCodecForObject<ActionArgsAddPolicy>()\n .property(\"policy\", codecForList(codecForPolicyMember()))\n .build(\"ActionArgsAddPolicy\");\n\nexport const codecForActionArgsUpdateExpiration = () =>\n buildCodecForObject<ActionArgsUpdateExpiration>()\n .property(\"expiration\", codecForTimestamp)\n .build(\"ActionArgsUpdateExpiration\");\n\nexport const codecForActionArgsSelectChallenge = () =>\n buildCodecForObject<ActionArgsSelectChallenge>()\n .property(\"uuid\", codecForString())\n .build(\"ActionArgsSelectChallenge\");\n\nexport const codecForActionArgSelectCountry = () =>\n buildCodecForObject<ActionArgsSelectCountry>()\n .property(\"country_code\", codecForString())\n .build(\"ActionArgSelectCountry\");\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 {\n canonicalJson,\n decodeCrock,\n encodeCrock,\n getRandomBytes,\n kdfKw,\n secretbox,\n crypto_sign_keyPair_fromSeed,\n stringToBytes,\n secretbox_open,\n hash,\n bytesToString,\n hashArgon2id,\n} from \"@gnu-taler/taler-util\";\n\nexport type Flavor<T, FlavorT extends string> = T & {\n _flavor?: `anastasis.${FlavorT}`;\n};\n\nexport type FlavorP<T, FlavorT extends string, S extends number> = T & {\n _flavor?: `anastasis.${FlavorT}`;\n _size?: S;\n};\n\nexport type UserIdentifier = Flavor<string, \"UserIdentifier\">;\nexport type ServerSalt = Flavor<string, \"ServerSalt\">;\nexport type PolicySalt = Flavor<string, \"PolicySalt\">;\nexport type PolicyKey = FlavorP<string, \"PolicyKey\", 64>;\nexport type KeyShare = Flavor<string, \"KeyShare\">;\nexport type EncryptedKeyShare = Flavor<string, \"EncryptedKeyShare\">;\nexport type EncryptedTruth = Flavor<string, \"EncryptedTruth\">;\nexport type EncryptedCoreSecret = Flavor<string, \"EncryptedCoreSecret\">;\nexport type EncryptedMasterKey = Flavor<string, \"EncryptedMasterKey\">;\nexport type EddsaPublicKey = Flavor<string, \"EddsaPublicKey\">;\nexport type EddsaPrivateKey = Flavor<string, \"EddsaPrivateKey\">;\nexport type TruthUuid = Flavor<string, \"TruthUuid\">;\nexport type SecureAnswerHash = Flavor<string, \"SecureAnswerHash\">;\n/**\n * Truth-specific randomness, also called question salt sometimes.\n */\nexport type TruthSalt = Flavor<string, \"TruthSalt\">;\n/**\n * Truth key, found in the recovery document.\n */\nexport type TruthKey = Flavor<string, \"TruthKey\">;\nexport type EncryptionNonce = Flavor<string, \"EncryptionNonce\">;\nexport type OpaqueData = Flavor<string, \"OpaqueData\">;\n\nconst nonceSize = 24;\nconst masterKeySize = 64;\n\nexport async function userIdentifierDerive(\n idData: any,\n serverSalt: ServerSalt,\n): Promise<UserIdentifier> {\n const canonIdData = canonicalJson(idData);\n const hashInput = stringToBytes(canonIdData);\n const result = await hashArgon2id(\n hashInput, // password\n decodeCrock(serverSalt), // salt\n 3, // iterations\n 1024, // memoryLimit (kibibytes)\n 64, // hashLength\n );\n return encodeCrock(result);\n}\n\nexport interface AccountKeyPair {\n priv: EddsaPrivateKey;\n pub: EddsaPublicKey;\n}\n\nexport function accountKeypairDerive(userId: UserIdentifier): AccountKeyPair {\n // FIXME: the KDF invocation looks fishy, but that's what the C code presently does.\n const d = kdfKw({\n outputLength: 32,\n ikm: decodeCrock(userId),\n info: stringToBytes(\"ver\"),\n });\n const pair = crypto_sign_keyPair_fromSeed(d);\n return {\n priv: encodeCrock(d),\n pub: encodeCrock(pair.publicKey),\n };\n}\n\n/**\n * Encrypt the recovery document.\n *\n * The caller should first compress the recovery doc.\n */\nexport async function encryptRecoveryDocument(\n userId: UserIdentifier,\n recoveryDocData: OpaqueData,\n): Promise<OpaqueData> {\n const nonce = encodeCrock(getRandomBytes(nonceSize));\n return anastasisEncrypt(nonce, asOpaque(userId), recoveryDocData, \"erd\");\n}\n\n/**\n * Encrypt the recovery document.\n *\n * The caller should first compress the recovery doc.\n */\nexport async function decryptRecoveryDocument(\n userId: UserIdentifier,\n recoveryDocData: OpaqueData,\n): Promise<OpaqueData> {\n return anastasisDecrypt(asOpaque(userId), recoveryDocData, \"erd\");\n}\n\nexport interface PolicyMetadata {\n secret_name: string;\n policy_hash: string;\n}\n\nexport async function encryptPolicyMetadata(\n userId: UserIdentifier,\n metadata: PolicyMetadata,\n): Promise<OpaqueData> {\n const metadataBytes = typedArrayConcat([\n decodeCrock(metadata.policy_hash),\n stringToBytes(metadata.secret_name),\n ]);\n const nonce = encodeCrock(getRandomBytes(nonceSize));\n return anastasisEncrypt(\n nonce,\n asOpaque(userId),\n encodeCrock(metadataBytes),\n \"rmd\",\n );\n}\n\nexport async function decryptPolicyMetadata(\n userId: UserIdentifier,\n metadataEnc: OpaqueData,\n): Promise<PolicyMetadata> {\n // @ts-ignore\n console.log(\"metadataEnc\", metadataEnc);\n const plain = await anastasisDecrypt(asOpaque(userId), metadataEnc, \"rmd\");\n // @ts-ignore\n console.log(\"plain:\", plain);\n const metadataBytes = decodeCrock(plain);\n const policyHash = encodeCrock(metadataBytes.slice(0, 64));\n const secretName = bytesToString(metadataBytes.slice(64));\n return {\n policy_hash: policyHash,\n secret_name: secretName,\n };\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\nexport async function policyKeyDerive(\n keyShares: KeyShare[],\n policySalt: PolicySalt,\n): Promise<PolicyKey> {\n const chunks = keyShares.map((x) => decodeCrock(x));\n const polKey = kdfKw({\n outputLength: 64,\n ikm: typedArrayConcat(chunks),\n salt: decodeCrock(policySalt),\n info: stringToBytes(\"anastasis-policy-key-derive\"),\n });\n\n return encodeCrock(polKey);\n}\n\nasync function deriveKey(\n keySeed: OpaqueData,\n nonce: EncryptionNonce,\n salt: string,\n): Promise<Uint8Array> {\n return kdfKw({\n outputLength: 32,\n salt: decodeCrock(nonce),\n ikm: decodeCrock(keySeed),\n info: stringToBytes(salt),\n });\n}\n\nasync function anastasisEncrypt(\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 nonceBuf = decodeCrock(nonce);\n const cipherText = secretbox(decodeCrock(plaintext), decodeCrock(nonce), key);\n return encodeCrock(typedArrayConcat([nonceBuf, cipherText]));\n}\n\nasync function anastasisDecrypt(\n keySeed: OpaqueData,\n ciphertext: OpaqueData,\n salt: string,\n): Promise<OpaqueData> {\n const ctBuf = decodeCrock(ciphertext);\n const nonceBuf = ctBuf.slice(0, nonceSize);\n const enc = ctBuf.slice(nonceSize);\n const key = await deriveKey(keySeed, encodeCrock(nonceBuf), salt);\n const clearText = secretbox_open(enc, nonceBuf, key);\n if (!clearText) {\n throw Error(\"could not decrypt\");\n }\n return encodeCrock(clearText);\n}\n\nexport const asOpaque = (x: string): OpaqueData => x;\nconst asEncryptedKeyShare = (x: OpaqueData): EncryptedKeyShare => x as string;\nconst asEncryptedTruth = (x: OpaqueData): EncryptedTruth => x as string;\nconst asKeyShare = (x: OpaqueData): KeyShare => x as string;\n\nexport async function encryptKeyshare(\n keyShare: KeyShare,\n userId: UserIdentifier,\n answerSalt?: string,\n): Promise<EncryptedKeyShare> {\n const s = answerSalt ?? \"eks\";\n const nonce = encodeCrock(getRandomBytes(24));\n return asEncryptedKeyShare(\n await anastasisEncrypt(nonce, asOpaque(userId), asOpaque(keyShare), s),\n );\n}\n\nexport async function decryptKeyShare(\n encKeyShare: EncryptedKeyShare,\n userId: UserIdentifier,\n answerSalt?: string,\n): Promise<KeyShare> {\n const s = answerSalt ?? \"eks\";\n return asKeyShare(\n await anastasisDecrypt(asOpaque(userId), asOpaque(encKeyShare), s),\n );\n}\n\nexport async function encryptTruth(\n nonce: EncryptionNonce,\n truthEncKey: TruthKey,\n truth: OpaqueData,\n): Promise<EncryptedTruth> {\n const salt = \"ect\";\n return asEncryptedTruth(\n await anastasisEncrypt(nonce, asOpaque(truthEncKey), truth, salt),\n );\n}\n\nexport async function decryptTruth(\n truthEncKey: TruthKey,\n truthEnc: EncryptedTruth,\n): Promise<OpaqueData> {\n const salt = \"ect\";\n return await anastasisDecrypt(\n asOpaque(truthEncKey),\n asOpaque(truthEnc),\n salt,\n );\n}\n\nexport interface CoreSecretEncResult {\n encCoreSecret: EncryptedCoreSecret;\n encMasterKeys: EncryptedMasterKey[];\n}\n\nexport async function coreSecretRecover(args: {\n encryptedMasterKey: OpaqueData;\n policyKey: PolicyKey;\n encryptedCoreSecret: OpaqueData;\n}): Promise<OpaqueData> {\n const masterKey = await anastasisDecrypt(\n asOpaque(args.policyKey),\n args.encryptedMasterKey,\n \"emk\",\n );\n return await anastasisDecrypt(masterKey, args.encryptedCoreSecret, \"cse\");\n}\n\nexport async function coreSecretEncrypt(\n policyKeys: PolicyKey[],\n coreSecret: OpaqueData,\n): Promise<CoreSecretEncResult> {\n const masterKey = getRandomBytes(masterKeySize);\n const nonce = encodeCrock(getRandomBytes(nonceSize));\n const coreSecretEncSalt = \"cse\";\n const masterKeyEncSalt = \"emk\";\n const encCoreSecret = (await anastasisEncrypt(\n nonce,\n encodeCrock(masterKey),\n coreSecret,\n coreSecretEncSalt,\n )) as string;\n const encMasterKeys: EncryptedMasterKey[] = [];\n for (let i = 0; i < policyKeys.length; i++) {\n const polNonce = encodeCrock(getRandomBytes(nonceSize));\n const encMasterKey = await anastasisEncrypt(\n polNonce,\n asOpaque(policyKeys[i]),\n encodeCrock(masterKey),\n masterKeyEncSalt,\n );\n encMasterKeys.push(encMasterKey as string);\n }\n return {\n encCoreSecret,\n encMasterKeys,\n };\n}\n\nexport async function pinAnswerHash(pin: number): Promise<SecureAnswerHash> {\n return encodeCrock(hash(stringToBytes(pin.toString())));\n}\n\nexport async function secureAnswerHash(\n answer: string,\n truthUuid: TruthUuid,\n questionSalt: TruthSalt,\n): Promise<SecureAnswerHash> {\n const powResult = await hashArgon2id(\n stringToBytes(answer), // password\n decodeCrock(questionSalt), // salt\n 3, // iterations\n 1024, // memorySize (kibibytes)\n 64, // hashLength\n );\n const kdfResult = kdfKw({\n outputLength: 64,\n salt: decodeCrock(truthUuid),\n ikm: powResult,\n info: stringToBytes(\"anastasis-secure-question-hashing\"),\n });\n return encodeCrock(kdfResult);\n}\n", "import { TruthKey, TruthSalt, TruthUuid } from \"./crypto.js\";\n\nexport enum ChallengeType {\n Question = \"question\",\n Sms = \"sms\",\n Email = \"email\",\n Post = \"post\",\n Totp = \"totp\",\n Iban = \"iban\",\n}\n\nexport interface RecoveryDocument {\n /**\n * Human-readable name of the secret\n * FIXME: Why is this optional?\n */\n secret_name?: string;\n\n /**\n * Encrypted core secret.\n *\n * Variable-size length, base32-crock encoded.\n */\n encrypted_core_secret: string;\n\n /**\n * List of escrow providers and selected authentication method.\n */\n escrow_methods: EscrowMethod[];\n\n /**\n * List of possible decryption policies.\n */\n policies: DecryptionPolicy[];\n}\n\nexport interface DecryptionPolicy {\n /**\n * Salt included to encrypt master key share when\n * using this decryption policy.\n *\n * FIXME: Rename to policy_salt\n */\n salt: string;\n\n /**\n * Master key, AES-encrypted with key derived from\n * salt and keyshares revealed by the following list of\n * escrow methods identified by UUID.\n */\n master_key: string;\n\n /**\n * List of escrow methods identified by their UUID.\n */\n uuids: string[];\n}\n\nexport interface EscrowMethod {\n /**\n * URL of the escrow provider (including possibly this Anastasis server).\n */\n url: string;\n\n /**\n * Type of the escrow method (e.g. security question, SMS etc.).\n */\n escrow_type: ChallengeType;\n\n /**\n * UUID of the escrow method.\n * 16 bytes base32-crock encoded.\n */\n uuid: TruthUuid;\n\n /**\n * Key used to encrypt the Truth this EscrowMethod is related to.\n * Client has to provide this key to the server when using /truth/.\n */\n truth_key: TruthKey;\n\n /**\n * Salt to hash the security question answer if applicable.\n */\n question_salt: TruthSalt;\n\n // Salt from the provider to derive the user ID\n // at this provider.\n provider_salt: string;\n\n /**\n * The instructions to give to the user (i.e. the security question\n * if this is challenge-response).\n */\n instructions: string;\n}\n", "import { AmountString, j2s, Logger } from \"@gnu-taler/taler-util\";\nimport { AuthMethod, Policy, PolicyProvider } from \"./reducer-types.js\";\n\nconst logger = new Logger(\"anastasis-core:policy-suggestion.ts\");\n\nconst maxMethodSelections = 200;\nconst maxPolicyEvaluations = 10000;\n\n/**\n * Provider information used during provider/method mapping.\n */\nexport interface ProviderInfo {\n url: string;\n methodCost: Record<string, AmountString>;\n}\n\nexport function suggestPolicies(\n methods: AuthMethod[],\n providers: ProviderInfo[],\n): PolicySelectionResult {\n const numMethods = methods.length;\n if (numMethods === 0) {\n throw Error(\"no methods\");\n }\n let numSel: number;\n if (numMethods <= 2) {\n numSel = numMethods;\n } else if (numMethods <= 4) {\n numSel = numMethods - 1;\n } else if (numMethods <= 6) {\n numSel = numMethods - 2;\n } else if (numMethods == 7) {\n numSel = numMethods - 3;\n } else {\n numSel = 4;\n }\n const policies: Policy[] = [];\n const selections = enumerateMethodSelections(\n numSel,\n numMethods,\n maxMethodSelections,\n );\n logger.info(`selections: ${j2s(selections)}`);\n for (const sel of selections) {\n const p = assignProviders(policies, methods, providers, sel);\n if (p) {\n policies.push(p);\n }\n }\n logger.info(`suggesting policies ${j2s(policies)}`);\n return {\n policies,\n policy_providers: providers.map((x) => ({\n provider_url: x.url,\n })),\n };\n}\n\n/**\n * Assign providers to a method selection.\n *\n * The evaluation of the assignment is made with respect to\n * previously generated policies.\n */\nfunction assignProviders(\n existingPolicies: Policy[],\n methods: AuthMethod[],\n providers: ProviderInfo[],\n methodSelection: number[],\n): Policy | undefined {\n const providerSelections = enumerateProviderMappings(\n methodSelection.length,\n providers.length,\n maxPolicyEvaluations,\n );\n\n let bestProvSel: ProviderSelection | undefined;\n // Number of different providers selected, larger is better\n let bestDiversity = 0;\n // Number of identical challenges duplicated at different providers,\n // smaller is better\n let bestDuplication = Number.MAX_SAFE_INTEGER;\n\n for (const provSel of providerSelections) {\n // First, check if selection is even possible with the methods offered\n let possible = true;\n for (const methSelIndex in provSel) {\n const provIndex = provSel[methSelIndex];\n if (typeof provIndex !== \"number\") {\n throw Error(\"invariant failed\");\n }\n const methIndex = methodSelection[methSelIndex];\n const meth = methods[methIndex];\n if (!meth) {\n throw Error(\"invariant failed\");\n }\n const prov = providers[provIndex];\n if (!prov.methodCost[meth.type]) {\n possible = false;\n break;\n }\n }\n if (!possible) {\n continue;\n }\n // Evaluate diversity, always prefer policies\n // that increase diversity.\n const providerSet = new Set<string>();\n // The C reducer evaluates diversity only per policy\n // for (const pol of existingPolicies) {\n // for (const m of pol.methods) {\n // providerSet.add(m.provider);\n // }\n // }\n for (const provIndex of provSel) {\n const prov = providers[provIndex];\n providerSet.add(prov.url);\n }\n\n const diversity = providerSet.size;\n\n // Number of providers that each method shows up at.\n const provPerMethod: Set<string>[] = [];\n for (let i = 0; i < methods.length; i++) {\n provPerMethod[i] = new Set<string>();\n }\n for (const pol of existingPolicies) {\n for (const m of pol.methods) {\n provPerMethod[m.authentication_method].add(m.provider);\n }\n }\n for (const methSelIndex in provSel) {\n const prov = providers[provSel[methSelIndex]];\n provPerMethod[methodSelection[methSelIndex]].add(prov.url);\n }\n\n let duplication = 0;\n for (const provSet of provPerMethod) {\n duplication += provSet.size;\n }\n\n logger.info(`diversity ${diversity}, duplication ${duplication}`);\n\n if (!bestProvSel || diversity > bestDiversity) {\n bestProvSel = provSel;\n bestDiversity = diversity;\n bestDuplication = duplication;\n logger.info(`taking based on diversity`);\n } else if (diversity == bestDiversity && duplication < bestDuplication) {\n bestProvSel = provSel;\n bestDiversity = diversity;\n bestDuplication = duplication;\n logger.info(`taking based on duplication`);\n }\n // TODO: also evaluate costs\n }\n\n if (!bestProvSel) {\n return undefined;\n }\n\n return {\n methods: bestProvSel.map((x, i) => ({\n authentication_method: methodSelection[i],\n provider: providers[x].url,\n })),\n };\n}\n\n/**\n * A provider selection maps a method selection index to a provider index.\n *\n * I.e. \"PSEL[i] = x\" means that provider with index \"x\" should be used\n * for method with index \"MSEL[i]\"\n */\ntype ProviderSelection = number[];\n\n/**\n * A method selection \"MSEL[j] = y\" means that policy method j\n * should use method y.\n */\ntype MethodSelection = number[];\n\n/**\n * Compute provider mappings.\n * Enumerates all n-combinations with repetition of m providers.\n */\nfunction enumerateProviderMappings(\n n: number,\n m: number,\n limit?: number,\n): ProviderSelection[] {\n const selections: ProviderSelection[] = [];\n const a = new Array(n);\n const sel = (i: number, start: number = 0) => {\n if (i === n) {\n selections.push([...a]);\n return;\n }\n for (let j = start; j < m; j++) {\n a[i] = j;\n sel(i + 1, 0);\n if (limit && selections.length >= limit) {\n break;\n }\n }\n };\n sel(0);\n return selections;\n}\n\ninterface PolicySelectionResult {\n policies: Policy[];\n policy_providers: PolicyProvider[];\n}\n\n/**\n * Compute method selections.\n * Enumerates all n-combinations without repetition of m methods.\n */\nfunction enumerateMethodSelections(\n n: number,\n m: number,\n limit?: number,\n): MethodSelection[] {\n const selections: MethodSelection[] = [];\n const a = new Array(n);\n const sel = (i: number, start: number = 0) => {\n if (i === n) {\n selections.push([...a]);\n return;\n }\n for (let j = start; j < m; j++) {\n a[i] = j;\n sel(i + 1, j + 1);\n if (limit && selections.length >= limit) {\n break;\n }\n }\n };\n sel(0);\n return selections;\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\n/**\n * Imports.\n */\nimport { AmountString, HttpStatusCode } from \"@gnu-taler/taler-util\";\n\nexport enum ChallengeFeedbackStatus {\n Solved = \"solved\",\n CodeInFile = \"code-in-file\",\n CodeSent = \"code-sent\",\n ServerFailure = \"server-failure\",\n TruthUnknown = \"truth-unknown\",\n TalerPayment = \"taler-payment\",\n Unsupported = \"unsupported\",\n RateLimitExceeded = \"rate-limit-exceeded\",\n IbanInstructions = \"iban-instructions\",\n IncorrectAnswer = \"incorrect-answer\",\n}\n\nexport type ChallengeFeedback =\n | ChallengeFeedbackSolved\n | ChallengeFeedbackCodeInFile\n | ChallengeFeedbackCodeSent\n | ChallengeFeedbackIncorrectAnswer\n | ChallengeFeedbackTalerPaymentRequired\n | ChallengeFeedbackServerFailure\n | ChallengeFeedbackRateLimitExceeded\n | ChallengeFeedbackTruthUnknown\n | ChallengeFeedbackUnsupported\n | ChallengeFeedbackBankTransferRequired;\n\n/**\n * Challenge has been solved and the key share has\n * been retrieved.\n */\nexport interface ChallengeFeedbackSolved {\n state: ChallengeFeedbackStatus.Solved;\n}\n\nexport interface ChallengeFeedbackIncorrectAnswer {\n state: ChallengeFeedbackStatus.IncorrectAnswer;\n}\n\nexport interface ChallengeFeedbackCodeInFile {\n state: ChallengeFeedbackStatus.CodeInFile;\n filename: string;\n display_hint: string;\n}\n\nexport interface ChallengeFeedbackCodeSent {\n state: ChallengeFeedbackStatus.CodeSent;\n display_hint: string;\n address_hint: string;\n}\n\n/**\n * The challenge given by the server is unsupported\n * by the current anastasis client.\n */\nexport interface ChallengeFeedbackUnsupported {\n state: ChallengeFeedbackStatus.Unsupported;\n\n /**\n * Human-readable identifier of the unsupported method.\n */\n unsupported_method: string;\n}\n\n/**\n * The user tried to answer too often with a wrong answer.\n */\nexport interface ChallengeFeedbackRateLimitExceeded {\n state: ChallengeFeedbackStatus.RateLimitExceeded;\n}\n\n/**\n * Instructions for performing authentication via an\n * IBAN bank transfer.\n */\nexport interface ChallengeFeedbackBankTransferRequired {\n state: ChallengeFeedbackStatus.IbanInstructions;\n\n /**\n * Amount that should be transferred for a successful authentication.\n */\n challenge_amount: AmountString;\n\n /**\n * Account that should be credited.\n */\n target_iban: string;\n\n /**\n * Creditor name.\n */\n target_business_name: string;\n\n /**\n * Unstructured remittance information that should\n * be contained in the bank transfer.\n */\n wire_transfer_subject: string;\n\n answer_code: number;\n}\n\n/**\n * The server experienced a temporary failure.\n */\nexport interface ChallengeFeedbackServerFailure {\n state: ChallengeFeedbackStatus.ServerFailure;\n http_status: HttpStatusCode | 0;\n\n /**\n * Taler-style error response, if available.\n */\n error_response?: any;\n}\n\n/**\n * The truth is unknown to the provider. There\n * is no reason to continue trying to solve any\n * challenges in the policy.\n */\nexport interface ChallengeFeedbackTruthUnknown {\n state: ChallengeFeedbackStatus.TruthUnknown;\n}\n\n/**\n * A payment is required before the user can\n * even attempt to solve the challenge.\n */\nexport interface ChallengeFeedbackTalerPaymentRequired {\n state: ChallengeFeedbackStatus.TalerPayment;\n\n taler_pay_uri: string;\n\n provider: string;\n\n /**\n * FIXME: Why is this required?!\n */\n payment_secret: string;\n}\n", "function isPrime(num: number): boolean {\n for (let i = 2, s = Math.sqrt(num); i <= s; i++)\n if (num % i === 0) return false;\n return num > 1;\n}\n\nexport function AL_NID_check(s: string): boolean { return true }\nexport function BE_NRN_check(s: string): boolean { return true }\nexport function CH_AHV_check(s: string): boolean { return true }\nexport function CZ_BN_check(s: string): boolean { return true }\nexport function DE_TIN_check(s: string): boolean { return true }\nexport function DE_SVN_check(s: string): boolean { return true }\nexport function ES_DNI_check(s: string): boolean { return true }\nexport function IN_AADHAR_check(s: string): boolean { return true }\nexport function IT_CF_check(s: string): boolean {\n return true\n}\n\nexport function XX_SQUARE_check(s: string): boolean {\n const n = parseInt(s, 10)\n const r = Math.sqrt(n)\n return n === r * r;\n}\nexport function XY_PRIME_check(s: string): boolean {\n const n = parseInt(s, 10)\n return isPrime(n)\n}\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\n/**\n * Imports.\n */\nimport {\n AmountJson,\n AmountLike,\n Amounts,\n AmountString,\n buildSigPS,\n bytesToString,\n Codec,\n codecForAny,\n decodeCrock,\n Duration,\n eddsaSign,\n encodeCrock,\n getRandomBytes,\n hash,\n HttpStatusCode,\n Logger,\n parsePayUri,\n stringToBytes,\n TalerErrorCode,\n TalerProtocolTimestamp,\n TalerSignaturePurpose,\n AbsoluteTime,\n URL,\n j2s,\n} from \"@gnu-taler/taler-util\";\nimport { HttpResponse } from \"@gnu-taler/taler-util/http\";\nimport { anastasisData } from \"./anastasis-data.js\";\nimport {\n codecForChallengeInstructionMessage,\n EscrowConfigurationResponse,\n RecoveryMetaResponse,\n TruthUploadRequest,\n} from \"./provider-types.js\";\nimport {\n ActionArgsAddAuthentication,\n ActionArgsDeleteAuthentication,\n ActionArgsDeletePolicy,\n ActionArgsEnterSecret,\n ActionArgsEnterSecretName,\n ActionArgsEnterUserAttributes,\n ActionArgsAddPolicy,\n ActionArgsSelectContinent,\n ActionArgsSelectCountry,\n ActionArgsSelectChallenge,\n ActionArgsSolveChallengeRequest,\n ActionArgsUpdateExpiration,\n AuthenticationProviderStatus,\n AuthenticationProviderStatusOk,\n AuthMethod,\n BackupStates,\n codecForActionArgsEnterUserAttributes,\n codecForActionArgsAddPolicy,\n codecForActionArgsSelectChallenge,\n codecForActionArgSelectContinent,\n codecForActionArgSelectCountry,\n codecForActionArgsUpdateExpiration,\n ContinentInfo,\n CountryInfo,\n RecoveryInformation,\n RecoveryInternalData,\n RecoveryStates,\n ReducerState,\n ReducerStateBackup,\n ReducerStateError,\n ReducerStateRecovery,\n SuccessDetails,\n codecForActionArgsChangeVersion,\n ActionArgsChangeVersion,\n TruthMetaData,\n ActionArgsUpdatePolicy,\n ActionArgsAddProvider,\n ActionArgsDeleteProvider,\n DiscoveryCursor,\n DiscoveryResult,\n PolicyMetaInfo,\n ChallengeInfo,\n AggregatedPolicyMetaInfo,\n AuthenticationProviderStatusMap,\n} from \"./reducer-types.js\";\nimport {\n accountKeypairDerive,\n asOpaque,\n coreSecretEncrypt,\n encryptKeyshare,\n encryptRecoveryDocument,\n encryptTruth,\n OpaqueData,\n PolicyKey,\n policyKeyDerive,\n PolicySalt,\n TruthSalt,\n secureAnswerHash,\n UserIdentifier,\n userIdentifierDerive,\n typedArrayConcat,\n decryptRecoveryDocument,\n decryptKeyShare,\n KeyShare,\n coreSecretRecover,\n pinAnswerHash,\n decryptPolicyMetadata,\n encryptPolicyMetadata,\n} from \"./crypto.js\";\nimport { unzlibSync, zlibSync } from \"fflate\";\nimport {\n ChallengeType,\n EscrowMethod,\n RecoveryDocument,\n} from \"./recovery-document-types.js\";\nimport { ProviderInfo, suggestPolicies } from \"./policy-suggestion.js\";\nimport {\n ChallengeFeedback,\n ChallengeFeedbackStatus,\n} from \"./challenge-feedback-types.js\";\n\nexport * from \"./reducer-types.js\";\nexport * as validators from \"./validators.js\";\nexport * from \"./challenge-feedback-types.js\";\n\nconst logger = new Logger(\"anastasis-core:index.ts\");\n\nconst ANASTASIS_HTTP_HEADER_POLICY_META_DATA = \"Anastasis-Policy-Meta-Data\";\n\nfunction getContinents(): ContinentInfo[] {\n const continentSet = new Set<string>();\n const continents: ContinentInfo[] = [];\n for (const country of anastasisData.countriesList.countries) {\n if (continentSet.has(country.continent)) {\n continue;\n }\n continentSet.add(country.continent);\n continents.push({\n ...{ name_i18n: country.continent_i18n },\n name: country.continent,\n });\n }\n return continents;\n}\n\ninterface ErrorDetails {\n code: TalerErrorCode;\n message?: string;\n hint?: string;\n}\n\nexport class ReducerError extends Error {\n constructor(public errorJson: ErrorDetails) {\n super(\n errorJson.message ??\n errorJson.hint ??\n `${TalerErrorCode[errorJson.code]}`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, ReducerError.prototype);\n }\n}\n\n/**\n * Get countries for a continent, abort with ReducerError\n * exception when continent doesn't exist.\n */\nfunction getCountries(continent: string): CountryInfo[] {\n const countries = anastasisData.countriesList.countries.filter(\n (x) => x.continent === continent,\n );\n if (countries.length <= 0) {\n throw new ReducerError({\n code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID,\n hint: `continent ${continent} not found`,\n });\n }\n return countries;\n}\n\nexport async function getBackupStartState(): Promise<ReducerStateBackup> {\n return {\n reducer_type: \"backup\",\n backup_state: BackupStates.ContinentSelecting,\n continents: getContinents(),\n };\n}\n\nexport async function getRecoveryStartState(): Promise<ReducerStateRecovery> {\n return {\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ContinentSelecting,\n continents: getContinents(),\n };\n}\n\nasync function selectCountry(\n selectedContinent: string,\n args: ActionArgsSelectCountry,\n): Promise<Partial<ReducerStateBackup> & Partial<ReducerStateRecovery>> {\n const countryCode = args.country_code;\n const country = anastasisData.countriesList.countries.find(\n (x) => x.code === countryCode,\n );\n if (!country) {\n throw new ReducerError({\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: \"invalid country selected\",\n });\n }\n\n if (country.continent !== selectedContinent) {\n throw new ReducerError({\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: \"selected country is not in selected continent\",\n });\n }\n\n const providers: { [x: string]: AuthenticationProviderStatus } = {};\n for (const prov of anastasisData.providersList.anastasis_provider) {\n let shouldAdd =\n country.code === prov.restricted ||\n (country.code !== \"xx\" && !prov.restricted);\n if (shouldAdd) {\n providers[prov.url] = {\n status: \"not-contacted\",\n };\n }\n }\n\n const ra = (anastasisData.countryDetails as any)[countryCode]\n .required_attributes;\n\n return {\n selected_country: countryCode,\n required_attributes: ra,\n authentication_providers: providers,\n };\n}\n\nasync function backupSelectCountry(\n state: ReducerStateBackup,\n args: ActionArgsSelectCountry,\n): Promise<ReducerStateError | ReducerStateBackup> {\n return {\n ...state,\n ...(await selectCountry(state.selected_continent!, args)),\n backup_state: BackupStates.UserAttributesCollecting,\n };\n}\n\nasync function recoverySelectCountry(\n state: ReducerStateRecovery,\n args: ActionArgsSelectCountry,\n): Promise<ReducerStateError | ReducerStateRecovery> {\n return {\n ...state,\n recovery_state: RecoveryStates.UserAttributesCollecting,\n ...(await selectCountry(state.selected_continent!, args)),\n };\n}\n\nasync function getProviderInfo(\n providerBaseUrl: string,\n): Promise<AuthenticationProviderStatus> {\n // FIXME: Use a reasonable timeout here.\n let resp: Response;\n try {\n resp = await fetch(new URL(\"config\", providerBaseUrl).href);\n } catch (e) {\n console.warn(\n \"Encountered an HTTP error whilst trying to get the provider's config: \",\n e,\n );\n return {\n status: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: \"request to anastasis provider failed\",\n };\n }\n if (!resp.ok) {\n console.warn(\"Got bad response code whilst getting provider config\", resp);\n return {\n status: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: \"unexpected status\",\n http_status: resp.status,\n };\n }\n try {\n const jsonResp: EscrowConfigurationResponse = await resp.json();\n if (!jsonResp.provider_salt) {\n return {\n status: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_PROVIDER_CONFIG_FAILED,\n hint: \"provider did not have provider salt\",\n };\n }\n return {\n status: \"ok\",\n http_status: 200,\n annual_fee: jsonResp.annual_fee,\n business_name: jsonResp.business_name,\n currency: jsonResp.currency,\n liability_limit: jsonResp.liability_limit,\n methods: jsonResp.methods.map((x) => ({\n type: x.type,\n usage_fee: x.cost,\n })),\n provider_salt: jsonResp.provider_salt,\n storage_limit_in_megabytes: jsonResp.storage_limit_in_megabytes,\n truth_upload_fee: jsonResp.truth_upload_fee,\n };\n } catch (e) {\n return {\n status: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: \"provider did not return JSON\",\n };\n }\n}\n\nasync function backupEnterUserAttributes(\n state: ReducerStateBackup,\n args: ActionArgsEnterUserAttributes,\n): Promise<ReducerStateBackup> {\n const attributes = args.identity_attributes;\n const newState = {\n ...state,\n backup_state: BackupStates.AuthenticationsEditing,\n identity_attributes: attributes,\n };\n return newState;\n}\n\nasync function getTruthValue(\n authMethod: AuthMethod,\n truthUuid: string,\n questionSalt: TruthSalt,\n): Promise<OpaqueData> {\n switch (authMethod.type) {\n case \"question\": {\n return asOpaque(\n await secureAnswerHash(\n bytesToString(decodeCrock(authMethod.challenge)),\n truthUuid,\n questionSalt,\n ),\n );\n }\n case \"sms\":\n case \"email\":\n case \"totp\":\n case \"iban\":\n case \"post\":\n return authMethod.challenge;\n default:\n throw Error(`unknown auth type '${authMethod.type}'`);\n }\n}\n\n/**\n * Compress the recovery document and add a size header.\n */\nasync function compressRecoveryDoc(rd: any): Promise<Uint8Array> {\n const docBytes = stringToBytes(JSON.stringify(rd));\n const sizeHeaderBuf = new ArrayBuffer(4);\n const dvbuf = new DataView(sizeHeaderBuf);\n dvbuf.setUint32(0, docBytes.length, false);\n const zippedDoc = zlibSync(docBytes);\n return typedArrayConcat([new Uint8Array(sizeHeaderBuf), zippedDoc]);\n}\n\nasync function uncompressRecoveryDoc(zippedRd: Uint8Array): Promise<any> {\n const header = zippedRd.slice(0, 4);\n const data = zippedRd.slice(4);\n const res = unzlibSync(data);\n return JSON.parse(bytesToString(res));\n}\n\n/**\n * Prepare the recovery document and truth metadata based\n * on the selected policies.\n */\nasync function prepareRecoveryData(\n state: ReducerStateBackup,\n): Promise<ReducerStateBackup> {\n const policies = state.policies!;\n const secretName = state.secret_name!;\n const coreSecret: OpaqueData = encodeCrock(\n stringToBytes(JSON.stringify(state.core_secret!)),\n );\n\n // Truth key is `${methodIndex}/${providerUrl}`\n const truthMetadataMap: Record<string, TruthMetaData> = {};\n\n const policyKeys: PolicyKey[] = [];\n const policySalts: PolicySalt[] = [];\n // truth UUIDs for every policy.\n const policyUuids: string[][] = [];\n\n for (let policyIndex = 0; policyIndex < policies.length; policyIndex++) {\n const pol = policies[policyIndex];\n const policySalt = encodeCrock(getRandomBytes(64));\n const keyShares: string[] = [];\n const methUuids: string[] = [];\n for (let methIndex = 0; methIndex < pol.methods.length; methIndex++) {\n const meth = pol.methods[methIndex];\n const truthReference = `${meth.authentication_method}:${meth.provider}`;\n let tm = truthMetadataMap[truthReference];\n if (!tm) {\n tm = {\n key_share: encodeCrock(getRandomBytes(32)),\n nonce: encodeCrock(getRandomBytes(24)),\n master_salt: encodeCrock(getRandomBytes(16)),\n truth_key: encodeCrock(getRandomBytes(64)),\n uuid: encodeCrock(getRandomBytes(32)),\n pol_method_index: methIndex,\n policy_index: policyIndex,\n };\n truthMetadataMap[truthReference] = tm;\n }\n keyShares.push(tm.key_share);\n methUuids.push(tm.uuid);\n }\n const policyKey = await policyKeyDerive(keyShares, policySalt);\n policyUuids.push(methUuids);\n policyKeys.push(policyKey);\n policySalts.push(policySalt);\n }\n\n const csr = await coreSecretEncrypt(policyKeys, coreSecret);\n\n const escrowMethods: EscrowMethod[] = [];\n\n for (const truthKey of Object.keys(truthMetadataMap)) {\n const tm = truthMetadataMap[truthKey];\n const pol = state.policies![tm.policy_index];\n const meth = pol.methods[tm.pol_method_index];\n const authMethod =\n state.authentication_methods![meth.authentication_method];\n const provider = state.authentication_providers![\n meth.provider\n ] as AuthenticationProviderStatusOk;\n escrowMethods.push({\n escrow_type: authMethod.type as any,\n instructions: authMethod.instructions,\n provider_salt: provider.provider_salt,\n question_salt: tm.master_salt,\n truth_key: tm.truth_key,\n url: meth.provider,\n uuid: tm.uuid,\n });\n }\n\n const rd: RecoveryDocument = {\n secret_name: secretName,\n encrypted_core_secret: csr.encCoreSecret,\n escrow_methods: escrowMethods,\n policies: policies.map((x, i) => {\n return {\n master_key: csr.encMasterKeys[i],\n uuids: policyUuids[i],\n salt: policySalts[i],\n };\n }),\n };\n\n return {\n ...state,\n recovery_data: {\n recovery_document: rd,\n truth_metadata: truthMetadataMap,\n },\n };\n}\n\nasync function uploadSecret(\n state: ReducerStateBackup,\n): Promise<ReducerStateBackup | ReducerStateError> {\n if (!state.recovery_data) {\n state = await prepareRecoveryData(state);\n }\n\n const recoveryData = state.recovery_data;\n if (!recoveryData) {\n throw Error(\"invariant failed\");\n }\n\n const truthMetadataMap = recoveryData.truth_metadata;\n const rd = recoveryData.recovery_document;\n\n const truthPayUris: string[] = [];\n const truthPaySecrets: Record<string, string> = {};\n\n const userIdCache: Record<string, UserIdentifier> = {};\n const getUserIdCaching = async (providerUrl: string) => {\n let userId = userIdCache[providerUrl];\n if (!userId) {\n const provider = state.authentication_providers![\n providerUrl\n ] as AuthenticationProviderStatusOk;\n userId = userIdCache[providerUrl] = await userIdentifierDerive(\n state.identity_attributes!,\n provider.provider_salt,\n );\n }\n return userId;\n };\n for (const truthKey of Object.keys(truthMetadataMap)) {\n const tm = truthMetadataMap[truthKey];\n const pol = state.policies![tm.policy_index];\n const meth = pol.methods[tm.pol_method_index];\n const authMethod =\n state.authentication_methods![meth.authentication_method];\n const truthValue = await getTruthValue(authMethod, tm.uuid, tm.master_salt);\n const encryptedTruth = await encryptTruth(\n tm.nonce,\n tm.truth_key,\n truthValue,\n );\n logger.info(`uploading truth to ${meth.provider}`);\n const userId = await getUserIdCaching(meth.provider);\n const encryptedKeyShare = await encryptKeyshare(\n tm.key_share,\n userId,\n authMethod.type === \"question\"\n ? bytesToString(decodeCrock(authMethod.challenge))\n : undefined,\n );\n const tur: TruthUploadRequest = {\n encrypted_truth: encryptedTruth,\n key_share_data: encryptedKeyShare,\n storage_duration_years: 5 /* FIXME */,\n type: authMethod.type,\n truth_mime: authMethod.mime_type,\n };\n const reqUrl = new URL(`truth/${tm.uuid}`, meth.provider);\n const paySecret = (state.truth_upload_payment_secrets ?? {})[meth.provider];\n if (paySecret) {\n // FIXME: Get this from the params\n reqUrl.searchParams.set(\"timeout_ms\", \"500\");\n }\n const resp = await fetch(reqUrl.href, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(paySecret\n ? {\n \"Anastasis-Payment-Identifier\": paySecret,\n }\n : {}),\n },\n body: JSON.stringify(tur),\n });\n\n if (resp.status === HttpStatusCode.NoContent) {\n continue;\n }\n if (resp.status === HttpStatusCode.PaymentRequired) {\n const talerPayUri = resp.headers.get(\"Taler\");\n if (!talerPayUri) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE,\n hint: `payment requested, but no taler://pay URI given`,\n };\n }\n truthPayUris.push(talerPayUri);\n const parsedUri = parsePayUri(talerPayUri);\n if (!parsedUri) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE,\n hint: `payment requested, but no taler://pay URI given`,\n };\n }\n truthPaySecrets[meth.provider] = parsedUri.orderId;\n continue;\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: `could not upload truth (HTTP status ${resp.status})`,\n };\n }\n\n if (truthPayUris.length > 0) {\n return {\n ...state,\n backup_state: BackupStates.TruthsPaying,\n truth_upload_payment_secrets: truthPaySecrets,\n payments: truthPayUris,\n };\n }\n\n const successDetails: SuccessDetails = {};\n\n const policyPayUris: string[] = [];\n const policyPayUriMap: Record<string, string> = {};\n //const policyPaySecrets: Record<string, string> = {};\n\n for (const prov of state.policy_providers!) {\n const userId = await getUserIdCaching(prov.provider_url);\n const acctKeypair = accountKeypairDerive(userId);\n const zippedDoc = await compressRecoveryDoc(rd);\n const recoveryDocHash = encodeCrock(hash(zippedDoc));\n const encRecoveryDoc = await encryptRecoveryDocument(\n userId,\n encodeCrock(zippedDoc),\n );\n const bodyHash = hash(decodeCrock(encRecoveryDoc));\n const sigPS = buildSigPS(TalerSignaturePurpose.ANASTASIS_POLICY_UPLOAD)\n .put(bodyHash)\n .build();\n const sig = eddsaSign(sigPS, decodeCrock(acctKeypair.priv));\n const metadataEnc = await encryptPolicyMetadata(userId, {\n policy_hash: recoveryDocHash,\n secret_name: state.secret_name ?? \"<unnamed secret>\",\n });\n const talerPayUri = state.policy_payment_requests?.find(\n (x) => x.provider === prov.provider_url,\n )?.payto;\n let paySecret: string | undefined;\n if (talerPayUri) {\n paySecret = parsePayUri(talerPayUri)!.orderId;\n }\n const reqUrl = new URL(`policy/${acctKeypair.pub}`, prov.provider_url);\n if (paySecret) {\n // FIXME: Get this from the params\n reqUrl.searchParams.set(\"timeout_ms\", \"500\");\n }\n logger.info(`uploading policy to ${prov.provider_url}`);\n const resp = await fetch(reqUrl.href, {\n method: \"POST\",\n headers: {\n \"Anastasis-Policy-Signature\": encodeCrock(sig),\n \"If-None-Match\": JSON.stringify(encodeCrock(bodyHash)),\n [ANASTASIS_HTTP_HEADER_POLICY_META_DATA]: metadataEnc,\n ...(paySecret\n ? {\n \"Anastasis-Payment-Identifier\": paySecret,\n }\n : {}),\n },\n body: decodeCrock(encRecoveryDoc),\n });\n logger.info(`got response for policy upload (http status ${resp.status})`);\n if (resp.status === HttpStatusCode.NoContent) {\n let policyVersion = 0;\n let policyExpiration: TalerProtocolTimestamp = { t_s: 0 };\n try {\n policyVersion = Number(resp.headers.get(\"Anastasis-Version\") ?? \"0\");\n } catch (e) {}\n try {\n policyExpiration = {\n t_s: Number(resp.headers.get(\"Anastasis-Policy-Expiration\") ?? \"0\"),\n };\n } catch (e) {}\n successDetails[prov.provider_url] = {\n policy_version: policyVersion,\n policy_expiration: policyExpiration,\n };\n continue;\n }\n if (resp.status === HttpStatusCode.PaymentRequired) {\n const talerPayUri = resp.headers.get(\"Taler\");\n if (!talerPayUri) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE,\n hint: `payment requested, but no taler://pay URI given`,\n };\n }\n policyPayUris.push(talerPayUri);\n const parsedUri = parsePayUri(talerPayUri);\n if (!parsedUri) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE,\n hint: `payment requested, but no taler://pay URI given`,\n };\n }\n policyPayUriMap[prov.provider_url] = talerPayUri;\n continue;\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: `could not upload policy (http status ${resp.status})`,\n };\n }\n\n if (policyPayUris.length > 0) {\n return {\n ...state,\n backup_state: BackupStates.PoliciesPaying,\n payments: policyPayUris,\n policy_payment_requests: Object.keys(policyPayUriMap).map((x) => {\n return {\n payto: policyPayUriMap[x],\n provider: x,\n };\n }),\n };\n }\n\n logger.info(\"backup finished\");\n\n return {\n ...state,\n core_secret: undefined,\n backup_state: BackupStates.BackupFinished,\n success_details: successDetails,\n payments: undefined,\n };\n}\n\ninterface PolicyDownloadResult {\n recoveryDoc: RecoveryDocument;\n recoveryData: RecoveryInternalData;\n}\n\nasync function downloadPolicyFromProvider(\n state: ReducerStateRecovery,\n providerUrl: string,\n version: number,\n): Promise<PolicyDownloadResult | undefined> {\n logger.info(`trying to download policy from ${providerUrl}`);\n const userAttributes = state.identity_attributes!;\n let pi = state.authentication_providers?.[providerUrl];\n if (!pi || pi.status !== \"ok\") {\n // FIXME: this one blocks!\n logger.info(`fetching provider info for ${providerUrl}`);\n pi = await getProviderInfo(providerUrl);\n }\n logger.info(`new provider status is ${pi.status}`);\n if (pi.status !== \"ok\") {\n return undefined;\n }\n const userId = await userIdentifierDerive(userAttributes, pi.provider_salt);\n const acctKeypair = accountKeypairDerive(userId);\n const reqUrl = new URL(`policy/${acctKeypair.pub}`, providerUrl);\n reqUrl.searchParams.set(\"version\", `${version}`);\n const resp = await fetch(reqUrl.href);\n if (resp.status !== 200) {\n logger.info(\n `Could not download policy from provider ${providerUrl}, status ${resp.status}`,\n );\n return undefined;\n }\n const body = await resp.arrayBuffer();\n const bodyDecrypted = await decryptRecoveryDocument(\n userId,\n encodeCrock(body),\n );\n const rd: RecoveryDocument = await uncompressRecoveryDoc(\n decodeCrock(bodyDecrypted),\n );\n // FIXME: Not clear why we do this, since we always have an explicit version by now.\n let policyVersion = 0;\n try {\n policyVersion = Number(resp.headers.get(\"Anastasis-Version\") ?? \"0\");\n } catch (e) {\n logger.warn(\"Could not read policy version header\");\n policyVersion = version;\n }\n return {\n recoveryDoc: rd,\n recoveryData: {\n provider_url: providerUrl,\n secret_name: rd.secret_name ?? \"<unknown>\",\n version: policyVersion,\n },\n };\n}\n\n/**\n * Download policy based on current user attributes and selected\n * version in the state.\n */\nasync function downloadPolicy(\n state: ReducerStateRecovery,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n logger.info(\"downloading policy\");\n if (!state.selected_version) {\n throw Error(\"invalid state\");\n }\n let policyDownloadResult: PolicyDownloadResult | undefined = undefined;\n // FIXME: Do this concurrently/asynchronously so that one slow provider doesn't block us.\n for (const prov of state.selected_version.providers) {\n const res = await downloadPolicyFromProvider(state, prov.url, prov.version);\n if (res) {\n policyDownloadResult = res;\n break;\n }\n }\n if (!policyDownloadResult) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_POLICY_LOOKUP_FAILED,\n hint: \"No backups found at any provider for your identity information.\",\n };\n }\n\n const challenges: ChallengeInfo[] = [];\n const recoveryDoc = policyDownloadResult.recoveryDoc;\n\n for (const x of recoveryDoc.escrow_methods) {\n challenges.push({\n instructions: x.instructions,\n type: x.escrow_type,\n uuid: x.uuid,\n });\n }\n\n const recoveryInfo: RecoveryInformation = {\n challenges,\n policies: recoveryDoc.policies.map((x) => {\n return x.uuids.map((m) => {\n return {\n uuid: m,\n };\n });\n }),\n };\n return {\n ...state,\n recovery_state: RecoveryStates.ChallengeSelecting,\n recovery_document: policyDownloadResult.recoveryData,\n recovery_information: recoveryInfo,\n verbatim_recovery_document: recoveryDoc,\n };\n}\n\n/**\n * Try to reconstruct the secret from the available shares.\n *\n * Returns the state unmodified if not enough key shares are available yet.\n */\nasync function tryRecoverSecret(\n state: ReducerStateRecovery,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const rd = state.verbatim_recovery_document!;\n for (const p of rd.policies) {\n const keyShares: KeyShare[] = [];\n let missing = false;\n for (const truthUuid of p.uuids) {\n const ks = (state.recovered_key_shares ?? {})[truthUuid];\n if (!ks) {\n missing = true;\n break;\n }\n keyShares.push(ks);\n }\n\n if (missing) {\n continue;\n }\n\n const policyKey = await policyKeyDerive(keyShares, p.salt);\n const coreSecretBytes = await coreSecretRecover({\n encryptedCoreSecret: rd.encrypted_core_secret,\n encryptedMasterKey: p.master_key,\n policyKey,\n });\n\n return {\n ...state,\n recovery_state: RecoveryStates.RecoveryFinished,\n selected_challenge_uuid: undefined,\n core_secret: JSON.parse(bytesToString(decodeCrock(coreSecretBytes))),\n };\n }\n return { ...state };\n}\n\n/**\n * Re-check the status of challenges that are solved asynchronously.\n */\nasync function pollChallenges(\n state: ReducerStateRecovery,\n args: void,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n for (const truthUuid in state.challenge_feedback) {\n if (state.recovery_state === RecoveryStates.RecoveryFinished) {\n break;\n }\n const feedback = state.challenge_feedback[truthUuid];\n const truth = state.verbatim_recovery_document!.escrow_methods.find(\n (x) => x.uuid === truthUuid,\n );\n if (!truth) {\n logger.warn(\n \"truth for challenge feedback entry not found in recovery document\",\n );\n continue;\n }\n if (feedback.state === ChallengeFeedbackStatus.IbanInstructions) {\n const s2 = await requestTruth(state, truth, {\n pin: feedback.answer_code,\n });\n if (s2.reducer_type === \"recovery\") {\n state = s2;\n }\n }\n }\n return state;\n}\n\nasync function getResponseHash(\n truth: EscrowMethod,\n solveRequest: ActionArgsSolveChallengeRequest,\n): Promise<string> {\n let respHash: string;\n switch (truth.escrow_type) {\n case ChallengeType.Question: {\n if (\"answer\" in solveRequest) {\n respHash = await secureAnswerHash(\n solveRequest.answer,\n truth.uuid,\n truth.question_salt,\n );\n } else {\n throw Error(\"unsupported answer request\");\n }\n break;\n }\n case ChallengeType.Email:\n case ChallengeType.Sms:\n case ChallengeType.Post:\n case ChallengeType.Iban:\n case ChallengeType.Totp: {\n if (\"answer\" in solveRequest) {\n const s = solveRequest.answer.trim().replace(/^A-/, \"\");\n let pin: number;\n try {\n pin = Number.parseInt(s);\n } catch (e) {\n throw Error(\"invalid pin format\");\n }\n respHash = await pinAnswerHash(pin);\n } else if (\"pin\" in solveRequest) {\n respHash = await pinAnswerHash(solveRequest.pin);\n } else {\n throw Error(\"unsupported answer request\");\n }\n break;\n }\n default:\n throw Error(`unsupported challenge type \"${truth.escrow_type}\"\"`);\n }\n return respHash;\n}\n\n/**\n * Request a truth, optionally with a challenge solution\n * provided by the user.\n */\nasync function requestTruth(\n state: ReducerStateRecovery,\n truth: EscrowMethod,\n solveRequest: ActionArgsSolveChallengeRequest,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const url = new URL(`/truth/${truth.uuid}/solve`, truth.url);\n\n const hresp = await getResponseHash(truth, solveRequest);\n\n let resp: Response;\n\n try {\n resp = await fetch(url.href, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n truth_decryption_key: truth.truth_key,\n h_response: hresp,\n }),\n });\n } catch (e) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED,\n hint: \"network error\",\n } as ReducerStateError;\n }\n\n logger.info(\n `got POST /truth/.../solve response from ${truth.url}, http status ${resp.status}`,\n );\n\n if (resp.status === HttpStatusCode.Ok) {\n let answerSalt: string | undefined = undefined;\n if (\n solveRequest &&\n truth.escrow_type === \"question\" &&\n \"answer\" in solveRequest\n ) {\n answerSalt = solveRequest.answer;\n }\n\n const userId = await userIdentifierDerive(\n state.identity_attributes,\n truth.provider_salt,\n );\n\n const respBody = new Uint8Array(await resp.arrayBuffer());\n const keyShare = await decryptKeyShare(\n encodeCrock(respBody),\n userId,\n answerSalt,\n );\n\n const recoveredKeyShares = {\n ...(state.recovered_key_shares ?? {}),\n [truth.uuid]: keyShare,\n };\n\n const challengeFeedback: { [x: string]: ChallengeFeedback } = {\n ...state.challenge_feedback,\n [truth.uuid]: {\n state: ChallengeFeedbackStatus.Solved,\n },\n };\n\n const newState: ReducerStateRecovery = {\n ...state,\n recovery_state: RecoveryStates.ChallengeSelecting,\n challenge_feedback: challengeFeedback,\n recovered_key_shares: recoveredKeyShares,\n };\n\n return tryRecoverSecret(newState);\n }\n\n if (resp.status === HttpStatusCode.Forbidden) {\n const challengeFeedback: { [x: string]: ChallengeFeedback } = {\n ...state.challenge_feedback,\n [truth.uuid]: {\n state: ChallengeFeedbackStatus.IncorrectAnswer,\n },\n };\n return {\n ...state,\n challenge_feedback: challengeFeedback,\n };\n }\n\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED,\n hint: \"got unexpected /truth/ response status\",\n http_status: resp.status,\n } as ReducerStateError;\n}\n\nasync function solveChallenge(\n state: ReducerStateRecovery,\n ta: ActionArgsSolveChallengeRequest,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const recDoc: RecoveryDocument = state.verbatim_recovery_document!;\n const truth = recDoc.escrow_methods.find(\n (x) => x.uuid === state.selected_challenge_uuid,\n );\n if (!truth) {\n throw Error(\"truth for challenge not found\");\n }\n\n return requestTruth(state, truth, ta);\n}\n\nasync function recoveryEnterUserAttributes(\n state: ReducerStateRecovery,\n args: ActionArgsEnterUserAttributes,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n // FIXME: validate attributes\n const st: ReducerStateRecovery = {\n ...state,\n recovery_state: RecoveryStates.SecretSelecting,\n identity_attributes: args.identity_attributes,\n };\n return st;\n}\n\nasync function changeVersion(\n state: ReducerStateRecovery,\n args: ActionArgsChangeVersion,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const st: ReducerStateRecovery = {\n ...state,\n selected_version: args,\n };\n return downloadPolicy(st);\n}\n\nasync function selectChallenge(\n state: ReducerStateRecovery,\n ta: ActionArgsSelectChallenge,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const recDoc: RecoveryDocument = state.verbatim_recovery_document!;\n const truth = recDoc.escrow_methods.find((x) => x.uuid === ta.uuid);\n if (!truth) {\n throw \"truth for challenge not found\";\n }\n\n const url = new URL(`/truth/${truth.uuid}/challenge`, truth.url);\n\n const newFeedback = { ...state.challenge_feedback };\n delete newFeedback[truth.uuid];\n\n switch (truth.escrow_type) {\n case ChallengeType.Question:\n case ChallengeType.Totp: {\n return {\n ...state,\n recovery_state: RecoveryStates.ChallengeSolving,\n selected_challenge_uuid: truth.uuid,\n challenge_feedback: newFeedback,\n };\n }\n }\n\n let resp: Response;\n\n try {\n resp = await fetch(url.href, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n truth_decryption_key: truth.truth_key,\n }),\n });\n } catch (e) {\n const feedback: ChallengeFeedback = {\n state: ChallengeFeedbackStatus.ServerFailure,\n http_status: 0,\n };\n return {\n ...state,\n recovery_state: RecoveryStates.ChallengeSelecting,\n selected_challenge_uuid: truth.uuid,\n challenge_feedback: {\n ...state.challenge_feedback,\n [truth.uuid]: feedback,\n },\n };\n }\n\n logger.info(\n `got GET /truth/.../challenge response from ${truth.url}, http status ${resp.status}`,\n );\n\n if (resp.status === HttpStatusCode.Ok) {\n const respBodyJson = await resp.json();\n logger.info(`validating ${j2s(respBodyJson)}`);\n const instr = codecForChallengeInstructionMessage().decode(respBodyJson);\n let feedback: ChallengeFeedback;\n switch (instr.challenge_type) {\n case \"FILE_WRITTEN\": {\n feedback = {\n state: ChallengeFeedbackStatus.CodeInFile,\n display_hint: \"TAN code is in file (for debugging)\",\n filename: instr.filename,\n };\n break;\n }\n case \"IBAN_WIRE\": {\n feedback = {\n state: ChallengeFeedbackStatus.IbanInstructions,\n answer_code: instr.wire_details.answer_code,\n target_business_name: instr.wire_details.business_name,\n challenge_amount: instr.wire_details.challenge_amount,\n target_iban: instr.wire_details.credit_iban,\n wire_transfer_subject: instr.wire_details.wire_transfer_subject,\n };\n break;\n }\n case \"TAN_SENT\": {\n feedback = {\n state: ChallengeFeedbackStatus.CodeSent,\n address_hint: instr.tan_address_hint,\n display_hint: \"Code sent to address\",\n };\n }\n }\n return {\n ...state,\n recovery_state: RecoveryStates.ChallengeSolving,\n selected_challenge_uuid: truth.uuid,\n challenge_feedback: {\n ...state.challenge_feedback,\n [truth.uuid]: feedback,\n },\n };\n }\n\n // FIXME: look at more error codes in response\n\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED,\n hint: `got unexpected /truth/.../challenge response status (${resp.status})`,\n http_status: resp.status,\n } as ReducerStateError;\n}\n\nasync function backupSelectContinent(\n state: ReducerStateBackup,\n args: ActionArgsSelectContinent,\n): Promise<ReducerStateBackup | ReducerStateError> {\n const countries = getCountries(args.continent);\n if (countries.length <= 0) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID,\n hint: \"continent not found\",\n };\n }\n return {\n ...state,\n backup_state: BackupStates.CountrySelecting,\n countries,\n selected_continent: args.continent,\n };\n}\n\nasync function recoverySelectContinent(\n state: ReducerStateRecovery,\n args: ActionArgsSelectContinent,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const countries = getCountries(args.continent);\n return {\n ...state,\n recovery_state: RecoveryStates.CountrySelecting,\n countries,\n selected_continent: args.continent,\n };\n}\n\ninterface TransitionImpl<S, T> {\n argCodec: Codec<T>;\n handler: (s: S, args: T) => Promise<S | ReducerStateError>;\n}\n\ninterface Transition<S> {\n [x: string]: TransitionImpl<S, any>;\n}\n\nfunction transition<S, T>(\n action: string,\n argCodec: Codec<T>,\n handler: (s: S, args: T) => Promise<S | ReducerStateError>,\n): Transition<S> {\n return {\n [action]: {\n argCodec,\n handler,\n },\n };\n}\n\nfunction transitionBackupJump(\n action: string,\n st: BackupStates,\n): Transition<ReducerStateBackup> {\n return {\n [action]: {\n argCodec: codecForAny(),\n handler: async (s, a) => ({ ...s, backup_state: st }),\n },\n };\n}\n\nfunction transitionRecoveryJump(\n action: string,\n st: RecoveryStates,\n): Transition<ReducerStateRecovery> {\n return {\n [action]: {\n argCodec: codecForAny(),\n handler: async (s, a) => ({ ...s, recovery_state: st }),\n },\n };\n}\n\nasync function addProviderBackup(\n state: ReducerStateBackup,\n args: ActionArgsAddProvider,\n): Promise<ReducerStateBackup> {\n const info = await getProviderInfo(args.provider_url);\n return {\n ...state,\n authentication_providers: {\n ...(state.authentication_providers ?? {}),\n [args.provider_url]: info,\n },\n };\n}\n\nasync function deleteProviderBackup(\n state: ReducerStateBackup,\n args: ActionArgsDeleteProvider,\n): Promise<ReducerStateBackup> {\n const authentication_providers = {\n ...(state.authentication_providers ?? {}),\n };\n delete authentication_providers[args.provider_url];\n return {\n ...state,\n authentication_providers,\n };\n}\n\nasync function addProviderRecovery(\n state: ReducerStateRecovery,\n args: ActionArgsAddProvider,\n): Promise<ReducerStateRecovery> {\n const info = await getProviderInfo(args.provider_url);\n return {\n ...state,\n authentication_providers: {\n ...(state.authentication_providers ?? {}),\n [args.provider_url]: info,\n },\n };\n}\n\nasync function deleteProviderRecovery(\n state: ReducerStateRecovery,\n args: ActionArgsDeleteProvider,\n): Promise<ReducerStateRecovery> {\n const authentication_providers = {\n ...(state.authentication_providers ?? {}),\n };\n delete authentication_providers[args.provider_url];\n return {\n ...state,\n authentication_providers,\n };\n}\n\nasync function addAuthentication(\n state: ReducerStateBackup,\n args: ActionArgsAddAuthentication,\n): Promise<ReducerStateBackup> {\n return {\n ...state,\n authentication_methods: [\n ...(state.authentication_methods ?? []),\n args.authentication_method,\n ],\n };\n}\n\nasync function deleteAuthentication(\n state: ReducerStateBackup,\n args: ActionArgsDeleteAuthentication,\n): Promise<ReducerStateBackup> {\n const m = state.authentication_methods ?? [];\n m.splice(args.authentication_method, 1);\n return {\n ...state,\n authentication_methods: m,\n };\n}\n\nasync function deletePolicy(\n state: ReducerStateBackup,\n args: ActionArgsDeletePolicy,\n): Promise<ReducerStateBackup> {\n const policies = [...(state.policies ?? [])];\n policies.splice(args.policy_index, 1);\n return {\n ...state,\n policies,\n };\n}\n\nasync function updatePolicy(\n state: ReducerStateBackup,\n args: ActionArgsUpdatePolicy,\n): Promise<ReducerStateBackup> {\n const policies = [...(state.policies ?? [])];\n policies[args.policy_index] = { methods: args.policy };\n return {\n ...state,\n policies,\n };\n}\n\nasync function addPolicy(\n state: ReducerStateBackup,\n args: ActionArgsAddPolicy,\n): Promise<ReducerStateBackup> {\n return {\n ...state,\n policies: [\n ...(state.policies ?? []),\n {\n methods: args.policy,\n },\n ],\n };\n}\n\nasync function nextFromAuthenticationsEditing(\n state: ReducerStateBackup,\n args: {},\n): Promise<ReducerStateBackup | ReducerStateError> {\n const methods = state.authentication_methods ?? [];\n const providers: ProviderInfo[] = [];\n for (const provUrl of Object.keys(state.authentication_providers ?? {})) {\n const prov = state.authentication_providers![provUrl];\n if (prov.status !== \"ok\") {\n continue;\n }\n const methodCost: Record<string, AmountString> = {};\n for (const meth of prov.methods) {\n methodCost[meth.type] = meth.usage_fee;\n }\n providers.push({\n methodCost,\n url: provUrl,\n });\n }\n const pol = suggestPolicies(methods, providers);\n if (pol.policies.length === 0) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n detail:\n \"Unable to suggest any policies. Check if providers are available and reachable.\",\n };\n }\n return {\n ...state,\n backup_state: BackupStates.PoliciesReviewing,\n ...pol,\n };\n}\n\nasync function updateUploadFees(\n state: ReducerStateBackup,\n): Promise<ReducerStateBackup | ReducerStateError> {\n const expiration = state.expiration;\n if (!expiration) {\n return { ...state };\n }\n logger.info(\"updating upload fees\");\n const feePerCurrency: Record<string, AmountJson> = {};\n const addFee = (x: AmountLike) => {\n x = Amounts.jsonifyAmount(x);\n feePerCurrency[x.currency] = Amounts.add(\n feePerCurrency[x.currency] ?? Amounts.zeroOfAmount(x),\n x,\n ).amount;\n };\n const expirationTime = AbsoluteTime.fromProtocolTimestamp(expiration);\n const years = Duration.toIntegerYears(Duration.getRemaining(expirationTime));\n logger.info(`computing fees for ${years} years`);\n // For now, we compute fees for *all* available providers.\n for (const provUrl in state.authentication_providers ?? {}) {\n const prov = state.authentication_providers![provUrl];\n if (\"annual_fee\" in prov) {\n const annualFee = Amounts.mult(prov.annual_fee, years).amount;\n logger.info(`adding annual fee ${Amounts.stringify(annualFee)}`);\n addFee(annualFee);\n }\n }\n const coveredProvTruth = new Set<string>();\n for (const x of state.policies ?? []) {\n for (const m of x.methods) {\n const prov = state.authentication_providers![\n m.provider\n ] as AuthenticationProviderStatusOk;\n const authMethod = state.authentication_methods![m.authentication_method];\n const key = `${m.authentication_method}@${m.provider}`;\n if (coveredProvTruth.has(key)) {\n continue;\n }\n logger.info(\n `adding cost for auth method ${authMethod.challenge} / \"${authMethod.instructions}\" at ${m.provider}`,\n );\n coveredProvTruth.add(key);\n addFee(prov.truth_upload_fee);\n }\n }\n return {\n ...state,\n upload_fees: Object.values(feePerCurrency).map((x) => ({\n fee: Amounts.stringify(x),\n })),\n };\n}\n\nasync function enterSecret(\n state: ReducerStateBackup,\n args: ActionArgsEnterSecret,\n): Promise<ReducerStateBackup | ReducerStateError> {\n return updateUploadFees({\n ...state,\n expiration: args.expiration,\n core_secret: {\n mime: args.secret.mime ?? \"text/plain\",\n value: args.secret.value,\n filename: args.secret.filename,\n },\n // A new secret invalidates the existing recovery data.\n recovery_data: undefined,\n });\n}\n\nasync function nextFromChallengeSelecting(\n state: ReducerStateRecovery,\n args: void,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const s2 = await tryRecoverSecret(state);\n if (\n s2.reducer_type === \"recovery\" &&\n s2.recovery_state === RecoveryStates.RecoveryFinished\n ) {\n return s2;\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: \"Not enough challenges solved\",\n };\n}\n\nasync function syncOneProviderRecoveryTransition(\n state: ReducerStateRecovery,\n args: void,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n // FIXME: Should we not add this when we obtain the recovery document?\n const escrowMethods = state.verbatim_recovery_document?.escrow_methods ?? [];\n if (escrowMethods.length === 0) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: \"Can't sync, no escrow methods in recovery doc.\",\n };\n }\n for (const x of escrowMethods) {\n const pi = state.authentication_providers?.[x.url];\n if (pi?.status === \"ok\") {\n logger.info(`provider ${x.url} is synced`);\n continue;\n }\n const newPi = await getProviderInfo(x.url);\n return {\n ...state,\n authentication_providers: {\n ...state.authentication_providers,\n [x.url]: newPi,\n },\n };\n }\n\n for (const [provUrl, pi] of Object.entries(\n state.authentication_providers ?? {},\n )) {\n if (\n pi.status === \"ok\" ||\n pi.status === \"disabled\" ||\n pi.status === \"error\"\n ) {\n continue;\n }\n const newPi = await getProviderInfo(provUrl);\n return {\n ...state,\n authentication_providers: {\n ...state.authentication_providers,\n [provUrl]: newPi,\n },\n };\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED,\n hint: \"all providers are already synced\",\n };\n}\n\nasync function syncOneProviderBackupTransition(\n state: ReducerStateBackup,\n args: void,\n): Promise<ReducerStateBackup | ReducerStateError> {\n for (const [provUrl, pi] of Object.entries(\n state.authentication_providers ?? {},\n )) {\n if (\n pi.status === \"ok\" ||\n pi.status === \"disabled\" ||\n pi.status === \"error\"\n ) {\n continue;\n }\n const newPi = await getProviderInfo(provUrl);\n return {\n ...state,\n authentication_providers: {\n ...state.authentication_providers,\n [provUrl]: newPi,\n },\n };\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED,\n hint: \"all providers are already synced\",\n };\n}\n\nasync function enterSecretName(\n state: ReducerStateBackup,\n args: ActionArgsEnterSecretName,\n): Promise<ReducerStateBackup | ReducerStateError> {\n return {\n ...state,\n secret_name: args.name,\n };\n}\n\nasync function updateSecretExpiration(\n state: ReducerStateBackup,\n args: ActionArgsUpdateExpiration,\n): Promise<ReducerStateBackup | ReducerStateError> {\n return updateUploadFees({\n ...state,\n expiration: args.expiration,\n });\n}\n\nexport function mergeDiscoveryAggregate(\n newPolicies: PolicyMetaInfo[],\n oldAgg: AggregatedPolicyMetaInfo[],\n): AggregatedPolicyMetaInfo[] {\n const aggregatedPolicies: AggregatedPolicyMetaInfo[] = [...oldAgg];\n const polHashToIndex: Record<string, number> = {};\n for (const pol of newPolicies) {\n const oldIndex = polHashToIndex[pol.policy_hash];\n if (oldIndex != null) {\n aggregatedPolicies[oldIndex].providers.push({\n url: pol.provider_url,\n version: pol.version,\n });\n } else {\n aggregatedPolicies.push({\n attribute_mask: pol.attribute_mask,\n policy_hash: pol.policy_hash,\n providers: [\n {\n url: pol.provider_url,\n version: pol.version,\n },\n ],\n secret_name: pol.secret_name,\n });\n polHashToIndex[pol.policy_hash] = aggregatedPolicies.length - 1;\n }\n }\n return aggregatedPolicies;\n}\n\nconst backupTransitions: Record<\n BackupStates,\n Transition<ReducerStateBackup>\n> = {\n [BackupStates.ContinentSelecting]: {\n ...transition(\n \"select_continent\",\n codecForActionArgSelectContinent(),\n backupSelectContinent,\n ),\n },\n [BackupStates.CountrySelecting]: {\n ...transitionBackupJump(\"back\", BackupStates.ContinentSelecting),\n ...transition(\n \"select_country\",\n codecForActionArgSelectCountry(),\n backupSelectCountry,\n ),\n ...transition(\n \"select_continent\",\n codecForActionArgSelectContinent(),\n backupSelectContinent,\n ),\n },\n [BackupStates.UserAttributesCollecting]: {\n ...transitionBackupJump(\"back\", BackupStates.CountrySelecting),\n ...transition(\n \"enter_user_attributes\",\n codecForActionArgsEnterUserAttributes(),\n backupEnterUserAttributes,\n ),\n ...transition(\n \"sync_providers\",\n codecForAny(),\n syncOneProviderBackupTransition,\n ),\n },\n [BackupStates.AuthenticationsEditing]: {\n ...transitionBackupJump(\"back\", BackupStates.UserAttributesCollecting),\n ...transition(\"add_authentication\", codecForAny(), addAuthentication),\n ...transition(\"delete_authentication\", codecForAny(), deleteAuthentication),\n ...transition(\"add_provider\", codecForAny(), addProviderBackup),\n ...transition(\"delete_provider\", codecForAny(), deleteProviderBackup),\n ...transition(\n \"sync_providers\",\n codecForAny(),\n syncOneProviderBackupTransition,\n ),\n ...transition(\"next\", codecForAny(), nextFromAuthenticationsEditing),\n },\n [BackupStates.PoliciesReviewing]: {\n ...transitionBackupJump(\"back\", BackupStates.AuthenticationsEditing),\n ...transitionBackupJump(\"next\", BackupStates.SecretEditing),\n ...transition(\"add_policy\", codecForActionArgsAddPolicy(), addPolicy),\n ...transition(\"delete_policy\", codecForAny(), deletePolicy),\n ...transition(\"update_policy\", codecForAny(), updatePolicy),\n },\n [BackupStates.SecretEditing]: {\n ...transitionBackupJump(\"back\", BackupStates.PoliciesReviewing),\n ...transition(\"next\", codecForAny(), uploadSecret),\n ...transition(\"enter_secret\", codecForAny(), enterSecret),\n ...transition(\n \"update_expiration\",\n codecForActionArgsUpdateExpiration(),\n updateSecretExpiration,\n ),\n ...transition(\"enter_secret_name\", codecForAny(), enterSecretName),\n },\n [BackupStates.PoliciesPaying]: {\n ...transitionBackupJump(\"back\", BackupStates.SecretEditing),\n ...transition(\"pay\", codecForAny(), uploadSecret),\n },\n [BackupStates.TruthsPaying]: {\n ...transitionBackupJump(\"back\", BackupStates.SecretEditing),\n ...transition(\"pay\", codecForAny(), uploadSecret),\n },\n [BackupStates.BackupFinished]: {\n ...transitionBackupJump(\"back\", BackupStates.SecretEditing),\n },\n};\n\nconst recoveryTransitions: Record<\n RecoveryStates,\n Transition<ReducerStateRecovery>\n> = {\n [RecoveryStates.ContinentSelecting]: {\n ...transition(\n \"select_continent\",\n codecForActionArgSelectContinent(),\n recoverySelectContinent,\n ),\n },\n [RecoveryStates.CountrySelecting]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.ContinentSelecting),\n ...transition(\n \"select_country\",\n codecForActionArgSelectCountry(),\n recoverySelectCountry,\n ),\n ...transition(\n \"select_continent\",\n codecForActionArgSelectContinent(),\n recoverySelectContinent,\n ),\n },\n [RecoveryStates.UserAttributesCollecting]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.CountrySelecting),\n ...transition(\n \"enter_user_attributes\",\n codecForActionArgsEnterUserAttributes(),\n recoveryEnterUserAttributes,\n ),\n },\n [RecoveryStates.SecretSelecting]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.UserAttributesCollecting),\n ...transitionRecoveryJump(\"next\", RecoveryStates.ChallengeSelecting),\n ...transition(\"add_provider\", codecForAny(), addProviderRecovery),\n ...transition(\"delete_provider\", codecForAny(), deleteProviderRecovery),\n ...transition(\n \"select_version\",\n codecForActionArgsChangeVersion(),\n changeVersion,\n ),\n },\n [RecoveryStates.ChallengeSelecting]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.SecretSelecting),\n ...transition(\n \"select_challenge\",\n codecForActionArgsSelectChallenge(),\n selectChallenge,\n ),\n ...transition(\"poll\", codecForAny(), pollChallenges),\n ...transition(\"next\", codecForAny(), nextFromChallengeSelecting),\n ...transition(\n \"sync_providers\",\n codecForAny(),\n syncOneProviderRecoveryTransition,\n ),\n },\n [RecoveryStates.ChallengeSolving]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.ChallengeSelecting),\n ...transition(\"solve_challenge\", codecForAny(), solveChallenge),\n },\n [RecoveryStates.ChallengePaying]: {},\n [RecoveryStates.RecoveryFinished]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.ChallengeSelecting),\n },\n};\n\nexport async function discoverPolicies(\n state: ReducerState,\n cursor?: DiscoveryCursor,\n): Promise<DiscoveryResult> {\n if (state.reducer_type !== \"recovery\") {\n throw Error(\"can only discover providers in recovery state\");\n }\n\n const policies: PolicyMetaInfo[] = [];\n\n const providerUrls = Object.keys(state.authentication_providers || {});\n // FIXME: Do we need to re-contact providers here / check if they're disabled?\n // FIXME: Do this concurrently and take the first. Otherwise, one provider might block for a long time.\n\n for (const providerUrl of providerUrls) {\n const providerInfo = await getProviderInfo(providerUrl);\n if (providerInfo.status !== \"ok\") {\n continue;\n }\n const userId = await userIdentifierDerive(\n state.identity_attributes!,\n providerInfo.provider_salt,\n );\n const acctKeypair = accountKeypairDerive(userId);\n const reqUrl = new URL(`policy/${acctKeypair.pub}/meta`, providerUrl);\n const resp = await fetch(reqUrl.href);\n if (resp.status !== 200) {\n logger.warn(`Could not fetch policy metadate from ${reqUrl.href}`);\n continue;\n }\n const respJson: RecoveryMetaResponse = await resp.json();\n const versions = Object.keys(respJson);\n for (const version of versions) {\n const item = respJson[version];\n if (!item.meta) {\n continue;\n }\n const metaData = await decryptPolicyMetadata(userId, item.meta!);\n policies.push({\n attribute_mask: 0,\n provider_url: providerUrl,\n server_time: item.upload_time,\n version: Number.parseInt(version, 10),\n secret_name: metaData.secret_name,\n policy_hash: metaData.policy_hash,\n });\n }\n }\n return {\n policies,\n cursor: undefined,\n };\n}\n\nexport async function reduceAction(\n state: ReducerState,\n action: string,\n args: any,\n): Promise<ReducerState> {\n let h: TransitionImpl<any, any>;\n let stateName: string;\n if (\"backup_state\" in state && state.backup_state) {\n stateName = state.backup_state;\n h = backupTransitions[state.backup_state][action];\n } else if (\"recovery_state\" in state && state.recovery_state) {\n stateName = state.recovery_state;\n h = recoveryTransitions[state.recovery_state][action];\n } else {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: `Invalid state (needs backup_state or recovery_state)`,\n };\n }\n if (!h) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: `Unsupported action '${action}' in state '${stateName}'`,\n };\n }\n let parsedArgs: any;\n try {\n parsedArgs = h.argCodec.decode(args);\n } catch (e: any) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID,\n hint: \"argument validation failed\",\n detail: e.toString(),\n };\n }\n try {\n return await h.handler(state, parsedArgs);\n } catch (e: any) {\n logger.error(\"action handler failed\");\n logger.error(`${e?.stack ?? e}`);\n if (e instanceof ReducerError) {\n return {\n reducer_type: \"error\",\n ...e.errorJson,\n };\n }\n throw e;\n }\n}\n\n/**\n * Update provider status of providers that we still need to contact.\n *\n * Returns updates as soon as new information about at least one provider\n * is found.\n *\n * Returns an empty object if provider information is complete.\n *\n * FIXME: Also pass a cancellation token.\n */\nexport async function completeProviderStatus(\n providerMap: AuthenticationProviderStatusMap,\n): Promise<AuthenticationProviderStatusMap> {\n const updateTasks: Promise<[string, AuthenticationProviderStatus]>[] = [];\n for (const [provUrl, pi] of Object.entries(providerMap)) {\n switch (pi.status) {\n case \"ok\":\n case \"error\":\n case \"disabled\":\n default:\n continue;\n case \"not-contacted\":\n updateTasks.push(\n (async () => {\n return [provUrl, await getProviderInfo(provUrl)];\n })(),\n );\n }\n }\n\n if (updateTasks.length === 0) {\n return {};\n }\n\n const [firstUrl, firstStatus] = await Promise.race(updateTasks);\n return {\n [firstUrl]: firstStatus,\n };\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 */\nimport { BackupStates, RecoveryStates } from \"@gnu-taler/anastasis-core\";\nimport {\n ComponentChildren,\n Fragment,\n FunctionalComponent,\n h,\n VNode,\n} from \"preact\";\nimport { useCallback, useEffect, useErrorBoundary } from \"preact/hooks\";\nimport { AsyncButton } from \"../../components/AsyncButton.js\";\nimport { Menu } from \"../../components/menu/index.js\";\nimport { Notifications } from \"../../components/Notifications.js\";\nimport {\n AnastasisProvider,\n useAnastasisContext,\n} from \"../../context/anastasis.js\";\nimport {\n AnastasisReducerApi,\n useAnastasisReducer,\n} from \"../../hooks/use-anastasis-reducer.js\";\nimport { AttributeEntryScreen } from \"./AttributeEntryScreen.js\";\nimport { AuthenticationEditorScreen } from \"./AuthenticationEditorScreen.js\";\nimport { BackupFinishedScreen } from \"./BackupFinishedScreen.js\";\nimport { ChallengeOverviewScreen } from \"./ChallengeOverviewScreen.js\";\nimport { ChallengePayingScreen } from \"./ChallengePayingScreen.js\";\nimport { ContinentSelectionScreen } from \"./ContinentSelectionScreen.js\";\nimport { PoliciesPayingScreen } from \"./PoliciesPayingScreen.js\";\nimport { RecoveryFinishedScreen } from \"./RecoveryFinishedScreen.js\";\nimport { ReviewPoliciesScreen } from \"./ReviewPoliciesScreen.js\";\nimport { SecretEditorScreen } from \"./SecretEditorScreen.js\";\nimport { SecretSelectionScreen } from \"./SecretSelectionScreen.js\";\nimport { SolveScreen } from \"./SolveScreen.js\";\nimport { StartScreen } from \"./StartScreen.js\";\nimport { TruthsPayingScreen } from \"./TruthsPayingScreen.js\";\n\nfunction isBackup(reducer: AnastasisReducerApi): boolean {\n return reducer.currentReducerState?.reducer_type === \"backup\";\n}\n\nexport function withProcessLabel(\n reducer: AnastasisReducerApi,\n text: string,\n): string {\n if (isBackup(reducer)) {\n return `Backup: ${text}`;\n }\n return `Recovery: ${text}`;\n}\n\ninterface AnastasisClientFrameProps {\n onNext?(): Promise<void>;\n /**\n * Override for the \"back\" functionality.\n */\n onBack?(): Promise<void>;\n title: string;\n children: ComponentChildren;\n /**\n * Should back/next buttons be provided?\n */\n hideNav?: boolean;\n /**\n * Hide only the \"next\" button.\n */\n hideNext?: string;\n}\n\nfunction ErrorBoundary(props: {\n reducer: AnastasisReducerApi;\n children: ComponentChildren;\n}): VNode {\n const [error, resetError] = useErrorBoundary((error) =>\n console.log(\"ErrorBoundary got error\", error),\n );\n if (error) {\n return (\n <div>\n <button\n onClick={() => {\n props.reducer.reset();\n resetError();\n }}\n >\n Reset\n </button>\n <p>\n Error: <pre>{error.stack}</pre>\n </p>\n </div>\n );\n }\n return <div>{props.children}</div>;\n}\n\nlet currentHistoryId = 0;\n\nexport function AnastasisClientFrame(props: AnastasisClientFrameProps): VNode {\n const reducer = useAnastasisContext();\n\n const doBack = async (): Promise<void> => {\n if (props.onBack) {\n await props.onBack();\n } else {\n if (!reducer) return;\n await reducer.back();\n }\n };\n const doNext = async (fromPopstate?: boolean): Promise<void> => {\n if (!fromPopstate) {\n try {\n const nextId: number =\n (history.state && typeof history.state.id === \"number\"\n ? history.state.id\n : 0) + 1;\n\n currentHistoryId = nextId;\n\n history.pushState({ id: nextId }, \"unused\", `#${nextId}`);\n } catch (e) {\n console.log(\"ERROR doNext \", e);\n }\n }\n\n if (props.onNext) {\n await props.onNext();\n } else {\n if (!reducer) return;\n await reducer.transition(\"next\", {});\n }\n };\n const handleKeyPress = (\n e: h.JSX.TargetedKeyboardEvent<HTMLDivElement>,\n ): void => {\n // console.log(\"Got key press\", e.key);\n // FIXME: By default, \"next\" action should be executed here\n };\n\n const browserOnBackButton = useCallback(async (ev: PopStateEvent) => {\n //check if we are going back or forward\n if (!ev.state || ev.state.id === 0 || ev.state.id < currentHistoryId) {\n await doBack();\n } else {\n await doNext(true);\n }\n\n // reducer\n return false;\n }, []);\n useEffect(() => {\n window.addEventListener(\"popstate\", browserOnBackButton);\n\n return () => {\n window.removeEventListener(\"popstate\", browserOnBackButton);\n };\n }, []);\n // if (!reducer) {\n // return <p>Fatal: Reducer must be in context.</p>;\n // }\n\n return (\n <Fragment>\n <div class=\"home\" onKeyPress={(e) => handleKeyPress(e)}>\n <h1 class=\"title\">{props.title}</h1>\n <ErrorBanner />\n <section class=\"section is-main-section\">\n {props.children}\n {!props.hideNav ? (\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => doBack()}>\n Back\n </button>\n <AsyncButton\n class=\"button is-info\"\n data-tooltip={props.hideNext}\n onClick={() => doNext()}\n disabled={props.hideNext !== undefined}\n >\n Next\n </AsyncButton>\n </div>\n ) : null}\n </section>\n </div>\n </Fragment>\n );\n}\n\nconst AnastasisClient: FunctionalComponent = () => {\n const reducer = useAnastasisReducer();\n return (\n <AnastasisProvider value={reducer}>\n <ErrorBoundary reducer={reducer}>\n <Menu title=\"Anastasis\" />\n <AnastasisClientImpl />\n </ErrorBoundary>\n </AnastasisProvider>\n );\n};\n\nfunction AnastasisClientImpl(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <p>Fatal: Reducer must be in context.</p>;\n }\n const state = reducer.currentReducerState;\n if (!state) {\n return <StartScreen />;\n }\n\n // FIXME: Use switch statements here!\n\n if (\n (state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.ContinentSelecting) ||\n (state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.ContinentSelecting) ||\n (state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.CountrySelecting) ||\n (state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.CountrySelecting)\n ) {\n return <ContinentSelectionScreen />;\n }\n if (\n (state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.UserAttributesCollecting) ||\n (state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.UserAttributesCollecting)\n ) {\n return <AttributeEntryScreen />;\n }\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.AuthenticationsEditing\n ) {\n return <AuthenticationEditorScreen />;\n }\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.PoliciesReviewing\n ) {\n return <ReviewPoliciesScreen />;\n }\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.SecretEditing\n ) {\n return <SecretEditorScreen />;\n }\n\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.BackupFinished\n ) {\n return <BackupFinishedScreen />;\n }\n\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.TruthsPaying\n ) {\n return <TruthsPayingScreen />;\n }\n\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.PoliciesPaying\n ) {\n return <PoliciesPayingScreen />;\n }\n\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.SecretSelecting\n ) {\n return <SecretSelectionScreen />;\n }\n\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.ChallengeSelecting\n ) {\n return <ChallengeOverviewScreen />;\n }\n\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.ChallengeSolving\n ) {\n return <SolveScreen />;\n }\n\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.RecoveryFinished\n ) {\n return <RecoveryFinishedScreen />;\n }\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.ChallengePaying\n ) {\n return <ChallengePayingScreen />;\n }\n console.log(\"unknown state\", reducer.currentReducerState);\n return (\n <AnastasisClientFrame hideNav title=\"Bug\">\n <p>Bug: Unknown state.</p>\n <div class=\"buttons is-right\">\n <button class=\"button\" onClick={() => reducer.reset()}>\n Reset\n </button>\n </div>\n </AnastasisClientFrame>\n );\n}\n\n/**\n * Show a dismissible error banner if there is a current error.\n */\nfunction ErrorBanner(): VNode | null {\n const reducer = useAnastasisContext();\n if (!reducer || !reducer.currentError) return null;\n return (\n <Notifications\n removeNotification={reducer.dismissError}\n notifications={[\n {\n type: \"ERROR\",\n message: `Error code: ${reducer.currentError.code}`,\n description: reducer.currentError.hint,\n },\n ]}\n />\n );\n}\n\nexport default AnastasisClient;\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 { ComponentChildren, h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef } from \"preact/hooks\";\nimport { useAsync } from \"../hooks/async.js\";\n\ntype Props = {\n children: ComponentChildren;\n disabled?: boolean;\n onClick?: () => Promise<void>;\n grabFocus?: boolean;\n [rest: string]: any;\n};\n\nexport function AsyncButton({\n onClick,\n grabFocus,\n disabled,\n children,\n ...rest\n}: Props): VNode {\n const { isLoading, request } = useAsync(onClick);\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n useLayoutEffect(() => {\n if (grabFocus) {\n buttonRef.current?.focus();\n }\n }, [grabFocus]);\n\n // if (isSlow) {\n // return <LoadingModal onCancel={cancel} />;\n // }\n if (isLoading) {\n return <button class=\"button\">Loading...</button>;\n }\n\n return (\n <span data-tooltip={rest[\"data-tooltip\"]} style={{ marginLeft: 5 }}>\n <button {...rest} ref={buttonRef} onClick={request} disabled={disabled}>\n {children}\n </button>\n </span>\n );\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useCallback, useEffect, useRef, useState } from \"preact/hooks\";\n// import { cancelPendingRequest } from \"./backend.js\";\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 useIsMounted() {\n const isMountedRef = useRef(true);\n const isMounted = useCallback(() => isMountedRef.current, []);\n\n useEffect(() => {\n return () => void (isMountedRef.current = false);\n }, []);\n\n return isMounted;\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 const isMounted = useIsMounted();\n\n const request = async (...args: any) => {\n if (!fn) return;\n setLoading(true);\n const handler = setTimeout(() => {\n if (!isMounted()) {\n return;\n }\n setSlow(true);\n }, tooLong);\n\n try {\n const result = await fn(...args);\n if (!isMounted()) {\n // Possibly calling fn(...) resulted in the component being unmounted.\n return;\n }\n setData(result);\n } catch (error) {\n setError(error);\n }\n setLoading(false);\n setSlow(false);\n clearTimeout(handler);\n };\n\n function cancel() {\n // cancelPendingRequest()\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 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 { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { Match } from \"preact-router/match.js\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { NavigationBar } from \"./NavigationBar.js\";\nimport { Sidebar } from \"./SideBar.js\";\n\ninterface MenuProps {\n title: string;\n}\n\nfunction WithTitle({\n title,\n children,\n}: {\n title: string;\n children: ComponentChildren;\n}): VNode {\n useEffect(() => {\n document.title = `${title}`;\n }, [title]);\n return <Fragment>{children}</Fragment>;\n}\n\nexport function Menu({ title }: MenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n return (\n <Match>\n {({ path }: { path: string }) => {\n const titleWithSubtitle = title; // title ? title : (!admin ? getInstanceTitle(path, instance) : getAdminTitle(path, instance))\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 <Sidebar mobile={mobileOpen} />\n </div>\n </WithTitle>\n );\n }}\n </Match>\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 && <div class=\"message-body\">{n.description}</div>}\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=\"has-aside-mobile-expanded\"\n // class={mobileOpen ? \"has-aside-mobile-expanded\" : \"\"}\n onClick={() => setMobileOpen(false)}\n >\n <NavigationBar\n onMobileMenu={() => setMobileOpen(!mobileOpen)}\n title={title}\n />\n {onLogout && <Sidebar mobile={mobileOpen} />}\n </div>\n );\n}\n\nexport interface Notification {\n message: string;\n description?: string | VNode;\n type: MessageType;\n}\n\nexport type ValueOrFunction<T> = T | ((p: T) => T);\nexport type MessageType = \"INFO\" | \"WARN\" | \"ERROR\" | \"SUCCESS\";\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 { h, VNode } from \"preact\";\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 <a\n href=\"mailto:contact@anastasis.lu\"\n style={{ alignSelf: \"center\", padding: \"0.5em\" }}\n >\n Contact us\n </a>\n <a\n href=\"https://bugs.anastasis.lu/\"\n style={{ alignSelf: \"center\", padding: \"0.5em\" }}\n >\n Report a bug\n </a>\n {/* <a\n style={{\n alignSelf: \"center\",\n padding: \"0.5em\",\n }}\n >\n Settings\n </a> */}\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 <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 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 { BackupStates, RecoveryStates } from \"@gnu-taler/anastasis-core\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { useTranslationContext } from \"../../context/translation.js\";\n\ninterface Props {\n mobile?: boolean;\n}\n\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : \"dev\";\nconst GIT_HASH =\n typeof __GIT_HASH__ !== \"undefined\"\n ? __GIT_HASH__.substring(0, 7)\n : undefined;\nconst VERSION_WITH_HASH = GIT_HASH ? `${VERSION}-${GIT_HASH}` : VERSION;\n\nexport function Sidebar({ mobile }: Props): VNode {\n const reducer = useAnastasisContext()!;\n const { i18n } = useTranslationContext();\n\n function saveSession(): void {\n const state = reducer.exportState();\n const link = document.createElement(\"a\");\n link.download = \"anastasis.json\";\n link.href = `data:text/plain,${state}`;\n link.click();\n }\n\n return (\n <aside class=\"aside is-placed-left is-expanded\">\n {/* {mobile && <div class=\"footer\" onClick={(e) => { return e.stopImmediatePropagation() }}>\n <LangSelector />\n </div>} */}\n <div class=\"aside-tools\">\n <div class=\"aside-tools-label\">\n <div>\n <b>Anastasis</b>\n </div>\n <div\n class=\"is-size-7 has-text-right\"\n style={{ lineHeight: 0, marginTop: -10 }}\n >\n Version {VERSION_WITH_HASH}\n </div>\n </div>\n </div>\n <div class=\"menu is-menu-main\">\n {!reducer.currentReducerState && (\n <p class=\"menu-label\">\n <i18n.Translate>Backup or Recorver</i18n.Translate>\n </p>\n )}\n <ul class=\"menu-list\">\n {!reducer.currentReducerState && (\n <li>\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Select one option</i18n.Translate>\n </span>\n </div>\n </li>\n )}\n {reducer.currentReducerState?.reducer_type === \"backup\" ? (\n <Fragment>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.ContinentSelecting ||\n reducer.currentReducerState.backup_state ===\n BackupStates.CountrySelecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Location</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.UserAttributesCollecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Personal information</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.AuthenticationsEditing\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Authorization methods</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.PoliciesReviewing\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Policies</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.SecretEditing\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Secret input</i18n.Translate>\n </span>\n </div>\n </li>\n {/* <li class={reducer.currentReducerState.backup_state === BackupStates.PoliciesPaying ? 'is-active' : ''}>\n <div class=\"ml-4\">\n\n <span class=\"menu-item-label\"><i18n.Translate>Payment (optional)</i18n.Translate></span>\n </div>\n </li> */}\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.BackupFinished\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Backup completed</i18n.Translate>\n </span>\n </div>\n </li>\n {/* <li class={reducer.currentReducerState.backup_state === BackupStates.TruthsPaying ? 'is-active' : ''}>\n <div class=\"ml-4\">\n\n <span class=\"menu-item-label\"><i18n.Translate>Truth Paying</i18n.Translate></span>\n </div>\n </li> */}\n {reducer.currentReducerState.backup_state !==\n BackupStates.BackupFinished && (\n <li>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-primary is-right\"\n onClick={saveSession}\n >\n Save backup session\n </button>\n </div>\n </li>\n )}\n {reducer.currentReducerState.backup_state !==\n BackupStates.BackupFinished && (\n <li>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-danger is-right\"\n onClick={() => reducer.reset()}\n >\n Reset session\n </button>\n </div>\n </li>\n )}\n </Fragment>\n ) : (\n reducer.currentReducerState?.reducer_type === \"recovery\" && (\n <Fragment>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.ContinentSelecting ||\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.CountrySelecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Location</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.UserAttributesCollecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Personal information</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.SecretSelecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Secret selection</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.ChallengeSelecting ||\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.ChallengeSolving\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Solve Challenges</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.RecoveryFinished\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Secret recovered</i18n.Translate>\n </span>\n </div>\n </li>\n {reducer.currentReducerState.recovery_state !==\n RecoveryStates.RecoveryFinished && (\n <li>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-primary is-right\"\n onClick={saveSession}\n >\n Save recovery session\n </button>\n </div>\n </li>\n )}\n {reducer.currentReducerState.recovery_state ===\n RecoveryStates.RecoveryFinished ? (\n <Fragment />\n ) : (\n <li>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-danger is-right\"\n onClick={() => reducer.reset()}\n >\n Reset session\n </button>\n </div>\n </li>\n )}\n </Fragment>\n )\n )}\n\n {/* <li>\n <div class=\"buttons ml-4\">\n <button class=\"button is-info is-right\" >Manage providers</button>\n </div>\n </li> */}\n </ul>\n </div>\n </aside>\n );\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { AnastasisReducerApi } from \"../hooks/use-anastasis-reducer.js\";\n\nconst initial = undefined;\n\nconst Context = createContext<AnastasisReducerApi | undefined>(initial);\n\ninterface Props {\n value: AnastasisReducerApi;\n children: any;\n}\n\nexport const AnastasisProvider = ({ value, children }: Props): VNode => {\n return h(Context.Provider, { value, children });\n};\n\nexport const useAnastasisContext = (): AnastasisReducerApi | undefined =>\n useContext(Context);\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 { h, VNode } from \"preact\";\n\nexport interface Notification {\n message: string;\n description?: string | VNode;\n type: MessageType;\n}\n\nexport type MessageType = \"INFO\" | \"WARN\" | \"ERROR\" | \"SUCCESS\";\n\ninterface Props {\n notifications: Notification[];\n removeNotification?: (n: Notification) => void;\n}\n\nfunction messageStyle(type: MessageType): string {\n switch (type) {\n case \"INFO\":\n return \"message is-info\";\n case \"WARN\":\n return \"message is-warning\";\n case \"ERROR\":\n return \"message is-danger\";\n case \"SUCCESS\":\n return \"message is-success\";\n default:\n return \"message\";\n }\n}\n\nexport function Notifications({\n notifications,\n removeNotification,\n}: Props): VNode {\n return (\n <div class=\"block\">\n {notifications.map((n, i) => (\n <article key={i} class={messageStyle(n.type)}>\n <div class=\"message-header\">\n <p>{n.message}</p>\n {removeNotification && (\n <button\n class=\"delete\"\n onClick={() => removeNotification && removeNotification(n)}\n />\n )}\n </div>\n {n.description && <div class=\"message-body\">{n.description}</div>}\n </article>\n ))}\n </div>\n );\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\n/**\n * Imports.\n */\nimport { TalerErrorCode } from \"@gnu-taler/taler-util\";\nimport {\n AggregatedPolicyMetaInfo,\n BackupStates,\n completeProviderStatus,\n discoverPolicies,\n DiscoveryCursor,\n getBackupStartState,\n getRecoveryStartState,\n mergeDiscoveryAggregate,\n RecoveryStates,\n reduceAction,\n ReducerState,\n} from \"@gnu-taler/anastasis-core\";\nimport { useState } from \"preact/hooks\";\n\nconst reducerBaseUrl = \"http://localhost:5000/\";\nconst remoteReducer = false;\n\ninterface AnastasisState {\n reducerState: ReducerState | undefined;\n currentError: any;\n discoveryState: DiscoveryUiState;\n}\n\nasync function getBackupStartStateRemote(): Promise<ReducerState> {\n let resp: Response;\n\n try {\n resp = await fetch(new URL(\"start-backup\", reducerBaseUrl).href);\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Network request to remote reducer ${reducerBaseUrl} failed`,\n } as any;\n }\n try {\n return await resp.json();\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Could not parse response from reducer`,\n } as any;\n }\n}\n\nasync function getRecoveryStartStateRemote(): Promise<ReducerState> {\n let resp: Response;\n try {\n resp = await fetch(new URL(\"start-recovery\", reducerBaseUrl).href);\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Network request to remote reducer ${reducerBaseUrl} failed`,\n } as any;\n }\n try {\n return await resp.json();\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Could not parse response from reducer`,\n } as any;\n }\n}\n\nasync function reduceStateRemote(\n state: any,\n action: string,\n args: any,\n): Promise<ReducerState> {\n let resp: Response;\n try {\n resp = await fetch(new URL(\"action\", reducerBaseUrl).href, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n state,\n action,\n arguments: args,\n }),\n });\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Network request to remote reducer ${reducerBaseUrl} failed`,\n } as any;\n }\n try {\n return await resp.json();\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Could not parse response from reducer`,\n } as any;\n }\n}\n\nexport interface ReducerTransactionHandle {\n transactionState: ReducerState;\n transition(action: string, args: any): Promise<ReducerState>;\n}\n\n/**\n * UI-relevant state of the policy discovery process.\n */\nexport interface DiscoveryUiState {\n state: \"none\" | \"active\" | \"finished\";\n\n aggregatedPolicies?: AggregatedPolicyMetaInfo[];\n\n cursor?: DiscoveryCursor;\n}\n\nexport interface AnastasisReducerApi {\n currentReducerState: ReducerState | undefined;\n // FIXME: Explain better!\n currentError: any;\n discoveryState: DiscoveryUiState;\n dismissError: () => void;\n startBackup: () => void;\n startRecover: () => void;\n reset: () => void;\n back: () => Promise<void>;\n transition(action: string, args: any): Promise<void>;\n exportState: () => string;\n importState: (s: string) => void;\n discoverStart(): Promise<void>;\n discoverMore(): Promise<void>;\n /**\n * Run multiple reducer steps in a transaction without\n * affecting the UI-visible transition state in-between.\n */\n runTransaction(\n f: (h: ReducerTransactionHandle) => Promise<void>,\n ): Promise<void>;\n}\n\nfunction storageGet(key: string): string | null {\n if (typeof localStorage === \"object\") {\n return localStorage.getItem(key);\n }\n return null;\n}\n\nfunction storageSet(key: string, value: any): void {\n if (typeof localStorage === \"object\") {\n return localStorage.setItem(key, value);\n }\n}\n\nfunction getStateFromStorage(): any {\n let state: any;\n try {\n const s = storageGet(\"anastasisReducerState\");\n if (s === \"undefined\") {\n state = undefined;\n } else if (s) {\n state = JSON.parse(s);\n }\n } catch (e) {\n console.log(\"ERROR: getStateFromStorage \", e);\n }\n return state ?? undefined;\n}\n\nexport function useAnastasisReducer(): AnastasisReducerApi {\n const [anastasisState, setAnastasisStateInternal] = useState<AnastasisState>(\n () => ({\n reducerState: getStateFromStorage(),\n currentError: undefined,\n discoveryState: {\n state: \"none\",\n },\n }),\n );\n\n const setAnastasisState = (newState: AnastasisState) => {\n try {\n storageSet(\n \"anastasisReducerState\",\n JSON.stringify(newState.reducerState),\n );\n } catch (e) {\n console.log(\"ERROR setAnastasisState\", e);\n }\n setAnastasisStateInternal(newState);\n\n const tryUpdateProviders = () => {\n const reducerState = newState.reducerState;\n if (\n reducerState?.reducer_type !== \"backup\" &&\n reducerState?.reducer_type !== \"recovery\"\n ) {\n return;\n }\n const provMap = reducerState.authentication_providers;\n if (!provMap) {\n return;\n }\n const doUpdate = async () => {\n const updates = await completeProviderStatus(provMap);\n if (Object.keys(updates).length === 0) {\n return;\n }\n const rs2 = reducerState;\n if (rs2.reducer_type !== \"backup\" && rs2.reducer_type !== \"recovery\") {\n return;\n }\n setAnastasisState({\n ...anastasisState,\n reducerState: {\n ...rs2,\n authentication_providers: {\n ...rs2.authentication_providers,\n ...updates,\n },\n },\n });\n };\n doUpdate().catch((e) => console.log(\"ERROR doUpdate\", e));\n };\n\n tryUpdateProviders();\n };\n\n async function doTransition(action: string, args: any): Promise<void> {\n let s: ReducerState;\n if (remoteReducer) {\n s = await reduceStateRemote(anastasisState.reducerState, action, args);\n } else {\n s = await reduceAction(anastasisState.reducerState!, action, args);\n }\n if (s.reducer_type === \"error\") {\n setAnastasisState({ ...anastasisState, currentError: s });\n } else {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: s,\n });\n }\n }\n\n return {\n currentReducerState: anastasisState.reducerState,\n currentError: anastasisState.currentError,\n discoveryState: anastasisState.discoveryState,\n async startBackup() {\n let s: ReducerState;\n if (remoteReducer) {\n s = await getBackupStartStateRemote();\n } else {\n s = await getBackupStartState();\n }\n if (s.reducer_type === \"error\") {\n setAnastasisState({\n ...anastasisState,\n currentError: s,\n });\n } else {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: s,\n });\n }\n },\n exportState() {\n const state = getStateFromStorage();\n return JSON.stringify(state);\n },\n importState(s: string) {\n try {\n const state = JSON.parse(s);\n setAnastasisState({\n reducerState: state,\n currentError: undefined,\n discoveryState: {\n state: \"none\",\n },\n });\n } catch (e) {\n throw new Error(\"could not restore the state\");\n }\n },\n async discoverStart(): Promise<void> {\n const res = await discoverPolicies(this.currentReducerState!, undefined);\n const aggregatedPolicies = mergeDiscoveryAggregate(res.policies, []);\n setAnastasisState({\n ...anastasisState,\n discoveryState: {\n state: \"finished\",\n aggregatedPolicies,\n cursor: res.cursor,\n },\n });\n },\n async discoverMore(): Promise<void> {\n return;\n },\n async startRecover() {\n let s: ReducerState;\n if (remoteReducer) {\n s = await getRecoveryStartStateRemote();\n } else {\n s = await getRecoveryStartState();\n }\n if (s.reducer_type === \"error\") {\n setAnastasisState({\n ...anastasisState,\n currentError: s,\n });\n } else {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: s,\n });\n }\n },\n transition(action: string, args: any) {\n return doTransition(action, args);\n },\n async back() {\n const reducerState = anastasisState.reducerState;\n if (!reducerState) {\n return;\n }\n if (\n (reducerState.reducer_type === \"backup\" &&\n reducerState.backup_state === BackupStates.ContinentSelecting) ||\n (reducerState.reducer_type === \"recovery\" &&\n reducerState.recovery_state === RecoveryStates.ContinentSelecting)\n ) {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: undefined,\n });\n } else {\n await doTransition(\"back\", {});\n }\n },\n dismissError() {\n setAnastasisState({ ...anastasisState, currentError: undefined });\n },\n reset() {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: undefined,\n });\n },\n async runTransaction(f) {\n const txHandle = new ReducerTxImpl(anastasisState.reducerState!);\n try {\n await f(txHandle);\n } catch (e) {\n console.log(\"exception during reducer transaction\", e);\n }\n const s = txHandle.transactionState;\n if (s.reducer_type === \"error\") {\n setAnastasisState({\n ...anastasisState,\n currentError: txHandle.transactionState,\n });\n } else {\n setAnastasisState({\n ...anastasisState,\n reducerState: txHandle.transactionState,\n currentError: undefined,\n });\n }\n },\n };\n}\n\nclass ReducerTxImpl implements ReducerTransactionHandle {\n constructor(public transactionState: ReducerState) {}\n async transition(action: string, args: any): Promise<ReducerState> {\n let s: ReducerState;\n if (remoteReducer) {\n s = await reduceStateRemote(this.transactionState, action, args);\n } else {\n s = await reduceAction(this.transactionState, action, args);\n }\n this.transactionState = s;\n // Abort transaction as soon as we transition into an error state.\n if (this.transactionState.reducer_type === \"error\") {\n throw new Error(\"transition resulted in error\");\n }\n return this.transactionState;\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}", "import 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 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}", "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 toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years 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 years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\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;", "import 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 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 (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 (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 (date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function (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 (date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function (date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function (date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function (date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function (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 (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 (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 (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 (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 (date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\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}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport class Setter {\n constructor() {\n _defineProperty(this, \"priority\", void 0);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n validate(_utcDate, _options) {\n return true;\n }\n\n}\nexport class ValueSetter extends Setter {\n constructor(value, validateValue, setValue, priority, subPriority) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n\n set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n\n}\nexport class DateToSystemTimezoneSetter extends Setter {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(this, \"subPriority\", -1);\n }\n\n set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport class Parser {\n constructor() {\n _defineProperty(this, \"incompatibleTokens\", void 0);\n\n _defineProperty(this, \"priority\", void 0);\n\n _defineProperty(this, \"subPriority\", void 0);\n }\n\n run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport class EraParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 140);\n\n _defineProperty(this, \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};", "import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\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 |\nexport class YearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 130);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 130);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport class ISOWeekYearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 130);\n\n _defineProperty(this, \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport class ExtendedYearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 130);\n\n _defineProperty(this, \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport class QuarterParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 120);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport class StandAloneQuarterParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 120);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport class MonthParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(this, \"priority\", 110);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport class StandAloneMonthParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 110);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport class LocalWeekParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 100);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n\n}", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport class ISOWeekParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 100);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport class DateParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"subPriority\", 1);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport class DayOfYearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"subpriority\", 1);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\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 setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, 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 = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport class DayParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport class LocalDayParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport class StandAloneLocalDayParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n }\n\n parse(dateString, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport class ISODayParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport class AMPMParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 80);\n\n _defineProperty(this, \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport class AMPMMidnightParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 80);\n\n _defineProperty(this, \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport class DayPeriodParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 80);\n\n _defineProperty(this, \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class Hour1to12Parser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 70);\n\n _defineProperty(this, \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class Hour0to23Parser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 70);\n\n _defineProperty(this, \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class Hour0To11Parser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 70);\n\n _defineProperty(this, \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class Hour1To24Parser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 70);\n\n _defineProperty(this, \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class MinuteParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 60);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class SecondParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 50);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport class FractionOfSecondParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 30);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T']);\n }\n\n parse(dateString, token) {\n var valueCallback = function (value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport class ISOTimezoneWithZParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 10);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T', 'x']);\n }\n\n parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport class ISOTimezoneParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 10);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T', 'X']);\n }\n\n parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport class TimestampSecondsParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 40);\n\n _defineProperty(this, \"incompatibleTokens\", '*');\n }\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport class TimestampMillisecondsParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 20);\n\n _defineProperty(this, \"incompatibleTokens\", '*');\n }\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n\n}", "import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\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 | | P | |\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 `parse` 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 */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\n};", "import defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/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 { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/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 notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\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 in the format string 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 *\n * Format of the format 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 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\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) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\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 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\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) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\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 | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | 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) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\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) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\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 | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | 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] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | 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) | 10 | 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 * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\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 * In `format` function, they will produce different result:\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 * `parse` will try to match both formatting and stand-alone units interchangably.\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:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. 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` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\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 [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. 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 * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `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 * 7. `D` and `DD` tokens represent days of the year but they are ofthen 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 * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\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 {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\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 {Date} the parsed date\n * @throws {TypeError} 3 arguments required\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} `options.locale` must contain `match` property\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 * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, 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(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\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\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\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 (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _loop = function (_token) {\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(_token)) {\n throwProtectedError(_token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(_token)) {\n throwProtectedError(_token, formatString, dirtyDateString);\n }\n\n var firstCharacter = _token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(_token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(_token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: _token\n });\n var parseResult = parser.run(dateString, _token, locale.match, subFnOptions);\n\n if (!parseResult) {\n token = _token;\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (_token === \"''\") {\n _token = \"'\";\n } else if (firstCharacter === \"'\") {\n _token = cleanEscapedString(_token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(_token) === 0) {\n dateString = dateString.slice(_token.length);\n } else {\n token = _token;\n return {\n v: new Date(NaN)\n };\n }\n }\n\n token = _token;\n };\n\n for (var token of tokens) {\n var _ret = _loop(token);\n\n if (typeof _ret === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n for (var setter of uniquePrioritySetters) {\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addYears from \"../addYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years 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 years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\n\nexport default function subYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addYears(dirtyDate, -amount);\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 */\nimport { UserAttributeSpec, validators } from \"@gnu-taler/anastasis-core\";\nimport { isAfter, parse } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DateInput } from \"../../components/fields/DateInput.js\";\nimport { PhoneNumberInput } from \"../../components/fields/NumberInput.js\";\nimport { TextInput } from \"../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { ConfirmModal } from \"./ConfirmModal.js\";\nimport { AnastasisClientFrame, withProcessLabel } from \"./index.js\";\n\nexport function AttributeEntryScreen(): VNode {\n const reducer = useAnastasisContext();\n const state = reducer?.currentReducerState;\n const currentIdentityAttributes =\n state && \"identity_attributes\" in state\n ? state.identity_attributes || {}\n : {};\n const [attrs, setAttrs] = useState<Record<string, string>>(\n currentIdentityAttributes,\n );\n const isBackup = state?.reducer_type === \"backup\";\n const [askUserIfSure, setAskUserIfSure] = useState(false);\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (\n !reducer.currentReducerState ||\n !(\"required_attributes\" in reducer.currentReducerState)\n ) {\n return <div>invalid state</div>;\n }\n const reqAttr = reducer.currentReducerState.required_attributes || [];\n let hasErrors = false;\n\n const fieldList: VNode[] = reqAttr.map((spec, i: number) => {\n const value = attrs[spec.name];\n const error = checkIfValid(value, spec);\n\n function addAutocomplete(newValue: string): string {\n const ac = spec.autocomplete;\n if (!ac || ac.length <= newValue.length || ac[newValue.length] === \"?\")\n return newValue;\n\n if (!value || newValue.length < value.length) {\n return newValue.slice(0, -1);\n }\n\n return newValue + ac[newValue.length];\n }\n\n hasErrors = hasErrors || error !== undefined;\n return (\n <AttributeEntryField\n key={i}\n isFirst={i == 0}\n setValue={(v: string) =>\n setAttrs({ ...attrs, [spec.name]: addAutocomplete(v) })\n }\n spec={spec}\n errorMessage={error}\n onConfirm={() => {\n if (!hasErrors) {\n setAskUserIfSure(true);\n }\n }}\n value={value}\n />\n );\n });\n\n const doConfirm = async () => {\n await reducer.transition(\"enter_user_attributes\", {\n identity_attributes: {\n application_id: \"anastasis-standalone\",\n ...attrs,\n },\n });\n };\n\n function saveAsPDF(): void {\n const printWindow = window.open(\"\", \"\", \"height=400,width=800\");\n const divContents = document.getElementById(\"printThis\");\n\n if (!printWindow || !divContents) return;\n printWindow.document.write(\n `<html><head><link rel=\"stylesheet\" href=\"index.css\" /><title>Anastasis Recovery Document</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 return (\n <AnastasisClientFrame\n title={withProcessLabel(reducer, \"Who are you?\")}\n hideNext={hasErrors ? \"Complete the form.\" : undefined}\n onNext={async () => (isBackup ? setAskUserIfSure(true) : doConfirm())}\n >\n {askUserIfSure ? (\n <ConfirmModal\n active\n onCancel={() => setAskUserIfSure(false)}\n description=\"The values in the form must be correct\"\n label=\"I am sure\"\n cancelLabel=\"Wait, I want to check\"\n onConfirm={() => doConfirm().then(() => setAskUserIfSure(false))}\n >\n You personal information is used to define the location where your\n secret will be safely stored. If you forget what you have entered or\n if there is a misspell you will be unable to recover your secret.\n <p>\n {/* TODO: make this actually work reliably cross-browser lol (opens about:blank for me) */}\n <a onClick={saveAsPDF}>Save the personal information as PDF</a>\n </p>\n </ConfirmModal>\n ) : undefined}\n\n <div class=\"columns\" style={{ maxWidth: \"unset\" }}>\n <div class=\"column\" id=\"printThis\">\n {fieldList}\n </div>\n <div class=\"column\">\n <p>This personal information will help to locate your secret.</p>\n <h1 class=\"title\">This stays private</h1>\n <p>The information you have entered here:</p>\n <ul>\n <li>\n <span class=\"icon is-right\">\n <i class=\"mdi mdi-circle-small\" />\n </span>\n Will be hashed, and therefore unreadable\n </li>\n <li>\n <span class=\"icon is-right\">\n <i class=\"mdi mdi-circle-small\" />\n </span>\n The non-hashed version is not shared\n </li>\n </ul>\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\ninterface AttributeEntryFieldProps {\n isFirst: boolean;\n value: string;\n setValue: (newValue: string) => void;\n spec: UserAttributeSpec;\n errorMessage: string | undefined;\n onConfirm: () => void;\n}\nconst possibleBirthdayYear: Array<number> = [];\nfor (let i = 0; i < 100; i++) {\n possibleBirthdayYear.push(2020 - i);\n}\nfunction AttributeEntryField(props: AttributeEntryFieldProps): VNode {\n return (\n <div style={{ marginTop: 16 }}>\n {props.spec.type === \"date\" && (\n <DateInput\n grabFocus={props.isFirst}\n label={props.spec.label}\n years={possibleBirthdayYear}\n onConfirm={props.onConfirm}\n error={props.errorMessage}\n bind={[props.value, props.setValue]}\n />\n )}\n {props.spec.type === \"number\" && (\n <PhoneNumberInput\n grabFocus={props.isFirst}\n label={props.spec.label}\n onConfirm={props.onConfirm}\n error={props.errorMessage}\n bind={[props.value, props.setValue]}\n />\n )}\n {props.spec.type === \"string\" && (\n <TextInput\n grabFocus={props.isFirst}\n label={props.spec.label}\n onConfirm={props.onConfirm}\n error={props.errorMessage}\n bind={[props.value, props.setValue]}\n />\n )}\n {props.spec.type === \"string\" && (\n <div>\n This field is case-sensitive. You must enter exactly the same value\n during recovery.\n </div>\n )}\n {props.spec.name === \"full_name\" && (\n <div>\n If possible, use &quot;LASTNAME, Firstname(s)&quot; without\n abbreviations.\n </div>\n )}\n <div class=\"block\">\n This stays private\n <span class=\"icon is-right\">\n <i class=\"mdi mdi-eye-off\" />\n </span>\n </div>\n </div>\n );\n}\nconst YEAR_REGEX = /^[0-9]+-[0-9]+-[0-9]+$/;\n\nfunction checkIfValid(\n value: string,\n spec: UserAttributeSpec,\n): string | undefined {\n const pattern = spec[\"validation-regex\"];\n if (pattern) {\n const re = new RegExp(pattern);\n if (!re.test(value)) return \"The value is invalid\";\n }\n const logic = spec[\"validation-logic\"];\n if (logic) {\n const func = (validators as any)[logic];\n if (func && typeof func === \"function\" && !func(value))\n return \"Please check the value\";\n }\n const optional = spec.optional;\n if (!optional && !value) {\n return \"This value is required\";\n }\n if (\"date\" === spec.type) {\n if (!YEAR_REGEX.test(value)) {\n return \"The date doesn't follow the format\";\n }\n\n try {\n const v = parse(value, \"yyyy-MM-dd\", new Date());\n if (Number.isNaN(v.getTime())) {\n return \"Some numeric values seems out of range for a date\";\n }\n if (\"birthdate\" === spec.name && isAfter(v, new Date())) {\n return \"A birthdate cannot be in the future\";\n }\n } catch (e) {\n return \"Could not parse the date\";\n }\n }\n return undefined;\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 */\nimport { format, subYears } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\nimport { DatePicker } from \"../picker/DatePicker.js\";\n\nexport interface DateInputProps {\n label: string;\n grabFocus?: boolean;\n tooltip?: string;\n error?: string;\n years?: Array<number>;\n onConfirm?: () => void;\n bind: [string, (x: string) => void];\n}\n\nexport function DateInput(props: DateInputProps): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (props.grabFocus) {\n inputRef.current?.focus();\n }\n }, [props.grabFocus]);\n const [opened, setOpened] = useState(false);\n\n const value = props.bind[0] || \"\";\n const [dirty, setDirty] = useState(false);\n const showError = dirty && props.error;\n\n const calendar = subYears(new Date(), 30);\n\n return (\n <div class=\"field\">\n <label class=\"label\">\n {props.label}\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control\">\n <div class=\"field has-addons\">\n <p class=\"control\">\n <input\n type=\"text\"\n class={showError ? \"input is-danger\" : \"input\"}\n value={value}\n onKeyPress={(e) => {\n if (e.key === \"Enter\" && props.onConfirm) {\n props.onConfirm();\n }\n }}\n onInput={(e) => {\n const text = e.currentTarget.value;\n setDirty(true);\n props.bind[1](text);\n }}\n ref={inputRef}\n />\n </p>\n <p class=\"control\">\n <a\n class=\"button\"\n onClick={() => {\n setOpened(true);\n }}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-calendar\" />\n </span>\n </a>\n </p>\n </div>\n </div>\n <p class=\"help\">Using the format yyyy-mm-dd</p>\n {showError && <p class=\"help is-danger\">{props.error}</p>}\n <DatePicker\n opened={opened}\n initialDate={calendar}\n years={props.years}\n closeFunction={() => setOpened(false)}\n dateReceiver={(d) => {\n setDirty(true);\n const v = format(d, \"yyyy-MM-dd\");\n props.bind[1](v);\n }}\n />\n </div>\n );\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\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 initialDate?: Date;\n years?: Array<number>;\n opened?: boolean;\n}\ninterface State {\n displayedMonth: number;\n displayedYear: number;\n selectYearMode: boolean;\n currentDate: Date;\n}\nconst now = new Date();\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 yearArr: number[] = [];\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(props: any) {\n super(props);\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 const initial = props.initialDate || now;\n\n this.state = {\n currentDate: initial,\n displayedMonth: initial.getMonth(),\n displayedYear: initial.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 {(this.props.years || 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\nfor (let i = 2010; i <= now.getFullYear() + 10; i++) {\n yearArr.push(i);\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 */\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\n\nexport interface TextInputProps {\n label: string;\n grabFocus?: boolean;\n error?: string;\n placeholder?: string;\n tooltip?: string;\n onConfirm?: () => void;\n bind: [string, (x: string) => void];\n}\n\nexport function PhoneNumberInput(props: TextInputProps): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (props.grabFocus) {\n inputRef.current?.focus();\n }\n }, [props.grabFocus]);\n const value = props.bind[0];\n const [dirty, setDirty] = useState(false);\n const showError = dirty && props.error;\n return (\n <div class=\"field\">\n <label class=\"label\">\n {props.label}\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control has-icons-right\">\n <input\n value={value}\n type=\"tel\"\n placeholder={props.placeholder}\n class={showError ? \"input is-danger\" : \"input\"}\n onKeyPress={(e) => {\n if (e.key === \"Enter\" && props.onConfirm) {\n props.onConfirm();\n }\n }}\n onInput={(e) => {\n setDirty(true);\n props.bind[1]((e.target as HTMLInputElement).value);\n }}\n ref={inputRef}\n style={{ display: \"block\" }}\n />\n </div>\n {showError && <p class=\"help is-danger\">{props.error}</p>}\n </div>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\n\nexport interface TextInputProps {\n inputType?: \"text\" | \"number\" | \"multiline\" | \"password\";\n label: string;\n grabFocus?: boolean;\n disabled?: boolean;\n error?: string;\n placeholder?: string;\n tooltip?: string;\n onConfirm?: () => void;\n bind: [string, (x: string) => void];\n}\n\nconst TextInputType = function ({ inputType, grabFocus, ...rest }: any): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (grabFocus) {\n inputRef.current?.focus();\n }\n }, [grabFocus]);\n\n return inputType === \"multiline\" ? (\n <textarea {...rest} rows={5} ref={inputRef} style={{ height: \"unset\" }} />\n ) : (\n <input {...rest} type={inputType} ref={inputRef} />\n );\n};\n\nexport function TextInput(props: TextInputProps): VNode {\n const value = props.bind[0];\n const [dirty, setDirty] = useState(false);\n const showError = dirty && props.error;\n return (\n <div class=\"field\">\n <label class=\"label\">\n {props.label}\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control has-icons-right\">\n <TextInputType\n inputType={props.inputType}\n value={value}\n grabFocus={props.grabFocus}\n disabled={props.disabled}\n placeholder={props.placeholder}\n class={showError ? \"input is-danger\" : \"input\"}\n onKeyPress={(e: any) => {\n if (e.key === \"Enter\" && props.onConfirm) {\n props.onConfirm();\n }\n }}\n onInput={(e: any) => {\n setDirty(true);\n props.bind[1]((e.target as HTMLInputElement).value);\n }}\n style={{ display: \"block\" }}\n />\n </div>\n {showError && <p class=\"help is-danger\">{props.error}</p>}\n </div>\n );\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 */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../components/AsyncButton.js\";\n\nexport interface ConfirmModelProps {\n active?: boolean;\n description?: string;\n onCancel?: () => void;\n onConfirm?: () => Promise<void>;\n label?: string;\n cancelLabel?: 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 cancelLabel = \"Dismiss\",\n}: ConfirmModelProps): VNode {\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 <button class=\"button\" onClick={onCancel}>\n {cancelLabel}\n </button>\n <div\n class=\"buttons is-right\"\n style={{ width: \"100%\" }}\n onKeyDown={(e) => {\n if (e.key === \"Escape\" && onCancel) onCancel();\n }}\n >\n <AsyncButton\n grabFocus\n class={danger ? \"button is-danger \" : \"button is-info \"}\n disabled={disabled}\n onClick={onConfirm}\n >\n {label}\n </AsyncButton>\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 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 */\nimport { AuthMethod, ReducerStateBackup } from \"@gnu-taler/anastasis-core\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport AddingProviderScreen from \"./AddingProviderScreen/index.js\";\nimport {\n authMethods,\n AuthMethodSetupProps,\n AuthMethodWithRemove,\n isKnownAuthMethods,\n KnownAuthMethods,\n} from \"./authMethod/index.js\";\nimport { ConfirmModal } from \"./ConfirmModal.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nconst getKeys = Object.keys as <T extends object>(obj: T) => Array<keyof T>;\n\nexport function AuthenticationEditorScreen(): VNode {\n const [noProvidersAck, setNoProvidersAck] = useState(false);\n const [selectedMethod, setSelectedMethod] = useState<\n KnownAuthMethods | undefined\n >(undefined);\n const [tooFewAuths, setTooFewAuths] = useState(false);\n const [manageProvider, setManageProvider] = useState<string | undefined>(\n undefined,\n );\n\n // const [addingProvider, setAddingProvider] = useState<string | undefined>(undefined)\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n const configuredAuthMethods: AuthMethod[] =\n reducer.currentReducerState.authentication_methods ?? [];\n\n function removeByIndex(index: number): void {\n if (reducer)\n reducer.transition(\"delete_authentication\", {\n authentication_method: index,\n });\n }\n\n const camByType: { [s: string]: AuthMethodWithRemove[] } = {};\n for (let index = 0; index < configuredAuthMethods.length; index++) {\n const cam = {\n ...configuredAuthMethods[index],\n remove: () => removeByIndex(index),\n };\n const prevValue = camByType[cam.type] || [];\n prevValue.push(cam);\n camByType[cam.type] = prevValue;\n }\n\n const providers = reducer.currentReducerState.authentication_providers!;\n\n const authAvailableSet = new Set<string>();\n for (const provKey of Object.keys(providers)) {\n const p = providers[provKey];\n if (p.status === \"ok\") {\n for (const meth of p.methods) {\n authAvailableSet.add(meth.type);\n }\n }\n }\n\n if (manageProvider !== undefined) {\n return (\n <AddingProviderScreen\n onCancel={async () => setManageProvider(undefined)}\n providerType={\n isKnownAuthMethods(manageProvider) ? manageProvider : undefined\n }\n />\n );\n }\n\n if (selectedMethod) {\n const cancel = (): void => setSelectedMethod(undefined);\n const addMethod = (args: any): void => {\n reducer.transition(\"add_authentication\", args);\n setSelectedMethod(undefined);\n };\n\n const AuthSetup =\n authMethods[selectedMethod].setup ?? AuthMethodNotImplemented;\n return (\n <Fragment>\n <AuthSetup\n cancel={cancel}\n configured={camByType[selectedMethod] || []}\n addAuthMethod={addMethod}\n method={selectedMethod}\n />\n\n {!authAvailableSet.has(selectedMethod) && (\n <ConfirmModal\n active\n onCancel={cancel}\n description=\"No providers found\"\n label=\"Add a provider manually\"\n onConfirm={async () => {\n setManageProvider(selectedMethod);\n }}\n >\n <p>\n We have found no Anastasis providers that support this\n authentication method. You can add a provider manually. To add a\n provider you must know the provider URL (e.g.\n https://provider.com)\n </p>\n <p>\n <a>Learn more about Anastasis providers</a>\n </p>\n </ConfirmModal>\n )}\n </Fragment>\n );\n }\n\n function MethodButton(props: { method: KnownAuthMethods }): VNode {\n if (authMethods[props.method].skip) return <div />;\n\n return (\n <div class=\"block\">\n <button\n style={{ justifyContent: \"space-between\" }}\n class=\"button is-fullwidth\"\n onClick={() => {\n setSelectedMethod(props.method);\n }}\n >\n <div style={{ display: \"flex\" }}>\n <span class=\"icon \">{authMethods[props.method].icon}</span>\n {authAvailableSet.has(props.method) ? (\n <span>Add a {authMethods[props.method].label} challenge</span>\n ) : (\n <span>Add a {authMethods[props.method].label} provider</span>\n )}\n </div>\n {!authAvailableSet.has(props.method) && (\n <span class=\"icon has-text-danger\">\n <i class=\"mdi mdi-exclamation-thick\" />\n </span>\n )}\n {camByType[props.method] && (\n <span class=\"tag is-info\">{camByType[props.method].length}</span>\n )}\n </button>\n </div>\n );\n }\n const errors =\n configuredAuthMethods.length < 2\n ? \"There is not enough authentication methods.\"\n : undefined;\n const handleNext = async () => {\n const st = reducer.currentReducerState as ReducerStateBackup;\n if ((st.authentication_methods ?? []).length <= 2) {\n setTooFewAuths(true);\n } else {\n await reducer.transition(\"next\", {});\n }\n };\n return (\n <AnastasisClientFrame\n title=\"Backup: Configure Authentication Methods\"\n hideNext={errors}\n onNext={handleNext}\n >\n <div class=\"columns\">\n <div class=\"column\">\n <div>\n {getKeys(authMethods).map((method) => (\n <MethodButton key={method} method={method} />\n ))}\n </div>\n {tooFewAuths ? (\n <ConfirmModal\n active={tooFewAuths}\n onCancel={() => setTooFewAuths(false)}\n description=\"Too few auth methods configured\"\n label=\"Proceed anyway\"\n onConfirm={() => reducer.transition(\"next\", {})}\n >\n You have selected fewer than 3 authentication methods. We\n recommend that you add at least 3.\n </ConfirmModal>\n ) : null}\n {authAvailableSet.size === 0 && (\n <ConfirmModal\n active={!noProvidersAck}\n onCancel={() => setNoProvidersAck(true)}\n description=\"No providers found\"\n label=\"Add a provider manually\"\n onConfirm={async () => {\n setManageProvider(\"\");\n }}\n >\n <p>\n We have found no Anastasis providers for your chosen country /\n currency. You can add a providers manually. To add a provider\n you must know the provider URL (e.g. https://provider.com)\n </p>\n <p>\n <a>Learn more about Anastasis providers</a>\n </p>\n </ConfirmModal>\n )}\n </div>\n <div class=\"column\">\n <p class=\"block\">\n When recovering your secret data, you will be asked to verify your\n identity via the methods you configure here. The list of\n authentication method is defined by the backup provider list.\n </p>\n <p class=\"block\">\n <button\n class=\"button is-info\"\n onClick={() => setManageProvider(\"\")}\n >\n Manage backup providers\n </button>\n </p>\n {authAvailableSet.size > 0 && (\n <p class=\"block\">\n We couldn't find provider for some of the authentication\n methods.\n </p>\n )}\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\nfunction AuthMethodNotImplemented(props: AuthMethodSetupProps): VNode {\n return (\n <AnastasisClientFrame hideNav title={`Add ${props.method} authentication`}>\n <p>This auth method is not implemented yet, please choose another one.</p>\n <button onClick={() => props.cancel()}>Cancel</button>\n </AnastasisClientFrame>\n );\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 { h, VNode } from \"preact\";\n\nexport default function InvalidState(): VNode {\n return <div>invalid state</div>;\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 { h, VNode } from \"preact\";\n\nexport default function NoReducer(): VNode {\n return <div>no reducer</div>;\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 */\nimport {\n AuthenticationProviderStatusError,\n AuthenticationProviderStatusOk,\n BackupStates,\n RecoveryStates,\n ReducerState,\n ReducerStateRecovery,\n} from \"@gnu-taler/anastasis-core\";\nimport { VNode } from \"preact\";\n\nconst noop = async (): Promise<void> => {\n return;\n};\n\nconst base = {\n continents: [\n {\n name: \"Europe\",\n },\n {\n name: \"India\",\n },\n {\n name: \"Asia\",\n },\n {\n name: \"North America\",\n },\n {\n name: \"Testcontinent\",\n },\n ],\n countries: [\n {\n code: \"xx\",\n name: \"Testland\",\n continent: \"Testcontinent\",\n continent_i18n: {\n de_DE: \"Testkontinent\",\n },\n name_i18n: {\n de_DE: \"Testlandt\",\n de_CH: \"Testlandi\",\n fr_FR: \"Testpais\",\n en_UK: \"Testland\",\n },\n currency: \"TESTKUDOS\",\n call_code: \"+00\",\n },\n {\n code: \"xy\",\n name: \"Demoland\",\n continent: \"Testcontinent\",\n continent_i18n: {\n de_DE: \"Testkontinent\",\n },\n name_i18n: {\n de_DE: \"Demolandt\",\n de_CH: \"Demolandi\",\n fr_FR: \"Demopais\",\n en_UK: \"Demoland\",\n },\n currency: \"KUDOS\",\n call_code: \"+01\",\n },\n ],\n authentication_providers: {\n \"http://localhost:8086/\": {\n status: \"ok\",\n http_status: 200,\n annual_fee: \"COL:0\",\n business_name: \"Anastasis Local\",\n currency: \"COL\",\n liability_limit: \"COL:10\",\n methods: [\n {\n type: \"question\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"sms\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"email\",\n usage_fee: \"COL:0\",\n },\n ],\n provider_salt: \"WBMDD76BR1E90YQ5AHBMKPH7GW\",\n storage_limit_in_megabytes: 16,\n truth_upload_fee: \"COL:0\",\n } as AuthenticationProviderStatusOk,\n \"https://kudos.demo.anastasis.lu/\": {\n status: \"ok\",\n http_status: 200,\n annual_fee: \"COL:0\",\n business_name: \"Anastasis Kudo\",\n currency: \"COL\",\n liability_limit: \"COL:10\",\n methods: [\n {\n type: \"question\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"email\",\n usage_fee: \"COL:0\",\n },\n ],\n provider_salt: \"WBMDD76BR1E90YQ5AHBMKPH7GW\",\n storage_limit_in_megabytes: 16,\n truth_upload_fee: \"COL:0\",\n } as AuthenticationProviderStatusOk,\n \"https://anastasis.demo.taler.net/\": {\n status: \"ok\",\n http_status: 200,\n annual_fee: \"COL:0\",\n business_name: \"Anastasis Demo\",\n currency: \"COL\",\n liability_limit: \"COL:10\",\n methods: [\n {\n type: \"question\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"sms\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"totp\",\n usage_fee: \"COL:0\",\n },\n ],\n provider_salt: \"WBMDD76BR1E90YQ5AHBMKPH7GW\",\n storage_limit_in_megabytes: 16,\n truth_upload_fee: \"COL:0\",\n } as AuthenticationProviderStatusOk,\n\n \"http://localhost:8087/\": {\n status: \"error\",\n code: 8414,\n hint: \"request to provider failed\",\n } as AuthenticationProviderStatusError,\n \"http://localhost:8088/\": {\n status: \"error\",\n code: 8414,\n hint: \"request to provider failed\",\n } as AuthenticationProviderStatusError,\n \"http://localhost:8089/\": {\n status: \"error\",\n code: 8414,\n hint: \"request to provider failed\",\n } as AuthenticationProviderStatusError,\n },\n} as Partial<ReducerState>;\n\nexport const reducerStatesExample = {\n initial: undefined,\n recoverySelectCountry: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.CountrySelecting,\n } as ReducerState,\n recoverySelectContinent: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ContinentSelecting,\n } as ReducerState,\n secretSelection: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.SecretSelecting,\n } as ReducerState,\n recoveryFinished: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.RecoveryFinished,\n } as ReducerState,\n challengeSelecting: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ChallengeSelecting,\n } as ReducerState,\n challengeSolving: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ChallengeSolving,\n } as ReducerStateRecovery,\n challengePaying: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ChallengePaying,\n } as ReducerState,\n recoveryAttributeEditing: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.UserAttributesCollecting,\n } as ReducerState,\n backupSelectCountry: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.CountrySelecting,\n } as ReducerState,\n backupSelectContinent: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.ContinentSelecting,\n } as ReducerState,\n secretEdition: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.SecretEditing,\n } as ReducerState,\n policyReview: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.PoliciesReviewing,\n } as ReducerState,\n policyPay: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.PoliciesPaying,\n } as ReducerState,\n backupFinished: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.BackupFinished,\n } as ReducerState,\n authEditing: {\n ...base,\n backup_state: BackupStates.AuthenticationsEditing,\n reducer_type: \"backup\",\n } as ReducerState,\n backupAttributeEditing: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.UserAttributesCollecting,\n } as ReducerState,\n truthsPaying: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.TruthsPaying,\n } as ReducerState,\n};\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 function compose<SType extends { status: string }, PType>(\n name: string,\n hook: (p: PType) => SType,\n vs: StateViewMap<SType>,\n): (p: PType) => VNode {\n const Component = (p: PType): VNode => {\n const state = hook(p);\n const s = state.status as unknown as SType[\"status\"];\n const c = vs[s] as unknown as StateFunc<SType>;\n return c(state);\n };\n // Component.name = `${name}`;\n return Component;\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 */\nimport { AuthMethod } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport postalIcon from \"../../../assets/icons/auth_method/postal.svg\";\nimport questionIcon from \"../../../assets/icons/auth_method/question.svg\";\nimport smsIcon from \"../../../assets/icons/auth_method/sms.svg\";\nimport { AuthMethodEmailSetup as EmailSetup } from \"./AuthMethodEmailSetup.js\";\nimport { AuthMethodEmailSolve as EmailSolve } from \"./AuthMethodEmailSolve.js\";\nimport { AuthMethodIbanSetup as IbanSetup } from \"./AuthMethodIbanSetup.js\";\nimport { AuthMethodIbanSolve as IbanSolve } from \"./AuthMethodIbanSolve.js\";\nimport { AuthMethodPostSetup as PostalSetup } from \"./AuthMethodPostSetup.js\";\nimport { AuthMethodPostSolve as PostalSolve } from \"./AuthMethodPostSolve.js\";\nimport { AuthMethodQuestionSetup as QuestionSetup } from \"./AuthMethodQuestionSetup.js\";\nimport { AuthMethodQuestionSolve as QuestionSolve } from \"./AuthMethodQuestionSolve.js\";\nimport { AuthMethodSmsSetup as SmsSetup } from \"./AuthMethodSmsSetup.js\";\nimport { AuthMethodSmsSolve as SmsSolve } from \"./AuthMethodSmsSolve.js\";\nimport { AuthMethodTotpSetup as TotpSetup } from \"./AuthMethodTotpSetup.js\";\nimport { AuthMethodTotpSolve as TotpSolve } from \"./AuthMethodTotpSolve.js\";\n\nexport type AuthMethodWithRemove = AuthMethod & { remove: () => void };\n\nexport interface AuthMethodSetupProps {\n method: string;\n addAuthMethod: (x: any) => void;\n configured: AuthMethodWithRemove[];\n cancel: () => void;\n}\n\nexport interface AuthMethodSolveProps {\n id: string;\n}\n\ninterface AuthMethodConfiguration {\n icon: VNode;\n label: string;\n setup: (props: AuthMethodSetupProps) => VNode;\n solve: (props: AuthMethodSolveProps) => VNode;\n skip?: boolean;\n}\n\nconst ALL_METHODS = [\n \"sms\",\n \"email\",\n \"post\",\n \"question\",\n \"totp\",\n \"iban\",\n] as const;\nexport type KnownAuthMethods = typeof ALL_METHODS[number];\nexport function isKnownAuthMethods(value: string): value is KnownAuthMethods {\n return ALL_METHODS.includes(value as KnownAuthMethods);\n}\n\ntype KnowMethodConfig = {\n [name in KnownAuthMethods]: AuthMethodConfiguration;\n};\n\nexport const authMethods: KnowMethodConfig = {\n question: {\n icon: <img src={questionIcon} />,\n label: \"Question\",\n setup: QuestionSetup,\n solve: QuestionSolve,\n },\n sms: {\n icon: <img src={smsIcon} />,\n label: \"SMS\",\n setup: SmsSetup,\n solve: SmsSolve,\n },\n email: {\n icon: <i class=\"mdi mdi-email\" />,\n label: \"Email\",\n setup: EmailSetup,\n solve: EmailSolve,\n },\n iban: {\n icon: <i class=\"mdi mdi-bank\" />,\n label: \"IBAN\",\n setup: IbanSetup,\n solve: IbanSolve,\n },\n post: {\n icon: <img src={postalIcon} />,\n label: \"Physical mail\",\n setup: PostalSetup,\n solve: PostalSolve,\n },\n totp: {\n icon: <i class=\"mdi mdi-devices\" />,\n label: \"TOTP\",\n setup: TotpSetup,\n solve: TotpSolve,\n },\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 */\nimport { encodeCrock, stringToBytes } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { EmailInput } from \"../../../components/fields/EmailInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nconst EMAIL_PATTERN =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nexport function AuthMethodEmailSetup({\n cancel,\n addAuthMethod,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [email, setEmail] = useState(\"\");\n const addEmailAuth = (): void =>\n addAuthMethod({\n authentication_method: {\n type: \"email\",\n instructions: `Email to ${email}`,\n challenge: encodeCrock(stringToBytes(email)),\n },\n });\n const emailError = !EMAIL_PATTERN.test(email)\n ? \"Email address is not valid\"\n : undefined;\n const errors = !email ? \"Add your email\" : emailError;\n\n function goNextIfNoErrors(): void {\n if (!errors) addEmailAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add email authentication\">\n <p>\n For email authentication, you need to provide an email address. When\n recovering your secret, you will need to enter the code you receive by\n email. Add the uuid from the challenge\n </p>\n <div>\n <EmailInput\n label=\"Email address\"\n error={emailError}\n onConfirm={goNextIfNoErrors}\n placeholder=\"email@domain.com\"\n bind={[email, setEmail]}\n />\n </div>\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your emails:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginBottom: \"auto\", marginTop: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addEmailAuth}\n >\n Add\n </button>\n </span>\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\n\nexport interface TextInputProps {\n label: string;\n grabFocus?: boolean;\n error?: string;\n placeholder?: string;\n tooltip?: string;\n onConfirm?: () => void;\n bind: [string, (x: string) => void];\n}\n\nexport function EmailInput(props: TextInputProps): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (props.grabFocus) {\n inputRef.current?.focus();\n }\n }, [props.grabFocus]);\n const value = props.bind[0];\n const [dirty, setDirty] = useState(false);\n const showError = dirty && props.error;\n return (\n <div class=\"field\">\n <label class=\"label\">\n {props.label}\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control has-icons-right\">\n <input\n value={value}\n required\n placeholder={props.placeholder}\n type=\"email\"\n class={showError ? \"input is-danger\" : \"input\"}\n onKeyPress={(e) => {\n if (e.key === \"Enter\" && props.onConfirm) {\n props.onConfirm();\n }\n }}\n onInput={(e) => {\n setDirty(true);\n props.bind[1]((e.target as HTMLInputElement).value);\n }}\n ref={inputRef}\n style={{ display: \"block\" }}\n />\n </div>\n {showError && <p class=\"help is-danger\">{props.error}</p>}\n </div>\n );\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\n/**\n * Imports.\n */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { useTranslationContext } from \"../../../context/translation.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodEmailSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, _setAnswer] = useState(\"A-\");\n\n function setAnswer(str: string): void {\n //A-12345-678-1234-5678\n const unformatted = str\n .replace(/^A-/, \"\")\n .replace(/-/g, \"\")\n .toLocaleUpperCase();\n\n let result = `A-${unformatted.substring(0, 5)}`;\n if (unformatted.length > 5) {\n result += `-${unformatted.substring(5, 8)}`;\n }\n if (unformatted.length > 8) {\n result += `-${unformatted.substring(8, 12)}`;\n }\n if (unformatted.length > 12) {\n result += `-${unformatted.substring(12)}`;\n }\n\n _setAnswer(result);\n }\n const [expanded, setExpanded] = useState(false);\n const { i18n } = useTranslationContext();\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state, no recovery state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state, no challenge id</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", {\n answer: `A-${answer.replace(/^A-/, \"\").replace(/-/g, \"\").trim()}`,\n });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n const error =\n answer.length > 21\n ? i18n.str`The answer should not be greater than 21 characters.`\n : undefined;\n\n return (\n <AnastasisClientFrame hideNav title=\"Email challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>\n An email has been sent to &quot;<b>{selectedChallenge.instructions}</b>\n &quot;. The message has and identification code and recovery code that\n starts with &quot;\n <b>A-</b>&quot;. Wait the message to arrive and the enter the recovery\n code below.\n </p>\n {!expanded ? (\n <p>\n The identification code in the email should start with &quot;\n {selectedUuid.substring(0, 10)}&quot;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip=\"click to expand\"\n onClick={() => setExpanded((e) => !e)}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </p>\n ) : (\n <p>\n The identification code in the email is &quot;{selectedUuid}&quot;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip=\"click to show less code\"\n onClick={() => setExpanded((e) => !e)}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </p>\n )}\n <TextInput\n label=\"Answer\"\n grabFocus\n onConfirm={onNext}\n bind={[answer, setAnswer]}\n error={error}\n placeholder=\"A-12345-678-1234-5678\"\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton\n class=\"button is-info\"\n onClick={onNext}\n disabled={!!error}\n >\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport {\n ChallengeFeedback,\n ChallengeFeedbackStatus,\n} from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { Notifications } from \"../../components/Notifications.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"./authMethod/index.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function SolveOverviewFeedbackDisplay(props: {\n feedback?: ChallengeFeedback;\n}): VNode {\n const { feedback } = props;\n if (!feedback) {\n return <div />;\n }\n switch (feedback.state) {\n case ChallengeFeedbackStatus.TalerPayment:\n return (\n <Notifications\n notifications={[\n {\n type: \"INFO\",\n message: `Message from provider`,\n description: (\n <span>\n To pay you can{\" \"}\n <a\n href={feedback.taler_pay_uri}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n click here\n </a>\n </span>\n ),\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.IbanInstructions:\n return (\n <Notifications\n notifications={[\n {\n type: \"INFO\",\n message: `Message from provider`,\n description: `Need to send a wire transfer to \"${feedback.target_business_name}\"`,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.ServerFailure:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: `Server error: response code ${feedback.http_status}`,\n description: !feedback.error_response\n ? undefined\n : `More information: ${JSON.stringify(\n feedback.error_response,\n )}`,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.RateLimitExceeded:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: \"There were to many failed attempts.\",\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.Unsupported:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: `This client doesn't support solving this type of challenge`,\n description: `Use another version or contact the provider. Type of challenge \"${feedback.unsupported_method}\"`,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.TruthUnknown:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: `Provider doesn't recognize the type of challenge`,\n description: \"Contact the provider for further information\",\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.CodeInFile:\n return (\n <Notifications\n notifications={[\n {\n type: \"INFO\",\n message: `Required TAN can be found in file \"${feedback.filename}\"`,\n description: feedback.display_hint\n ? `HINT: ${feedback.display_hint}`\n : undefined,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.CodeSent:\n return (\n <Notifications\n notifications={[\n {\n type: \"INFO\",\n message: `Code sent to address \"${feedback.address_hint}\"`,\n description: feedback.display_hint\n ? `HINT: ${feedback.display_hint}`\n : undefined,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.IncorrectAnswer:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: `The answer is wrong.`,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.Solved:\n return (\n <Notifications\n notifications={[\n {\n type: \"SUCCESS\",\n message: `This challenge is solved`,\n },\n ]}\n />\n );\n }\n}\n\nexport function SolveScreen(): VNode {\n const reducer = useAnastasisContext();\n\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n function SolveNotImplemented(): VNode {\n return (\n <AnastasisClientFrame hideNav title=\"Not implemented\">\n <p>\n The challenge selected is not supported for this UI. Please update\n this version or try using another policy.\n </p>\n {reducer && (\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n )}\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const selectedChallenge = chArr.find((ch) => ch.uuid === selectedUuid);\n\n const SolveDialog =\n !selectedChallenge ||\n !authMethods[selectedChallenge.type as KnownAuthMethods]\n ? SolveNotImplemented\n : authMethods[selectedChallenge.type as KnownAuthMethods].solve ??\n SolveNotImplemented;\n\n return <SolveDialog id={selectedUuid} />;\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 */\nimport {\n ChallengeFeedback,\n ChallengeFeedbackStatus,\n} from \"@gnu-taler/anastasis-core\";\n\nexport function shouldHideConfirm(feedback: ChallengeFeedback): boolean {\n return (\n feedback?.state === ChallengeFeedbackStatus.RateLimitExceeded ||\n feedback?.state === ChallengeFeedbackStatus.Unsupported ||\n feedback?.state === ChallengeFeedbackStatus.TruthUnknown\n );\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 */\nimport {\n canonicalJson,\n encodeCrock,\n stringToBytes,\n} from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nexport function AuthMethodIbanSetup({\n addAuthMethod,\n cancel,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [name, setName] = useState(\"\");\n const [account, setAccount] = useState(\"\");\n const addIbanAuth = (): void =>\n addAuthMethod({\n authentication_method: {\n type: \"iban\",\n instructions: `Wire transfer from ${account} with holder ${name}`,\n challenge: encodeCrock(\n stringToBytes(\n canonicalJson({\n name,\n account,\n }),\n ),\n ),\n },\n });\n const errors = !name\n ? \"Add an account name\"\n : !account\n ? \"Add an account IBAN number\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) addIbanAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add bank transfer authentication\">\n <p>\n For bank transfer authentication, you need to provide a bank account\n (account holder name and IBAN). When recovering your secret, you will be\n asked to pay the recovery fee via bank transfer from the account you\n provided here.\n </p>\n <div>\n <TextInput\n label=\"Bank account holder name\"\n grabFocus\n placeholder=\"John Smith\"\n onConfirm={goNextIfNoErrors}\n bind={[name, setName]}\n />\n <TextInput\n label=\"IBAN\"\n placeholder=\"DE91100000000123456789\"\n onConfirm={goNextIfNoErrors}\n bind={[account, setAccount]}\n />\n </div>\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your bank accounts:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginBottom: \"auto\", marginTop: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addIbanAuth}\n >\n Add\n </button>\n </span>\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodIbanSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, setAnswer] = useState(\"\");\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", { answer });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n return (\n <AnastasisClientFrame hideNav title=\"IBAN Challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>Send a wire transfer to the address,</p>\n <button class=\"button\">Check</button>\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton class=\"button is-info\" onClick={onNext}>\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport {\n canonicalJson,\n encodeCrock,\n stringToBytes,\n} from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nexport function AuthMethodPostSetup({\n addAuthMethod,\n cancel,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [fullName, setFullName] = useState(\"\");\n const [street, setStreet] = useState(\"\");\n const [city, setCity] = useState(\"\");\n const [postcode, setPostcode] = useState(\"\");\n const [country, setCountry] = useState(\"\");\n\n const addPostAuth = () => {\n const challengeJson = {\n full_name: fullName,\n street,\n city,\n postcode,\n country,\n };\n addAuthMethod({\n authentication_method: {\n type: \"post\",\n instructions: `Letter to address in postal code ${postcode}`,\n challenge: encodeCrock(stringToBytes(canonicalJson(challengeJson))),\n },\n });\n };\n\n const errors = !fullName\n ? \"The full name is missing\"\n : !street\n ? \"The street is missing\"\n : !city\n ? \"The city is missing\"\n : !postcode\n ? \"The postcode is missing\"\n : !country\n ? \"The country is missing\"\n : undefined;\n\n function goNextIfNoErrors(): void {\n if (!errors) addPostAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add postal authentication\">\n <p>\n For postal letter authentication, you need to provide a postal address.\n When recovering your secret, you will be asked to enter a code that you\n will receive in a letter to that address.\n </p>\n <div>\n <TextInput\n grabFocus\n label=\"Full Name\"\n bind={[fullName, setFullName]}\n onConfirm={goNextIfNoErrors}\n />\n </div>\n <div>\n <TextInput\n onConfirm={goNextIfNoErrors}\n label=\"Street\"\n bind={[street, setStreet]}\n />\n </div>\n <div>\n <TextInput\n onConfirm={goNextIfNoErrors}\n label=\"City\"\n bind={[city, setCity]}\n />\n </div>\n <div>\n <TextInput\n onConfirm={goNextIfNoErrors}\n label=\"Postal Code\"\n bind={[postcode, setPostcode]}\n />\n </div>\n <div>\n <TextInput\n onConfirm={goNextIfNoErrors}\n label=\"Country\"\n bind={[country, setCountry]}\n />\n </div>\n\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your postal code:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginBottom: \"auto\", marginTop: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addPostAuth}\n >\n Add\n </button>\n </span>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { useTranslationContext } from \"../../../context/translation.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodPostSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, _setAnswer] = useState(\"A-\");\n\n function setAnswer(str: string): void {\n //A-12345-678-1234-5678\n const unformatted = str\n .replace(/^A-/, \"\")\n .replace(/-/g, \"\")\n .toLocaleUpperCase();\n\n let result = `A-${unformatted.substring(0, 5)}`;\n if (unformatted.length > 5) {\n result += `-${unformatted.substring(5, 8)}`;\n }\n if (unformatted.length > 8) {\n result += `-${unformatted.substring(8, 12)}`;\n }\n if (unformatted.length > 12) {\n result += `-${unformatted.substring(12)}`;\n }\n\n _setAnswer(result);\n }\n const { i18n } = useTranslationContext();\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", {\n answer: `A-${answer.replace(/^A-/, \"\").replace(/-/g, \"\").trim()}`,\n });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n const error =\n answer.length > 21\n ? i18n.str`The answer should not be greater than 21 characters.`\n : undefined;\n\n return (\n <AnastasisClientFrame hideNav title=\"Postal Challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>Wait for the answer</p>\n <TextInput\n onConfirm={onNext}\n label=\"Answer\"\n grabFocus\n placeholder=\"A-12345-678-1234-5678\"\n error={error}\n bind={[answer, setAnswer]}\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton\n class=\"button is-info\"\n onClick={onNext}\n disabled={!!error}\n >\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { encodeCrock, stringToBytes } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nexport function AuthMethodQuestionSetup({\n cancel,\n addAuthMethod,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [questionText, setQuestionText] = useState(\"\");\n const [answerText, setAnswerText] = useState(\"\");\n const addQuestionAuth = (): void =>\n addAuthMethod({\n authentication_method: {\n type: \"question\",\n instructions: questionText,\n challenge: encodeCrock(stringToBytes(answerText)),\n },\n });\n\n const errors = !questionText\n ? \"Add your security question\"\n : !answerText\n ? \"Add the answer to your question\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) addQuestionAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add Security Question\">\n <div>\n <p>\n For security question authentication, you need to provide a question\n and its answer. When recovering your secret, you will be shown the\n question and you will need to type the answer exactly as you typed it\n here.\n </p>\n <p class=\"notification is-warning\">\n Note that the answer is case-sensitive and must be entered in exactly\n the same way (punctuation, spaces) during recovery.\n </p>\n <div>\n <TextInput\n label=\"Security question\"\n grabFocus\n onConfirm={goNextIfNoErrors}\n placeholder=\"Your question\"\n bind={[questionText, setQuestionText]}\n />\n </div>\n <div>\n <TextInput\n label=\"Answer\"\n onConfirm={goNextIfNoErrors}\n placeholder=\"Your answer\"\n bind={[answerText, setAnswerText]}\n />\n </div>\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addQuestionAuth}\n >\n Add\n </button>\n </span>\n </div>\n\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your security questions:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginBottom: \"auto\", marginTop: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodQuestionSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, setAnswer] = useState(\"\");\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", { answer });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n return (\n <AnastasisClientFrame hideNav title=\"Question challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>\n In this challenge you need to provide the answer for the next question:\n </p>\n <pre>{selectedChallenge.instructions}</pre>\n <p>Type the answer below</p>\n <TextInput\n label=\"Answer\"\n onConfirm={onNext}\n grabFocus\n bind={[answer, setAnswer]}\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton class=\"button is-info\" onClick={onNext}>\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { encodeCrock, stringToBytes } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\nimport { PhoneNumberInput } from \"../../../components/fields/NumberInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nconst REGEX_JUST_NUMBERS = /^\\+[0-9 ]*$/;\n\nfunction isJustNumbers(str: string): boolean {\n return REGEX_JUST_NUMBERS.test(str);\n}\n\nexport function AuthMethodSmsSetup({\n addAuthMethod,\n cancel,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [mobileNumber, setMobileNumber] = useState(\"+\");\n const addSmsAuth = (): void => {\n addAuthMethod({\n authentication_method: {\n type: \"sms\",\n instructions: `SMS to ${mobileNumber}`,\n challenge: encodeCrock(stringToBytes(mobileNumber)),\n },\n });\n };\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n inputRef.current?.focus();\n }, []);\n const errors = !mobileNumber\n ? \"Add a mobile number\"\n : !mobileNumber.startsWith(\"+\")\n ? \"Mobile number should start with '+'\"\n : !isJustNumbers(mobileNumber)\n ? \"Mobile number can't have other than numbers\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) addSmsAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add SMS authentication\">\n <div>\n <p>\n For SMS authentication, you need to provide a mobile number. When\n recovering your secret, you will be asked to enter the code you\n receive via SMS.\n </p>\n <div class=\"container\">\n <PhoneNumberInput\n label=\"Mobile number\"\n placeholder=\"Your mobile number\"\n onConfirm={goNextIfNoErrors}\n error={errors}\n grabFocus\n bind={[mobileNumber, setMobileNumber]}\n />\n <div>\n Enter mobile number including +CC international dialing prefix.\n </div>\n </div>\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your mobile numbers:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginTop: \"auto\", marginBottom: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addSmsAuth}\n >\n Add\n </button>\n </span>\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { useTranslationContext } from \"../../../context/translation.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodSmsSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, _setAnswer] = useState(\"A-\");\n\n function setAnswer(str: string): void {\n //A-12345-678-1234-5678\n const unformatted = str\n .replace(/^A-/, \"\")\n .replace(/-/g, \"\")\n .toLocaleUpperCase();\n\n let result = `A-${unformatted.substring(0, 5)}`;\n if (unformatted.length > 5) {\n result += `-${unformatted.substring(5, 8)}`;\n }\n if (unformatted.length > 8) {\n result += `-${unformatted.substring(8, 12)}`;\n }\n if (unformatted.length > 12) {\n result += `-${unformatted.substring(12)}`;\n }\n\n _setAnswer(result);\n }\n const { i18n } = useTranslationContext();\n\n const [expanded, setExpanded] = useState(false);\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", {\n answer: `A-${answer.replace(/^A-/, \"\").replace(/-/g, \"\").trim()}`,\n });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n const error =\n answer.length > 21\n ? i18n.str`The answer should not be greater than 21 characters.`\n : undefined;\n\n return (\n <AnastasisClientFrame hideNav title=\"SMS Challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>\n An sms has been sent to &quot;<b>{selectedChallenge.instructions}</b>\n &quot;. The message has and identification code and recovery code that\n starts with &quot;\n <b>A-</b>&quot;. Wait the message to arrive and the enter the recovery\n code below.\n </p>\n {!expanded ? (\n <p>\n The identification code in the SMS should start with &quot;\n {selectedUuid.substring(0, 10)}&quot;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip=\"click to expand\"\n onClick={() => setExpanded((e) => !e)}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </p>\n ) : (\n <p>\n The identification code in the SMS is &quot;{selectedUuid}&quot;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip=\"click to show less code\"\n onClick={() => setExpanded((e) => !e)}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </p>\n )}\n <TextInput\n label=\"Answer\"\n grabFocus\n onConfirm={onNext}\n bind={[answer, setAnswer]}\n error={error}\n placeholder=\"A-12345-678-1234-5678\"\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton\n class=\"button is-info\"\n onClick={onNext}\n disabled={!!error}\n >\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { encodeCrock } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useMemo, useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { QR } from \"../../../components/QR.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\nimport { base32enc, computeTOTPandCheck } from \"./totp.js\";\n\n/**\n * This is hard-coded in the protocol for TOTP auth.\n */\nconst ANASTASIS_TOTP_DIGITS = 8;\n\nexport function AuthMethodTotpSetup({\n addAuthMethod,\n cancel,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [name, setName] = useState(\"anastasis\");\n const [test, setTest] = useState(\"\");\n const secretKey = useMemo(() => {\n const array = new Uint8Array(32);\n if (typeof window === \"undefined\") return array;\n return window.crypto.getRandomValues(array);\n }, []);\n\n const secret32 = base32enc(secretKey);\n const totpURL = `otpauth://totp/${name}?digits=${ANASTASIS_TOTP_DIGITS}&secret=${secret32}`;\n\n const addTotpAuth = (): void =>\n addAuthMethod({\n authentication_method: {\n type: \"totp\",\n instructions: `Enter ${ANASTASIS_TOTP_DIGITS} digits code for \"${name}\"`,\n challenge: encodeCrock(secretKey),\n },\n });\n\n const testCodeMatches = computeTOTPandCheck(secretKey, 8, parseInt(test, 10));\n\n const errors = !name\n ? \"The TOTP name is missing\"\n : !testCodeMatches\n ? \"The test code doesn't match\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) addTotpAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add TOTP authentication\">\n <p>\n For Time-based One-Time Password (TOTP) authentication, you need to set\n a name for the TOTP secret. Then, you must scan the generated QR code\n with your TOTP App to import the TOTP secret into your TOTP App.\n </p>\n <div class=\"block\">\n <TextInput label=\"TOTP Name\" grabFocus bind={[name, setName]} />\n </div>\n <div style={{ height: 300 }}>\n <QR text={totpURL} />\n </div>\n <p>\n Confirm that your TOTP App works by entering the current 8-digit TOTP\n code here:\n </p>\n <TextInput\n label=\"Test code\"\n onConfirm={goNextIfNoErrors}\n bind={[test, setTest]}\n />\n <div>\n We note that Google&apos;s implementation of TOTP is incomplete and will\n not work. We recommend using FreeOTP+.\n </div>\n\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your TOTP numbers:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginTop: \"auto\", marginBottom: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addTotpAuth}\n >\n Add\n </button>\n </span>\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 { 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 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", "import { packedValue, EncodingType, FormatType } from \"./custom_types\";\n/**\n * Return type for all the *2packed functions\n */\nconst b64Tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nconst arraybuffer_error = \"ARRAYBUFFER not supported by this environment\";\nconst uint8array_error = \"UINT8ARRAY not supported by this environment\";\n\n/**\n * Convert a string to an array of words.\n *\n * There is a known bug with an odd number of existing bytes and using a UTF-16 encoding. However, this function is\n * used such that the existing bytes are always a result of a previous UTF-16 str2packed call and therefore there \n * should never be an odd number of existing bytes.\n\n * @param str Unicode string to be converted to binary representation.\n * @param utfType The Unicode type to use to encode the source string.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked`.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction str2packed(\n str: string,\n utfType: EncodingType,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let codePnt,\n codePntArr,\n byteCnt = 0,\n i,\n j,\n intOffset,\n byteOffset,\n shiftModifier,\n transposeBytes;\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3;\n\n if (\"UTF8\" === utfType) {\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n for (i = 0; i < str.length; i += 1) {\n codePnt = str.charCodeAt(i);\n codePntArr = [];\n\n if (0x80 > codePnt) {\n codePntArr.push(codePnt);\n } else if (0x800 > codePnt) {\n codePntArr.push(0xc0 | (codePnt >>> 6));\n codePntArr.push(0x80 | (codePnt & 0x3f));\n } else if (0xd800 > codePnt || 0xe000 <= codePnt) {\n codePntArr.push(0xe0 | (codePnt >>> 12), 0x80 | ((codePnt >>> 6) & 0x3f), 0x80 | (codePnt & 0x3f));\n } else {\n i += 1;\n codePnt = 0x10000 + (((codePnt & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n codePntArr.push(\n 0xf0 | (codePnt >>> 18),\n 0x80 | ((codePnt >>> 12) & 0x3f),\n 0x80 | ((codePnt >>> 6) & 0x3f),\n 0x80 | (codePnt & 0x3f)\n );\n }\n\n for (j = 0; j < codePntArr.length; j += 1) {\n byteOffset = byteCnt + existingByteLen;\n intOffset = byteOffset >>> 2;\n while (packed.length <= intOffset) {\n packed.push(0);\n }\n /* Known bug kicks in here */\n packed[intOffset] |= codePntArr[j] << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n byteCnt += 1;\n }\n }\n } else {\n /* UTF16BE or UTF16LE */\n shiftModifier = bigEndianMod === -1 ? 2 : 0;\n /* Internally strings are UTF-16BE so transpose bytes under two conditions:\n * need LE and not switching endianness due to SHA-3\n * need BE and switching endianness due to SHA-3 */\n transposeBytes = (\"UTF16LE\" === utfType && bigEndianMod !== 1) || (\"UTF16LE\" !== utfType && bigEndianMod === 1);\n for (i = 0; i < str.length; i += 1) {\n codePnt = str.charCodeAt(i);\n if (transposeBytes === true) {\n j = codePnt & 0xff;\n codePnt = (j << 8) | (codePnt >>> 8);\n }\n\n byteOffset = byteCnt + existingByteLen;\n intOffset = byteOffset >>> 2;\n while (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |= codePnt << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n byteCnt += 2;\n }\n }\n return { value: packed, binLen: byteCnt * 8 + existingPackedLen };\n}\n\n/**\n * Convert a hex string to an array of words.\n *\n * @param str Hexadecimal string to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction hex2packed(\n str: string,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let i, num, intOffset, byteOffset;\n\n if (0 !== str.length % 2) {\n throw new Error(\"String of HEX type must be in byte increments\");\n }\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < str.length; i += 2) {\n num = parseInt(str.substr(i, 2), 16);\n if (!isNaN(num)) {\n byteOffset = (i >>> 1) + existingByteLen;\n intOffset = byteOffset >>> 2;\n while (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |= num << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n } else {\n throw new Error(\"String of HEX type contains invalid characters\");\n }\n }\n\n return { value: packed, binLen: str.length * 4 + existingPackedLen };\n}\n\n/**\n * Convert a string of raw bytes to an array of words.\n *\n * @param str String of raw bytes to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction bytes2packed(\n str: string,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let codePnt, i, intOffset, byteOffset;\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < str.length; i += 1) {\n codePnt = str.charCodeAt(i);\n\n byteOffset = i + existingByteLen;\n intOffset = byteOffset >>> 2;\n if (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |= codePnt << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n }\n\n return { value: packed, binLen: str.length * 8 + existingPackedLen };\n}\n\n/**\n * Convert a base-64 string to an array of words.\n *\n * @param str Base64-encoded string to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction b642packed(\n str: string,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let byteCnt = 0,\n index,\n i,\n j,\n tmpInt,\n strPart,\n intOffset,\n byteOffset;\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3,\n shiftModifier = bigEndianMod === -1 ? 3 : 0,\n firstEqual = str.indexOf(\"=\");\n\n if (-1 === str.search(/^[a-zA-Z0-9=+/]+$/)) {\n throw new Error(\"Invalid character in base-64 string\");\n }\n\n str = str.replace(/=/g, \"\");\n if (-1 !== firstEqual && firstEqual < str.length) {\n throw new Error(\"Invalid '=' found in base-64 string\");\n }\n\n for (i = 0; i < str.length; i += 4) {\n strPart = str.substr(i, 4);\n tmpInt = 0;\n\n for (j = 0; j < strPart.length; j += 1) {\n index = b64Tab.indexOf(strPart.charAt(j));\n tmpInt |= index << (18 - 6 * j);\n }\n\n for (j = 0; j < strPart.length - 1; j += 1) {\n byteOffset = byteCnt + existingByteLen;\n intOffset = byteOffset >>> 2;\n while (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |=\n ((tmpInt >>> (16 - j * 8)) & 0xff) << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n byteCnt += 1;\n }\n }\n\n return { value: packed, binLen: byteCnt * 8 + existingPackedLen };\n}\n\n/**\n * Convert an Uint8Array to an array of words.\n *\n * @param arr Uint8Array to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction uint8array2packed(\n arr: Uint8Array,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let i, intOffset, byteOffset;\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < arr.length; i += 1) {\n byteOffset = i + existingByteLen;\n intOffset = byteOffset >>> 2;\n if (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |= arr[i] << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n }\n\n return { value: packed, binLen: arr.length * 8 + existingPackedLen };\n}\n\n/**\n * Convert an ArrayBuffer to an array of words\n *\n * @param arr ArrayBuffer to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction arraybuffer2packed(\n arr: ArrayBuffer,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n return uint8array2packed(new Uint8Array(arr), existingPacked, existingPackedLen, bigEndianMod);\n}\n\n/**\n * Function that takes an input format and UTF encoding and returns the appropriate function used to convert the input.\n *\n * @param format The format of the input to be converted\n * @param utfType The string encoding to use for TEXT inputs.\n * @param bigEndianMod Modifier for whether hash function is big or small endian\n * @returns Function that will convert an input to a packed int array.\n */\nexport function getStrConverter(\n format: FormatType,\n utfType: EncodingType,\n bigEndianMod: -1 | 1\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n): (input: any, existingBin?: number[], existingBinLen?: number) => packedValue {\n /* Validate encoding */\n switch (utfType) {\n case \"UTF8\":\n /* Fallthrough */\n case \"UTF16BE\":\n /* Fallthrough */\n case \"UTF16LE\":\n /* Fallthrough */\n break;\n default:\n throw new Error(\"encoding must be UTF8, UTF16BE, or UTF16LE\");\n }\n\n /* Map inputFormat to the appropriate converter */\n switch (format) {\n case \"HEX\":\n /**\n * @param str String of hexadecimal bytes to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (str: string, existingBin?: number[], existingBinLen?: number): packedValue {\n return hex2packed(str, existingBin, existingBinLen, bigEndianMod);\n };\n case \"TEXT\":\n /**\n * @param str Unicode string to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (str: string, existingBin?: number[], existingBinLen?: number): packedValue {\n return str2packed(str, utfType, existingBin, existingBinLen, bigEndianMod);\n };\n case \"B64\":\n /**\n * @param str Base64-encoded string to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (str: string, existingBin?: number[], existingBinLen?: number): packedValue {\n return b642packed(str, existingBin, existingBinLen, bigEndianMod);\n };\n case \"BYTES\":\n /**\n * @param str String of raw bytes to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (str: string, existingBin?: number[], existingBinLen?: number): packedValue {\n return bytes2packed(str, existingBin, existingBinLen, bigEndianMod);\n };\n case \"ARRAYBUFFER\":\n try {\n new ArrayBuffer(0);\n } catch (ignore) {\n throw new Error(arraybuffer_error);\n }\n /**\n * @param arr ArrayBuffer to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (arr: ArrayBuffer, existingBin?: number[], existingBinLen?: number): packedValue {\n return arraybuffer2packed(arr, existingBin, existingBinLen, bigEndianMod);\n };\n case \"UINT8ARRAY\":\n try {\n new Uint8Array(0);\n } catch (ignore) {\n throw new Error(uint8array_error);\n }\n /**\n * @param arr Uint8Array to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (arr: Uint8Array, existingBin?: number[], existingBinLen?: number): packedValue {\n return uint8array2packed(arr, existingBin, existingBinLen, bigEndianMod);\n };\n default:\n throw new Error(\"format must be HEX, TEXT, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY\");\n }\n}\n\n/**\n * Convert an array of words to a hexadecimal string.\n *\n * toString() won't work here because it removes preceding zeros (e.g. 0x00000001.toString === \"1\" rather than\n * \"00000001\" and 0.toString(16) === \"0\" rather than \"00\").\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @param formatOpts Hashmap containing validated output formatting options.\n * @returns Hexadecimal representation of `packed`.\n */\nexport function packed2hex(\n packed: number[],\n outputLength: number,\n bigEndianMod: -1 | 1,\n formatOpts: { outputUpper: boolean; b64Pad: string }\n): string {\n const hex_tab = \"0123456789abcdef\";\n let str = \"\",\n i,\n srcByte;\n\n const length = outputLength / 8,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < length; i += 1) {\n /* The below is more than a byte but it gets taken care of later */\n srcByte = packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)));\n str += hex_tab.charAt((srcByte >>> 4) & 0xf) + hex_tab.charAt(srcByte & 0xf);\n }\n\n return formatOpts[\"outputUpper\"] ? str.toUpperCase() : str;\n}\n\n/**\n * Convert an array of words to a base-64 string.\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @param formatOpts Hashmap containing validated output formatting options.\n * @returns Base64-encoded representation of `packed`.\n */\nexport function packed2b64(\n packed: number[],\n outputLength: number,\n bigEndianMod: -1 | 1,\n formatOpts: { outputUpper: boolean; b64Pad: string }\n): string {\n let str = \"\",\n i,\n j,\n triplet,\n int1,\n int2;\n\n const length = outputLength / 8,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < length; i += 3) {\n int1 = i + 1 < length ? packed[(i + 1) >>> 2] : 0;\n int2 = i + 2 < length ? packed[(i + 2) >>> 2] : 0;\n triplet =\n (((packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)))) & 0xff) << 16) |\n (((int1 >>> (8 * (shiftModifier + bigEndianMod * ((i + 1) % 4)))) & 0xff) << 8) |\n ((int2 >>> (8 * (shiftModifier + bigEndianMod * ((i + 2) % 4)))) & 0xff);\n for (j = 0; j < 4; j += 1) {\n if (i * 8 + j * 6 <= outputLength) {\n str += b64Tab.charAt((triplet >>> (6 * (3 - j))) & 0x3f);\n } else {\n str += formatOpts[\"b64Pad\"];\n }\n }\n }\n return str;\n}\n\n/**\n * Convert an array of words to raw bytes string.\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Raw bytes representation of `packed`.\n */\nexport function packed2bytes(packed: number[], outputLength: number, bigEndianMod: -1 | 1): string {\n let str = \"\",\n i,\n srcByte;\n\n const length = outputLength / 8,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < length; i += 1) {\n srcByte = (packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)))) & 0xff;\n str += String.fromCharCode(srcByte);\n }\n\n return str;\n}\n\n/**\n * Convert an array of words to an ArrayBuffer.\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns An ArrayBuffer containing bytes from `packed.\n */\nexport function packed2arraybuffer(packed: number[], outputLength: number, bigEndianMod: -1 | 1): ArrayBuffer {\n let i;\n const length = outputLength / 8,\n retVal = new ArrayBuffer(length),\n arrView = new Uint8Array(retVal),\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < length; i += 1) {\n arrView[i] = (packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)))) & 0xff;\n }\n\n return retVal;\n}\n\n/**\n * Convert an array of words to an Uint8Array.\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns An Uint8Array containing bytes from `packed.\n */\nexport function packed2uint8array(packed: number[], outputLength: number, bigEndianMod: -1 | 1): Uint8Array {\n let i;\n const length = outputLength / 8,\n shiftModifier = bigEndianMod === -1 ? 3 : 0,\n retVal = new Uint8Array(length);\n\n for (i = 0; i < length; i += 1) {\n retVal[i] = (packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)))) & 0xff;\n }\n\n return retVal;\n}\n\n/**\n * Function that takes an output format and associated parameters and returns a function that converts packed integers\n * to that format.\n *\n * @param format The desired output formatting.\n * @param outputBinLen Output length in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @param outputOptions Hashmap of output formatting options\n * @returns Function that will convert a packed integer array to desired format.\n */\nexport function getOutputConverter(\n format: \"HEX\" | \"B64\" | \"BYTES\",\n outputBinLen: number,\n bigEndianMod: -1 | 1,\n outputOptions: { outputUpper: boolean; b64Pad: string }\n): (binarray: number[]) => string;\nexport function getOutputConverter(\n format: \"ARRAYBUFFER\",\n outputBinLen: number,\n bigEndianMod: -1 | 1,\n outputOptions: { outputUpper: boolean; b64Pad: string }\n): (binarray: number[]) => ArrayBuffer;\nexport function getOutputConverter(\n format: \"UINT8ARRAY\",\n outputBinLen: number,\n bigEndianMod: -1 | 1,\n outputOptions: { outputUpper: boolean; b64Pad: string }\n): (binarray: number[]) => Uint8Array;\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function getOutputConverter(format: any, outputBinLen: any, bigEndianMod: any, outputOptions: any): any {\n switch (format) {\n case \"HEX\":\n return function (binarray: number[]): string {\n return packed2hex(binarray, outputBinLen, bigEndianMod, outputOptions);\n };\n case \"B64\":\n return function (binarray: number[]): string {\n return packed2b64(binarray, outputBinLen, bigEndianMod, outputOptions);\n };\n case \"BYTES\":\n return function (binarray: number[]): string {\n return packed2bytes(binarray, outputBinLen, bigEndianMod);\n };\n case \"ARRAYBUFFER\":\n try {\n /* Need to test ArrayBuffer support */\n new ArrayBuffer(0);\n } catch (ignore) {\n throw new Error(arraybuffer_error);\n }\n return function (binarray: number[]): ArrayBuffer {\n return packed2arraybuffer(binarray, outputBinLen, bigEndianMod);\n };\n case \"UINT8ARRAY\":\n try {\n /* Need to test Uint8Array support */\n new Uint8Array(0);\n } catch (ignore) {\n throw new Error(uint8array_error);\n }\n return function (binarray: number[]): Uint8Array {\n return packed2uint8array(binarray, outputBinLen, bigEndianMod);\n };\n default:\n throw new Error(\"format must be HEX, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY\");\n }\n}\n", "import { getStrConverter, getOutputConverter } from \"./converters\";\n\nimport {\n FormatType,\n EncodingType,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n packedValue,\n GenericInputType,\n} from \"./custom_types\";\n\nexport const TWO_PWR_32 = 4294967296;\n\n/* Constant used in SHA-2 families */\nexport const K_sha2 = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,\n 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8,\n 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,\n 0xc67178f2,\n];\n\n/* Constant used in SHA-2 families */\nexport const H_trunc = [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4];\n\n/* Constant used in SHA-2 families */\nexport const H_full = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];\n\nexport const sha_variant_error = \"Chosen SHA variant is not supported\";\nexport const mac_rounds_error = \"Cannot set numRounds with MAC\";\n\n/**\n * Concatenates 2 packed arrays. Clobbers array `a`.\n *\n * @param a First array to concatenate.\n * @param b Second array to concatenate.\n * @returns The concatentation of `a` + `b`.\n */\nexport function packedLEConcat(a: packedValue, b: packedValue): packedValue {\n let i, arrOffset;\n const aByteLen = a[\"binLen\"] >>> 3,\n bByteLen = b[\"binLen\"] >>> 3,\n leftShiftAmount = aByteLen << 3,\n rightShiftAmount = (4 - aByteLen) << 3;\n\n /* If a only contains \"full\" integers, we can just use concat which is so much easier */\n if (aByteLen % 4 !== 0) {\n for (i = 0; i < bByteLen; i += 4) {\n arrOffset = (aByteLen + i) >>> 2;\n /* Left shift chops off bits over 32-bits */\n a[\"value\"][arrOffset] |= b[\"value\"][i >>> 2] << leftShiftAmount;\n a[\"value\"].push(0);\n a[\"value\"][arrOffset + 1] |= b[\"value\"][i >>> 2] >>> rightShiftAmount;\n }\n\n /* Since an unconditional push was performed above, we may have pushed an extra value if it could have been\n encoded without it. Check if popping an int off (reducing total length by 4 bytes) is still bigger than the\n needed size. */\n if ((a[\"value\"].length << 2) - 4 >= bByteLen + aByteLen) {\n a[\"value\"].pop();\n }\n\n return { value: a[\"value\"], binLen: a[\"binLen\"] + b[\"binLen\"] };\n } else {\n return { value: a[\"value\"].concat(b[\"value\"]), binLen: a[\"binLen\"] + b[\"binLen\"] };\n }\n}\n\n/**\n * Validate hash list containing output formatting options, ensuring presence of every option or adding the default\n * value.\n *\n * @param options Hashmap of output formatting options from user.\n * @returns Validated hashmap containing output formatting options.\n */\nexport function getOutputOpts(options?: {\n outputUpper?: boolean;\n b64Pad?: string;\n shakeLen?: number;\n outputLen?: number;\n}): { outputUpper: boolean; b64Pad: string; outputLen: number } {\n const retVal = { outputUpper: false, b64Pad: \"=\", outputLen: -1 },\n outputOptions: { outputUpper?: boolean; b64Pad?: string; shakeLen?: number; outputLen?: number } = options || {},\n lenErrstr = \"Output length must be a multiple of 8\";\n\n retVal[\"outputUpper\"] = outputOptions[\"outputUpper\"] || false;\n\n if (outputOptions[\"b64Pad\"]) {\n retVal[\"b64Pad\"] = outputOptions[\"b64Pad\"];\n }\n\n if (outputOptions[\"outputLen\"]) {\n if (outputOptions[\"outputLen\"] % 8 !== 0) {\n throw new Error(lenErrstr);\n }\n retVal[\"outputLen\"] = outputOptions[\"outputLen\"];\n } else if (outputOptions[\"shakeLen\"]) {\n if (outputOptions[\"shakeLen\"] % 8 !== 0) {\n throw new Error(lenErrstr);\n }\n retVal[\"outputLen\"] = outputOptions[\"shakeLen\"];\n }\n\n if (\"boolean\" !== typeof retVal[\"outputUpper\"]) {\n throw new Error(\"Invalid outputUpper formatting option\");\n }\n\n if (\"string\" !== typeof retVal[\"b64Pad\"]) {\n throw new Error(\"Invalid b64Pad formatting option\");\n }\n\n return retVal;\n}\n\n/**\n * Parses an external constructor object and returns a packed number, if possible.\n *\n * @param key The human-friendly key name to prefix any errors with\n * @param value The input value object to parse\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @param fallback Fallback value if `value` is undefined. If not present and `value` is undefined, an Error is thrown\n */\nexport function parseInputOption(\n key: string,\n value: GenericInputType | undefined,\n bigEndianMod: -1 | 1,\n fallback?: packedValue\n): packedValue {\n const errStr = key + \" must include a value and format\";\n if (!value) {\n if (!fallback) {\n throw new Error(errStr);\n }\n return fallback;\n }\n\n if (typeof value[\"value\"] === \"undefined\" || !value[\"format\"]) {\n throw new Error(errStr);\n }\n\n return getStrConverter(\n value[\"format\"],\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - the value of encoding gets value checked by getStrConverter\n value[\"encoding\"] || \"UTF8\",\n bigEndianMod\n )(value[\"value\"]);\n}\n\nexport abstract class jsSHABase<StateT, VariantT> {\n /**\n * @param variant The desired SHA variant.\n * @param inputFormat The input format to be used in future `update` calls.\n * @param options Hashmap of extra input options.\n */\n /* Needed inputs */\n protected readonly shaVariant: VariantT;\n protected readonly inputFormat: FormatType;\n protected readonly utfType: EncodingType;\n protected readonly numRounds: number;\n\n /* State */\n protected abstract intermediateState: StateT;\n protected keyWithIPad: number[];\n protected keyWithOPad: number[];\n protected remainder: number[];\n protected remainderLen: number;\n protected updateCalled: boolean;\n protected processedLen: number;\n protected macKeySet: boolean;\n\n /* Variant specifics */\n protected abstract readonly variantBlockSize: number;\n protected abstract readonly bigEndianMod: -1 | 1;\n protected abstract readonly outputBinLen: number;\n protected abstract readonly isVariableLen: boolean;\n protected abstract readonly HMACSupported: boolean;\n\n /* Functions */\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n protected abstract readonly converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n protected abstract readonly roundFunc: (block: number[], H: StateT) => StateT;\n protected abstract readonly finalizeFunc: (\n remainder: number[],\n remainderBinLen: number,\n processedBinLen: number,\n H: StateT,\n outputLen: number\n ) => number[];\n protected abstract readonly stateCloneFunc: (state: StateT) => StateT;\n protected abstract readonly newStateFunc: (variant: VariantT) => StateT;\n protected abstract readonly getMAC: ((options: { outputLen: number }) => number[]) | null;\n\n protected constructor(variant: VariantT, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n protected constructor(variant: VariantT, inputFormat: FormatNoTextType, options?: FixedLengthOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected constructor(variant: any, inputFormat: any, options?: any) {\n const inputOptions = options || {};\n this.inputFormat = inputFormat;\n\n this.utfType = inputOptions[\"encoding\"] || \"UTF8\";\n this.numRounds = inputOptions[\"numRounds\"] || 1;\n\n /* eslint-disable-next-line @typescript-eslint/ban-ts-comment */\n // @ts-ignore - The spec actually says ToString is called on the first parseInt argument so it's OK to use it here\n // to check if an arugment is an integer. This cheat would break if it's used to get the value of the argument.\n if (isNaN(this.numRounds) || this.numRounds !== parseInt(this.numRounds, 10) || 1 > this.numRounds) {\n throw new Error(\"numRounds must a integer >= 1\");\n }\n\n this.shaVariant = variant;\n this.remainder = [];\n this.remainderLen = 0;\n this.updateCalled = false;\n this.processedLen = 0;\n this.macKeySet = false;\n this.keyWithIPad = [];\n this.keyWithOPad = [];\n }\n\n /**\n * Hashes as many blocks as possible. Stores the rest for either a future update or getHash call.\n *\n * @param srcString The input to be hashed.\n * @returns A reference to the object.\n */\n update(srcString: string | ArrayBuffer | Uint8Array): this {\n let i,\n updateProcessedLen = 0;\n const variantBlockIntInc = this.variantBlockSize >>> 5,\n convertRet = this.converterFunc(srcString, this.remainder, this.remainderLen),\n chunkBinLen = convertRet[\"binLen\"],\n chunk = convertRet[\"value\"],\n chunkIntLen = chunkBinLen >>> 5;\n\n for (i = 0; i < chunkIntLen; i += variantBlockIntInc) {\n if (updateProcessedLen + this.variantBlockSize <= chunkBinLen) {\n this.intermediateState = this.roundFunc(chunk.slice(i, i + variantBlockIntInc), this.intermediateState);\n updateProcessedLen += this.variantBlockSize;\n }\n }\n this.processedLen += updateProcessedLen;\n this.remainder = chunk.slice(updateProcessedLen >>> 5);\n this.remainderLen = chunkBinLen % this.variantBlockSize;\n this.updateCalled = true;\n\n return this;\n }\n\n /**\n * Returns the desired SHA hash of the input fed in via `update` calls.\n *\n * @param format The desired output formatting\n * @param options Hashmap of output formatting options. `outputLen` must be specified for variable length hashes.\n * `outputLen` replaces the now deprecated `shakeLen` key.\n * @returns The hash in the format specified.\n */\n getHash(format: \"HEX\", options?: { outputUpper?: boolean; outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"B64\", options?: { b64Pad?: string; outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"BYTES\", options?: { outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"UINT8ARRAY\", options?: { outputLen?: number; shakeLen?: number }): Uint8Array;\n getHash(format: \"ARRAYBUFFER\", options?: { outputLen?: number; shakeLen?: number }): ArrayBuffer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getHash(format: any, options?: any): any {\n let i,\n finalizedState,\n outputBinLen = this.outputBinLen;\n\n const outputOptions = getOutputOpts(options);\n\n if (this.isVariableLen) {\n if (outputOptions[\"outputLen\"] === -1) {\n throw new Error(\"Output length must be specified in options\");\n }\n outputBinLen = outputOptions[\"outputLen\"];\n }\n\n const formatFunc = getOutputConverter(format, outputBinLen, this.bigEndianMod, outputOptions);\n if (this.macKeySet && this.getMAC) {\n return formatFunc(this.getMAC(outputOptions));\n }\n\n finalizedState = this.finalizeFunc(\n this.remainder.slice(),\n this.remainderLen,\n this.processedLen,\n this.stateCloneFunc(this.intermediateState),\n outputBinLen\n );\n for (i = 1; i < this.numRounds; i += 1) {\n /* Need to mask out bits that should be zero due to output not being a multiple of 32 */\n if (this.isVariableLen && outputBinLen % 32 !== 0) {\n finalizedState[finalizedState.length - 1] &= 0x00ffffff >>> (24 - (outputBinLen % 32));\n }\n finalizedState = this.finalizeFunc(\n finalizedState,\n outputBinLen,\n 0,\n this.newStateFunc(this.shaVariant),\n outputBinLen\n );\n }\n\n return formatFunc(finalizedState);\n }\n\n /**\n * Sets the HMAC key for an eventual `getHMAC` call. Must be called immediately after jsSHA object instantiation.\n *\n * @param key The key used to calculate the HMAC\n * @param inputFormat The format of key.\n * @param options Hashmap of extra input options.\n */\n setHMACKey(key: string, inputFormat: \"TEXT\", options?: { encoding?: EncodingType }): void;\n setHMACKey(key: string, inputFormat: \"B64\" | \"HEX\" | \"BYTES\"): void;\n setHMACKey(key: ArrayBuffer, inputFormat: \"ARRAYBUFFER\"): void;\n setHMACKey(key: Uint8Array, inputFormat: \"UINT8ARRAY\"): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setHMACKey(key: any, inputFormat: any, options?: any): void {\n if (!this.HMACSupported) {\n throw new Error(\"Variant does not support HMAC\");\n }\n\n if (this.updateCalled) {\n throw new Error(\"Cannot set MAC key after calling update\");\n }\n\n const keyOptions = options || {},\n keyConverterFunc = getStrConverter(inputFormat, keyOptions[\"encoding\"] || \"UTF8\", this.bigEndianMod);\n\n this._setHMACKey(keyConverterFunc(key));\n }\n\n /**\n * Internal function that sets the MAC key.\n *\n * @param key The packed MAC key to use\n */\n protected _setHMACKey(key: packedValue): void {\n const blockByteSize = this.variantBlockSize >>> 3,\n lastArrayIndex = blockByteSize / 4 - 1;\n let i;\n if (this.numRounds !== 1) {\n throw new Error(mac_rounds_error);\n }\n\n if (this.macKeySet) {\n throw new Error(\"MAC key already set\");\n }\n\n /* Figure out what to do with the key based on its size relative to\n * the hash's block size */\n if (blockByteSize < key[\"binLen\"] / 8) {\n key[\"value\"] = this.finalizeFunc(\n key[\"value\"],\n key[\"binLen\"],\n 0,\n this.newStateFunc(this.shaVariant),\n this.outputBinLen\n );\n }\n while (key[\"value\"].length <= lastArrayIndex) {\n key[\"value\"].push(0);\n }\n /* Create ipad and opad */\n for (i = 0; i <= lastArrayIndex; i += 1) {\n this.keyWithIPad[i] = key[\"value\"][i] ^ 0x36363636;\n this.keyWithOPad[i] = key[\"value\"][i] ^ 0x5c5c5c5c;\n }\n\n this.intermediateState = this.roundFunc(this.keyWithIPad, this.intermediateState);\n this.processedLen = this.variantBlockSize;\n\n this.macKeySet = true;\n }\n\n /**\n * Returns the the HMAC in the specified format using the key given by a previous `setHMACKey` call.\n *\n * @param format The desired output formatting.\n * @param options Hashmap of extra outputs options.\n * @returns The HMAC in the format specified.\n */\n getHMAC(format: \"HEX\", options?: { outputUpper?: boolean }): string;\n getHMAC(format: \"B64\", options?: { b64Pad?: string }): string;\n getHMAC(format: \"BYTES\"): string;\n getHMAC(format: \"UINT8ARRAY\"): Uint8Array;\n getHMAC(format: \"ARRAYBUFFER\"): ArrayBuffer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getHMAC(format: any, options?: any): any {\n const outputOptions = getOutputOpts(options),\n formatFunc = getOutputConverter(format, this.outputBinLen, this.bigEndianMod, outputOptions);\n\n return formatFunc(this._getHMAC());\n }\n\n /**\n * Internal function that returns the \"raw\" HMAC\n */\n protected _getHMAC(): number[] {\n let finalizedState;\n\n if (!this.macKeySet) {\n throw new Error(\"Cannot call getHMAC without first setting MAC key\");\n }\n\n const firstHash = this.finalizeFunc(\n this.remainder.slice(),\n this.remainderLen,\n this.processedLen,\n this.stateCloneFunc(this.intermediateState),\n this.outputBinLen\n );\n finalizedState = this.roundFunc(this.keyWithOPad, this.newStateFunc(this.shaVariant));\n finalizedState = this.finalizeFunc(\n firstHash,\n this.outputBinLen,\n this.variantBlockSize,\n finalizedState,\n this.outputBinLen\n );\n\n return finalizedState;\n }\n}\n", "/*\n * Note 1: All the functions in this file guarantee only that the bottom 32-bits of the return value are correct.\n * JavaScript is flakey when it comes to bit operations and a '1' in the highest order bit of a 32-bit number causes\n * it to be interpreted as a negative number per two's complement.\n *\n * Note 2: Per the ECMAScript spec, all JavaScript operations mask the shift amount by 0x1F. This results in weird\n * cases like 1 << 32 == 1 and 1 << 33 === 1 << 1 === 2\n */\n\n/**\n * The 32-bit implementation of circular rotate left.\n *\n * @param x The 32-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted left circularly by `n` bits\n */\nexport function rotl_32(x: number, n: number): number {\n return (x << n) | (x >>> (32 - n));\n}\n\n/**\n * The 32-bit implementation of circular rotate right.\n *\n * @param x The 32-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted right circularly by `n` bits\n */\nfunction rotr_32(x: number, n: number): number {\n return (x >>> n) | (x << (32 - n));\n}\n\n/**\n * The 32-bit implementation of shift right.\n *\n * @param x The 32-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted by `n` bits.\n */\nfunction shr_32(x: number, n: number): number {\n return x >>> n;\n}\n\n/**\n * The 32-bit implementation of the NIST specified Parity function.\n *\n * @param x The first 32-bit integer argument.\n * @param y The second 32-bit integer argument.\n * @param z The third 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function parity_32(x: number, y: number, z: number): number {\n return x ^ y ^ z;\n}\n\n/**\n * The 32-bit implementation of the NIST specified Ch function.\n *\n * @param x The first 32-bit integer argument.\n * @param y The second 32-bit integer argument.\n * @param z The third 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function ch_32(x: number, y: number, z: number): number {\n return (x & y) ^ (~x & z);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Maj function.\n *\n * @param x The first 32-bit integer argument.\n * @param y The second 32-bit integer argument.\n * @param z The third 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function maj_32(x: number, y: number, z: number): number {\n return (x & y) ^ (x & z) ^ (y & z);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Sigma0 function.\n *\n * @param x The 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function sigma0_32(x: number): number {\n return rotr_32(x, 2) ^ rotr_32(x, 13) ^ rotr_32(x, 22);\n}\n\n/**\n * Add two 32-bit integers.\n *\n * This uses 16-bit operations internally to work around sign problems due to JavaScript's lack of uint32 support.\n *\n * @param a The first 32-bit integer argument to be added.\n * @param b The second 32-bit integer argument to be added.\n * @returns The sum of `a` + `b`.\n */\nexport function safeAdd_32_2(a: number, b: number): number {\n const lsw = (a & 0xffff) + (b & 0xffff),\n msw = (a >>> 16) + (b >>> 16) + (lsw >>> 16);\n\n return ((msw & 0xffff) << 16) | (lsw & 0xffff);\n}\n\n/**\n * Add four 32-bit integers.\n *\n * This uses 16-bit operations internally to work around sign problems due to JavaScript's lack of uint32 support.\n *\n * @param a The first 32-bit integer argument to be added.\n * @param b The second 32-bit integer argument to be added.\n * @param c The third 32-bit integer argument to be added.\n * @param d The fourth 32-bit integer argument to be added.\n * @returns The sum of `a` + `b` + `c` + `d`.\n */\nexport function safeAdd_32_4(a: number, b: number, c: number, d: number): number {\n const lsw = (a & 0xffff) + (b & 0xffff) + (c & 0xffff) + (d & 0xffff),\n msw = (a >>> 16) + (b >>> 16) + (c >>> 16) + (d >>> 16) + (lsw >>> 16);\n\n return ((msw & 0xffff) << 16) | (lsw & 0xffff);\n}\n\n/**\n * Add five 32-bit integers.\n *\n * This uses 16-bit operations internally to work around sign problems due to JavaScript's lack of uint32 support.\n *\n * @param a The first 32-bit integer argument to be added.\n * @param b The second 32-bit integer argument to be added.\n * @param c The third 32-bit integer argument to be added.\n * @param d The fourth 32-bit integer argument to be added.\n * @param e The fifth 32-bit integer argument to be added.\n * @returns The sum of `a` + `b` + `c` + `d` + `e`.\n */\nexport function safeAdd_32_5(a: number, b: number, c: number, d: number, e: number): number {\n const lsw = (a & 0xffff) + (b & 0xffff) + (c & 0xffff) + (d & 0xffff) + (e & 0xffff),\n msw = (a >>> 16) + (b >>> 16) + (c >>> 16) + (d >>> 16) + (e >>> 16) + (lsw >>> 16);\n\n return ((msw & 0xffff) << 16) | (lsw & 0xffff);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Gamma1 function.\n *\n * @param x The 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function gamma1_32(x: number): number {\n return rotr_32(x, 17) ^ rotr_32(x, 19) ^ shr_32(x, 10);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Gamma0 function.\n *\n * @param x The 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function gamma0_32(x: number): number {\n return rotr_32(x, 7) ^ rotr_32(x, 18) ^ shr_32(x, 3);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Sigma1 function.\n *\n * @param x The 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function sigma1_32(x: number): number {\n return rotr_32(x, 6) ^ rotr_32(x, 11) ^ rotr_32(x, 25);\n}\n", "import { jsSHABase, TWO_PWR_32, sha_variant_error, parseInputOption } from \"./common\";\nimport {\n packedValue,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n} from \"./custom_types\";\nimport { getStrConverter } from \"./converters\";\nimport { ch_32, parity_32, maj_32, rotl_32, safeAdd_32_2, safeAdd_32_5 } from \"./primitives_32\";\n\n/**\n * Gets the state values for the specified SHA variant.\n *\n * @param _variant: Unused\n * @returns The initial state values.\n */\nfunction getNewState(_variant: \"SHA-1\"): number[] {\n return [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n}\n\n/**\n * Performs a round of SHA-1 hashing over a 512-byte block. This clobbers `H`.\n *\n * @param block The binary array representation of the block to hash.\n * @param H The intermediate H values from a previous round.\n * @returns The resulting H values.\n */\nfunction roundSHA1(block: number[], H: number[]): number[] {\n let a, b, c, d, e, T, t;\n const W: number[] = [];\n\n a = H[0];\n b = H[1];\n c = H[2];\n d = H[3];\n e = H[4];\n\n for (t = 0; t < 80; t += 1) {\n if (t < 16) {\n W[t] = block[t];\n } else {\n W[t] = rotl_32(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n if (t < 20) {\n T = safeAdd_32_5(rotl_32(a, 5), ch_32(b, c, d), e, 0x5a827999, W[t]);\n } else if (t < 40) {\n T = safeAdd_32_5(rotl_32(a, 5), parity_32(b, c, d), e, 0x6ed9eba1, W[t]);\n } else if (t < 60) {\n T = safeAdd_32_5(rotl_32(a, 5), maj_32(b, c, d), e, 0x8f1bbcdc, W[t]);\n } else {\n T = safeAdd_32_5(rotl_32(a, 5), parity_32(b, c, d), e, 0xca62c1d6, W[t]);\n }\n\n e = d;\n d = c;\n c = rotl_32(b, 30);\n b = a;\n a = T;\n }\n\n H[0] = safeAdd_32_2(a, H[0]);\n H[1] = safeAdd_32_2(b, H[1]);\n H[2] = safeAdd_32_2(c, H[2]);\n H[3] = safeAdd_32_2(d, H[3]);\n H[4] = safeAdd_32_2(e, H[4]);\n\n return H;\n}\n\n/**\n * Finalizes the SHA-1 hash. This clobbers `remainder` and `H`.\n *\n * @param remainder Any leftover unprocessed packed ints that still need to be processed.\n * @param remainderBinLen The number of bits in `remainder`.\n * @param processedBinLen The number of bits already processed.\n * @param H The intermediate H values from a previous round.\n * @returns The array of integers representing the SHA-1 hash of message.\n */\nfunction finalizeSHA1(remainder: number[], remainderBinLen: number, processedBinLen: number, H: number[]): number[] {\n let i;\n\n /* The 65 addition is a hack but it works. The correct number is\n\t\tactually 72 (64 + 8) but the below math fails if\n\t\tremainderBinLen + 72 % 512 = 0. Since remainderBinLen % 8 = 0,\n\t\t\"shorting\" the addition is OK. */\n const offset = (((remainderBinLen + 65) >>> 9) << 4) + 15,\n totalLen = remainderBinLen + processedBinLen;\n while (remainder.length <= offset) {\n remainder.push(0);\n }\n /* Append '1' at the end of the binary string */\n remainder[remainderBinLen >>> 5] |= 0x80 << (24 - (remainderBinLen % 32));\n\n /* Append length of binary string in the position such that the new\n * length is a multiple of 512. Logic does not work for even multiples\n * of 512 but there can never be even multiples of 512. JavaScript\n * numbers are limited to 2^53 so it's \"safe\" to treat the totalLen as\n * a 64-bit integer. */\n remainder[offset] = totalLen & 0xffffffff;\n\n /* Bitwise operators treat the operand as a 32-bit number so need to\n * use hacky division and round to get access to upper 32-ish bits */\n remainder[offset - 1] = (totalLen / TWO_PWR_32) | 0;\n\n /* This will always be at least 1 full chunk */\n for (i = 0; i < remainder.length; i += 16) {\n H = roundSHA1(remainder.slice(i, i + 16), H);\n }\n\n return H;\n}\n\nexport default class jsSHA extends jsSHABase<number[], \"SHA-1\"> {\n intermediateState: number[];\n variantBlockSize: number;\n bigEndianMod: -1 | 1;\n outputBinLen: number;\n isVariableLen: boolean;\n HMACSupported: boolean;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n roundFunc: (block: number[], H: number[]) => number[];\n finalizeFunc: (remainder: number[], remainderBinLen: number, processedBinLen: number, H: number[]) => number[];\n stateCloneFunc: (state: number[]) => number[];\n newStateFunc: (variant: \"SHA-1\") => number[];\n getMAC: () => number[];\n\n constructor(variant: \"SHA-1\", inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(variant: \"SHA-1\", inputFormat: FormatNoTextType, options?: FixedLengthOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n if (\"SHA-1\" !== variant) {\n throw new Error(sha_variant_error);\n }\n super(variant, inputFormat, options);\n const resolvedOptions = options || {};\n\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n this.bigEndianMod = -1;\n this.converterFunc = getStrConverter(this.inputFormat, this.utfType, this.bigEndianMod);\n this.roundFunc = roundSHA1;\n this.stateCloneFunc = function (state: number[]): number[] {\n return state.slice();\n };\n this.newStateFunc = getNewState;\n this.finalizeFunc = finalizeSHA1;\n\n this.intermediateState = getNewState(variant);\n this.variantBlockSize = 512;\n this.outputBinLen = 160;\n this.isVariableLen = false;\n\n if (resolvedOptions[\"hmacKey\"]) {\n this._setHMACKey(parseInputOption(\"hmacKey\", resolvedOptions[\"hmacKey\"], this.bigEndianMod));\n }\n }\n}\n", "import { jsSHABase, TWO_PWR_32, H_full, H_trunc, K_sha2, sha_variant_error, parseInputOption } from \"./common\";\nimport {\n packedValue,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n} from \"./custom_types\";\nimport { getStrConverter } from \"./converters\";\nimport {\n ch_32,\n gamma0_32,\n gamma1_32,\n maj_32,\n safeAdd_32_2,\n safeAdd_32_4,\n safeAdd_32_5,\n sigma0_32,\n sigma1_32,\n} from \"./primitives_32\";\n\ntype VariantType = \"SHA-224\" | \"SHA-256\";\n\n/**\n * Gets the state values for the specified SHA variant.\n *\n * @param variant: The SHA-256 family variant.\n * @returns The initial state values.\n */\nfunction getNewState256(variant: VariantType): number[] {\n let retVal;\n\n if (\"SHA-224\" == variant) {\n retVal = H_trunc.slice();\n } else {\n /* \"SHA-256\" */\n retVal = H_full.slice();\n }\n return retVal;\n}\n\n/**\n * Performs a round of SHA-256 hashing over a block. This clobbers `H`.\n *\n * @param block The binary array representation of the block to hash.\n * @param H The intermediate H values from a previous round.\n * @returns The resulting H values.\n */\nfunction roundSHA256(block: number[], H: number[]): number[] {\n let a, b, c, d, e, f, g, h, T1, T2, t;\n\n const W: number[] = [];\n\n a = H[0];\n b = H[1];\n c = H[2];\n d = H[3];\n e = H[4];\n f = H[5];\n g = H[6];\n h = H[7];\n\n for (t = 0; t < 64; t += 1) {\n if (t < 16) {\n W[t] = block[t];\n } else {\n W[t] = safeAdd_32_4(gamma1_32(W[t - 2]), W[t - 7], gamma0_32(W[t - 15]), W[t - 16]);\n }\n T1 = safeAdd_32_5(h, sigma1_32(e), ch_32(e, f, g), K_sha2[t], W[t]);\n T2 = safeAdd_32_2(sigma0_32(a), maj_32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = safeAdd_32_2(d, T1);\n d = c;\n c = b;\n b = a;\n a = safeAdd_32_2(T1, T2);\n }\n\n H[0] = safeAdd_32_2(a, H[0]);\n H[1] = safeAdd_32_2(b, H[1]);\n H[2] = safeAdd_32_2(c, H[2]);\n H[3] = safeAdd_32_2(d, H[3]);\n H[4] = safeAdd_32_2(e, H[4]);\n H[5] = safeAdd_32_2(f, H[5]);\n H[6] = safeAdd_32_2(g, H[6]);\n H[7] = safeAdd_32_2(h, H[7]);\n\n return H;\n}\n\n/**\n * Finalizes the SHA-256 hash. This clobbers `remainder` and `H`.\n *\n * @param remainder Any leftover unprocessed packed ints that still need to be processed.\n * @param remainderBinLen The number of bits in `remainder`.\n * @param processedBinLen The number of bits already processed.\n * @param H The intermediate H values from a previous round.\n * @param variant The desired SHA-256 variant.\n * @returns The array of integers representing the SHA-2 hash of message.\n */\nfunction finalizeSHA256(\n remainder: number[],\n remainderBinLen: number,\n processedBinLen: number,\n H: number[],\n variant: VariantType\n): number[] {\n let i, retVal;\n\n /* The 65 addition is a hack but it works. The correct number is\n actually 72 (64 + 8) but the below math fails if\n remainderBinLen + 72 % 512 = 0. Since remainderBinLen % 8 = 0,\n \"shorting\" the addition is OK. */\n const offset = (((remainderBinLen + 65) >>> 9) << 4) + 15,\n binaryStringInc = 16,\n totalLen = remainderBinLen + processedBinLen;\n\n while (remainder.length <= offset) {\n remainder.push(0);\n }\n /* Append '1' at the end of the binary string */\n remainder[remainderBinLen >>> 5] |= 0x80 << (24 - (remainderBinLen % 32));\n /* Append length of binary string in the position such that the new\n * length is correct. JavaScript numbers are limited to 2^53 so it's\n * \"safe\" to treat the totalLen as a 64-bit integer. */\n\n remainder[offset] = totalLen & 0xffffffff;\n /* Bitwise operators treat the operand as a 32-bit number so need to\n * use hacky division and round to get access to upper 32-ish bits */\n remainder[offset - 1] = (totalLen / TWO_PWR_32) | 0;\n\n /* This will always be at least 1 full chunk */\n for (i = 0; i < remainder.length; i += binaryStringInc) {\n H = roundSHA256(remainder.slice(i, i + binaryStringInc), H);\n }\n\n if (\"SHA-224\" === variant) {\n retVal = [H[0], H[1], H[2], H[3], H[4], H[5], H[6]];\n } else {\n /* \"SHA-256 */\n retVal = H;\n }\n\n return retVal;\n}\nexport default class jsSHA extends jsSHABase<number[], VariantType> {\n intermediateState: number[];\n variantBlockSize: number;\n bigEndianMod: -1 | 1;\n outputBinLen: number;\n isVariableLen: boolean;\n HMACSupported: boolean;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n roundFunc: (block: number[], H: number[]) => number[];\n finalizeFunc: (remainder: number[], remainderBinLen: number, processedBinLen: number, H: number[]) => number[];\n stateCloneFunc: (state: number[]) => number[];\n newStateFunc: (variant: VariantType) => number[];\n getMAC: () => number[];\n\n constructor(variant: VariantType, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(variant: VariantType, inputFormat: FormatNoTextType, options?: FixedLengthOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n if (!(\"SHA-224\" === variant || \"SHA-256\" === variant)) {\n throw new Error(sha_variant_error);\n }\n super(variant, inputFormat, options);\n const resolvedOptions = options || {};\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n this.HMACSupported = true;\n this.bigEndianMod = -1;\n this.converterFunc = getStrConverter(this.inputFormat, this.utfType, this.bigEndianMod);\n this.roundFunc = roundSHA256;\n this.stateCloneFunc = function (state): number[] {\n return state.slice();\n };\n\n this.newStateFunc = getNewState256;\n this.finalizeFunc = function (remainder, remainderBinLen, processedBinLen, H): number[] {\n return finalizeSHA256(remainder, remainderBinLen, processedBinLen, H, variant);\n };\n\n this.intermediateState = getNewState256(variant);\n this.variantBlockSize = 512;\n this.outputBinLen = \"SHA-224\" === variant ? 224 : 256;\n this.isVariableLen = false;\n\n if (resolvedOptions[\"hmacKey\"]) {\n this._setHMACKey(parseInputOption(\"hmacKey\", resolvedOptions[\"hmacKey\"], this.bigEndianMod));\n }\n }\n}\n", "/*\n * Note 1: All the functions in this file guarantee only that the bottom 32-bits of the returned Int_64 are correct.\n * JavaScript is flakey when it comes to bit operations and a '1' in the highest order bit of a 32-bit number causes\n * it to be interpreted as a negative number per two's complement.\n *\n * Note 2: Per the ECMAScript spec, all JavaScript operations mask the shift amount by 0x1F. This results in weird\n * cases like 1 << 32 == 1 and 1 << 33 === 1 << 1 === 2\n */\n\n/**\n * Int_64 is a object for 2 32-bit numbers emulating a 64-bit number.\n */\nexport class Int_64 {\n /**\n * @param msint_32 The most significant 32-bits of a 64-bit number.\n * @param lsint_32 The least significant 32-bits of a 64-bit number.\n */\n readonly highOrder: number;\n readonly lowOrder: number;\n constructor(msint_32: number, lsint_32: number) {\n this.highOrder = msint_32;\n this.lowOrder = lsint_32;\n }\n}\n\n/**\n * The 64-bit implementation of circular rotate left.\n *\n * This does not work for n >= 64 or n == 32 but those are never done.\n *\n * @param x The 64-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted left circularly by `n` bits.\n */\nexport function rotl_64(x: Int_64, n: number): Int_64 {\n let tmp;\n if (n > 32) {\n tmp = 64 - n;\n return new Int_64((x.lowOrder << n) | (x.highOrder >>> tmp), (x.highOrder << n) | (x.lowOrder >>> tmp));\n } else if (0 !== n) {\n tmp = 32 - n;\n return new Int_64((x.highOrder << n) | (x.lowOrder >>> tmp), (x.lowOrder << n) | (x.highOrder >>> tmp));\n } else {\n return x;\n }\n}\n\n/**\n * The 64-bit implementation of circular rotate right.\n *\n * This does not work for n >= 64, n == 32, or n == 0 but those are never done.\n *\n * @param x The 64-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted right circularly by `n` bits.\n */\nfunction rotr_64(x: Int_64, n: number): Int_64 {\n let tmp;\n if (n < 32) {\n tmp = 32 - n;\n return new Int_64((x.highOrder >>> n) | (x.lowOrder << tmp), (x.lowOrder >>> n) | (x.highOrder << tmp));\n } else {\n tmp = 64 - n;\n return new Int_64((x.lowOrder >>> n) | (x.highOrder << tmp), (x.highOrder >>> n) | (x.lowOrder << tmp));\n }\n}\n\n/**\n * The 64-bit implementation of shift right.\n *\n * This does not work for n >= 32 but is only called for n < 32.\n *\n * @param x The 64-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted right by `n` bits\n */\nfunction shr_64(x: Int_64, n: number): Int_64 {\n return new Int_64(x.highOrder >>> n, (x.lowOrder >>> n) | (x.highOrder << (32 - n)));\n}\n\n/**\n * The 64-bit implementation of the NIST specified Ch function.\n *\n * @param x The first 64-bit integer argument.\n * @param y The second 64-bit integer argument.\n * @param z The third 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function ch_64(x: Int_64, y: Int_64, z: Int_64): Int_64 {\n return new Int_64(\n (x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),\n (x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Maj function.\n *\n * @param x The first 64-bit integer argument.\n * @param y The second 64-bit integer argument.\n * @param z The third 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function maj_64(x: Int_64, y: Int_64, z: Int_64): Int_64 {\n return new Int_64(\n (x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),\n (x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Sigma0 function.\n *\n * @param x The 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function sigma0_64(x: Int_64): Int_64 {\n const rotr28 = rotr_64(x, 28),\n rotr34 = rotr_64(x, 34),\n rotr39 = rotr_64(x, 39);\n\n return new Int_64(\n rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,\n rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder\n );\n}\n\n/**\n * Add two 64-bit integers.\n *\n * @param x The first 64-bit integer argument to be added.\n * @param y The second 64-bit integer argument to be added.\n * @returns The sum of `x` + `y`.\n */\nexport function safeAdd_64_2(x: Int_64, y: Int_64): Int_64 {\n let lsw, msw;\n\n lsw = (x.lowOrder & 0xffff) + (y.lowOrder & 0xffff);\n msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);\n const lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n lsw = (x.highOrder & 0xffff) + (y.highOrder & 0xffff) + (msw >>> 16);\n msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);\n const highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n return new Int_64(highOrder, lowOrder);\n}\n\n/**\n * Add four 64-bit integers.\n *\n * @param a The first 64-bit integer argument to be added.\n * @param b The second 64-bit integer argument to be added.\n * @param c The third 64-bit integer argument to be added.\n * @param d The fouth 64-bit integer argument to be added.\n * @returns The sum of `a` + `b` + `c` + `d`.\n */\nexport function safeAdd_64_4(a: Int_64, b: Int_64, c: Int_64, d: Int_64): Int_64 {\n let lsw, msw;\n\n lsw = (a.lowOrder & 0xffff) + (b.lowOrder & 0xffff) + (c.lowOrder & 0xffff) + (d.lowOrder & 0xffff);\n msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);\n const lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n lsw =\n (a.highOrder & 0xffff) + (b.highOrder & 0xffff) + (c.highOrder & 0xffff) + (d.highOrder & 0xffff) + (msw >>> 16);\n msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);\n const highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n return new Int_64(highOrder, lowOrder);\n}\n\n/**\n * Add five 64-bit integers.\n *\n * @param a The first 64-bit integer argument to be added.\n * @param b The second 64-bit integer argument to be added.\n * @param c The third 64-bit integer argument to be added.\n * @param d The fouth 64-bit integer argument to be added.\n * @param e The fifth 64-bit integer argument to be added.\n * @returns The sum of `a` + `b` + `c` + `d` + `e`.\n */\nexport function safeAdd_64_5(a: Int_64, b: Int_64, c: Int_64, d: Int_64, e: Int_64): Int_64 {\n let lsw, msw;\n\n lsw =\n (a.lowOrder & 0xffff) +\n (b.lowOrder & 0xffff) +\n (c.lowOrder & 0xffff) +\n (d.lowOrder & 0xffff) +\n (e.lowOrder & 0xffff);\n msw =\n (a.lowOrder >>> 16) +\n (b.lowOrder >>> 16) +\n (c.lowOrder >>> 16) +\n (d.lowOrder >>> 16) +\n (e.lowOrder >>> 16) +\n (lsw >>> 16);\n const lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n lsw =\n (a.highOrder & 0xffff) +\n (b.highOrder & 0xffff) +\n (c.highOrder & 0xffff) +\n (d.highOrder & 0xffff) +\n (e.highOrder & 0xffff) +\n (msw >>> 16);\n msw =\n (a.highOrder >>> 16) +\n (b.highOrder >>> 16) +\n (c.highOrder >>> 16) +\n (d.highOrder >>> 16) +\n (e.highOrder >>> 16) +\n (lsw >>> 16);\n const highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n return new Int_64(highOrder, lowOrder);\n}\n\n/**\n * XORs two given arguments.\n *\n * @param a The first argument to be XORed.\n * @param b The second argument to be XORed.\n * @returns The The XOR `a` and `b`\n */\nexport function xor_64_2(a: Int_64, b: Int_64): Int_64 {\n return new Int_64(a.highOrder ^ b.highOrder, a.lowOrder ^ b.lowOrder);\n}\n\n/**\n * XORs five given arguments.\n *\n * @param a The first argument to be XORed.\n * @param b The second argument to be XORed.\n * @param c The third argument to be XORed.\n * @param d The fourth argument to be XORed.\n * @param e The fifth argument to be XORed.\n * @returns The XOR of `a`, `b`, `c`, `d`, and `e`.\n */\nexport function xor_64_5(a: Int_64, b: Int_64, c: Int_64, d: Int_64, e: Int_64): Int_64 {\n return new Int_64(\n a.highOrder ^ b.highOrder ^ c.highOrder ^ d.highOrder ^ e.highOrder,\n a.lowOrder ^ b.lowOrder ^ c.lowOrder ^ d.lowOrder ^ e.lowOrder\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Gamma1 function.\n *\n * @param x The 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function gamma1_64(x: Int_64): Int_64 {\n const rotr19 = rotr_64(x, 19),\n rotr61 = rotr_64(x, 61),\n shr6 = shr_64(x, 6);\n\n return new Int_64(\n rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,\n rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Gamma0 function.\n *\n * @param x The 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function gamma0_64(x: Int_64): Int_64 {\n const rotr1 = rotr_64(x, 1),\n rotr8 = rotr_64(x, 8),\n shr7 = shr_64(x, 7);\n\n return new Int_64(\n rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,\n rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Sigma1 function.\n *\n * @param x The 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function sigma1_64(x: Int_64): Int_64 {\n const rotr14 = rotr_64(x, 14),\n rotr18 = rotr_64(x, 18),\n rotr41 = rotr_64(x, 41);\n\n return new Int_64(\n rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,\n rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder\n );\n}\n", "import { jsSHABase, TWO_PWR_32, H_trunc, H_full, K_sha2, sha_variant_error, parseInputOption } from \"./common\";\nimport {\n packedValue,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n} from \"./custom_types\";\nimport { getStrConverter } from \"./converters\";\nimport {\n ch_64,\n gamma0_64,\n gamma1_64,\n Int_64,\n maj_64,\n safeAdd_64_2,\n safeAdd_64_4,\n safeAdd_64_5,\n sigma0_64,\n sigma1_64,\n} from \"./primitives_64\";\n\ntype VariantType = \"SHA-384\" | \"SHA-512\";\n\nconst K_sha512 = [\n new Int_64(K_sha2[0], 0xd728ae22),\n new Int_64(K_sha2[1], 0x23ef65cd),\n new Int_64(K_sha2[2], 0xec4d3b2f),\n new Int_64(K_sha2[3], 0x8189dbbc),\n new Int_64(K_sha2[4], 0xf348b538),\n new Int_64(K_sha2[5], 0xb605d019),\n new Int_64(K_sha2[6], 0xaf194f9b),\n new Int_64(K_sha2[7], 0xda6d8118),\n new Int_64(K_sha2[8], 0xa3030242),\n new Int_64(K_sha2[9], 0x45706fbe),\n new Int_64(K_sha2[10], 0x4ee4b28c),\n new Int_64(K_sha2[11], 0xd5ffb4e2),\n new Int_64(K_sha2[12], 0xf27b896f),\n new Int_64(K_sha2[13], 0x3b1696b1),\n new Int_64(K_sha2[14], 0x25c71235),\n new Int_64(K_sha2[15], 0xcf692694),\n new Int_64(K_sha2[16], 0x9ef14ad2),\n new Int_64(K_sha2[17], 0x384f25e3),\n new Int_64(K_sha2[18], 0x8b8cd5b5),\n new Int_64(K_sha2[19], 0x77ac9c65),\n new Int_64(K_sha2[20], 0x592b0275),\n new Int_64(K_sha2[21], 0x6ea6e483),\n new Int_64(K_sha2[22], 0xbd41fbd4),\n new Int_64(K_sha2[23], 0x831153b5),\n new Int_64(K_sha2[24], 0xee66dfab),\n new Int_64(K_sha2[25], 0x2db43210),\n new Int_64(K_sha2[26], 0x98fb213f),\n new Int_64(K_sha2[27], 0xbeef0ee4),\n new Int_64(K_sha2[28], 0x3da88fc2),\n new Int_64(K_sha2[29], 0x930aa725),\n new Int_64(K_sha2[30], 0xe003826f),\n new Int_64(K_sha2[31], 0x0a0e6e70),\n new Int_64(K_sha2[32], 0x46d22ffc),\n new Int_64(K_sha2[33], 0x5c26c926),\n new Int_64(K_sha2[34], 0x5ac42aed),\n new Int_64(K_sha2[35], 0x9d95b3df),\n new Int_64(K_sha2[36], 0x8baf63de),\n new Int_64(K_sha2[37], 0x3c77b2a8),\n new Int_64(K_sha2[38], 0x47edaee6),\n new Int_64(K_sha2[39], 0x1482353b),\n new Int_64(K_sha2[40], 0x4cf10364),\n new Int_64(K_sha2[41], 0xbc423001),\n new Int_64(K_sha2[42], 0xd0f89791),\n new Int_64(K_sha2[43], 0x0654be30),\n new Int_64(K_sha2[44], 0xd6ef5218),\n new Int_64(K_sha2[45], 0x5565a910),\n new Int_64(K_sha2[46], 0x5771202a),\n new Int_64(K_sha2[47], 0x32bbd1b8),\n new Int_64(K_sha2[48], 0xb8d2d0c8),\n new Int_64(K_sha2[49], 0x5141ab53),\n new Int_64(K_sha2[50], 0xdf8eeb99),\n new Int_64(K_sha2[51], 0xe19b48a8),\n new Int_64(K_sha2[52], 0xc5c95a63),\n new Int_64(K_sha2[53], 0xe3418acb),\n new Int_64(K_sha2[54], 0x7763e373),\n new Int_64(K_sha2[55], 0xd6b2b8a3),\n new Int_64(K_sha2[56], 0x5defb2fc),\n new Int_64(K_sha2[57], 0x43172f60),\n new Int_64(K_sha2[58], 0xa1f0ab72),\n new Int_64(K_sha2[59], 0x1a6439ec),\n new Int_64(K_sha2[60], 0x23631e28),\n new Int_64(K_sha2[61], 0xde82bde9),\n new Int_64(K_sha2[62], 0xb2c67915),\n new Int_64(K_sha2[63], 0xe372532b),\n new Int_64(0xca273ece, 0xea26619c),\n new Int_64(0xd186b8c7, 0x21c0c207),\n new Int_64(0xeada7dd6, 0xcde0eb1e),\n new Int_64(0xf57d4f7f, 0xee6ed178),\n new Int_64(0x06f067aa, 0x72176fba),\n new Int_64(0x0a637dc5, 0xa2c898a6),\n new Int_64(0x113f9804, 0xbef90dae),\n new Int_64(0x1b710b35, 0x131c471b),\n new Int_64(0x28db77f5, 0x23047d84),\n new Int_64(0x32caab7b, 0x40c72493),\n new Int_64(0x3c9ebe0a, 0x15c9bebc),\n new Int_64(0x431d67c4, 0x9c100d4c),\n new Int_64(0x4cc5d4be, 0xcb3e42b6),\n new Int_64(0x597f299c, 0xfc657e2a),\n new Int_64(0x5fcb6fab, 0x3ad6faec),\n new Int_64(0x6c44198c, 0x4a475817),\n];\n\n/**\n * Gets the state values for the specified SHA variant.\n *\n * @param variant: The SHA-512 family variant.\n * @returns The initial state values.\n */\nfunction getNewState512(variant: VariantType): Int_64[] {\n if (\"SHA-384\" === variant) {\n return [\n new Int_64(0xcbbb9d5d, H_trunc[0]),\n new Int_64(0x0629a292a, H_trunc[1]),\n new Int_64(0x9159015a, H_trunc[2]),\n new Int_64(0x0152fecd8, H_trunc[3]),\n new Int_64(0x67332667, H_trunc[4]),\n new Int_64(0x98eb44a87, H_trunc[5]),\n new Int_64(0xdb0c2e0d, H_trunc[6]),\n new Int_64(0x047b5481d, H_trunc[7]),\n ];\n } else {\n /* SHA-512 */\n return [\n new Int_64(H_full[0], 0xf3bcc908),\n new Int_64(H_full[1], 0x84caa73b),\n new Int_64(H_full[2], 0xfe94f82b),\n new Int_64(H_full[3], 0x5f1d36f1),\n new Int_64(H_full[4], 0xade682d1),\n new Int_64(H_full[5], 0x2b3e6c1f),\n new Int_64(H_full[6], 0xfb41bd6b),\n new Int_64(H_full[7], 0x137e2179),\n ];\n }\n}\n\n/**\n * Performs a round of SHA-512 hashing over a block. This clobbers `H`.\n *\n * @param block The binary array representation of the block to hash.\n * @param H The intermediate H values from a previous round.\n * @returns The resulting H values.\n */\nfunction roundSHA512(block: number[], H: Int_64[]): Int_64[] {\n let a, b, c, d, e, f, g, h, T1, T2, t, offset;\n\n const W: Int_64[] = [];\n\n a = H[0];\n b = H[1];\n c = H[2];\n d = H[3];\n e = H[4];\n f = H[5];\n g = H[6];\n h = H[7];\n\n for (t = 0; t < 80; t += 1) {\n if (t < 16) {\n offset = t * 2;\n W[t] = new Int_64(block[offset], block[offset + 1]);\n } else {\n W[t] = safeAdd_64_4(gamma1_64(W[t - 2]), W[t - 7], gamma0_64(W[t - 15]), W[t - 16]);\n }\n T1 = safeAdd_64_5(h, sigma1_64(e), ch_64(e, f, g), K_sha512[t], W[t]);\n T2 = safeAdd_64_2(sigma0_64(a), maj_64(a, b, c));\n h = g;\n g = f;\n f = e;\n e = safeAdd_64_2(d, T1);\n d = c;\n c = b;\n b = a;\n a = safeAdd_64_2(T1, T2);\n }\n\n H[0] = safeAdd_64_2(a, H[0]);\n H[1] = safeAdd_64_2(b, H[1]);\n H[2] = safeAdd_64_2(c, H[2]);\n H[3] = safeAdd_64_2(d, H[3]);\n H[4] = safeAdd_64_2(e, H[4]);\n H[5] = safeAdd_64_2(f, H[5]);\n H[6] = safeAdd_64_2(g, H[6]);\n H[7] = safeAdd_64_2(h, H[7]);\n\n return H;\n}\n\n/**\n * Finalizes the SHA-512 hash. This clobbers `remainder` and `H`.\n *\n * @param remainder Any leftover unprocessed packed ints that still need to be processed.\n * @param remainderBinLen The number of bits in `remainder`.\n * @param processedBinLen The number of bits already processed.\n * @param H The intermediate H values from a previous round.\n * @param variant The desired SHA-512 variant.\n * @returns The array of integers representing the SHA-512 hash of message.\n */\nfunction finalizeSHA512(\n remainder: number[],\n remainderBinLen: number,\n processedBinLen: number,\n H: Int_64[],\n variant: VariantType\n): number[] {\n let i, retVal;\n\n /* The 129 addition is a hack but it works. The correct number is\n actually 136 (128 + 8) but the below math fails if\n remainderBinLen + 136 % 1024 = 0. Since remainderBinLen % 8 = 0,\n \"shorting\" the addition is OK. */\n const offset = (((remainderBinLen + 129) >>> 10) << 5) + 31,\n binaryStringInc = 32,\n totalLen = remainderBinLen + processedBinLen;\n\n while (remainder.length <= offset) {\n remainder.push(0);\n }\n /* Append '1' at the end of the binary string */\n remainder[remainderBinLen >>> 5] |= 0x80 << (24 - (remainderBinLen % 32));\n /* Append length of binary string in the position such that the new\n * length is correct. JavaScript numbers are limited to 2^53 so it's\n * \"safe\" to treat the totalLen as a 64-bit integer. */\n\n remainder[offset] = totalLen & 0xffffffff;\n /* Bitwise operators treat the operand as a 32-bit number so need to\n * use hacky division and round to get access to upper 32-ish bits */\n remainder[offset - 1] = (totalLen / TWO_PWR_32) | 0;\n\n /* This will always be at least 1 full chunk */\n for (i = 0; i < remainder.length; i += binaryStringInc) {\n H = roundSHA512(remainder.slice(i, i + binaryStringInc), H);\n }\n\n if (\"SHA-384\" === variant) {\n H = (H as unknown) as Int_64[];\n retVal = [\n H[0].highOrder,\n H[0].lowOrder,\n H[1].highOrder,\n H[1].lowOrder,\n H[2].highOrder,\n H[2].lowOrder,\n H[3].highOrder,\n H[3].lowOrder,\n H[4].highOrder,\n H[4].lowOrder,\n H[5].highOrder,\n H[5].lowOrder,\n ];\n } else {\n /* SHA-512 */\n retVal = [\n H[0].highOrder,\n H[0].lowOrder,\n H[1].highOrder,\n H[1].lowOrder,\n H[2].highOrder,\n H[2].lowOrder,\n H[3].highOrder,\n H[3].lowOrder,\n H[4].highOrder,\n H[4].lowOrder,\n H[5].highOrder,\n H[5].lowOrder,\n H[6].highOrder,\n H[6].lowOrder,\n H[7].highOrder,\n H[7].lowOrder,\n ];\n }\n return retVal;\n}\n\nexport default class jsSHA extends jsSHABase<Int_64[], VariantType> {\n intermediateState: Int_64[];\n variantBlockSize: number;\n bigEndianMod: -1 | 1;\n outputBinLen: number;\n isVariableLen: boolean;\n HMACSupported: boolean;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n roundFunc: (block: number[], H: Int_64[]) => Int_64[];\n finalizeFunc: (remainder: number[], remainderBinLen: number, processedBinLen: number, H: Int_64[]) => number[];\n stateCloneFunc: (state: Int_64[]) => Int_64[];\n newStateFunc: (variant: VariantType) => Int_64[];\n getMAC: () => number[];\n\n constructor(variant: VariantType, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(variant: VariantType, inputFormat: FormatNoTextType, options?: FixedLengthOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n if (!(\"SHA-384\" === variant || \"SHA-512\" === variant)) {\n throw new Error(sha_variant_error);\n }\n super(variant, inputFormat, options);\n const resolvedOptions = options || {};\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n this.HMACSupported = true;\n this.bigEndianMod = -1;\n this.converterFunc = getStrConverter(this.inputFormat, this.utfType, this.bigEndianMod);\n this.roundFunc = roundSHA512;\n this.stateCloneFunc = function (state): Int_64[] {\n return state.slice();\n };\n this.newStateFunc = getNewState512;\n this.finalizeFunc = function (remainder, remainderBinLen, processedBinLen, H): number[] {\n return finalizeSHA512(remainder, remainderBinLen, processedBinLen, H, variant);\n };\n\n this.intermediateState = getNewState512(variant);\n this.variantBlockSize = 1024;\n this.outputBinLen = \"SHA-384\" === variant ? 384 : 512;\n this.isVariableLen = false;\n\n if (resolvedOptions[\"hmacKey\"]) {\n this._setHMACKey(parseInputOption(\"hmacKey\", resolvedOptions[\"hmacKey\"], this.bigEndianMod));\n }\n }\n}\n", "import { jsSHABase, packedLEConcat, sha_variant_error, mac_rounds_error, TWO_PWR_32, parseInputOption } from \"./common\";\nimport {\n packedValue,\n CSHAKEOptionsNoEncodingType,\n CSHAKEOptionsEncodingType,\n SHAKEOptionsNoEncodingType,\n SHAKEOptionsEncodingType,\n KMACOptionsNoEncodingType,\n KMACOptionsEncodingType,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n ResolvedCSHAKEOptionsNoEncodingType,\n ResolvedKMACOptionsNoEncodingType,\n} from \"./custom_types\";\nimport { getStrConverter } from \"./converters\";\nimport { Int_64, rotl_64, xor_64_2, xor_64_5 } from \"./primitives_64\";\n\ntype FixedLengthVariantType = \"SHA3-224\" | \"SHA3-256\" | \"SHA3-384\" | \"SHA3-512\" | \"SHAKE128\" | \"SHAKE256\";\n\ntype VariantType = FixedLengthVariantType | \"SHAKE128\" | \"SHAKE256\" | \"CSHAKE128\" | \"CSHAKE256\" | \"KMAC128\" | \"KMAC256\";\n\nconst rc_sha3 = [\n new Int_64(0x00000000, 0x00000001),\n new Int_64(0x00000000, 0x00008082),\n new Int_64(0x80000000, 0x0000808a),\n new Int_64(0x80000000, 0x80008000),\n new Int_64(0x00000000, 0x0000808b),\n new Int_64(0x00000000, 0x80000001),\n new Int_64(0x80000000, 0x80008081),\n new Int_64(0x80000000, 0x00008009),\n new Int_64(0x00000000, 0x0000008a),\n new Int_64(0x00000000, 0x00000088),\n new Int_64(0x00000000, 0x80008009),\n new Int_64(0x00000000, 0x8000000a),\n new Int_64(0x00000000, 0x8000808b),\n new Int_64(0x80000000, 0x0000008b),\n new Int_64(0x80000000, 0x00008089),\n new Int_64(0x80000000, 0x00008003),\n new Int_64(0x80000000, 0x00008002),\n new Int_64(0x80000000, 0x00000080),\n new Int_64(0x00000000, 0x0000800a),\n new Int_64(0x80000000, 0x8000000a),\n new Int_64(0x80000000, 0x80008081),\n new Int_64(0x80000000, 0x00008080),\n new Int_64(0x00000000, 0x80000001),\n new Int_64(0x80000000, 0x80008008),\n];\n\nconst r_sha3 = [\n [0, 36, 3, 41, 18],\n [1, 44, 10, 45, 2],\n [62, 6, 43, 15, 61],\n [28, 55, 25, 21, 56],\n [27, 20, 39, 8, 14],\n];\n\n/**\n * Gets the state values for the specified SHA-3 variant.\n *\n * @param _variant Unused for this family.\n * @returns The initial state values.\n */\nfunction getNewState(_variant: VariantType): Int_64[][] {\n let i;\n const retVal = [];\n\n for (i = 0; i < 5; i += 1) {\n retVal[i] = [new Int_64(0, 0), new Int_64(0, 0), new Int_64(0, 0), new Int_64(0, 0), new Int_64(0, 0)];\n }\n\n return retVal;\n}\n\n/**\n * Returns a clone of the given SHA3 state.\n *\n * @param state The state to be cloned.\n * @returns The cloned state.\n */\nfunction cloneSHA3State(state: Int_64[][]): Int_64[][] {\n let i;\n const clone = [];\n for (i = 0; i < 5; i += 1) {\n clone[i] = state[i].slice();\n }\n\n return clone;\n}\n\n/**\n * Performs a round of SHA-3 hashing over a block. This clobbers `state`.\n *\n * @param block The binary array representation of the block to hash.\n * @param state Hash state from a previous round.\n * @returns The resulting state value.\n */\nfunction roundSHA3(block: number[] | null, state: Int_64[][]): Int_64[][] {\n let round, x, y, B;\n const C = [],\n D = [];\n\n if (null !== block) {\n for (x = 0; x < block.length; x += 2) {\n state[(x >>> 1) % 5][((x >>> 1) / 5) | 0] = xor_64_2(\n state[(x >>> 1) % 5][((x >>> 1) / 5) | 0],\n new Int_64(block[x + 1], block[x])\n );\n }\n }\n\n for (round = 0; round < 24; round += 1) {\n /* Any SHA-3 variant name will do here */\n B = getNewState(\"SHA3-384\");\n\n /* Perform theta step */\n for (x = 0; x < 5; x += 1) {\n C[x] = xor_64_5(state[x][0], state[x][1], state[x][2], state[x][3], state[x][4]);\n }\n for (x = 0; x < 5; x += 1) {\n D[x] = xor_64_2(C[(x + 4) % 5], rotl_64(C[(x + 1) % 5], 1));\n }\n for (x = 0; x < 5; x += 1) {\n for (y = 0; y < 5; y += 1) {\n state[x][y] = xor_64_2(state[x][y], D[x]);\n }\n }\n\n /* Perform combined ro and pi steps */\n for (x = 0; x < 5; x += 1) {\n for (y = 0; y < 5; y += 1) {\n B[y][(2 * x + 3 * y) % 5] = rotl_64(state[x][y], r_sha3[x][y]);\n }\n }\n\n /* Perform chi step */\n for (x = 0; x < 5; x += 1) {\n for (y = 0; y < 5; y += 1) {\n state[x][y] = xor_64_2(\n B[x][y],\n new Int_64(\n ~B[(x + 1) % 5][y].highOrder & B[(x + 2) % 5][y].highOrder,\n ~B[(x + 1) % 5][y].lowOrder & B[(x + 2) % 5][y].lowOrder\n )\n );\n }\n }\n\n /* Perform iota step */\n state[0][0] = xor_64_2(state[0][0], rc_sha3[round]);\n }\n\n return state;\n}\n\n/**\n * Finalizes the SHA-3 hash. This clobbers `remainder` and `state`.\n *\n * @param remainder Any leftover unprocessed packed ints that still need to be processed.\n * @param remainderBinLen The number of bits in `remainder`.\n * @param _processedBinLen Unused for this family.\n * @param state The state from a previous round.\n * @param blockSize The block size/rate of the variant in bits\n * @param delimiter The delimiter value for the variant\n * @param outputLen The output length for the variant in bits\n * @returns The array of integers representing the SHA-3 hash of message.\n */\nfunction finalizeSHA3(\n remainder: number[],\n remainderBinLen: number,\n _processedBinLen: number,\n state: Int_64[][],\n blockSize: number,\n delimiter: number,\n outputLen: number\n): number[] {\n let i,\n state_offset = 0,\n temp;\n const retVal = [],\n binaryStringInc = blockSize >>> 5,\n remainderIntLen = remainderBinLen >>> 5;\n\n /* Process as many blocks as possible, some may be here for multiple rounds\n\t\twith SHAKE\n\t*/\n for (i = 0; i < remainderIntLen && remainderBinLen >= blockSize; i += binaryStringInc) {\n state = roundSHA3(remainder.slice(i, i + binaryStringInc), state);\n remainderBinLen -= blockSize;\n }\n\n remainder = remainder.slice(i);\n remainderBinLen = remainderBinLen % blockSize;\n\n /* Pad out the remainder to a full block */\n while (remainder.length < binaryStringInc) {\n remainder.push(0);\n }\n\n /* Find the next \"empty\" byte for the 0x80 and append it via an xor */\n i = remainderBinLen >>> 3;\n remainder[i >> 2] ^= delimiter << (8 * (i % 4));\n\n remainder[binaryStringInc - 1] ^= 0x80000000;\n state = roundSHA3(remainder, state);\n\n while (retVal.length * 32 < outputLen) {\n temp = state[state_offset % 5][(state_offset / 5) | 0];\n retVal.push(temp.lowOrder);\n if (retVal.length * 32 >= outputLen) {\n break;\n }\n retVal.push(temp.highOrder);\n state_offset += 1;\n\n if (0 === (state_offset * 64) % blockSize) {\n roundSHA3(null, state);\n state_offset = 0;\n }\n }\n\n return retVal;\n}\n\n/**\n * Performs NIST left_encode function returned with no extra garbage bits. `x` is limited to <= 9007199254740991.\n *\n * @param x 32-bit number to to encode.\n * @returns The NIST specified output of the function.\n */\nfunction left_encode(x: number): packedValue {\n let byteOffset,\n byte,\n numEncodedBytes = 0;\n /* JavaScript numbers max out at 0x1FFFFFFFFFFFFF (7 bytes) so this will return a maximum of 7 + 1 = 8 bytes */\n const retVal = [0, 0],\n x_64 = [x & 0xffffffff, (x / TWO_PWR_32) & 0x1fffff];\n\n for (byteOffset = 6; byteOffset >= 0; byteOffset--) {\n /* This will surprisingly work for large shifts because JavaScript masks the shift amount by 0x1F */\n byte = (x_64[byteOffset >> 2] >>> (8 * byteOffset)) & 0xff;\n\n /* Starting from the most significant byte of a 64-bit number, start recording the first non-0 byte and then\n every byte thereafter */\n if (byte !== 0 || numEncodedBytes !== 0) {\n retVal[(numEncodedBytes + 1) >> 2] |= byte << ((numEncodedBytes + 1) * 8);\n numEncodedBytes += 1;\n }\n }\n numEncodedBytes = numEncodedBytes !== 0 ? numEncodedBytes : 1;\n retVal[0] |= numEncodedBytes;\n\n return { value: numEncodedBytes + 1 > 4 ? retVal : [retVal[0]], binLen: 8 + numEncodedBytes * 8 };\n}\n\n/**\n * Performs NIST right_encode function returned with no extra garbage bits. `x` is limited to <= 9007199254740991.\n *\n * @param x 32-bit number to to encode.\n * @returns The NIST specified output of the function.\n */\nfunction right_encode(x: number): packedValue {\n let byteOffset,\n byte,\n numEncodedBytes = 0;\n /* JavaScript numbers max out at 0x1FFFFFFFFFFFFF (7 bytes) so this will return a maximum of 7 + 1 = 8 bytes */\n const retVal = [0, 0],\n x_64 = [x & 0xffffffff, (x / TWO_PWR_32) & 0x1fffff];\n\n for (byteOffset = 6; byteOffset >= 0; byteOffset--) {\n /* This will surprisingly work for large shifts because JavaScript masks the shift amount by 0x1F */\n byte = (x_64[byteOffset >> 2] >>> (8 * byteOffset)) & 0xff;\n\n /* Starting from the most significant byte of a 64-bit number, start recording the first non-0 byte and then\n every byte thereafter */\n if (byte !== 0 || numEncodedBytes !== 0) {\n retVal[numEncodedBytes >> 2] |= byte << (numEncodedBytes * 8);\n numEncodedBytes += 1;\n }\n }\n numEncodedBytes = numEncodedBytes !== 0 ? numEncodedBytes : 1;\n retVal[numEncodedBytes >> 2] |= numEncodedBytes << (numEncodedBytes * 8);\n\n return { value: numEncodedBytes + 1 > 4 ? retVal : [retVal[0]], binLen: 8 + numEncodedBytes * 8 };\n}\n\n/**\n * Performs NIST encode_string function.\n *\n * @param input Packed array of integers.\n * @returns NIST encode_string output.\n */\nfunction encode_string(input: packedValue): packedValue {\n return packedLEConcat(left_encode(input[\"binLen\"]), input);\n}\n\n/**\n * Performs NIST byte_pad function.\n *\n * @param packed Packed array of integers.\n * @param outputByteLen Desired length of the output in bytes, assumed to be a multiple of 4.\n * @returns NIST byte_pad output.\n */\nfunction byte_pad(packed: packedValue, outputByteLen: number): number[] {\n let encodedLen = left_encode(outputByteLen),\n i;\n\n encodedLen = packedLEConcat(encodedLen, packed);\n const outputIntLen = outputByteLen >>> 2,\n intsToAppend = (outputIntLen - (encodedLen[\"value\"].length % outputIntLen)) % outputIntLen;\n\n for (i = 0; i < intsToAppend; i++) {\n encodedLen[\"value\"].push(0);\n }\n\n return encodedLen[\"value\"];\n}\n\n/**\n * Parses/validate constructor options for a CSHAKE variant\n *\n * @param options Option given to constructor\n */\nfunction resolveCSHAKEOptions(options: CSHAKEOptionsNoEncodingType): ResolvedCSHAKEOptionsNoEncodingType {\n const resolvedOptions = options || {};\n\n return {\n funcName: parseInputOption(\"funcName\", resolvedOptions[\"funcName\"], 1, { value: [], binLen: 0 }),\n customization: parseInputOption(\"Customization\", resolvedOptions[\"customization\"], 1, { value: [], binLen: 0 }),\n };\n}\n\n/**\n * Parses/validate constructor options for a KMAC variant\n *\n * @param options Option given to constructor\n */\nfunction resolveKMACOptions(options: KMACOptionsNoEncodingType): ResolvedKMACOptionsNoEncodingType {\n const resolvedOptions = options || {};\n\n return {\n kmacKey: parseInputOption(\"kmacKey\", resolvedOptions[\"kmacKey\"], 1),\n /* This is little-endian packed \"KMAC\" */\n funcName: { value: [0x43414d4b], binLen: 32 },\n customization: parseInputOption(\"Customization\", resolvedOptions[\"customization\"], 1, { value: [], binLen: 0 }),\n };\n}\n\nexport default class jsSHA extends jsSHABase<Int_64[][], VariantType> {\n intermediateState: Int_64[][];\n variantBlockSize: number;\n bigEndianMod: -1 | 1;\n outputBinLen: number;\n isVariableLen: boolean;\n HMACSupported: boolean;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n roundFunc: (block: number[], H: Int_64[][]) => Int_64[][];\n finalizeFunc: (\n remainder: number[],\n remainderBinLen: number,\n processedBinLen: number,\n H: Int_64[][],\n outputLen: number\n ) => number[];\n stateCloneFunc: (state: Int_64[][]) => Int_64[][];\n newStateFunc: (variant: VariantType) => Int_64[][];\n getMAC: ((options: { outputLen: number }) => number[]) | null;\n\n constructor(variant: FixedLengthVariantType, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(\n variant: FixedLengthVariantType,\n inputFormat: FormatNoTextType,\n options?: FixedLengthOptionsNoEncodingType\n );\n constructor(variant: \"SHAKE128\" | \"SHAKE256\", inputFormat: \"TEXT\", options?: SHAKEOptionsEncodingType);\n constructor(variant: \"SHAKE128\" | \"SHAKE256\", inputFormat: FormatNoTextType, options?: SHAKEOptionsNoEncodingType);\n constructor(variant: \"CSHAKE128\" | \"CSHAKE256\", inputFormat: \"TEXT\", options?: CSHAKEOptionsEncodingType);\n constructor(variant: \"CSHAKE128\" | \"CSHAKE256\", inputFormat: FormatNoTextType, options?: CSHAKEOptionsNoEncodingType);\n constructor(variant: \"KMAC128\" | \"KMAC256\", inputFormat: \"TEXT\", options: KMACOptionsEncodingType);\n constructor(variant: \"KMAC128\" | \"KMAC256\", inputFormat: FormatNoTextType, options: KMACOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n let delimiter = 0x06,\n variantBlockSize = 0;\n super(variant, inputFormat, options);\n const resolvedOptions = options || {};\n\n /* In other variants, this was done after variable initialization but need to do it earlier here becaue we want to\n avoid KMAC initialization */\n if (this.numRounds !== 1) {\n if (resolvedOptions[\"kmacKey\"] || resolvedOptions[\"hmacKey\"]) {\n throw new Error(mac_rounds_error);\n } else if (this.shaVariant === \"CSHAKE128\" || this.shaVariant === \"CSHAKE256\") {\n throw new Error(\"Cannot set numRounds for CSHAKE variants\");\n }\n }\n\n this.bigEndianMod = 1;\n this.converterFunc = getStrConverter(this.inputFormat, this.utfType, this.bigEndianMod);\n this.roundFunc = roundSHA3;\n this.stateCloneFunc = cloneSHA3State;\n this.newStateFunc = getNewState;\n this.intermediateState = getNewState(variant);\n\n this.isVariableLen = false;\n switch (variant) {\n case \"SHA3-224\":\n this.variantBlockSize = variantBlockSize = 1152;\n this.outputBinLen = 224;\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n break;\n case \"SHA3-256\":\n this.variantBlockSize = variantBlockSize = 1088;\n this.outputBinLen = 256;\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n break;\n case \"SHA3-384\":\n this.variantBlockSize = variantBlockSize = 832;\n this.outputBinLen = 384;\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n break;\n case \"SHA3-512\":\n this.variantBlockSize = variantBlockSize = 576;\n this.outputBinLen = 512;\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n break;\n case \"SHAKE128\":\n delimiter = 0x1f;\n this.variantBlockSize = variantBlockSize = 1344;\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n this.getMAC = null;\n break;\n case \"SHAKE256\":\n delimiter = 0x1f;\n this.variantBlockSize = variantBlockSize = 1088;\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n this.getMAC = null;\n break;\n case \"KMAC128\":\n delimiter = 0x4;\n this.variantBlockSize = variantBlockSize = 1344;\n this._initializeKMAC(options);\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getKMAC;\n break;\n case \"KMAC256\":\n delimiter = 0x4;\n this.variantBlockSize = variantBlockSize = 1088;\n this._initializeKMAC(options);\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getKMAC;\n break;\n case \"CSHAKE128\":\n this.variantBlockSize = variantBlockSize = 1344;\n delimiter = this._initializeCSHAKE(options);\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n this.getMAC = null;\n break;\n case \"CSHAKE256\":\n this.variantBlockSize = variantBlockSize = 1088;\n delimiter = this._initializeCSHAKE(options);\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n this.getMAC = null;\n break;\n default:\n throw new Error(sha_variant_error);\n }\n\n /* This needs to be down here as CSHAKE can change its delimiter */\n this.finalizeFunc = function (remainder, remainderBinLen, processedBinLen, state, outputBinLen): number[] {\n return finalizeSHA3(\n remainder,\n remainderBinLen,\n processedBinLen,\n state,\n variantBlockSize,\n delimiter,\n outputBinLen\n );\n };\n\n if (resolvedOptions[\"hmacKey\"]) {\n this._setHMACKey(parseInputOption(\"hmacKey\", resolvedOptions[\"hmacKey\"], this.bigEndianMod));\n }\n }\n\n /**\n * Initialize CSHAKE variants.\n *\n * @param options Options containing CSHAKE params.\n * @param funcNameOverride Overrides any \"funcName\" present in `options` (used with KMAC)\n * @returns The delimiter to be used\n */\n protected _initializeCSHAKE(options?: CSHAKEOptionsNoEncodingType, funcNameOverride?: packedValue): number {\n const resolvedOptions = resolveCSHAKEOptions(options || {});\n if (funcNameOverride) {\n resolvedOptions[\"funcName\"] = funcNameOverride;\n }\n const packedParams = packedLEConcat(\n encode_string(resolvedOptions[\"funcName\"]),\n encode_string(resolvedOptions[\"customization\"])\n );\n\n /* CSHAKE is defined to be a call to SHAKE iff both the customization and function-name string are both empty. This\n can be accomplished by processing nothing in this step. */\n if (resolvedOptions[\"customization\"][\"binLen\"] !== 0 || resolvedOptions[\"funcName\"][\"binLen\"] !== 0) {\n const byte_pad_out = byte_pad(packedParams, this.variantBlockSize >>> 3);\n for (let i = 0; i < byte_pad_out.length; i += this.variantBlockSize >>> 5) {\n this.intermediateState = this.roundFunc(\n byte_pad_out.slice(i, i + (this.variantBlockSize >>> 5)),\n this.intermediateState\n );\n this.processedLen += this.variantBlockSize;\n }\n return 0x04;\n } else {\n return 0x1f;\n }\n }\n\n /**\n * Initialize KMAC variants.\n *\n * @param options Options containing KMAC params.\n */\n protected _initializeKMAC(options: KMACOptionsNoEncodingType): void {\n const resolvedOptions = resolveKMACOptions(options || {});\n\n this._initializeCSHAKE(options, resolvedOptions[\"funcName\"]);\n const byte_pad_out = byte_pad(encode_string(resolvedOptions[\"kmacKey\"]), this.variantBlockSize >>> 3);\n for (let i = 0; i < byte_pad_out.length; i += this.variantBlockSize >>> 5) {\n this.intermediateState = this.roundFunc(\n byte_pad_out.slice(i, i + (this.variantBlockSize >>> 5)),\n this.intermediateState\n );\n this.processedLen += this.variantBlockSize;\n }\n this.macKeySet = true;\n }\n\n /**\n * Returns the the KMAC in the specified format.\n *\n * @param options Hashmap of extra outputs options. `outputLen` must be specified.\n * @returns The KMAC in the format specified.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected _getKMAC(options: { outputLen: number }): number[] {\n const concatedRemainder = packedLEConcat(\n { value: this.remainder.slice(), binLen: this.remainderLen },\n right_encode(options[\"outputLen\"])\n );\n\n return this.finalizeFunc(\n concatedRemainder[\"value\"],\n concatedRemainder[\"binLen\"],\n this.processedLen,\n this.stateCloneFunc(this.intermediateState),\n options[\"outputLen\"]\n );\n }\n}\n", "import { sha_variant_error } from \"./common\";\nimport {\n CSHAKEOptionsEncodingType,\n CSHAKEOptionsNoEncodingType,\n SHAKEOptionsEncodingType,\n SHAKEOptionsNoEncodingType,\n EncodingType,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n KMACOptionsNoEncodingType,\n KMACOptionsEncodingType,\n} from \"./custom_types\";\nimport jsSHA1 from \"./sha1\";\nimport jsSHA256 from \"./sha256\";\nimport jsSHA512 from \"./sha512\";\nimport jsSHA3 from \"./sha3\";\n\ntype FixedLengthVariantType =\n | \"SHA-1\"\n | \"SHA-224\"\n | \"SHA-256\"\n | \"SHA-384\"\n | \"SHA-512\"\n | \"SHA3-224\"\n | \"SHA3-256\"\n | \"SHA3-384\"\n | \"SHA3-512\";\n\nexport default class jsSHA {\n private readonly shaObj: jsSHA1 | jsSHA256 | jsSHA512 | jsSHA3;\n /**\n * @param variant The desired SHA variant (SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA3-224, SHA3-256, SHA3-256,\n * SHA3-384, SHA3-512, SHAKE128, SHAKE256, CSHAKE128, CSHAKE256, KMAC128, or KMAC256) as a string.\n * @param inputFormat The input format to be used in future `update` calls (TEXT, HEX, B64, BYTES, ARRAYBUFFER,\n * or UINT8ARRAY) as a string.\n * @param options Options in the form of { encoding?: \"UTF8\" | \"UTF16BE\" | \"UTF16LE\"; numRounds?: number }.\n * `encoding` is for only TEXT input (defaults to UTF8) and `numRounds` defaults to 1.\n * `numRounds` is not valid for any of the MAC or CSHAKE variants.\n * * If the variant supports HMAC, `options` may have an additional `hmacKey` key which must be in the form of\n * {value: <INPUT>, format: <FORMAT>, encoding?: \"UTF8\" | \"UTF16BE\" | \"UTF16LE\"} where <FORMAT> takes the same\n * values as `inputFormat` and <INPUT> can be a `string | ArrayBuffer | Uint8Array` depending on <FORMAT>.\n * Supplying this key switches to HMAC calculation and replaces the now deprecated call to `setHMACKey`.\n * * If the variant is CSHAKE128 or CSHAKE256, `options` may have two additional keys, `customization` and `funcName`,\n * which are the NIST customization and function-name strings. Both must be in the same form as `hmacKey`.\n * * If the variant is KMAC128 or KMAC256, `options` can include the `customization` key from CSHAKE variants and\n * *must* have a `kmacKey` key that takes the same form as the `customization` key.\n */\n constructor(variant: FixedLengthVariantType, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(\n variant: FixedLengthVariantType,\n inputFormat: FormatNoTextType,\n options?: FixedLengthOptionsNoEncodingType\n );\n constructor(variant: \"SHAKE128\" | \"SHAKE256\", inputFormat: \"TEXT\", options?: SHAKEOptionsEncodingType);\n constructor(variant: \"SHAKE128\" | \"SHAKE256\", inputFormat: FormatNoTextType, options?: SHAKEOptionsNoEncodingType);\n constructor(variant: \"CSHAKE128\" | \"CSHAKE256\", inputFormat: \"TEXT\", options?: CSHAKEOptionsEncodingType);\n constructor(variant: \"CSHAKE128\" | \"CSHAKE256\", inputFormat: FormatNoTextType, options?: CSHAKEOptionsNoEncodingType);\n constructor(variant: \"KMAC128\" | \"KMAC256\", inputFormat: \"TEXT\", options: KMACOptionsEncodingType);\n constructor(variant: \"KMAC128\" | \"KMAC256\", inputFormat: FormatNoTextType, options: KMACOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n if (\"SHA-1\" == variant) {\n this.shaObj = new jsSHA1(variant, inputFormat, options);\n } else if (\"SHA-224\" == variant || \"SHA-256\" == variant) {\n this.shaObj = new jsSHA256(variant, inputFormat, options);\n } else if (\"SHA-384\" == variant || \"SHA-512\" == variant) {\n this.shaObj = new jsSHA512(variant, inputFormat, options);\n } else if (\n \"SHA3-224\" == variant ||\n \"SHA3-256\" == variant ||\n \"SHA3-384\" == variant ||\n \"SHA3-512\" == variant ||\n \"SHAKE128\" == variant ||\n \"SHAKE256\" == variant ||\n \"CSHAKE128\" == variant ||\n \"CSHAKE256\" == variant ||\n \"KMAC128\" == variant ||\n \"KMAC256\" == variant\n ) {\n this.shaObj = new jsSHA3(variant, inputFormat, options);\n } else {\n throw new Error(sha_variant_error);\n }\n }\n\n /**\n * Takes `input` and hashes as many blocks as possible. Stores the rest for either a future `update` or `getHash` call.\n *\n * @param input The input to be hashed.\n * @returns A reference to the object.\n */\n update(input: string | ArrayBuffer | Uint8Array): this {\n this.shaObj.update(input);\n\n return this;\n }\n\n /**\n * Returns the desired SHA or MAC (if a HMAC/KMAC key was specified) hash of the input fed in via `update` calls.\n *\n * @param format The desired output formatting (B64, HEX, BYTES, ARRAYBUFFER, or UINT8ARRAY) as a string.\n * @param options Options in the form of { outputUpper?: boolean; b64Pad?: string; outputLen?: number; }.\n * `outputLen` is required for variable length output variants (this option was previously called `shakeLen` which\n * is now deprecated).\n * `outputUpper` is only for HEX output (defaults to false) and b64pad is only for B64 output (defaults to \"=\").\n * @returns The hash in the format specified.\n */\n getHash(format: \"HEX\", options?: { outputUpper?: boolean; outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"B64\", options?: { b64Pad?: string; outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"BYTES\", options?: { outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"UINT8ARRAY\", options?: { outputLen?: number; shakeLen?: number }): Uint8Array;\n getHash(format: \"ARRAYBUFFER\", options?: { outputLen?: number; shakeLen?: number }): ArrayBuffer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getHash(format: any, options?: any): any {\n return this.shaObj.getHash(format, options);\n }\n\n /**\n * Sets the HMAC key for an eventual `getHMAC` call. Must be called immediately after jsSHA object instantiation.\n * Now deprecated in favor of setting the `hmacKey` at object instantiation.\n *\n * @param key The key used to calculate the HMAC\n * @param inputFormat The format of key (HEX, TEXT, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY) as a string.\n * @param options Options in the form of { encoding?: \"UTF8\" | \"UTF16BE\" | \"UTF16LE }. `encoding` is only for TEXT\n * and defaults to UTF8.\n */\n setHMACKey(key: string, inputFormat: \"TEXT\", options?: { encoding?: EncodingType }): void;\n setHMACKey(key: string, inputFormat: \"B64\" | \"HEX\" | \"BYTES\"): void;\n setHMACKey(key: ArrayBuffer, inputFormat: \"ARRAYBUFFER\"): void;\n setHMACKey(key: Uint8Array, inputFormat: \"UINT8ARRAY\"): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setHMACKey(key: any, inputFormat: any, options?: any): void {\n this.shaObj.setHMACKey(key, inputFormat, options);\n }\n\n /**\n * Returns the the HMAC in the specified format using the key given by a previous `setHMACKey` call. Now deprecated\n * in favor of just calling `getHash`.\n *\n * @param format The desired output formatting (B64, HEX, BYTES, ARRAYBUFFER, or UINT8ARRAY) as a string.\n * @param options Options in the form of { outputUpper?: boolean; b64Pad?: string }. `outputUpper` is only for HEX\n * output (defaults to false) and `b64pad` is only for B64 output (defaults to \"=\").\n * @returns The HMAC in the format specified.\n */\n getHMAC(format: \"HEX\", options?: { outputUpper?: boolean }): string;\n getHMAC(format: \"B64\", options?: { b64Pad?: string }): string;\n getHMAC(format: \"BYTES\"): string;\n getHMAC(format: \"UINT8ARRAY\"): Uint8Array;\n getHMAC(format: \"ARRAYBUFFER\"): ArrayBuffer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getHMAC(format: any, options?: any): any {\n return this.shaObj.getHMAC(format, options);\n }\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\n//@ts-ignore\nimport jssha from \"jssha\";\n\nconst SEARCH_RANGE = 16;\nconst timeStep = 30;\n\nexport function computeTOTPandCheck(\n secretKey: Uint8Array,\n digits: number,\n code: number,\n): boolean {\n const now = new Date().getTime();\n const epoch = Math.floor(Math.round(now / 1000.0) / timeStep);\n\n for (let ms = -SEARCH_RANGE; ms < SEARCH_RANGE; ms++) {\n const movingFactor = (epoch + ms).toString(16).padStart(16, \"0\");\n\n const hmacSha = new jssha(\"SHA-1\", \"HEX\", {\n hmacKey: { value: secretKey, format: \"UINT8ARRAY\" },\n });\n hmacSha.update(movingFactor);\n const hmac_text = hmacSha.getHMAC(\"UINT8ARRAY\");\n\n const offset = hmac_text[hmac_text.length - 1] & 0xf;\n\n const otp =\n (((hmac_text[offset + 0] << 24) +\n (hmac_text[offset + 1] << 16) +\n (hmac_text[offset + 2] << 8) +\n hmac_text[offset + 3]) &\n 0x7fffffff) %\n Math.pow(10, digits);\n\n if (otp == code) return true;\n }\n return false;\n}\n\nconst encTable__ = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\".split(\"\");\nexport function base32enc(buffer: Uint8Array): string {\n let rpos = 0;\n let bits = 0;\n let vbit = 0;\n\n let result = \"\";\n while (rpos < buffer.length || vbit > 0) {\n if (rpos < buffer.length && vbit < 5) {\n bits = (bits << 8) | buffer[rpos++];\n vbit += 8;\n }\n if (vbit < 5) {\n bits <<= 5 - vbit;\n vbit = 5;\n }\n result += encTable__[(bits >> (vbit - 5)) & 31];\n vbit -= 5;\n }\n return result;\n}\n\n// const array = new Uint8Array(256)\n// const secretKey = window.crypto.getRandomValues(array)\n// console.log(base32enc(secretKey))\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodTotpSolve(props: AuthMethodSolveProps): VNode {\n const [answerCode, setAnswerCode] = useState(\"\");\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", {\n answer: answerCode,\n });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n return (\n <AnastasisClientFrame hideNav title=\"TOTP Challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>enter the totp solution</p>\n <TextInput\n label=\"Answer\"\n onConfirm={onNext}\n grabFocus\n bind={[answerCode, setAnswerCode]}\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton class=\"button is-info\" onClick={onNext}>\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { useEffect, useRef, useState } from \"preact/hooks\";\nimport { Notification } from \"../../../components/Notifications.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"../authMethod/index.jsx\";\nimport { AuthProvByStatusMap, State, testProvider } from \"./index.js\";\n\ninterface Props {\n providerType?: KnownAuthMethods;\n onCancel: () => Promise<void>;\n notifications?: Notification[];\n}\n\nexport default function useComponentState({\n providerType,\n onCancel,\n notifications = [],\n}: Props): State {\n const reducer = useAnastasisContext();\n\n const [providerURL, setProviderURL] = useState(\"\");\n\n const [error, setError] = useState<string | undefined>();\n const [testing, setTesting] = useState(false);\n\n const providerLabel = providerType\n ? authMethods[providerType].label\n : undefined;\n\n const allAuthProviders =\n !reducer ||\n !reducer.currentReducerState ||\n reducer.currentReducerState.reducer_type === \"error\" ||\n !reducer.currentReducerState.authentication_providers\n ? {}\n : reducer.currentReducerState.authentication_providers;\n\n const authProvidersByStatus = Object.keys(allAuthProviders).reduce(\n (prev, url) => {\n const p = allAuthProviders[url];\n if (\n providerLabel &&\n p.status === \"ok\" &&\n p.methods.findIndex((m) => m.type === providerType) !== -1\n ) {\n return prev;\n }\n prev[p.status].push({ ...p, url });\n return prev;\n },\n {\n \"not-contacted\": [],\n disabled: [],\n error: [],\n ok: [],\n } as AuthProvByStatusMap,\n );\n const authProviders = authProvidersByStatus[\"ok\"].map((p) => p.url);\n\n //FIXME: move this timeout logic into a hook\n const timeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => {\n if (timeout.current) clearTimeout(timeout.current);\n timeout.current = setTimeout(async () => {\n let url = providerURL;\n if (!url || authProviders.includes(url)) return;\n if (url && !url.match(/^(https?:)\\/\\/.+\\/(?:config)?$/iu))\n return setError(\n \"Malformed URL: Must be an HTTP(S) URL ending with a /\",\n );\n if (url.endsWith(\"/config\")) url = url.substring(0, url.length - 6);\n try {\n setTesting(true);\n await testProvider(url, providerType);\n setError(\"\");\n } catch (e) {\n if (e instanceof Error) setError(e.message);\n else\n throw new Error(\n `Unexpected Error Type: ${typeof e} - Cannot handle. Error: ${e}`,\n );\n }\n setTesting(false);\n }, 200);\n }, [providerURL, reducer]);\n\n if (!reducer) {\n return {\n status: \"no-reducer\",\n };\n }\n\n if (\n !reducer.currentReducerState ||\n !(\"authentication_providers\" in reducer.currentReducerState)\n ) {\n return {\n status: \"invalid-state\",\n };\n }\n\n const addProvider = async (provider_url: string): Promise<void> => {\n await reducer.transition(\"add_provider\", { provider_url });\n onCancel();\n };\n const deleteProvider = async (provider_url: string): Promise<void> => {\n reducer.transition(\"delete_provider\", { provider_url });\n };\n\n let errors = !providerURL ? \"Add provider URL\" : undefined;\n let url: string | undefined;\n // We'll validate it in testProvider & via a regex above - there's no need in this :)\n // try {\n // url = new URL(\"\", providerURL).href;\n // } catch {\n // errors = \"Check the URL\";\n // }\n const _url = url;\n\n if (!!error && !errors) {\n errors = error;\n }\n if (!errors && authProviders.includes(url!)) {\n errors = \"That provider is already known\";\n }\n\n const commonState = {\n addProvider: !_url ? undefined : async () => addProvider(_url),\n deleteProvider: async (url: string) => deleteProvider(url),\n allAuthProviders,\n authProvidersByStatus,\n onCancel,\n providerURL,\n testing,\n setProviderURL: async (s: string) => setProviderURL(s),\n errors,\n error,\n notifications,\n };\n\n if (!providerLabel) {\n return {\n status: \"without-type\",\n ...commonState,\n };\n } else {\n return {\n status: \"with-type\",\n providerLabel,\n ...commonState,\n };\n }\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 */\nimport {\n AuthenticationProviderStatusError,\n AuthenticationProviderStatusOk,\n} from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { Notifications } from \"../../../components/Notifications.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { testProvider, WithoutType, WithType } from \"./index.js\";\nimport { useTranslationContext } from \"../../../context/translation.js\";\n\nexport function WithProviderType(props: WithType): VNode {\n const { i18n } = useTranslationContext();\n return (\n <AnastasisClientFrame\n hideNav\n title=\"Backup: Manage providers1\"\n hideNext={props.errors}\n >\n <div>\n <Notifications notifications={props.notifications} />\n <p>{i18n.str`Add a provider url for a ${props.providerLabel} service`}</p>\n <div class=\"container\">\n <TextInput\n label=\"Provider URL\"\n placeholder=\"https://provider.com\"\n grabFocus\n error={props.errors}\n bind={[props.providerURL, props.setProviderURL]}\n />\n </div>\n <p class=\"block\">Example: https://kudos.demo.anastasis.lu</p>\n {props.testing && <p class=\"has-text-info\">Testing</p>}\n\n <div\n class=\"block\"\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={props.onCancel}>\n Cancel\n </button>\n <span data-tooltip={props.errors}>\n <button\n class=\"button is-info\"\n disabled={props.error !== \"\" || props.testing}\n onClick={props.addProvider}\n >\n Add\n </button>\n </span>\n </div>\n\n {props.authProvidersByStatus[\"ok\"].length > 0 ? (\n <p class=\"subtitle\">\n Current providers for {props.providerLabel} service\n </p>\n ) : (\n <p class=\"subtitle\">\n No known providers for {props.providerLabel} service\n </p>\n )}\n\n {props.authProvidersByStatus[\"ok\"].map((k, i) => {\n const p = k as AuthenticationProviderStatusOk;\n return (\n <TableRow\n key={i}\n url={k.url}\n info={p}\n onDelete={props.deleteProvider}\n />\n );\n })}\n <p class=\"subtitle\">Providers with errors</p>\n {props.authProvidersByStatus[\"error\"].map((k, i) => {\n const p = k as AuthenticationProviderStatusError;\n return (\n <TableRowError\n key={i}\n url={k.url}\n info={p}\n onDelete={props.deleteProvider}\n />\n );\n })}\n </div>\n </AnastasisClientFrame>\n );\n}\n\nexport function WithoutProviderType(props: WithoutType): VNode {\n return (\n <AnastasisClientFrame\n hideNav\n title=\"Backup: Manage providers\"\n hideNext={props.errors}\n >\n <div>\n <Notifications notifications={props.notifications} />\n <p>Add a provider url</p>\n <div class=\"container\">\n <TextInput\n label=\"Provider URL\"\n placeholder=\"https://provider.com/\"\n grabFocus\n error={props.errors}\n bind={[props.providerURL, props.setProviderURL]}\n />\n </div>\n <p class=\"block\">Example: https://kudos.demo.anastasis.lu/</p>\n {props.testing && <p class=\"has-text-info\">Testing</p>}\n\n <div\n class=\"block\"\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={props.onCancel}>\n Cancel\n </button>\n <span data-tooltip={props.errors}>\n <button\n class=\"button is-info\"\n disabled={props.error !== \"\" || props.testing}\n onClick={props.addProvider}\n >\n Add\n </button>\n </span>\n </div>\n\n {props.authProvidersByStatus[\"ok\"].length > 0 ? (\n <p class=\"subtitle\">Current providers</p>\n ) : (\n <p class=\"subtitle\">No known providers, add one.</p>\n )}\n\n {props.authProvidersByStatus[\"ok\"].map((k, i) => {\n const p = k as AuthenticationProviderStatusOk;\n return (\n <TableRow\n key={i}\n url={k.url}\n info={p}\n onDelete={props.deleteProvider}\n />\n );\n })}\n <p class=\"subtitle\">Providers with errors</p>\n {props.authProvidersByStatus[\"error\"].map((k, i) => {\n const p = k as AuthenticationProviderStatusError;\n return (\n <TableRowError\n key={i}\n url={k.url}\n info={p}\n onDelete={props.deleteProvider}\n />\n );\n })}\n </div>\n </AnastasisClientFrame>\n );\n}\n\nfunction TableRow({\n url,\n info,\n onDelete,\n}: {\n onDelete: (s: string) => Promise<void>;\n url: string;\n info: AuthenticationProviderStatusOk;\n}): VNode {\n const [status, setStatus] = useState(\"checking\");\n useEffect(function () {\n testProvider(url.endsWith(\"/\") ? url.substring(0, url.length - 1) : url)\n .then(function () {\n setStatus(\"responding\");\n })\n .catch(function () {\n setStatus(\"failed to contact\");\n });\n });\n return (\n <div\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div>\n <div class=\"subtitle\">{url}</div>\n <dl>\n <dt>\n <b>Business Name</b>\n </dt>\n <dd>{info.business_name}</dd>\n <dt>\n <b>Supported methods</b>\n </dt>\n <dd>{info.methods.map((m) => m.type).join(\",\")}</dd>\n <dt>\n <b>Maximum storage</b>\n </dt>\n <dd>{info.storage_limit_in_megabytes} Mb</dd>\n <dt>\n <b>Status</b>\n </dt>\n <dd>{status}</dd>\n </dl>\n </div>\n <div\n class=\"block\"\n style={{\n marginTop: \"auto\",\n marginBottom: \"auto\",\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"column\",\n }}\n >\n <button class=\"button is-danger\" onClick={() => onDelete(url)}>\n Remove\n </button>\n </div>\n </div>\n );\n}\n\nfunction TableRowError({\n url,\n info,\n onDelete,\n}: {\n onDelete: (s: string) => void;\n url: string;\n info: AuthenticationProviderStatusError;\n}): VNode {\n const [status, setStatus] = useState(\"checking\");\n useEffect(function () {\n testProvider(url.endsWith(\"/\") ? url.substring(0, url.length - 1) : url)\n .then(function () {\n setStatus(\"responding\");\n })\n .catch(function () {\n setStatus(\"failed to contact\");\n });\n });\n return (\n <div\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div>\n <div class=\"subtitle\">{url}</div>\n <dl>\n <dt>\n <b>Error</b>\n </dt>\n <dd>{info.hint}</dd>\n <dt>\n <b>Code</b>\n </dt>\n <dd>{info.code}</dd>\n <dt>\n <b>Status</b>\n </dt>\n <dd>{status}</dd>\n </dl>\n </div>\n <div\n class=\"block\"\n style={{\n marginTop: \"auto\",\n marginBottom: \"auto\",\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"column\",\n }}\n >\n <button class=\"button is-danger\" onClick={() => onDelete(url)}>\n Remove\n </button>\n </div>\n </div>\n );\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 */\nimport { AuthenticationProviderStatus } from \"@gnu-taler/anastasis-core\";\nimport InvalidState from \"../../../components/InvalidState.js\";\nimport NoReducer from \"../../../components/NoReducer.js\";\nimport { Notification } from \"../../../components/Notifications.js\";\nimport { compose, StateViewMap } from \"../../../utils/index.js\";\nimport useComponentState from \"./state.js\";\nimport { WithoutProviderType, WithProviderType } from \"./views.js\";\n\nexport type AuthProvByStatusMap = Record<\n AuthenticationProviderStatus[\"status\"],\n (AuthenticationProviderStatus & { url: string })[]\n>;\n\nexport type State = NoReducer | InvalidState | WithType | WithoutType;\n\nexport interface NoReducer {\n status: \"no-reducer\";\n}\nexport interface InvalidState {\n status: \"invalid-state\";\n}\n\ninterface CommonProps {\n addProvider?: () => Promise<void>;\n deleteProvider: (url: string) => Promise<void>;\n authProvidersByStatus: AuthProvByStatusMap;\n error: string | undefined;\n onCancel: () => Promise<void>;\n testing: boolean;\n setProviderURL: (url: string) => Promise<void>;\n providerURL: string;\n errors: string | undefined;\n notifications: Notification[];\n}\n\nexport interface WithType extends CommonProps {\n status: \"with-type\";\n providerLabel: string;\n}\nexport interface WithoutType extends CommonProps {\n status: \"without-type\";\n}\n\nconst map: StateViewMap<State> = {\n \"no-reducer\": NoReducer,\n \"invalid-state\": InvalidState,\n \"with-type\": WithProviderType,\n \"without-type\": WithoutProviderType,\n};\n\nexport default compose(\"AddingProviderScreen\", useComponentState, map);\n\nconst providerResponseCache = new Map<string, any>(); // `any` is the return type of res.json()\nexport async function testProvider(\n url: string,\n expectedMethodType?: string,\n): Promise<void> {\n const testFatalPrefix = `Encountered a fatal error whilst testing the provider ${url}`;\n let configUrl = \"\";\n try {\n configUrl = new URL(\"config\", url).href;\n } catch (error) {\n throw new Error(`${testFatalPrefix}: Invalid Provider URL: ${url}\nError: ${error}`);\n }\n // TODO: look into using core.getProviderInfo :)\n const providerHasUrl = providerResponseCache.has(url);\n const json = providerHasUrl\n ? providerResponseCache.get(url)\n : await fetch(configUrl)\n .catch((error) => {\n throw new Error(`${testFatalPrefix}: Could not connect: ${error}\nPlease check the URL.`);\n })\n .then(async (response) => {\n if (!response.ok)\n throw new Error(\n `${testFatalPrefix}: The server ${response.url} responded with a non-2xx response.`,\n );\n try {\n return await response.json();\n } catch (error) {\n throw new Error(\n `${testFatalPrefix}: The server responded with malformed JSON.\\nError: ${error}`,\n );\n }\n });\n if (typeof json !== \"object\")\n throw new Error(\n `${testFatalPrefix}: Did not get an object after decoding.`,\n );\n if (!(\"name\" in json) || json.name !== \"anastasis\") {\n throw new Error(\n `${testFatalPrefix}: The provider does not appear to be an Anastasis provider. Please check the provider's URL.`,\n );\n }\n if (!(\"methods\" in json) || !Array.isArray(json.methods)) {\n throw new Error(\n \"This provider doesn't have authentication method. Please check the provider's URL and ensure it is properly configured.\",\n );\n }\n if (!providerHasUrl) providerResponseCache.set(url, json);\n if (!expectedMethodType) {\n return;\n }\n let found = false;\n for (let i = 0; i < json.methods.length && !found; i++) {\n found = json.methods[i].type === expectedMethodType;\n }\n if (!found) {\n throw new Error(\n `${testFatalPrefix}: This provider does not support authentication method ${expectedMethodType}`,\n );\n }\n return;\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 */\nimport { AuthenticationProviderStatusOk } from \"@gnu-taler/anastasis-core\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function BackupFinishedScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n const details = reducer.currentReducerState.success_details;\n const providers = reducer.currentReducerState.authentication_providers ?? {};\n\n return (\n <AnastasisClientFrame hideNav title=\"Backup success!\">\n <p>Your backup is complete.</p>\n\n {details && (\n <div class=\"block\">\n <p>The backup is stored by the following providers:</p>\n {Object.keys(details).map((url, i) => {\n const sd = details[url];\n const p = providers[url] as AuthenticationProviderStatusOk;\n return (\n <div key={i} class=\"box\">\n <a href={url} target=\"_blank\" rel=\"noreferrer\">\n {p.business_name}\n </a>\n <p>\n version {sd.policy_version}\n {sd.policy_expiration.t_s !== \"never\"\n ? ` expires at: ${format(\n new Date(sd.policy_expiration.t_s * 1000),\n \"dd-MM-yyyy\",\n )}`\n : \" without expiration date\"}\n </p>\n </div>\n );\n })}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n <p>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-primary is-right\"\n onClick={() => reducer.reset()}\n >\n Start again\n </button>\n </div>\n </p>\n </div>\n </div>\n )}\n </AnastasisClientFrame>\n );\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 */\nimport {\n ChallengeFeedback,\n ChallengeFeedbackStatus,\n} from \"@gnu-taler/anastasis-core\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../components/AsyncButton.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"./authMethod/index.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nfunction OverviewFeedbackDisplay(props: {\n feedback?: ChallengeFeedback;\n}): VNode {\n const { feedback } = props;\n if (!feedback) {\n return <Fragment />;\n }\n\n switch (feedback.state) {\n case ChallengeFeedbackStatus.Solved:\n return <div />;\n case ChallengeFeedbackStatus.IbanInstructions:\n return <div class=\"block has-text-info\">Payment required.</div>;\n case ChallengeFeedbackStatus.ServerFailure:\n return <div class=\"block has-text-danger\">Server error.</div>;\n case ChallengeFeedbackStatus.RateLimitExceeded:\n return (\n <div class=\"block has-text-danger\">\n There were to many failed attempts.\n </div>\n );\n case ChallengeFeedbackStatus.Unsupported:\n return (\n <div class=\"block has-text-danger\">\n This client doesn&apos;t support solving this type of challenge. Use\n another version or contact the provider.\n </div>\n );\n case ChallengeFeedbackStatus.TruthUnknown:\n return (\n <div class=\"block has-text-danger\">\n Provider doesn&apos;t recognize the type of challenge. Use another\n version or contact the provider.\n </div>\n );\n case ChallengeFeedbackStatus.IncorrectAnswer:\n return (\n <div class=\"block has-text-danger\">The answer was not correct.</div>\n );\n case ChallengeFeedbackStatus.CodeInFile:\n return <div class=\"block has-text-info\">code in file</div>;\n case ChallengeFeedbackStatus.CodeSent:\n return <div class=\"block has-text-info\">Code sent</div>;\n case ChallengeFeedbackStatus.TalerPayment:\n return <div class=\"block has-text-info\">Payment required</div>;\n }\n}\n\nexport function ChallengeOverviewScreen(): VNode {\n const reducer = useAnastasisContext();\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return <div>invalid state</div>;\n }\n\n const policies =\n reducer.currentReducerState.recovery_information?.policies ?? [];\n const knownChallengesArray =\n reducer.currentReducerState.recovery_information?.challenges ?? [];\n const challengeFeedback =\n reducer.currentReducerState?.challenge_feedback ?? {};\n\n const knownChallengesMap: {\n [uuid: string]: {\n type: string;\n instructions: string;\n feedback: ChallengeFeedback | undefined;\n };\n } = {};\n for (const ch of knownChallengesArray) {\n knownChallengesMap[ch.uuid] = {\n type: ch.type,\n instructions: ch.instructions,\n feedback: challengeFeedback[ch.uuid],\n };\n }\n const policiesWithInfo = policies\n .map((row) => {\n let isPolicySolved = true;\n const challenges = row\n .map(({ uuid }) => {\n const info = knownChallengesMap[uuid];\n const isChallengeSolved = info?.feedback?.state === \"solved\";\n isPolicySolved = isPolicySolved && isChallengeSolved;\n return { info, uuid, isChallengeSolved };\n })\n .filter((ch) => ch.info !== undefined);\n\n return {\n isPolicySolved,\n challenges,\n corrupted: row.length > challenges.length,\n };\n })\n .filter((p) => !p.corrupted);\n\n const atLeastThereIsOnePolicySolved =\n policiesWithInfo.find((p) => p.isPolicySolved) !== undefined;\n\n const errors = !atLeastThereIsOnePolicySolved\n ? \"Solve one policy before proceeding\"\n : undefined;\n return (\n <AnastasisClientFrame hideNext={errors} title=\"Recovery: Solve challenges\">\n {!policiesWithInfo.length ? (\n <p class=\"block\">\n No policies found, try with another version of the secret\n </p>\n ) : policiesWithInfo.length === 1 ? (\n <p class=\"block\">\n One policy found for this secret. You need to solve all the challenges\n in order to recover your secret.\n </p>\n ) : (\n <p class=\"block\">\n We have found {policiesWithInfo.length} polices. You need to solve all\n the challenges from one policy in order to recover your secret.\n </p>\n )}\n {policiesWithInfo.map((policy, policy_index) => {\n const tableBody = policy.challenges.map(({ info, uuid }) => {\n const method = authMethods[info.type as KnownAuthMethods];\n\n if (!method) {\n return (\n <div\n key={uuid}\n class=\"block\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <span>unknown challenge</span>\n </div>\n </div>\n );\n }\n\n function ChallengeButton({\n id,\n feedback,\n }: {\n id: string;\n feedback?: ChallengeFeedback;\n }): VNode {\n async function selectChallenge(): Promise<void> {\n if (reducer) {\n return reducer.transition(\"select_challenge\", { uuid: id });\n }\n }\n if (!feedback) {\n return (\n <div>\n <AsyncButton\n class=\"button\"\n disabled={\n atLeastThereIsOnePolicySolved && !policy.isPolicySolved\n }\n onClick={selectChallenge}\n >\n Solve\n </AsyncButton>\n </div>\n );\n }\n switch (feedback.state) {\n case ChallengeFeedbackStatus.ServerFailure:\n case ChallengeFeedbackStatus.Unsupported:\n case ChallengeFeedbackStatus.TruthUnknown:\n case ChallengeFeedbackStatus.RateLimitExceeded:\n return <div />;\n case ChallengeFeedbackStatus.IbanInstructions:\n case ChallengeFeedbackStatus.TalerPayment:\n return (\n <div>\n <AsyncButton\n class=\"button\"\n disabled={\n atLeastThereIsOnePolicySolved && !policy.isPolicySolved\n }\n onClick={selectChallenge}\n >\n Pay\n </AsyncButton>\n </div>\n );\n case ChallengeFeedbackStatus.Solved:\n return (\n <div>\n <div class=\"tag is-success is-large\">Solved</div>\n </div>\n );\n default:\n return (\n <div>\n <AsyncButton\n class=\"button\"\n disabled={\n atLeastThereIsOnePolicySolved && !policy.isPolicySolved\n }\n onClick={selectChallenge}\n >\n Solve\n </AsyncButton>\n </div>\n );\n }\n }\n return (\n <div\n key={uuid}\n class=\"block\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <span class=\"icon\">{method?.icon}</span>\n <span>{info.instructions}</span>\n </div>\n <OverviewFeedbackDisplay feedback={info.feedback} />\n </div>\n\n <ChallengeButton id={uuid} feedback={info.feedback} />\n </div>\n );\n });\n\n const policyName = policy.challenges\n .map((x) => x.info.type)\n .join(\" + \");\n\n const opa = !atLeastThereIsOnePolicySolved\n ? undefined\n : policy.isPolicySolved\n ? undefined\n : \"0.6\";\n\n return (\n <div\n key={policy_index}\n class=\"box\"\n style={{\n opacity: opa,\n }}\n >\n <h3 class=\"subtitle\">\n Policy #{policy_index + 1}: {policyName}\n </h3>\n {policy.challenges.length === 0 && (\n <p>This policy doesn&apos;t have any challenges.</p>\n )}\n {policy.challenges.length === 1 && (\n <p>This policy has one challenge.</p>\n )}\n {policy.challenges.length > 1 && (\n <p>This policy has {policy.challenges.length} challenges.</p>\n )}\n {tableBody}\n </div>\n );\n })}\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function ChallengePayingScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return <div>invalid state</div>;\n }\n const payments = [\"\"]; //reducer.currentReducerState.payments ??\n return (\n <AnastasisClientFrame hideNav title=\"Recovery: Challenge Paying\">\n <p>\n Some of the providers require a payment to store the encrypted\n authentication information.\n </p>\n <ul>\n {payments.map((x, i) => {\n return <li key={i}>{x}</li>;\n })}\n </ul>\n <button onClick={() => reducer.transition(\"pay\", {})}>\n Check payment status now\n </button>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame, withProcessLabel } from \"./index.js\";\n\nexport function ContinentSelectionScreen(): VNode {\n const reducer = useAnastasisContext();\n\n // FIXME: remove this when #7056 is fixed\n const countryFromReducer =\n (reducer?.currentReducerState as any).selected_country || \"\";\n const [countryCode, setCountryCode] = useState(countryFromReducer);\n\n if (\n !reducer ||\n !reducer.currentReducerState ||\n !(\"continents\" in reducer.currentReducerState)\n ) {\n return <div />;\n }\n const selectContinent = (continent: string): void => {\n reducer.transition(\"select_continent\", { continent });\n };\n const selectCountry = (country: string): void => {\n setCountryCode(country);\n };\n\n const continentList = reducer.currentReducerState.continents || [];\n const countryList = reducer.currentReducerState.countries || [];\n const theContinent = reducer.currentReducerState.selected_continent || \"\";\n // const cc = reducer.currentReducerState.selected_country || \"\";\n const theCountry = countryList.find((c) => c.code === countryCode);\n const selectCountryAction = async () => {\n // selection should be when the select box changes it value\n if (!theCountry) return;\n // FIXME: Why is there no await?\n reducer.transition(\"select_country\", {\n country_code: countryCode,\n });\n };\n\n // const step1 = reducer.currentReducerState.backup_state === BackupStates.ContinentSelecting ||\n // reducer.currentReducerState.recovery_state === RecoveryStates.ContinentSelecting;\n\n // FIXME: i18n\n const errors = !theCountry ? \"Select a country\" : undefined;\n\n const handleBack = async () => {\n // We want to go to the start, even if we already selected\n // a country.\n // FIXME: What if we don't want to lose all information here?\n // Can we do some kind of soft reset?\n reducer.reset();\n };\n\n return (\n <AnastasisClientFrame\n hideNext={errors}\n title={withProcessLabel(reducer, \"Where do you live?\")}\n onNext={selectCountryAction}\n onBack={handleBack}\n >\n <div class=\"columns\">\n <div class=\"column is-one-third\">\n <div class=\"field\">\n <label class=\"label\">Continent</label>\n <div class=\"control is-expanded has-icons-left\">\n <div class=\"select is-fullwidth\">\n <select\n onChange={(e) => selectContinent(e.currentTarget.value)}\n value={theContinent}\n >\n <option key=\"none\" disabled selected value=\"\">\n {\" \"}\n Choose a continent{\" \"}\n </option>\n {continentList.map((prov) => (\n <option key={prov.name} value={prov.name}>\n {prov.name}\n </option>\n ))}\n </select>\n <div class=\"icon is-small is-left\">\n <i class=\"mdi mdi-earth\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"field\">\n <label class=\"label\">Country</label>\n <div class=\"control is-expanded has-icons-left\">\n <div class=\"select is-fullwidth\">\n <select\n onChange={(e) => selectCountry((e.target as any).value)}\n disabled={!theContinent}\n value={theCountry?.code || \"\"}\n >\n <option key=\"none\" disabled selected value=\"\">\n {\" \"}\n Choose a country{\" \"}\n </option>\n {countryList.map((prov) => (\n <option key={prov.name} value={prov.code}>\n {prov.name}\n </option>\n ))}\n </select>\n <div class=\"icon is-small is-left\">\n <i class=\"mdi mdi-earth\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-two-third\">\n <p>\n Your selection will help us ask right information to uniquely\n identify you when you want to recover your secret again.\n </p>\n <p>\n Choose the country that issued most of your long-term legal\n documents or personal identifiers.\n </p>\n {/* <div\n style={{\n border: \"1px solid gray\",\n borderRadius: \"0.5em\",\n backgroundColor: \"#fbfcbd\",\n padding: \"0.5em\",\n }}\n >\n <p>\n If you just want to try out Anastasis, we recommend that you\n choose <b>Testcontinent</b> with <b>Demoland</b>. For this special\n country, you will be asked for a simple number and not real,\n personal identifiable information.\n </p>\n </div> */}\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function PoliciesPayingScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n const payments = reducer.currentReducerState.policy_payment_requests ?? [];\n\n return (\n <AnastasisClientFrame hideNav title=\"Backup: Recovery Document Payments\">\n <p>\n Some of the providers require a payment to store the encrypted recovery\n document.\n </p>\n <ul>\n {payments.map((x, i) => {\n return (\n <li key={i}>\n {x.provider}: {x.payto}\n </li>\n );\n })}\n </ul>\n <button onClick={() => reducer.transition(\"pay\", {})}>\n Check payment status now\n </button>\n </AnastasisClientFrame>\n );\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 */\nimport { bytesToString, decodeCrock } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { QR } from \"../../components/QR.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function RecoveryFinishedScreen(): VNode {\n const reducer = useAnastasisContext();\n const [copied, setCopied] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setCopied(false);\n }, 1000);\n }, [copied]);\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return <div>invalid state</div>;\n }\n const secretName = reducer.currentReducerState.recovery_document?.secret_name;\n const encodedSecret = reducer.currentReducerState.core_secret;\n if (!encodedSecret) {\n return (\n <AnastasisClientFrame title=\"Recovery Problem\" hideNav>\n <p>Secret not found</p>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n const secret = bytesToString(decodeCrock(encodedSecret.value));\n const plainText =\n encodedSecret.value.length < 1000 && encodedSecret.mime === \"text/plain\";\n\n let [uri, setUri] = useState(`data:${encodedSecret.mime},${secret}`);\n fetch(`data:${encodedSecret.mime},${secret}`) // TODO: look into using new Blob\n .then((v) => v.blob())\n .then((blob) => URL.createObjectURL(blob))\n .then((newUri) => {\n setUri(newUri);\n });\n return (\n <AnastasisClientFrame title=\"Recovery Success\" hideNav>\n <h2 class=\"subtitle\">Your secret was recovered</h2>\n {secretName && (\n <p class=\"block\">\n <b>Secret name:</b> {secretName}\n </p>\n )}\n <div class=\"block buttons\" disabled={copied}>\n {plainText ? (\n <button\n class=\"button\"\n onClick={() => {\n navigator.clipboard.writeText(secret);\n setCopied(true);\n }}\n >\n {!copied ? \"Copy\" : \"Copied\"}\n </button>\n ) : undefined}\n\n <a\n class=\"button is-info\"\n download={\n encodedSecret.filename ? encodedSecret.filename : \"secret.file\"\n }\n href={uri}\n >\n <div class=\"icon is-small \">\n <i class=\"mdi mdi-download\" />\n </div>\n <span>Download content</span>\n </a>\n </div>\n\n {plainText ? (\n <div class=\"block\">\n <QR text={secret} />\n </div>\n ) : undefined}\n\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n <p>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-primary is-right\"\n onClick={() => reducer.reset()}\n >\n Start again\n </button>\n </div>\n </p>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { AuthenticationProviderStatusOk } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"./authMethod/index.js\";\nimport { EditPoliciesScreen } from \"./EditPoliciesScreen.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function ReviewPoliciesScreen(): VNode {\n const [editingPolicy, setEditingPolicy] = useState<number | undefined>();\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n\n const configuredAuthMethods =\n reducer.currentReducerState.authentication_methods ?? [];\n const policies = reducer.currentReducerState.policies ?? [];\n\n const providers = reducer.currentReducerState.authentication_providers ?? {};\n\n if (editingPolicy !== undefined) {\n return (\n <EditPoliciesScreen\n index={editingPolicy}\n cancel={() => setEditingPolicy(undefined)}\n confirm={async (newMethods) => {\n await reducer.transition(\"update_policy\", {\n policy_index: editingPolicy,\n policy: newMethods,\n });\n setEditingPolicy(undefined);\n }}\n />\n );\n }\n\n const errors = policies.length < 1 ? \"Need more policies\" : undefined;\n return (\n <AnastasisClientFrame\n hideNext={errors}\n title=\"Backup: Review Recovery Policies\"\n >\n {policies.length > 0 && (\n <p class=\"block\">\n Based on your configured authentication method you have created, some\n policies have been configured. In order to recover your secret you\n have to solve all the challenges of at least one policy.\n </p>\n )}\n {policies.length < 1 && (\n <p class=\"block\">\n No policies had been created. Go back and add more authentication\n methods.\n </p>\n )}\n <div class=\"block\">\n <button\n class=\"button is-success\"\n style={{ marginLeft: 10 }}\n onClick={() => setEditingPolicy(policies.length)}\n >\n Add new policy\n </button>\n </div>\n {policies.map((p, policy_index) => {\n const methods = p.methods\n .map(\n (x) =>\n configuredAuthMethods[x.authentication_method] && {\n ...configuredAuthMethods[x.authentication_method],\n provider: x.provider,\n },\n )\n .filter((x) => !!x);\n\n const policyName = methods.map((x) => x.type).join(\" + \");\n\n if (p.methods.length > methods.length) {\n //there is at least one authentication method that is corrupted\n return null;\n }\n\n return (\n <div\n key={policy_index}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div>\n <h3 class=\"subtitle\">\n Policy #{policy_index + 1}: {policyName}\n </h3>\n {!methods.length && <p>No auth method found</p>}\n {methods.map((m, i) => {\n const p = providers[\n m.provider\n ] as AuthenticationProviderStatusOk;\n return (\n <p\n key={i}\n class=\"block\"\n style={{ display: \"flex\", alignItems: \"center\" }}\n >\n <span class=\"icon\">\n {authMethods[m.type as KnownAuthMethods]?.icon}\n </span>\n <span>\n {m.instructions} recovery provided by{\" \"}\n <a href={m.provider} target=\"_blank\" rel=\"noreferrer\">\n {p.business_name}\n </a>\n </span>\n </p>\n );\n })}\n </div>\n <div\n style={{\n marginTop: \"auto\",\n marginBottom: \"auto\",\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"column\",\n }}\n >\n <button\n class=\"button is-info block\"\n onClick={() => setEditingPolicy(policy_index)}\n >\n Edit\n </button>\n <button\n class=\"button is-danger block\"\n onClick={() =>\n reducer.transition(\"delete_policy\", { policy_index })\n }\n >\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"./authMethod/index.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport interface ProviderInfo {\n url: string;\n cost: string;\n isFree: boolean;\n}\n\nexport type ProviderInfoByType = {\n [type in KnownAuthMethods]?: ProviderInfo[];\n};\n\ninterface Props {\n index: number;\n cancel: () => void;\n confirm: (changes: MethodProvider[]) => void;\n}\n\nexport interface MethodProvider {\n authentication_method: number;\n provider: string;\n}\n\nexport function EditPoliciesScreen({\n index: policy_index,\n cancel,\n confirm,\n}: Props): VNode {\n const [changedProvider, setChangedProvider] = useState<Array<string>>([]);\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n\n const selectableProviders: ProviderInfoByType = {};\n const allProviders = Object.entries(\n reducer.currentReducerState.authentication_providers || {},\n );\n for (let index = 0; index < allProviders.length; index++) {\n const [url, status] = allProviders[index];\n if (\"methods\" in status) {\n status.methods.map((m) => {\n const type: KnownAuthMethods = m.type as KnownAuthMethods;\n const values = selectableProviders[type] || [];\n const isFree = !m.usage_fee || m.usage_fee.endsWith(\":0\");\n values.push({ url, cost: m.usage_fee, isFree });\n selectableProviders[type] = values;\n });\n }\n }\n\n const allAuthMethods =\n reducer.currentReducerState.authentication_methods ?? [];\n const policies = reducer.currentReducerState.policies ?? [];\n const policy = policies[policy_index];\n\n for (\n let method_index = 0;\n method_index < allAuthMethods.length;\n method_index++\n ) {\n policy?.methods.find((m) => m.authentication_method === method_index)\n ?.provider;\n }\n\n function sendChanges(): void {\n const newMethods: MethodProvider[] = [];\n allAuthMethods.forEach((method, index) => {\n const oldValue = policy?.methods.find(\n (m) => m.authentication_method === index,\n );\n if (changedProvider[index] === undefined && oldValue !== undefined) {\n newMethods.push(oldValue);\n }\n if (\n changedProvider[index] !== undefined &&\n changedProvider[index] !== \"\"\n ) {\n newMethods.push({\n authentication_method: index,\n provider: changedProvider[index],\n });\n }\n });\n confirm(newMethods);\n }\n\n return (\n <AnastasisClientFrame\n hideNav\n title={!policy ? \"Backup: New Policy\" : \"Backup: Edit Policy\"}\n >\n <section class=\"section\">\n {!policy ? (\n <p>Creating a new policy #{policy_index}</p>\n ) : (\n <p>Editing policy #{policy_index}</p>\n )}\n {allAuthMethods.map((method, index) => {\n //take the url from the updated change or from the policy\n const providerURL =\n changedProvider[index] === undefined\n ? policy?.methods.find((m) => m.authentication_method === index)\n ?.provider\n : changedProvider[index];\n\n const type: KnownAuthMethods = method.type as KnownAuthMethods;\n function changeProviderTo(url: string): void {\n const copy = [...changedProvider];\n copy[index] = url;\n setChangedProvider(copy);\n }\n return (\n <div\n key={index}\n class=\"block\"\n style={{ display: \"flex\", alignItems: \"center\" }}\n >\n <span class=\"icon\">{authMethods[type]?.icon}</span>\n <span>{method.instructions}</span>\n <span>\n <span class=\"select \">\n <select\n onChange={(e) => changeProviderTo(e.currentTarget.value)}\n value={providerURL ?? \"\"}\n >\n <option key=\"none\" value=\"\">\n {\" \"}\n &lt;&lt; off &gt;&gt;{\" \"}\n </option>\n {selectableProviders[type]?.map((prov) => (\n <option key={prov.url} value={prov.url}>\n {prov.url}\n </option>\n ))}\n </select>\n </span>\n </span>\n </div>\n );\n })}\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span class=\"buttons\">\n <button class=\"button\" onClick={() => setChangedProvider([])}>\n Reset\n </button>\n <button class=\"button is-info\" onClick={sendChanges}>\n Confirm\n </button>\n </span>\n </div>\n </section>\n </AnastasisClientFrame>\n );\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 */\nimport { encodeCrock, stringToBytes } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport {\n FileInput,\n FileTypeContent,\n} from \"../../components/fields/FileInput.js\";\nimport { TextInput } from \"../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function SecretEditorScreen(): VNode {\n const reducer = useAnastasisContext();\n const [secretValue, setSecretValue] = useState(\"\");\n const [secretFile, _setSecretFile] = useState<FileTypeContent | undefined>(\n undefined,\n );\n function setSecretFile(v: FileTypeContent | undefined): void {\n setSecretValue(\"\"); // reset secret value when uploading a file\n _setSecretFile(v);\n }\n\n const currentSecretName =\n reducer?.currentReducerState &&\n \"secret_name\" in reducer.currentReducerState &&\n reducer.currentReducerState.secret_name;\n\n const [secretName, setSecretName] = useState(currentSecretName || \"\");\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n\n const secretNext = async (): Promise<void> => {\n const secret = secretFile\n ? {\n value: encodeCrock(stringToBytes(secretFile.content)),\n filename: secretFile.name,\n mime: secretFile.type,\n }\n : {\n value: encodeCrock(stringToBytes(secretValue)),\n mime: \"text/plain\",\n };\n return reducer.runTransaction(async (tx) => {\n await tx.transition(\"enter_secret_name\", {\n name: secretName,\n });\n await tx.transition(\"enter_secret\", {\n secret,\n expiration: {\n t_s: new Date().getTime() + 60 * 60 * 24 * 365 * 5,\n },\n });\n await tx.transition(\"next\", {});\n });\n };\n const errors = !secretName\n ? \"Add a secret name\"\n : !secretValue && !secretFile\n ? \"Add a secret value or a choose a file to upload\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) secretNext();\n }\n return (\n <AnastasisClientFrame\n hideNext={errors}\n title=\"Backup: Provide secret to backup\"\n onNext={() => secretNext()}\n >\n <div class=\"block\">\n <TextInput\n label=\"Secret name:\"\n tooltip=\"This allows you to uniquely identify a secret if you have made multiple back ups. The value entered here will NOT be protected by the authentication checks!\"\n grabFocus\n onConfirm={goNextIfNoErrors}\n bind={[secretName, setSecretName]}\n />\n <div>\n Names should be unique, so that you can easily identify your secret\n later.\n </div>\n </div>\n <div class=\"block\">\n <TextInput\n inputType=\"multiline\"\n disabled={!!secretFile}\n onConfirm={goNextIfNoErrors}\n label=\"Enter the secret as text:\"\n bind={[secretValue, setSecretValue]}\n />\n </div>\n <div class=\"block\">\n Or upload a secret file\n <FileInput label=\"Choose file\" onChange={setSecretFile} />\n {secretFile && (\n <div>\n Uploading secret file <b>{secretFile.name}</b>{\" \"}\n <a onClick={() => setSecretFile(undefined)}>cancel</a>\n </div>\n )}\n </div>\n </AnastasisClientFrame>\n );\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\n\nconst MAX_IMAGE_UPLOAD_SIZE = 1024 * 1024;\n\nexport interface FileTypeContent {\n content: string;\n type: string;\n name: string;\n}\n\nexport interface FileInputProps {\n label: string;\n grabFocus?: boolean;\n disabled?: boolean;\n error?: string;\n placeholder?: string;\n tooltip?: string;\n onChange: (v: FileTypeContent | undefined) => void;\n}\n\nexport function FileInput(props: FileInputProps): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (props.grabFocus) {\n inputRef.current?.focus();\n }\n }, [props.grabFocus]);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [sizeError, setSizeError] = useState(false);\n return (\n <div class=\"field\">\n <label class=\"label\">\n <a class=\"button\" onClick={(e) => fileInputRef.current?.click()}>\n <div class=\"icon is-small \">\n <i class=\"mdi mdi-folder\" />\n </div>\n <span>{props.label}</span>\n </a>\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control\">\n <input\n ref={fileInputRef}\n style={{ display: \"none\" }}\n type=\"file\"\n // name={String(name)}\n onChange={(e) => {\n const f: FileList | null = e.currentTarget.files;\n if (!f || f.length != 1) {\n return props.onChange(undefined);\n }\n if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {\n setSizeError(true);\n return props.onChange(undefined);\n }\n setSizeError(false);\n return f[0].arrayBuffer().then((b) => {\n const b64 = btoa(\n new Uint8Array(b).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n \"\",\n ),\n );\n return props.onChange({\n content: `data:${f[0].type};base64,${b64}`,\n name: f[0].name,\n type: f[0].type,\n });\n });\n }}\n />\n {props.error && <p class=\"help is-danger\">{props.error}</p>}\n {sizeError && (\n <p class=\"help is-danger\">File should be smaller than 1 MB</p>\n )}\n </div>\n </div>\n );\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 */\nimport {\n AggregatedPolicyMetaInfo,\n AuthenticationProviderStatus,\n AuthenticationProviderStatusOk,\n} from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../components/AsyncButton.js\";\nimport { PhoneNumberInput } from \"../../components/fields/NumberInput.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport AddingProviderScreen from \"./AddingProviderScreen/index.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function SecretSelectionScreenFound({\n policies,\n onManageProvider,\n onNext,\n}: {\n policies: AggregatedPolicyMetaInfo[];\n onManageProvider: () => void;\n onNext: (version: AggregatedPolicyMetaInfo) => void;\n}): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n\n if (\n !reducer.currentReducerState ||\n reducer.currentReducerState.reducer_type !== \"recovery\"\n ) {\n return <div>invalid state</div>;\n }\n return (\n <AnastasisClientFrame\n title=\"Recovery: Select secret\"\n hideNext=\"Please select version to recover\"\n >\n <div class=\"columns\">\n <div class=\"column\">\n <p class=\"block\">Found versions:</p>\n {policies.map((version, i) => (\n <div key={i} class=\"box\">\n <div\n class=\"block\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <b>Name:</b>&nbsp;<span>{version.secret_name}</span>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <b>Id:</b>&nbsp;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip={version.policy_hash}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n <span>{version.policy_hash.substring(0, 22)}...</span>\n </div>\n </div>\n\n <div>\n <AsyncButton\n class=\"button\"\n onClick={async () => onNext(version)}\n >\n Recover\n </AsyncButton>\n </div>\n </div>\n </div>\n ))}\n </div>\n <div class=\"column\">\n <p>\n Secret found, you can select another version or continue to the\n challenges solving\n </p>\n <p class=\"block\">\n <a onClick={onManageProvider}>Manage recovery providers</a>\n </p>\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\nexport function SecretSelectionScreen(): VNode {\n const reducer = useAnastasisContext();\n const [manageProvider, setManageProvider] = useState(false);\n\n useEffect(() => {\n async function f() {\n if (reducer) {\n await reducer.discoverStart();\n }\n }\n f().catch((e) => console.log(e));\n }, []);\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n\n if (\n !reducer.currentReducerState ||\n reducer.currentReducerState.reducer_type !== \"recovery\"\n ) {\n return <div>invalid state</div>;\n }\n\n if (manageProvider) {\n return (\n <AddingProviderScreen onCancel={async () => setManageProvider(false)} />\n );\n }\n\n if (\n reducer.discoveryState.state === \"none\" ||\n reducer.discoveryState.state === \"active\"\n ) {\n // Can this even happen?\n return <SecretSelectionScreenWaiting />;\n }\n\n const policies = reducer.discoveryState.aggregatedPolicies ?? [];\n\n if (policies.length === 0) {\n return (\n <AddingProviderScreen\n onCancel={async () => setManageProvider(false)}\n notifications={[\n {\n message: \"Secret not found\",\n type: \"ERROR\",\n description:\n \"With the information you provided we could not found secret in any of the providers. You can try adding more providers if you think the data is correct.\",\n },\n ]}\n />\n );\n }\n\n return (\n <SecretSelectionScreenFound\n policies={policies}\n onNext={(version) => reducer.transition(\"select_version\", version)}\n onManageProvider={async () => setManageProvider(false)}\n />\n );\n}\n\n// export function OldSecretSelectionScreen(): VNode {\n// const [selectingVersion, setSelectingVersion] = useState<boolean>(false);\n// const reducer = useAnastasisContext();\n// const [manageProvider, setManageProvider] = useState(false);\n\n// useEffect(() => {\n// async function f() {\n// if (reducer) {\n// await reducer.discoverStart();\n// }\n// }\n// f().catch((e) => console.log(e));\n// }, []);\n\n// const currentVersion =\n// (reducer?.currentReducerState &&\n// \"recovery_document\" in reducer.currentReducerState &&\n// reducer.currentReducerState.recovery_document?.version) ||\n// 0;\n\n// if (!reducer) {\n// return <div>no reducer in context</div>;\n// }\n// if (\n// !reducer.currentReducerState ||\n// reducer.currentReducerState.reducer_type !== \"recovery\"\n// ) {\n// return <div>invalid state</div>;\n// }\n\n// async function doSelectVersion(p: string, n: number): Promise<void> {\n// if (!reducer) return Promise.resolve();\n// return reducer.runTransaction(async (tx) => {\n// await tx.transition(\"select_version\", {\n// version: n,\n// provider_url: p,\n// });\n// setSelectingVersion(false);\n// });\n// }\n\n// const provs = reducer.currentReducerState.authentication_providers ?? {};\n// const recoveryDocument = reducer.currentReducerState.recovery_document;\n\n// if (!recoveryDocument) {\n// return (\n// <ChooseAnotherProviderScreen\n// providers={provs}\n// selected=\"\"\n// onChange={(newProv) => doSelectVersion(newProv, 0)}\n// />\n// );\n// }\n\n// if (selectingVersion) {\n// return (\n// <SelectOtherVersionProviderScreen\n// providers={provs}\n// provider={recoveryDocument.provider_url}\n// version={recoveryDocument.version}\n// onCancel={() => setSelectingVersion(false)}\n// onConfirm={doSelectVersion}\n// />\n// );\n// }\n\n// if (manageProvider) {\n// return (\n// <AddingProviderScreen onCancel={async () => setManageProvider(false)} />\n// );\n// }\n\n// const providerInfo = provs[\n// recoveryDocument.provider_url\n// ] as AuthenticationProviderStatusOk;\n\n// return (\n// <AnastasisClientFrame title=\"Recovery: Select secret\">\n// <div class=\"columns\">\n// <div class=\"column\">\n// <div class=\"box\" style={{ border: \"2px solid green\" }}>\n// <h1 class=\"subtitle\">{providerInfo.business_name}</h1>\n// <div class=\"block\">\n// {currentVersion === 0 ? (\n// <p>Set to recover the latest version</p>\n// ) : (\n// <p>Set to recover the version number {currentVersion}</p>\n// )}\n// </div>\n// <div class=\"buttons is-right\">\n// <button class=\"button\" onClick={(e) => setSelectingVersion(true)}>\n// Change secret&apos;s version\n// </button>\n// </div>\n// </div>\n// </div>\n// <div class=\"column\">\n// <p>\n// Secret found, you can select another version or continue to the\n// challenges solving\n// </p>\n// <p class=\"block\">\n// <a onClick={() => setManageProvider(true)}>\n// Manage recovery providers\n// </a>\n// </p>\n// </div>\n// </div>\n// </AnastasisClientFrame>\n// );\n// }\n\nfunction ChooseAnotherProviderScreen({\n onChange,\n}: {\n onChange: (prov: string) => void;\n}): VNode {\n const reducer = useAnastasisContext();\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n\n if (\n !reducer.currentReducerState ||\n reducer.currentReducerState.reducer_type !== \"recovery\"\n ) {\n return <div>invalid state</div>;\n }\n const providers = reducer.currentReducerState.authentication_providers ?? {};\n\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery: Problem\"\n >\n <p>No recovery document found, try with another provider</p>\n <div class=\"field\">\n <label class=\"label\">Provider</label>\n <div class=\"control is-expanded has-icons-left\">\n <div class=\"select is-fullwidth\">\n <select onChange={(e) => onChange(e.currentTarget.value)} value=\"\">\n <option key=\"none\" disabled selected value=\"\">\n Choose a provider\n </option>\n {Object.keys(providers).map((url) => {\n const p = providers[url];\n if (!(\"methods\" in p)) return null;\n return (\n <option key={url} value={url}>\n {p.business_name}\n </option>\n );\n })}\n </select>\n <div class=\"icon is-small is-left\">\n <i class=\"mdi mdi-earth\" />\n </div>\n </div>\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\nfunction SelectOtherVersionProviderScreen({\n providers,\n provider,\n version,\n onConfirm,\n onCancel,\n}: {\n onCancel: () => void;\n provider: string;\n version: number;\n providers: { [url: string]: AuthenticationProviderStatus };\n onConfirm: (prov: string, v: number) => Promise<void>;\n}): VNode {\n const [otherProvider, setOtherProvider] = useState<string>(provider);\n const [otherVersion, setOtherVersion] = useState(\n version > 0 ? String(version) : \"\",\n );\n const otherProviderInfo = providers[\n otherProvider\n ] as AuthenticationProviderStatusOk;\n\n return (\n <AnastasisClientFrame hideNav title=\"Recovery: Select secret\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"box\">\n <h1 class=\"subtitle\">Provider {otherProviderInfo.business_name}</h1>\n <div class=\"block\">\n {version === 0 ? (\n <p>Set to recover the latest version</p>\n ) : (\n <p>Set to recover the version number {version}</p>\n )}\n <p>Specify other version below or use the latest</p>\n </div>\n\n <div class=\"field\">\n <label class=\"label\">Provider</label>\n <div class=\"control is-expanded has-icons-left\">\n <div class=\"select is-fullwidth\">\n <select\n onChange={(e) => setOtherProvider(e.currentTarget.value)}\n value={otherProvider}\n >\n <option key=\"none\" disabled selected value=\"\">\n {\" \"}\n Choose a provider{\" \"}\n </option>\n {Object.keys(providers).map((url) => {\n const p = providers[url];\n if (!(\"methods\" in p)) return null;\n return (\n <option key={url} value={url}>\n {p.business_name}\n </option>\n );\n })}\n </select>\n <div class=\"icon is-small is-left\">\n <i class=\"mdi mdi-earth\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"container\">\n <PhoneNumberInput\n label=\"Version\"\n placeholder=\"version number to recover\"\n grabFocus\n bind={[otherVersion, setOtherVersion]}\n />\n </div>\n </div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n <div class=\"buttons\">\n <AsyncButton\n class=\"button\"\n onClick={() => onConfirm(otherProvider, 0)}\n >\n Use latest\n </AsyncButton>\n <AsyncButton\n class=\"button is-info\"\n onClick={() =>\n onConfirm(otherProvider, parseInt(otherVersion, 10))\n }\n >\n Confirm\n </AsyncButton>\n </div>\n </div>\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\nfunction SecretSelectionScreenWaiting(): VNode {\n return (\n <AnastasisClientFrame title=\"Recovery: Select secret\">\n <div>loading secret versions</div>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { FileButton } from \"../../components/FlieButton.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function StartScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n return (\n <AnastasisClientFrame hideNav title=\"Home\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"buttons\">\n <button\n class=\"button is-success\"\n autoFocus\n onClick={() => reducer.startBackup()}\n >\n <div class=\"icon\">\n <i class=\"mdi mdi-arrow-up\" />\n </div>\n <span>Backup a secret</span>\n </button>\n\n <button\n class=\"button is-info\"\n onClick={() => reducer.startRecover()}\n >\n <div class=\"icon\">\n <i class=\"mdi mdi-arrow-down\" />\n </div>\n <span>Recover a secret</span>\n </button>\n\n <FileButton\n label=\"Restore a session\"\n onChange={(content) => {\n if (content?.type === \"application/json\") {\n reducer.importState(content.content);\n }\n }}\n />\n\n {/* <button class=\"button\">\n <div class=\"icon\"><i class=\"mdi mdi-file\" /></div>\n <span>Restore a session</span>\n </button> */}\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useRef, useState } from \"preact/hooks\";\n\nconst MAX_IMAGE_UPLOAD_SIZE = 1024 * 1024;\n\nexport interface FileTypeContent {\n content: string;\n type: string;\n name: string;\n}\n\ninterface Props {\n label: string;\n onChange: (v: FileTypeContent | undefined) => void;\n}\nexport function FileButton(props: Props): VNode {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [sizeError, setSizeError] = useState(false);\n return (\n <div>\n <button class=\"button\" onClick={(e) => fileInputRef.current?.click()}>\n <span>{props.label}</span>\n </button>\n <input\n ref={fileInputRef}\n style={{ display: \"none\" }}\n type=\"file\"\n onChange={(e) => {\n const f: FileList | null = e.currentTarget.files;\n if (!f || f.length != 1) {\n return props.onChange(undefined);\n }\n if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {\n setSizeError(true);\n return props.onChange(undefined);\n }\n setSizeError(false);\n return f[0].arrayBuffer().then((b) => {\n const content = new Uint8Array(b).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n \"\",\n );\n return props.onChange({\n content,\n name: f[0].name,\n type: f[0].type,\n });\n });\n }}\n />\n {sizeError && (\n <p class=\"help is-danger\">File should be smaller than 1 MB</p>\n )}\n </div>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function TruthsPayingScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n const payments = reducer.currentReducerState.payments ?? [];\n return (\n <AnastasisClientFrame hideNext={\"FIXME\"} title=\"Backup: Truths Paying\">\n <p>\n Some of the providers require a payment to store the encrypted\n authentication information.\n </p>\n <ul>\n {payments.map((x, i) => {\n return <li key={i}>{x}</li>;\n })}\n </ul>\n <button onClick={() => reducer.transition(\"pay\", {})}>\n Check payment status now\n </button>\n </AnastasisClientFrame>\n );\n}\n"],
- "mappings": "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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,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,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",
- "names": ["assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "this", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "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", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "createContext", "defaultValue", "contextId", "Consumer", "contextValue", "Provider", "subs", "ctx", "_props", "old", "splice", "isValidElement", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "undefined", "v", "sign", "n", "i", "x", "add", "a", "b", "r", "base", "l", "j", "y", "d", "c", "l2", "q", "self", "_2", "t", "isPrime", "bits", "p", "e", "max", "digit", "isValid", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "parse", "self", "a", "r", "lexer", "c", "assign", "obj", "props", "i", "exec", "url", "route", "opts", "let", "ret", "reg", "c", "match", "matches", "p", "split", "length", "r", "decodeURIComponent", "slice", "join", "segmentize", "replace", "max", "Math", "charAt", "param", "flags", "EMPTY", "plus", "indexOf", "star", "val", "map", "default", "pathRankSort", "a", "b", "rank", "index", "prepareVNodeForRanking", "vnode", "rankChild", "rankSegment", "segment", "path", "setUrl", "type", "customHistory", "history", "getCurrentUrl", "location", "getCurrentLocation", "pathname", "search", "e", "canRoute", "routeTo", "ROUTERS", "didRoute", "subscribers", "routeFromLink", "node", "getAttribute", "href", "target", "handleLinkClick", "ctrlKey", "metaKey", "altKey", "shiftKey", "button", "currentTarget", "this", "prevent", "stopImmediatePropagation", "stopPropagation", "preventDefault", "delegateLinkHandler", "t", "nodeName", "String", "toUpperCase", "hasAttribute", "parentNode", "initEventListeners", "eventListenersInitialized", "addEventListener", "const", "Router", "u", "super", "state", "shouldComponentUpdate", "static", "onChange", "getMatchingChildren", "toChildArray", "children", "setState", "updating", "forceUpdate", "componentWillMount", "push", "componentDidMount", "unlisten", "listen", "componentWillUnmount", "splice", "componentWillUpdate", "componentDidUpdate", "invoke", "filter", "sort", "newProps", "ref", "key", "cloneElement", "Boolean", "render", "ref$1", "active", "current", "previous", "previousUrl", "router", "Component", "Link", "createElement", "onClick", "Route", "component", "i", "self", "Match", "Link", "qrcode", "r", "c", "i", "j", "bits", "typeNumber", "errorCorrectionLevel", "max", "x", "y", "s", "r2", "p", "b", "unicodeMap", "b2", "b3", "k", "v", "digit", "d", "a", "n", "_num", "e", "num", "_this", "data", "stringToBytes", "encode", "decode", "r", "i", "x", "n", "I", "h", "l", "y", "d", "o", "p", "k", "c", "j2", "j3", "x2", "x3", "u", "m", "b", "z", "s", "t2", "t3", "d2", "d3", "h2", "h3", "r2", "r3", "g", "f", "a", "v", "q", "t", "j", "A", "M", "t22", "b2", "b3", "b4", "S", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "M", "A", "s", "L", "k", "S", "I", "m", "n", "i", "t", "h", "p", "q", "k", "n", "i", "b", "i", "i", "h", "m", "c", "i", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "err", "timer", "CancellationToken", "a", "r", "n", "x", "c", "a2", "x2", "a", "b", "n", "r", "s", "r2", "i", "normal", "small", "digit", "k", "i", "n", "j", "w", "t", "m", "q", "p", "i", "c", "a", "b", "R", "n", "e", "base", "res", "v", "URL", "URLSearchParams", "x", "URL", "e", "s", "i", "s2", "LogLevel", "m", "e", "location", "c", "p", "x", "d", "x", "c", "i", "x", "c", "x", "c", "s", "x", "c", "e", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "P", "e", "a", "b", "i", "p", "c", "bits", "bits", "bits", "x", "r", "i", "_a", "C", "TalerPreciseTimestamp", "now", "t", "s", "TalerProtocolTimestamp", "t2", "max", "Duration", "d", "now", "s", "i", "d2", "max", "n", "AbsoluteTime", "t2", "t", "at", "x", "c", "DenomKeyType", "t", "DenominationPubKey", "p2", "ExchangeProtocolVersion", "MerchantProtocolVersion", "b", "i", "r", "j", "_a", "x", "s", "l", "v", "m", "a", "d", "p", "o", "e", "nt", "e", "l", "s", "t", "i", "r", "c", "n", "add", "b", "d", "p", "v", "o", "t2", "a", "i2", "w", "_a", "_b", "j", "a", "b", "d", "n", "m", "l", "i", "e", "d", "b", "v", "c", "o", "fl", "h", "d", "a", "d", "e", "n", "a", "d", "v", "N", "i", "j", "hashArgon2id", "s", "b", "c", "p", "hash", "d", "logger", "n", "TalerSignaturePurpose", "WalletAccountMergeFlags", "c", "p", "x", "rev", "bigint", "Edx25519", "L", "sign", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "textEncoder", "logger", "s", "s", "p", "r", "TalerUriType", "TalerUriAction", "s", "c", "q", "URLSearchParams", "p", "v", "k", "TalerCorebankApi", "MonitorTimeframeParam", "TanChannel", "TalerExchangeApi", "AmlState", "TalerMerchantApi", "TokenFamilyKind", "HttpStatusCode", "LibtoolVersion", "v", "logger", "logger", "ReserveTransactionType", "logger", "logger", "CreditDebitIndicator", "logger", "ContractTermsUtil", "i", "x", "h", "k", "e", "hash", "fnutil", "f", "x", "TransactionMajorState", "TransactionMinorState", "TransactionAction", "TransactionType", "WithdrawalType", "DenomLossEventType", "PaymentStatus", "TransactionAmountMode", "BalanceFlag", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "ExchangeUpdateStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "ProviderPaymentType", "TalerBankConversionCacheEviction", "TalerCoreBankCacheEviction", "TalerMerchantInstanceCacheEviction", "TalerMerchantManagementCacheEviction", "ChallengerCacheEviction", "TalerExchangeCacheEviction", "logger", "strings", "s", "i", "c", "i", "x", "n", "c", "s", "NotificationType", "ObservabilityEventType", "logger", "h", "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", "useErrorBoundary", "cb", "state", "getHookState", "currentIndex", "errState", "useState", "__", "currentComponent", "componentDidCatch", "err", "errorInfo", "undefined", "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", "p", "initial", "initial", "h", "q", "a", "b", "BackupStates", "RecoveryStates", "hashArgon2id", "d", "typedArrayConcat", "c", "p", "x", "s", "i", "hash", "hashArgon2id", "ChallengeType", "logger", "p", "x", "i", "m", "n", "a", "j", "ChallengeFeedbackStatus", "i", "s", "n", "r", "logger", "x", "URL", "e", "typedArrayConcat", "i", "hash", "talerPayUri", "m", "p", "s2", "s", "a", "h", "_", "T", "h", "p", "error", "_", "s", "initial", "Context", "q", "i18n", "h", "p", "n", "i", "e", "s", "p", "f", "defaultOptions", "defaultOptions", "defaultOptions", "MILLISECONDS_IN_WEEK", "sign", "formatters", "localize", "sign", "delimiter", "formatLong", "format", "format", "defaultOptions", "locale", "_defineProperty", "match", "_defineProperty", "match", "sign", "n", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "_defineProperty", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "defaultOptions", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "_defineProperty", "_defineProperty", "_defineProperty", "_defineProperty", "parsers", "formattingTokensRegExp", "longFormattingTokensRegExp", "escapedStringRegExp", "doubleQuoteRegExp", "unescapedLatinCharacterRegExp", "defaultOptions", "locale", "parsers", "cleanEscapedString", "setter", "a", "b", "e", "i", "initial", "_", "s", "p", "e", "d", "v", "_", "s", "p", "e", "_", "s", "p", "e", "e", "p", "isBackup", "i", "error", "v", "e", "base", "p", "s", "c", "_", "s", "p", "e", "p", "errors", "c", "i", "p", "i18n", "error", "e", "p", "errors", "c", "i", "p", "p", "errors", "c", "i", "p", "i18n", "error", "p", "errors", "c", "i", "p", "p", "_", "s", "errors", "c", "i", "p", "i18n", "error", "e", "_", "h", "qrcode", "b64Tab", "uint8array2packed", "arr", "existingPacked", "existingPackedLen", "bigEndianMod", "i", "intOffset", "byteOffset", "packed", "existingByteLen", "shiftModifier", "length", "push", "value", "binLen", "getStrConverter", "format", "utfType", "Error", "str", "existingBin", "existingBinLen", "num", "parseInt", "substr", "isNaN", "codePnt", "codePntArr", "j", "transposeBytes", "byteCnt", "charCodeAt", "index", "tmpInt", "strPart", "firstEqual", "indexOf", "search", "replace", "charAt", "ArrayBuffer", "ignore", "Uint8Array", "getOutputConverter", "outputBinLen", "outputOptions", "binarray", "outputLength", "formatOpts", "hex_tab", "srcByte", "toUpperCase", "triplet", "int1", "int2", "String", "fromCharCode", "retVal", "arrView", "K_sha2", "H_trunc", "H_full", "sha_variant_error", "packedLEConcat", "a", "b", "arrOffset", "aByteLen", "bByteLen", "leftShiftAmount", "rightShiftAmount", "pop", "concat", "getOutputOpts", "options", "outputUpper", "b64Pad", "outputLen", "lenErrstr", "parseInputOption", "key", "fallback", "errStr", "jsSHABase", "constructor", "variant", "inputFormat", "inputOptions", "this", "numRounds", "shaVariant", "remainder", "remainderLen", "updateCalled", "processedLen", "macKeySet", "keyWithIPad", "keyWithOPad", "update", "srcString", "updateProcessedLen", "variantBlockIntInc", "variantBlockSize", "convertRet", "converterFunc", "chunkBinLen", "chunk", "chunkIntLen", "intermediateState", "roundFunc", "slice", "getHash", "finalizedState", "isVariableLen", "formatFunc", "getMAC", "finalizeFunc", "stateCloneFunc", "newStateFunc", "setHMACKey", "HMACSupported", "keyConverterFunc", "_setHMACKey", "blockByteSize", "lastArrayIndex", "getHMAC", "_getHMAC", "firstHash", "rotl_32", "x", "n", "rotr_32", "shr_32", "parity_32", "y", "z", "ch_32", "maj_32", "sigma0_32", "safeAdd_32_2", "lsw", "safeAdd_32_4", "c", "d", "safeAdd_32_5", "e", "gamma0_32", "sigma1_32", "getNewState", "_variant", "roundSHA1", "block", "H", "T", "t", "W", "finalizeSHA1", "remainderBinLen", "processedBinLen", "offset", "totalLen", "jsSHA", "super", "resolvedOptions", "state", "getNewState256", "roundSHA256", "f", "g", "h", "T1", "T2", "Int_64", "msint_32", "lsint_32", "highOrder", "lowOrder", "rotl_64", "tmp", "rotr_64", "shr_64", "maj_64", "sigma0_64", "rotr28", "rotr34", "rotr39", "safeAdd_64_2", "msw", "safeAdd_64_4", "safeAdd_64_5", "xor_64_2", "gamma1_64", "rotr19", "rotr61", "shr6", "gamma0_64", "rotr1", "rotr8", "shr7", "sigma1_64", "rotr14", "rotr18", "rotr41", "K_sha512", "getNewState512", "roundSHA512", "rc_sha3", "r_sha3", "cloneSHA3State", "clone", "roundSHA3", "round", "B", "C", "D", "left_encode", "byte", "numEncodedBytes", "x_64", "encode_string", "input", "byte_pad", "outputByteLen", "encodedLen", "outputIntLen", "intsToAppend", "delimiter", "_initializeKMAC", "_getKMAC", "_initializeCSHAKE", "_processedBinLen", "blockSize", "temp", "state_offset", "binaryStringInc", "remainderIntLen", "funcNameOverride", "funcName", "customization", "packedParams", "byte_pad_out", "kmacKey", "concatedRemainder", "shaObj", "jsSHA1", "jsSHA256", "jsSHA512", "jsSHA3", "now", "bits", "p", "errors", "c", "i", "p", "p", "error", "url", "m", "_", "h", "e", "errors", "s", "i18n", "k", "i", "p", "h", "m", "map", "error", "i", "p", "errors", "i", "p", "p", "errors", "selectChallenge", "x", "x", "i", "p", "selectCountry", "c", "errors", "e", "x", "i", "p", "h", "v", "p", "m", "e", "p", "errors", "x", "m", "i", "_", "s", "p", "e", "f", "b", "p", "v", "errors", "i", "p", "h", "f", "e", "MAX_IMAGE_UPLOAD_SIZE", "_", "p", "e", "f", "b", "x", "i", "error", "P", "e", "T", "h", "e"]
+ "sourcesContent": ["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", "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 || alphabet) 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 || alphabet) 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", "\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", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.Link = exports.Match = undefined;\n\nvar _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; };\n\nvar _preact = require('preact');\n\nvar _preactRouter = require('preact-router');\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Match = exports.Match = function (_Component) {\n\t_inherits(Match, _Component);\n\n\tfunction Match() {\n\t\tvar _temp, _this, _ret;\n\n\t\t_classCallCheck(this, Match);\n\n\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\targs[_key] = arguments[_key];\n\t\t}\n\n\t\treturn _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.update = function (url) {\n\t\t\t_this.nextUrl = url;\n\t\t\t_this.setState({});\n\t\t}, _temp), _possibleConstructorReturn(_this, _ret);\n\t}\n\n\tMatch.prototype.componentDidMount = function componentDidMount() {\n\t\t_preactRouter.subscribers.push(this.update);\n\t};\n\n\tMatch.prototype.componentWillUnmount = function componentWillUnmount() {\n\t\t_preactRouter.subscribers.splice(_preactRouter.subscribers.indexOf(this.update) >>> 0, 1);\n\t};\n\n\tMatch.prototype.render = function render(props) {\n\t\tvar url = this.nextUrl || (0, _preactRouter.getCurrentUrl)(),\n\t\t path = url.replace(/\\?.+$/, '');\n\t\tthis.nextUrl = null;\n\t\treturn props.children({\n\t\t\turl: url,\n\t\t\tpath: path,\n\t\t\tmatches: (0, _preactRouter.exec)(path, props.path, {}) !== false\n\t\t});\n\t};\n\n\treturn Match;\n}(_preact.Component);\n\nvar Link = function Link(_ref) {\n\tvar activeClassName = _ref.activeClassName,\n\t path = _ref.path,\n\t props = _objectWithoutProperties(_ref, ['activeClassName', 'path']);\n\n\treturn (0, _preact.h)(\n\t\tMatch,\n\t\t{ path: path || props.href },\n\t\tfunction (_ref2) {\n\t\t\tvar matches = _ref2.matches;\n\t\t\treturn (0, _preact.h)(_preactRouter.Link, _extends({}, props, { 'class': [props.class || props.className, matches && activeClassName].filter(Boolean).join(' ') }));\n\t\t}\n\t);\n};\n\nexports.Link = Link;\nexports.default = Match;\n\nMatch.Link = Link;\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", "/*\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 */\nimport { setupI18n } from \"@gnu-taler/taler-util\";\nimport { h, render } from \"preact\";\nimport App from \"./components/app.js\";\nimport \"./scss/main.scss\";\n\nfunction main(): void {\n try {\n const container = document.getElementById(\"container\");\n if (!container) {\n throw new Error(\"container not found, can't mount page contents\");\n }\n render(h(App, {}), container);\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\n// setupI18n(\"en\", strings);\n\nif (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", main);\n} else {\n main();\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 */\nimport { FunctionalComponent, h } from \"preact\";\nimport { TranslationProvider } from \"../context/translation.js\";\nimport AnastasisClient from \"../pages/home/index.js\";\n\nconst App: FunctionalComponent = () => {\n return (\n <TranslationProvider>\n <div id=\"app\" class=\"has-navbar-fixed-top\">\n <AnastasisClient />\n </div>\n </TranslationProvider>\n );\n};\n\nexport default App;\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 * An error response did not include an error code in the format expected by the client. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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. Details should be in the local logs. Check if you are using the latest available version or file a report with the developers.\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 in the expected format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 * The operation timed out. Trying again might help. Check the network connection.\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 protocol version given by the server does not follow the required format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 the right data format, but the content did not satisfy the protocol. Please file a bug report.\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 an option is set to an invalid value. Check the logs and fix the local 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 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. Please file a bug report.\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 token used by the client to authorize the request does not grant the required permissions for the request. Check the requirements and obtain a suitable authorization token to proceed.\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 GENERIC_TOKEN_PERMISSION_INSUFFICIENT = 16,\n\n\n /**\n * The HTTP method used is invalid for this endpoint. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you used the correct URL and/or file a report with the developers of the client software.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 were malformed and caused the server to not be able to handle the request. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check that you are using the correct syntax as of RFC 8905 and/or that you entered the bank account number correctly.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 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 body in the request could not be decompressed by the server. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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_COMPRESSION_INVALID = 28,\n\n\n /**\n * The currency involved in the operation is not acceptable for this server. Check your configuration and make sure the currency specified for a given service provider is one of the currencies supported by that provider.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\n * Returned with an HTTP status code of #MHD_HTTP_CONTENT_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 refused the request due to lack of proper 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 GENERIC_UNAUTHORIZED = 40,\n\n\n /**\n * The service refused the request as the given authorization token is unknown.\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 GENERIC_TOKEN_UNKNOWN = 41,\n\n\n /**\n * The service refused the request as the given authorization token expired.\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 GENERIC_TOKEN_EXPIRED = 42,\n\n\n /**\n * The service refused the request as the given authorization token is malformed.\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 GENERIC_TOKEN_MALFORMED = 43,\n\n\n /**\n * The service refused the request due to lack of proper rights on the resource.\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 GENERIC_FORBIDDEN = 44,\n\n\n /**\n * The service failed initialize its connection to the database. The system administrator should check that the service has permissions to access the database and that the database is running.\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. The system administrator should check that the database is running.\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. The system administrator should check that the database is running and review the service logs.\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. The system administrator should check that the database is running and review the service logs.\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 unrecoverable error trying to commit a transaction to the database. The system administrator should check that the database is running and review the service logs.\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; it should only happen if some client maliciously tries to create conflicting concurrent transactions. It could also be a sign of a missing index. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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). Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. The system administrator should check if the resource files are installed in the correct location and are readable to the 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 GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply. The system administrator should investigate the logs and check if the templates are well-formed.\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 coin is not known to the exchange (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_GENERIC_COIN_UNKNOWN = 1019,\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 failed to start a KYC attribute conversion helper process. It is likely configured incorrectly.\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_KYC_CONVERTER_FAILED = 1037,\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 client provided an unknown commitment for an age-withdraw 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 EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN = 1161,\n\n\n /**\n * The total sum of amounts from the denominations did overflow.\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_AGE_WITHDRAW_AMOUNT_OVERFLOW = 1162,\n\n\n /**\n * The total sum of value and fees from the denominations differs from the committed amount with fees.\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_AGE_WITHDRAW_AMOUNT_INCORRECT = 1163,\n\n\n /**\n * The original commitment differs from the calculated hash\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_AGE_WITHDRAW_REVEAL_INVALID_HASH = 1164,\n\n\n /**\n * The maximum age in the commitment is too large for the reserve\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_MAXIMUM_AGE_TOO_LARGE = 1165,\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 coin 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_COIN_HISTORY_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_RESERVE_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 * Withdrawal from the reserve requires age restriction to be set.\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_AGE_RESTRICTION_REQUIRED = 1681,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys or the helpers had no denominations (properly) configured.\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_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_BAD_GATEWAY (502).\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 * TOTP key 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_TOTP_KEY_INVALID = 1980,\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 reward ID is unknown. This could happen if the reward 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_REWARD_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 backend could not find the OTP device(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_OTP_DEVICE_UNKNOWN = 2021,\n\n\n /**\n * The account 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_ACCOUNT_UNKNOWN = 2022,\n\n\n /**\n * The wire hash 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 MERCHANT_GENERIC_H_WIRE_MALFORMED = 2023,\n\n\n /**\n * The currency specified in the operation does not work with the current state of the given resource.\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_GENERIC_CURRENCY_MISMATCH = 2024,\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_BAD_REQUEST (400).\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_BAD_REQUEST (400).\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 exchange does not support the selected bank account of the merchant. Likely the merchant had stale data on the bank accounts of the exchange and thus selected an inappropriate exchange when making the offer.\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_WIRE_METHOD_UNSUPPORTED = 2175,\n\n\n /**\n * The payment requires the wallet to select a choice from the choices array and pass it in the 'choice_index' field of 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 MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING = 2176,\n\n\n /**\n * The 'choice_index' field is 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 MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS = 2177,\n\n\n /**\n * The provided 'tokens' array does not match with the required input tokens of the order.\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_INPUT_TOKENS_MISMATCH = 2178,\n\n\n /**\n * Invalid token issue signature (blindly signed by merchant) for provided token.\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_TOKEN_ISSUE_SIG_INVALID = 2179,\n\n\n /**\n * Invalid token use signature (EdDSA, signed by wallet) for provided token.\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_TOKEN_USE_SIG_INVALID = 2180,\n\n\n /**\n * The provided number of tokens does not match the required 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 MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH = 2181,\n\n\n /**\n * The provided number of token envelopes does not match the specified 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 MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH = 2182,\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 * A token family with this ID but conflicting data 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_POST_TOKEN_FAMILY_CONFLICT = 2225,\n\n\n /**\n * The backend is unaware of a token family with the given ID.\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_PATCH_TOKEN_FAMILY_NOT_FOUND = 2226,\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 are waiting for the exchange to provide us with key material before checking the wire transfer.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS = 2258,\n\n\n /**\n * We are waiting for the exchange to provide us with the list of aggregated transactions.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST = 2259,\n\n\n /**\n * The endpoint indicated in the wire transfer does not belong to a GNU Taler exchange.\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_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE = 2260,\n\n\n /**\n * The exchange indicated in the wire transfer claims to know nothing about the wire transfer.\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_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND = 2261,\n\n\n /**\n * The interaction with the exchange is delayed due to rate limiting.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED = 2262,\n\n\n /**\n * We experienced a transient failure in our interaction with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE = 2263,\n\n\n /**\n * The response from the exchange was unacceptable and should be reviewed with an auditor.\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_EXCHANGE_TRANSFERS_HARD_FAILURE = 2264,\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_REWARD_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_REWARD_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_REWARD_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The reward 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_REWARD_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_REWARD_PICKUP_AMOUNT_EXCEEDS_REWARD_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_REWARD_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The merchant instance has no active bank accounts configured. However, at least one bank account must be available to create 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 merchant backend failed to obtain the current local time.\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; likely 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 * A conflicting order (sharing the same order identifier) already exists at this merchant backend instance.\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 order creation request is invalid because the given 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 order creation request is invalid because the delivery date given 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 order creation request is invalid because a wire deadline of \"never\" 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_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The order creation request is invalid because the given payment deadline 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 order creation request is invalid because the given refund deadline 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 * The backend does not trust any exchange that would allow funds to be wired to any bank account of this instance using the wire method specified with the order. Note that right now, we do not support the use of exchange bank accounts with mandatory currency conversion.\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_NO_EXCHANGES_FOR_WIRE_METHOD = 2509,\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. Deletion may work later after the offer has expired if it remains unpaid.\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 exceeds the original price paid by the customer.\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 * Only paid orders can be refunded, and the frontend specified an unpaid order to issue a refund for.\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 ever 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 token family slug provided in this order could not be found in the merchant 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 MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN = 2533,\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 amount transferred differs between what was submitted and what the exchange claimed.\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_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS = 2563,\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 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 MERCHANT_PRIVATE_ACCOUNT_DELETE_UNKNOWN_ACCOUNT = 2626,\n\n\n /**\n * The bank account specified in the request already exists at the merchant.\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_ACCOUNT_EXISTS = 2627,\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 requested exchange does not allow rewards.\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_REWARDS_NOT_ALLOWED = 2701,\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 rewards 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_REWARD_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the rewards 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_REWARD_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the reward, and it was configured for rewardping. However, the funds remaining are insufficient to cover the reward, 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_REWARD_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the reward.\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_REWARD_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 * The OTP device 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_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS = 2851,\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 * The requested resource could not be 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 AUDITOR_RESOURCE_NOT_FOUND = 3102,\n\n\n /**\n * The URI is missing a path component.\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 AUDITOR_URI_MISSING_PATH_COMPONENT = 3103,\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 * 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 client tried to register a new account under a reserved username (like 'admin' for example).\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_RESERVED_USERNAME_CONFLICT = 5120,\n\n\n /**\n * The client tried to register a new account with an username 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 BANK_REGISTER_USERNAME_REUSE = 5121,\n\n\n /**\n * The client tried to register a new account with a payto:// URI 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 BANK_REGISTER_PAYTO_URI_REUSE = 5122,\n\n\n /**\n * The client tried to delete an account with a non null 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 BANK_ACCOUNT_BALANCE_NOT_ZERO = 5123,\n\n\n /**\n * The client tried to create a transaction or an operation that credit an unknown account.\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_UNKNOWN_CREDITOR = 5124,\n\n\n /**\n * The client tried to create a transaction or an operation that debit an unknown account.\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_UNKNOWN_DEBTOR = 5125,\n\n\n /**\n * The client tried to perform an action prohibited for exchange accounts.\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_ACCOUNT_IS_EXCHANGE = 5126,\n\n\n /**\n * The client tried to perform an action reserved for exchange accounts.\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_ACCOUNT_IS_NOT_EXCHANGE = 5127,\n\n\n /**\n * Received currency conversion is wrong.\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_BAD_CONVERSION = 5128,\n\n\n /**\n * The account referenced in this operation is missing tan info for the chosen channel.\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_MISSING_TAN_INFO = 5129,\n\n\n /**\n * The client attempted to confirm a transaction with incomplete info.\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_INCOMPLETE = 5130,\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 BANK_TAN_RATE_LIMITED = 5131,\n\n\n /**\n * This TAN channel is not supported.\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 BANK_TAN_CHANNEL_NOT_SUPPORTED = 5132,\n\n\n /**\n * Failed to send TAN using the helper script. Either script is not found, or script timeout, or script 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 BANK_TAN_CHANNEL_SCRIPT_FAILED = 5133,\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 BANK_TAN_CHALLENGE_FAILED = 5134,\n\n\n /**\n * A non-admin user has tried to change their legal 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_NON_ADMIN_PATCH_LEGAL_NAME = 5135,\n\n\n /**\n * A non-admin user has tried to change their debt limit.\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_NON_ADMIN_PATCH_DEBT_LIMIT = 5136,\n\n\n /**\n * A non-admin user has tried to change their password whihout providing the current 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 BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD = 5137,\n\n\n /**\n * Provided old password does not match current password.\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_PATCH_BAD_OLD_PASSWORD = 5138,\n\n\n /**\n * An admin user has tried to become an 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 BANK_PATCH_ADMIN_EXCHANGE = 5139,\n\n\n /**\n * A non-admin user has tried to change their cashout account.\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_NON_ADMIN_PATCH_CASHOUT = 5140,\n\n\n /**\n * A non-admin user has tried to change their contact info.\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_NON_ADMIN_PATCH_CONTACT = 5141,\n\n\n /**\n * The client tried to create a transaction that credit the admin account.\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_ADMIN_CREDITOR = 5142,\n\n\n /**\n * The referenced challenge 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_CHALLENGE_NOT_FOUND = 5143,\n\n\n /**\n * The referenced challenge has expired.\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_TAN_CHALLENGE_EXPIRED = 5144,\n\n\n /**\n * A non-admin user has tried to create an account with 2fa.\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_NON_ADMIN_SET_TAN_CHANNEL = 5145,\n\n\n /**\n * A non-admin user has tried to set their minimum cashout amount.\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_NON_ADMIN_SET_MIN_CASHOUT = 5146,\n\n\n /**\n * Amount of currency conversion it less than the minimum 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 BANK_CONVERSION_AMOUNT_TO_SMALL = 5147,\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_CONTENT_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_CONTENT_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 a reward) 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_REWARD_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 * The exchange's self-reported base URL does not match the one that the wallet is using.\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_BASE_URL_MISMATCH = 7030,\n\n\n /**\n * The order has already been paid 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_PAID = 7031,\n\n\n /**\n * An exchange that is required for some request is currently 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_EXCHANGE_UNAVAILABLE = 7032,\n\n\n /**\n * An exchange entry is still used by the exchange, thus it can't be deleted without purging.\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_ENTRY_USED = 7033,\n\n\n /**\n * The wallet database is unavailable and the wallet thus is not operational.\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_DB_UNAVAILABLE = 7034,\n\n\n /**\n * A taler:// URI is malformed and 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_TALER_URI_MALFORMED = 7035,\n\n\n /**\n * A wallet-core request was cancelled and thus can't provide a 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_CORE_REQUEST_CANCELLED = 7036,\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_CONTENT_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 * The Donau failed to perform the operation as it could not find the private keys. This is a problem with the Donau 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 DONAU_GENERIC_KEYS_MISSING = 8607,\n\n\n /**\n * The signature of the charity key 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 DONAU_CHARITY_SIGNATURE_INVALID = 8608,\n\n\n /**\n * The charity 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 DONAU_CHARITY_NOT_FOUND = 8609,\n\n\n /**\n * The donation amount specified in the request exceeds the limit of the charity.\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 DONAU_EXCEEDING_DONATION_LIMIT = 8610,\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 * The client is unknown or unauthorized.\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 CHALLENGER_GENERIC_CLIENT_UNKNOWN = 9750,\n\n\n /**\n * The client is not authorized to use the given redirect URI.\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 CHALLENGER_GENERIC_CLIENT_FORBIDDEN_BAD_REDIRECT_URI = 9751,\n\n\n /**\n * The service failed to execute its helper process to send the challenge.\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 CHALLENGER_HELPER_EXEC_FAILED = 9752,\n\n\n /**\n * The grant is unknown to the service (it could also have 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 CHALLENGER_GRANT_UNKNOWN = 9753,\n\n\n /**\n * The code given is not even well-formed.\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 CHALLENGER_CLIENT_FORBIDDEN_BAD_CODE = 9754,\n\n\n /**\n * The service is not aware of the referenced validation process.\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 CHALLENGER_GENERIC_VALIDATION_UNKNOWN = 9755,\n\n\n /**\n * The code given 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 CHALLENGER_CLIENT_FORBIDDEN_INVALID_CODE = 9756,\n\n\n /**\n * Too many attempts have been made, validation is temporarily disabled for this address.\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 CHALLENGER_TOO_MANY_ATTEMPTS = 9757,\n\n\n /**\n * The PIN code provided is incorrect.\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 CHALLENGER_INVALID_PIN = 9758,\n\n\n /**\n * The token cannot be valid as no address was ever provided by the client.\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 CHALLENGER_MISSING_ADDRESS = 9759,\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", "/*\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) 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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n renderContext,\n} from \"./codec.js\";\nimport { CurrencySpecification } from \"./index.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 * Separator character between integer and fractional\n */\nexport const FRAC_SEPARATOR = \".\";\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\n/**\n * Immutable amount.\n */\nexport class Amount {\n static from(a: AmountLike): Amount {\n return new Amount(Amounts.parseOrThrow(a), 0);\n }\n\n static zeroOfCurrency(currency: string): Amount {\n return new Amount(Amounts.zeroOfCurrency(currency), 0);\n }\n\n add(...a: AmountLike[]): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.add(this.val, ...a);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n mult(n: number): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.mult(this, n);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n toJson(): AmountJson {\n return { ...this.val };\n }\n\n toString(): AmountString {\n return Amounts.stringify(this.val);\n }\n\n private constructor(\n private val: AmountJson,\n private saturated: number,\n ) {}\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 function codecForAmountString(): Codec<AmountString> {\n return {\n decode(x: any, c?: Context): AmountString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (Amounts.parse(x) === undefined) {\n throw new DecodingError(\n `invalid amount at ${renderContext(c)} got \"${x}\"`,\n );\n }\n return x as AmountString;\n },\n };\n}\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 = string | AmountString | AmountJson | Amount;\n\nexport interface DivmodResult {\n quotient: number;\n remainder: AmountJson;\n}\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 if (amt instanceof Amount) {\n return amt.toJson();\n }\n return amt;\n }\n\n static divmod(a1: AmountLike, a2: AmountLike): DivmodResult {\n const am1 = Amounts.jsonifyAmount(a1);\n const am2 = Amounts.jsonifyAmount(a2);\n if (am1.currency != am2.currency) {\n throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);\n }\n\n const x1 =\n BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);\n const x2 =\n BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);\n\n const quotient = x1 / x2;\n const remainderScaled = x1 % x2;\n\n return {\n quotient: Number(quotient),\n remainder: {\n currency: am1.currency,\n value: Number(remainderScaled / BigInt(amountFractionalBase)),\n fraction: Number(remainderScaled % BigInt(amountFractionalBase)),\n },\n };\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 * Check whether a string is a valid currency for a Taler amount.\n */\n static isCurrency(s: string): boolean {\n return /^[a-zA-Z]{1,11}$/.test(s);\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n *\n * Currency name size limit is 11 of ASCII letters\n * Fraction size limit is 8\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z]{1,11}):([0-9]+)([.][0-9]{1,8})?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || FRAC_SEPARATOR + \"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 (s instanceof Amount) {\n return s.toJson();\n }\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 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 multiplied 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): AmountString {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}` as AmountString;\n }\n\n static amountHasSameCurrency(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 isSameCurrency(curr1: string, curr2: string): boolean {\n return curr1.toLowerCase() === curr2.toLowerCase();\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 + FRAC_SEPARATOR;\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 static stringifyValueWithSpec(\n value: AmountJson,\n spec: CurrencySpecification,\n ): { currency: string; normal: string; small?: string } {\n const strValue = Amounts.stringifyValue(value);\n const pos = strValue.indexOf(FRAC_SEPARATOR);\n const originalPosition = pos < 0 ? strValue.length : pos;\n\n let currency = value.currency;\n const names = Object.keys(spec.alt_unit_names);\n let FRAC_POS_NEW_POSITION = originalPosition;\n //find symbol\n //FIXME: this should be based on a cache to speed up\n if (names.length > 0) {\n let unitIndex: string = \"0\"; //default entry by DD51\n names.forEach((index) => {\n const i = Number.parseInt(index, 10);\n if (Number.isNaN(i)) return; //skip\n if (originalPosition - i <= 0) return; //too big\n if (originalPosition - i < FRAC_POS_NEW_POSITION) {\n FRAC_POS_NEW_POSITION = originalPosition - i;\n unitIndex = index;\n }\n });\n currency = spec.alt_unit_names[unitIndex];\n }\n\n if (originalPosition === FRAC_POS_NEW_POSITION) {\n const { normal, small } = splitNormalAndSmall(\n strValue,\n originalPosition,\n spec,\n );\n return { currency, normal, small };\n }\n\n const intPart = strValue.substring(0, originalPosition);\n const fracPArt = strValue.substring(originalPosition + 1);\n //indexSize is always smaller than originalPosition\n const newValue =\n intPart.substring(0, FRAC_POS_NEW_POSITION) +\n FRAC_SEPARATOR +\n intPart.substring(FRAC_POS_NEW_POSITION) +\n fracPArt;\n const { normal, small } = splitNormalAndSmall(\n newValue,\n FRAC_POS_NEW_POSITION,\n spec,\n );\n return { currency, normal, small };\n }\n}\n\nfunction splitNormalAndSmall(\n decimal: string,\n fracSeparatorIndex: number,\n spec: CurrencySpecification,\n): { normal: string; small?: string } {\n let normal: string;\n let small: string | undefined;\n if (\n decimal.length - fracSeparatorIndex - 1 >\n spec.num_fractional_normal_digits\n ) {\n const limit = fracSeparatorIndex + spec.num_fractional_normal_digits + 1;\n normal = decimal.substring(0, limit);\n small = decimal.substring(limit);\n } else {\n normal = decimal;\n small = undefined;\n }\n return { normal, small };\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 //Include URL type for \"url\" and \"base\" params.\n constructor(url: string | URL, base?: string | URL) {\n let parsedBase = null;\n if (base !== undefined) {\n if (base instanceof URL) {\n base = base.href;\n }\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n if (url instanceof URL) {\n url = url.href;\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) 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\nlet globalLogLevel = LogLevel.Info;\nconst byTagLogLevel: Record<string, LogLevel> = {};\n\nlet nativeLogging: boolean = false;\n\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString\nError.prototype.toString = function () {\n if (\n this === null ||\n (typeof this !== \"object\" && typeof this !== \"function\")\n ) {\n throw new TypeError();\n }\n let name = this.name;\n name = name === undefined ? \"Error\" : `${name}`;\n let msg = this.message;\n msg = msg === undefined ? \"\" : `${msg}`;\n\n let cause = \"\";\n if (\"cause\" in this) {\n cause = `\\n Caused by: ${this.cause}`;\n }\n return `${name}: ${msg}${cause}`;\n};\n\nexport function getGlobalLogLevel(): string {\n return globalLogLevel;\n}\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nexport function enableNativeLogging() {\n nativeLogging = true;\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 writeNativeLog(\n message: any,\n tag: string,\n level: number,\n args: any[],\n): void {\n const logFn = (globalThis as any).__nativeLog;\n if (logFn) {\n let m: string;\n if (args.length == 0) {\n m = message;\n } else {\n m = message + \" \" + args.toString();\n }\n logFn(level, tag, message);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 2, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 3, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 4, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 1, args);\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", "/*\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\nimport { j2s } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\nconst logger = new Logger(\"codec.ts\");\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 * Return a codec for a value that must be a string.\n */\nexport function codecForStringURL(shouldEndWithSlash?: boolean): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return x;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n }\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForURL(shouldEndWithSlash?: boolean): Codec<URL> {\n return {\n decode(x: any, c?: Context): URL {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return url;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\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 function codecForLazy<V>(innerCodec: () => Codec<V>): Codec<V> {\n let instance: Codec<V> | undefined = undefined\n return {\n decode(x: any, c?: Context): V {\n if (instance === undefined) {\n instance = innerCodec()\n }\n return instance.decode(x, c);\n },\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 if (logger.shouldLogTrace()) {\n logger.trace(`offending value: ${j2s(x)}`);\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\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 reuse 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 * as argon2 from \"./argon2.js\";\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\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\nimport { AmountLike, Amounts } from \"./amounts.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 hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n ): 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 async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n if (tart) {\n return tart.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\n }\n return await argon2.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\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 global/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 public 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 public 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\n/**\n * This makes the assumption that the uint64 fits a float,\n * which should be true for all Taler protocol messages.\n */\nexport function bufferForUint64(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(8);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n if (n < 0 || !Number.isInteger(n)) {\n throw Error(\"non-negative integer expected\");\n }\n dv.setBigUint64(0, BigInt(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 MERCHANT_REFUND = 1102,\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 WALLET_PURSE_DELETE = 1220,\n WALLET_COIN_HISTORY = 1209,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n TALER_SIGNATURE_AML_DECISION = 1350,\n TALER_SIGNATURE_AML_QUERY = 1351,\n TALER_SIGNATURE_MASTER_AML_KEY = 1017,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport 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 const PublishedAgeRestrictionBaseKey: Edx25519PublicKey = decodeCrock(\n \"CH0VKFDZ2GWRWHQBBGEK9MWV5YDQVJ0RXEE0KYT3NMB69F0R96TG\",\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 < numPrivs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-commitment\"),\n salt: bufferForUint32(i),\n });\n\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n privs.push(priv);\n }\n\n for (let i = numPrivs; i < numPubs; i++) {\n const deriveSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-factor\"),\n salt: bufferForUint32(i),\n });\n const pub = await Edx25519.publicKeyDerive(\n PublishedAgeRestrictionBaseKey,\n deriveSeed,\n );\n pubs.push(pub);\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!\nexport type 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\nexport async 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\nexport async 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 nonce: EncryptionNonce,\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(nonce, key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n nonce: EncryptionNonce,\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(nonce, 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\nexport function amountToBuffer(amount: AmountLike): Uint8Array {\n const amountJ = Amounts.jsonifyAmount(amount);\n const buffer = new ArrayBuffer(8 + 4 + 12);\n const dvbuf = new DataView(buffer);\n const u8buf = new Uint8Array(buffer);\n const curr = stringToBytes(amountJ.currency);\n if (typeof dvbuf.setBigUint64 !== \"undefined\") {\n dvbuf.setBigUint64(0, BigInt(amountJ.value));\n } else {\n const arr = bigint(amountJ.value).toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n dvbuf.setUint8(offset++, arr[i]);\n }\n }\n dvbuf.setUint32(8, amountJ.fraction);\n u8buf.set(curr, 8 + 4);\n\n return u8buf;\n}\n\nexport function timestampRoundedToBuffer(\n ts: TalerProtocolTimestamp,\n): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.t_s) * BigInt(1000 * 1000);\n v.setBigUint64(0, s);\n } else {\n const s =\n ts.t_s === \"never\" ? bigint.zero : bigint(ts.t_s).multiply(1000 * 1000);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n\nexport function durationRoundedToBuffer(ts: TalerProtocolDuration): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.d_us);\n v.setBigUint64(0, s);\n } else {\n const s = ts.d_us === \"forever\" ? bigint.zero : bigint(ts.d_us);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n", "/*!\n * hash-wasm (https://www.npmjs.com/package/hash-wasm)\n * (c) Dani Biro\n * @license MIT\n */\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/* global Reflect, Promise, SuppressedError, Symbol */\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\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nclass Mutex {\n constructor() {\n this.mutex = Promise.resolve();\n }\n lock() {\n let begin = () => { };\n this.mutex = this.mutex.then(() => new Promise(begin));\n return new Promise((res) => {\n begin = res;\n });\n }\n dispatch(fn) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.lock();\n try {\n return yield Promise.resolve(fn());\n }\n finally {\n unlock();\n }\n });\n }\n}\n\n/* eslint-disable import/prefer-default-export */\n/* eslint-disable no-bitwise */\nvar _a;\nfunction getGlobal() {\n if (typeof globalThis !== 'undefined')\n return globalThis;\n // eslint-disable-next-line no-restricted-globals\n if (typeof self !== 'undefined')\n return self;\n if (typeof window !== 'undefined')\n return window;\n return global;\n}\nconst globalObject = getGlobal();\nconst nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;\nconst textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;\nfunction intArrayToString(arr, len) {\n return String.fromCharCode(...arr.subarray(0, len));\n}\nfunction hexCharCodesToInt(a, b) {\n return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));\n}\nfunction writeHexToUInt8(buf, str) {\n const size = str.length >> 1;\n for (let i = 0; i < size; i++) {\n const index = i << 1;\n buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));\n }\n}\nfunction hexStringEqualsUInt8(str, buf) {\n if (str.length !== buf.length * 2) {\n return false;\n }\n for (let i = 0; i < buf.length; i++) {\n const strIndex = i << 1;\n if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {\n return false;\n }\n }\n return true;\n}\nconst alpha = 'a'.charCodeAt(0) - 10;\nconst digit = '0'.charCodeAt(0);\nfunction getDigestHex(tmpBuffer, input, hashLength) {\n let p = 0;\n /* eslint-disable no-plusplus */\n for (let i = 0; i < hashLength; i++) {\n let nibble = input[i] >>> 4;\n tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;\n nibble = input[i] & 0xF;\n tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;\n }\n /* eslint-enable no-plusplus */\n return String.fromCharCode.apply(null, tmpBuffer);\n}\nconst getUInt8Buffer = nodeBuffer !== null\n ? (data) => {\n if (typeof data === 'string') {\n const buf = nodeBuffer.from(data, 'utf8');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n }\n if (nodeBuffer.isBuffer(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.length);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new Error('Invalid data type!');\n }\n : (data) => {\n if (typeof data === 'string') {\n return textEncoder.encode(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new Error('Invalid data type!');\n };\nconst base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst base64Lookup = new Uint8Array(256);\nfor (let i = 0; i < base64Chars.length; i++) {\n base64Lookup[base64Chars.charCodeAt(i)] = i;\n}\nfunction encodeBase64(data, pad = true) {\n const len = data.length;\n const extraBytes = len % 3;\n const parts = [];\n const len2 = len - extraBytes;\n for (let i = 0; i < len2; i += 3) {\n const tmp = ((data[i] << 16) & 0xFF0000)\n + ((data[i + 1] << 8) & 0xFF00)\n + (data[i + 2] & 0xFF);\n const triplet = base64Chars.charAt((tmp >> 18) & 0x3F)\n + base64Chars.charAt((tmp >> 12) & 0x3F)\n + base64Chars.charAt((tmp >> 6) & 0x3F)\n + base64Chars.charAt(tmp & 0x3F);\n parts.push(triplet);\n }\n if (extraBytes === 1) {\n const tmp = data[len - 1];\n const a = base64Chars.charAt(tmp >> 2);\n const b = base64Chars.charAt((tmp << 4) & 0x3F);\n parts.push(`${a}${b}`);\n if (pad) {\n parts.push('==');\n }\n }\n else if (extraBytes === 2) {\n const tmp = (data[len - 2] << 8) + data[len - 1];\n const a = base64Chars.charAt(tmp >> 10);\n const b = base64Chars.charAt((tmp >> 4) & 0x3F);\n const c = base64Chars.charAt((tmp << 2) & 0x3F);\n parts.push(`${a}${b}${c}`);\n if (pad) {\n parts.push('=');\n }\n }\n return parts.join('');\n}\nfunction getDecodeBase64Length(data) {\n let bufferLength = Math.floor(data.length * 0.75);\n const len = data.length;\n if (data[len - 1] === '=') {\n bufferLength -= 1;\n if (data[len - 2] === '=') {\n bufferLength -= 1;\n }\n }\n return bufferLength;\n}\nfunction decodeBase64(data) {\n const bufferLength = getDecodeBase64Length(data);\n const len = data.length;\n const bytes = new Uint8Array(bufferLength);\n let p = 0;\n for (let i = 0; i < len; i += 4) {\n const encoded1 = base64Lookup[data.charCodeAt(i)];\n const encoded2 = base64Lookup[data.charCodeAt(i + 1)];\n const encoded3 = base64Lookup[data.charCodeAt(i + 2)];\n const encoded4 = base64Lookup[data.charCodeAt(i + 3)];\n bytes[p] = (encoded1 << 2) | (encoded2 >> 4);\n p += 1;\n bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n p += 1;\n bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n p += 1;\n }\n return bytes;\n}\n\nconst MAX_HEAP = 16 * 1024;\nconst WASM_FUNC_HASH_LENGTH = 4;\nconst wasmMutex = new Mutex();\nconst wasmModuleCache = new Map();\nfunction WASMInterface(binary, hashLength) {\n return __awaiter(this, void 0, void 0, function* () {\n let wasmInstance = null;\n let memoryView = null;\n let initialized = false;\n if (typeof WebAssembly === 'undefined') {\n throw new Error('WebAssembly is not supported in this environment!');\n }\n const writeMemory = (data, offset = 0) => {\n memoryView.set(data, offset);\n };\n const getMemory = () => memoryView;\n const getExports = () => wasmInstance.exports;\n const setMemorySize = (totalSize) => {\n wasmInstance.exports.Hash_SetMemorySize(totalSize);\n const arrayOffset = wasmInstance.exports.Hash_GetBuffer();\n const memoryBuffer = wasmInstance.exports.memory.buffer;\n memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);\n };\n const getStateSize = () => {\n const view = new DataView(wasmInstance.exports.memory.buffer);\n const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);\n return stateSize;\n };\n const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {\n if (!wasmModuleCache.has(binary.name)) {\n const asm = decodeBase64(binary.data);\n const promise = WebAssembly.compile(asm);\n wasmModuleCache.set(binary.name, promise);\n }\n const module = yield wasmModuleCache.get(binary.name);\n wasmInstance = yield WebAssembly.instantiate(module, {\n // env: {\n // emscripten_memcpy_big: (dest, src, num) => {\n // const memoryBuffer = wasmInstance.exports.memory.buffer;\n // const memView = new Uint8Array(memoryBuffer, 0);\n // memView.set(memView.subarray(src, src + num), dest);\n // },\n // print_memory: (offset, len) => {\n // const memoryBuffer = wasmInstance.exports.memory.buffer;\n // const memView = new Uint8Array(memoryBuffer, 0);\n // console.log('print_int32', memView.subarray(offset, offset + len));\n // },\n // },\n });\n // wasmInstance.exports._start();\n }));\n const setupInterface = () => __awaiter(this, void 0, void 0, function* () {\n if (!wasmInstance) {\n yield loadWASMPromise;\n }\n const arrayOffset = wasmInstance.exports.Hash_GetBuffer();\n const memoryBuffer = wasmInstance.exports.memory.buffer;\n memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);\n });\n const init = (bits = null) => {\n initialized = true;\n wasmInstance.exports.Hash_Init(bits);\n };\n const updateUInt8Array = (data) => {\n let read = 0;\n while (read < data.length) {\n const chunk = data.subarray(read, read + MAX_HEAP);\n read += chunk.length;\n memoryView.set(chunk);\n wasmInstance.exports.Hash_Update(chunk.length);\n }\n };\n const update = (data) => {\n if (!initialized) {\n throw new Error('update() called before init()');\n }\n const Uint8Buffer = getUInt8Buffer(data);\n updateUInt8Array(Uint8Buffer);\n };\n const digestChars = new Uint8Array(hashLength * 2);\n const digest = (outputType, padding = null) => {\n if (!initialized) {\n throw new Error('digest() called before init()');\n }\n initialized = false;\n wasmInstance.exports.Hash_Final(padding);\n if (outputType === 'binary') {\n // the data is copied to allow GC of the original memory object\n return memoryView.slice(0, hashLength);\n }\n return getDigestHex(digestChars, memoryView, hashLength);\n };\n const save = () => {\n if (!initialized) {\n throw new Error('save() can only be called after init() and before digest()');\n }\n const stateOffset = wasmInstance.exports.Hash_GetState();\n const stateLength = getStateSize();\n const memoryBuffer = wasmInstance.exports.memory.buffer;\n const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);\n // prefix is 4 bytes from SHA1 hash of the WASM binary\n // it is used to detect incompatible internal states between different versions of hash-wasm\n const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);\n writeHexToUInt8(prefixedState, binary.hash);\n prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);\n return prefixedState;\n };\n const load = (state) => {\n if (!(state instanceof Uint8Array)) {\n throw new Error('load() expects an Uint8Array generated by save()');\n }\n const stateOffset = wasmInstance.exports.Hash_GetState();\n const stateLength = getStateSize();\n const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;\n const memoryBuffer = wasmInstance.exports.memory.buffer;\n if (state.length !== overallLength) {\n throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);\n }\n if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {\n throw new Error('This state was written by an incompatible hash implementation');\n }\n const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);\n new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);\n initialized = true;\n };\n const isDataShort = (data) => {\n if (typeof data === 'string') {\n // worst case is 4 bytes / char\n return data.length < MAX_HEAP / 4;\n }\n return data.byteLength < MAX_HEAP;\n };\n let canSimplify = isDataShort;\n switch (binary.name) {\n case 'argon2':\n case 'scrypt':\n canSimplify = () => true;\n break;\n case 'blake2b':\n case 'blake2s':\n // if there is a key at blake2 then cannot simplify\n canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);\n break;\n case 'blake3':\n // if there is a key at blake3 then cannot simplify\n canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);\n break;\n case 'xxhash64': // cannot simplify\n case 'xxhash3':\n case 'xxhash128':\n canSimplify = () => false;\n break;\n }\n // shorthand for (init + update + digest) for better performance\n const calculate = (data, initParam = null, digestParam = null) => {\n if (!canSimplify(data, initParam)) {\n init(initParam);\n update(data);\n return digest('hex', digestParam);\n }\n const buffer = getUInt8Buffer(data);\n memoryView.set(buffer);\n wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);\n return getDigestHex(digestChars, memoryView, hashLength);\n };\n yield setupInterface();\n return {\n getMemory,\n writeMemory,\n getExports,\n setMemorySize,\n init,\n update,\n digest,\n save,\n load,\n calculate,\n hashLength,\n };\n });\n}\n\nvar name$k = \"adler32\";\nvar data$k = \"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgUEAQECAgYOAn8BQYCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEK6wkGBQBBgAkLCgBBAEEBNgKECAvjCAEHf0EAKAKECCIBQf//A3EhAiABQRB2IQMCQAJAIABBAUcNACACQQAtAIAJaiIBQY+AfGogASABQfD/A0sbIgEgA2oiBEEQdCIFQYCAPGogBSAEQfD/A0sbIAFyIQEMAQsCQAJAAkACQAJAIABBEEkNAEGACSEGIABBsCtJDQFBgAkhBgNAQQAhBQNAIAYgBWoiASgCACIEQf8BcSACaiICIANqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiAmogAiABQQRqKAIAIgRB/wFxaiICaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEIaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiIEaiAEIAFBDGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiAmohAyAFQRBqIgVBsCtHDQALIANB8f8DcCEDIAJB8f8DcCECIAZBsCtqIQYgAEHQVGoiAEGvK0sNAAsgAEUNBCAAQQ9LDQEMAgsCQCAARQ0AAkACQCAAQQNxIgUNAEGACSEBIAAhBAwBCyAAQXxxIQRBACEBA0AgAiABQYAJai0AAGoiAiADaiEDIAUgAUEBaiIBRw0ACyAFQYAJaiEBCyAAQQRJDQADQCACIAEtAABqIgUgAS0AAWoiBiABLQACaiIAIAFBA2otAABqIgIgACAGIAUgA2pqamohAyABQQRqIQEgBEF8aiIEDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCyAAQX9qIQcCQCAAQQNxIgVFDQAgAEF8cSEAIAUhBCAGIQEDQCACIAEtAABqIgIgA2ohAyABQQFqIQEgBEF/aiIEDQALIAYgBWohBgsgB0EDSQ0AA0AgAiAGLQAAaiIBIAYtAAFqIgQgBi0AAmoiBSAGQQNqLQAAaiICIAUgBCABIANqampqIQMgBkEEaiEGIABBfGoiAA0ACwsgA0Hx/wNwIQMgAkHx/wNwIQILIAIgA0EQdHIhAQtBACABNgKECAsxAQF/QQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwUAQYQICzsAQQBBATYChAggABACQQBBACgChAgiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA\";\nvar hash$k = \"02ddbd17\";\nvar wasmJson$k = {\n\tname: name$k,\n\tdata: data$k,\n\thash: hash$k\n};\n\nfunction lockedCreate(mutex, binary, hashLength) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield mutex.lock();\n const wasm = yield WASMInterface(binary, hashLength);\n unlock();\n return wasm;\n });\n}\n\nconst mutex$l = new Mutex();\nlet wasmCache$l = null;\n/**\n * Calculates Adler-32 hash. The resulting 32-bit hash is stored in\n * network byte order (big-endian).\n *\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction adler32(data) {\n if (wasmCache$l === null) {\n return lockedCreate(mutex$l, wasmJson$k, 4)\n .then((wasm) => {\n wasmCache$l = wasm;\n return wasmCache$l.calculate(data);\n });\n }\n try {\n const hash = wasmCache$l.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new Adler-32 hash instance\n */\nfunction createAdler32() {\n return WASMInterface(wasmJson$k, 4).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 4,\n digestSize: 4,\n };\n return obj;\n });\n}\n\nvar name$j = \"blake2b\";\nvar data$j = \"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\";\nvar hash$j = \"656e0f66\";\nvar wasmJson$j = {\n\tname: name$j,\n\tdata: data$j,\n\thash: hash$j\n};\n\nconst mutex$k = new Mutex();\nlet wasmCache$k = null;\nfunction validateBits$4(bits) {\n if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) {\n return new Error('Invalid variant! Valid values: 8, 16, ..., 512');\n }\n return null;\n}\nfunction getInitParam$1(outputBits, keyBits) {\n // eslint-disable-next-line no-bitwise\n return outputBits | (keyBits << 16);\n}\n/**\n * Calculates BLAKE2b hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits, which has to be a number\n * divisible by 8, between 8 and 512. Defaults to 512.\n * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.\n * @returns Computed hash as a hexadecimal string\n */\nfunction blake2b(data, bits = 512, key = null) {\n if (validateBits$4(bits)) {\n return Promise.reject(validateBits$4(bits));\n }\n let keyBuffer = null;\n let initParam = bits;\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length > 64) {\n return Promise.reject(new Error('Max key length is 64 bytes'));\n }\n initParam = getInitParam$1(bits, keyBuffer.length);\n }\n const hashLength = bits / 8;\n if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) {\n return lockedCreate(mutex$k, wasmJson$j, hashLength)\n .then((wasm) => {\n wasmCache$k = wasm;\n if (initParam > 512) {\n wasmCache$k.writeMemory(keyBuffer);\n }\n return wasmCache$k.calculate(data, initParam);\n });\n }\n try {\n if (initParam > 512) {\n wasmCache$k.writeMemory(keyBuffer);\n }\n const hash = wasmCache$k.calculate(data, initParam);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new BLAKE2b hash instance\n * @param bits Number of output bits, which has to be a number\n * divisible by 8, between 8 and 512. Defaults to 512.\n * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.\n */\nfunction createBLAKE2b(bits = 512, key = null) {\n if (validateBits$4(bits)) {\n return Promise.reject(validateBits$4(bits));\n }\n let keyBuffer = null;\n let initParam = bits;\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length > 64) {\n return Promise.reject(new Error('Max key length is 64 bytes'));\n }\n initParam = getInitParam$1(bits, keyBuffer.length);\n }\n const outputSize = bits / 8;\n return WASMInterface(wasmJson$j, outputSize).then((wasm) => {\n if (initParam > 512) {\n wasm.writeMemory(keyBuffer);\n }\n wasm.init(initParam);\n const obj = {\n init: initParam > 512\n ? () => {\n wasm.writeMemory(keyBuffer);\n wasm.init(initParam);\n return obj;\n }\n : () => {\n wasm.init(initParam);\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 128,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nvar name$i = \"argon2\";\nvar data$i = \"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvkyBVgBAn9BACEBAkBBACgCiAgiAiAARg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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\";\nvar hash$i = \"7ab14c91\";\nvar wasmJson$i = {\n\tname: name$i,\n\tdata: data$i,\n\thash: hash$i\n};\n\nfunction encodeResult(salt, options, res) {\n const parameters = [\n `m=${options.memorySize}`,\n `t=${options.iterations}`,\n `p=${options.parallelism}`,\n ].join(',');\n return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;\n}\nconst uint32View = new DataView(new ArrayBuffer(4));\nfunction int32LE(x) {\n uint32View.setInt32(0, x, true);\n return new Uint8Array(uint32View.buffer);\n}\nfunction hashFunc(blake512, buf, len) {\n return __awaiter(this, void 0, void 0, function* () {\n if (len <= 64) {\n const blake = yield createBLAKE2b(len * 8);\n blake.update(int32LE(len));\n blake.update(buf);\n return blake.digest('binary');\n }\n const r = Math.ceil(len / 32) - 2;\n const ret = new Uint8Array(len);\n blake512.init();\n blake512.update(int32LE(len));\n blake512.update(buf);\n let vp = blake512.digest('binary');\n ret.set(vp.subarray(0, 32), 0);\n for (let i = 1; i < r; i++) {\n blake512.init();\n blake512.update(vp);\n vp = blake512.digest('binary');\n ret.set(vp.subarray(0, 32), i * 32);\n }\n const partialBytesNeeded = len - 32 * r;\n let blakeSmall;\n if (partialBytesNeeded === 64) {\n blakeSmall = blake512;\n blakeSmall.init();\n }\n else {\n blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8);\n }\n blakeSmall.update(vp);\n vp = blakeSmall.digest('binary');\n ret.set(vp.subarray(0, partialBytesNeeded), r * 32);\n return ret;\n });\n}\nfunction getHashType(type) {\n switch (type) {\n case 'd':\n return 0;\n case 'i':\n return 1;\n default:\n return 2;\n }\n}\nfunction argon2Internal(options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const { parallelism, iterations, hashLength } = options;\n const password = getUInt8Buffer(options.password);\n const salt = getUInt8Buffer(options.salt);\n const version = 0x13;\n const hashType = getHashType(options.hashType);\n const { memorySize } = options; // in KB\n const secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : '');\n const [argon2Interface, blake512] = yield Promise.all([\n WASMInterface(wasmJson$i, 1024),\n createBLAKE2b(512),\n ]);\n // last block is for storing the init vector\n argon2Interface.setMemorySize(memorySize * 1024 + 1024);\n const initVector = new Uint8Array(24);\n const initVectorView = new DataView(initVector.buffer);\n initVectorView.setInt32(0, parallelism, true);\n initVectorView.setInt32(4, hashLength, true);\n initVectorView.setInt32(8, memorySize, true);\n initVectorView.setInt32(12, iterations, true);\n initVectorView.setInt32(16, version, true);\n initVectorView.setInt32(20, hashType, true);\n argon2Interface.writeMemory(initVector, memorySize * 1024);\n blake512.init();\n blake512.update(initVector);\n blake512.update(int32LE(password.length));\n blake512.update(password);\n blake512.update(int32LE(salt.length));\n blake512.update(salt);\n blake512.update(int32LE(secret.length));\n blake512.update(secret);\n blake512.update(int32LE(0)); // associatedData length + associatedData\n const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane\n const lanes = segments * 4;\n const param = new Uint8Array(72);\n const H0 = blake512.digest('binary');\n param.set(H0);\n for (let lane = 0; lane < parallelism; lane++) {\n param.set(int32LE(0), 64);\n param.set(int32LE(lane), 68);\n let position = lane * lanes;\n let chunk = yield hashFunc(blake512, param, 1024);\n argon2Interface.writeMemory(chunk, position * 1024);\n position += 1;\n param.set(int32LE(1), 64);\n chunk = yield hashFunc(blake512, param, 1024);\n argon2Interface.writeMemory(chunk, position * 1024);\n }\n const C = new Uint8Array(1024);\n writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize));\n const res = yield hashFunc(blake512, C, hashLength);\n if (options.outputType === 'hex') {\n const digestChars = new Uint8Array(hashLength * 2);\n return getDigestHex(digestChars, res, hashLength);\n }\n if (options.outputType === 'encoded') {\n return encodeResult(salt, options, res);\n }\n // return binary format\n return res;\n });\n}\nconst validateOptions$3 = (options) => {\n var _a;\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (!options.password) {\n throw new Error('Password must be specified');\n }\n options.password = getUInt8Buffer(options.password);\n if (options.password.length < 1) {\n throw new Error('Password must be specified');\n }\n if (!options.salt) {\n throw new Error('Salt must be specified');\n }\n options.salt = getUInt8Buffer(options.salt);\n if (options.salt.length < 8) {\n throw new Error('Salt should be at least 8 bytes long');\n }\n options.secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : '');\n if (!Number.isInteger(options.iterations) || options.iterations < 1) {\n throw new Error('Iterations should be a positive number');\n }\n if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {\n throw new Error('Parallelism should be a positive number');\n }\n if (!Number.isInteger(options.hashLength) || options.hashLength < 4) {\n throw new Error('Hash length should be at least 4 bytes.');\n }\n if (!Number.isInteger(options.memorySize)) {\n throw new Error('Memory size should be specified.');\n }\n if (options.memorySize < 8 * options.parallelism) {\n throw new Error('Memory size should be at least 8 * parallelism.');\n }\n if (options.outputType === undefined) {\n options.outputType = 'hex';\n }\n if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {\n throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);\n }\n};\n/**\n * Calculates hash using the argon2i password-hashing function\n * @returns Computed hash\n */\nfunction argon2i(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$3(options);\n return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'i' }));\n });\n}\n/**\n * Calculates hash using the argon2id password-hashing function\n * @returns Computed hash\n */\nfunction argon2id(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$3(options);\n return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'id' }));\n });\n}\n/**\n * Calculates hash using the argon2d password-hashing function\n * @returns Computed hash\n */\nfunction argon2d(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$3(options);\n return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'd' }));\n });\n}\nconst getHashParameters = (password, encoded, secret) => {\n const regex = /^\\$argon2(id|i|d)\\$v=([0-9]+)\\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\\$([A-Za-z0-9+/]+)\\$([A-Za-z0-9+/]+)$/;\n const match = encoded.match(regex);\n if (!match) {\n throw new Error('Invalid hash');\n }\n const [, hashType, version, parameters, salt, hash] = match;\n if (version !== '19') {\n throw new Error(`Unsupported version: ${version}`);\n }\n const parsedParameters = {};\n const paramMap = { m: 'memorySize', p: 'parallelism', t: 'iterations' };\n parameters.split(',').forEach((x) => {\n const [n, v] = x.split('=');\n parsedParameters[paramMap[n]] = parseInt(v, 10);\n });\n return Object.assign(Object.assign({}, parsedParameters), { password,\n secret, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: 'encoded' });\n};\nconst validateVerifyOptions$1 = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (options.hash === undefined || typeof options.hash !== 'string') {\n throw new Error('Hash should be specified');\n }\n};\n/**\n * Verifies password using the argon2 password-hashing function\n * @returns True if the encoded hash matches the password\n */\nfunction argon2Verify(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateVerifyOptions$1(options);\n const params = getHashParameters(options.password, options.hash, options.secret);\n validateOptions$3(params);\n const hashStart = options.hash.lastIndexOf('$') + 1;\n const result = yield argon2Internal(params);\n return result.substring(hashStart) === options.hash.substring(hashStart);\n });\n}\n\nvar name$h = \"blake2s\";\nvar data$h = \"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\";\nvar hash$h = \"c5c746d4\";\nvar wasmJson$h = {\n\tname: name$h,\n\tdata: data$h,\n\thash: hash$h\n};\n\nconst mutex$j = new Mutex();\nlet wasmCache$j = null;\nfunction validateBits$3(bits) {\n if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) {\n return new Error('Invalid variant! Valid values: 8, 16, ..., 256');\n }\n return null;\n}\nfunction getInitParam(outputBits, keyBits) {\n // eslint-disable-next-line no-bitwise\n return outputBits | (keyBits << 16);\n}\n/**\n * Calculates BLAKE2s hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits, which has to be a number\n * divisible by 8, between 8 and 256. Defaults to 256.\n * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.\n * @returns Computed hash as a hexadecimal string\n */\nfunction blake2s(data, bits = 256, key = null) {\n if (validateBits$3(bits)) {\n return Promise.reject(validateBits$3(bits));\n }\n let keyBuffer = null;\n let initParam = bits;\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length > 32) {\n return Promise.reject(new Error('Max key length is 32 bytes'));\n }\n initParam = getInitParam(bits, keyBuffer.length);\n }\n const hashLength = bits / 8;\n if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) {\n return lockedCreate(mutex$j, wasmJson$h, hashLength)\n .then((wasm) => {\n wasmCache$j = wasm;\n if (initParam > 512) {\n wasmCache$j.writeMemory(keyBuffer);\n }\n return wasmCache$j.calculate(data, initParam);\n });\n }\n try {\n if (initParam > 512) {\n wasmCache$j.writeMemory(keyBuffer);\n }\n const hash = wasmCache$j.calculate(data, initParam);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new BLAKE2s hash instance\n * @param bits Number of output bits, which has to be a number\n * divisible by 8, between 8 and 256. Defaults to 256.\n * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.\n */\nfunction createBLAKE2s(bits = 256, key = null) {\n if (validateBits$3(bits)) {\n return Promise.reject(validateBits$3(bits));\n }\n let keyBuffer = null;\n let initParam = bits;\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length > 32) {\n return Promise.reject(new Error('Max key length is 32 bytes'));\n }\n initParam = getInitParam(bits, keyBuffer.length);\n }\n const outputSize = bits / 8;\n return WASMInterface(wasmJson$h, outputSize).then((wasm) => {\n if (initParam > 512) {\n wasm.writeMemory(keyBuffer);\n }\n wasm.init(initParam);\n const obj = {\n init: initParam > 512\n ? () => {\n wasm.writeMemory(keyBuffer);\n wasm.init(initParam);\n return obj;\n }\n : () => {\n wasm.init(initParam);\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nvar name$g = \"blake3\";\nvar data$g = \"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AAsLIAEpAyAhByABKQMoIQwgASkDMCENIAEpAzghDkEAKQPAiQEQBUEAQQAtAJCKASICQQFqOgCQigEgAkEFdCICQamKAWogCjcDACACQaGKAWogBDcDACACQZmKAWogBTcDACACQZGKAWogBjcDAEEAKQPAiQEgE0IBiHwQBUEAQQAtAJCKASICQQFqOgCQigEgAkEFdCICQamKAWogDjcDACACQaGKAWogDTcDACACQZmKAWogDDcDACACQZGKAWogBzcDAAtBAEEAKQPAiQEgE3wiBDcDwIkBIAMgEmohAyAAIBJrIgBBgAhLDQALIABFDQELQaCJASADIAAQBEEAKQPAiQEQBQsgAUHQAmokAAuGBwIJfwF+IwBBwABrIgMkAAJAAkAgAC0AaCIERQ0AAkBBwAAgBGsiBSACIAUgAkkbIgZFDQAgBkEDcSEHQQAhBQJAIAZBBEkNACAAIARqIQggBkF8cSEJQQAhBQNAIAggBWoiCkEoaiABIAVqIgstAAA6AAAgCkEpaiALQQFqLQAAOgAAIApBKmogC0ECai0AADoAACAKQStqIAtBA2otAAA6AAAgCSAFQQRqIgVHDQALCwJAIAdFDQAgASAFaiEKIAUgBGogAGpBKGohBQNAIAUgCi0AADoAACAKQQFqIQogBUEBaiEFIAdBf2oiBw0ACwsgAC0AaCEECyAAIAQgBmoiBzoAaCABIAZqIQECQCACIAZrIgINAEEAIQIMAgsgAyAAIABBKGpBwAAgACkDICAALQBqIABB6QBqIgUtAAAiCkVyEAIgACADKQMgIAMpAwCFNwMAIAAgAykDKCADKQMIhTcDCCAAIAMpAzAgAykDEIU3AxAgACADKQM4IAMpAxiFNwMYIABBADoAaCAFIApBAWo6AAAgAEHgAGpCADcDACAAQdgAakIANwMAIABB0ABqQgA3AwAgAEHIAGpCADcDACAAQcAAakIANwMAIABBOGpCADcDACAAQTBqQgA3AwAgAEIANwMoC0EAIQcgAkHBAEkNACAAQekAaiIKLQAAIQUgAC0AaiELIAApAyAhDANAIAMgACABQcAAIAwgCyAFQf8BcUVyQf8BcRACIAAgAykDICADKQMAhTcDACAAIAMpAyggAykDCIU3AwggACADKQMwIAMpAxCFNwMQIAAgAykDOCADKQMYhTcDGCAK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DkUNACAFIAdBBnRqIQEgBUGIAWogB0ECdGohAANAIAAgATYCACABQcAAaiEBIABBBGohACAOQX9qIg4NAAsLIAhBAmohAAsgBUGIAWogBkEBQgBBACADQQRyQQBBACAEEAEgACAJTw0AIAQgBkEFdGoiASAFIAZBBnRqIgApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggBkEBaiEGCyAFQeACaiQAIAYLrRAIAn8EfgF/AX4EfwR+BH8EfiMAQfABayIBJAACQCAARQ0AAkBBAC0AkIoBIgINACABQTBqQQApA9CJATcDACABQThqQQApA9iJATcDACABQQApA6CJASIDNwMAIAFBACkDqIkBIgQ3AwggAUEAKQOwiQEiBTcDECABQQApA7iJASIGNwMYIAFBACkDyIkBNwMoQQAtAIqKASECQQAtAImKASEHQQApA8CJASEIQQAtAIiKASEJIAFBwABqQQApA+CJATcDACABQcgAakEAKQPoiQE3AwAgAUHQAGpBACkD8IkBNwMAIAFB2ABqQQApA/iJATcDACABQeAAakEAKQOAigE3AwAgASAJOgBoIAEgCDcDICABIAIgB0VyIgJBAnI6AGkgAUEoaiEKQgAhCEGACSELIAJBCnJB/wFxIQwDQCABQbABaiABIAogCUH/AXEgCCAMEAIgASABKQPQASINIAEpA7ABhTcDcCABIAEpA9gBIg4gASkDuAGFNwN4IAEgASkD4AEiDyABKQPAAYU3A4ABIAEgASkD6AEiECAGhTcDqAEgASAPIAWFNwOgASABIA4gBIU3A5gBIAEgDSADhTcDkAEgASAQIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQAMAgsLAkACQAJAQQAtAImKASIHQQZ0QQBBAC0AiIoBIhFrRg0AIAEgEToAaCABQQApA4CKATcDYCABQQApA/iJATcDWCABQQApA/CJATcDUCABQQApA+iJATcDSCABQQApA+CJATcDQCABQQApA9iJATcDOCABQQApA9CJATcDMCABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIgM3AxggAUEAKQOwiQEiBDcDECABQQApA6iJASIFNwMIIAFBACkDoIkBIgY3AwAgAUEALQCKigEiEyAHRXJBAnIiCzoAaSATQQRyIRNBACkDmIkBIQ1BACkDkIkBIQ5BACkDiIkBIQ9BACkDgIkBIRAMAQtBwAAhESABQcAAOgBoQgAhCCABQgA3AyAgAUEAKQOYiQEiDTcDGCABQQApA5CJASIONwMQIAFBACkDiIkBIg83AwggAUEAKQOAiQEiEDcDACABQQAtAIqKAUEEciITOgBpIAEgAkF+aiICQQV0IgdByYoBaikDADcDYCABIAdBwYoBaikDADcDWCABIAdBuYoBaikDADcDUCABIAdBsYoBaikDADcDSCABIAdBqYoBaikDADcDQCABIAdBoYoBaikDADcDOCABIAdBmYoBaikDADcDMCABIAdBkYoBaikDADcDKCATIQsgECEGIA8hBSAOIQQgDSEDIAJFDQELIAJBf2oiB0EFdCIUQZGKAWopAwAhFSAUQZmKAWopAwAhFiAUQaGKAWopAwAhFyAUQamKAWopAwAhGCABIAM3A4gBIAEgBDcDgAEgASAFNwN4IAEgBjcDcCABQbABaiABQfAAaiABQShqIhQgESAIIAtB/wFxEAIgASATOgBpIAFBwAA6AGggASAYNwNAIAEgFzcDOCABIBY3AzAgASAVNwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggB0UNACACQQV0QemJAWohAiATQf8BcSERA0AgAkFoaikDACEIIAJBcGopAwAhAyACQXhqKQMAIQQgAikDACEFIAEgDTcDiAEgASAONwOAASABIA83A3ggASAQNwNwIAFBsAFqIAFB8ABqIBRBwABCACAREAIgASATOgBpIAFBwAA6AGggASAFNwNAIAEgBDcDOCABIAM3AzAgASAINwMoIAFCADcDICABIA03AxggASAONwMQIAEgDzcDCCABIBA3AwAgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAkFgaiECIAdBf2oiBw0ACwsgAUEoaiEJQgAhCEGACSELIBNBCHJB/wFxIQoDQCABQbABaiABIAlBwAAgCCAKEAIgASABKQPQASIDIAEpA7ABhTcDcCABIAEpA9gBIgQgASkDuAGFNwN4IAEgASkD4AEiBSABKQPAAYU3A4ABIAEgDSABKQPoASIGhTcDqAEgASAOIAWFNwOgASABIA8gBIU3A5gBIAEgECADhTcDkAEgASAGIAEpA8gBhTcDiAEgAEHAACAAQcAASRsiEUF/aiESAkACQCARQQdxIhMNACABQfAAaiECIAshByARIRQMAQsgEUH4AHEhFCABQfAAaiECIAshBwNAIAcgAi0AADoAACAHQQFqIQcgAkEBaiECIBNBf2oiEw0ACwsCQCASQQdJDQADQCAHIAIpAAA3AAAgB0EIaiEHIAJBCGohAiAUQXhqIhQNAAsLIAhCAXwhCCALIBFqIQsgACARayIADQALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABADCwYAIAAQBwsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAMgAhAHCwsLAQBBgAgLBHgHAAA=\";\nvar hash$g = \"540e8b8e\";\nvar wasmJson$g = {\n\tname: name$g,\n\tdata: data$g,\n\thash: hash$g\n};\n\nconst mutex$i = new Mutex();\nlet wasmCache$i = null;\nfunction validateBits$2(bits) {\n if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) {\n return new Error('Invalid variant! Valid values: 8, 16, ...');\n }\n return null;\n}\n/**\n * Calculates BLAKE3 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits, which has to be a number\n * divisible by 8. Defaults to 256.\n * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.\n * @returns Computed hash as a hexadecimal string\n */\nfunction blake3(data, bits = 256, key = null) {\n if (validateBits$2(bits)) {\n return Promise.reject(validateBits$2(bits));\n }\n let keyBuffer = null;\n let initParam = 0; // key is empty by default\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length !== 32) {\n return Promise.reject(new Error('Key length must be exactly 32 bytes'));\n }\n initParam = 32;\n }\n const hashLength = bits / 8;\n const digestParam = hashLength;\n if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) {\n return lockedCreate(mutex$i, wasmJson$g, hashLength)\n .then((wasm) => {\n wasmCache$i = wasm;\n if (initParam === 32) {\n wasmCache$i.writeMemory(keyBuffer);\n }\n return wasmCache$i.calculate(data, initParam, digestParam);\n });\n }\n try {\n if (initParam === 32) {\n wasmCache$i.writeMemory(keyBuffer);\n }\n const hash = wasmCache$i.calculate(data, initParam, digestParam);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new BLAKE3 hash instance\n * @param bits Number of output bits, which has to be a number\n * divisible by 8. Defaults to 256.\n * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.\n */\nfunction createBLAKE3(bits = 256, key = null) {\n if (validateBits$2(bits)) {\n return Promise.reject(validateBits$2(bits));\n }\n let keyBuffer = null;\n let initParam = 0; // key is empty by default\n if (key !== null) {\n keyBuffer = getUInt8Buffer(key);\n if (keyBuffer.length !== 32) {\n return Promise.reject(new Error('Key length must be exactly 32 bytes'));\n }\n initParam = 32;\n }\n const outputSize = bits / 8;\n const digestParam = outputSize;\n return WASMInterface(wasmJson$g, outputSize).then((wasm) => {\n if (initParam === 32) {\n wasm.writeMemory(keyBuffer);\n }\n wasm.init(initParam);\n const obj = {\n init: initParam === 32\n ? () => {\n wasm.writeMemory(keyBuffer);\n wasm.init(initParam);\n return obj;\n }\n : () => {\n wasm.init(initParam);\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType, digestParam),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nvar name$f = \"crc32\";\nvar data$f = \"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwUEAQECAgYOAn8BQZDJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAgtIYXNoX1VwZGF0ZQADCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKkggHBQBBgAkLwwMBA39BgIkBIQFBACECA0AgAUEAQQBBAEEAQQBBAEEAQQAgAkEBcWsgAHEgAkEBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnMiA0EBcWsgAHEgA0EBdnM2AgAgAUEEaiEBIAJBAWoiAkGAAkcNAAtBACEAA0AgAEGEkQFqIABBhIkBaigCACICQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEmQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYShAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhKkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEsQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYS5AWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhMEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzNgIAIABBBGoiAEH8B0cNAAsLJwACQEEAKAKAyQEgAEYNACAAEAFBACAANgKAyQELQQBBADYChMkBC4gDAQN/QQAoAoTJAUF/cyEBQYAJIQICQCAAQQhJDQBBgAkhAgNAIAJBBGooAgAiA0EOdkH8B3FBgJEBaigCACADQRZ2QfwHcUGAiQFqKAIAcyADQQZ2QfwHcUGAmQFqKAIAcyADQf8BcUECdEGAoQFqKAIAcyACKAIAIAFzIgFBFnZB/AdxQYCpAWooAgBzIAFBDnZB/AdxQYCxAWooAgBzIAFBBnZB/AdxQYC5AWooAgBzIAFB/wFxQQJ0QYDBAWooAgBzIQEgAkEIaiECIABBeGoiAEEHSw0ACwsCQCAARQ0AAkACQCAAQQFxDQAgACEDDAELIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiEDCyAAQQFGDQADQCABQf8BcSACLQAAc0ECdEGAiQFqKAIAIAFBCHZzIgFB/wFxIAJBAWotAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQJqIQIgA0F+aiIDDQALC0EAIAFBf3M2AoTJAQsyAQF/QQBBACgChMkBIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyNgKACQsGAEGEyQELWQACQEEAKAKAyQEgAUYNACABEAFBACABNgKAyQELQQBBADYChMkBIAAQA0EAQQAoAoTJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCgAkLCwsBAEGACAsEBAAAAA==\";\nvar hash$f = \"d2eba587\";\nvar wasmJson$f = {\n\tname: name$f,\n\tdata: data$f,\n\thash: hash$f\n};\n\nconst mutex$h = new Mutex();\nlet wasmCache$h = null;\n/**\n * Calculates CRC-32 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction crc32(data) {\n if (wasmCache$h === null) {\n return lockedCreate(mutex$h, wasmJson$f, 4)\n .then((wasm) => {\n wasmCache$h = wasm;\n return wasmCache$h.calculate(data, 0xEDB88320);\n });\n }\n try {\n const hash = wasmCache$h.calculate(data, 0xEDB88320);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new CRC-32 hash instance\n */\nfunction createCRC32() {\n return WASMInterface(wasmJson$f, 4).then((wasm) => {\n wasm.init(0xEDB88320);\n const obj = {\n init: () => { wasm.init(0xEDB88320); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 4,\n digestSize: 4,\n };\n return obj;\n });\n}\n\nconst mutex$g = new Mutex();\nlet wasmCache$g = null;\n/**\n * Calculates CRC-32C hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction crc32c(data) {\n if (wasmCache$g === null) {\n return lockedCreate(mutex$g, wasmJson$f, 4)\n .then((wasm) => {\n wasmCache$g = wasm;\n return wasmCache$g.calculate(data, 0x82F63B78);\n });\n }\n try {\n const hash = wasmCache$g.calculate(data, 0x82F63B78);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new CRC-32C hash instance\n */\nfunction createCRC32C() {\n return WASMInterface(wasmJson$f, 4).then((wasm) => {\n wasm.init(0x82F63B78);\n const obj = {\n init: () => { wasm.init(0x82F63B78); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 4,\n digestSize: 4,\n };\n return obj;\n });\n}\n\nvar name$e = \"md4\";\nvar data$e = \"AGFzbQEAAAABEgRgAAF/YAAAYAF/AGACf38BfwMIBwABAgMBAAIFBAEBAgIGDgJ/AUGgigULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCu4UBwUAQYAJCy0AQQBC/rnrxemOlZkQNwKQiQFBAEKBxpS6lvHq5m83AoiJAUEAQgA3AoCJAQu+BQEHf0EAQQAoAoCJASIBIABqQf////8BcSICNgKAiQFBAEEAKAKEiQEgAiABSWogAEEddmo2AoSJAQJAAkACQAJAAkACQCABQT9xIgMNAEGACSEEDAELQcAAIANrIgUgAEsNASAFQQNxIQZBACEBAkAgA0E/c0EDSQ0AIANBgIkBaiEEIAVB/ABxIQdBACEBA0AgBCABaiICQRhqIAFBgAlqLQAAOgAAIAJBGWogAUGBCWotAAA6AAAgAkEaaiABQYIJai0AADoAACACQRtqIAFBgwlqLQAAOgAAIAcgAUEEaiIBRw0ACwsCQCAGRQ0AIANBmIkBaiECA0AgAiABaiABQYAJai0AADoAACABQQFqIQEgBkF/aiIGDQALC0GYiQFBwAAQAxogACAFayEAIAVBgAlqIQQLIABBwABPDQEgACECDAILIABFDQIgAEEDcSEGQQAhAQJAIABBBEkNACADQYCJAWohBCAAQXxxIQBBACEBA0AgBCABaiICQRhqIAFBgAlqLQAAOgAAIAJBGWogAUGBCWotAAA6AAAgAkEaaiABQYIJai0AADoAACACQRtqIAFBgwlqLQAAOgAAIAAgAUEEaiIBRw0ACwsgBkUNAiADQZiJAWohAgNAIAIgAWogAUGACWotAAA6AAAgAUEBaiEBIAZBf2oiBg0ADAMLCyAAQT9xIQIgBCAAQUBxEAMhBAsgAkUNACACQQNxIQZBACEBAkAgAkEESQ0AIAJBPHEhAEEAIQEDQCABQZiJAWogBCABaiICLQAAOgAAIAFBmYkBaiACQQFqLQAAOgAAIAFBmokBaiACQQJqLQAAOgAAIAFBm4kBaiACQQNqLQAAOgAAIAAgAUEEaiIBRw0ACwsgBkUNAANAIAFBmIkBaiAEIAFqLQAAOgAAIAFBAWohASAGQX9qIgYNAAsLC+sKARd/QQAoApSJASECQQAoApCJASEDQQAoAoyJASEEQQAoAoiJASEFA0AgACgCHCIGIAAoAhQiByAAKAIYIgggACgCECIJIAAoAiwiCiAAKAIoIgsgACgCJCIMIAAoAiAiDSALIAggACgCCCIOIANqIAAoAgQiDyACaiAEIAMgAnNxIAJzIAVqIAAoAgAiEGpBA3ciESAEIANzcSADc2pBB3ciEiARIARzcSAEc2pBC3ciE2ogEiAHaiAJIBFqIAAoAgwiFCAEaiATIBIgEXNxIBFzakETdyIRIBMgEnNxIBJzakEDdyISIBEgE3NxIBNzakEHdyITIBIgEXNxIBFzakELdyIVaiATIAxqIBIgDWogESAGaiAVIBMgEnNxIBJzakETdyIRIBUgE3NxIBNzakEDdyISIBEgFXNxIBVzakEHdyITIBIgEXNxIBFzakELdyIVIAAoAjgiFmogEyAAKAI0IhdqIBIgACgCMCIYaiARIApqIBUgEyASc3EgEnNqQRN3IhIgFSATc3EgE3NqQQN3IhMgEiAVc3EgFXNqQQd3IhUgEyASc3EgEnNqQQt3IhFqIAkgFWogECATaiASIAAoAjwiCWogESAVIBNzcSATc2pBE3ciEiARIBVycSARIBVxcmpBmfOJ1AVqQQN3IhMgEiARcnEgEiARcXJqQZnzidQFakEFdyIRIBMgEnJxIBMgEnFyakGZ84nUBWpBCXciFWogByARaiAPIBNqIBggEmogFSARIBNycSARIBNxcmpBmfOJ1AVqQQ13IhIgFSARcnEgFSARcXJqQZnzidQFakEDdyIRIBIgFXJxIBIgFXFyakGZ84nUBWpBBXciEyARIBJycSARIBJxcmpBmfOJ1AVqQQl3IhVqIAggE2ogDiARaiAXIBJqIBUgEyARcnEgEyARcXJqQZnzidQFakENdyIRIBUgE3JxIBUgE3FyakGZ84nUBWpBA3ciEiARIBVycSARIBVxcmpBmfOJ1AVqQQV3IhMgEiARcnEgEiARcXJqQZnzidQFakEJdyIVaiAGIBNqIBQgEmogFiARaiAVIBMgEnJxIBMgEnFyakGZ84nUBWpBDXciESAVIBNycSAVIBNxcmpBmfOJ1AVqQQN3IhIgESAVcnEgESAVcXJqQZnzidQFakEFdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBCXciFWogECASaiAJIBFqIBUgEyAScnEgEyAScXJqQZnzidQFakENdyIGIBVzIhIgE3NqQaHX5/YGakEDdyIRIAZzIA0gE2ogEiARc2pBodfn9gZqQQl3IhJzakGh1+f2BmpBC3ciE2ogDiARaiATIBJzIBggBmogEiARcyATc2pBodfn9gZqQQ93IhFzakGh1+f2BmpBA3ciFSARcyALIBJqIBEgE3MgFXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhNqIA8gFWogEyAScyAWIBFqIBIgFXMgE3NqQaHX5/YGakEPdyIRc2pBodfn9gZqQQN3IhUgEXMgDCASaiARIBNzIBVzakGh1+f2BmpBCXciEnNqQaHX5/YGakELdyITaiAUIBVqIBMgEnMgFyARaiASIBVzIBNzakGh1+f2BmpBD3ciEXNqQaHX5/YGakEDdyIVIBFzIAogEmogESATcyAVc2pBodfn9gZqQQl3IhJzakGh1+f2BmpBC3ciEyADaiEDIAkgEWogEiAVcyATc2pBodfn9gZqQQ93IARqIQQgEiACaiECIBUgBWohBSAAQcAAaiEAIAFBQGoiAQ0AC0EAIAI2ApSJAUEAIAM2ApCJAUEAIAQ2AoyJAUEAIAU2AoiJASAAC88DAQR/QQAoAoCJAUE/cSIAQZiJAWpBgAE6AAAgAEEBaiEBAkACQAJAAkAgAEE/cyICQQdLDQAgAkUNASABQZiJAWpBADoAACACQQFGDQEgAEGaiQFqQQA6AAAgAkECRg0BIABBm4kBakEAOgAAIAJBA0YNASAAQZyJAWpBADoAACACQQRGDQEgAEGdiQFqQQA6AAAgAkEFRg0BIABBnokBakEAOgAAIAJBBkYNASAAQZ+JAWpBADoAAAwBCyACQQhGDQJBNiAAayEDAkAgAkEDcSIADQAgAyECDAILQQAgAGshAkEAIQADQCAAQc+JAWpBADoAACACIABBf2oiAEcNAAsgAyAAaiECDAELQZiJAUHAABADGkEAIQFBNyEDQTchAgsgA0EDSQ0AIAFBgIkBaiEAQX8hAQNAIAAgAmpBFWpBADYAACAAQXxqIQAgAiABQQRqIgFHDQALC0EAQQAoAoSJATYC1IkBQQBBACgCgIkBIgBBFXY6ANOJAUEAIABBDXY6ANKJAUEAIABBBXY6ANGJAUEAIABBA3QiADoA0IkBQQAgADYCgIkBQZiJAUHAABADGkEAQQApAoiJATcDgAlBAEEAKQKQiQE3A4gJCwYAQYCJAQszAEEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQEgABACEAQLCwsBAEGACAsEmAAAAA==\";\nvar hash$e = \"74909c24\";\nvar wasmJson$e = {\n\tname: name$e,\n\tdata: data$e,\n\thash: hash$e\n};\n\nconst mutex$f = new Mutex();\nlet wasmCache$f = null;\n/**\n * Calculates MD4 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction md4(data) {\n if (wasmCache$f === null) {\n return lockedCreate(mutex$f, wasmJson$e, 16)\n .then((wasm) => {\n wasmCache$f = wasm;\n return wasmCache$f.calculate(data);\n });\n }\n try {\n const hash = wasmCache$f.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new MD4 hash instance\n */\nfunction createMD4() {\n return WASMInterface(wasmJson$e, 16).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 16,\n };\n return obj;\n });\n}\n\nvar name$d = \"md5\";\nvar data$d = \"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\";\nvar hash$d = \"42fa4d29\";\nvar wasmJson$d = {\n\tname: name$d,\n\tdata: data$d,\n\thash: hash$d\n};\n\nconst mutex$e = new Mutex();\nlet wasmCache$e = null;\n/**\n * Calculates MD5 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction md5(data) {\n if (wasmCache$e === null) {\n return lockedCreate(mutex$e, wasmJson$d, 16)\n .then((wasm) => {\n wasmCache$e = wasm;\n return wasmCache$e.calculate(data);\n });\n }\n try {\n const hash = wasmCache$e.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new MD5 hash instance\n */\nfunction createMD5() {\n return WASMInterface(wasmJson$d, 16).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 16,\n };\n return obj;\n });\n}\n\nvar name$c = \"sha1\";\nvar data$c = \"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\";\nvar hash$c = \"6b530c24\";\nvar wasmJson$c = {\n\tname: name$c,\n\tdata: data$c,\n\thash: hash$c\n};\n\nconst mutex$d = new Mutex();\nlet wasmCache$d = null;\n/**\n * Calculates SHA-1 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha1(data) {\n if (wasmCache$d === null) {\n return lockedCreate(mutex$d, wasmJson$c, 20)\n .then((wasm) => {\n wasmCache$d = wasm;\n return wasmCache$d.calculate(data);\n });\n }\n try {\n const hash = wasmCache$d.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-1 hash instance\n */\nfunction createSHA1() {\n return WASMInterface(wasmJson$c, 20).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 20,\n };\n return obj;\n });\n}\n\nvar name$b = \"sha3\";\nvar data$b = \"AGFzbQEAAAABFARgAAF/YAF/AGACf38AYAN/f38AAwgHAAEBAgEAAwUEAQECAgYOAn8BQZCNBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKqBwHBQBBgAoL1wMAQQBCADcDgI0BQQBCADcD+IwBQQBCADcD8IwBQQBCADcD6IwBQQBCADcD4IwBQQBCADcD2IwBQQBCADcD0IwBQQBCADcDyIwBQQBCADcDwIwBQQBCADcDuIwBQQBCADcDsIwBQQBCADcDqIwBQQBCADcDoIwBQQBCADcDmIwBQQBCADcDkIwBQQBCADcDiIwBQQBCADcDgIwBQQBCADcD+IsBQQBCADcD8IsBQQBCADcD6IsBQQBCADcD4IsBQQBCADcD2IsBQQBCADcD0IsBQQBCADcDyIsBQQBCADcDwIsBQQBCADcDuIsBQQBCADcDsIsBQQBCADcDqIsBQQBCADcDoIsBQQBCADcDmIsBQQBCADcDkIsBQQBCADcDiIsBQQBCADcDgIsBQQBCADcD+IoBQQBCADcD8IoBQQBCADcD6IoBQQBCADcD4IoBQQBCADcD2IoBQQBCADcD0IoBQQBCADcDyIoBQQBCADcDwIoBQQBCADcDuIoBQQBCADcDsIoBQQBCADcDqIoBQQBCADcDoIoBQQBCADcDmIoBQQBCADcDkIoBQQBCADcDiIoBQQBCADcDgIoBQQBBwAwgAEEBdGtBA3Y2AoyNAUEAQQA2AoiNAQuMAwEIfwJAQQAoAoiNASIBQQBIDQBBACABIABqQQAoAoyNASICcDYCiI0BAkACQCABDQBBgAohAwwBCwJAIAIgAWsiBCAAIAQgAEkbIgNFDQAgA0EDcSEFQQAhBgJAIANBBEkNACABQYCKAWohByADQXxxIQhBACEGA0AgByAGaiIDQcgBaiAGQYAKai0AADoAACADQckBaiAGQYEKai0AADoAACADQcoBaiAGQYIKai0AADoAACADQcsBaiAGQYMKai0AADoAACAIIAZBBGoiBkcNAAsLIAVFDQAgAUHIiwFqIQMDQCADIAZqIAZBgApqLQAAOgAAIAZBAWohBiAFQX9qIgUNAAsLIAQgAEsNAUHIiwEgAhADIAAgBGshACAEQYAKaiEDCwJAIAAgAkkNAANAIAMgAhADIAMgAmohAyAAIAJrIgAgAk8NAAsLIABFDQBBACECQcgBIQYDQCAGQYCKAWogAyAGakG4fmotAAA6AAAgBkEBaiEGIAAgAkEBaiICQf8BcUsNAAsLC+QLAS1+IAApA0AhAkEAKQPAigEhAyAAKQM4IQRBACkDuIoBIQUgACkDMCEGQQApA7CKASEHIAApAyghCEEAKQOoigEhCSAAKQMgIQpBACkDoIoBIQsgACkDGCEMQQApA5iKASENIAApAxAhDkEAKQOQigEhDyAAKQMIIRBBACkDiIoBIREgACkDACESQQApA4CKASETQQApA8iKASEUAkACQCABQcgASw0AQQApA9CKASEVQQApA+CKASEWQQApA9iKASEXDAELQQApA+CKASAAKQNghSEWQQApA9iKASAAKQNYhSEXQQApA9CKASAAKQNQhSEVIBQgACkDSIUhFCABQekASQ0AQQBBACkD6IoBIAApA2iFNwPoigFBAEEAKQPwigEgACkDcIU3A/CKAUEAQQApA/iKASAAKQN4hTcD+IoBQQBBACkDgIsBIAApA4ABhTcDgIsBIAFBiQFJDQBBAEEAKQOIiwEgACkDiAGFNwOIiwELIAMgAoUhGCAFIASFIRkgByAGhSEHIAkgCIUhCCALIAqFIRogDSAMhSEJIA8gDoUhCiARIBCFIQsgEyAShSEMQQApA7iLASESQQApA5CLASETQQApA+iKASEbQQApA6CLASEcQQApA/iKASENQQApA7CLASEdQQApA4iLASEOQQApA8CLASEPQQApA5iLASEeQQApA/CKASEQQQApA6iLASERQQApA4CLASEfQcB+IQADQCAaIAcgC4UgF4UgH4UgEYVCAYmFIBSFIBCFIB6FIA+FIQIgDCAZIAqFIBaFIA6FIB2FQgGJhSAIhSAVhSANhSAchSIDIAeFISAgCSAIIAyFIBWFIA2FIByFQgGJhSAYhSAbhSAThSAShSIEIA+FISEgGCAKIBQgGoUgEIUgHoUgD4VCAYmFIBmFIBaFIA6FIB2FIgWFQjeJIiIgCyAYIAmFIBuFIBOFIBKFQgGJhSAHhSAXhSAfhSARhSIGIAqFQj6JIiNCf4WDIAMgEYVCAokiJIUhDyANIAKFQimJIiUgBCAQhUIniSImQn+FgyAihSERIBIgBYVCOIkiEiAGIA6FQg+JIidCf4WDIAMgF4VCCokiKIUhDiAEIBqFQhuJIikgKCAIIAKFQiSJIipCf4WDhSENIAYgGYVCBokiKyADIAuFQgGJIixCf4WDIBwgAoVCEokiLYUhECArIAQgHoVCCIkiLiAbIAWFQhmJIhtCf4WDhSEXIAYgHYVCPYkiGSAEIBSFQhSJIgQgCSAFhUIciSIIQn+Fg4UhFCAIIBlCf4WDIAMgH4VCLYkiA4UhGCAZIANCf4WDIBUgAoVCA4kiCYUhGSAEIAMgCUJ/hYOFIQcgCSAEQn+FgyAIhSEIIAwgAoUiAiAhQg6JIgNCf4WDIBMgBYVCFYkiBIUhCSAGIBaFQiuJIgUgAyAEQn+Fg4UhCiAEIAVCf4WDICBCLIkiBIUhCyAAQdAJaikDACAFIARCf4WDhSAChSEMICcgKEJ/hYMgKoUiBSEfIAMgBCACQn+Fg4UiAiEaICogKUJ/hYMgEoUiAyEeIC0gLkJ/hYMgG4UiBCEWICYgJCAlQn+Fg4UiBiEdIBsgK0J/hYMgLIUiKCEVICMgJiAiQn+Fg4UiIiEcIC4gLCAtQn+Fg4UiJiEbICcgKSASQn+Fg4UiJyETICMgJEJ/hYMgJYUiIyESIABBCGoiAA0AC0EAIBE3A6iLAUEAIAU3A4CLAUEAIBc3A9iKAUEAIAc3A7CKAUEAIAs3A4iKAUEAIA83A8CLAUEAIAM3A5iLAUEAIBA3A/CKAUEAIBQ3A8iKAUEAIAI3A6CKAUEAIAY3A7CLAUEAIA43A4iLAUEAIAQ3A+CKAUEAIBk3A7iKAUEAIAo3A5CKAUEAICI3A6CLAUEAIA03A/iKAUEAICg3A9CKAUEAIAg3A6iKAUEAIAw3A4CKAUEAICM3A7iLAUEAICc3A5CLAUEAICY3A+iKAUEAIBg3A8CKAUEAIAk3A5iKAQv4AgEFf0HkAEEAKAKMjQEiAUEBdmshAgJAQQAoAoiNASIDQQBIDQAgASEEAkAgASADRg0AIANByIsBaiEFQQAhAwNAIAUgA2pBADoAACADQQFqIgMgAUEAKAKIjQEiBGtJDQALCyAEQciLAWoiAyADLQAAIAByOgAAIAFBx4sBaiIDIAMtAABBgAFyOgAAQciLASABEANBAEGAgICAeDYCiI0BCwJAIAJBBEkNACACQQJ2IgNBA3EhBUEAIQQCQCADQX9qQQNJDQAgA0H8////A3EhAUEAIQNBACEEA0AgA0GACmogA0GAigFqKAIANgIAIANBhApqIANBhIoBaigCADYCACADQYgKaiADQYiKAWooAgA2AgAgA0GMCmogA0GMigFqKAIANgIAIANBEGohAyABIARBBGoiBEcNAAsLIAVFDQAgBUECdCEBIARBAnQhAwNAIANBgApqIANBgIoBaigCADYCACADQQRqIQMgAUF8aiIBDQALCwsGAEGAigEL0QYBA39BAEIANwOAjQFBAEIANwP4jAFBAEIANwPwjAFBAEIANwPojAFBAEIANwPgjAFBAEIANwPYjAFBAEIANwPQjAFBAEIANwPIjAFBAEIANwPAjAFBAEIANwO4jAFBAEIANwOwjAFBAEIANwOojAFBAEIANwOgjAFBAEIANwOYjAFBAEIANwOQjAFBAEIANwOIjAFBAEIANwOAjAFBAEIANwP4iwFBAEIANwPwiwFBAEIANwPoiwFBAEIANwPgiwFBAEIANwPYiwFBAEIANwPQiwFBAEIANwPIiwFBAEIANwPAiwFBAEIANwO4iwFBAEIANwOwiwFBAEIANwOoiwFBAEIANwOgiwFBAEIANwOYiwFBAEIANwOQiwFBAEIANwOIiwFBAEIANwOAiwFBAEIANwP4igFBAEIANwPwigFBAEIANwPoigFBAEIANwPgigFBAEIANwPYigFBAEIANwPQigFBAEIANwPIigFBAEIANwPAigFBAEIANwO4igFBAEIANwOwigFBAEIANwOoigFBAEIANwOgigFBAEIANwOYigFBAEIANwOQigFBAEIANwOIigFBAEIANwOAigFBAEHADCABQQF0a0EDdjYCjI0BQQBBADYCiI0BIAAQAkHkAEEAKAKMjQEiAEEBdmshAwJAQQAoAoiNASIBQQBIDQAgACEEAkAgACABRg0AIAFByIsBaiEFQQAhAQNAIAUgAWpBADoAACABQQFqIgEgAEEAKAKIjQEiBGtJDQALCyAEQciLAWoiASABLQAAIAJyOgAAIABBx4sBaiIBIAEtAABBgAFyOgAAQciLASAAEANBAEGAgICAeDYCiI0BCwJAIANBBEkNACADQQJ2IgFBA3EhBUEAIQQCQCABQX9qQQNJDQAgAUH8////A3EhAEEAIQFBACEEA0AgAUGACmogAUGAigFqKAIANgIAIAFBhApqIAFBhIoBaigCADYCACABQYgKaiABQYiKAWooAgA2AgAgAUGMCmogAUGMigFqKAIANgIAIAFBEGohASAAIARBBGoiBEcNAAsLIAVFDQAgBUECdCEAIARBAnQhAQNAIAFBgApqIAFBgIoBaigCADYCACABQQRqIQEgAEF8aiIADQALCwsL2AEBAEGACAvQAZABAAAAAAAAAAAAAAAAAAABAAAAAAAAAIKAAAAAAAAAioAAAAAAAIAAgACAAAAAgIuAAAAAAAAAAQAAgAAAAACBgACAAAAAgAmAAAAAAACAigAAAAAAAACIAAAAAAAAAAmAAIAAAAAACgAAgAAAAACLgACAAAAAAIsAAAAAAACAiYAAAAAAAIADgAAAAAAAgAKAAAAAAACAgAAAAAAAAIAKgAAAAAAAAAoAAIAAAACAgYAAgAAAAICAgAAAAAAAgAEAAIAAAAAACIAAgAAAAIA=\";\nvar hash$b = \"f2f6f5b2\";\nvar wasmJson$b = {\n\tname: name$b,\n\tdata: data$b,\n\thash: hash$b\n};\n\nconst mutex$c = new Mutex();\nlet wasmCache$c = null;\nfunction validateBits$1(bits) {\n if (![224, 256, 384, 512].includes(bits)) {\n return new Error('Invalid variant! Valid values: 224, 256, 384, 512');\n }\n return null;\n}\n/**\n * Calculates SHA-3 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha3(data, bits = 512) {\n if (validateBits$1(bits)) {\n return Promise.reject(validateBits$1(bits));\n }\n const hashLength = bits / 8;\n if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) {\n return lockedCreate(mutex$c, wasmJson$b, hashLength)\n .then((wasm) => {\n wasmCache$c = wasm;\n return wasmCache$c.calculate(data, bits, 0x06);\n });\n }\n try {\n const hash = wasmCache$c.calculate(data, bits, 0x06);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-3 hash instance\n * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n */\nfunction createSHA3(bits = 512) {\n if (validateBits$1(bits)) {\n return Promise.reject(validateBits$1(bits));\n }\n const outputSize = bits / 8;\n return WASMInterface(wasmJson$b, outputSize).then((wasm) => {\n wasm.init(bits);\n const obj = {\n init: () => { wasm.init(bits); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType, 0x06),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 200 - 2 * outputSize,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nconst mutex$b = new Mutex();\nlet wasmCache$b = null;\nfunction validateBits(bits) {\n if (![224, 256, 384, 512].includes(bits)) {\n return new Error('Invalid variant! Valid values: 224, 256, 384, 512');\n }\n return null;\n}\n/**\n * Calculates Keccak hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n * @returns Computed hash as a hexadecimal string\n */\nfunction keccak(data, bits = 512) {\n if (validateBits(bits)) {\n return Promise.reject(validateBits(bits));\n }\n const hashLength = bits / 8;\n if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) {\n return lockedCreate(mutex$b, wasmJson$b, hashLength)\n .then((wasm) => {\n wasmCache$b = wasm;\n return wasmCache$b.calculate(data, bits, 0x01);\n });\n }\n try {\n const hash = wasmCache$b.calculate(data, bits, 0x01);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new Keccak hash instance\n * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n */\nfunction createKeccak(bits = 512) {\n if (validateBits(bits)) {\n return Promise.reject(validateBits(bits));\n }\n const outputSize = bits / 8;\n return WASMInterface(wasmJson$b, outputSize).then((wasm) => {\n wasm.init(bits);\n const obj = {\n init: () => { wasm.init(bits); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType, 0x01),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 200 - 2 * outputSize,\n digestSize: outputSize,\n };\n return obj;\n });\n}\n\nvar name$a = \"sha256\";\nvar data$a = \"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c2pBx6KerX1qIhkgASADcyACcSABIANxcyABQR53IAFBE3dzIAFBCndzaiAaaiICaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakHRxqk2aiIaIAIgAXMgA3EgAiABcXMgAkEedyACQRN3cyACQQp3c2ogGGoiA2oiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pB59KkoQFqIhggAyACcyABcSADIAJxcyADQR53IANBE3dzIANBCndzaiAUaiIBaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGFldy9AmoiFCABIANzIAJxIAEgA3FzIAFBHncgAUETd3MgAUEKd3NqIBdqIgJqIhMgI2ogJiASaiAiIBFqICUgCWogEyASIBFzcSARc2ogE0EadyATQRV3cyATQQd3c2pBuMLs8AJqIhcgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAZaiIDaiIJIBMgEnNxIBJzaiAJQRp3IAlBFXdzIAlBB3dzakH827HpBGoiGSADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBpqIgFqIhEgCSATc3EgE3NqIBFBGncgEUEVd3MgEUEHd3NqQZOa4JkFaiIaIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGGoiAmoiEiARIAlzcSAJc2ogEkEadyASQRV3cyASQQd3c2pB1OapqAZqIhggAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAUaiIDaiITaiAoIBJqICQgEWogJyAJaiATIBIgEXNxIBFzaiATQRp3IBNBFXdzIBNBB3dzakG7laizB2oiFCADIAJzIAFxIAMgAnFzIANBHncgA0ETd3MgA0EKd3NqIBdqIgFqIgkgEyASc3EgEnNqIAlBGncgCUEVd3MgCUEHd3NqQa6Si454aiIXIAEgA3MgAnEgASADcXMgAUEedyABQRN3cyABQQp3c2ogGWoiAmoiESAJIBNzcSATc2ogEUEadyARQRV3cyARQQd3c2pBhdnIk3lqIhkgAiABcyADcSACIAFxcyACQR53IAJBE3dzIAJBCndzaiAaaiIDaiISIBEgCXNxIAlzaiASQRp3IBJBFXdzIBJBB3dzakGh0f+VemoiGiADIAJz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\";\nvar hash$a = \"64f06674\";\nvar wasmJson$a = {\n\tname: name$a,\n\tdata: data$a,\n\thash: hash$a\n};\n\nconst mutex$a = new Mutex();\nlet wasmCache$a = null;\n/**\n * Calculates SHA-2 (SHA-224) hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha224(data) {\n if (wasmCache$a === null) {\n return lockedCreate(mutex$a, wasmJson$a, 28)\n .then((wasm) => {\n wasmCache$a = wasm;\n return wasmCache$a.calculate(data, 224);\n });\n }\n try {\n const hash = wasmCache$a.calculate(data, 224);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-2 (SHA-224) hash instance\n */\nfunction createSHA224() {\n return WASMInterface(wasmJson$a, 28).then((wasm) => {\n wasm.init(224);\n const obj = {\n init: () => { wasm.init(224); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 28,\n };\n return obj;\n });\n}\n\nconst mutex$9 = new Mutex();\nlet wasmCache$9 = null;\n/**\n * Calculates SHA-2 (SHA-256) hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha256(data) {\n if (wasmCache$9 === null) {\n return lockedCreate(mutex$9, wasmJson$a, 32)\n .then((wasm) => {\n wasmCache$9 = wasm;\n return wasmCache$9.calculate(data, 256);\n });\n }\n try {\n const hash = wasmCache$9.calculate(data, 256);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-2 (SHA-256) hash instance\n */\nfunction createSHA256() {\n return WASMInterface(wasmJson$a, 32).then((wasm) => {\n wasm.init(256);\n const obj = {\n init: () => { wasm.init(256); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 32,\n };\n return obj;\n });\n}\n\nvar name$9 = \"sha512\";\nvar data$9 = \"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\";\nvar hash$9 = \"cdd57f6a\";\nvar wasmJson$9 = {\n\tname: name$9,\n\tdata: data$9,\n\thash: hash$9\n};\n\nconst mutex$8 = new Mutex();\nlet wasmCache$8 = null;\n/**\n * Calculates SHA-2 (SHA-384) hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha384(data) {\n if (wasmCache$8 === null) {\n return lockedCreate(mutex$8, wasmJson$9, 48)\n .then((wasm) => {\n wasmCache$8 = wasm;\n return wasmCache$8.calculate(data, 384);\n });\n }\n try {\n const hash = wasmCache$8.calculate(data, 384);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-2 (SHA-384) hash instance\n */\nfunction createSHA384() {\n return WASMInterface(wasmJson$9, 48).then((wasm) => {\n wasm.init(384);\n const obj = {\n init: () => { wasm.init(384); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 128,\n digestSize: 48,\n };\n return obj;\n });\n}\n\nconst mutex$7 = new Mutex();\nlet wasmCache$7 = null;\n/**\n * Calculates SHA-2 (SHA-512) hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sha512(data) {\n if (wasmCache$7 === null) {\n return lockedCreate(mutex$7, wasmJson$9, 64)\n .then((wasm) => {\n wasmCache$7 = wasm;\n return wasmCache$7.calculate(data, 512);\n });\n }\n try {\n const hash = wasmCache$7.calculate(data, 512);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SHA-2 (SHA-512) hash instance\n */\nfunction createSHA512() {\n return WASMInterface(wasmJson$9, 64).then((wasm) => {\n wasm.init(512);\n const obj = {\n init: () => { wasm.init(512); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 128,\n digestSize: 64,\n };\n return obj;\n });\n}\n\nvar name$8 = \"xxhash32\";\nvar data$8 = \"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\";\nvar hash$8 = \"9e3a00cd\";\nvar wasmJson$8 = {\n\tname: name$8,\n\tdata: data$8,\n\thash: hash$8\n};\n\nconst mutex$6 = new Mutex();\nlet wasmCache$6 = null;\nfunction validateSeed$3(seed) {\n if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n return new Error('Seed must be a valid 32-bit long unsigned integer.');\n }\n return null;\n}\n/**\n * Calculates xxHash32 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)\n * @returns Computed hash as a hexadecimal string\n */\nfunction xxhash32(data, seed = 0) {\n if (validateSeed$3(seed)) {\n return Promise.reject(validateSeed$3(seed));\n }\n if (wasmCache$6 === null) {\n return lockedCreate(mutex$6, wasmJson$8, 4)\n .then((wasm) => {\n wasmCache$6 = wasm;\n return wasmCache$6.calculate(data, seed);\n });\n }\n try {\n const hash = wasmCache$6.calculate(data, seed);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new xxHash32 hash instance\n * @param data Input data (string, Buffer or TypedArray)\n * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)\n */\nfunction createXXHash32(seed = 0) {\n if (validateSeed$3(seed)) {\n return Promise.reject(validateSeed$3(seed));\n }\n return WASMInterface(wasmJson$8, 4).then((wasm) => {\n wasm.init(seed);\n const obj = {\n init: () => { wasm.init(seed); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 16,\n digestSize: 4,\n };\n return obj;\n });\n}\n\nvar name$7 = \"xxhash64\";\nvar data$7 = \"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\";\nvar hash$7 = \"dc61b4e7\";\nvar wasmJson$7 = {\n\tname: name$7,\n\tdata: data$7,\n\thash: hash$7\n};\n\nconst mutex$5 = new Mutex();\nlet wasmCache$5 = null;\nconst seedBuffer$2 = new ArrayBuffer(8);\nfunction validateSeed$2(seed) {\n if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n }\n return null;\n}\nfunction writeSeed$2(arr, low, high) {\n // write in little-endian format\n const buffer = new DataView(arr);\n buffer.setUint32(0, low, true);\n buffer.setUint32(4, high, true);\n}\n/**\n * Calculates xxHash64 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @returns Computed hash as a hexadecimal string\n */\nfunction xxhash64(data, seedLow = 0, seedHigh = 0) {\n if (validateSeed$2(seedLow)) {\n return Promise.reject(validateSeed$2(seedLow));\n }\n if (validateSeed$2(seedHigh)) {\n return Promise.reject(validateSeed$2(seedHigh));\n }\n if (wasmCache$5 === null) {\n return lockedCreate(mutex$5, wasmJson$7, 8)\n .then((wasm) => {\n wasmCache$5 = wasm;\n writeSeed$2(seedBuffer$2, seedLow, seedHigh);\n wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));\n return wasmCache$5.calculate(data);\n });\n }\n try {\n writeSeed$2(seedBuffer$2, seedLow, seedHigh);\n wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));\n const hash = wasmCache$5.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new xxHash64 hash instance\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n */\nfunction createXXHash64(seedLow = 0, seedHigh = 0) {\n if (validateSeed$2(seedLow)) {\n return Promise.reject(validateSeed$2(seedLow));\n }\n if (validateSeed$2(seedHigh)) {\n return Promise.reject(validateSeed$2(seedHigh));\n }\n return WASMInterface(wasmJson$7, 8).then((wasm) => {\n const instanceBuffer = new ArrayBuffer(8);\n writeSeed$2(instanceBuffer, seedLow, seedHigh);\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n const obj = {\n init: () => {\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 32,\n digestSize: 8,\n };\n return obj;\n });\n}\n\nvar name$6 = \"xxhash3\";\nvar data$6 = \"AGFzbQEAAAABNAhgAAF/YAR/f39/AGAHf39/f39/fwBgBH9+fn4BfmAEf39/fgF+YAN/f34BfmAAAGABfwADDg0AAQIDBAUFBQYHBgAGBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAIC0hhc2hfVXBkYXRlAAkKSGFzaF9GaW5hbAAKDUhhc2hfR2V0U3RhdGUACw5IYXNoX0NhbGN1bGF0ZQAMClNUQVRFX1NJWkUDAQrNQg0FAEGACgvvAwEQfgJAIANFDQAgAUE4aiEBIAJBOGohAiAAKQMwIQQgACkDOCEFIAApAyAhBiAAKQMoIQcgACkDECEIIAApAxghCSAAKQMAIQogACkDCCELA0AgByABQWhqKQMAIgx8IAJBcGopAwAgAUFwaikDACINhSIHQiCIIAdC/////w+DfnwhByAJIAFBWGopAwAiDnwgAkFgaikDACABQWBqKQMAIg+FIglCIIggCUL/////D4N+fCEJIAsgAUFIaikDACIQfCACQVBqKQMAIAFBUGopAwAiEYUiC0IgiCALQv////8Pg358IQsgAkF4aikDACABQXhqKQMAIhKFIhNCIIggE0L/////D4N+IAR8IAEpAwAiE3whBCACQWhqKQMAIAyFIgxCIIggDEL/////D4N+IAZ8IA18IQYgAkFYaikDACAOhSIMQiCIIAxC/////w+DfiAIfCAPfCEIIAJBSGopAwAgEIUiDEIgiCAMQv////8Pg34gCnwgEXwhCiAFIBJ8IAIpAwAgE4UiBUIgiCAFQv////8Pg358IQUgAUHAAGohASACQQhqIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCACIAEoAgAiB2siAiAESw0AIAAgAyAFIAdBA3RqIAIQASAAIAUgBmoiBykDACAAKQMAIghCL4iFIAiFQrHz3fEJfjcDACAAIAcpAwggACkDCCIIQi+IhSAIhUKx893xCX43AwggACAHKQMQIAApAxAiCEIviIUgCIVCsfPd8Ql+NwMQIAAgBykDGCAAKQMYIghCL4iFIAiFQrHz3fEJfjcDGCAAIAcpAyAgACkDICIIQi+IhSAIhUKx893xCX43AyAgACAHKQMoIAApAygiCEIviIUgCIVCsfPd8Ql+NwMoIAAgBykDMCAAKQMwIghCL4iFIAiFQrHz3fEJfjcDMCAAIAcpAzggACkDOCIIQi+IhSAIhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAuFAQEBfyACIAGFIAOnIgRBGHQgBEGA/gNxQQh0ciAEQQh2QYD+A3EgBEEYdnJyrUIghiADhX1BADUCgIwBQiCGIABB/IsBajUCAISFIgNCMYkgA0IYiYUgA4VCpb7j9NGMh9mff34iA0IjiCAArXwgA4VCpb7j9NGMh9mff34iA0IciCADhQtnACACIAFzrSADfCIDQiGIQQAtAICMAUEQdCAAQQh0ciAAQQF2QYCMAWotAABBGHRyIABB/4sBai0AAHKthSADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC4kDAQR+AkAgAEEJSQ0AQQApA4CMASABKQMgIAEpAxiFIAJ8hSIDQjiGIANCgP4Dg0IohoQgA0KAgPwHg0IYhiADQoCAgPgPg0IIhoSEIANCCIhCgICA+A+DIANCGIhCgID8B4OEIANCKIhCgP4DgyADQjiIhISEIACtfCAAQfiLAWopAwAgASkDMCABKQMohSACfYUiAnwgAkL/////D4MiBCADQiCIIgV+IgZC/////w+DIAJCIIgiAiADQv////8PgyIDfnwgBCADfiIDQiCIfCIEQiCGIANC/////w+DhCAGQiCIIAIgBX58IARCIIh8hXwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4UPCwJAIABBBEkNACAAIAFBCGopAwAgAUEQaikDACACEAMPCwJAIABFDQAgACABKAIAIAFBBGooAgAgAhAEDwsgASkDOCABKQNAhSAChSIDQiGIIAOFQs/W077Sx6vZQn4iA0IdiCADhUL5893xmfaZqxZ+IgNCIIggA4UL3ggBBn4gAK1Ch5Wvr5i23puef34hAwJAIABBIUkNAAJAIABBwQBJDQACQCAAQeEASQ0AIAEpA2ggAn1BACkDuIwBhSIEQv////8PgyIFIAEpA2AgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSADfCABKQN4IAJ9IABByIsBaikDAIUiA0L/////D4MiBCABKQNwIAJ8IABBwIsBaikDAIUiBUIgiCIGfiIHQv////8PgyADQiCIIgMgBUL/////D4MiBX58IAQgBX4iBEIgiHwiBUIghiAEQv////8Pg4QgB0IgiCADIAZ+fCAFQiCIfIV8IQMLIAEpA0ggAn1BACkDqIwBhSIEQv////8PgyIFIAEpA0AgAnxBACkDoIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSADfCABKQNYIAJ9IABB2IsBaikDAIUiA0L/////D4MiBCABKQNQIAJ8IABB0IsBaikDAIUiBUIgiCIGfiIHQv////8PgyADQiCIIgMgBUL/////D4MiBX58IAQgBX4iBEIgiHwiBUIghiAEQv////8Pg4QgB0IgiCADIAZ+fCAFQiCIfIV8IQMLIAEpAyggAn1BACkDmIwBhSIEQv////8PgyIFIAEpAyAgAnxBACkDkIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSADfCABKQM4IAJ9IABB6IsBaikDAIUiA0L/////D4MiBCABKQMwIAJ8IABB4IsBaikDAIUiBUIgiCIGfiIHQv////8PgyADQiCIIgMgBUL/////D4MiBX58IAQgBX4iBEIgiHwiBUIghiAEQv////8Pg4QgB0IgiCADIAZ+fCAFQiCIfIV8IQMLIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSADfCABKQMYIAJ9IABB+IsBaikDAIUiA0L/////D4MiBCABKQMQIAJ8IABB8IsBaikDAIUiAkIgiCIFfiIGQv////8PgyADQiCIIgMgAkL/////D4MiAn58IAQgAn4iAkIgiHwiBEIghiACQv////8Pg4QgBkIgiCADIAV+fCAEQiCIfIV8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC/wKBAF/BX4CfwF+QQAhAyABKQN4IAJ9QQApA/iMAYUiBEL/////D4MiBSABKQNwIAJ8QQApA/CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDaCACfUEAKQPojAGFIgRC/////w+DIgUgASkDYCACfEEAKQPgjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA1ggAn1BACkD2IwBhSIEQv////8PgyIFIAEpA1AgAnxBACkD0IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNIIAJ9QQApA8iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA8CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDOCACfUEAKQO4jAGFIgRC/////w+DIgUgASkDMCACfEEAKQOwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAyggAn1BACkDqIwBhSIEQv////8PgyIFIAEpAyAgAnxBACkDoIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMYIAJ9QQApA5iM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ABshAwJAAkBBACkDkI4BIgRC8QFUDQAgAkEAKQOAigE3AwAgAkEAKQOIigE3AwggAkEAKQOQigE3AxAgAkEAKQOYigE3AxggAkEAKQOgigE3AyAgAkEAKQOoigE3AyggAkEAKQOwigEiBDcDMCACQQApA7iKASIFNwM4AkACQEEAKAKAjgEiBkHAAEkNACACQQAoAoiOATYCQCACIAJBwABqQQAoApiOAUGAjAEgBkF/akEGdiADQQAoApyOASIAEAIgAyAAaiIAQXlqKQMAIQcgAEEJaikDACEIIABBGWopAwAhCSAGQcCLAWopAwAhBCAAQQFqKQMAIQogBkHIiwFqKQMAIQUgBkHQiwFqKQMAIQsgAEERaikDACEMIAZB2IsBaikDACENIAZB4IsBaikDACEOIABBIWopAwAhDyAGQeiLAWopAwAhECAAQSlqKQMAIREgAikDACESIAIpAxAhEyACKQMgIRQgAikDCCEVIAIpAxghFiACKQMoIRcgAikDMCEYIAIgAikDOCAGQfCLAWopAwAiGXwgAEExaikDACAGQfiLAWopAwAiGoUiG0IgiCAbQv////8Pg358NwM4IAIgGiAYIBEgGYUiEUIgiCARQv////8Pg358fDcDMCAXIA58IA8gEIUiD0IgiCAPQv////8Pg358IQ8gFiALfCAMIA2FIgxCIIggDEL/////D4N+fCEMIBUgBHwgCiAFhSIKQiCIIApC/////w+DfnwhCiAQIBQgCSAOhSIOQiCIIA5C/////w+Dfnx8IRAgDSATIAggC4UiC0IgiCALQv////8Pg358fCEIIAUgEiAHIASFIgRCIIggBEL/////D4N+fHwhBwwBCyAGQcCNAWohHEHAACAGayEdIAJBwABqIQACQAJAAkAgBkE4TQ0AIB0hHgwBCwJAAkBBOCAGayIfQQN2QQFqQQdxIh4NACACQcAAaiEAIB0hHgwBCyACQcAAaiEAIB5BA3QiICEeA0AgACAcKQMANwMAIABBCGohACAcQQhqIRwgHkF4aiIeDQALQcAAIAYgIGprIR4LAkAgH0E4SQ0AA0AgACAcKQMANwMAIABBCGogHEEIaikDADcDACAAQRBqIBxBEGopAwA3AwAgAEEYaiAcQRhqKQMANwMAIABBIGogHEEgaikDADcDACAAQShqIBxBKGopAwA3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\";\nvar hash$6 = \"0dca92d1\";\nvar wasmJson$6 = {\n\tname: name$6,\n\tdata: data$6,\n\thash: hash$6\n};\n\nconst mutex$4 = new Mutex();\nlet wasmCache$4 = null;\nconst seedBuffer$1 = new ArrayBuffer(8);\nfunction validateSeed$1(seed) {\n if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n }\n return null;\n}\nfunction writeSeed$1(arr, low, high) {\n // write in little-endian format\n const buffer = new DataView(arr);\n buffer.setUint32(0, low, true);\n buffer.setUint32(4, high, true);\n}\n/**\n * Calculates xxHash3 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @returns Computed hash as a hexadecimal string\n */\nfunction xxhash3(data, seedLow = 0, seedHigh = 0) {\n if (validateSeed$1(seedLow)) {\n return Promise.reject(validateSeed$1(seedLow));\n }\n if (validateSeed$1(seedHigh)) {\n return Promise.reject(validateSeed$1(seedHigh));\n }\n if (wasmCache$4 === null) {\n return lockedCreate(mutex$4, wasmJson$6, 8)\n .then((wasm) => {\n wasmCache$4 = wasm;\n writeSeed$1(seedBuffer$1, seedLow, seedHigh);\n wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));\n return wasmCache$4.calculate(data);\n });\n }\n try {\n writeSeed$1(seedBuffer$1, seedLow, seedHigh);\n wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));\n const hash = wasmCache$4.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new xxHash3 hash instance\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n */\nfunction createXXHash3(seedLow = 0, seedHigh = 0) {\n if (validateSeed$1(seedLow)) {\n return Promise.reject(validateSeed$1(seedLow));\n }\n if (validateSeed$1(seedHigh)) {\n return Promise.reject(validateSeed$1(seedHigh));\n }\n return WASMInterface(wasmJson$6, 8).then((wasm) => {\n const instanceBuffer = new ArrayBuffer(8);\n writeSeed$1(instanceBuffer, seedLow, seedHigh);\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n const obj = {\n init: () => {\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 512,\n digestSize: 8,\n };\n return obj;\n });\n}\n\nvar name$5 = \"xxhash128\";\nvar data$5 = \"AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUFBAEBAgIGDgJ/AUHAjgULfwBBwAkLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAcLSGFzaF9VcGRhdGUACApIYXNoX0ZpbmFsAAkNSGFzaF9HZXRTdGF0ZQAKDkhhc2hfQ2FsY3VsYXRlAAsKU1RBVEVfU0laRQMBCuxNDAUAQYAKC+8DARB+AkAgA0UNACABQThqIQEgAkE4aiECIAApAzAhBCAAKQM4IQUgACkDICEGIAApAyghByAAKQMQIQggACkDGCEJIAApAwAhCiAAKQMIIQsDQCAHIAFBaGopAwAiDHwgAkFwaikDACABQXBqKQMAIg2FIgdCIIggB0L/////D4N+fCEHIAkgAUFYaikDACIOfCACQWBqKQMAIAFBYGopAwAiD4UiCUIgiCAJQv////8Pg358IQkgCyABQUhqKQMAIhB8IAJBUGopAwAgAUFQaikDACIRhSILQiCIIAtC/////w+DfnwhCyACQXhqKQMAIAFBeGopAwAiEoUiE0IgiCATQv////8Pg34gBHwgASkDACITfCEEIAJBaGopAwAgDIUiDEIgiCAMQv////8Pg34gBnwgDXwhBiACQVhqKQMAIA6FIgxCIIggDEL/////D4N+IAh8IA98IQggAkFIaikDACAQhSIMQiCIIAxC/////w+DfiAKfCARfCEKIAUgEnwgAikDACAThSIFQiCIIAVC/////w+DfnwhBSABQcAAaiEBIAJBCGohAiADQX9qIgMNAAsgACAJNwMYIAAgCjcDACAAIAs3AwggACAHNwMoIAAgCDcDECAAIAU3AzggACAGNwMgIAAgBDcDMAsL3gICAX8BfgJAIAIgASgCACIHayICIARLDQAgACADIAUgB0EDdGogAhABIAAgBSAGaiIHKQMAIAApAwAiCEIviIUgCIVCsfPd8Ql+NwMAIAAgBykDCCAAKQMIIghCL4iFIAiFQrHz3fEJfjcDCCAAIAcpAxAgACkDECIIQi+IhSAIhUKx893xCX43AxAgACAHKQMYIAApAxgiCEIviIUgCIVCsfPd8Ql+NwMYIAAgBykDICAAKQMgIghCL4iFIAiFQrHz3fEJfjcDICAAIAcpAyggACkDKCIIQi+IhSAIhUKx893xCX43AyggACAHKQMwIAApAzAiCEIviIUgCIVCsfPd8Ql+NwMwIAAgBykDOCAAKQM4IghCL4iFIAiFQrHz3fEJfjcDOCAAIAMgAkEGdGogBSAEIAJrIgcQASABIAc2AgAPCyAAIAMgBSAHQQN0aiAEEAEgASAHIARqNgIAC+0DAQV+IAEpAzggACkDOIUiA0L/////D4MiBCABKQMwIAApAzCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFIAEpAyggACkDKIUiA0L/////D4MiBCABKQMgIAApAyCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFIAEpAxggACkDGIUiA0L/////D4MiBCABKQMQIAApAxCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFIAEpAwggACkDCIUiA0L/////D4MiBCABKQMAIAApAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFIAJ8fHx8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC7oIAgV+A38CQCABQQlJDQAgACABQfiLAWopAwAiBCACKQM4IAIpAzCFIAN8hSIFQv////8Pg0L3lK+vCH4gBUKAgICAcIN8QQApA4CMASACKQMoIAIpAyCFIAN9hSAEhSIDQiCIIgRCsfPd8Ql+fCAEQoeVr68IfiIEQiCIfCAEQv////8PgyADQv////8PgyIDQrHz3fEJfnwgA0KHla+vCH4iBEIgiHwiBUIgiHwiA0I4hiADQoD+A4NCKIaEIANCgID8B4NCGIYgA0KAgID4D4NCCIaEhCADQgiIQoCAgPgPgyADQhiIQoCA/AeDhCADQiiIQoD+A4MgA0I4iISEhCAEQv////8PgyABQX9qrUI2hoQgBUIghnyFIgRCIIgiBULP1tO+An4iBkL/////D4MgBEL/////D4MiBEK93MqVDH58IARCz9bTvgJ+IgRCIIh8IgdCIIYiCEIliCAIIARC/////w+DhIVC+fPd8ZnymasWfiIEQiCIIASFNwMAIAAgBUK93MqVDH4gA0LP1tO+0ser2UJ+fCAGQiCIfCAHQiCIfCIDQiWIIAOFQvnz3fGZ8pmrFn4iA0IgiCADhTcDCA8LAkAgAUEESQ0AIAAgAikDGCACKQMQhSADpyICQRh0IAJBgP4DcUEIdHIgAkEIdkGA/gNxIAJBGHZycq1CIIYgA4V8IAFB/IsBajUCAEIghkEANQKAjAGEhSIDQiCIIgQgAUECdEGHla+veGqtIgV+IgZCIIggBEKx893xCX58IAZC/////w+DIANC/////w+DIgNCsfPd8Ql+fCADIAV+IgNCIIh8IgRCIIh8IARCIIYgA0L/////D4OEIgRCAYZ8IgNCJYggA4VC+fPd8ZnymasWfiIFQiCIIAWFNwMIIAAgA0IDiCAEhSIDQiOIIAOFQqW+4/TRjIfZn39+IgNCHIggA4U3AwAPCwJAIAFFDQAgACACKAIEIAIoAgBzrSADfCIEQiGIQQAtAICMAUEQdCABQQh0ciIJIAFBAXZBgIwBai0AAEEYdHIiCiABQf+LAWotAAAiAXIiC62FIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwAgACACKAIMIAIoAghzrSADfSIDQiGIIAFBGHQgC0GA/gNxQQh0ciAJQQh2QYD+A3EgCkEYdnJyQQ13rYUgA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDCA8LIAAgAikDUCACKQNYhSADhSIEQiGIIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwggACACKQNAIAIpA0iFIAOFIgNCIYggA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDAAvDCgEKfiABrSIEQoeVr6+Ytt6bnn9+IQUCQAJAIAFBIU8NAEIAIQYMAQtCACEHAkAgAUHBAEkNAEIAIQcCQCABQeEASQ0AIAJB+ABqKQMAIAN9IAFByIsBaikDACIIhSIHQv////8PgyIJIAIpA3AgA3wgAUHAiwFqKQMAIgqFIgtCIIgiDH4iDUIgiCAHQiCIIgcgDH58IA1C/////w+DIAcgC0L/////D4MiC358IAkgC34iB0IgiHwiCUIgiHxBACkDuIwBIgtBACkDsIwBIgx8hSAJQiCGIAdC/////w+DhIUhByACQegAaikDACADfSALhSIJQv////8PgyILIAIpA2AgA3wgDIUiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAsgDH4iC0IgiHwiDEIghiALQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgBXwgCCAKfIUhBQsgAkHYAGopAwAgA30gAUHYiwFqKQMAIgiFIglC/////w+DIgogAikDUCADfCABQdCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDqIwBIglBACkDoIwBIgp8hSEHIAJByABqKQMAIAN9IAmFIglC/////w+DIgwgAikDQCADfCAKhSIKQiCIIg1+IgZC/////w+DIAlCIIgiCSAKQv////8PgyIKfnwgDCAKfiIKQiCIfCIMQiCGIApC/////w+DhCAGQiCIIAkgDX58IAxCIIh8hSAFfCAIIAt8hSEFCyACQThqKQMAIAN9IAFB6IsBaikDACIIhSIJQv////8PgyIKIAIpAzAgA3wgAUHgiwFqKQMAIguFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCAKIAx+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAd8QQApA5iMASIHQQApA5CMASIJfIUhBiACQShqKQMAIAN9IAeFIgdC/////w+DIgogAikDICADfCAJhSIJQiCIIgx+Ig1C/////w+DIAdCIIgiByAJQv////8PgyIJfnwgCiAJfiIJQiCIfCIKQiCGIAlC/////w+DhCANQiCIIAcgDH58IApCIIh8hSAFfCAIIAt8hSEFCyAAIAJBGGopAwAgA30gAUH4iwFqKQMAIgeFIghC/////w+DIgkgAikDECADfCABQfCLAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnxBACkDiIwBIghBACkDgIwBIgl8hSILIAJBCGopAwAgA30gCIUiCEL/////D4MiDCACKQMAIAN8IAmFIglCIIgiDX4iBkL/////D4MgCEIgiCIIIAlC/////w+DIgl+fCAMIAl+IglCIIh8IgxCIIYgCUL/////D4OEIAZCIIggCCANfnwgDEIgiHyFIAV8IAcgCnyFIgV8IgdCJYggB4VC+fPd8ZnymasWfiIHQiCIIAeFNwMAIABCACAFQoeVr6+Ytt6bnn9+IAQgA31Cz9bTvtLHq9lCfnwgC0Lj3MqV/M7y9YV/fnwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4V9NwMIC6EPAwF/FH4Cf0EAIQQgAkH4AGopAwAgA31BACkD+IwBIgWFIgZC/////w+DIgcgAikDcCADfEEAKQPwjAEiCIUiCUIgiCIKfiILQv////8PgyAGQiCIIgYgCUL/////D4MiCX58IAcgCX4iB0IgiHwiCUIghiAHQv////8Pg4QgC0IgiCAGIAp+fCAJQiCIfIUgAkHYAGopAwAgA31BACkD2IwBIgeFIgZC/////w+DIgkgAikDUCADfEEAKQPQjAEiCoUiC0IgiCIMfiINQv////8PgyAGQiCIIgYgC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAGIAx+fCALQiCIfIUgAkE4aikDACADfUEAKQO4jAEiCYUiBkL/////D4MiCyACKQMwIAN8QQApA7CMASIMhSINQiCIIg5+Ig9C/////w+DIAZCIIgiBiANQv////8PgyINfnwgCyANfiILQiCIfCINQiCGIAtC/////w+DhCAPQiCIIAYgDn58IA1CIIh8hSACQRhqKQMAIAN9QQApA5iMASILhSIGQv////8PgyINIAIpAxAgA3xBACkDkIwBIg6FIg9CIIgiEH4iEUL/////D4MgBkIgiCIGIA9C/////w+DIg9+fCANIA9+Ig1CIIh8Ig9CIIYgDUL/////D4OEIBFCIIggBiAQfnwgD0IgiHyFQQApA4iMASINQQApA4CMASIPfIV8QQApA6iMASIQQQApA6CMASIRfIV8QQApA8iMASISQQApA8CMASITfIV8QQApA+iMASIUQQApA+CMASIVfIUiBkIliCAGhUL5893xmfKZqxZ+IgZCIIggBoUhBiACQegAaikDACADfSAUhSIUQv////8PgyIWIAIpA2AgA3wgFYUiFUIgiCIXfiIYQv////8PgyAUQiCIIhQgFUL/////D4MiFX58IBYgFX4iFUIgiHwiFkIghiAVQv////8Pg4QgGEIgiCAUIBd+fCAWQiCIfIUgAkHIAGopAwAgA30gEoUiEkL/////D4MiFCACKQNAIAN8IBOFIhNCIIgiFX4iFkL/////D4MgEkIgiCISIBNC/////w+DIhN+fCAUIBN+IhNCIIh8IhRCIIYgE0L/////D4OEIBZCIIggEiAVfnwgFEIgiHyFIAJBKGopAwAgA30gEIUiEEL/////D4MiEiACKQMgIAN8IBGFIhFCIIgiE34iFEL/////D4MgEEIgiCIQIBFC/////w+DIhF+fCASIBF+IhFCIIh8IhJCIIYgEUL/////D4OEIBRCIIggECATfnwgEkIgiHyFIAJBCGopAwAgA30gDYUiDUL/////D4MiECACKQMAIAN8IA+FIg9CIIgiEX4iEkL/////D4MgDUIgiCINIA9C/////w+DIg9+fCAQIA9+Ig9CIIh8IhBCIIYgD0L/////D4OEIBJCIIggDSARfnwgEEIgiHyFIAGtIg9Ch5Wvr5i23puef358IAsgDnyFfCAJIAx8hXwgByAKfIV8IAUgCHyFIgVCJYggBYVC+fPd8ZnymasWfiIFQiCIIAWFIQUCQCABQaABSA0AIAFBBXZBfGohGQNAIAIgBGoiGkEbaikDACADfSAEQZiNAWopAwAiB4UiCEL/////D4MiCSAaQRNqKQMAIAN8IARBkI0BaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfCAEQYiNAWopAwAiCCAEQYCNAWopAwAiCXyFIQYgGkELaikDACADfSAIhSII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QQApA6iKATcDKCACQQApA7CKASIENwMwIAJBACkDuIoBIgU3AzgCQAJAQQAoAoCOASIGQcAASQ0AIAJBACgCiI4BNgJAIAIgAkHAAGpBACgCmI4BQYCMASAGQX9qQQZ2IANBACgCnI4BIgAQAiACIAIpAwggBkHAiwFqKQMAIgR8IAMgAGoiAEEBaikDACAGQciLAWopAwAiBYUiB0IgiCAHQv////8Pg358NwMIIAIgAikDGCAGQdCLAWopAwAiB3wgAEERaikDACAGQdiLAWopAwAiCIUiCUIgiCAJQv////8Pg358NwMYIAIgBSAEIABBeWopAwCFIgRCIIggBEL/////D4N+IAIpAwB8fDcDACACIAggByAAQQlqKQMAhSIEQiCIIARC/////w+DfiACKQMQfHw3AxAgAEEZaikDACEEIAIpAyAhBSACIAIpAyggBkHgiwFqKQMAIgd8IABBIWopAwAgBkHoiwFqKQMAIgiFIglCIIggCUL/////D4N+fDcDKCACIAggBSAEIAeFIgRCIIggBEL/////D4N+fHw3AyAgAiACKQM4IAZB8IsBaikDACIEfCAAQTFqKQMAIAZB+IsBaikDACIFhSIHQiCIIAdC/////w+Dfnw3AzggAiAFIAQgAEEpaikDAIUiBEIgiCAEQv////8Pg34gAikDMHx8NwMwDAELIAZBwI0BaiEKQcAAIAZrIQsgAkHAAGohAAJAAkACQCAGQThNDQAgCyEMDAELAkACQEE4IAZrIg1BA3ZBAWpBB3EiDA0AIAJBwABqIQAgCyEMDAELIAJBwABqIQAgDEEDdCIOIQwDQCAAIAopAwA3AwAgAEEIaiEAIApBCGohCiAMQXhqIgwNAAtBwAAgBiAOamshDAsCQCANQThJDQADQCAAIAopAwA3AwAgAEEIaiAKQQhqKQMANwMAIABBEGogCkEQaikDADcDACAAQRhqIApBGGopAwA3AwAgAEEgaiAKQSBqKQMANwMAIABBKGogCkEoaikDADcDACAAQTBqIApBMGopAwA3AwAgAEE4aiAKQThqKQMANwMAIABBwABqIQAgCkHAAGohCiAMQUBqIgxBB0sNAAsLIAxFDQELIAxBf2ohDgJAIAxBB3EiDUUNACAMQXhxIQwDQCAAIAotAAA6AAAgAEEBaiEAIApBAWohCiANQX9qIg0NAAsLIA5BB0kNAANAIAAgCikAADcAACAAQQhqIQAgCkEIaiEKIAxBeGoiDA0ACwsgAkHAAGogC2ohCkGAjAEhAAJAAkACQCAGQQhJDQACQCAGQThqQQN2QQFqQQdxIgwNAAwCCyAMQQN0IQ1BgIwBIQADQCAKIAApAwA3AwAgCkEIaiEKIABBCGohACAMQX9qIgwNAAsgBiANayEGCyAGRQ0BAkAgBkEHcSINDQAgBiEMDAELIAZBeHEhDANAIAogAC0AADoAACAKQQFqIQogAEEBaiEAIA1Bf2oiDQ0ACwsgBkEISQ0AA0AgCiAAKQAANwAAIApBCGohCiAAQQhqIQAgDEF4aiIMDQALCyACIAIpAwggAikDQCIHfCADQQAoApyOAWoiAEEBaikDACACKQNIIgiFIglCIIggCUL/////D4N+fDcDCCACIAIpAxggAikDUCIJfCAAQRFqKQMAIAIpA1giD4UiEEIgiCAQQv////8Pg358NwMYIAIgCCAHIABBeWopAwCFIgdCIIggB0L/////D4N+IAIpAwB8fDcDACACIA8gCSAAQQlqKQMAhSIHQiCIIAdC/////w+DfiACKQMQfHw3AxAgAEEZaikDACEHIAIpAyAhCCACIAIpAyggAikDYCIJfCAAQSFqKQMAIAIpA2giD4UiEEIgiCAQQv////8Pg358NwMoIAIgDyAIIAcgCYUiB0IgiCAHQv////8Pg358fDcDICACIAUgAikDcCIHfCAAQTFqKQMAIAIpA3giBYUiCEIgiCAIQv////8Pg358NwM4IAIgBSAHIABBKWopAwCFIgdCIIggB0L/////D4N+IAR8fDcDMAsgAiACIANBC2pBACkDkI4BIgRCh5Wvr5i23puef34QAzcDQCACIAIgA0EAKAKcjgFqQXVqIARCz9bTvtLHq9lCfkJ/hRADNwNIDAELIASnIQACQEEAKQOgjgEiBFANAAJAIABBEEsNACACQcAAaiAAQYAIIAQQBAwCCwJAIABBgAFLDQAgAkHAAGogAEGACCAEEAUMAgsgAkHAAGogAEGACCAEEAYMAQsCQCAAQRBLDQAgAkHAAGogACADQgAQBAwBCwJAIABBgAFLDQAgAkHAAGogACADQgAQBQwBCyACQcAAaiAAIANCABAGC0EAIAIpA3A3A7gKQQAgAikDYDcDqApBACACKQNQNwOYCkEAIAJB+ABqKQMANwPACkEAIAJB6ABqKQMANwOwCkEAIAJB2ABqKQMANwOgCkEAIAIpA0giBEI4hiAEQoD+A4NCKIaEIARCgID8B4NCGIYgBEKAgID4D4NCCIaEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhCIENwOACkEAIAQ3A5AKQQAgAikDQCIEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISENwOICiABJAALBgBBgIoBCwIACwvMAQEAQYAIC8QBuP5sOSOkS758AYEs9yGtHN7UbemDkJfbckCkpLezZx/LeeZOzMDleIJa0H3M/3IhuAhGdPdDJI7gNZDmgTomTDwoUruRwwDLiNBlixtTLqNxZEiXog35TjgZ70ap3qzYqPp2P+OcND/53LvHxwtPHYpR4EvNtFkxyJ9+ydl4c2TqxayDNNPrw8WBoP/6E2PrFw3dUbfw2knTFlUmKdRonisWvlh9R6H8j/i40XrQMc5FyzqPlRYEKK/X+8q7S0B+QAIAAA==\";\nvar hash$5 = \"1f682d91\";\nvar wasmJson$5 = {\n\tname: name$5,\n\tdata: data$5,\n\thash: hash$5\n};\n\nconst mutex$3 = new Mutex();\nlet wasmCache$3 = null;\nconst seedBuffer = new ArrayBuffer(8);\nfunction validateSeed(seed) {\n if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n }\n return null;\n}\nfunction writeSeed(arr, low, high) {\n // write in little-endian format\n const buffer = new DataView(arr);\n buffer.setUint32(0, low, true);\n buffer.setUint32(4, high, true);\n}\n/**\n * Calculates xxHash128 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @returns Computed hash as a hexadecimal string\n */\nfunction xxhash128(data, seedLow = 0, seedHigh = 0) {\n if (validateSeed(seedLow)) {\n return Promise.reject(validateSeed(seedLow));\n }\n if (validateSeed(seedHigh)) {\n return Promise.reject(validateSeed(seedHigh));\n }\n if (wasmCache$3 === null) {\n return lockedCreate(mutex$3, wasmJson$5, 16)\n .then((wasm) => {\n wasmCache$3 = wasm;\n writeSeed(seedBuffer, seedLow, seedHigh);\n wasmCache$3.writeMemory(new Uint8Array(seedBuffer));\n return wasmCache$3.calculate(data);\n });\n }\n try {\n writeSeed(seedBuffer, seedLow, seedHigh);\n wasmCache$3.writeMemory(new Uint8Array(seedBuffer));\n const hash = wasmCache$3.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new xxHash128 hash instance\n * @param seedLow Lower 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n * @param seedHigh Higher 32 bits of the number used to\n * initialize the internal state of the algorithm (defaults to 0)\n */\nfunction createXXHash128(seedLow = 0, seedHigh = 0) {\n if (validateSeed(seedLow)) {\n return Promise.reject(validateSeed(seedLow));\n }\n if (validateSeed(seedHigh)) {\n return Promise.reject(validateSeed(seedHigh));\n }\n return WASMInterface(wasmJson$5, 16).then((wasm) => {\n const instanceBuffer = new ArrayBuffer(8);\n writeSeed(instanceBuffer, seedLow, seedHigh);\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n const obj = {\n init: () => {\n wasm.writeMemory(new Uint8Array(instanceBuffer));\n wasm.init();\n return obj;\n },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 512,\n digestSize: 16,\n };\n return obj;\n });\n}\n\nvar name$4 = \"ripemd160\";\nvar data$4 = \"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\";\nvar hash$4 = \"c089a7ca\";\nvar wasmJson$4 = {\n\tname: name$4,\n\tdata: data$4,\n\thash: hash$4\n};\n\nconst mutex$2 = new Mutex();\nlet wasmCache$2 = null;\n/**\n * Calculates RIPEMD-160 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction ripemd160(data) {\n if (wasmCache$2 === null) {\n return lockedCreate(mutex$2, wasmJson$4, 20)\n .then((wasm) => {\n wasmCache$2 = wasm;\n return wasmCache$2.calculate(data);\n });\n }\n try {\n const hash = wasmCache$2.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new RIPEMD-160 hash instance\n */\nfunction createRIPEMD160() {\n return WASMInterface(wasmJson$4, 20).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 20,\n };\n return obj;\n });\n}\n\nfunction calculateKeyBuffer(hasher, key) {\n const { blockSize } = hasher;\n const buf = getUInt8Buffer(key);\n if (buf.length > blockSize) {\n hasher.update(buf);\n const uintArr = hasher.digest('binary');\n hasher.init();\n return uintArr;\n }\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n}\nfunction calculateHmac(hasher, key) {\n hasher.init();\n const { blockSize } = hasher;\n const keyBuf = calculateKeyBuffer(hasher, key);\n const keyBuffer = new Uint8Array(blockSize);\n keyBuffer.set(keyBuf);\n const opad = new Uint8Array(blockSize);\n for (let i = 0; i < blockSize; i++) {\n const v = keyBuffer[i];\n opad[i] = v ^ 0x5C;\n keyBuffer[i] = v ^ 0x36;\n }\n hasher.update(keyBuffer);\n const obj = {\n init: () => {\n hasher.init();\n hasher.update(keyBuffer);\n return obj;\n },\n update: (data) => {\n hasher.update(data);\n return obj;\n },\n digest: ((outputType) => {\n const uintArr = hasher.digest('binary');\n hasher.init();\n hasher.update(opad);\n hasher.update(uintArr);\n return hasher.digest(outputType);\n }),\n save: () => {\n throw new Error('save() not supported');\n },\n load: () => {\n throw new Error('load() not supported');\n },\n blockSize: hasher.blockSize,\n digestSize: hasher.digestSize,\n };\n return obj;\n}\n/**\n * Calculates HMAC hash\n * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()\n * @param key Key (string, Buffer or TypedArray)\n */\nfunction createHMAC(hash, key) {\n if (!hash || !hash.then) {\n throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), \"key\").');\n }\n return hash.then((hasher) => calculateHmac(hasher, key));\n}\n\nfunction calculatePBKDF2(digest, salt, iterations, hashLength, outputType) {\n return __awaiter(this, void 0, void 0, function* () {\n const DK = new Uint8Array(hashLength);\n const block1 = new Uint8Array(salt.length + 4);\n const block1View = new DataView(block1.buffer);\n const saltBuffer = getUInt8Buffer(salt);\n const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length);\n block1.set(saltUIntBuffer);\n let destPos = 0;\n const hLen = digest.digestSize;\n const l = Math.ceil(hashLength / hLen);\n let T = null;\n let U = null;\n for (let i = 1; i <= l; i++) {\n block1View.setUint32(salt.length, i);\n digest.init();\n digest.update(block1);\n T = digest.digest('binary');\n U = T.slice();\n for (let j = 1; j < iterations; j++) {\n digest.init();\n digest.update(U);\n U = digest.digest('binary');\n for (let k = 0; k < hLen; k++) {\n T[k] ^= U[k];\n }\n }\n DK.set(T.subarray(0, hashLength - destPos), destPos);\n destPos += hLen;\n }\n if (outputType === 'binary') {\n return DK;\n }\n const digestChars = new Uint8Array(hashLength * 2);\n return getDigestHex(digestChars, DK, hashLength);\n });\n}\nconst validateOptions$2 = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (!options.hashFunction || !options.hashFunction.then) {\n throw new Error('Invalid hash function is provided! Usage: pbkdf2(\"password\", \"salt\", 1000, 32, createSHA1()).');\n }\n if (!Number.isInteger(options.iterations) || options.iterations < 1) {\n throw new Error('Iterations should be a positive number');\n }\n if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {\n throw new Error('Hash length should be a positive number');\n }\n if (options.outputType === undefined) {\n options.outputType = 'hex';\n }\n if (!['hex', 'binary'].includes(options.outputType)) {\n throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);\n }\n};\n/**\n * Generates a new PBKDF2 hash for the supplied password\n */\nfunction pbkdf2(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$2(options);\n const hmac = yield createHMAC(options.hashFunction, options.password);\n return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType);\n });\n}\n\nvar name$3 = \"scrypt\";\nvar data$3 = \"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\";\nvar hash$3 = \"c51b8bf7\";\nvar wasmJson$3 = {\n\tname: name$3,\n\tdata: data$3,\n\thash: hash$3\n};\n\nfunction scryptInternal(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const { costFactor, blockSize, parallelism, hashLength, } = options;\n const SHA256Hasher = createSHA256();\n const blockData = yield pbkdf2({\n password: options.password,\n salt: options.salt,\n iterations: 1,\n hashLength: 128 * blockSize * parallelism,\n hashFunction: SHA256Hasher,\n outputType: 'binary',\n });\n const scryptInterface = yield WASMInterface(wasmJson$3, 0);\n // last block is for storing the temporary vectors\n const VSize = 128 * blockSize * costFactor;\n const XYSize = 256 * blockSize;\n scryptInterface.setMemorySize(blockData.length + VSize + XYSize);\n scryptInterface.writeMemory(blockData, 0);\n // mix blocks\n scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism);\n const expensiveSalt = scryptInterface\n .getMemory()\n .subarray(0, 128 * blockSize * parallelism);\n const outputData = yield pbkdf2({\n password: options.password,\n salt: expensiveSalt,\n iterations: 1,\n hashLength,\n hashFunction: SHA256Hasher,\n outputType: 'binary',\n });\n if (options.outputType === 'hex') {\n const digestChars = new Uint8Array(hashLength * 2);\n return getDigestHex(digestChars, outputData, hashLength);\n }\n // return binary format\n return outputData;\n });\n}\n// eslint-disable-next-line no-bitwise\nconst isPowerOfTwo = (v) => v && !(v & (v - 1));\nconst validateOptions$1 = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (!Number.isInteger(options.blockSize) || options.blockSize < 1) {\n throw new Error('Block size should be a positive number');\n }\n if (!Number.isInteger(options.costFactor)\n || options.costFactor < 2\n || !isPowerOfTwo(options.costFactor)) {\n throw new Error('Cost factor should be a power of 2, greater than 1');\n }\n if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {\n throw new Error('Parallelism should be a positive number');\n }\n if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {\n throw new Error('Hash length should be a positive number.');\n }\n if (options.outputType === undefined) {\n options.outputType = 'hex';\n }\n if (!['hex', 'binary'].includes(options.outputType)) {\n throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);\n }\n};\n/**\n * Calculates hash using the scrypt password-based key derivation function\n * @returns Computed hash as a hexadecimal string or as\n * Uint8Array depending on the outputType option\n */\nfunction scrypt(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions$1(options);\n return scryptInternal(options);\n });\n}\n\nvar name$2 = \"bcrypt\";\nvar data$2 = \"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\";\nvar hash$2 = \"497b89b2\";\nvar wasmJson$2 = {\n\tname: name$2,\n\tdata: data$2,\n\thash: hash$2\n};\n\nfunction bcryptInternal(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const { costFactor, password, salt } = options;\n const bcryptInterface = yield WASMInterface(wasmJson$2, 0);\n bcryptInterface.writeMemory(getUInt8Buffer(salt), 0);\n const passwordBuffer = getUInt8Buffer(password);\n bcryptInterface.writeMemory(passwordBuffer, 16);\n const shouldEncode = options.outputType === 'encoded' ? 1 : 0;\n bcryptInterface.getExports().bcrypt(passwordBuffer.length, costFactor, shouldEncode);\n const memory = bcryptInterface.getMemory();\n if (options.outputType === 'encoded') {\n return intArrayToString(memory, 60);\n }\n if (options.outputType === 'hex') {\n const digestChars = new Uint8Array(24 * 2);\n return getDigestHex(digestChars, memory, 24);\n }\n // return binary format\n // the data is copied to allow GC of the original memory buffer\n return memory.slice(0, 24);\n });\n}\nconst validateOptions = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (!Number.isInteger(options.costFactor) || options.costFactor < 4 || options.costFactor > 31) {\n throw new Error('Cost factor should be a number between 4 and 31');\n }\n options.password = getUInt8Buffer(options.password);\n if (options.password.length < 1) {\n throw new Error('Password should be at least 1 byte long');\n }\n if (options.password.length > 72) {\n throw new Error('Password should be at most 72 bytes long');\n }\n options.salt = getUInt8Buffer(options.salt);\n if (options.salt.length !== 16) {\n throw new Error('Salt should be 16 bytes long');\n }\n if (options.outputType === undefined) {\n options.outputType = 'encoded';\n }\n if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {\n throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);\n }\n};\n/**\n * Calculates hash using the bcrypt password-hashing function\n * @returns Computed hash\n */\nfunction bcrypt(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateOptions(options);\n return bcryptInternal(options);\n });\n}\nconst validateHashCharacters = (hash) => {\n if (!/^\\$2[axyb]\\$[0-3][0-9]\\$[./A-Za-z0-9]{53}$/.test(hash)) {\n return false;\n }\n if (hash[4] === '0' && parseInt(hash[5], 10) < 4) {\n return false;\n }\n if (hash[4] === '3' && parseInt(hash[5], 10) > 1) {\n return false;\n }\n return true;\n};\nconst validateVerifyOptions = (options) => {\n if (!options || typeof options !== 'object') {\n throw new Error('Invalid options parameter. It requires an object.');\n }\n if (options.hash === undefined || typeof options.hash !== 'string') {\n throw new Error('Hash should be specified');\n }\n if (options.hash.length !== 60) {\n throw new Error('Hash should be 60 bytes long');\n }\n if (!validateHashCharacters(options.hash)) {\n throw new Error('Invalid hash');\n }\n options.password = getUInt8Buffer(options.password);\n if (options.password.length < 1) {\n throw new Error('Password should be at least 1 byte long');\n }\n if (options.password.length > 72) {\n throw new Error('Password should be at most 72 bytes long');\n }\n};\n/**\n * Verifies password using bcrypt password-hashing function\n * @returns True if the encoded hash matches the password\n */\nfunction bcryptVerify(options) {\n return __awaiter(this, void 0, void 0, function* () {\n validateVerifyOptions(options);\n const { hash, password } = options;\n const bcryptInterface = yield WASMInterface(wasmJson$2, 0);\n bcryptInterface.writeMemory(getUInt8Buffer(hash), 0);\n const passwordBuffer = getUInt8Buffer(password);\n bcryptInterface.writeMemory(passwordBuffer, 60);\n return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length);\n });\n}\n\nvar name$1 = \"whirlpool\";\nvar data$1 = \"AGFzbQEAAAABEQRgAAF/YAF/AGACf38AYAAAAwkIAAECAwEDAAEFBAEBAgIGDgJ/AUHQmwULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAMLSGFzaF9VcGRhdGUABApIYXNoX0ZpbmFsAAUNSGFzaF9HZXRTdGF0ZQAGDkhhc2hfQ2FsY3VsYXRlAAcKU1RBVEVfU0laRQMBCuwbCAUAQYAZC8wGAQl+IAApAwAhAUEAQQApA4CbASICNwPAmQEgACkDGCEDIAApAxAhBCAAKQMIIQVBAEEAKQOYmwEiBjcD2JkBQQBBACkDkJsBIgc3A9CZAUEAQQApA4ibASIINwPImQFBACABIAKFNwOAmgFBACAFIAiFNwOImgFBACAEIAeFNwOQmgFBACADIAaFNwOYmgEgACkDICEDQQBBACkDoJsBIgE3A+CZAUEAIAMgAYU3A6CaASAAKQMoIQRBAEEAKQOomwEiAzcD6JkBQQAgBCADhTcDqJoBIAApAzAhBUEAQQApA7CbASIENwPwmQFBACAFIASFNwOwmgEgACkDOCEJQQBBACkDuJsBIgU3A/iZAUEAIAkgBYU3A7iaAUEAQpjGmMb+kO6AzwA3A4CZAUHAmQFBgJkBEAJBgJoBQcCZARACQQBCtszKrp/v28jSADcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBAELg+O70uJTDvTU3A4CZAUHAmQFBgJkBEAJBgJoBQcCZARACQQBCncDfluzlkv/XADcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBAEKV7t2p/pO8pVo3A4CZAUHAmQFBgJkBEAJBgJoBQcCZARACQQBC2JKn0ZCW6LWFfzcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBAEK9u8Ggv9nPgucANwOAmQFBwJkBQYCZARACQYCaAUHAmQEQAkEAQuTPhNr4tN/KWDcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBAEL73fOz1vvFo55/NwOAmQFBwJkBQYCZARACQYCaAUHAmQEQAkEAQsrb/L3Q1dbBMzcDgJkBQcCZAUGAmQEQAkGAmgFBwJkBEAJBACACQQApA4CaASAAKQMAhYU3A4CbAUEAIAhBACkDiJoBIAApAwiFhTcDiJsBQQAgB0EAKQOQmgEgACkDEIWFNwOQmwFBACAGQQApA5iaASAAKQMYhYU3A5ibAUEAIAFBACkDoJoBIAApAyCFhTcDoJsBQQAgA0EAKQOomgEgACkDKIWFNwOomwFBACAEQQApA7CaASAAKQMwhYU3A7CbAUEAIAVBACkDuJoBIAApAziFhTcDuJsBC4YMCgF+AX8BfgF/AX4BfwF+AX8EfgN/IAAgACkDACICpyIDQf8BcUEDdEGQCGopAwBCOIkgACkDOCIEpyIFQQV2QfgPcUGQCGopAwCFQjiJIAApAzAiBqciB0ENdkH4D3FBkAhqKQMAhUI4iSAAKQMoIginIglBFXZB+A9xQZAIaikDAIVCOIkgACkDICIKQiCIp0H/AXFBA3RBkAhqKQMAhUI4iSAAKQMYIgtCKIinQf8BcUEDdEGQCGopAwCFQjiJIAApAxAiDEIwiKdB/wFxQQN0QZAIaikDAIVCOIkgACkDCCINQjiIp0EDdEGQCGopAwCFQjiJIAEpAwCFNwMAIAAgDaciDkH/AXFBA3RBkAhqKQMAQjiJIANBBXZB+A9xQZAIaikDAIVCOIkgBUENdkH4D3FBkAhqKQMAhUI4iSAHQRV2QfgPcUGQCGopAwCFQjiJIAhCIIinQf8BcUEDdEGQCGopAwCFQjiJIApCKIinQf8BcUEDdEGQCGopAwCFQjiJIAtCMIinQf8BcUEDdEGQCGopAwCFQjiJIAxCOIinQQN0QZAIaikDAIVCOIkgASkDCIU3AwggACAMpyIPQf8BcUEDdEGQCGopAwBCOIkgDkEFdkH4D3FBkAhqKQMAhUI4iSADQQ12QfgPcUGQCGopAwCFQjiJIAVBFXZB+A9xQZAIaikDAIVCOIkgBkIgiKdB/wFxQQN0QZAIaikDAIVCOIkgCEIoiKdB/wFxQQN0QZAIaikDAIVCOIkgCkIwiKdB/wFxQQN0QZAIaikDAIVCOIkgC0I4iKdBA3RBkAhqKQMAhUI4iSABKQMQhTcDECAAIAunIhBB/wFxQQN0QZAIaikDAEI4iSAPQQV2QfgPcUGQCGopAwCFQjiJIA5BDXZB+A9xQZAIaikDAIVCOIkgA0EVdkH4D3FBkAhqKQMAhUI4iSAEQiCIp0H/AXFBA3RBkAhqKQMAhUI4iSAGQiiIp0H/AXFBA3RBkAhqKQMAhUI4iSAIQjCIp0H/AXFBA3RBkAhqKQMAhUI4iSAKQjiIp0EDdEGQCGopAwCFQjiJIAEpAxiFNwMYIAAgCqciA0H/AXFBA3RBkAhqKQMAQjiJIBBBBXZB+A9xQZAIaikDAIVCOIkgD0ENdkH4D3FBkAhqKQMAhUI4iSAOQRV2QfgPcUGQCGopAwCFQjiJIAJCIIinQf8BcUEDdEGQCGopAwCFQjiJIARCKIinQf8BcUEDdEGQCGopAwCFQjiJIAZCMIinQf8BcUEDdEGQCGopAwCFQjiJIAhCOIinQQN0QZAIaikDAIVCOIkgASkDIIU3AyAgACAJQf8BcUEDdEGQCGopAwBCOIkgA0EFdkH4D3FBkAhqKQMAhUI4iSAQQQ12QfgPcUGQCGopAwCFQjiJIA9BFXZB+A9xQZAIaikDAIVCOIkgDUIgiKdB/wFxQQN0QZAIaikDAIVCOIkgAkIoiKdB/wFxQQN0QZAIaikDAIVCOIkgBEIwiKdB/wFxQQN0QZAIaikDAIVCOIkgBkI4iKdBA3RBkAhqKQMAhUI4iSABKQMohTcDKCAAIAdB/wFxQQN0QZAIaikDAEI4iSAJQQV2QfgPcUGQCGopAwCFQjiJIANBDXZB+A9xQZAIaikDAIVCOIkgEEEVdkH4D3FBkAhqKQMAhUI4iSAMQiCIp0H/AXFBA3RBkAhqKQMAhUI4iSANQiiIp0H/AXFBA3RBkAhqKQMAhUI4iSACQjCIp0H/AXFBA3RBkAhqKQMAhUI4iSAEQjiIp0EDdEGQCGopAwCFQjiJIAEpAzCFNwMwIAAgBUH/AXFBA3RBkAhqKQMAQjiJIAdBBXZB+A9xQZAIaikDAIVCOIkgCUENdkH4D3FBkAhqKQMAhUI4iSADQRV2QfgPcUGQCGopAwCFQjiJIAtCIIinQf8BcUEDdEGQCGopAwCFQjiJIAxCKIinQf8BcUEDdEGQCGopAwCFQjiJIA1CMIinQf8BcUEDdEGQCGopAwCFQjiJIAJCOIinQQN0QZAIaikDAIVCOIkgASkDOIU3AzgLXABBAEIANwPImwFBAEIANwO4mwFBAEIANwOwmwFBAEIANwOomwFBAEIANwOgmwFBAEIANwOYmwFBAEIANwOQmwFBAEIANwOImwFBAEIANwOAmwFBAEEANgLAmwELxQMBCH9BACEBQQBBACkDyJsBIACtfDcDyJsBAkBBACgCwJsBIgJFDQBBACEBAkAgAiAAaiIDQcAAIANBwABJGyIEIAJB/wFxIgVNDQAgBCAFayIBQQNxIQZBACEHAkAgBCAFQX9zakEDSQ0AIAFBfHEhCEEAIQcDQCAFIAdqIgJBwJoBaiAHQYAZai0AADoAACACQcGaAWogB0GBGWotAAA6AAAgAkHCmgFqIAdBghlqLQAAOgAAIAJBw5oBaiAHQYMZai0AADoAACAIIAdBBGoiB0cNAAsgBSAHaiIFIQILIAZFDQAgB0GAGWohByACQf8BcUEBaiECA0AgBUHAmgFqIActAAA6AAAgB0EBaiEHIAIiBUEBaiECIAUhBSAGQX9qIgYNAAsLAkAgA0E/TQ0AQcCaARABQQAhBAtBACAENgLAmwELAkAgACABayIHQcAASQ0AA0AgAUGAGWoQASABQcAAaiEBIAdBQGoiB0E/Sw0ACwsCQCABIABGDQBBACAHNgLAmwEgB0UNAEEAIQdBACECA0AgB0HAmgFqIAcgAWpBgBlqLQAAOgAAQQAoAsCbASACQQFqIgJB/wFxIgdLDQALCwv/AwIEfwF+IwBBwABrIgAkACAAQThqQgA3AwAgAEEwakIANwMAIABBKGpCADcDACAAQSBqQgA3AwAgAEEYakIANwMAIABBEGpCADcDACAAQgA3AwggAEIANwMAQQAhAQJAAkBBACgCwJsBIgJFDQBBACEDA0AgACABaiABQcCaAWotAAA6AAAgAUEBaiEBIAIgA0EBaiIDQf8BcUsNAAtBACACQQFqNgLAmwEgACACakGAAToAACACQWBxQSBHDQEgABABIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDAAwBC0EAQQE2AsCbASAAQYABOgAAC0EAKQPImwEhBEEAQgA3A8ibASAAQQA6ADYgAEEANgEyIABCADcBKiAAQQA6ACkgAEIANwAhIABBADoAICAAIARCBYg8AD4gACAEQg2IPAA9IAAgBEIViDwAPCAAIARCHYg8ADsgACAEQiWIPAA6IAAgBEItiDwAOSAAIARCNYg8ADggACAEQj2IPAA3IAAgBKdBA3Q6AD8gABABQQBBACkDgJsBNwOAGUEAQQApA4ibATcDiBlBAEEAKQOQmwE3A5AZQQBBACkDmJsBNwOYGUEAQQApA6CbATcDoBlBAEEAKQOomwE3A6gZQQBBACkDsJsBNwOwGUEAQQApA7ibATcDuBkgAEHAAGokAAsGAEHAmgELYgBBAEIANwPImwFBAEIANwO4mwFBAEIANwOwmwFBAEIANwOomwFBAEIANwOgmwFBAEIANwOYmwFBAEIANwOQmwFBAEIANwOImwFBAEIANwOAmwFBAEEANgLAmwEgABAEEAULC5gQAQBBgAgLkBCQAAAAAAAAAAAAAAAAAAAAGBhgGMB4MNgjI4wjBa9GJsbGP8Z++ZG46OiH6BNvzfuHhyaHTKETy7i42ripYm0RAQEEAQgFAglPTyFPQm6eDTY22Dat7mybpqaiplkEUf/S0m/S3r25DPX18/X7BvcOeXn5ee+A8pZvb6FvX87eMJGRfpH87z9tUlJVUqoHpPhgYJ1gJ/3AR7y8yryJdmU1m5tWm6zNKzeOjgKOBIwBiqOjtqNxFVvSDAwwDGA8GGx7e/F7/4r2hDU11DW14WqAHR10HehpOvXg4KfgU0fds9fXe9f2rLMhwsIvwl7tmZwuLrgubZZcQ0tLMUtiepYp/v7f/qMh4V1XV0FXghau1RUVVBWoQSq9d3fBd5+27ug3N9w3petukuXls+V7Vteen59Gn4zZIxPw8Ofw0xf9I0pKNUpqf5Qg2tpP2p6VqURYWH1Y+iWwosnJA8kGyo/PKSmkKVWNUnwKCigKUCIUWrGx/rHhT39QoKC6oGkaXclra7Frf9rWFIWFLoVcqxfZvb3OvYFzZzxdXWld0jS6jxAQQBCAUCCQ9PT39PMD9QfLywvLFsCL3T4++D7txnzTBQUUBSgRCi1nZ4FnH+bOeOTkt+RzU9WXJyecJyW7TgJBQRlBMliCc4uLFossnQunp6emp1EBU/Z9fel9z5T6spWVbpXc+zdJ2NhH2I6frVb7+8v7izDrcO7un+4jccHNfHztfMeR+LtmZoVmF+PMcd3dU92mjqd7FxdcF7hLLq9HRwFHAkaORZ6eQp6E3CEaysoPyh7FidQtLbQtdZlaWL+/xr+ReWMuBwccBzgbDj+trY6tASNHrFpadVrqL7Swg4M2g2y1G+8zM8wzhf9mtmNjkWM/8sZcAgIIAhAKBBKqqpKqOThJk3Fx2XGvqOLeyMgHyA7PjcYZGWQZyH0y0UlJOUlycJI72dlD2Yaar1/y8u/ywx35MePjq+NLSNuoW1txW+IqtrmIiBqINJINvJqaUpqkyCk+JiaYJi2+TAsyMsgyjfpkv7Cw+rDpSn1Z6emD6Rtqz/IPDzwPeDMed9XVc9XmprczgIA6gHS6HfS+vsK+mXxhJ83NE80m3ofrNDTQNL3kaIlISD1IenWQMv//2/+rJONUenr1eveP9I2QkHqQ9Oo9ZF9fYV/CPr6dICCAIB2gQD1oaL1oZ9XQDxoaaBrQcjTKrq6CrhksQbe0tOq0yV51fVRUTVSaGajOk5N2k+zlO38iIogiDapEL2RkjWQH6chj8fHj8dsS/ypzc9Fzv6LmzBISSBKQWiSCQEAdQDpdgHoICCAIQCgQSMPDK8NW6JuV7OyX7DN7xd/b20vblpCrTaGhvqFhH1/AjY0OjRyDB5E9PfQ99cl6yJeXZpfM8TNbAAAAAAAAAADPzxvPNtSD+SsrrCtFh1ZudnbFdpez7OGCgjKCZLAZ5tbWf9b+qbEoGxtsG9h3NsO1te61wVt3dK+vhq8RKUO+amq1anff1B1QUF1Qug2g6kVFCUUSTIpX8/Pr88sY+zgwMMAwnfBgre/vm+8rdMPEPz/8P+XDftpVVUlVkhyqx6KisqJ5EFnb6uqP6gNlyellZYllD+zKarq60rq5aGkDLy+8L2WTXkrAwCfATuedjt7eX96+gaFgHBxwHOBsOPz9/dP9uy7nRk1NKU1SZJofkpJykuTgOXZ1dcl1j7zq+gYGGAYwHgw2iooSiiSYCa6ysvKy+UB5S+bmv+ZjWdGFDg44DnA2HH4fH3wf+GM+52JilWI398RV1NR31O6jtTqoqJqoKTJNgZaWYpbE9DFS+fnD+Zs672LFxTPFZvaXoyUllCU1sUoQWVl5WfIgsquEhCqEVK4V0HJy1XK3p+TFOTnkOdXdcuxMTC1MWmGYFl5eZV7KO7yUeHj9eOeF8J84OOA43dhw5YyMCowUhgWY0dFj0cayvxelpa6lQQtX5OLir+JDTdmhYWGZYS/4wk6zs/az8UV7QiEhhCEVpUI0nJxKnJTWJQgeHnge8GY87kNDEUMiUoZhx8c7x3b8k7H8/Nf8syvlTwQEEAQgFAgkUVFZUbIIouOZmV6ZvMcvJW1tqW1PxNoiDQ00DWg5GmX6+s/6gzXped/fW9+2hKNpfn7lfteb/KkkJJAkPbRIGTs77DvF13b+q6uWqzE9S5rOzh/OPtGB8BERRBGIVSKZj48GjwyJA4NOTiVOSmucBLe35rfRUXNm6+uL6wtgy+A8PPA8/cx4wYGBPoF8vx/9lJRqlNT+NUD39/v36wzzHLm53rmhZ28YExNME5hfJossLLAsfZxYUdPTa9PWuLsF5+e752tc04xubqVuV8vcOcTEN8Ru85WqAwMMAxgPBhtWVkVWihOs3EREDUQaSYhef3/hf9+e/qCpqZ6pITdPiCoqqCpNglRnu7vWu7FtawrBwSPBRuKfh1NTUVOiAqbx3NxX3K6LpXILCywLWCcWU52dTp2c0ycBbGytbEfB2CsxMcQxlfVipHR0zXSHuejz9vb/9uMJ8RVGRgVGCkOMTKysiqwJJkWliYkeiTyXD7UUFFAUoEQotOHho+FbQt+6FhZYFrBOLKY6Oug6zdJ092lpuWlv0NIGCQkkCUgtEkFwcN1wp63g17a24rbZVHFv0NBn0M63vR7t7ZPtO37H1szMF8wu24XiQkIVQipXhGiYmFqYtMItLKSkqqRJDlXtKCigKF2IUHVcXG1c2jG4hvj4x/iTP+1rhoYihkSkEcI=\";\nvar hash$1 = \"dba12019\";\nvar wasmJson$1 = {\n\tname: name$1,\n\tdata: data$1,\n\thash: hash$1\n};\n\nconst mutex$1 = new Mutex();\nlet wasmCache$1 = null;\n/**\n * Calculates Whirlpool hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction whirlpool(data) {\n if (wasmCache$1 === null) {\n return lockedCreate(mutex$1, wasmJson$1, 64)\n .then((wasm) => {\n wasmCache$1 = wasm;\n return wasmCache$1.calculate(data);\n });\n }\n try {\n const hash = wasmCache$1.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new Whirlpool hash instance\n */\nfunction createWhirlpool() {\n return WASMInterface(wasmJson$1, 64).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 64,\n };\n return obj;\n });\n}\n\nvar name = \"sm3\";\nvar data = \"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\";\nvar hash = \"56515712\";\nvar wasmJson = {\n\tname: name,\n\tdata: data,\n\thash: hash\n};\n\nconst mutex = new Mutex();\nlet wasmCache = null;\n/**\n * Calculates SM3 hash\n * @param data Input data (string, Buffer or TypedArray)\n * @returns Computed hash as a hexadecimal string\n */\nfunction sm3(data) {\n if (wasmCache === null) {\n return lockedCreate(mutex, wasmJson, 32)\n .then((wasm) => {\n wasmCache = wasm;\n return wasmCache.calculate(data);\n });\n }\n try {\n const hash = wasmCache.calculate(data);\n return Promise.resolve(hash);\n }\n catch (err) {\n return Promise.reject(err);\n }\n}\n/**\n * Creates a new SM3 hash instance\n */\nfunction createSM3() {\n return WASMInterface(wasmJson, 32).then((wasm) => {\n wasm.init();\n const obj = {\n init: () => { wasm.init(); return obj; },\n update: (data) => { wasm.update(data); return obj; },\n digest: (outputType) => wasm.digest(outputType),\n save: () => wasm.save(),\n load: (data) => { wasm.load(data); return obj; },\n blockSize: 64,\n digestSize: 32,\n };\n return obj;\n });\n}\n\nexport { adler32, argon2Verify, argon2d, argon2i, argon2id, bcrypt, bcryptVerify, blake2b, blake2s, blake3, crc32, crc32c, createAdler32, createBLAKE2b, createBLAKE2s, createBLAKE3, createCRC32, createCRC32C, createHMAC, createKeccak, createMD4, createMD5, createRIPEMD160, createSHA1, createSHA224, createSHA256, createSHA3, createSHA384, createSHA512, createSM3, createWhirlpool, createXXHash128, createXXHash3, createXXHash32, createXXHash64, keccak, md4, md5, pbkdf2, ripemd160, scrypt, sha1, sha224, sha256, sha3, sha384, sha512, sm3, whirlpool, xxhash128, xxhash3, xxhash32, xxhash64 };\n", "import { argon2id } from \"hash-wasm\";\n\nexport async function HashArgon2idImpl(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n return await argon2id({\n password: password,\n salt: salt,\n iterations: iterations,\n memorySize: memorySize,\n hashLength: hashLength,\n parallelism: 1,\n outputType: \"binary\",\n });\n}\n", "import * as impl from \"#argon2-impl\";\n\nexport async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n return await impl.HashArgon2idImpl(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\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, Context, renderContext } from \"./codec.js\";\n\ndeclare const flavor_AbsoluteTime: unique symbol;\ndeclare const flavor_TalerProtocolTimestamp: unique symbol;\ndeclare const flavor_TalerPreciseTimestamp: unique symbol;\n\nconst opaque_AbsoluteTime: unique symbol = Symbol(\"opaque_AbsoluteTime\");\n\n// FIXME: Make this opaque!\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n\n readonly _flavor?: typeof flavor_AbsoluteTime;\n\n // Make the type opaque, we only want our constructors\n // to able to create an AbsoluteTime value.\n [opaque_AbsoluteTime]: true;\n}\n\nexport interface TalerProtocolTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n readonly _flavor?: typeof flavor_TalerProtocolTimestamp;\n}\n\n/**\n * Precise timestamp, typically used in the wallet-core\n * API but not in other Taler APIs so far.\n */\nexport interface TalerPreciseTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n /**\n * Optional microsecond offset (non-negative integer).\n */\n readonly off_us?: number;\n\n readonly _flavor?: typeof flavor_TalerPreciseTimestamp;\n}\n\nexport namespace TalerPreciseTimestamp {\n export function now(): TalerPreciseTimestamp {\n const absNow = AbsoluteTime.now();\n return AbsoluteTime.toPreciseTimestamp(absNow);\n }\n\n export function round(t: TalerPreciseTimestamp): TalerProtocolTimestamp {\n return {\n t_s: t.t_s,\n };\n }\n\n export function fromSeconds(s: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(s),\n off_us: Math.floor((s - Math.floor(s)) / 1000 / 1000),\n };\n }\n\n export function fromMilliseconds(ms: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(ms / 1000),\n off_us: Math.floor((ms - Math.floor(ms / 1000) * 1000) * 1000),\n };\n }\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toProtocolTimestamp(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 isNever(t: TalerProtocolTimestamp): boolean {\n return t.t_s === \"never\";\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\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\n/**\n * Timeshift in milliseconds.\n */\nlet timeshift = 0;\n\n/**\n * Set timetravel offset in milliseconds.\n *\n * Use carefully and only for testing.\n */\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function toMilliseconds(d: Duration): number {\n if (d.d_ms === \"forever\") {\n return Number.MAX_VALUE;\n }\n return d.d_ms;\n }\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 /**\n * Compare two durations. Returns 0 when equal, -1 when a < b\n * and +1 when a > b.\n */\n export function cmp(d1: Duration, d2: Duration): 1 | 0 | -1 {\n if (d1.d_ms === \"forever\") {\n if (d2.d_ms === \"forever\") {\n return 0;\n }\n return 1;\n }\n if (d2.d_ms === \"forever\") {\n return -1;\n }\n if (d1.d_ms == d2.d_ms) {\n return 0;\n }\n if (d1.d_ms > d2.d_ms) {\n return 1;\n }\n return -1;\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 function fromSpec(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\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: Math.floor(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 fromMilliseconds(ms: number): Duration {\n return {\n d_ms: ms,\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 getStampMsNow(): number {\n return new Date().getTime();\n }\n\n export function getStampMsNever(): number {\n return Number.MAX_SAFE_INTEGER;\n }\n\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromMilliseconds(ms: number): AbsoluteTime {\n return {\n t_ms: ms,\n [opaque_AbsoluteTime]: true,\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, [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\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 isNever(t: AbsoluteTime): boolean {\n return t.t_ms === \"never\";\n }\n\n export function fromProtocolTimestamp(\n t: TalerProtocolTimestamp,\n ): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return {\n t_ms: t.t_s * 1000,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromStampMs(stampMs: number): AbsoluteTime {\n return {\n t_ms: stampMs,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromPreciseTimestamp(t: TalerPreciseTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n const offsetUs = t.off_us ?? 0;\n return {\n t_ms: t.t_s * 1000 + Math.floor(offsetUs / 1000),\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function toStampMs(at: AbsoluteTime): number {\n if (at.t_ms === \"never\") {\n return Number.MAX_SAFE_INTEGER;\n }\n return at.t_ms;\n }\n\n export function toPreciseTimestamp(at: AbsoluteTime): TalerPreciseTimestamp {\n if (at.t_ms == \"never\") {\n return {\n t_s: \"never\",\n };\n }\n const t_s = Math.floor(at.t_ms / 1000);\n const off_us = Math.floor(1000 * (at.t_ms - t_s * 1000));\n return {\n t_s,\n off_us,\n };\n }\n\n export function toProtocolTimestamp(\n at: AbsoluteTime,\n ): 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\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: t1.t_ms + d.d_ms, [opaque_AbsoluteTime]: true };\n }\n\n /**\n * Get the remaining duration until {@param t1}.\n *\n * If {@param t1} already happened, the remaining duration\n * is zero.\n */\n export function remaining(t1: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return Duration.getForever();\n }\n const stampNow = now();\n if (stampNow.t_ms === \"never\") {\n throw Error(\"invariant violated\");\n }\n return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_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\", [opaque_AbsoluteTime]: true };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms), [opaque_AbsoluteTime]: true };\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 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 if (x === undefined) {\n throw Error(`got undefined and expected absolute time at ${renderContext(c)}`);\n }\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms, [opaque_AbsoluteTime]: true };\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 if (x === undefined) {\n throw Error(`got undefined and expected timestamp at ${renderContext(c)}`);\n }\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 protocol timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForPreciseTimestamp: Codec<TalerPreciseTimestamp> = {\n decode(x: any, c?: Context): TalerPreciseTimestamp {\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 throw Error(`expected precise 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 { Amounts, codecForAmountString } from \"./amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecForStringURL,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport {\n CurrencySpecification,\n codecForCurrencySpecificiation,\n codecForEither,\n codecForProduct,\n} from \"./index.js\";\nimport { Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForDuration,\n codecForTimestamp,\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 // The exchange's base URL.\n url: string;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKeyString;\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: EddsaPublicKeyString;\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 // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\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?: InternationalizedString;\n\n // The number of units of the product to deliver to the customer.\n quantity?: Integer;\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?: ImageDataUrl;\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 // The hash of the merchant instance's wire details.\n h_wire: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: TalerProtocolDuration;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: InternationalizedString;\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: string;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: TalerProtocolTimestamp;\n\n // More info about the merchant, see below.\n merchant: MerchantInfo;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: string;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: TalerProtocolTimestamp;\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: ExchangeHandle[];\n\n // List of products that are part of the purchase (see Product).\n products?: Product[];\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: TalerProtocolTimestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // Time when this contract was generated.\n timestamp: TalerProtocolTimestamp;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional, but either fulfillment_url\n // or fulfillment_message must be specified in every\n // contract terms.\n //\n // If a non-unique fulfillment URL is used, a customer can only\n // buy the order once and will be redirected to a previous purchase\n // when trying to buy an order with the same fulfillment URL a second\n // time. This is useful for digital goods that a customer only needs\n // to buy once but should be able to repeatedly download.\n //\n // For orders where the customer is expected to be able to make\n // repeated purchases (for equivalent goods), the fulfillment URL\n // should be made unique for every order. The easiest way to do\n // this is to include a unique order ID in the fulfillment URL.\n //\n // When POSTing to the merchant, the placeholder text \"${ORDER_ID}\"\n // is be replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL). Note that this placeholder can only be used once.\n // Front-ends may use other means to generate a unique fulfillment URL.\n fulfillment_url?: string;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: InternationalizedString;\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: string;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n // Must really be an Object (not a string, integer, float or array).\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\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 * 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 * Canonical, public base URL of the exchange.\n */\n base_url: string;\n\n currency: string;\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 accounts: ExchangeWireAccount[];\n\n wire_fees: { [methodName: string]: WireFeesJson[] };\n\n denominations: DenomGroup[];\n}\n\nexport type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n\nexport interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n\n // XOR of all the SHA-512 hash values of the denominations' public keys\n // in this group. Note that for hashing, the binary format of the\n // public keys is used, and not their base32 encoding.\n hash: HashCodeString;\n}\n\nexport interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignatureString;\n\n // When does the denomination key become valid?\n stamp_start: TalerProtocolTimestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: TalerProtocolTimestamp;\n\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n}\n\nexport type RsaPublicKeySring = string;\nexport type AgeMask = number;\nexport type ImageDataUrl = string;\n\n/**\n * 32-byte value representing a point on Curve25519.\n */\nexport type Cs25519Point = string;\n\nexport interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\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\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 status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\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 RewardPickupGetResponse {\n reward_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 pos_confirmation?: 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 // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected or pending.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Deprecated field use status instead\n // The transfer has been confirmed and registered by the bank.\n // Does not guarantee that the funds have arrived at the exchange already.\n transfer_done: boolean;\n}\n\nexport const codeForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\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\ndeclare const __amount_str: unique symbol;\nexport type AmountString = string & { [__amount_str]: true };\n// export type AmountString = string;\nexport type Base32String = string;\nexport type EddsaSignatureString = string;\nexport type EddsaPublicKeyString = string;\nexport type EddsaPrivateKeyString = 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 codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\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\", codecForAmountString())\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\", codecForAmountString())\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\", codecForAmountString())\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 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\n// FIXME: Validate properly!\nexport const codecForNgDenominations: Codec<DenomGroup> = codecForAny();\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\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 .property(\"accounts\", codecForList(codecForExchangeWireAccount()))\n .property(\"wire_fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .property(\"denominations\", codecForList(codecForNgDenominations))\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 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(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\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 codecForRewardPickupGetResponse =\n (): Codec<RewardPickupGetResponse> =>\n buildCodecForObject<RewardPickupGetResponse>()\n .property(\"reward_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 codecForExchangeWithdrawBatchResponse =\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 .property(\"pos_confirmation\", codecOptional(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 codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\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 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 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\ninterface DepositConfirmationSignature {\n // The EdDSA signature of `TALER_DepositConfirmationPS` using a current\n // `signing key of the exchange <sign-key-priv>` 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: EddsaSignatureString;\n}\n\nexport interface BatchDepositSuccess {\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 // `Public EdDSA key of the exchange <sign-key-pub>` 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: EddsaPublicKeyString;\n\n // Array of deposit confirmation signatures from the exchange\n // Entries must be in the same order the coins were given\n // in the batch deposit request.\n exchange_sig: EddsaSignatureString;\n}\n\nexport const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> =>\n buildCodecForObject<BatchDepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"BatchDepositSuccess\");\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\n/**\n * @deprecated batch deposit should be used.\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 type WireSalt = string;\n\nexport interface ExchangeBatchDepositRequest {\n // The merchant's account details.\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: WireSalt;\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 // The list of coins that are going to be deposited with this Request.\n coins: BatchDepositRequestCoin[];\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 <merchant-pub>`, so that the client can identify the\n // merchant for refund requests.\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 batch-deposit.\n // This might be a refund, auction or escrow policy.\n policy?: any;\n}\n\nexport interface BatchDepositRequestCoin {\n // EdDSA public key of the coin being deposited.\n coin_pub: EddsaPublicKeyString;\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 // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: Amounts;\n\n // Signature over `TALER_DepositRequestPS`, made by the customer with the\n // `coin's private key <coin-priv>`.\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\nexport interface ExchangeRefundRequest {\n // Amount to be refunded, can be a fraction of the\n // coin's total deposit value (including deposit fee);\n // must be larger than the refund fee.\n refund_amount: AmountString;\n\n // SHA-512 hash of the contact of the merchant with the customer.\n h_contract_terms: HashCodeString;\n\n // 64-bit transaction id of the refund transaction between merchant and customer.\n rtransaction_id: number;\n\n // EdDSA public key of the merchant.\n merchant_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the merchant over a\n // TALER_RefundRequestPS with purpose\n // TALER_SIGNATURE_MERCHANT_REFUND\n // affirming the refund.\n merchant_sig: EddsaPublicKeyString;\n}\n\nexport interface ExchangeRefundSuccessResponse {\n // The EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND over\n // a TALER_RecoupRefreshConfirmationPS\n // 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\nexport const codecForExchangeRefundSuccessResponse =\n (): Codec<ExchangeRefundSuccessResponse> =>\n buildCodecForObject<ExchangeRefundSuccessResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .build(\"ExchangeRefundSuccessResponse\");\n\nexport type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n\nexport interface DenyAllAccountRestriction {\n type: \"deny\";\n}\n\n// Accounts interacting with this type of account\n// restriction must have a payto://-URI matching\n// the given regex.\nexport interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: InternationalizedString;\n}\n\nexport interface ExchangeWireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: string;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignatureString;\n\n // Display label wallets should use to show this\n // bank account.\n // Since protocol **v19**.\n bank_label?: string;\n priority?: number;\n}\n\nexport const codecForExchangeWireAccount = (): Codec<ExchangeWireAccount> =>\n buildCodecForObject<ExchangeWireAccount>()\n .property(\"conversion_url\", codecOptional(codecForStringURL()))\n .property(\"credit_restrictions\", codecForList(codecForAny()))\n .property(\"debit_restrictions\", codecForList(codecForAny()))\n .property(\"master_sig\", codecForString())\n .property(\"payto_uri\", codecForString())\n .property(\"bank_label\", codecOptional(codecForString()))\n .property(\"priority\", codecOptional(codecForNumber()))\n .build(\"WireAccount\");\n\nexport type Integer = number;\n\nexport interface BankConversionInfoConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n regional_currency: string;\n\n fiat_currency: string;\n\n // Currency used by this bank.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency_specification: CurrencySpecification;\n}\n\nexport const codecForBankConversionInfoConfig =\n (): Codec<BankConversionInfoConfig> =>\n buildCodecForObject<BankConversionInfoConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"fiat_currency\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .build(\"BankConversionInfoConfig\");\n\nexport interface DenominationExpiredMessage {\n // Taler error code. Note that beyond\n // expiration this message format is also\n // used if the key is not yet valid, or\n // has been revoked.\n code: number;\n\n // Signature by the exchange over a\n // TALER_DenominationExpiredAffirmationPS.\n // Must have purpose TALER_SIGNATURE_EXCHANGE_AFFIRM_DENOM_EXPIRED.\n exchange_sig: EddsaSignatureString;\n\n // Public key of the exchange used to create\n // the 'exchange_sig.\n exchange_pub: EddsaPublicKeyString;\n\n // Hash of the denomination public key that is unknown.\n h_denom_pub: HashCodeString;\n\n // When was the signature created.\n timestamp: TalerProtocolTimestamp;\n\n // What kind of operation was requested that now\n // failed?\n oper: string;\n}\n\nexport const codecForDenominationExpiredMessage = () =>\n buildCodecForObject<DenominationExpiredMessage>()\n .property(\"code\", codecForNumber())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"oper\", codecForString())\n .build(\"DenominationExpiredMessage\");\n\nexport interface CoinHistoryResponse {\n // Current balance of the coin.\n balance: AmountString;\n\n // Hash of the coin's denomination.\n h_denom_pub: HashCodeString;\n\n // Transaction history for the coin.\n history: any[];\n}\n\nexport const codecForCoinHistoryResponse = () =>\n buildCodecForObject<CoinHistoryResponse>()\n .property(\"balance\", codecForAmountString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"history\", codecForAny())\n .build(\"CoinHistoryResponse\");\n", "// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n if (split) {\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n }\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n if (this.p.length)\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this_1 = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, function (offset) { return _this_1.onmember && _this_1.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.o = StrmOpt.call(this, opts, cb) || {};\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_2 = this;\n // enables reuse of this method by AsyncDecompress\n var cb = function () { _this_2.ondata.apply(_this_2, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o, cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o, cb)\n : new this.Z(this.o, cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n Decompress.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this_1 = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this_1.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this_1.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this_1.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this_1.ondata(err, dat, final);\n _this_1.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this_1 = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this_1.d & 1))\n return;\n _this_1.u.splice(-1, 1);\n _this_1.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this_1 = this;\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this_1 = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this_1 = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this_1.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this_1.k[0] == chks_3 && _this_1.c)\n _this_1.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\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 type { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport {\n TalerError,\n base64FromArrayBuffer,\n makeErrorDetail,\n stringToBytes,\n} from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AbsoluteTime, Duration } 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\" | \"PATCH\" | \"PUT\" | \"GET\" | \"DELETE\";\n headers?: { [name: string]: string | undefined };\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 * How to handle redirects.\n * Same semantics as WHATWG fetch.\n */\n redirect?: \"follow\" | \"error\" | \"manual\";\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 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\n/**\n * Read Taler error details from an HTTP response.\n */\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const contentType = httpResponse.headers.get(\"content-type\");\n if (contentType !== \"application/json\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n contentType: contentType || \"<null>\",\n },\n \"Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.\",\n );\n }\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\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 let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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\nexport async function readResponseJsonOrErrorCode<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<{ isError: boolean; response: T }> {\n let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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: !(httpResponse.status >= 200 && httpResponse.status < 300),\n response: parsedResponse,\n };\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 expectSuccessResponseOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (httpResponse.status >= 200 && httpResponse.status <= 299) {\n return;\n }\n const errResp = await readTalerErrorResponse(httpResponse);\n throwUnexpectedRequestError(httpResponse, errResp);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 = AbsoluteTime.fromMilliseconds(expiryDateMs);\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 * Only allow HTTPS connections, not plain http.\n */\n requireTls?: boolean;\n printAsCurl?: 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/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport {\n HttpResponse,\n readResponseJsonOrErrorCode,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http-common.js\";\nimport {\n Codec,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TalerErrorDetail,\n} from \"./index.js\";\n\ntype OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =\n ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;\n\nexport type OperationResult<Body, ErrorEnum, K = never> =\n | OperationOk<Body>\n | OperationAlternative<ErrorEnum, any>\n | OperationFail<ErrorEnum>\n | OperationFailWithBodyOrNever<ErrorEnum, K>;\n\nexport function isOperationOk<T, E>(\n c: OperationResult<T, E>,\n): c is OperationOk<T> {\n return c.type === \"ok\";\n}\n\nexport function isOperationFail<T, E>(\n c: OperationResult<T, E>,\n): c is OperationFail<E> {\n return c.type === \"fail\";\n}\n\n/**\n * successful operation\n */\nexport interface OperationOk<BodyT> {\n type: \"ok\";\n\n /**\n * Parsed response body.\n */\n body: BodyT;\n}\n\n/**\n * unsuccessful operation, see details\n */\nexport interface OperationFail<T> {\n type: \"fail\";\n\n /**\n * Error case (either HTTP status code or TalerErrorCode)\n */\n case: T;\n\n detail: TalerErrorDetail;\n}\n\n/**\n * unsuccessful operation, see body\n */\nexport interface OperationAlternative<T, B> {\n type: \"fail\";\n\n case: T;\n body: B;\n}\n\nexport interface OperationFailWithBody<B> {\n type: \"fail\";\n\n case: keyof B;\n body: B[OperationFailWithBody<B>[\"case\"]];\n}\n\nexport async function opSuccessFromHttp<T>(\n resp: HttpResponse,\n codec: Codec<T>,\n): Promise<OperationOk<T>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"ok\" as const, body };\n}\n\n/**\n * Success case, but instead of the body we're returning a fixed response\n * to the client.\n */\nexport function opFixedSuccess<T>(body: T): OperationOk<T> {\n return { type: \"ok\" as const, body };\n}\n\nexport function opEmptySuccess(resp: HttpResponse): OperationOk<void> {\n return { type: \"ok\" as const, body: void 0 };\n}\n\nexport async function opKnownFailureWithBody<B>(\n case_: keyof B,\n body: B[typeof case_],\n): Promise<OperationFailWithBody<B>> {\n return { type: \"fail\", case: case_, body };\n}\n\nexport async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(\n resp: HttpResponse,\n s: T,\n codec: Codec<B>,\n): Promise<OperationAlternative<T, B>> {\n const body = (await readResponseJsonOrErrorCode(resp, codec)).response;\n return { type: \"fail\", case: s, body };\n}\n\nexport async function opKnownHttpFailure<T extends HttpStatusCode>(\n s: T,\n resp: HttpResponse,\n): Promise<OperationFail<T>> {\n const detail = await readTalerErrorResponse(resp);\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opKnownTalerFailure<T extends TalerErrorCode>(\n s: T,\n detail: TalerErrorDetail,\n): OperationFail<T> {\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: resp.requestUrl,\n requestMethod: resp.requestMethod,\n httpStatusCode: resp.status,\n errorResponse: error,\n },\n `Unexpected HTTP status ${resp.status} in response`,\n );\n}\n\n/**\n * Convenience function to throw an error if the operation is not a success.\n */\nexport function narrowOpSuccessOrThrow<Body, ErrorEnum>(\n opName: string,\n opRes: OperationResult<Body, ErrorEnum>,\n): asserts opRes is OperationOk<Body> {\n if (opRes.type !== \"ok\") {\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR,\n {\n operation: opName,\n error: String(opRes.case),\n detail: \"detail\" in opRes ? opRes.detail : undefined,\n },\n `Operation ${opName} failed: ${String(opRes.case)}`,\n );\n }\n}\n\nexport type ResultByMethod<\n TT extends object,\n p extends keyof TT,\n> = TT[p] extends (...args: any[]) => infer Ret\n ? Ret extends Promise<infer Result>\n ? Result extends OperationResult<any, any>\n ? Result\n : never\n : never //api always use Promises\n : never; //error cases just for functions\n\nexport type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<\n ResultByMethod<TT, p>,\n OperationOk<any>\n>;\n\nexport type RedirectResult = { redirectURL: URL }\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\n/**\n * @fileoverview\n * Construction and parsing of taler:// URIs.\n * Specification: https://lsd.gnunet.org/lsd0006/\n */\n\n/**\n * Imports.\n */\nimport { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { opFixedSuccess, opKnownTalerFailure } from \"./operation.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { URL, URLSearchParams } from \"./url.js\";\n/**\n * A parsed taler URI.\n */\nexport type TalerUri =\n | PayUriResult\n | PayTemplateUriResult\n | DevExperimentUri\n | PayPullUriResult\n | PayPushUriResult\n | BackupRestoreUri\n | RefundUriResult\n | WithdrawUriResult\n | WithdrawExchangeUri\n | AddExchangeUri;\n\ndeclare const __action_str: unique symbol;\nexport type TalerUriString = string & { [__action_str]: true };\n\nexport function codecForTalerUriString(): Codec<TalerUriString> {\n return {\n decode(x: any, c?: Context): TalerUriString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (parseTalerUri(x) === undefined) {\n throw new DecodingError(\n `invalid taler URI at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as TalerUriString;\n },\n };\n}\n\nexport interface PayUriResult {\n type: TalerUriAction.Pay;\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken?: string;\n noncePriv?: string;\n}\n\nexport type TemplateParams = {\n amount?: string;\n summary?: string;\n};\n\nexport interface PayTemplateUriResult {\n type: TalerUriAction.PayTemplate;\n merchantBaseUrl: string;\n templateId: string;\n templateParams: TemplateParams;\n}\n\nexport interface WithdrawUriResult {\n type: TalerUriAction.Withdraw;\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n type: TalerUriAction.Refund;\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface PayPushUriResult {\n type: TalerUriAction.PayPush;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n type: TalerUriAction.PayPull;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n type: TalerUriAction.DevExperiment;\n devExperimentId: string;\n}\n\nexport interface BackupRestoreUri {\n type: TalerUriAction.Restore;\n walletRootPriv: string;\n providers: Array<string>;\n}\n\nexport interface WithdrawExchangeUri {\n type: TalerUriAction.WithdrawExchange;\n exchangeBaseUrl: string;\n exchangePub?: string;\n amount?: AmountString;\n}\n\nexport interface AddExchangeUri {\n type: TalerUriAction.AddExchange;\n exchangeBaseUrl: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"withdraw\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 const result: WithdrawUriResult = {\n type: TalerUriAction.Withdraw,\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n withdrawalOperationId: withdrawId,\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const r = parseWithdrawUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseAddExchangeUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"add-exchange\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 p = [host, ...pathSegments].join(\"/\");\n\n const result: AddExchangeUri = {\n type: TalerUriAction.AddExchange,\n exchangeBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseAddExchangeUri(s: string): AddExchangeUri | undefined {\n const r = parseAddExchangeUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * @deprecated use TalerUriAction\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\nexport enum TalerUriAction {\n Pay = \"pay\",\n Withdraw = \"withdraw\",\n Refund = \"refund\",\n PayPull = \"pay-pull\",\n PayPush = \"pay-push\",\n PayTemplate = \"pay-template\",\n Restore = \"restore\",\n DevExperiment = \"dev-experiment\",\n WithdrawExchange = \"withdraw-exchange\",\n AddExchange = \"add-exchange\",\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\nfunction parseProtoInfoWithError(s: string, action: string) {\n if (\n !s.toLowerCase().startsWith(\"taler://\") &&\n !s.toLowerCase().startsWith(\"taler+http://\")\n ) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return opFixedSuccess({\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n });\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return opFixedSuccess({\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n });\n } else {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n}\n\ntype Parser = (s: string) => TalerUri | undefined;\nconst parsers: { [A in TalerUriAction]: Parser } = {\n [TalerUriAction.Pay]: parsePayUri,\n [TalerUriAction.PayPull]: parsePayPullUri,\n [TalerUriAction.PayPush]: parsePayPushUri,\n [TalerUriAction.PayTemplate]: parsePayTemplateUri,\n [TalerUriAction.Restore]: parseRestoreUri,\n [TalerUriAction.Refund]: parseRefundUri,\n [TalerUriAction.Withdraw]: parseWithdrawUri,\n [TalerUriAction.DevExperiment]: parseDevExperimentUri,\n [TalerUriAction.WithdrawExchange]: parseWithdrawExchangeUri,\n [TalerUriAction.AddExchange]: parseAddExchangeUri,\n};\n\nexport function parseTalerUri(string: string): TalerUri | undefined {\n const https = string.startsWith(\"taler://\");\n const http = string.startsWith(\"taler+http://\");\n if (!https && !http) return undefined;\n const actionStart = https ? 8 : 13;\n const actionEnd = string.indexOf(\"/\", actionStart + 1);\n const action = string.substring(actionStart, actionEnd);\n const found = Object.values(TalerUriAction).find((x) => x === action);\n if (!found) return undefined;\n return parsers[found](string);\n}\n\nexport function stringifyTalerUri(uri: TalerUri): string {\n switch (uri.type) {\n case TalerUriAction.DevExperiment: {\n return stringifyDevExperimentUri(uri);\n }\n case TalerUriAction.Pay: {\n return stringifyPayUri(uri);\n }\n case TalerUriAction.PayPull: {\n return stringifyPayPullUri(uri);\n }\n case TalerUriAction.PayPush: {\n return stringifyPayPushUri(uri);\n }\n case TalerUriAction.PayTemplate: {\n return stringifyPayTemplateUri(uri);\n }\n case TalerUriAction.Restore: {\n return stringifyRestoreUri(uri);\n }\n case TalerUriAction.Refund: {\n return stringifyRefundUri(uri);\n }\n case TalerUriAction.Withdraw: {\n return stringifyWithdrawUri(uri);\n }\n case TalerUriAction.WithdrawExchange: {\n return stringifyWithdrawExchange(uri);\n }\n case TalerUriAction.AddExchange: {\n return stringifyAddExchange(uri);\n }\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 type: TalerUriAction.Pay,\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n uriString: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(uriString, TalerUriAction.PayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi.rest.split(\"?\");\n\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n\n const q = new URLSearchParams(c[1] ?? \"\");\n const params: Record<string, string> = {};\n q.forEach((v, k) => {\n params[k] = v;\n });\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayTemplate,\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPush);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPush,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPull);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPull,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parseWithdrawExchangeUri(\n s: string,\n): WithdrawExchangeUri | undefined {\n const pi = parseProtoInfo(s, \"withdraw-exchange\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 1) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;\n const pathSegments = parts.slice(1, parts.length - 1);\n const hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n const q = new URLSearchParams(c[1] ?? \"\");\n const amount = (q.get(\"a\") ?? undefined) as AmountString | undefined;\n\n return {\n type: TalerUriAction.WithdrawExchange,\n exchangeBaseUrl,\n exchangePub: exchangePub != \"\" ? exchangePub : undefined,\n amount,\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.Refund,\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 parts = c[0].split(\"/\");\n return {\n type: TalerUriAction.DevExperiment,\n devExperimentId: parts[0],\n };\n}\n\nexport function parseRestoreUri(uri: string): BackupRestoreUri | undefined {\n const pi = parseProtoInfo(uri, \"restore\");\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\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<string>();\n parts[1].split(\",\").map((name) => {\n const url = canonicalizeBaseUrl(\n `${pi.innerProto}://${decodeURIComponent(name)}/`,\n );\n providers.push(url);\n });\n return {\n type: TalerUriAction.Restore,\n walletRootPriv,\n providers,\n };\n}\n\n// ================================================\n// To string functions\n// ================================================\n\nexport function stringifyPayUri({\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n}: Omit<PayUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, {\n c: claimToken,\n n: noncePriv,\n });\n return `${proto}://pay/${path}${orderId}/${sessionId}${query}`;\n}\n\nexport function stringifyPayPullUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPullUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://pay-pull/${path}${contractPriv}`;\n}\n\nexport function stringifyPayPushUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPushUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n\n return `${proto}://pay-push/${path}${contractPriv}`;\n}\n\nexport function stringifyRestoreUri({\n providers,\n walletRootPriv,\n}: Omit<BackupRestoreUri, \"type\">): string {\n const list = providers\n .map((url) => `${encodeURIComponent(new URL(url).href)}`)\n .join(\",\");\n return `taler://restore/${walletRootPriv}/${list}`;\n}\n\nexport function stringifyWithdrawExchange({\n exchangeBaseUrl,\n exchangePub,\n amount,\n}: Omit<WithdrawExchangeUri, \"type\">): string {\n const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {\n a: amount,\n });\n return `${proto}://withdraw-exchange/${path}${exchangePub ?? \"\"}${query}`;\n}\n\nexport function stringifyAddExchange({\n exchangeBaseUrl,\n}: Omit<AddExchangeUri, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://add-exchange/${path}`;\n}\n\nexport function stringifyDevExperimentUri({\n devExperimentId,\n}: Omit<DevExperimentUri, \"type\">): string {\n return `taler://dev-experiment/${devExperimentId}`;\n}\n\nexport function stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams,\n}: Omit<PayTemplateUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, templateParams);\n return `${proto}://pay-template/${path}${templateId}${query}`;\n}\n\nexport function stringifyRefundUri({\n merchantBaseUrl,\n orderId,\n}: Omit<RefundUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(merchantBaseUrl);\n return `${proto}://refund/${path}${orderId}/`;\n}\n\nexport function stringifyWithdrawUri({\n bankIntegrationApiBaseUrl,\n withdrawalOperationId,\n}: Omit<WithdrawUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(bankIntegrationApiBaseUrl);\n return `${proto}://withdraw/${path}${withdrawalOperationId}`;\n}\n\n/**\n * Use baseUrl to defined http or https\n * create path using host+port+pathname\n * use params to create a query parameter string or empty\n */\nfunction getUrlInfo(\n baseUrl: string,\n params: Record<string, string | undefined> = {},\n): { proto: string; path: string; query: string } {\n const url = new URL(baseUrl);\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 URL protocol in ${baseUrl}`);\n }\n let path = url.hostname;\n if (url.port) {\n path = path + \":\" + url.port;\n }\n if (url.pathname) {\n path = path + url.pathname;\n }\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n const qp = new URLSearchParams();\n let withParams = false;\n Object.entries(params).forEach(([name, value]) => {\n if (value !== undefined) {\n withParams = true;\n qp.append(name, value);\n }\n });\n const query = withParams ? \"?\" + qp.toString() : \"\";\n\n return { proto, path, query };\n}\n", "import { deprecate } from \"util\";\nimport { codecForAmountString } from \"../amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"../codec.js\";\nimport { PaytoString, codecForPaytoString } from \"../payto.js\";\nimport {\n AmountString,\n InternationalizedString,\n codecForInternationalizedString,\n codecForLocation,\n} from \"../taler-types.js\";\nimport { TalerUriString, codecForTalerUriString } from \"../taleruri.js\";\nimport {\n AbsoluteTime,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n} from \"../time.js\";\n\nexport type UserAndPassword = {\n username: string;\n password: string;\n};\n\nexport type UserAndToken = {\n username: string;\n token: AccessToken;\n};\n\ndeclare const opaque_OfficerAccount: unique symbol;\nexport type LockedAccount = string & { [opaque_OfficerAccount]: true };\n\ndeclare const opaque_OfficerId: unique symbol;\nexport type OfficerId = string & { [opaque_OfficerId]: true };\n\ndeclare const opaque_OfficerSigningKey: unique symbol;\nexport type SigningKey = Uint8Array & { [opaque_OfficerSigningKey]: true };\n\nexport interface OfficerAccount {\n id: OfficerId;\n signingKey: SigningKey;\n}\n\nexport type PaginationParams = {\n /**\n * row identifier as the starting point of the query\n */\n offset?: string;\n /**\n * max number of element in the result response\n * always greater than 0\n */\n limit?: number;\n /**\n * order\n */\n order?: \"asc\" | \"dec\";\n};\n\nexport type LongPollParams = {\n /**\n * milliseconds the server should wait for at least one result to be shown\n */\n timeoutMs?: number;\n};\n///\n/// HASH\n///\n\n// 64-byte hash code.\ntype HashCode = string;\n\ntype PaytoHash = string;\n\ntype AmlOfficerPublicKeyP = string;\n\n// 32-byte hash code.\ntype ShortHashCode = string;\n\n// 16-byte salt.\ntype WireSalt = string;\n\ntype SHA256HashCode = ShortHashCode;\n\ntype SHA512HashCode = HashCode;\n\n// 32-byte nonce value, must only be used once.\ntype CSNonce = string;\n\n// 32-byte nonce value, must only be used once.\ntype RefreshMasterSeed = string;\n\n// 32-byte value representing a point on Curve25519.\ntype Cs25519Point = string;\n\n// 32-byte value representing a scalar multiplier\n// for scalar operations on points on Curve25519.\ntype Cs25519Scalar = string;\n\n///\n/// KEYS\n///\n\n// 16-byte access token used to authorize access.\ntype ClaimToken = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPublicKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPrivateKey = string;\n\n// Edx25519 public keys are points on Curve25519 and represented using the\n// standard 256 bits Ed25519 compact format converted to Crockford\n// Base32.\ntype Edx25519PublicKey = string;\n\n// Edx25519 private keys are always points on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype Edx25519PrivateKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePublicKey = string;\n\n// Point on Curve25519 represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype CsRPublic = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePrivateKey = string;\n\ntype CoinPublicKey = EddsaPublicKey;\n\n// RSA public key converted to Crockford Base32.\ntype RsaPublicKey = string;\n\ntype Integer = number;\n\ntype WireTransferIdentifierRawP = string;\n// Subset of numbers: Integers in the\n// inclusive range 0 .. (2^53 - 1).\ntype SafeUint64 = number;\n\n// The string must be a data URL according to RFC 2397\n// with explicit mediatype and base64 parameters.\n//\n// data:<mediatype>;base64,<data>\n//\n// Supported mediatypes are image/jpeg and image/png.\n// Invalid strings will be rejected by the wallet.\ntype ImageDataUrl = string;\n\ntype WadId = string;\n\ntype Timestamp = TalerProtocolTimestamp;\n\ntype RelativeTime = TalerProtocolDuration;\n\nexport interface LoginToken {\n token: AccessToken;\n expiration: Timestamp;\n}\n\ndeclare const __ac_token: unique symbol;\n/**\n * Use `createAccessToken(string)` function to build one.\n */\nexport type AccessToken = string & {\n [__ac_token]: true;\n};\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n * Encode the token with rfc7230 to send in a http header.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessTokenEncoded(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\")\n ? token\n : `secret-token:${encodeURIComponent(token)}`\n ) as AccessToken;\n}\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessTokenPlain(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\") ? token : `secret-token:${token}`\n ) as AccessToken;\n}\n\n/**\n * Convert string to access token.\n *\n * @param clientSecret\n * @returns\n */\nexport function createClientSecretAccessToken(\n clientSecret: string,\n): AccessToken {\n return clientSecret as AccessToken;\n}\n\ndeclare const __officer_signature: unique symbol;\nexport type OfficerSignature = string & {\n [__officer_signature]: true;\n};\n\nexport namespace TalerAuthentication {\n export interface TokenRequest {\n // Service-defined scope for the token.\n // Typical scopes would be \"readonly\" or \"readwrite\".\n scope: string;\n\n // Server may impose its own upper bound\n // on the token validity duration\n duration?: RelativeTime;\n\n // Is the token refreshable into a new token during its\n // validity?\n // Refreshable tokens effectively provide indefinite\n // access if they are refreshed in time.\n refreshable?: boolean;\n }\n\n export interface TokenSuccessResponse {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n access_token: AccessToken;\n }\n export interface TokenSuccessResponseMerchant {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n token: AccessToken;\n }\n}\n\n// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html\nexport interface CurrencySpecification {\n // Name of the currency.\n name: string;\n\n // how many digits the user may enter after the decimal_separator\n num_fractional_input_digits: Integer;\n\n // Number of fractional digits to render in normal font and size.\n num_fractional_normal_digits: Integer;\n\n // Number of fractional digits to render always, if needed by\n // padding with zeros.\n num_fractional_trailing_zero_digits: Integer;\n\n // map of powers of 10 to alternative currency names / symbols, must\n // always have an entry under \"0\" that defines the base name,\n // e.g. \"0 => \u20AC\" or \"3 => k\u20AC\". For BTC, would be \"0 => BTC, -3 => mBTC\".\n // Communicates the currency symbol to be used.\n alt_unit_names: { [log10: string]: string };\n}\n\n//FIXME: implement this codec\nexport const codecForAccessToken = codecForString as () => Codec<AccessToken>;\nexport const codecForTokenSuccessResponse =\n (): Codec<TalerAuthentication.TokenSuccessResponse> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponse>()\n .property(\"access_token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponse\");\n\nexport const codecForTokenSuccessResponseMerchant =\n (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()\n .property(\"token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponseMerchant\");\n\nexport const codecForCurrencySpecificiation =\n (): Codec<CurrencySpecification> =>\n buildCodecForObject<CurrencySpecification>()\n .property(\"name\", codecForString())\n .property(\"num_fractional_input_digits\", codecForNumber())\n .property(\"num_fractional_normal_digits\", codecForNumber())\n .property(\"num_fractional_trailing_zero_digits\", codecForNumber())\n .property(\"alt_unit_names\", codecForMap(codecForString()))\n .build(\"CurrencySpecification\");\n\nexport const codecForIntegrationBankConfig =\n (): Codec<TalerCorebankApi.IntegrationConfig> =>\n buildCodecForObject<TalerCorebankApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .build(\"TalerCorebankApi.IntegrationConfig\");\n\nexport const codecForCoreBankConfig = (): Codec<TalerCorebankApi.Config> =>\n buildCodecForObject<TalerCorebankApi.Config>()\n .property(\"name\", codecForConstString(\"libeufin-bank\"))\n .property(\"version\", codecForString())\n .property(\"bank_name\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"allow_conversion\", codecForBoolean())\n .property(\"allow_registrations\", codecForBoolean())\n .property(\"allow_deletions\", codecForBoolean())\n .property(\"allow_edit_name\", codecForBoolean())\n .property(\"allow_edit_cashout_payto_uri\", codecForBoolean())\n .property(\"default_debit_threshold\", codecForAmountString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"supported_tan_channels\",\n codecForList(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\"wire_type\", codecForString())\n .build(\"TalerCorebankApi.Config\");\n\n//FIXME: implement this codec\nexport const codecForURN = codecForString;\n\nexport const codecForExchangeConfigInfo =\n (): Codec<TalerMerchantApi.ExchangeConfigInfo> =>\n buildCodecForObject<TalerMerchantApi.ExchangeConfigInfo>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"master_pub\", codecForString())\n .build(\"TalerMerchantApi.ExchangeConfigInfo\");\n\nexport const codecForMerchantConfig =\n (): Codec<TalerMerchantApi.VersionResponse> =>\n buildCodecForObject<TalerMerchantApi.VersionResponse>()\n .property(\"name\", codecForConstString(\"taler-merchant\"))\n .property(\"currency\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currencies\", codecForMap(codecForCurrencySpecificiation()))\n .property(\"exchanges\", codecForList(codecForExchangeConfigInfo()))\n .build(\"TalerMerchantApi.VersionResponse\");\n\nexport const codecForClaimResponse =\n (): Codec<TalerMerchantApi.ClaimResponse> =>\n buildCodecForObject<TalerMerchantApi.ClaimResponse>()\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.ClaimResponse\");\n\nexport const codecForPaymentResponse =\n (): Codec<TalerMerchantApi.PaymentResponse> =>\n buildCodecForObject<TalerMerchantApi.PaymentResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForStatusPaid = (): Codec<TalerMerchantApi.StatusPaid> =>\n buildCodecForObject<TalerMerchantApi.StatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refunded\", codecForBoolean())\n .property(\"type\", codecForConstString(\"paid\"))\n .build(\"TalerMerchantApi.StatusPaid\");\n\nexport const codecForStatusGoto =\n (): Codec<TalerMerchantApi.StatusGotoResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusGotoResponse>()\n .property(\"public_reorder_url\", codecForURL())\n .property(\"type\", codecForConstString(\"goto\"))\n .build(\"TalerMerchantApi.StatusGotoResponse\");\n\nexport const codecForStatusStatusUnpaid =\n (): Codec<TalerMerchantApi.StatusUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusUnpaidResponse>()\n .property(\"type\", codecForConstString(\"unpaid\"))\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForPaidRefundStatusResponse =\n (): Codec<TalerMerchantApi.PaidRefundStatusResponse> =>\n buildCodecForObject<TalerMerchantApi.PaidRefundStatusResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"refunded\", codecForBoolean())\n .build(\"TalerMerchantApi.PaidRefundStatusResponse\");\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse =\n (): Codec<TalerMerchantApi.AbortResponse> =>\n buildCodecForObject<TalerMerchantApi.AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForWalletRefundResponse =\n (): Codec<TalerMerchantApi.WalletRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.WalletRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantCoinRefundStatus\");\n\nexport const codecForQueryInstancesResponse =\n (): Codec<TalerMerchantApi.QueryInstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.QueryInstancesResponse>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"merchant_pub\", codecForString())\n .property(\"address\", codecForLocation())\n .property(\"jurisdiction\", codecForLocation())\n .property(\"use_stefan\", codecForBoolean())\n .property(\"default_wire_transfer_delay\", codecForDuration)\n .property(\"default_pay_delay\", codecForDuration)\n .property(\n \"auth\",\n buildCodecForObject<{\n method: \"external\" | \"token\";\n }>()\n .property(\n \"method\",\n codecForEither(\n codecForConstString(\"token\"),\n codecForConstString(\"external\"),\n ),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse.auth\"),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse\");\n\nexport const codecForAccountKycRedirects =\n (): Codec<TalerMerchantApi.AccountKycRedirects> =>\n buildCodecForObject<TalerMerchantApi.AccountKycRedirects>()\n .property(\n \"pending_kycs\",\n codecForList(codecForMerchantAccountKycRedirect()),\n )\n .property(\"timeout_kycs\", codecForList(codecForExchangeKycTimeout()))\n\n .build(\"TalerMerchantApi.AccountKycRedirects\");\n\nexport const codecForMerchantAccountKycRedirect =\n (): Codec<TalerMerchantApi.MerchantAccountKycRedirect> =>\n buildCodecForObject<TalerMerchantApi.MerchantAccountKycRedirect>()\n .property(\"kyc_url\", codecForURL())\n .property(\"aml_status\", codecForNumber())\n .property(\"exchange_url\", codecForURL())\n .property(\"payto_uri\", codecForPaytoString())\n .build(\"TalerMerchantApi.MerchantAccountKycRedirect\");\n\nexport const codecForExchangeKycTimeout =\n (): Codec<TalerMerchantApi.ExchangeKycTimeout> =>\n buildCodecForObject<TalerMerchantApi.ExchangeKycTimeout>()\n .property(\"exchange_url\", codecForURL())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .build(\"TalerMerchantApi.ExchangeKycTimeout\");\n\nexport const codecForAccountAddResponse =\n (): Codec<TalerMerchantApi.AccountAddResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountAddResponse>()\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .build(\"TalerMerchantApi.AccountAddResponse\");\n\nexport const codecForAccountsSummaryResponse =\n (): Codec<TalerMerchantApi.AccountsSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountsSummaryResponse>()\n .property(\"accounts\", codecForList(codecForBankAccountSummaryEntry()))\n .build(\"TalerMerchantApi.AccountsSummaryResponse\");\n\nexport const codecForBankAccountSummaryEntry =\n (): Codec<TalerMerchantApi.BankAccountSummaryEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountSummaryEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .build(\"TalerMerchantApi.BankAccountSummaryEntry\");\n\nexport const codecForBankAccountEntry =\n (): Codec<TalerMerchantApi.BankAccountEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .property(\"credit_facade_url\", codecOptional(codecForURL()))\n .property(\"active\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.BankAccountEntry\");\n\nexport const codecForInventorySummaryResponse =\n (): Codec<TalerMerchantApi.InventorySummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.InventorySummaryResponse>()\n .property(\"products\", codecForList(codecForInventoryEntry()))\n .build(\"TalerMerchantApi.InventorySummaryResponse\");\n\nexport const codecForInventoryEntry =\n (): Codec<TalerMerchantApi.InventoryEntry> =>\n buildCodecForObject<TalerMerchantApi.InventoryEntry>()\n .property(\"product_id\", codecForString())\n .property(\"product_serial\", codecForNumber())\n .build(\"TalerMerchantApi.InventoryEntry\");\n\nexport const codecForProductDetail =\n (): Codec<TalerMerchantApi.ProductDetail> =>\n buildCodecForObject<TalerMerchantApi.ProductDetail>()\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"unit\", codecForString())\n .property(\"price\", codecForAmountString())\n .property(\"image\", codecForString())\n .property(\"taxes\", codecForList(codecForTax()))\n .property(\"address\", codecForLocation())\n .property(\"next_restock\", codecForTimestamp)\n .property(\"total_stock\", codecForNumber())\n .property(\"total_sold\", codecForNumber())\n .property(\"total_lost\", codecForNumber())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"TalerMerchantApi.ProductDetail\");\n\nexport const codecForTax = (): Codec<TalerMerchantApi.Tax> =>\n buildCodecForObject<TalerMerchantApi.Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForAmountString())\n .build(\"TalerMerchantApi.Tax\");\n\nexport const codecForPostOrderResponse =\n (): Codec<TalerMerchantApi.PostOrderResponse> =>\n buildCodecForObject<TalerMerchantApi.PostOrderResponse>()\n .property(\"order_id\", codecForString())\n .property(\"token\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.PostOrderResponse\");\n\nexport const codecForOutOfStockResponse =\n (): Codec<TalerMerchantApi.OutOfStockResponse> =>\n buildCodecForObject<TalerMerchantApi.OutOfStockResponse>()\n .property(\"product_id\", codecForString())\n .property(\"available_quantity\", codecForNumber())\n .property(\"requested_quantity\", codecForNumber())\n .property(\"restock_expected\", codecForTimestamp)\n .build(\"TalerMerchantApi.OutOfStockResponse\");\n\nexport const codecForOrderHistory = (): Codec<TalerMerchantApi.OrderHistory> =>\n buildCodecForObject<TalerMerchantApi.OrderHistory>()\n .property(\"orders\", codecForList(codecForOrderHistoryEntry()))\n .build(\"TalerMerchantApi.OrderHistory\");\n\nexport const codecForOrderHistoryEntry =\n (): Codec<TalerMerchantApi.OrderHistoryEntry> =>\n buildCodecForObject<TalerMerchantApi.OrderHistoryEntry>()\n .property(\"order_id\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"refundable\", codecForBoolean())\n .property(\"paid\", codecForBoolean())\n .build(\"TalerMerchantApi.OrderHistoryEntry\");\n\nexport const codecForMerchant = (): Codec<TalerMerchantApi.Merchant> =>\n buildCodecForObject<TalerMerchantApi.Merchant>()\n .property(\"name\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"TalerMerchantApi.MerchantInfo\");\n\nexport const codecForExchange = (): Codec<TalerMerchantApi.Exchange> =>\n buildCodecForObject<TalerMerchantApi.Exchange>()\n .property(\"master_pub\", codecForString())\n .property(\"priority\", codecForNumber())\n .property(\"url\", codecForString())\n .build(\"TalerMerchantApi.Exchange\");\n\nexport const codecForContractTerms =\n (): Codec<TalerMerchantApi.ContractTerms> =>\n buildCodecForObject<TalerMerchantApi.ContractTerms>()\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(\n \"summary_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"merchant\", codecForMerchant())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchange()))\n .property(\"products\", codecForList(codecForProduct()))\n .property(\"extra\", codecForAny())\n .build(\"TalerMerchantApi.ContractTerms\");\n\nexport const codecForProduct = (): Codec<TalerMerchantApi.Product> =>\n buildCodecForObject<TalerMerchantApi.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(codecForAmountString()))\n .property(\"image\", codecOptional(codecForString()))\n .property(\"taxes\", codecOptional(codecForList(codecForTax())))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .build(\"TalerMerchantApi.Product\");\n\nexport const codecForCheckPaymentPaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentPaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentPaidResponse>()\n .property(\"order_status\", codecForConstString(\"paid\"))\n .property(\"refunded\", codecForBoolean())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"wired\", codecForBoolean())\n .property(\"deposit_total\", codecForAmountString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"wire_reports\", codecForList(codecForTransactionWireReport()))\n .property(\"wire_details\", codecForList(codecForTransactionWireTransfer()))\n .property(\"refund_details\", codecForList(codecForRefundDetails()))\n .property(\"order_status_url\", codecForURL())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentUnpaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentUnpaidResponse>()\n .property(\"order_status\", codecForConstString(\"unpaid\"))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .property(\"creation_time\", codecForTimestamp)\n .property(\"summary\", codecForString())\n .property(\"total_amount\", codecForAmountString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"already_paid_fulfillment_url\", codecOptional(codecForString()))\n .property(\"order_status_url\", codecForString())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentClaimedResponse =\n (): Codec<TalerMerchantApi.CheckPaymentClaimedResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentClaimedResponse>()\n .property(\"order_status\", codecForConstString(\"claimed\"))\n .property(\"contract_terms\", codecForContractTerms())\n .build(\"TalerMerchantApi.CheckPaymentClaimedResponse\");\n\nexport const codecForMerchantOrderPrivateStatusResponse =\n (): Codec<TalerMerchantApi.MerchantOrderStatusResponse> =>\n buildCodecForUnion<TalerMerchantApi.MerchantOrderStatusResponse>()\n .discriminateOn(\"order_status\")\n .alternative(\"paid\", codecForCheckPaymentPaidResponse())\n .alternative(\"unpaid\", codecForCheckPaymentUnpaidResponse())\n .alternative(\"claimed\", codecForCheckPaymentClaimedResponse())\n .build(\"TalerMerchantApi.MerchantOrderStatusResponse\");\n\nexport const codecForRefundDetails =\n (): Codec<TalerMerchantApi.RefundDetails> =>\n buildCodecForObject<TalerMerchantApi.RefundDetails>()\n .property(\"reason\", codecForString())\n .property(\"pending\", codecForBoolean())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .build(\"TalerMerchantApi.RefundDetails\");\n\nexport const codecForTransactionWireTransfer =\n (): Codec<TalerMerchantApi.TransactionWireTransfer> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireTransfer>()\n .property(\"exchange_url\", codecForURL())\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"confirmed\", codecForBoolean())\n .build(\"TalerMerchantApi.TransactionWireTransfer\");\n\nexport const codecForTransactionWireReport =\n (): Codec<TalerMerchantApi.TransactionWireReport> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireReport>()\n .property(\"code\", codecForNumber())\n .property(\"hint\", codecForString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"coin_pub\", codecForString())\n .build(\"TalerMerchantApi.TransactionWireReport\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<TalerMerchantApi.MerchantRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.MerchantRefundResponse>()\n .property(\"taler_refund_uri\", codecForTalerUriString())\n .property(\"h_contract\", codecForString())\n .build(\"TalerMerchantApi.MerchantRefundResponse\");\n\nexport const codecForTansferList = (): Codec<TalerMerchantApi.TransferList> =>\n buildCodecForObject<TalerMerchantApi.TransferList>()\n .property(\"transfers\", codecForList(codecForTransferDetails()))\n .build(\"TalerMerchantApi.TransferList\");\n\nexport const codecForTransferDetails =\n (): Codec<TalerMerchantApi.TransferDetails> =>\n buildCodecForObject<TalerMerchantApi.TransferDetails>()\n .property(\"credit_amount\", codecForAmountString())\n .property(\"wtid\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"exchange_url\", codecForURL())\n .property(\"transfer_serial_id\", codecForNumber())\n .property(\"execution_time\", codecOptional(codecForTimestamp))\n .property(\"verified\", codecOptional(codecForBoolean()))\n .property(\"confirmed\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.TransferDetails\");\n\nexport const codecForOtpDeviceSummaryResponse =\n (): Codec<TalerMerchantApi.OtpDeviceSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceSummaryResponse>()\n .property(\"otp_devices\", codecForList(codecForOtpDeviceEntry()))\n .build(\"TalerMerchantApi.OtpDeviceSummaryResponse\");\n\nexport const codecForOtpDeviceEntry =\n (): Codec<TalerMerchantApi.OtpDeviceEntry> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceEntry>()\n .property(\"otp_device_id\", codecForString())\n .property(\"device_description\", codecForString())\n .build(\"TalerMerchantApi.OtpDeviceEntry\");\n\nexport const codecForOtpDeviceDetails =\n (): Codec<TalerMerchantApi.OtpDeviceDetails> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceDetails>()\n .property(\"device_description\", codecForString())\n .property(\"otp_algorithm\", codecForNumber())\n .property(\"otp_ctr\", codecOptional(codecForNumber()))\n .property(\"otp_timestamp\", codecForNumber())\n .property(\"otp_code\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.OtpDeviceDetails\");\n\nexport const codecForTemplateSummaryResponse =\n (): Codec<TalerMerchantApi.TemplateSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.TemplateSummaryResponse>()\n .property(\"templates\", codecForList(codecForTemplateEntry()))\n .build(\"TalerMerchantApi.TemplateSummaryResponse\");\n\nexport const codecForTemplateEntry =\n (): Codec<TalerMerchantApi.TemplateEntry> =>\n buildCodecForObject<TalerMerchantApi.TemplateEntry>()\n .property(\"template_id\", codecForString())\n .property(\"template_description\", codecForString())\n .build(\"TalerMerchantApi.TemplateEntry\");\n\nexport const codecForTemplateDetails =\n (): Codec<TalerMerchantApi.TemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateDetails>()\n .property(\"template_description\", codecForString())\n .property(\"otp_id\", codecOptional(codecForString()))\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.TemplateDetails\");\n\nexport const codecForTemplateContractDetails =\n (): Codec<TalerMerchantApi.TemplateContractDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetails>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecForNumber())\n .property(\"pay_duration\", codecForDuration)\n .build(\"TalerMerchantApi.TemplateContractDetails\");\n\nexport const codecForTemplateContractDetailsDefaults =\n (): Codec<TalerMerchantApi.TemplateContractDetailsDefaults> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetailsDefaults>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .property(\"pay_duration\", codecOptional(codecForDuration))\n .build(\"TalerMerchantApi.TemplateContractDetailsDefaults\");\n\nexport const codecForWalletTemplateDetails =\n (): Codec<TalerMerchantApi.WalletTemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.WalletTemplateDetails>()\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.WalletTemplateDetails\");\n\nexport const codecForWebhookSummaryResponse =\n (): Codec<TalerMerchantApi.WebhookSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.WebhookSummaryResponse>()\n .property(\"webhooks\", codecForList(codecForWebhookEntry()))\n .build(\"TalerMerchantApi.WebhookSummaryResponse\");\n\nexport const codecForWebhookEntry = (): Codec<TalerMerchantApi.WebhookEntry> =>\n buildCodecForObject<TalerMerchantApi.WebhookEntry>()\n .property(\"webhook_id\", codecForString())\n .property(\"event_type\", codecForString())\n .build(\"TalerMerchantApi.WebhookEntry\");\n\nexport const codecForWebhookDetails =\n (): Codec<TalerMerchantApi.WebhookDetails> =>\n buildCodecForObject<TalerMerchantApi.WebhookDetails>()\n .property(\"event_type\", codecForString())\n .property(\"url\", codecForString())\n .property(\"http_method\", codecForString())\n .property(\"header_template\", codecOptional(codecForString()))\n .property(\"body_template\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.WebhookDetails\");\n\nexport const codecForTokenFamilyKind =\n (): Codec<TalerMerchantApi.TokenFamilyKind> =>\n codecForEither(\n codecForConstString(\"discount\"),\n codecForConstString(\"subscription\"),\n ) as any; //FIXME: create a codecForEnum\nexport const codecForTokenFamilyDetails =\n (): Codec<TalerMerchantApi.TokenFamilyDetails> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilyDetails>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"duration\", codecForDuration)\n .property(\"kind\", codecForTokenFamilyKind())\n .property(\"issued\", codecForNumber())\n .property(\"redeemed\", codecForNumber())\n .build(\"TalerMerchantApi.TokenFamilyDetails\");\n\nexport const codecForTokenFamiliesList =\n (): Codec<TalerMerchantApi.TokenFamiliesList> =>\n buildCodecForObject<TalerMerchantApi.TokenFamiliesList>()\n .property(\"token_families\", codecForList(codecForTokenFamilySummary()))\n .build(\"TalerMerchantApi.TokenFamiliesList\");\n\nexport const codecForTokenFamilySummary =\n (): Codec<TalerMerchantApi.TokenFamilySummary> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilySummary>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"kind\", codecForTokenFamilyKind())\n .build(\"TalerMerchantApi.TokenFamilySummary\");\n\nexport const codecForInstancesResponse =\n (): Codec<TalerMerchantApi.InstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.InstancesResponse>()\n .property(\"instances\", codecForList(codecForInstance()))\n .build(\"TalerMerchantApi.InstancesResponse\");\n\nexport const codecForInstance = (): Codec<TalerMerchantApi.Instance> =>\n buildCodecForObject<TalerMerchantApi.Instance>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"id\", codecForString())\n .property(\"merchant_pub\", codecForString())\n .property(\"payment_targets\", codecForList(codecForString()))\n .property(\"deleted\", codecForBoolean())\n .build(\"TalerMerchantApi.Instance\");\n\nexport const codecForExchangeConfig =\n (): Codec<TalerExchangeApi.ExchangeVersionResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeVersionResponse>()\n .property(\"version\", codecForString())\n .property(\"name\", codecForConstString(\"taler-exchange\"))\n .property(\"implementation\", codecOptional(codecForURN()))\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"supported_kyc_requirements\", codecForList(codecForString()))\n .build(\"TalerExchangeApi.ExchangeVersionResponse\");\n\nexport const codecForExchangeKeys =\n (): Codec<TalerExchangeApi.ExchangeKeysResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeKeysResponse>()\n .property(\"version\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"TalerExchangeApi.ExchangeKeysResponse\");\n\nconst codecForBalance = (): Codec<TalerCorebankApi.Balance> =>\n buildCodecForObject<TalerCorebankApi.Balance>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"credit_debit_indicator\",\n codecForEither(\n codecForConstString(\"credit\"),\n codecForConstString(\"debit\"),\n ),\n )\n .build(\"TalerCorebankApi.Balance\");\n\nconst codecForPublicAccount = (): Codec<TalerCorebankApi.PublicAccount> =>\n buildCodecForObject<TalerCorebankApi.PublicAccount>()\n .property(\"username\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.PublicAccount\");\n\nexport const codecForPublicAccountsResponse =\n (): Codec<TalerCorebankApi.PublicAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.PublicAccountsResponse>()\n .property(\"public_accounts\", codecForList(codecForPublicAccount()))\n .build(\"TalerCorebankApi.PublicAccountsResponse\");\n\nexport const codecForAccountMinimalData =\n (): Codec<TalerCorebankApi.AccountMinimalData> =>\n buildCodecForObject<TalerCorebankApi.AccountMinimalData>()\n .property(\"username\", codecForString())\n .property(\"name\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"balance\", codecForBalance())\n .property(\"row_id\", codecForNumber())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"min_cashout\", codecOptional(codecForAmountString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"status\",\n codecOptional(\n codecForEither(\n codecForConstString(\"active\"),\n codecForConstString(\"deleted\"),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountMinimalData\");\n\nexport const codecForListBankAccountsResponse =\n (): Codec<TalerCorebankApi.ListBankAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.ListBankAccountsResponse>()\n .property(\"accounts\", codecForList(codecForAccountMinimalData()))\n .build(\"TalerCorebankApi.ListBankAccountsResponse\");\n\nexport const codecForAccountData = (): Codec<TalerCorebankApi.AccountData> =>\n buildCodecForObject<TalerCorebankApi.AccountData>()\n .property(\"name\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"min_cashout\", codecOptional(codecForAmountString()))\n .property(\"contact_data\", codecOptional(codecForChallengeContactData()))\n .property(\"cashout_payto_uri\", codecOptional(codecForPaytoString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"tan_channel\",\n codecOptional(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\n \"status\",\n codecOptional(\n codecForEither(\n codecForConstString(\"active\"),\n codecForConstString(\"deleted\"),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountData\");\n\nexport const codecForChallengeContactData =\n (): Codec<TalerCorebankApi.ChallengeContactData> =>\n buildCodecForObject<TalerCorebankApi.ChallengeContactData>()\n .property(\"email\", codecOptional(codecForString()))\n .property(\"phone\", codecOptional(codecForString()))\n .build(\"TalerCorebankApi.ChallengeContactData\");\n\nexport const codecForWithdrawalPublicInfo =\n (): Codec<TalerCorebankApi.WithdrawalPublicInfo> =>\n buildCodecForObject<TalerCorebankApi.WithdrawalPublicInfo>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"username\", codecForString())\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\n \"selected_exchange_account\",\n codecOptional(codecForPaytoString()),\n )\n .build(\"TalerCorebankApi.WithdrawalPublicInfo\");\n\nexport const codecForBankAccountTransactionsResponse =\n (): Codec<TalerCorebankApi.BankAccountTransactionsResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionsResponse>()\n .property(\n \"transactions\",\n codecForList(codecForBankAccountTransactionInfo()),\n )\n .build(\"TalerCorebankApi.BankAccountTransactionsResponse\");\n\nexport const codecForBankAccountTransactionInfo =\n (): Codec<TalerCorebankApi.BankAccountTransactionInfo> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionInfo>()\n .property(\"creditor_payto_uri\", codecForPaytoString())\n .property(\"debtor_payto_uri\", codecForPaytoString())\n .property(\"amount\", codecForAmountString())\n .property(\n \"direction\",\n codecForEither(\n codecForConstString(\"debit\"),\n codecForConstString(\"credit\"),\n ),\n )\n .property(\"subject\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"date\", codecForTimestamp)\n .build(\"TalerCorebankApi.BankAccountTransactionInfo\");\n\nexport const codecForCreateTransactionResponse =\n (): Codec<TalerCorebankApi.CreateTransactionResponse> =>\n buildCodecForObject<TalerCorebankApi.CreateTransactionResponse>()\n .property(\"row_id\", codecForNumber())\n .build(\"TalerCorebankApi.CreateTransactionResponse\");\n\nexport const codecForRegisterAccountResponse =\n (): Codec<TalerCorebankApi.RegisterAccountResponse> =>\n buildCodecForObject<TalerCorebankApi.RegisterAccountResponse>()\n .property(\"internal_payto_uri\", codecForPaytoString())\n .build(\"TalerCorebankApi.RegisterAccountResponse\");\n\nexport const codecForBankAccountCreateWithdrawalResponse =\n (): Codec<TalerCorebankApi.BankAccountCreateWithdrawalResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountCreateWithdrawalResponse>()\n .property(\"taler_withdraw_uri\", codecForTalerUriString())\n .property(\"withdrawal_id\", codecForString())\n .build(\"TalerCorebankApi.BankAccountCreateWithdrawalResponse\");\n\nexport const codecForCashoutPending =\n (): Codec<TalerCorebankApi.CashoutResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutResponse>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutPending\");\n\nexport const codecForCashoutConversionResponse =\n (): Codec<TalerBankConversionApi.CashoutConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashoutConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashoutConversionResponse\");\n\nexport const codecForCashinConversionResponse =\n (): Codec<TalerBankConversionApi.CashinConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashinConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashinConversionResponse\");\n\nexport const codecForCashouts = (): Codec<TalerCorebankApi.Cashouts> =>\n buildCodecForObject<TalerCorebankApi.Cashouts>()\n .property(\"cashouts\", codecForList(codecForCashoutInfo()))\n .build(\"TalerCorebankApi.Cashouts\");\n\nexport const codecForCashoutInfo = (): Codec<TalerCorebankApi.CashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.CashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutInfo\");\n\nexport const codecForGlobalCashouts =\n (): Codec<TalerCorebankApi.GlobalCashouts> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashouts>()\n .property(\"cashouts\", codecForList(codecForGlobalCashoutInfo()))\n .build(\"TalerCorebankApi.GlobalCashouts\");\n\nexport const codecForGlobalCashoutInfo =\n (): Codec<TalerCorebankApi.GlobalCashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .property(\"username\", codecForString())\n .build(\"TalerCorebankApi.GlobalCashoutInfo\");\n\nexport const codecForCashoutStatusResponse =\n (): Codec<TalerCorebankApi.CashoutStatusResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutStatusResponse>()\n .property(\"amount_debit\", codecForAmountString())\n .property(\"amount_credit\", codecForAmountString())\n .property(\"subject\", codecForString())\n .property(\"creation_time\", codecForTimestamp)\n .build(\"TalerCorebankApi.CashoutStatusResponse\");\n\nexport const codecForConversionRatesResponse =\n (): Codec<TalerCorebankApi.ConversionRatesResponse> =>\n buildCodecForObject<TalerCorebankApi.ConversionRatesResponse>()\n .property(\"buy_at_ratio\", codecForDecimalNumber())\n .property(\"buy_in_fee\", codecForDecimalNumber())\n .property(\"sell_at_ratio\", codecForDecimalNumber())\n .property(\"sell_out_fee\", codecForDecimalNumber())\n .build(\"TalerCorebankApi.ConversionRatesResponse\");\n\nexport const codecForMonitorResponse =\n (): Codec<TalerCorebankApi.MonitorResponse> =>\n buildCodecForUnion<TalerCorebankApi.MonitorResponse>()\n .discriminateOn(\"type\")\n .alternative(\"no-conversions\", codecForMonitorNoConversion())\n .alternative(\"with-conversions\", codecForMonitorWithCashout())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForMonitorNoConversion =\n (): Codec<TalerCorebankApi.MonitorNoConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorNoConversion>()\n .property(\"type\", codecForConstString(\"no-conversions\"))\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorJustPayouts\");\n\nexport const codecForMonitorWithCashout =\n (): Codec<TalerCorebankApi.MonitorWithConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorWithConversion>()\n .property(\"type\", codecForConstString(\"with-conversions\"))\n .property(\"cashinCount\", codecForNumber())\n .property(\"cashinFiatVolume\", codecForAmountString())\n .property(\"cashinRegionalVolume\", codecForAmountString())\n .property(\"cashoutCount\", codecForNumber())\n .property(\"cashoutFiatVolume\", codecForAmountString())\n .property(\"cashoutRegionalVolume\", codecForAmountString())\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorWithCashout\");\n\nexport const codecForBankVersion =\n (): Codec<TalerBankIntegrationApi.BankVersion> =>\n buildCodecForObject<TalerBankIntegrationApi.BankVersion>()\n .property(\"currency\", codecForCurrencyName())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForLibtoolVersion())\n .build(\"TalerBankIntegrationApi.BankVersion\");\n\nexport const codecForBankWithdrawalOperationStatus =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"sender_wire\", codecOptional(codecForPaytoString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .property(\"wire_types\", codecForList(codecForString()))\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\"selected_exchange_account\", codecOptional(codecForString()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationStatus\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationPostResponse\");\n\nexport const codecForRevenueConfig = (): Codec<TalerRevenueApi.RevenueConfig> =>\n buildCodecForObject<TalerRevenueApi.RevenueConfig>()\n .property(\"name\", codecForConstString(\"taler-revenue\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"TalerRevenueApi.RevenueConfig\");\n\nexport const codecForRevenueIncomingHistory =\n (): Codec<TalerRevenueApi.RevenueIncomingHistory> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForRevenueIncomingBankTransaction()),\n )\n .build(\"TalerRevenueApi.MerchantIncomingHistory\");\n\nexport const codecForRevenueIncomingBankTransaction =\n (): Codec<TalerRevenueApi.RevenueIncomingBankTransaction> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"row_id\", codecForNumber())\n .property(\"subject\", codecForString())\n .build(\"TalerRevenueApi.RevenueIncomingBankTransaction\");\n\nexport const codecForTransferResponse =\n (): Codec<TalerWireGatewayApi.TransferResponse> =>\n buildCodecForObject<TalerWireGatewayApi.TransferResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.TransferResponse\");\n\nexport const codecForIncomingHistory =\n (): Codec<TalerWireGatewayApi.IncomingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForIncomingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.IncomingHistory\");\n\nexport const codecForIncomingBankTransaction =\n (): Codec<TalerWireGatewayApi.IncomingBankTransaction> =>\n buildCodecForUnion<TalerWireGatewayApi.IncomingBankTransaction>()\n .discriminateOn(\"type\")\n .alternative(\"RESERVE\", codecForIncomingReserveTransaction())\n .alternative(\"WAD\", codecForIncomingWadTransaction())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForIncomingReserveTransaction =\n (): Codec<TalerWireGatewayApi.IncomingReserveTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingReserveTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"reserve_pub\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"RESERVE\"))\n .build(\"TalerWireGatewayApi.IncomingReserveTransaction\");\n\nexport const codecForIncomingWadTransaction =\n (): Codec<TalerWireGatewayApi.IncomingWadTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingWadTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"origin_exchange_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"WAD\"))\n .property(\"wad_id\", codecForString())\n .build(\"TalerWireGatewayApi.IncomingWadTransaction\");\n\nexport const codecForOutgoingHistory =\n (): Codec<TalerWireGatewayApi.OutgoingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingHistory>()\n .property(\"debit_account\", codecForPaytoString())\n .property(\n \"outgoing_transactions\",\n codecForList(codecForOutgoingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.OutgoingHistory\");\n\nexport const codecForOutgoingBankTransaction =\n (): Codec<TalerWireGatewayApi.OutgoingBankTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"exchange_base_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"wtid\", codecForString())\n .build(\"TalerWireGatewayApi.OutgoingBankTransaction\");\n\nexport const codecForAddIncomingResponse =\n (): Codec<TalerWireGatewayApi.AddIncomingResponse> =>\n buildCodecForObject<TalerWireGatewayApi.AddIncomingResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.AddIncomingResponse\");\n\nexport const codecForAmlRecords = (): Codec<TalerExchangeApi.AmlRecords> =>\n buildCodecForObject<TalerExchangeApi.AmlRecords>()\n .property(\"records\", codecForList(codecForAmlRecord()))\n .build(\"TalerExchangeApi.AmlRecords\");\n\nexport const codecForAmlRecord = (): Codec<TalerExchangeApi.AmlRecord> =>\n buildCodecForObject<TalerExchangeApi.AmlRecord>()\n .property(\"current_state\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .property(\"rowid\", codecForNumber())\n .property(\"threshold\", codecForAmountString())\n .build(\"TalerExchangeApi.AmlRecord\");\n\nexport const codecForAmlDecisionDetails =\n (): Codec<TalerExchangeApi.AmlDecisionDetails> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetails>()\n .property(\"aml_history\", codecForList(codecForAmlDecisionDetail()))\n .property(\"kyc_attributes\", codecForList(codecForKycDetail()))\n .build(\"TalerExchangeApi.AmlDecisionDetails\");\n\nexport const codecForAmlDecisionDetail =\n (): Codec<TalerExchangeApi.AmlDecisionDetail> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetail>()\n .property(\"justification\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"new_threshold\", codecForAmountString())\n .property(\"decider_pub\", codecForString())\n .build(\"TalerExchangeApi.AmlDecisionDetail\");\n\nexport const codecForChallenge = (): Codec<TalerCorebankApi.Challenge> =>\n buildCodecForObject<TalerCorebankApi.Challenge>()\n .property(\"challenge_id\", codecForNumber())\n .build(\"TalerCorebankApi.Challenge\");\n\nexport const codecForTanTransmission =\n (): Codec<TalerCorebankApi.TanTransmission> =>\n buildCodecForObject<TalerCorebankApi.TanTransmission>()\n .property(\n \"tan_channel\",\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n )\n .property(\"tan_info\", codecForString())\n .build(\"TalerCorebankApi.TanTransmission\");\n\ninterface KycDetail {\n provider_section: string;\n attributes?: Object;\n collection_time: Timestamp;\n expiration_time: Timestamp;\n}\nexport const codecForKycDetail = (): Codec<TalerExchangeApi.KycDetail> =>\n buildCodecForObject<TalerExchangeApi.KycDetail>()\n .property(\"provider_section\", codecForString())\n .property(\"attributes\", codecOptional(codecForAny()))\n .property(\"collection_time\", codecForTimestamp)\n .property(\"expiration_time\", codecForTimestamp)\n .build(\"TalerExchangeApi.KycDetail\");\n\nexport const codecForAmlDecision = (): Codec<TalerExchangeApi.AmlDecision> =>\n buildCodecForObject<TalerExchangeApi.AmlDecision>()\n .property(\"justification\", codecForString())\n .property(\"new_threshold\", codecForAmountString())\n .property(\"h_payto\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"officer_sig\", codecForString())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"kyc_requirements\", codecOptional(codecForList(codecForString())))\n .build(\"TalerExchangeApi.AmlDecision\");\n\nexport const codecForConversionInfo =\n (): Codec<TalerBankConversionApi.ConversionInfo> =>\n buildCodecForObject<TalerBankConversionApi.ConversionInfo>()\n .property(\"cashin_fee\", codecForAmountString())\n .property(\"cashin_min_amount\", codecForAmountString())\n .property(\"cashin_ratio\", codecForDecimalNumber())\n .property(\n \"cashin_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashin_tiny_amount\", codecForAmountString())\n .property(\"cashout_fee\", codecForAmountString())\n .property(\"cashout_min_amount\", codecForAmountString())\n .property(\"cashout_ratio\", codecForDecimalNumber())\n .property(\n \"cashout_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashout_tiny_amount\", codecForAmountString())\n .build(\"ConversionBankConfig.ConversionInfo\");\n\nexport const codecForConversionBankConfig =\n (): Codec<TalerBankConversionApi.IntegrationConfig> =>\n buildCodecForObject<TalerBankConversionApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .property(\"fiat_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n\n .property(\"conversion_rate\", codecForConversionInfo())\n .build(\"ConversionBankConfig.IntegrationConfig\");\n\nexport const codecForChallengerTermsOfServiceResponse =\n (): Codec<ChallengerApi.ChallengerTermsOfServiceResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerTermsOfServiceResponse>()\n .property(\"name\", codecForConstString(\"challenger\"))\n .property(\"version\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"ChallengerApi.ChallengerTermsOfServiceResponse\");\n\nexport const codecForChallengeSetupResponse =\n (): Codec<ChallengerApi.ChallengeSetupResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeSetupResponse>()\n .property(\"nonce\", codecForString())\n .build(\"ChallengerApi.ChallengeSetupResponse\");\n\nexport const codecForChallengeStatus =\n (): Codec<ChallengerApi.ChallengeStatus> =>\n buildCodecForObject<ChallengerApi.ChallengeStatus>()\n .property(\"restrictions\", codecOptional(codecForMap(codecForAny())))\n .property(\"fix_address\", codecForBoolean())\n .property(\"last_address\", codecOptional(codecForMap(codecForAny())))\n .property(\"changes_left\", codecForNumber())\n .build(\"ChallengerApi.ChallengeStatus\");\nexport const codecForChallengeCreateResponse =\n (): Codec<ChallengerApi.ChallengeCreateResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeCreateResponse>()\n .property(\"attempts_left\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"transmitted\", codecForBoolean())\n .property(\"next_tx_time\", codecForString())\n .build(\"ChallengerApi.ChallengeCreateResponse\");\n\nexport const codecForInvalidPinResponse =\n (): Codec<ChallengerApi.InvalidPinResponse> =>\n buildCodecForObject<ChallengerApi.InvalidPinResponse>()\n .property(\"ec\", codecOptional(codecForNumber()))\n .property(\"hint\", codecForAny())\n .property(\"addresses_left\", codecForNumber())\n .property(\"pin_transmissions_left\", codecForNumber())\n .property(\"auth_attempts_left\", codecForNumber())\n .property(\"exhausted\", codecForBoolean())\n .property(\"no_challenge\", codecForBoolean())\n .build(\"ChallengerApi.InvalidPinResponse\");\n\nexport const codecForChallengerAuthResponse =\n (): Codec<ChallengerApi.ChallengerAuthResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerAuthResponse>()\n .property(\"access_token\", codecForString())\n .property(\"token_type\", codecForAny())\n .property(\"expires_in\", codecForNumber())\n .build(\"ChallengerApi.ChallengerAuthResponse\");\n\nexport const codecForChallengerInfoResponse =\n (): Codec<ChallengerApi.ChallengerInfoResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerInfoResponse>()\n .property(\"id\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"address_type\", codecForString())\n .property(\"expires\", codecForTimestamp)\n .build(\"ChallengerApi.ChallengerInfoResponse\");\n\ntype EmailAddress = string;\ntype PhoneNumber = string;\ntype EddsaSignature = string;\n// base32 encoded RSA blinded signature.\ntype BlindedRsaSignature = string;\ntype Base32 = string;\n\ntype DecimalNumber = string;\ntype RsaSignature = string;\ntype Float = number;\ntype LibtoolVersion = string;\n// The type of a coin's blinded envelope depends on the cipher that is used\n// for signing with a denomination key.\ntype CoinEnvelope = RSACoinEnvelope | CSCoinEnvelope;\n// For denomination signatures based on RSA, the planchet is just a blinded\n// coin's public EdDSA key.\ninterface RSACoinEnvelope {\n cipher: \"RSA\" | \"RSA+age_restricted\";\n rsa_blinded_planchet: string; // Crockford Base32 encoded\n}\n// For denomination signatures based on Blind Clause-Schnorr, the planchet\n// consists of the public nonce and two Curve25519 scalars which are two\n// blinded challenges in the Blinded Clause-Schnorr signature scheme.\n// See https://taler.net/papers/cs-thesis.pdf for details.\ninterface CSCoinEnvelope {\n cipher: \"CS\" | \"CS+age_restricted\";\n cs_nonce: string; // Crockford Base32 encoded\n cs_blinded_c0: string; // Crockford Base32 encoded\n cs_blinded_c1: string; // Crockford Base32 encoded\n}\n// Secret for blinding/unblinding.\n// An RSA blinding secret, which is basically\n// a 256-bit nonce, converted to Crockford Base32.\ntype DenominationBlindingKeyP = string;\n\n//FIXME: implement this codec\nconst codecForURL = codecForString;\n//FIXME: implement this codec\nconst codecForLibtoolVersion = codecForString;\n//FIXME: implement this codec\nconst codecForCurrencyName = codecForString;\n//FIXME: implement this codec\nconst codecForDecimalNumber = codecForString;\n\nexport type WithdrawalOperationStatus =\n | \"pending\"\n | \"selected\"\n | \"aborted\"\n | \"confirmed\";\n\nexport namespace TalerWireGatewayApi {\n export interface TransferResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n\n export interface TransferRequest {\n // Nonce to make the request idempotent. Requests with the same\n // transaction_uid that differ in any of the other fields\n // are rejected.\n request_uid: HashCode;\n\n // Amount to transfer.\n amount: AmountString;\n\n // Base URL of the exchange. Shall be included by the bank gateway\n // in the appropriate section of the wire transfer details.\n exchange_base_url: string;\n\n // Wire transfer identifier chosen by the exchange,\n // used by the merchant to identify the Taler order(s)\n // associated with this wire transfer.\n wtid: ShortHashCode;\n\n // The recipient's account identifier as a payto URI.\n credit_account: PaytoString;\n }\n\n export interface IncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: IncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if incoming transaction is empty\n credit_account?: PaytoString;\n }\n\n // Union discriminated by the \"type\" field.\n export type IncomingBankTransaction =\n | IncomingReserveTransaction\n | IncomingWadTransaction;\n\n export interface IncomingReserveTransaction {\n type: \"RESERVE\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // The reserve public key extracted from the transaction details.\n reserve_pub: EddsaPublicKey;\n }\n\n export interface IncomingWadTransaction {\n type: \"WAD\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n credit_account: PaytoString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // Base URL of the exchange that originated the wad.\n origin_exchange_url: string;\n\n // The reserve public key extracted from the transaction details.\n wad_id: WadId;\n }\n\n export interface OutgoingHistory {\n // Array of outgoing transactions.\n outgoing_transactions: OutgoingBankTransaction[];\n\n // Payto URI to identify the sender of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if outgoing transactions is empty\n debit_account?: PaytoString;\n }\n\n export interface OutgoingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n credit_account: PaytoString;\n\n // The wire transfer ID in the outgoing transaction.\n wtid: ShortHashCode;\n\n // Base URL of the exchange.\n exchange_base_url: string;\n }\n\n export interface AddIncomingRequest {\n // Amount to transfer.\n amount: AmountString;\n\n // Reserve public key that is included in the wire transfer details\n // to identify the reserve that is being topped up.\n reserve_pub: EddsaPublicKey;\n\n // Account (as payto URI) that makes the wire transfer to the exchange.\n // Usually this account must be created by the test harness before this API is\n // used. An exception is the \"exchange-fakebank\", where any debit account can be\n // specified, as it is automatically created.\n debit_account: PaytoString;\n }\n\n export interface AddIncomingResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n}\n\nexport namespace TalerRevenueApi {\n export interface RevenueConfig {\n // Name of the API.\n name: \"taler-revenue\";\n\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this gateway.\n currency: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface RevenueIncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: RevenueIncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n credit_account: string;\n }\n\n export interface RevenueIncomingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: string;\n\n // The wire transfer subject.\n subject: string;\n }\n}\n\nexport namespace TalerBankConversionApi {\n export interface ConversionInfo {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n }\n\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n // Currency used by this bank.\n regional_currency: string;\n\n // How the bank SPA should render this currency.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency: string;\n\n // How the bank SPA should render this currency.\n fiat_currency_specification: CurrencySpecification;\n\n // Extra conversion rate information.\n // Only present if server opts in to report the static conversion rate.\n conversion_rate: ConversionInfo;\n }\n\n export interface CashinConversionResponse {\n // Amount that the user will get deducted from their fiat\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their regional\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export interface CashoutConversionResponse {\n // Amount that the user will get deducted from their regional\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their fiat\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export type RoundingMode = \"zero\" | \"up\" | \"nearest\";\n\n export interface ConversionRate {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: RoundingMode;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: RoundingMode;\n }\n}\n\nexport namespace TalerBankIntegrationApi {\n export interface BankVersion {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification?: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n\n export interface BankWithdrawalOperationStatus {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Bank account of the customer that is withdrawing, as a\n // payto URI.\n sender_wire?: PaytoString;\n\n // Suggestion for an exchange given by the bank.\n suggested_exchange?: string;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Wire transfer types supported by the bank.\n wire_types: string[];\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: string;\n }\n\n export interface BankWithdrawalOperationPostRequest {\n // Reserve public key.\n reserve_pub: string;\n\n // Payto address of the exchange selected for the withdrawal.\n selected_exchange: PaytoString;\n }\n\n export interface BankWithdrawalOperationPostResponse {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: Omit<\"pending\", WithdrawalOperationStatus>;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n }\n}\n\nexport namespace TalerCorebankApi {\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n export interface Config {\n // Name of this API, always \"taler-corebank\".\n name: \"libeufin-bank\";\n // name: \"taler-corebank\";\n\n // API version in the form $n:$n:$n\n version: string;\n\n // Bank display name to be used in user interfaces.\n // For consistency use \"Taler Bank\" if missing.\n // @since v4, will become mandatory in the next version.\n bank_name: string;\n\n // Advertised base URL to use when you sharing an URL with another\n // program.\n // @since v4.\n base_url?: string;\n\n // If 'true' the server provides local currency conversion support\n // If 'false' some parts of the API are not supported and return 501\n allow_conversion: boolean;\n\n // If 'true' anyone can register\n // If 'false' only the admin can\n allow_registrations: boolean;\n\n // If 'true' account can delete themselves\n // If 'false' only the admin can delete accounts\n allow_deletions: boolean;\n\n // If 'true' anyone can edit their name\n // If 'false' only admin can\n allow_edit_name: boolean;\n\n // If 'true' anyone can edit their cashout account\n // If 'false' only the admin\n allow_edit_cashout_payto_uri: boolean;\n\n // Default debt limit for newly created accounts\n default_debit_threshold: AmountString;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // TAN channels supported by the server\n supported_tan_channels: TanChannel[];\n\n // Wire transfer type supported by the bank.\n // Default to 'iban' is missing\n // @since v4, may become mandatory in the future.\n wire_type: string;\n }\n\n export interface BankAccountCreateWithdrawalRequest {\n // Amount to withdraw.\n amount: AmountString;\n }\n export interface BankAccountCreateWithdrawalResponse {\n // ID of the withdrawal, can be used to view/modify the withdrawal operation.\n withdrawal_id: string;\n\n // URI that can be passed to the wallet to initiate the withdrawal.\n taler_withdraw_uri: TalerUriString;\n }\n export interface WithdrawalPublicInfo {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Account username\n username: string;\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: PaytoString;\n }\n\n export interface BankAccountTransactionsResponse {\n transactions: BankAccountTransactionInfo[];\n }\n\n export interface BankAccountTransactionInfo {\n creditor_payto_uri: PaytoString;\n debtor_payto_uri: PaytoString;\n\n amount: AmountString;\n direction: \"debit\" | \"credit\";\n\n subject: string;\n\n // Transaction unique ID. Matches\n // $transaction_id from the URI.\n row_id: number;\n date: Timestamp;\n }\n\n export interface CreateTransactionRequest {\n // Address in the Payto format of the wire transfer receiver.\n // It needs at least the 'message' query string parameter.\n payto_uri: PaytoString;\n\n // Transaction amount (in the $currency:x.y format), optional.\n // However, when not given, its value must occupy the 'amount'\n // query string parameter of the 'payto' field. In case it\n // is given in both places, the paytoUri's takes the precedence.\n amount?: AmountString;\n\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n // @since v4, will become mandatory in the next version.\n request_uid?: ShortHashCode;\n }\n\n export interface CreateTransactionResponse {\n // ID identifying the transaction being created\n row_id: Integer;\n }\n\n export interface RegisterAccountResponse {\n // Internal payto URI of this bank account.\n internal_payto_uri: PaytoString;\n }\n\n export interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n contact_data?: ChallengeContactData;\n\n // 'payto' address of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n cashout_payto_uri?: PaytoString;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: PaytoString;\n\n // If present, set the max debit allowed for this user\n // Only admin can set this property.\n debit_threshold?: AmountString;\n\n // If present, set a custom minimum cashout amount for this account.\n // Only admin can set this property\n // @since v4\n min_cashout?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n // Only admin can set this property, other user can reconfig their account\n // after creation.\n tan_channel?: TanChannel;\n }\n\n export interface ChallengeContactData {\n // E-Mail address\n email?: EmailAddress;\n\n // Phone number.\n phone?: PhoneNumber;\n }\n\n export interface AccountReconfiguration {\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n // Only admin can change this property.\n contact_data?: ChallengeContactData;\n\n // 'payto' URI of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n // Only admin can change this property if not allowed in config\n cashout_payto_uri?: PaytoString;\n\n // If present, change the legal name associated with $username.\n // Only admin can change this property if not allowed in config\n name?: string;\n\n // Make this account visible to anyone?\n is_public?: boolean;\n\n // If present, change the max debit allowed for this user\n // Only admin can change this property.\n debit_threshold?: AmountString;\n\n // If present, change the custom minimum cashout amount for this account.\n // Only admin can set this property\n // @since v4\n min_cashout?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n tan_channel?: TanChannel | null;\n }\n\n export interface AccountPasswordChange {\n // New password.\n new_password: string;\n // Old password. If present, check that the old password matches.\n // Optional for admin account.\n old_password?: string;\n }\n\n export interface PublicAccountsResponse {\n public_accounts: PublicAccount[];\n }\n export interface PublicAccount {\n // Username of the account\n username: string;\n\n // Internal payto URI of this bank account.\n payto_uri: string;\n\n // Current balance of the account\n balance: Balance;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface ListBankAccountsResponse {\n accounts: AccountMinimalData[];\n }\n export interface Balance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n }\n export interface AccountMinimalData {\n // Username\n username: string;\n\n // Legal name of the account owner.\n name: string;\n\n // Internal payto URI of this bank account.\n payto_uri: PaytoString;\n\n // current balance of the account\n balance: Balance;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Custom minimum cashout amount for this account.\n // If null or absent, the global conversion fee is used.\n // @since v4\n min_cashout?: AmountString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n\n // Current status of the account\n // active: the account can be used\n // deleted: the account has been deleted but is retained for compliance\n // reasons, only the administrator can access it\n // Default to 'active' is missing\n // @since v4, will become mandatory in the next version.\n status?: \"active\" | \"deleted\";\n }\n\n export interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: Balance;\n\n // payto://-URI of the account.\n payto_uri: PaytoString;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Custom minimum cashout amount for this account.\n // If null or absent, the global conversion fee is used.\n // @since v4\n min_cashout?: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: PaytoString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Is 2FA enabled and what channel is used for challenges?\n tan_channel?: TanChannel;\n \n // Current status of the account\n // active: the account can be used\n // deleted: the account has been deleted but is retained for compliance\n // reasons, only the administrator can access it\n // Default to 'active' is missing\n // @since v4, will become mandatory in the next version.\n status?: \"active\" | \"deleted\";\n }\n\n export interface CashoutRequest {\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n request_uid: ShortHashCode;\n\n // Optional subject to associate to the\n // cashout operation. This data will appear\n // as the incoming wire transfer subject in\n // the user's fiat bank account.\n subject?: string;\n\n // That is the plain amount that the user specified\n // to cashout. Its $currency is the (regional) currency of the\n // bank instance.\n amount_debit: AmountString;\n\n // That is the amount that will effectively be\n // transferred by the bank to the user's bank\n // account, that is external to the regional currency.\n // It is expressed in the fiat currency and\n // is calculated after the cashout fee and the\n // exchange rate. See the /cashout-rates call.\n // The client needs to calculate this amount\n // correctly based on the amount_debit and the cashout rate,\n // otherwise the request will fail.\n amount_credit: AmountString;\n }\n\n export interface CashoutResponse {\n // ID identifying the operation being created\n cashout_id: number;\n }\n\n /**\n * @deprecated since 4, use 2fa\n */\n export interface CashoutConfirmRequest {\n // the TAN that confirms $CASHOUT_ID.\n tan: string;\n }\n\n export interface Cashouts {\n // Every string represents a cash-out operation ID.\n cashouts: CashoutInfo[];\n }\n\n export interface CashoutInfo {\n cashout_id: number;\n /**\n * @deprecated since 4, use new 2fa\n */\n status?: \"pending\" | \"aborted\" | \"confirmed\";\n }\n export interface GlobalCashouts {\n // Every string represents a cash-out operation ID.\n cashouts: GlobalCashoutInfo[];\n }\n export interface GlobalCashoutInfo {\n cashout_id: number;\n username: string;\n }\n\n export interface CashoutStatusResponse {\n // Amount debited to the internal\n // regional currency bank account.\n amount_debit: AmountString;\n\n // Amount credited to the external bank account.\n amount_credit: AmountString;\n\n // Transaction subject.\n subject: string;\n\n // Time when the cashout was created.\n creation_time: Timestamp;\n }\n\n export interface ConversionRatesResponse {\n // Exchange rate to buy the local currency from the external one\n buy_at_ratio: DecimalNumber;\n\n // Exchange rate to sell the local currency for the external one\n sell_at_ratio: DecimalNumber;\n\n // Fee to subtract after applying the buy ratio.\n buy_in_fee: DecimalNumber;\n\n // Fee to subtract after applying the sell ratio.\n sell_out_fee: DecimalNumber;\n }\n\n export enum MonitorTimeframeParam {\n hour,\n day,\n month,\n year,\n decade,\n }\n\n export type MonitorResponse = MonitorNoConversion | MonitorWithConversion;\n\n // Monitoring stats when conversion is not supported\n export interface MonitorNoConversion {\n type: \"no-conversions\";\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n // Monitoring stats when conversion is supported\n export interface MonitorWithConversion {\n type: \"with-conversions\";\n\n // How many cashin operations were confirmed by a\n // wallet owner. Note: wallet owners\n // are NOT required to be customers of the libeufin-bank.\n cashinCount: number;\n\n // Overall regional currency that has been paid by the regional admin account\n // to regional bank accounts to fulfill all the confirmed cashin operations.\n cashinRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid to the fiat admin account\n // by fiat bank accounts to fulfill all the confirmed cashin operations.\n cashinFiatVolume: AmountString;\n\n // How many cashout operations were confirmed.\n cashoutCount: number;\n\n // Overall regional currency that has been paid to the regional admin account\n // by fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid by the fiat admin account\n // to fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutFiatVolume: AmountString;\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n export interface TanTransmission {\n // Channel of the last successful transmission of the TAN challenge.\n tan_channel: TanChannel;\n\n // Info of the last successful transmission of the TAN challenge.\n tan_info: string;\n }\n\n export interface Challenge {\n // Unique identifier of the challenge to solve to run this protected\n // operation.\n challenge_id: number;\n }\n\n export interface ChallengeSolve {\n // The TAN code that solves $CHALLENGE_ID\n tan: string;\n }\n\n export enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n }\n}\n\nexport namespace TalerExchangeApi {\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n export interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: AmountString;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: AmountString;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n export interface AmlDecision {\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: AmountString;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n export interface ExchangeVersionResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-exchange\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v18, may become mandatory in the future.\n implementation?: string;\n\n // Currency supported by this exchange, given\n // as a currency code (\"USD\" or \"EUR\").\n currency: string;\n\n // How wallets should render this currency.\n currency_specification: CurrencySpecification;\n\n // Names of supported KYC requirements.\n supported_kyc_requirements: string[];\n }\n\n export type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n // Account restriction that disables this type of\n // account for the indicated operation categorically.\n export interface DenyAllAccountRestriction {\n type: \"deny\";\n }\n // Accounts interacting with this type of account\n // restriction must have a payto://-URI matching\n // the given regex.\n export interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: { [lang_tag: string]: string };\n }\n\n export interface WireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: PaytoString;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignature;\n }\n\n export interface ExchangeKeysResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // The exchange's base URL.\n base_url: string;\n\n // The exchange's currency or asset unit.\n currency: string;\n\n /**\n * FIXME: PARTIALLY IMPLEMENTED!!\n */\n\n // How wallets should render this currency.\n // currency_specification: CurrencySpecification;\n\n // // Absolute cost offset for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // stefan_abs: AmountString;\n\n // // Factor to multiply the logarithm of the amount\n // // with to (over) approximate fees payable by amount.\n // // Note that the total to be paid is first to be\n // // divided by the smallest denomination to obtain\n // // the value that the logarithm is to be taken of.\n // stefan_log: AmountString;\n\n // // Linear cost factor for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // //\n // // Note that this is a scalar, as it is multiplied\n // // with the actual amount.\n // stefan_lin: Float;\n\n // // Type of the asset. \"fiat\", \"crypto\", \"regional\"\n // // or \"stock\". Wallets should adjust their UI/UX\n // // based on this value.\n // asset_type: string;\n\n // // Array of wire accounts operated by the exchange for\n // // incoming wire transfers.\n // accounts: WireAccount[];\n\n // // Object mapping names of wire methods (i.e. \"iban\" or \"x-taler-bank\")\n // // to wire fees.\n // wire_fees: { method: AggregateTransferFee[] };\n\n // // List of exchanges that this exchange is partnering\n // // with to enable wallet-to-wallet transfers.\n // wads: ExchangePartner[];\n\n // // Set to true if this exchange allows the use\n // // of reserves for rewards.\n // // @deprecated in protocol v18.\n // rewards_allowed: false;\n\n // // EdDSA master public key of the exchange, used to sign entries\n // // in denoms and signkeys.\n // master_public_key: EddsaPublicKey;\n\n // // Relative duration until inactive reserves are closed;\n // // not signed (!), can change without notice.\n // reserve_closing_delay: RelativeTime;\n\n // // Threshold amounts beyond which wallet should\n // // trigger the KYC process of the issuing\n // // exchange. Optional option, if not given there is no limit.\n // // Currency must match currency.\n // wallet_balance_limit_without_kyc?: AmountString[];\n\n // // Denominations offered by this exchange\n // denominations: DenomGroup[];\n\n // // Compact EdDSA signature (binary-only) over the\n // // contatentation of all of the master_sigs (in reverse\n // // chronological order by group) in the arrays under\n // // \"denominations\". Signature of TALER_ExchangeKeySetPS\n // exchange_sig: EddsaSignature;\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 signkeys. It is given\n // // explicitly as the client might otherwise be confused by clock skew as to\n // // which signing key was used for the exchange_sig.\n // exchange_pub: EddsaPublicKey;\n\n // // Denominations for which the exchange currently offers/requests recoup.\n // recoup: Recoup[];\n\n // // Array of globally applicable fees by time range.\n // global_fees: GlobalFees[];\n\n // // The date when the denomination keys were last updated.\n // list_issue_date: Timestamp;\n\n // // Auditors of the exchange.\n // auditors: AuditorKeys[];\n\n // // The exchange's signing keys.\n // signkeys: SignKey[];\n\n // // Optional field with a dictionary of (name, object) pairs defining the\n // // supported and enabled extensions, such as age_restriction.\n // extensions?: { name: ExtensionManifest };\n\n // // Signature by the exchange master key of the SHA-256 hash of the\n // // normalized JSON-object of field extensions, if it was set.\n // // The signature has purpose TALER_SIGNATURE_MASTER_EXTENSIONS.\n // extensions_sig?: EddsaSignature;\n }\n\n interface ExtensionManifest {\n // The criticality of the extension MUST be provided. It has the same\n // semantics as \"critical\" has for extensions in X.509:\n // - if \"true\", the client must \"understand\" the extension before\n // proceeding,\n // - if \"false\", clients can safely skip extensions they do not\n // understand.\n // (see https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)\n critical: boolean;\n\n // The version information MUST be provided in Taler's protocol version\n // ranges notation, see\n // https://docs.taler.net/core/api-common.html#protocol-version-ranges\n version: LibtoolVersion;\n\n // Optional configuration object, defined by the feature itself\n config?: object;\n }\n\n interface SignKey {\n // The actual exchange's EdDSA signing public key.\n key: EddsaPublicKey;\n\n // Initial validity date for the signing key.\n stamp_start: Timestamp;\n\n // Date when the exchange will stop using the signing key, allowed to overlap\n // slightly with the next signing key's validity to allow for clock skew.\n stamp_expire: Timestamp;\n\n // Date when all signatures made by the signing key expire and should\n // henceforth no longer be considered valid in legal disputes.\n stamp_end: Timestamp;\n\n // Signature over key and stamp_expire by the exchange master key.\n // Signature of TALER_ExchangeSigningKeyValidityPS.\n // Must have purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.\n master_sig: EddsaSignature;\n }\n\n interface AuditorKeys {\n // The auditor's EdDSA signing public key.\n auditor_pub: EddsaPublicKey;\n\n // The auditor's URL.\n auditor_url: string;\n\n // The auditor's name (for humans).\n auditor_name: string;\n\n // An array of denomination keys the auditor affirms with its signature.\n // Note that the message only includes the hash of the public key, while the\n // signature is actually over the expanded information including expiration\n // times and fees. The exact format is described below.\n denomination_keys: AuditorDenominationKey[];\n }\n interface AuditorDenominationKey {\n // Hash of the public RSA key used to sign coins of the respective\n // denomination. Note that the auditor's signature covers more than just\n // the hash, but this other information is already provided in denoms and\n // thus not repeated here.\n denom_pub_h: HashCode;\n\n // Signature of TALER_ExchangeKeyValidityPS.\n auditor_sig: EddsaSignature;\n }\n\n interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: Timestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: Timestamp;\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: RelativeTime;\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: Integer;\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: RelativeTime;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: EddsaSignature;\n }\n\n interface Recoup {\n // Hash of the public key of the denomination that is being revoked under\n // emergency protocol (see /recoup).\n h_denom_pub: HashCode;\n\n // We do not include any signature here, as the primary use-case for\n // this emergency involves the exchange having lost its signing keys,\n // so such a signature here would be pretty worthless. However, the\n // exchange will not honor /recoup requests unless they are for\n // denomination keys listed here.\n }\n\n interface AggregateTransferFee {\n // Per transfer wire transfer fee.\n wire_fee: AmountString;\n\n // Per transfer closing fee.\n closing_fee: AmountString;\n\n // What date (inclusive) does this fee go into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n start_date: Timestamp;\n\n // What date (exclusive) does this fee stop going into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n end_date: Timestamp;\n\n // Signature of TALER_MasterWireFeePS with\n // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.\n sig: EddsaSignature;\n }\n\n interface ExchangePartner {\n // Base URL of the partner exchange.\n partner_base_url: string;\n\n // Public master key of the partner exchange.\n partner_master_pub: EddsaPublicKey;\n\n // Per exchange-to-exchange transfer (wad) fee.\n wad_fee: AmountString;\n\n // Exchange-to-exchange wad (wire) transfer frequency.\n wad_frequency: RelativeTime;\n\n // When did this partnership begin (under these conditions)?\n start_date: Timestamp;\n\n // How long is this partnership expected to last?\n end_date: Timestamp;\n\n // Signature using the exchange's offline key over\n // TALER_WadPartnerSignaturePS\n // with purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS.\n master_sig: EddsaSignature;\n }\n\n type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n\n // Binary representation of the age groups.\n // The bits set in the mask mark the edges at the beginning of a next age\n // group. F.e. for the age groups\n // 0-7, 8-9, 10-11, 12-13, 14-15, 16-17, 18-21, 21-*\n // the following bits are set:\n //\n // 31 24 16 8 0\n // | | | | |\n // oooooooo oo1oo1o1 o1o1o1o1 ooooooo1\n //\n // A value of 0 means that the exchange does not support the extension for\n // age-restriction.\n type AgeMask = Integer;\n\n interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n // Common attributes for all denomination groups\n interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n }\n interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignature;\n\n // When does the denomination key become valid?\n stamp_start: Timestamp;\n\n // When is it no longer possible to withdraw coins\n // of this denomination?\n stamp_expire_withdraw: Timestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_deposit: Timestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: Timestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n }\n type DenominationKey = RsaDenominationKey | CSDenominationKey;\n interface RsaDenominationKey {\n cipher: \"RSA\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // RSA public key\n rsa_public_key: RsaPublicKey;\n }\n interface CSDenominationKey {\n cipher: \"CS\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // Public key of the denomination.\n cs_public_key: Cs25519Point;\n }\n}\n\nexport namespace TalerMerchantApi {\n export interface VersionResponse {\n // libtool-style representation of the Merchant protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-merchant\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since **v8**, may become mandatory in the future.\n implementation?: string;\n\n // Default (!) currency supported by this backend.\n // This is the currency that the backend should\n // suggest by default to the user when entering\n // amounts. See currencies for a list of\n // supported currencies and how to render them.\n currency: string;\n\n // How services should render currencies supported\n // by this backend. Maps\n // currency codes (e.g. \"EUR\" or \"KUDOS\") to\n // the respective currency specification.\n // All currencies in this map are supported by\n // the backend. Note that the actual currency\n // specifications are a *hint* for applications\n // that would like *advice* on how to render amounts.\n // Applications *may* ignore the currency specification\n // if they know how to render currencies that they are\n // used with.\n currencies: { [currency: string]: CurrencySpecification };\n\n // Array of exchanges trusted by the merchant.\n // Since protocol **v6**.\n exchanges: ExchangeConfigInfo[];\n }\n\n export interface ExchangeConfigInfo {\n // Base URL of the exchange REST API.\n base_url: string;\n\n // Currency for which the merchant is configured\n // to trust the exchange.\n // May not be the one the exchange actually uses,\n // but is the only one we would trust this exchange for.\n currency: string;\n\n // Offline master public key of the exchange. The\n // /keys data must be signed with this public\n // key for us to trust it.\n master_pub: EddsaPublicKey;\n }\n export interface ClaimRequest {\n // Nonce to identify the wallet that claimed the order.\n nonce: string;\n\n // Token that authorizes the wallet to claim the order.\n // *Optional* as the merchant may not have required it\n // (create_token set to false in PostOrderRequest).\n token?: ClaimToken;\n }\n\n export interface ClaimResponse {\n // Contract terms of the claimed order\n contract_terms: ContractTerms;\n\n // Signature by the merchant over the contract terms.\n sig: EddsaSignature;\n }\n\n export interface PaymentResponse {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Text to be shown to the point-of-sale staff as a proof of\n // payment.\n pos_confirmation?: string;\n }\n\n export interface PaymentStatusRequestParams {\n // Hash of the order\u2019s contract terms (this is used to\n // authenticate the wallet/customer in case\n // $ORDER_ID is guessable).\n // Required once an order was claimed.\n contractTermHash?: string;\n // Authorizes the request via the claim token that\n // was returned in the PostOrderResponse. Used with\n // unclaimed orders only. Whether token authorization is\n // required is determined by the merchant when the\n // frontend creates the order.\n claimToken?: string;\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // If specified, the merchant backend will wait up to\n // timeout_ms milliseconds for completion of the payment\n // before sending the HTTP response. A client must never\n // rely on this behavior, as the merchant backend may return\n // a response immediately.\n timeout?: number;\n // If set to \u201Cyes\u201D, poll for the order\u2019s pending refunds\n // to be picked up. timeout_ms specifies how long we\n // will wait for the refund.\n awaitRefundObtained?: boolean;\n // Indicates that we are polling for a refund above the\n // given AMOUNT. timeout_ms will specify how long we\n // will wait for the refund.\n refund?: AmountString;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface GetKycStatusRequestParams {\n // If specified, the KYC check should return\n // the KYC status only for this wire account.\n // Otherwise, for all wire accounts.\n wireHash?: string;\n // If specified, the KYC check should return\n // the KYC status only for the given exchange.\n // Otherwise, for all exchanges we interacted with.\n exchangeURL?: string;\n // If specified, the merchant will wait up to\n // timeout_ms milliseconds for the exchanges to\n // confirm completion of the KYC process(es).\n timeout?: number;\n }\n export interface GetOtpDeviceRequestParams {\n // Timestamp in seconds to use when calculating\n // the current OTP code of the device. Since protocol v10.\n faketime?: number;\n // Price to use when calculating the current OTP\n // code of the device. Since protocol v10.\n price?: AmountString;\n }\n export interface GetOrderRequestParams {\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // Timeout in milliseconds to wait for a payment if\n // the answer would otherwise be negative (long polling).\n timeout?: number;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface ListWireTransferRequestParams {\n // Filter for transfers to the given bank account\n // (subject and amount MUST NOT be given in the payto URI).\n paytoURI?: string;\n // Filter for transfers executed before the given timestamp.\n before?: number;\n // Filter for transfers executed after the given timestamp.\n after?: number;\n // At most return the given number of results. Negative for\n // descending in execution time, positive for ascending in\n // execution time. Default is -20.\n limit?: number;\n // Starting transfer_serial_id for an iteration.\n offset?: string;\n // Filter transfers by verification status.\n verified?: boolean;\n order?: \"asc\" | \"dec\";\n }\n export interface ListOrdersRequestParams {\n // If set to yes, only return paid orders, if no only\n // unpaid orders. Do not give (or use \u201Call\u201D) to see all\n // orders regardless of payment status.\n paid?: boolean;\n // If set to yes, only return refunded orders, if no only\n // unrefunded orders. Do not give (or use \u201Call\u201D) to see\n // all orders regardless of refund status.\n refunded?: boolean;\n // If set to yes, only return wired orders, if no only\n // orders with missing wire transfers. Do not give (or\n // use \u201Call\u201D) to see all orders regardless of wire transfer\n // status.\n wired?: boolean;\n // At most return the given number of results. Negative\n // for descending by row ID, positive for ascending by\n // row ID. Default is 20. Since protocol v12.\n limit?: number;\n // Non-negative date in seconds after the UNIX Epoc, see delta\n // for its interpretation. If not specified, we default to the\n // oldest or most recent entry, depending on delta.\n date?: AbsoluteTime;\n // Starting product_serial_id for an iteration.\n // Since protocol v12.\n offset?: string;\n // Timeout in milliseconds to wait for additional orders if the\n // answer would otherwise be negative (long polling). Only useful\n // if delta is positive. Note that the merchant MAY still return\n // a response that contains fewer than delta orders.\n timeout?: number;\n // Since protocol v6. Filters by session ID.\n sessionId?: string;\n // Since protocol v6. Filters by fulfillment URL.\n fulfillmentUrl?: string;\n\n order?: \"asc\" | \"dec\";\n }\n\n export interface PayRequest {\n // The coins used to make the payment.\n coins: CoinPaySig[];\n\n // Custom inputs from the wallet for the contract.\n wallet_data?: Object;\n\n // The session for which the payment is made (or replayed).\n // Only set for session-based payments.\n session_id?: string;\n }\n export interface CoinPaySig {\n // Signature by the coin.\n coin_sig: EddsaSignature;\n\n // Public key of the coin being spent.\n coin_pub: EddsaPublicKey;\n\n // Signature made by the denomination public key.\n ub_sig: RsaSignature;\n\n // The hash of the denomination public key associated with this coin.\n h_denom: HashCode;\n\n // The amount that is subtracted from this coin with this payment.\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n }\n\n export interface StatusPaid {\n type: \"paid\";\n\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 export interface StatusGotoResponse {\n type: \"goto\";\n // The client should go to the reorder URL, there a fresh\n // order might be created as this one is taken by another\n // customer or wallet (or repurchase detection logic may\n // apply).\n public_reorder_url: string;\n }\n export interface StatusUnpaidResponse {\n type: \"unpaid\";\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n fulfillment_url?: string;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n }\n\n export interface PaidRefundStatusResponse {\n // Text to be shown to the point-of-sale staff as a proof of\n // payment (present only if reusable OTP algorithm is used).\n pos_confirmation?: string;\n\n // True if the order has been subjected to\n // refunds. False if it was simply paid.\n refunded: boolean;\n }\n export interface PaidRequest {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer and to enable signature verification without\n // database access).\n h_contract: HashCode;\n\n // Hash over custom inputs from the wallet for the contract.\n wallet_data_hash?: HashCode;\n\n // Session id for which the payment is proven.\n session_id: string;\n }\n\n export 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: HashCode;\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 interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKey;\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 export 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 export type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n // Details about why a refund failed.\n export 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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\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.\n export 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: EddsaSignature;\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: EddsaPublicKey;\n }\n\n export interface WalletRefundRequest {\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer).\n h_contract: HashCode;\n }\n export interface WalletRefundResponse {\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Successful refunds for this payment, empty array for none.\n refunds: MerchantCoinRefundStatus[];\n\n // Public key of the merchant.\n merchant_pub: EddsaPublicKey;\n }\n export type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n // Details about why a refund failed.\n export interface MerchantCoinRefundFailureStatus {\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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\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.\n export interface MerchantCoinRefundSuccessStatus {\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: EddsaSignature;\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: EddsaPublicKey;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\n }\n\n interface RewardInformation {\n // Exchange from which the reward will be withdrawn. Needed by the\n // wallet to determine denominations, fees, etc.\n exchange_url: string;\n\n // URL where to go after obtaining the reward.\n next_url: string;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n // Note that rewards that have expired MAY also result in a 404 response.\n expiration: Timestamp;\n }\n\n interface RewardPickupRequest {\n // List of planchets the wallet wants to use for the reward.\n planchets: PlanchetDetail[];\n }\n interface PlanchetDetail {\n // Hash of the denomination's public key (hashed to reduce\n // bandwidth consumption).\n denom_pub_hash: HashCode;\n\n // Coin's blinded public key.\n coin_ev: CoinEnvelope;\n }\n interface RewardResponse {\n // Blind RSA signatures over the planchets.\n // The order of the signatures matches the planchets list.\n blind_sigs: BlindSignature[];\n }\n interface BlindSignature {\n // The (blind) RSA signature. Still needs to be unblinded.\n blind_sig: BlindedRsaSignature;\n }\n\n export interface InstanceConfigurationMessage {\n // Name of the merchant instance to create (will become $INSTANCE).\n // Must match the regex ^[A-Za-z0-9][A-Za-z0-9_.@-]+$.\n id: string;\n\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Authentication settings for this instance\n auth: InstanceAuthConfigurationMessage;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstanceAuthConfigurationMessage {\n // Type of authentication.\n // \"external\": The mechant backend does not do\n // any authentication checks. Instead an API\n // gateway must do the authentication.\n // \"token\": The merchant checks an auth token.\n // See \"token\" for details.\n method: \"external\" | \"token\";\n\n // For method \"token\", this field is mandatory.\n // The token MUST begin with the string \"secret-token:\".\n // After the auth token has been set (with method \"token\"),\n // the value must be provided in a \"Authorization: Bearer $token\"\n // header.\n token?: AccessToken;\n }\n\n export interface InstanceReconfigurationMessage {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstancesResponse {\n // List of instances that are present in the backend (see Instance).\n instances: Instance[];\n }\n\n export interface Instance {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Merchant instance this response is about ($INSTANCE).\n id: string;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // List of the payment targets supported by this instance. Clients can\n // specify the desired payment target in /order requests. Note that\n // front-ends do not have to support wallets selecting payment targets.\n payment_targets: string[];\n\n // Has this instance been deleted (but not purged)?\n deleted: boolean;\n }\n\n export interface QueryInstancesResponse {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n\n // Authentication configuration.\n // Does not contain the token when token auth is configured.\n auth: {\n method: \"external\" | \"token\";\n };\n }\n\n export interface AccountKycRedirects {\n // Array of pending KYCs.\n pending_kycs: MerchantAccountKycRedirect[];\n\n // Array of exchanges with no reply.\n timeout_kycs: ExchangeKycTimeout[];\n }\n\n export interface MerchantAccountKycRedirect {\n // URL that the user should open in a browser to\n // proceed with the KYC process (as returned\n // by the exchange's /kyc-check/ endpoint).\n // Optional, missing if the account is blocked\n // due to AML and not due to KYC.\n kyc_url?: string;\n\n // AML status of the account.\n aml_status: Integer;\n\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Our bank wire account this is about.\n payto_uri: PaytoString;\n }\n\n export interface ExchangeKycTimeout {\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Numeric error code indicating errors the exchange\n // returned, or TALER_EC_INVALID for none.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information about the KYC status.\n // 0 if there was no response at all.\n exchange_http_status: number;\n }\n\n export interface AccountAddDetails {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export type FacadeCredentials =\n | NoFacadeCredentials\n | BasicAuthFacadeCredentials;\n export interface NoFacadeCredentials {\n type: \"none\";\n }\n export interface BasicAuthFacadeCredentials {\n type: \"basic\";\n\n // Username to use to authenticate\n username: string;\n\n // Password to use to authenticate\n password: string;\n }\n export interface AccountAddResponse {\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n }\n\n export interface AccountPatchDetails {\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n // If the argument is omitted, the old credentials\n // are simply preserved.\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export interface AccountsSummaryResponse {\n // List of accounts that are known for the instance.\n accounts: BankAccountSummaryEntry[];\n }\n\n // TODO: missing in docs\n export interface BankAccountSummaryEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n }\n export interface BankAccountEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // true if this account is active,\n // false if it is historic.\n active?: boolean;\n }\n\n export interface ProductAddDetail {\n // Product ID to use.\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface ProductPatchDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost?: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface InventorySummaryResponse {\n // List of products that are present in the inventory.\n products: InventoryEntry[];\n }\n\n export interface InventoryEntry {\n // Product identifier, as found in the product.\n product_id: string;\n // product_serial_id of the product in the database.\n product_serial: Integer;\n }\n\n export interface ProductDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that have already been sold.\n total_sold: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost: Integer;\n\n // Identifies where the product is in stock.\n address: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years).\n minimum_age?: Integer;\n }\n export interface LockRequest {\n // UUID that identifies the frontend performing the lock\n // Must be unique for the lifetime of the lock.\n lock_uuid: string;\n\n // How long does the frontend intend to hold the lock?\n duration: RelativeTime;\n\n // How many units should be locked?\n quantity: Integer;\n }\n\n export interface PostOrderRequest {\n // The order must at least contain the minimal\n // order detail, but can override all.\n order: Order;\n\n // If set, the backend will then set the refund deadline to the current\n // time plus the specified delay. If it's not set, refunds will not be\n // possible.\n refund_delay?: RelativeTime;\n\n // Specifies the payment target preferred by the client. Can be used\n // to select among the various (active) wire methods supported by the instance.\n payment_target?: string;\n\n // Specifies that some products are to be included in the\n // order from the inventory. For these inventory management\n // is performed (so the products must be in stock) and\n // details are completed from the product data of the backend.\n inventory_products?: MinimalInventoryProduct[];\n\n // Specifies a lock identifier that was used to\n // lock a product in the inventory. Only useful if\n // inventory_products is set. Used in case a frontend\n // reserved quantities of the individual products while\n // the shopping cart was being built. Multiple UUIDs can\n // be used in case different UUIDs were used for different\n // products (i.e. in case the user started with multiple\n // shopping sessions that were combined during checkout).\n lock_uuids?: string[];\n\n // Should a token for claiming the order be generated?\n // False can make sense if the ORDER_ID is sufficiently\n // high entropy to prevent adversarial claims (like it is\n // if the backend auto-generates one). Default is 'true'.\n create_token?: boolean;\n\n // OTP device ID to associate with the order.\n // This parameter is optional.\n otp_id?: string;\n }\n\n type Order = MinimalOrderDetail | ContractTerms;\n\n interface MinimalOrderDetail {\n // Amount to be paid by the customer.\n amount: AmountString;\n\n // Short summary of the order.\n summary: string;\n\n // See documentation of fulfillment_url in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n // When creating an order, the fulfillment URL can\n // contain ${ORDER_ID} which will be substituted with the\n // order ID of the newly created order.\n fulfillment_url?: string;\n\n // See documentation of fulfillment_message in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n }\n\n interface MinimalInventoryProduct {\n // Which product is requested (here mandatory!).\n product_id: string;\n\n // How many units of the product are requested.\n quantity: Integer;\n }\n\n export interface PostOrderResponse {\n // Order ID of the response that was just created.\n order_id: string;\n\n // Token that authorizes the wallet to claim the order.\n // Provided only if \"create_token\" was set to 'true'\n // in the request.\n token?: ClaimToken;\n }\n export interface OutOfStockResponse {\n // Product ID of an out-of-stock item.\n product_id: string;\n\n // Requested quantity.\n requested_quantity: Integer;\n\n // Available quantity (must be below requested_quantity).\n available_quantity: Integer;\n\n // When do we expect the product to be again in stock?\n // Optional, not given if unknown.\n restock_expected?: Timestamp;\n }\n\n export interface OrderHistory {\n // Timestamp-sorted array of all orders matching the query.\n // The order of the sorting depends on the sign of delta.\n orders: OrderHistoryEntry[];\n }\n export interface OrderHistoryEntry {\n // Order ID of the transaction related to this entry.\n order_id: string;\n\n // Row ID of the order in the database.\n row_id: number;\n\n // When the order was created.\n timestamp: Timestamp;\n\n // The amount of money the order is for.\n amount: AmountString;\n\n // The summary of the order.\n summary: string;\n\n // Whether some part of the order is refundable,\n // that is the refund deadline has not yet expired\n // and the total amount refunded so far is below\n // the value of the original transaction.\n refundable: boolean;\n\n // Whether the order has been paid or not.\n paid: boolean;\n }\n\n export type MerchantOrderStatusResponse =\n | CheckPaymentPaidResponse\n | CheckPaymentClaimedResponse\n | CheckPaymentUnpaidResponse;\n export interface CheckPaymentPaidResponse {\n // The customer paid for this contract.\n order_status: \"paid\";\n\n // Was the payment refunded (even partially)?\n refunded: boolean;\n\n // True if there are any approved refunds that the wallet has\n // not yet obtained.\n refund_pending: boolean;\n\n // Did the exchange wire us the funds?\n wired: boolean;\n\n // Total amount the exchange deposited into our bank account\n // for this contract, excluding fees.\n deposit_total: AmountString;\n\n // Numeric error code indicating errors the exchange\n // encountered tracking the wire transfer for this purchase (before\n // we even got to specific coin issues).\n // 0 if there were no issues.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information to track the wire transfer for this purchase.\n // 0 if there were no issues.\n exchange_http_status: number;\n\n // Total amount that was refunded, 0 if refunded is false.\n refund_amount: AmountString;\n\n // Contract terms.\n contract_terms: ContractTerms;\n\n // The wire transfer status from the exchange for this order if\n // available, otherwise empty array.\n wire_details: TransactionWireTransfer[];\n\n // Reports about trouble obtaining wire transfer details,\n // empty array if no trouble were encountered.\n wire_reports: TransactionWireReport[];\n\n // The refund details for this order. One entry per\n // refunded coin; empty array if there are no refunds.\n refund_details: RefundDetails[];\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n }\n export interface CheckPaymentClaimedResponse {\n // A wallet claimed the order, but did not yet pay for the contract.\n order_status: \"claimed\";\n\n // Contract terms.\n contract_terms: ContractTerms;\n }\n export interface CheckPaymentUnpaidResponse {\n // The order was neither claimed nor paid.\n order_status: \"unpaid\";\n\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // when was the order created\n creation_time: Timestamp;\n\n // Order summary text.\n summary: string;\n\n // Total amount of the order (to be paid by the customer).\n total_amount: AmountString;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n\n // Fulfillment URL of an already paid order. Only given if under this\n // session an already paid order with a fulfillment URL exists.\n already_paid_fulfillment_url?: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n\n // We do we NOT return the contract terms here because they may not\n // exist in case the wallet did not yet claim them.\n }\n export interface RefundDetails {\n // Reason given for the refund.\n reason: string;\n\n // Set to true if a refund is still available for the wallet for this payment.\n pending: boolean;\n\n // When was the refund approved.\n timestamp: Timestamp;\n\n // Total amount that was refunded (minus a refund fee).\n amount: AmountString;\n }\n export interface TransactionWireTransfer {\n // Responsible exchange.\n exchange_url: string;\n\n // 32-byte wire transfer identifier.\n wtid: Base32;\n\n // Execution time of the wire transfer.\n execution_time: Timestamp;\n\n // Total amount that has been wire transferred\n // to the merchant.\n amount: AmountString;\n\n // Was this transfer confirmed by the merchant via the\n // POST /transfers API, or is it merely claimed by the exchange?\n confirmed: boolean;\n }\n export interface TransactionWireReport {\n // Numerical error code.\n code: number;\n\n // Human-readable error description.\n hint: string;\n\n // Numerical error code from the exchange.\n exchange_code: number;\n\n // HTTP status code received from the exchange.\n exchange_http_status: number;\n\n // Public key of the coin for which we got the exchange error.\n coin_pub: CoinPublicKey;\n }\n\n export interface ForgetRequest {\n // Array of valid JSON paths to forgettable fields in the order's\n // contract terms.\n fields: string[];\n }\n\n export interface RefundRequest {\n // Amount to be refunded.\n refund: AmountString;\n\n // Human-readable refund justification.\n reason: string;\n }\n export interface MerchantRefundResponse {\n // URL (handled by the backend) that the wallet should access to\n // trigger refund processing.\n // taler://refund/...\n taler_refund_uri: string;\n\n // Contract hash that a client may need to authenticate an\n // HTTP request to obtain the above URI in a wallet-friendly way.\n h_contract: HashCode;\n }\n\n export interface TransferInformation {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n }\n\n export interface TransferList {\n // List of all the transfers that fit the filter that we know.\n transfers: TransferDetails[];\n }\n export interface TransferDetails {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n\n // Serial number identifying the transfer in the merchant backend.\n // Used for filtering via offset.\n transfer_serial_id: number;\n\n // Time of the execution of the wire transfer by the exchange, according to the exchange\n // Only provided if we did get an answer from the exchange.\n execution_time?: Timestamp;\n\n // True if we checked the exchange's answer and are happy with it.\n // False if we have an answer and are unhappy, missing if we\n // do not have an answer from the exchange.\n verified?: boolean;\n\n // True if the merchant uses the POST /transfers API to confirm\n // that this wire transfer took place (and it is thus not\n // something merely claimed by the exchange).\n confirmed?: boolean;\n }\n\n\n export interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n // \"NONE\" or 0: No algorithm (no pos confirmation will be generated)\n // \"TOTP_WITHOUT_PRICE\" or 1: Without amounts (typical OTP device)\n // \"TOTP_WITH_PRICE\" or 2: With amounts (special-purpose OTP device)\n // The \"String\" variants are supported @since protocol **v7**.\n otp_algorithm: Integer | string;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDevicePatchDetails {\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDeviceSummaryResponse {\n // Array of devices that are present in our backend.\n otp_devices: OtpDeviceEntry[];\n }\n export interface OtpDeviceEntry {\n // Device identifier.\n otp_device_id: string;\n\n // Human-readable description for the device.\n device_description: string;\n }\n\n export interface OtpDeviceDetails {\n // Human-readable description for the device.\n device_description: string;\n\n // Algorithm for computing the POS confirmation.\n //\n // Currently, the following numbers are defined:\n // 0: None\n // 1: TOTP without price\n // 2: TOTP with price\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n\n // Current time for time-based OTP devices.\n // Will match the faketime argument of the\n // query if one was present, otherwise the current\n // time at the backend.\n //\n // Available since protocol **v10**.\n otp_timestamp: Integer;\n\n // Current OTP confirmation string of the device.\n // Matches exactly the string that would be returned\n // as part of a payment confirmation for the given\n // amount and time (so may contain multiple OTP codes).\n //\n // If the otp_algorithm is time-based, the code is\n // returned for the current time, or for the faketime\n // if a TIMESTAMP query argument was provided by the client.\n //\n // When using OTP with counters, the counter is **NOT**\n // increased merely because this endpoint created\n // an OTP code (this is a GET request, after all!).\n //\n // If the otp_algorithm requires an amount, the\n // amount argument must be specified in the\n // query, otherwise the otp_code is not\n // generated.\n //\n // This field is *optional* in the response, as it is\n // only provided if we could compute it based on the\n // otp_algorithm and matching client query arguments.\n //\n // Available since protocol **v10**.\n otp_code?: string;\n }\n export interface TemplateAddDetails {\n // Template ID to use.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface TemplateContractDetails {\n // Human-readable summary for the template.\n summary?: string;\n\n // Required currency for payments to the template.\n // The user may specify any amount, but it must be\n // in this currency.\n // This parameter is optional and should not be present\n // if \"amount\" is given.\n currency?: string;\n\n // The price is imposed by the merchant and cannot be changed by the customer.\n // This parameter is optional.\n amount?: AmountString;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age: Integer;\n\n // The time the customer need to pay before his order will be deleted.\n // It is deleted if the customer did not pay and if the duration is over.\n pay_duration: RelativeTime;\n }\n\n export interface TemplateContractDetailsDefaults {\n summary?: string;\n\n currency?: string;\n\n amount?: AmountString;\n\n minimum_age?: Integer;\n\n pay_duration?: RelativeTime;\n }\n export interface TemplatePatchDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateSummaryResponse {\n // List of templates that are present in our backend.\n templates: TemplateEntry[];\n }\n\n export interface TemplateEntry {\n // Template identifier, as found in the template.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n }\n\n export interface WalletTemplateDetails {\n // Hard-coded information about the contrac terms\n // for this template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface UsingTemplateDetails {\n // Summary of the template\n summary?: string;\n\n // The amount entered by the customer.\n amount?: AmountString;\n }\n\n export interface WebhookAddDetails {\n // Webhook ID to use.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookPatchDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookSummaryResponse {\n // Return webhooks that are present in our backend.\n webhooks: WebhookEntry[];\n }\n\n export interface WebhookEntry {\n // Webhook identifier, as found in the webhook.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n }\n\n export interface WebhookDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface TokenFamilyCreateRequest {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n // If not specified, merchant backend will use the current time.\n valid_after?: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export enum TokenFamilyKind {\n Discount = \"discount\",\n Subscription = \"subscription\",\n }\n\n export interface TokenFamilyUpdateRequest {\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n }\n\n export interface TokenFamiliesList {\n // All configured token families of this instance.\n token_families: TokenFamilySummary[];\n }\n\n export interface TokenFamilySummary {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export interface TokenFamilyDetails {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n\n // How many tokens have been issued for this family.\n issued: Integer;\n\n // How many tokens have been redeemed for this family.\n redeemed: Integer;\n }\n export interface ContractTerms {\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: { [lang_tag: string]: string };\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: AmountString;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional. When POSTing to the\n // merchant, the placeholder \"${ORDER_ID}\" will be\n // replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL).\n // Note that this placeholder can only be used once.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: { [lang_tag: string]: string };\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: AmountString;\n\n // List of products that are part of the purchase (see Product).\n products: Product[];\n\n // Time when this contract was generated.\n timestamp: Timestamp;\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: Timestamp;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: Timestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: Timestamp;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: EddsaPublicKey;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // More info about the merchant, see below.\n merchant: Merchant;\n\n // The hash of the merchant instance's wire details.\n h_wire: HashCode;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: Exchange[];\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: Timestamp;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: RelativeTime;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\n }\n\n export 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?: Integer;\n\n // 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?: ImageDataUrl;\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?: Timestamp;\n }\n\n export interface Tax {\n // The name of the tax.\n name: string;\n\n // Amount paid in tax.\n tax: AmountString;\n }\n export interface Merchant {\n // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\n }\n // Delivery location, loosely modeled as a subset of\n // ISO20022's PostalAddress25.\n export 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 interface Auditor {\n // Official name.\n name: string;\n\n // Auditor's public key.\n auditor_pub: EddsaPublicKey;\n\n // Base URL of the auditor.\n url: string;\n }\n export interface Exchange {\n // The exchange's base URL.\n url: string;\n\n // How much would the merchant like to use this exchange.\n // The wallet should use a suitable exchange with high\n // priority. The following priority values are used, but\n // it should be noted that they are NOT in any way normative.\n //\n // 0: likely it will not work (recently seen with account\n // restriction that would be bad for this merchant)\n // 512: merchant does not know, might be down (merchant\n // did not yet get /wire response).\n // 1024: good choice (recently confirmed working)\n priority: Integer;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKey;\n }\n}\n\nexport namespace ChallengerApi {\n export interface ChallengerTermsOfServiceResponse {\n // Name of the service\n name: \"challenger\";\n\n // libtool-style representation of the Challenger protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface ChallengeSetupResponse {\n // Nonce to use when constructing /authorize endpoint.\n nonce: string;\n }\n\n export interface Restriction {\n regex?: string;\n hint?: string;\n hint_i18n?: InternationalizedString;\n }\n\n export interface ChallengeStatus {\n // Object; map of keys (names of the fields of the address\n // to be entered by the user) to objects with a \"regex\" (string)\n // containing an extended Posix regular expression for allowed\n // address field values, and a \"hint\"/\"hint_i18n\" giving a\n // human-readable explanation to display if the value entered\n // by the user does not match the regex. Keys that are not mapped\n // to such an object have no restriction on the value provided by\n // the user. See \"ADDRESS_RESTRICTIONS\" in the challenger configuration.\n restrictions: Record<string, Restriction> | undefined;\n\n // indicates if the given address cannot be changed anymore, the\n // form should be read-only if set to true.\n fix_address: boolean;\n\n // form values from the previous submission if available, details depend\n // on the ADDRESS_TYPE, should be used to pre-populate the form\n last_address: Record<string, string> | undefined;\n\n // number of times the address can still be changed, may or may not be\n // shown to the user\n changes_left: Integer;\n }\n\n export interface ChallengeCreateResponse {\n // how many more attempts are allowed, might be shown to the user,\n // highlighting might be appropriate for low values such as 1 or 2 (the\n // form will never be used if the value is zero)\n attempts_left: Integer;\n\n // the address that is being validated, might be shown or not\n address: Object;\n\n // true if we just retransmitted the challenge, false if we sent a\n // challenge recently and thus refused to transmit it again this time;\n // might make a useful hint to the user\n transmitted: boolean;\n\n // timestamp explaining when we would re-transmit the challenge the next\n // time (at the earliest) if requested by the user\n next_tx_time: string;\n }\n\n export interface InvalidPinResponse {\n // numeric Taler error code, should be shown to indicate the error\n // compactly for reporting to developers\n ec?: number;\n\n // human-readable Taler error code, should be shown for the user to\n // understand the error\n hint: string;\n\n // how many times is the user still allowed to change the address;\n // if 0, the user should not be shown a link to jump to the\n // address entry form\n addresses_left: Integer;\n\n // how many times might the PIN still be retransmitted\n pin_transmissions_left: Integer;\n\n // how many times might the user still try entering the PIN code\n auth_attempts_left: Integer;\n\n // if true, the PIN was not even evaluated as the user previously\n // exhausted the number of attempts\n exhausted: boolean;\n\n // if true, the PIN was not even evaluated as no challenge was ever\n // issued (the user must have skipped the step of providing their\n // address first!)\n no_challenge: boolean;\n }\n\n export interface ChallengerAuthResponse {\n // Token used to authenticate access in /info.\n access_token: string;\n\n // Type of the access token.\n token_type: \"Bearer\";\n\n // Amount of time that an access token is valid (in seconds).\n expires_in: Integer;\n }\n\n export interface ChallengerInfoResponse {\n // Unique ID of the record within Challenger\n // (identifies the rowid of the token).\n id: Integer;\n\n // Address that was validated.\n // Key-value pairs, details depend on the\n // address_type.\n address: Object;\n\n // Type of the address.\n address_type: string;\n\n // How long do we consider the address to be\n // valid for this user.\n expires: Timestamp;\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 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) 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 { codecForAny } from \"./codec.js\";\nimport {\n TalerMerchantApi,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n} from \"./http-client/types.js\";\nimport { HttpStatusCode } from \"./http-status-codes.js\";\nimport {\n createPlatformHttpLib,\n expectSuccessResponseOrThrow,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http.js\";\nimport { FacadeCredentials } from \"./libeufin-api-types.js\";\nimport { LibtoolVersion } from \"./libtool-version.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n MerchantInstancesResponse,\n MerchantPostOrderRequest,\n MerchantPostOrderResponse,\n MerchantTemplateAddDetails,\n codecForMerchantPostOrderResponse,\n} from \"./merchant-api-types.js\";\nimport {\n FailCasesByMethod,\n OperationFail,\n OperationOk,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"./operation.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { TalerProtocolDuration } from \"./time.js\";\n\nconst logger = new Logger(\"MerchantApiClient.ts\");\n\n// FIXME: Explain!\nexport type TalerMerchantResultByMethod<prop extends keyof MerchantApiClient> =\n ResultByMethod<MerchantApiClient, prop>;\n\n// FIXME: Explain!\nexport type TalerMerchantErrorsByMethod<prop extends keyof MerchantApiClient> =\n FailCasesByMethod<MerchantApiClient, prop>;\n\nexport interface MerchantAuthConfiguration {\n method: \"external\" | \"token\";\n token?: string;\n}\n\n// FIXME: Why do we need this? Describe / fix!\nexport interface PartialMerchantInstanceConfig {\n auth?: MerchantAuthConfiguration;\n id: string;\n name: string;\n paytoUris: string[];\n address?: unknown;\n jurisdiction?: unknown;\n defaultWireTransferDelay?: TalerProtocolDuration;\n defaultPayDelay?: TalerProtocolDuration;\n}\n\nexport interface CreateMerchantTippingReserveRequest {\n // Amount that the merchant promises to put into the reserve\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for tipping\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\"\n wire_method: string;\n}\n\nexport interface DeleteTippingReserveArgs {\n reservePub: string;\n purge?: boolean;\n}\n\ninterface MerchantBankAccount {\n // The payto:// URI where the wallet will send coins.\n payto_uri: string;\n\n // Optional base URL for a facade where the\n // merchant backend can see incoming wire\n // transfers to reconcile its accounting\n // with that of the exchange. Used by\n // taler-merchant-wirewatch.\n credit_facade_url?: string;\n\n // Credentials for accessing the credit facade.\n credit_facade_credentials?: FacadeCredentials;\n}\n\nexport interface MerchantInstanceConfig {\n auth: MerchantAuthConfiguration;\n id: string;\n name: string;\n address: unknown;\n jurisdiction: unknown;\n use_stefan: boolean;\n default_wire_transfer_delay: TalerProtocolDuration;\n default_pay_delay: TalerProtocolDuration;\n}\n\nexport interface PrivateOrderStatusQuery {\n instance?: string;\n orderId: string;\n sessionId?: string;\n}\n\nexport interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A base64-encoded key\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: number;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: number;\n}\n\n/**\n * Client for the GNU Taler merchant backend.\n */\nexport class MerchantApiClient {\n /**\n * Base URL for the particular instance that this merchant API client\n * is for.\n */\n private baseUrl: string;\n\n readonly auth: MerchantAuthConfiguration;\n\n public readonly PROTOCOL_VERSION = \"6:0:2\";\n\n constructor(\n baseUrl: string,\n options: { auth?: MerchantAuthConfiguration } = {},\n ) {\n this.baseUrl = baseUrl;\n\n this.auth = options?.auth ?? {\n method: \"external\",\n };\n }\n\n httpClient = createPlatformHttpLib();\n\n async changeAuth(auth: MerchantAuthConfiguration): Promise<void> {\n const url = new URL(\"private/auth\", this.baseUrl);\n const res = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: auth,\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(res);\n }\n\n async getPrivateInstanceInfo(): Promise<any> {\n const url = new URL(\"private\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n return await resp.json();\n }\n\n async deleteInstance(instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(resp);\n }\n\n async createInstance(req: MerchantInstanceConfig): Promise<void> {\n const url = new URL(\"management/instances\", this.baseUrl);\n await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n }\n\n async getInstances(): Promise<MerchantInstancesResponse> {\n const url = new URL(\"management/instances\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getInstanceFullDetails(instanceId: string): Promise<any> {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n try {\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return resp.json();\n } catch (e) {\n throw e;\n }\n }\n\n async createOrder(\n req: MerchantPostOrderRequest,\n ): Promise<MerchantPostOrderResponse> {\n let url = new URL(\"private/orders\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantPostOrderResponse(),\n );\n }\n\n async deleteOrder(req: { orderId: string; force?: boolean }): Promise<void> {\n let url = new URL(`private/orders/${req.orderId}`, this.baseUrl);\n if (req.force) {\n url.searchParams.set(\"force\", \"yes\");\n }\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n if (resp.status !== 204) {\n throw Error(`failed to delete order (status ${resp.status})`);\n }\n }\n\n async queryPrivateOrderStatus(\n query: PrivateOrderStatusQuery,\n ): Promise<TalerMerchantApi.MerchantOrderStatusResponse> {\n const reqUrl = new URL(`private/orders/${query.orderId}`, this.baseUrl);\n if (query.sessionId) {\n reqUrl.searchParams.set(\"session_id\", query.sessionId);\n }\n const resp = await this.httpClient.fetch(reqUrl.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n }\n\n async giveRefund(r: {\n instance: string;\n orderId: string;\n amount: string;\n justification: string;\n }): Promise<{ talerRefundUri: string }> {\n const reqUrl = new URL(`private/orders/${r.orderId}/refund`, this.baseUrl);\n const resp = await this.httpClient.fetch(reqUrl.href, {\n method: \"POST\",\n body: {\n refund: r.amount,\n reason: r.justification,\n },\n });\n const respBody = await resp.json();\n return {\n talerRefundUri: respBody.taler_refund_uri,\n };\n }\n\n async createTemplate(req: MerchantTemplateAddDetails) {\n let url = new URL(\"private/templates\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async getTemplate(templateId: string) {\n let url = new URL(`private/templates/${templateId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAny());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig(): Promise<OperationOk<TalerMerchantApi.VersionResponse>> {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async createOtpDevice(\n req: OtpDeviceAddDetails,\n ): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>> {\n let url = new URL(\"private/otp-devices\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n private makeAuthHeader(): Record<string, string> {\n switch (this.auth.method) {\n case \"external\":\n return {};\n case \"token\":\n return {\n Authorization: `Bearer ${this.auth.token}`,\n };\n }\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 TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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", "/*\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 { codecForAmountString } from \"./amounts.js\";\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\", codecForAmountString())\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\", codecForAmountString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"closing_fee\", codecForAmountString())\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\", codecForAmountString())\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 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, Duration } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\n/**\n * Logger.\n */\nconst logger = new Logger(\"OperationThrottler.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 task.\n */\nclass TaskState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n 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 TaskThrottler {\n private perTaskInfo: { [taskId: string]: TaskState } = {};\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): TaskState {\n const s = this.perTaskInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perTaskInfo[origin] = new TaskState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(taskId: string): boolean {\n for (let [k, v] of Object.entries(this.perTaskInfo)) {\n // Remove throttled tasks that haven't seen an update in more than one hour.\n if (\n Duration.cmp(\n AbsoluteTime.difference(v.lastUpdate, AbsoluteTime.now()),\n Duration.fromSpec({ hours: 1 }),\n ) > 1\n ) {\n delete this.perTaskInfo[k];\n }\n }\n return this.getState(taskId).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(taskId: string): Record<string, unknown> {\n const state = this.getState(taskId);\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", "/*\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 * Client for the Taler (demo-)bank.\n */\n\n/**\n * Imports.\n */\nimport {\n AmountString,\n base64FromArrayBuffer,\n buildCodecForObject,\n Codec,\n codecForAny,\n codecForString,\n encodeCrock,\n getRandomBytes,\n HttpStatusCode,\n j2s,\n Logger,\n opEmptySuccess,\n opKnownHttpFailure,\n opUnknownFailure,\n stringToBytes,\n TalerError,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n checkSuccessResponseOrThrow,\n createPlatformHttpLib,\n HttpRequestLibrary,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"bank-api-client.ts\");\n\nexport enum CreditDebitIndicator {\n Credit = \"credit\",\n Debit = \"debit\",\n}\n\nexport interface BankAccountBalanceResponse {\n balance: {\n amount: AmountString;\n credit_debit_indicator: CreditDebitIndicator;\n };\n}\n\nexport interface BankUser {\n username: string;\n password: string;\n accountPaytoUri: string;\n}\n\nexport interface WithdrawalOperationInfo {\n withdrawal_id: string;\n taler_withdraw_uri: string;\n}\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nfunction makeBasicAuthHeader(username: string, password: string): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\nconst codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>\n buildCodecForObject<WithdrawalOperationInfo>()\n .property(\"withdrawal_id\", codecForString())\n .property(\"taler_withdraw_uri\", codecForString())\n .build(\"WithdrawalOperationInfo\");\n\nexport interface BankAccessApiClientArgs {\n auth?: { username: string; password: string };\n httpClient?: HttpRequestLibrary;\n}\n\nexport interface BankAccessApiCreateTransactionRequest {\n amount: AmountString;\n paytoUri: string;\n}\n\nexport class WireGatewayApiClientArgs {\n auth?: {\n username: string;\n password: string;\n };\n httpClient?: HttpRequestLibrary;\n}\n\n/**\n * This API look like it belongs to harness\n * but it will be nice to have in utils to be used by others\n */\nexport class WireGatewayApiClient {\n httpLib;\n\n constructor(\n private baseUrl: string,\n private args: WireGatewayApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n private makeAuthHeader(): Record<string, string> {\n const auth = this.args.auth;\n if (auth) {\n return {\n Authorization: makeBasicAuthHeader(auth.username, auth.password),\n };\n }\n return {};\n }\n\n async adminAddIncoming(params: {\n amount: string;\n reservePub: string;\n debitAccountPayto: string;\n }): Promise<void> {\n let url = new URL(`admin/add-incoming`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount: params.amount,\n reserve_pub: params.reservePub,\n debit_account: params.debitAccountPayto,\n },\n headers: this.makeAuthHeader(),\n });\n logger.info(`add-incoming response status: ${resp.status}`);\n await checkSuccessResponseOrThrow(resp);\n }\n}\n\nexport interface ChallengeContactData {\n // E-Mail address\n email?: string;\n\n // Phone number.\n phone?: string;\n}\n\nexport interface AccountBalance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n}\n\nexport interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n challenge_contact_data?: ChallengeContactData;\n\n // 'payto' address pointing a bank account\n // external to the libeufin-bank.\n // Payments will be sent to this bank account\n // when the user wants to convert the local currency\n // back to fiat currency outside libeufin-bank.\n cashout_payto_uri?: string;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: string;\n}\n\nexport interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: AccountBalance;\n\n // payto://-URI of the account.\n payto_uri: string;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: string;\n}\n\nexport interface ConfirmWithdrawalArgs {\n withdrawalOperationId: string;\n}\n\n/**\n * Client for the Taler corebank API.\n */\nexport class TalerCorebankApiClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n private baseUrl: string,\n private args: BankAccessApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n setAuth(auth: { username: string; password: string }) {\n this.args.auth = auth;\n }\n\n private makeAuthHeader(): Record<string, string> {\n if (!this.args.auth) {\n return {};\n }\n const authHeaderValue = makeBasicAuthHeader(\n this.args.auth.username,\n this.args.auth.password,\n );\n return {\n Authorization: authHeaderValue,\n };\n }\n\n async getAccountBalance(\n username: string,\n ): Promise<BankAccountBalanceResponse> {\n const url = new URL(`accounts/${username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getTransactions(username: string): Promise<void> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"GET\",\n headers: {\n ...this.makeAuthHeader(),\n },\n });\n\n const res = await readSuccessResponseJsonOrThrow(resp, codecForAny());\n logger.info(`result: ${j2s(res)}`);\n }\n\n async createTransaction(\n username: string,\n req: BankAccessApiCreateTransactionRequest,\n ): Promise<any> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n return await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async registerAccountExtended(req: RegisterAccountRequest): Promise<void> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n }\n\n /**\n * Register a new account and return information about it.\n *\n * This is a helper, as it does both the registration and the\n * account info query.\n */\n async registerAccount(username: string, password: string): Promise<BankUser> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n username,\n password,\n name: username,\n },\n headers: this.makeAuthHeader(),\n });\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n // FIXME: Corebank should directly return this info!\n const infoUrl = new URL(`accounts/${username}`, this.baseUrl);\n const infoResp = await this.httpLib.fetch(infoUrl.href, {\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n });\n // FIXME: Validate!\n const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(\n infoResp,\n codecForAny(),\n );\n return {\n password,\n username,\n accountPaytoUri: acctInfo.payto_uri,\n };\n }\n\n async createRandomBankUser(): Promise<BankUser> {\n const username = \"user-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n const password = \"pw-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n return await this.registerAccount(username, password);\n }\n\n async createWithdrawalOperation(\n user: string,\n amount: string,\n ): Promise<WithdrawalOperationInfo> {\n const url = new URL(`accounts/${user}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount,\n },\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForWithdrawalOperationInfo(),\n );\n }\n\n async confirmWithdrawalOperation(\n username: string,\n wopi: ConfirmWithdrawalArgs,\n ) {\n const url = new URL(\n `accounts/${username}/withdrawals/${wopi.withdrawalOperationId}/confirm`,\n this.baseUrl,\n );\n logger.info(`confirming withdrawal operation via ${url.href}`);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async abortWithdrawalOperation(wopi: WithdrawalOperationInfo): Promise<void> {\n const url = new URL(\n `withdrawals/${wopi.withdrawal_id}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\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\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) 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 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 {\n Codec,\n buildCodecForObject,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport {\n AmountString,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n} from \"./taler-types.js\";\nimport { TalerPreciseTimestamp, TalerProtocolTimestamp } from \"./time.js\";\nimport {\n RefreshReason,\n ScopeInfo,\n TalerErrorDetail,\n TransactionIdStr,\n TransactionStateFilter,\n WithdrawalExchangeAccountDetails,\n codecForScopeInfo,\n} from \"./wallet-types.js\";\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n *\n * it will be removed in next release\n *\n * @deprecated use scopeInfo\n */\n currency?: string;\n\n /**\n * return only transactions in the given scopeInfo\n */\n scopeInfo?: ScopeInfo;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * Sort order of the transaction items.\n * By default, items are sorted ascending by their\n * main timestamp.\n *\n * ascending: ascending by timestamp, but pending transactions first\n * descending: ascending by timestamp, but pending transactions first\n * stable-ascending: ascending by timestamp, with pending transactions amidst other transactions\n * (stable in the sense of: pending transactions don't jump around)\n */\n sort?: \"ascending\" | \"descending\" | \"stable-ascending\";\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n\n filterByState?: TransactionStateFilter;\n}\n\nexport interface TransactionState {\n major: TransactionMajorState;\n minor?: TransactionMinorState;\n}\n\nexport enum TransactionMajorState {\n // No state, only used when reporting transitions into the initial state\n None = \"none\",\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Suspended = \"suspended\",\n Dialog = \"dialog\",\n SuspendedAborting = \"suspended-aborting\",\n Failed = \"failed\",\n Expired = \"expired\",\n // Only used for the notification, never in the transaction history\n Deleted = \"deleted\",\n}\n\nexport enum TransactionMinorState {\n // Placeholder until D37 is fully implemented\n Unknown = \"unknown\",\n Deposit = \"deposit\",\n KycRequired = \"kyc\",\n AmlRequired = \"aml\",\n MergeKycRequired = \"merge-kyc\",\n Track = \"track\",\n SubmitPayment = \"submit-payment\",\n RebindSession = \"rebind-session\",\n Refresh = \"refresh\",\n Pickup = \"pickup\",\n AutoRefund = \"auto-refund\",\n User = \"user\",\n Bank = \"bank\",\n Exchange = \"exchange\",\n ClaimProposal = \"claim-proposal\",\n CheckRefund = \"check-refund\",\n CreatePurse = \"create-purse\",\n DeletePurse = \"delete-purse\",\n RefreshExpired = \"refresh-expired\",\n Ready = \"ready\",\n Merge = \"merge\",\n Repurchase = \"repurchase\",\n BankRegisterReserve = \"bank-register-reserve\",\n BankConfirmTransfer = \"bank-confirm-transfer\",\n WithdrawCoins = \"withdraw-coins\",\n ExchangeWaitReserve = \"exchange-wait-reserve\",\n AbortingBank = \"aborting-bank\",\n Aborting = \"aborting\",\n Refused = \"refused\",\n Withdraw = \"withdraw\",\n MerchantOrderProposed = \"merchant-order-proposed\",\n Proposed = \"proposed\",\n RefundAvailable = \"refund-available\",\n AcceptRefund = \"accept-refund\",\n PaidByOther = \"paid-by-other\",\n CompletedByOtherWallet = \"completed-by-other-wallet\",\n}\n\nexport enum TransactionAction {\n Delete = \"delete\",\n Suspend = \"suspend\",\n Resume = \"resume\",\n Abort = \"abort\",\n Fail = \"fail\",\n Retry = \"retry\",\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: TalerPreciseTimestamp;\n\n /**\n * Transaction state, as per DD37.\n */\n txState: TransactionState;\n\n /**\n * Possible transitions based on the current state.\n */\n txActions: TransactionAction[];\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 /**\n * If the transaction minor state is in KycRequired this field is going to\n * have the location where the user need to go to complete KYC information.\n */\n kycUrl?: string;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit\n | TransactionInternalWithdrawal\n | TransactionRecoup\n | TransactionDenomLoss;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n InternalWithdrawal = \"internal-withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n Recoup = \"recoup\",\n DenomLoss = \"denom-loss\",\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 * @deprecated in favor of exchangeCreditAccounts\n */\n exchangePaytoUris: string[];\n\n exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\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 exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\n}\n\nexport enum DenomLossEventType {\n DenomExpired = \"denom-expired\",\n DenomVanished = \"denom-vanished\",\n DenomUnoffered = \"denom-unoffered\",\n}\n\n/**\n * A transaction to indicate financial loss due to denominations\n * that became unusable for deposits.\n */\nexport interface TransactionDenomLoss extends TransactionCommon {\n type: TransactionType.DenomLoss;\n lossEventType: DenomLossEventType;\n exchangeBaseUrl: string;\n}\n\n/**\n * A withdrawal transaction (either bank-integrated or manual).\n */\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\n/**\n * Internal withdrawal operation, only reported on request.\n *\n * Some transactions (peer-*-credit) internally do a withdrawal,\n * but only the peer-*-credit transaction is reported.\n *\n * The internal withdrawal transaction allows to access the details of\n * the underlying withdrawal for testing/debugging.\n *\n * It is usually not reported, so that amounts of transactions properly\n * add up, since the amountEffecive of the withdrawal is already reported\n * in the peer-*-credit transaction.\n */\nexport interface TransactionInternalWithdrawal extends TransactionCommon {\n type: TransactionType.InternalWithdrawal;\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 * Only available in the right state.\n */\n talerUri: string | undefined;\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 * Only present if the transaction is in a state where the other party can\n * 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\n/**\n * The exchange revoked a key and the wallet recoups funds.\n */\nexport interface TransactionRecoup extends TransactionCommon {\n type: TransactionType.Recoup;\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 * 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 /**\n * Does this purchase has an pos validation\n */\n posConfirmation: string | undefined;\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 * 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\n/**\n * Summary information about the payment that we got a refund for.\n */\nexport interface RefundPaymentInfo {\n summary: string;\n summary_i18n?: InternationalizedString;\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\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 // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n paymentInfo: RefundPaymentInfo | undefined;\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\nexport interface DepositTransactionTrackingState {\n // Raw wire transfer identifier of the deposit.\n wireTransferId: string;\n // When was the wire transfer given to the bank.\n timestampExecuted: TalerProtocolTimestamp;\n // Total amount transfer for this wtid (including fees)\n amountRaw: AmountString;\n // Wire fee amount for this exchange\n wireFee: 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 trackingState: Array<DepositTransactionTrackingState>;\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 interface WithdrawalTransactionByURIRequest {\n talerWithdrawUri: string;\n}\n\nexport const codecForWithdrawalTransactionByURIRequest =\n (): Codec<WithdrawalTransactionByURIRequest> =>\n buildCodecForObject<WithdrawalTransactionByURIRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .build(\"WithdrawalTransactionByURIRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"scopeInfo\", codecOptional(codecForScopeInfo()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\n \"sort\",\n codecOptional(\n codecForEither(\n codecForConstString(\"ascending\"),\n codecForConstString(\"descending\"),\n codecForConstString(\"stable-ascending\"),\n ),\n ),\n )\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(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n\nexport interface ListAssociatedRefreshesRequest {\n transactionId: string;\n}\n\nexport const codecForListAssociatedRefreshesRequest =\n (): Codec<ListAssociatedRefreshesRequest> =>\n buildCodecForObject<ListAssociatedRefreshesRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ListAssociatedRefreshesRequest\");\n\nexport interface ListAssociatedRefreshesResponse {\n transactionIds: string[];\n}\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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n renderContext,\n} from \"./codec.js\";\nimport {\n CurrencySpecification,\n TemplateParams,\n WithdrawalOperationStatus,\n canonicalizeBaseUrl,\n} from \"./index.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 AccountRestriction,\n AmountString,\n AuditorDenomSig,\n CoinEnvelope,\n DenomKeyType,\n DenominationPubKey,\n EddsaPrivateKeyString,\n ExchangeAuditor,\n ExchangeWireAccount,\n InternationalizedString,\n MerchantContractTerms,\n MerchantInfo,\n PeerContractTerms,\n UnblindedSignature,\n codecForExchangeWireAccount,\n codecForMerchantContractTerms,\n codecForPeerContractTerms,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n TalerPreciseTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForPreciseTimestamp,\n codecForTimestamp,\n} from \"./time.js\";\nimport {\n OrderShortInfo,\n TransactionState,\n TransactionType,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\ndeclare const __txId: unique symbol;\nexport type TransactionIdStr = `txn:${string}:${string}` & { [__txId]: true };\n\n/**\n * Identifier for a pending task in the wallet.\n */\ndeclare const __pndId: unique symbol;\nexport type PendingIdStr = `pnd:${string}:${string}` & { [__pndId]: true };\n\ndeclare const __tmbId: unique symbol;\nexport type TombstoneIdStr = `tmb:${string}:${string}` & { [__tmbId]: true };\n\nfunction codecForTransactionIdStr(): Codec<TransactionIdStr> {\n return {\n decode(x: any, c?: Context): TransactionIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as TransactionIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForPendingIdStr(): Codec<PendingIdStr> {\n return {\n decode(x: any, c?: Context): PendingIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as PendingIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForTombstoneIdStr(): Codec<TombstoneIdStr> {\n return {\n decode(x: any, c?: Context): TombstoneIdStr {\n if (typeof x === \"string\" && x.startsWith(\"tmb:\")) {\n return x as TombstoneIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"tmb:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nexport function codecForCanonBaseUrl(): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x === \"string\") {\n const canon = canonicalizeBaseUrl(x);\n if (x !== canon) {\n throw new DecodingError(\n `expected canonicalized base URL at ${renderContext(\n c,\n )} but got value '${x}'`,\n );\n }\n return x;\n }\n throw new DecodingError(\n `expected base URL at ${renderContext(c)} but got type ${typeof x}`,\n );\n },\n };\n}\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\n/**\n * How the amount should be interpreted in a transaction\n * Effective = how the balance is change\n * Raw = effective amount without fee\n *\n * Depending on the transaction, raw can be higher than effective\n */\nexport enum TransactionAmountMode {\n Effective = \"effective\",\n Raw = \"raw\",\n}\n\nexport type GetPlanForOperationRequest =\n | GetPlanForWithdrawRequest\n | GetPlanForDepositRequest;\n// | GetPlanForPushDebitRequest\n// | GetPlanForPullCreditRequest\n// | GetPlanForPaymentRequest\n// | GetPlanForTipRequest\n// | GetPlanForRefundRequest\n// | GetPlanForPullDebitRequest\n// | GetPlanForPushCreditRequest;\n\ninterface GetPlanForWalletInitiatedOperation {\n instructedAmount: AmountString;\n mode: TransactionAmountMode;\n}\n\nexport interface ConvertAmountRequest {\n amount: AmountString;\n type: TransactionAmountMode;\n}\n\nexport const codecForConvertAmountRequest =\n buildCodecForObject<ConvertAmountRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"type\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .build(\"ConvertAmountRequest\");\n\nexport interface GetAmountRequest {\n currency: string;\n}\n\nexport const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetAmountRequest\");\n\ninterface GetPlanToCompleteOperation {\n instructedAmount: AmountString;\n}\n\nconst codecForGetPlanForWalletInitiatedOperation = <\n T extends GetPlanForWalletInitiatedOperation,\n>() =>\n buildCodecForObject<T>()\n .property(\n \"mode\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .property(\"instructedAmount\", codecForAmountString());\n\ninterface GetPlanForWithdrawRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Withdrawal;\n exchangeUrl?: string;\n}\ninterface GetPlanForDepositRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Deposit;\n account: string; //payto string\n}\ninterface GetPlanForPushDebitRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPushDebit;\n}\n\ninterface GetPlanForPullCreditRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPullCredit;\n exchangeUrl: string;\n}\n\nconst codecForGetPlanForWithdrawRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForWithdrawRequest>()\n .property(\"type\", codecForConstString(TransactionType.Withdrawal))\n .property(\"exchangeUrl\", codecOptional(codecForString()))\n .build(\"GetPlanForWithdrawRequest\");\n\nconst codecForGetPlanForDepositRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForDepositRequest>()\n .property(\"type\", codecForConstString(TransactionType.Deposit))\n .property(\"account\", codecForString())\n .build(\"GetPlanForDepositRequest\");\n\nconst codecForGetPlanForPushDebitRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPushDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushDebit))\n .build(\"GetPlanForPushDebitRequest\");\n\nconst codecForGetPlanForPullCreditRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPullCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullCredit))\n .property(\"exchangeUrl\", codecForString())\n .build(\"GetPlanForPullCreditRequest\");\n\ninterface GetPlanForPaymentRequest extends GetPlanToCompleteOperation {\n type: TransactionType.Payment;\n wireMethod: string;\n ageRestriction: number;\n maxDepositFee: AmountString;\n}\n\ninterface GetPlanForPullDebitRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPullDebit;\n}\n\ninterface GetPlanForPushCreditRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPushCredit;\n}\n\nconst codecForGetPlanForPaymentRequest =\n buildCodecForObject<GetPlanForPaymentRequest>()\n .property(\"type\", codecForConstString(TransactionType.Payment))\n .property(\"maxDepositFee\", codecForAmountString())\n .build(\"GetPlanForPaymentRequest\");\n\nconst codecForGetPlanForPullDebitRequest =\n buildCodecForObject<GetPlanForPullDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullDebit))\n .build(\"GetPlanForPullDebitRequest\");\n\nconst codecForGetPlanForPushCreditRequest =\n buildCodecForObject<GetPlanForPushCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushCredit))\n .build(\"GetPlanForPushCreditRequest\");\n\nexport const codecForGetPlanForOperationRequest =\n (): Codec<GetPlanForOperationRequest> =>\n buildCodecForUnion<GetPlanForOperationRequest>()\n .discriminateOn(\"type\")\n .alternative(\n TransactionType.Withdrawal,\n codecForGetPlanForWithdrawRequest,\n )\n .alternative(TransactionType.Deposit, codecForGetPlanForDepositRequest)\n // .alternative(\n // TransactionType.PeerPushDebit,\n // codecForGetPlanForPushDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPullCredit,\n // codecForGetPlanForPullCreditRequest,\n // )\n // .alternative(TransactionType.Payment, codecForGetPlanForPaymentRequest)\n // .alternative(\n // TransactionType.PeerPullDebit,\n // codecForGetPlanForPullDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPushCredit,\n // codecForGetPlanForPushCreditRequest,\n // )\n .build(\"GetPlanForOperationRequest\");\n\nexport interface GetPlanForOperationResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n counterPartyAmount?: AmountString;\n details: any;\n}\n\nexport const codecForGetPlanForOperationResponse =\n (): Codec<GetPlanForOperationResponse> =>\n buildCodecForObject<GetPlanForOperationResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .property(\"details\", codecForAny())\n .property(\"counterPartyAmount\", codecOptional(codecForAmountString()))\n .build(\"GetPlanForOperationResponse\");\n\nexport interface AmountResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n}\n\nexport const codecForAmountResponse = (): Codec<AmountResponse> =>\n buildCodecForObject<AmountResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .build(\"AmountResponse\");\n\nexport enum BalanceFlag {\n IncomingKyc = \"incoming-kyc\",\n IncomingAml = \"incoming-aml\",\n IncomingConfirmation = \"incoming-confirmation\",\n OutgoingKyc = \"outgoing-kyc\",\n}\n\nexport interface WalletBalance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n /**\n * Does the balance for this currency have a pending\n * transaction?\n *\n * @deprecated use flags and pendingIncoming/pendingOutgoing instead\n */\n hasPendingTransactions: boolean;\n\n /**\n * Is there a transaction that requires user input?\n *\n * @deprecated use flags instead\n */\n requiresUserInput: boolean;\n\n flags: BalanceFlag[];\n}\n\nexport const codecForScopeInfoGlobal = (): Codec<ScopeInfoGlobal> =>\n buildCodecForObject<ScopeInfoGlobal>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Global))\n .build(\"ScopeInfoGlobal\");\n\nexport const codecForScopeInfoExchange = (): Codec<ScopeInfoExchange> =>\n buildCodecForObject<ScopeInfoExchange>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Exchange))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoExchange\");\n\nexport const codecForScopeInfoAuditor = (): Codec<ScopeInfoAuditor> =>\n buildCodecForObject<ScopeInfoAuditor>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Auditor))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoAuditor\");\n\nexport const codecForScopeInfo = (): Codec<ScopeInfo> =>\n buildCodecForUnion<ScopeInfo>()\n .discriminateOn(\"type\")\n .alternative(ScopeType.Global, codecForScopeInfoGlobal())\n .alternative(ScopeType.Exchange, codecForScopeInfoExchange())\n .alternative(ScopeType.Auditor, codecForScopeInfoAuditor())\n .build(\"ScopeInfo\");\n\nexport interface GetCurrencySpecificationRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForGetCurrencyInfoRequest =\n (): Codec<GetCurrencySpecificationRequest> =>\n buildCodecForObject<GetCurrencySpecificationRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"GetCurrencySpecificationRequest\");\n\nexport interface ListExchangesForScopedCurrencyRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForListExchangesForScopedCurrencyRequest =\n (): Codec<ListExchangesForScopedCurrencyRequest> =>\n buildCodecForObject<ListExchangesForScopedCurrencyRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"ListExchangesForScopedCurrencyRequest\");\n\nexport interface GetCurrencySpecificationResponse {\n currencySpecification: CurrencySpecification;\n}\n\nexport interface BuiltinExchange {\n exchangeBaseUrl: string;\n currencyHint: string;\n}\n\nexport interface PartialWalletRunConfig {\n builtin?: Partial<WalletRunConfig[\"builtin\"]>;\n testing?: Partial<WalletRunConfig[\"testing\"]>;\n features?: Partial<WalletRunConfig[\"features\"]>;\n}\n\nexport interface WalletRunConfig {\n /**\n * Initialization values useful for a complete startup.\n *\n * These are values may be overridden by different wallets\n */\n builtin: {\n exchanges: BuiltinExchange[];\n };\n\n /**\n * Unsafe options which it should only be used to create\n * testing environment.\n */\n testing: {\n /**\n * Allow withdrawal of denominations even though they are about to expire.\n */\n denomselAllowLate: boolean;\n devModeActive: boolean;\n insecureTrustExchange: boolean;\n preventThrottling: boolean;\n skipDefaults: boolean;\n emitObservabilityEvents?: boolean;\n };\n\n /**\n * Configurations values that may be safe to show to the user\n */\n features: {\n allowHttp: boolean;\n };\n}\n\nexport interface InitRequest {\n config?: PartialWalletRunConfig;\n}\n\nexport const codecForInitRequest = (): Codec<InitRequest> =>\n buildCodecForObject<InitRequest>()\n .property(\"config\", codecForAny())\n .build(\"InitRequest\");\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 ScopeInfoGlobal = { type: ScopeType.Global; currency: string };\nexport type ScopeInfoExchange = {\n type: ScopeType.Exchange;\n currency: string;\n url: string;\n};\nexport type ScopeInfoAuditor = {\n type: ScopeType.Auditor;\n currency: string;\n url: string;\n};\n\nexport type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;\n\nexport interface BalancesResponse {\n balances: WalletBalance[];\n}\n\nexport const codecForBalance = (): Codec<WalletBalance> =>\n buildCodecForObject<WalletBalance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForAmountString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForAmountString())\n .property(\"pendingOutgoing\", codecForAmountString())\n .property(\"requiresUserInput\", codecForBoolean())\n .property(\"flags\", codecForAny()) // FIXME\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 * Coin was lost as the denomination is not usable anymore.\n */\n DenomLoss = \"denom-loss\",\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: AmountString;\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: TransactionIdStr;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: TransactionIdStr;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecOptional(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\", codecForTransactionIdStr())\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\", codecForTransactionIdStr())\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 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(\"transactionId\", codecForTransactionIdStr())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\nexport interface BalanceDetails {}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PaymentInsufficientBalanceDetails {\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 balanceReceiverAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceReceiverDepositable: AmountString;\n\n balanceExchangeDepositable: AmountString;\n\n /**\n * Maximum effective amount that the wallet can spend,\n * when all fees are paid by the wallet.\n */\n maxEffectiveSpendAmount: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n balanceExchangeDepositable: AmountString;\n balanceAgeAcceptable: AmountString;\n balanceReceiverAcceptable: AmountString;\n balanceReceiverDepositable: AmountString;\n maxEffectiveSpendAmount: AmountString;\n /**\n * Exchange doesn't have global fees configured for the relevant year,\n * p2p payments aren't possible.\n */\n missingGlobalFees: boolean;\n };\n };\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PaymentInsufficientBalanceDetails> =>\n buildCodecForObject<PaymentInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceReceiverAcceptable\", codecForAmountString())\n .property(\"balanceReceiverDepositable\", codecForAmountString())\n .property(\"balanceExchangeDepositable\", codecForAmountString())\n .property(\"perExchange\", codecForAny())\n .property(\"maxEffectiveSpendAmount\", 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(\"transactionId\", codecForTransactionIdStr())\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\", codecOptional(codecForAmountString()))\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecForString())\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\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 transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId instead\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: AmountString;\n talerUri: string;\n balanceDetails: PaymentInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n transactionId: TransactionIdStr;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: AmountString;\n amountEffective: AmountString | undefined;\n contractTermsHash: string;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n talerUri: string;\n}\n\nexport interface BankWithdrawDetails {\n status: WithdrawalOperationStatus;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n operationId: string;\n apiBaseUrl: string;\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: TransactionIdStr;\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/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 AbortDeposit = \"abort-deposit\",\n AbortPeerPushDebit = \"abort-peer-push-debit\",\n AbortPeerPullDebit = \"abort-peer-pull-debit\",\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 * 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 ExchangesShortListResponse {\n exchanges: ShortExchangeListItem[];\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n implementationSemver: string;\n implementationGitHash: string;\n\n /**\n * Wallet-core protocol version supported by this implementation\n * of the API (\"server\" version).\n */\n version: string;\n exchange: string;\n merchant: string;\n\n bankIntegrationApiRange: string;\n bankConversionApiRange: string;\n corebankApiRange: string;\n\n /**\n * @deprecated as bank was split into multiple APIs with separate versioning\n */\n bank: string;\n\n /**\n * @deprecated\n */\n hash: string | undefined;\n\n /**\n * @deprecated will be removed\n */\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\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\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeWireAccount[];\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 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(codecForExchangeWireAccount()))\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 auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n Pending = \"pending\",\n Proposed = \"proposed\",\n Accepted = \"accepted\",\n}\n\nexport enum ExchangeEntryStatus {\n Preset = \"preset\",\n Ephemeral = \"ephemeral\",\n Used = \"used\",\n}\n\nexport enum ExchangeUpdateStatus {\n Initial = \"initial\",\n InitialUpdate = \"initial-update\",\n Suspended = \"suspended\",\n UnavailableUpdate = \"unavailable-update\",\n Ready = \"ready\",\n ReadyUpdate = \"ready-update\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\nexport interface ShortExchangeListItem {\n exchangeBaseUrl: string;\n}\n\n/**\n * Info about an exchange entry in the wallet.\n */\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n masterPub: string | undefined;\n currency: string;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n ageRestrictionOptions: number[];\n\n /**\n * P2P payments are disabled with this exchange\n * (e.g. because no global fees are configured).\n */\n peerPaymentsDisabled: boolean;\n\n /**\n * Set to true if this exchange doesn't charge any fees.\n */\n noFees: boolean;\n\n scopeInfo: ScopeInfo;\n\n lastUpdateTimestamp: TalerPreciseTimestamp | undefined;\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\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\", codecForCanonBaseUrl())\n .property(\"paytoUris\", codecForList(codecForString()))\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\", codecForCanonBaseUrl())\n .property(\"masterPub\", codecOptional(codecForString()))\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeEntryStatus\", codecForAny())\n .property(\"exchangeUpdateStatus\", codecForAny())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .property(\"scopeInfo\", codecForScopeInfo())\n .property(\"lastUpdateErrorInfo\", codecForAny())\n .property(\"lastUpdateTimestamp\", codecOptional(codecForPreciseTimestamp))\n .property(\"noFees\", codecForBoolean())\n .property(\"peerPaymentsDisabled\", codecForBoolean())\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 * @deprecated in favor of withdrawalAccountsList\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\n\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawalDetailsForAmount {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n *\n * @deprecated the client should query the exchange entry instead\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 * Number of coins that would be used for withdrawal.\n *\n * The UIs should warn if this number is too high (roughly at >100).\n */\n numCoins: number;\n\n /**\n * Ways to pay the exchange.\n *\n * @deprecated in favor of withdrawalAccountsList\n */\n paytoUris: string[];\n\n /**\n * Ways to pay the exchange, including accounts that require currency conversion.\n */\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\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 * Scope info of the currency withdrawn.\n */\n scopeInfo: ScopeInfo;\n}\n\nexport interface DenomSelItem {\n denomPubHash: string;\n count: number;\n /**\n * Number of denoms/planchets to skip, because\n * a re-denomination effectively deleted them.\n */\n skip?: number;\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: DenomSelItem[];\n earliestDepositExpiration: TalerProtocolTimestamp;\n hasDenomWithAgeRestriction: boolean;\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 exchangeCreditAccountDetails: WithdrawalExchangeAccountDetails[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\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 scopeInfo: ScopeInfo;\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 /**\n * Language of the returned content.\n *\n * If missing, language is unknown.\n */\n contentLanguage: string | undefined;\n\n /**\n * Available languages as advertised by the exchange.\n */\n tosAvailableLanguages: string[];\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: AmountString;\n summary: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForTestPayArgs = (): Codec<TestPayArgs> =>\n buildCodecForObject<TestPayArgs>()\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: AmountString;\n amountToSpend: AmountString;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"IntegrationTestArgs\");\n\nexport interface IntegrationTestV2Args {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n}\n\nexport const codecForIntegrationTestV2Args = (): Codec<IntegrationTestV2Args> =>\n buildCodecForObject<IntegrationTestV2Args>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"IntegrationTestV2Args\");\n\nexport interface GetExchangeEntryByUrlRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeEntryByUrlRequest =\n (): Codec<GetExchangeEntryByUrlRequest> =>\n buildCodecForObject<GetExchangeEntryByUrlRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"GetExchangeEntryByUrlRequest\");\n\nexport type GetExchangeEntryByUrlResponse = ExchangeListItem;\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use a separate API call to start a forced exchange update instead\n */\n forceUpdate?: boolean;\n\n masterPub?: string;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .property(\"masterPub\", codecOptional(codecForString()))\n .build(\"AddExchangeRequest\");\n\nexport interface UpdateExchangeEntryRequest {\n exchangeBaseUrl: string;\n force?: boolean;\n}\n\nexport const codecForUpdateExchangeEntryRequest =\n (): Codec<UpdateExchangeEntryRequest> =>\n buildCodecForObject<UpdateExchangeEntryRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"force\", codecOptional(codecForBoolean()))\n .build(\"UpdateExchangeEntryRequest\");\n\nexport interface GetExchangeResourcesRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeResourcesRequest =\n (): Codec<GetExchangeResourcesRequest> =>\n buildCodecForObject<GetExchangeResourcesRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"GetExchangeResourcesRequest\");\n\nexport interface GetExchangeResourcesResponse {\n hasResources: boolean;\n}\n\nexport interface DeleteExchangeRequest {\n exchangeBaseUrl: string;\n purge?: boolean;\n}\n\nexport const codecForDeleteExchangeRequest = (): Codec<DeleteExchangeRequest> =>\n buildCodecForObject<DeleteExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"purge\", codecOptional(codecForBoolean()))\n .build(\"DeleteExchangeRequest\");\n\nexport interface ForceExchangeUpdateRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForceExchangeUpdateRequest =\n (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"AddExchangeRequest\");\n\nexport interface GetExchangeTosRequest {\n exchangeBaseUrl: string;\n acceptedFormat?: string[];\n acceptLanguage?: string;\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .property(\"acceptLanguage\", codecOptional(codecForString()))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * Instead of generating a fresh, random reserve key pair,\n * use the provided reserve private key.\n *\n * Use with caution. Usage of this field may be restricted\n * to developer mode.\n */\n forceReservePriv?: EddsaPrivateKeyString;\n}\n\nexport const codecForAcceptManualWithdrawalRequest =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"forceReservePriv\", codecOptional(codecForString()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * ID provided by the client to cancel the request.\n *\n * If the same request is made again with the same clientCancellationId,\n * all previous requests are cancelled.\n *\n * The cancelled request will receive an error response with\n * an error code that indicates the cancellation.\n *\n * The cancellation is best-effort, responses might still arrive.\n */\n clientCancellationId?: string;\n}\n\nexport interface PrepareBankIntegratedWithdrawalRequest {\n talerWithdrawUri: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\n restrictAge?: number;\n}\n\nexport const codecForPrepareBankIntegratedWithdrawalRequest =\n (): Codec<PrepareBankIntegratedWithdrawalRequest> =>\n buildCodecForObject<PrepareBankIntegratedWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"PrepareBankIntegratedWithdrawalRequest\");\n\nexport interface PrepareBankIntegratedWithdrawalResponse {\n transactionId: string;\n}\n\nexport interface ConfirmWithdrawalRequest {\n transactionId: string;\n}\n\nexport const codecForConfirmWithdrawalRequestRequest =\n (): Codec<ConfirmWithdrawalRequest> =>\n buildCodecForObject<ConfirmWithdrawalRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmWithdrawalRequest\");\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\", codecForCanonBaseUrl())\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\", codecForCanonBaseUrl())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"clientCancellationId\", codecOptional(codecForString()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ForgetExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForgetExchangeTosRequest =\n (): Codec<ForgetExchangeTosRequest> =>\n buildCodecForObject<ForgetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"ForgetExchangeTosRequest\");\n\nexport interface AcceptRefundRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<AcceptRefundRequest> =>\n buildCodecForObject<AcceptRefundRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AcceptRefundRequest\");\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 // @deprecated use transaction id\n proposalId?: string;\n transactionId?: string;\n}\n\nexport const codecForGetContractTermsDetails =\n (): Codec<GetContractTermsDetailsRequest> =>\n buildCodecForObject<GetContractTermsDetailsRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(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 SharePaymentRequest {\n merchantBaseUrl: string;\n orderId: string;\n}\nexport const codecForSharePaymentRequest = (): Codec<SharePaymentRequest> =>\n buildCodecForObject<SharePaymentRequest>()\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"orderId\", codecForString())\n .build(\"SharePaymentRequest\");\n\nexport interface SharePaymentResult {\n privatePayUri: string;\n}\nexport const codecForSharePaymentResult = (): Codec<SharePaymentResult> =>\n buildCodecForObject<SharePaymentResult>()\n .property(\"privatePayUri\", codecForString())\n .build(\"SharePaymentResult\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams?: TemplateParams;\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 /**\n * @deprecated use transactionId instead\n */\n proposalId?: string;\n transactionId?: TransactionIdStr;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\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}\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: AmountString;\n /**\n * Corebank API base URL.\n */\n corebankApiBaseUrl: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\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\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"WithdrawTestBalanceRequest\");\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 RefreshCoinSpec {\n coinPub: string;\n amount?: AmountString;\n}\n\nexport const codecForRefreshCoinSpec = (): Codec<RefreshCoinSpec> =>\n buildCodecForObject<RefreshCoinSpec>()\n .property(\"amount\", codecForAmountString())\n .property(\"coinPub\", codecForString())\n .build(\"ForceRefreshRequest\");\n\nexport interface ForceRefreshRequest {\n refreshCoinSpecs: RefreshCoinSpec[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"refreshCoinSpecs\", codecForList(codecForRefreshCoinSpec()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport interface StartRefundQueryForUriResponse {\n /**\n * Transaction id of the *payment* where the refund query was started.\n */\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface StartRefundQueryRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForStartRefundQueryRequest =\n (): Codec<StartRefundQueryRequest> =>\n buildCodecForObject<StartRefundQueryRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"StartRefundQueryRequest\");\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForFailTransactionRequest =\n (): Codec<FailTransactionRequest> =>\n buildCodecForObject<FailTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"FailTransactionRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForResumeTransaction = (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AbortTransactionRequest\");\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n /**\n * Pre-allocated transaction ID.\n * Allows clients to easily handle notifications\n * that occur while the operation has been created but\n * before the creation request has returned.\n */\n transactionId?: TransactionIdStr;\n depositPaytoUri: string;\n amount: AmountString;\n}\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 fees: DepositGroupFees;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: TransactionIdStr;\n}\n\nexport interface TxIdResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawUriInfoResponse {\n operationId: string;\n status: WithdrawalOperationStatus;\n confirmTransferUrl?: string;\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"operationId\", codecForString())\n .property(\"confirmTransferUrl\", codecOptional(codecForString()))\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"defaultExchangeBaseUrl\", codecOptional(codecForCanonBaseUrl()))\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 TestingListTasksForTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface TestingListTasksForTransactionsResponse {\n taskIdList: string[];\n}\n\nexport const codecForTestingListTasksForTransactionRequest =\n (): Codec<TestingListTasksForTransactionRequest> =>\n buildCodecForObject<TestingListTasksForTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"TestingListTasksForTransactionRequest\");\n\nexport interface DeleteTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\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: TransactionIdStr;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: TransactionIdStr;\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: TransactionIdStr;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: TransactionIdStr;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: TalerPreciseTimestamp;\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 ActiveTask {\n taskId: string;\n transaction: TransactionIdStr | undefined;\n firstTry: AbsoluteTime | undefined;\n nextTry: AbsoluteTime | undefined;\n retryCounter: number | undefined;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport interface GetActiveTasksResponse {\n tasks: ActiveTask[];\n}\n\nexport const codecForActiveTask = (): Codec<ActiveTask> =>\n buildCodecForObject<ActiveTask>()\n .property(\"taskId\", codecForString())\n .property(\"transaction\", codecOptional(codecForTransactionIdStr()))\n .property(\"retryCounter\", codecOptional(codecForNumber()))\n .property(\"firstTry\", codecOptional(codecForAbsoluteTime))\n .property(\"nextTry\", codecOptional(codecForAbsoluteTime))\n .property(\"lastError\", codecOptional(codecForTalerErrorDetail()))\n .build(\"ActiveTask\");\n\nexport const codecForGetActiveTasks = (): Codec<GetActiveTasksResponse> =>\n buildCodecForObject<GetActiveTasksResponse>()\n .property(\"tasks\", codecForList(codecForActiveTask()))\n .build(\"GetActiveTasks\");\n\nexport interface ImportDbRequest {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDbRequest> =>\n buildCodecForObject<ImportDbRequest>()\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 /**\n * Number of coins used for the payment.\n */\n numCoins: number;\n}\n\nexport interface SelectedCoin {\n denomPubHash: string;\n coinPub: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\nexport interface SelectedProspectiveCoin {\n denomPubHash: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n coins: SelectedCoin[];\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 ProspectivePayCoinSelection {\n prospectiveCoins: SelectedProspectiveCoin[];\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(codecForCanonBaseUrl()))\n .property(\"amount\", codecForAmountString())\n .build(\"CheckPeerPushDebitRequest\");\n\nexport interface CheckPeerPushDebitResponse {\n amountRaw: AmountString;\n amountEffective: AmountString;\n exchangeBaseUrl: string;\n /**\n * Maximum expiration date, based on how close the coins\n * used for the payment are to expiry.\n *\n * The value is based on when the wallet would typically\n * automatically refresh the coins on its own, leaving enough\n * time to get a refund for the push payment and refresh the\n * coin.\n */\n maxExpirationDate: TalerProtocolTimestamp;\n}\n\nexport interface InitiatePeerPushDebitRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushDebitResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n transactionId: TransactionIdStr;\n}\n\nexport const codecForInitiatePeerPushDebitRequest =\n (): Codec<InitiatePeerPushDebitRequest> =>\n buildCodecForObject<InitiatePeerPushDebitRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushDebitRequest\");\n\nexport interface PreparePeerPushCreditRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n transactionId: TransactionIdStr;\n\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use transaction ID instead.\n */\n peerPushCreditId: string;\n\n /**\n * @deprecated\n */\n amount: AmountString;\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 peerPullDebitId: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCreditRequest> =>\n buildCodecForObject<PreparePeerPushCreditRequest>()\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 transactionId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n transactionId: TransactionIdStr;\n}\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(\"transactionId\", codecForTransactionIdStr())\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(codecForCanonBaseUrl()))\n .build(\"CheckPeerPullCreditRequest\");\n\nexport interface CheckPeerPullCreditResponse {\n exchangeBaseUrl: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n /**\n * Number of coins that will be used,\n * can be used by the UI to warn if excessively large.\n */\n numCoins: number;\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(codecForCanonBaseUrl()))\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 * @deprecated since it's not necessarily valid yet until the tx is in the right state\n */\n talerUri: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport interface CanonicalizeBaseUrlRequest {\n url: string;\n}\n\nexport const codecForCanonicalizeBaseUrlRequest =\n (): Codec<CanonicalizeBaseUrlRequest> =>\n buildCodecForObject<CanonicalizeBaseUrlRequest>()\n .property(\"url\", codecForString())\n .build(\"CanonicalizeBaseUrlRequest\");\n\nexport interface CanonicalizeBaseUrlResponse {\n url: string;\n}\n\nexport interface ValidateIbanRequest {\n iban: string;\n}\n\nexport const codecForValidateIbanRequest = (): Codec<ValidateIbanRequest> =>\n buildCodecForObject<ValidateIbanRequest>()\n .property(\"iban\", codecForString())\n .build(\"ValidateIbanRequest\");\n\nexport interface ValidateIbanResponse {\n valid: boolean;\n}\n\nexport const codecForValidateIbanResponse = (): Codec<ValidateIbanResponse> =>\n buildCodecForObject<ValidateIbanResponse>()\n .property(\"valid\", codecForBoolean())\n .build(\"ValidateIbanResponse\");\n\nexport type TransactionStateFilter = \"nonfinal\";\n\nexport interface TransactionRecordFilter {\n onlyState?: TransactionStateFilter;\n onlyCurrency?: string;\n}\n\nexport interface StoredBackupList {\n storedBackups: {\n name: string;\n }[];\n}\n\nexport interface CreateStoredBackupResponse {\n name: string;\n}\n\nexport interface RecoverStoredBackupRequest {\n name: string;\n}\n\nexport interface DeleteStoredBackupRequest {\n name: string;\n}\n\nexport const codecForDeleteStoredBackupRequest =\n (): Codec<DeleteStoredBackupRequest> =>\n buildCodecForObject<DeleteStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"DeleteStoredBackupRequest\");\n\nexport const codecForRecoverStoredBackupRequest =\n (): Codec<RecoverStoredBackupRequest> =>\n buildCodecForObject<RecoverStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"RecoverStoredBackupRequest\");\n\nexport interface TestingSetTimetravelRequest {\n offsetMs: number;\n}\n\nexport const codecForTestingSetTimetravelRequest =\n (): Codec<TestingSetTimetravelRequest> =>\n buildCodecForObject<TestingSetTimetravelRequest>()\n .property(\"offsetMs\", codecForNumber())\n .build(\"TestingSetTimetravelRequest\");\n\nexport interface AllowedAuditorInfo {\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport interface AllowedExchangeInfo {\n exchangeBaseUrl: string;\n exchangePub: string;\n}\n\n/**\n * Data extracted from the contract terms that is relevant for payment\n * processing in the wallet.\n */\nexport interface WalletContractData {\n /**\n * Fulfillment URL, or the empty string if the order has no fulfillment URL.\n *\n * Stored as a non-nullable string as we use this field for IndexedDB indexing.\n */\n fulfillmentUrl: string;\n\n contractTermsHash: string;\n fulfillmentMessage?: string;\n fulfillmentMessageI18n?: InternationalizedString;\n merchantSig: string;\n merchantPub: string;\n merchant: MerchantInfo;\n amount: AmountString;\n orderId: string;\n merchantBaseUrl: string;\n summary: string;\n summaryI18n: { [lang_tag: string]: string } | undefined;\n autoRefund: TalerProtocolDuration | undefined;\n payDeadline: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n allowedExchanges: AllowedExchangeInfo[];\n timestamp: TalerProtocolTimestamp;\n wireMethod: string;\n wireInfoHash: string;\n maxDepositFee: AmountString;\n minimumAge?: number;\n}\n\nexport interface TestingWaitTransactionRequest {\n transactionId: TransactionIdStr;\n txState: TransactionState;\n}\n\nexport interface TestingGetDenomStatsRequest {\n exchangeBaseUrl: string;\n}\n\nexport interface TestingGetDenomStatsResponse {\n numKnown: number;\n numOffered: number;\n numLost: number;\n}\n\nexport const codecForTestingGetDenomStatsRequest =\n (): Codec<TestingGetDenomStatsRequest> =>\n buildCodecForObject<TestingGetDenomStatsRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"TestingGetDenomStatsRequest\");\n\nexport interface WithdrawalExchangeAccountDetails {\n /**\n * Payto URI to credit the exchange.\n *\n * Depending on whether the (manual!) withdrawal is accepted or just\n * being checked, this already includes the subject with the\n * reserve public key.\n */\n paytoUri: string;\n\n /**\n * Status that indicates whether the account can be used\n * by the user to send funds for a withdrawal.\n *\n * ok: account should be shown to the user\n * error: account should not be shown to the user, UIs might render the error (in conversionError),\n * especially in dev mode.\n */\n status: \"ok\" | \"error\";\n\n /**\n * Transfer amount. Might be in a different currency than the requested\n * amount for withdrawal.\n *\n * Absent if this is a conversion account and the conversion failed.\n */\n transferAmount?: AmountString;\n\n /**\n * Currency specification for the external currency.\n *\n * Only included if this account requires a currency conversion.\n */\n currencySpecification?: CurrencySpecification;\n\n /**\n * Further restrictions for sending money to the\n * exchange.\n */\n creditRestrictions?: AccountRestriction[];\n\n /**\n * Label given to the account or the account's bank by the exchange.\n */\n bankLabel?: string;\n\n /*\n * Display priority assigned to this bank account by the exchange.\n */\n priority?: number;\n\n /**\n * Error that happened when attempting to request the conversion rate.\n */\n conversionError?: TalerErrorDetail;\n}\n\nexport interface PrepareWithdrawExchangeRequest {\n /**\n * A taler://withdraw-exchange URI.\n */\n talerUri: string;\n}\n\nexport const codecForPrepareWithdrawExchangeRequest =\n (): Codec<PrepareWithdrawExchangeRequest> =>\n buildCodecForObject<PrepareWithdrawExchangeRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PrepareWithdrawExchangeRequest\");\n\nexport interface PrepareWithdrawExchangeResponse {\n /**\n * Base URL of the exchange that already existed\n * or was ephemerally added as an exchange entry to\n * the wallet.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount from the taler://withdraw-exchange URI.\n * Only present if specified in the URI.\n */\n amount?: AmountString;\n}\n\nexport interface ExchangeEntryState {\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n}\n\nexport interface ListGlobalCurrencyAuditorsResponse {\n auditors: {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n }[];\n}\n\nexport interface ListGlobalCurrencyExchangesResponse {\n exchanges: {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n }[];\n}\n\nexport interface AddGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForAddGlobalCurrencyExchangeRequest =\n (): Codec<AddGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<AddGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"AddGlobalCurrencyExchangeRequest\");\n\nexport interface RemoveGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyExchangeRequest =\n (): Codec<RemoveGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"RemoveGlobalCurrencyExchangeRequest\");\n\nexport interface AddGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForAddGlobalCurrencyAuditorRequest =\n (): Codec<AddGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<AddGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForCanonBaseUrl())\n .property(\"auditorPub\", codecForString())\n .build(\"AddGlobalCurrencyAuditorRequest\");\n\nexport interface RemoveGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyAuditorRequest =\n (): Codec<RemoveGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForCanonBaseUrl())\n .property(\"auditorPub\", codecForString())\n .build(\"RemoveGlobalCurrencyAuditorRequest\");\n\n/**\n * Information about one provider.\n *\n * We don't store the account key here,\n * as that's derived from the wallet root key.\n */\nexport interface ProviderInfo {\n active: boolean;\n syncProviderBaseUrl: string;\n name: string;\n terms?: BackupProviderTerms;\n /**\n * Last communication issue with the provider.\n */\n lastError?: TalerErrorDetail;\n lastSuccessfulBackupTimestamp?: TalerPreciseTimestamp;\n lastAttemptedBackupTimestamp?: TalerPreciseTimestamp;\n paymentProposalIds: string[];\n backupProblem?: BackupProblem;\n paymentStatus: ProviderPaymentStatus;\n}\n\nexport interface BackupProviderTerms {\n supportedProtocolVersion: string;\n annualFee: AmountString;\n storageLimitInMegabytes: number;\n}\n\nexport type BackupProblem =\n | BackupUnreadableProblem\n | BackupConflictingDeviceProblem;\n\nexport interface BackupUnreadableProblem {\n type: \"backup-unreadable\";\n}\n\nexport interface BackupConflictingDeviceProblem {\n type: \"backup-conflicting-device\";\n otherDeviceId: string;\n myDeviceId: string;\n backupTimestamp: AbsoluteTime;\n}\n\nexport type ProviderPaymentStatus =\n | ProviderPaymentTermsChanged\n | ProviderPaymentPaid\n | ProviderPaymentInsufficientBalance\n | ProviderPaymentUnpaid\n | ProviderPaymentPending;\n\nexport enum ProviderPaymentType {\n Unpaid = \"unpaid\",\n Pending = \"pending\",\n InsufficientBalance = \"insufficient-balance\",\n Paid = \"paid\",\n TermsChanged = \"terms-changed\",\n}\n\nexport interface ProviderPaymentUnpaid {\n type: ProviderPaymentType.Unpaid;\n}\n\nexport interface ProviderPaymentInsufficientBalance {\n type: ProviderPaymentType.InsufficientBalance;\n amount: AmountString;\n}\n\nexport interface ProviderPaymentPending {\n type: ProviderPaymentType.Pending;\n talerUri?: string;\n}\n\nexport interface ProviderPaymentPaid {\n type: ProviderPaymentType.Paid;\n paidUntil: AbsoluteTime;\n}\n\nexport interface ProviderPaymentTermsChanged {\n type: ProviderPaymentType.TermsChanged;\n paidUntil: AbsoluteTime;\n oldTerms: BackupProviderTerms;\n newTerms: BackupProviderTerms;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport interface SyncTermsOfServiceResponse {\n // maximum backup size supported\n storage_limit_in_megabytes: number;\n\n // Fee for an account, per year.\n annual_fee: AmountString;\n\n // protocol version supported by the server,\n // for now always \"0.0\".\n version: string;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport const codecForSyncTermsOfServiceResponse =\n (): Codec<SyncTermsOfServiceResponse> =>\n buildCodecForObject<SyncTermsOfServiceResponse>()\n .property(\"storage_limit_in_megabytes\", codecForNumber())\n .property(\"annual_fee\", codecForAmountString())\n .property(\"version\", codecForString())\n .build(\"SyncTermsOfServiceResponse\");\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { AmountJson, Amounts } from \"../amounts.js\";\nimport { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport { TalerErrorCode } from \"../taler-error-codes.js\";\nimport { codecForTalerErrorDetail } from \"../wallet-types.js\";\nimport {\n AccessToken,\n TalerBankConversionApi,\n codecForCashinConversionResponse,\n codecForCashoutConversionResponse,\n codecForConversionBankConfig,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerBankConversionResultByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = ResultByMethod<TalerBankConversionHttpClient, prop>;\nexport type TalerBankConversionErrorsByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;\n\nexport enum TalerBankConversionCacheEviction {\n UPDATE_RATE,\n}\n\n/**\n * The API is used by the wallets.\n */\nexport class TalerBankConversionHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForConversionBankConfig());\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate\n *\n */\n async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) {\n const url = new URL(`cashin-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashinConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate\n *\n */\n async getCashoutRate(conversion: {\n debit?: AmountJson;\n credit?: AmountJson;\n }) {\n const url = new URL(`cashout-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate\n *\n */\n async updateConversionRate(\n auth: AccessToken,\n body: TalerBankConversionApi.ConversionRate,\n ) {\n const url = new URL(`conversion-rate`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerBankConversionCacheEviction.UPDATE_RATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n LibtoolVersion,\n LongPollParams,\n OperationAlternative,\n OperationFail,\n OperationOk,\n TalerErrorCode,\n codecForChallenge,\n codecForTanTransmission,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opKnownTalerFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n PaginationParams,\n TalerCorebankApi,\n UserAndToken,\n WithdrawalOperationStatus,\n codecForAccountData,\n codecForBankAccountCreateWithdrawalResponse,\n codecForBankAccountTransactionInfo,\n codecForBankAccountTransactionsResponse,\n codecForCashoutPending,\n codecForCashoutStatusResponse,\n codecForCashouts,\n codecForCoreBankConfig,\n codecForCreateTransactionResponse,\n codecForGlobalCashouts,\n codecForListBankAccountsResponse,\n codecForMonitorResponse,\n codecForPublicAccountsResponse,\n codecForRegisterAccountResponse,\n codecForWithdrawalPublicInfo,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n IdempotencyRetry,\n addLongPollingParam,\n addPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerCoreBankResultByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = ResultByMethod<TalerCoreBankHttpClient, prop>;\nexport type TalerCoreBankErrorsByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;\n\nexport enum TalerCoreBankCacheEviction {\n DELETE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_ACCOUNT,\n UPDATE_PASSWORD,\n CREATE_TRANSACTION,\n CONFIRM_WITHDRAWAL,\n ABORT_WITHDRAWAL,\n CREATE_WITHDRAWAL,\n CREATE_CASHOUT,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerCoreBankHttpClient {\n public readonly PROTOCOL_VERSION = \"4:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCoreBankConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // ACCOUNTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts\n *\n */\n async createAccount(\n auth: AccessToken | undefined,\n body: TalerCorebankApi.RegisterAccountRequest,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n const headers: Record<string, string> = {};\n if (auth) {\n headers.Authorization = makeBearerTokenAuthHeader(auth);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers: headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n TalerCoreBankCacheEviction.CREATE_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForRegisterAccountResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-corebank.html#delete--accounts-$USERNAME\n *\n */\n async deleteAccount(auth: UserAndToken, cid?: string) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME\n *\n */\n async updateAccount(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountReconfiguration,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME-auth\n *\n */\n async updatePassword(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountPasswordChange,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/auth`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--public-accounts\n *\n */\n async getPublicAccounts(\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`public-accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForPublicAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ public_accounts: [] });\n case HttpStatusCode.NotFound:\n return opFixedSuccess({ public_accounts: [] });\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts\n *\n */\n async getAccounts(\n auth: AccessToken,\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForListBankAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ accounts: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME\n *\n */\n async getAccount(auth: UserAndToken) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountData());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // TRANSACTIONS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions\n *\n */\n async getTransactions(\n auth: UserAndToken,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountTransactionsResponse(),\n );\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ transactions: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions-$TRANSACTION_ID\n *\n */\n async getTransactionById(auth: UserAndToken, txid: number) {\n const url = new URL(\n `accounts/${auth.username}/transactions/${String(txid)}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountTransactionInfo());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions\n *\n */\n async createTransaction(\n auth: UserAndToken,\n body: TalerCorebankApi.CreateTransactionRequest,\n idempotencyCheck: IdempotencyRetry | undefined,\n cid?: string,\n ): Promise<\n //manually definition all return types because of recursion\n | OperationOk<TalerCorebankApi.CreateTransactionResponse>\n | OperationAlternative<HttpStatusCode.Accepted, TalerCorebankApi.Challenge>\n | OperationFail<HttpStatusCode.NotFound>\n | OperationFail<HttpStatusCode.BadRequest>\n | OperationFail<HttpStatusCode.Unauthorized>\n | OperationFail<TalerErrorCode.BANK_UNALLOWED_DEBIT>\n | OperationFail<TalerErrorCode.BANK_ADMIN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_SAME_ACCOUNT>\n | OperationFail<TalerErrorCode.BANK_UNKNOWN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED>\n > {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n if (idempotencyCheck) {\n body.request_uid = idempotencyCheck.uid;\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCreateTransactionResponse());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n if (!idempotencyCheck) {\n return opKnownTalerFailure(details.code, details);\n }\n const nextRetry = idempotencyCheck.next();\n return this.createTransaction(auth, body, nextRetry, cid);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // WITHDRAWALS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals\n *\n */\n async createWithdrawal(\n auth: UserAndToken,\n body: TalerCorebankApi.BankAccountCreateWithdrawalRequest,\n ) {\n const url = new URL(`accounts/${auth.username}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountCreateWithdrawalResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-confirm\n *\n */\n async confirmWithdrawalById(auth: UserAndToken, wid: string, cid?: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-abort\n *\n */\n async abortWithdrawalById(auth: UserAndToken, wid: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--withdrawals-$WITHDRAWAL_ID\n *\n */\n async getWithdrawalById(\n wid: string,\n params?: {\n old_state?: WithdrawalOperationStatus;\n } & LongPollParams,\n ) {\n const url = new URL(`withdrawals/${wid}`, this.baseUrl);\n addLongPollingParam(url, params);\n if (params) {\n url.searchParams.set(\n \"old_state\",\n !params.old_state ? \"pending\" : params.old_state,\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWithdrawalPublicInfo());\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // CASHOUTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts\n *\n */\n async createCashout(\n auth: UserAndToken,\n body: TalerCorebankApi.CashoutRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutPending());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONVERSION_AMOUNT_TO_SMALL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts-$CASHOUT_ID\n *\n */\n async getCashoutById(auth: UserAndToken, cid: number) {\n const url = new URL(\n `accounts/${auth.username}/cashouts/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutStatusResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts\n *\n */\n async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--cashouts\n *\n */\n async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {\n const url = new URL(`cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForGlobalCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // 2FA\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID\n *\n */\n async sendChallenge(auth: UserAndToken, cid: string) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTanTransmission());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID-confirm\n *\n */\n async confirmChallenge(\n auth: UserAndToken,\n cid: string,\n body: TalerCorebankApi.ChallengeSolve,\n ) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // MONITOR\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--monitor\n *\n */\n async getMonitor(\n auth: AccessToken,\n params: {\n timeframe?: TalerCorebankApi.MonitorTimeframeParam;\n date?: AbsoluteTime;\n } = {},\n ) {\n const url = new URL(`monitor`, this.baseUrl);\n if (params.timeframe) {\n url.searchParams.set(\n \"timeframe\",\n TalerCorebankApi.MonitorTimeframeParam[params.timeframe],\n );\n }\n if (params.date) {\n const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);\n if (seconds !== \"never\") {\n url.searchParams.set(\"date_s\", String(seconds));\n }\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMonitorResponse());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Others API\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getIntegrationAPI(): URL {\n return new URL(`taler-integration/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getWireGatewayAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-wire-gateway/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getRevenueAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getAuthenticationAPI(username: string): URL {\n return new URL(`accounts/${username}/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getConversionInfoAPI(): URL {\n return new URL(`conversion-info/`, this.baseUrl);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n FailCasesByMethod,\n HttpStatusCode,\n LibtoolVersion,\n PaginationParams,\n ResultByMethod,\n TalerMerchantApi,\n codecForAbortResponse,\n codecForAccountAddResponse,\n codecForAccountKycRedirects,\n codecForAccountsSummaryResponse,\n codecForBankAccountEntry,\n codecForClaimResponse,\n codecForInstancesResponse,\n codecForInventorySummaryResponse,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n codecForMerchantRefundResponse,\n codecForOrderHistory,\n codecForOtpDeviceDetails,\n codecForOtpDeviceSummaryResponse,\n codecForOutOfStockResponse,\n codecForPaidRefundStatusResponse,\n codecForPaymentResponse,\n codecForPostOrderResponse,\n codecForProductDetail,\n codecForQueryInstancesResponse,\n codecForStatusGoto,\n codecForStatusPaid,\n codecForStatusStatusUnpaid,\n codecForTansferList,\n codecForTemplateDetails,\n codecForTemplateSummaryResponse,\n codecForTokenFamiliesList,\n codecForTokenFamilyDetails,\n codecForWalletRefundResponse,\n codecForWalletTemplateDetails,\n codecForWebhookDetails,\n codecForWebhookSummaryResponse,\n opEmptySuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n HttpResponse,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport { opSuccessFromHttp, opUnknownFailure } from \"../operation.js\";\nimport {\n CacheEvictor,\n addMerchantPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerMerchantInstanceResultByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = ResultByMethod<TalerMerchantInstanceHttpClient, prop>;\nexport type TalerMerchantInstanceErrorsByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = FailCasesByMethod<TalerMerchantInstanceHttpClient, prop>;\n\nexport enum TalerMerchantInstanceCacheEviction {\n CREATE_ORDER,\n UPDATE_ORDER,\n DELETE_ORDER,\n UPDATE_CURRENT_INSTANCE,\n DELETE_CURRENT_INSTANCE,\n CREATE_BANK_ACCOUNT,\n UPDATE_BANK_ACCOUNT,\n DELETE_BANK_ACCOUNT,\n CREATE_PRODUCT,\n UPDATE_PRODUCT,\n DELETE_PRODUCT,\n CREATE_TRANSFER,\n DELETE_TRANSFER,\n CREATE_DEVICE,\n UPDATE_DEVICE,\n DELETE_DEVICE,\n CREATE_TEMPLATE,\n UPDATE_TEMPLATE,\n DELETE_TEMPLATE,\n CREATE_WEBHOOK,\n UPDATE_WEBHOOK,\n DELETE_WEBHOOK,\n CREATE_TOKENFAMILY,\n UPDATE_TOKENFAMILY,\n DELETE_TOKENFAMILY,\n LAST,\n}\nexport enum TalerMerchantManagementCacheEviction {\n CREATE_INSTANCE = TalerMerchantInstanceCacheEviction.LAST + 1,\n UPDATE_INSTANCE,\n DELETE_INSTANCE,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerMerchantInstanceHttpClient {\n public readonly PROTOCOL_VERSION = \"10:0:6\";\n\n readonly httpLib: HttpRequestLibrary;\n readonly cacheEvictor: CacheEvictor<TalerMerchantInstanceCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerMerchantInstanceCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wallet API\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim\n */\n async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {\n const url = new URL(`orders/${orderId}/claim`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForClaimResponse());\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-pay\n */\n async makePayment(orderId: string, body: TalerMerchantApi.PayRequest) {\n const url = new URL(`orders/${orderId}/pay`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaymentResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PaymentRequired:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.RequestTimeout:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PreconditionFailed:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID\n */\n\n async getPaymentStatus(\n orderId: string,\n params: TalerMerchantApi.PaymentStatusRequestParams = {},\n ) {\n const url = new URL(`orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.awaitRefundObtained !== undefined) {\n url.searchParams.set(\n \"await_refund_obtained\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.claimToken !== undefined) {\n url.searchParams.set(\"token\", params.claimToken);\n }\n if (params.contractTermHash !== undefined) {\n url.searchParams.set(\"h_contract\", params.contractTermHash);\n }\n if (params.refund !== undefined) {\n url.searchParams.set(\"refund\", params.refund);\n }\n if (params.sessionId !== undefined) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout !== undefined) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n // body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForStatusPaid());\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForStatusGoto());\n // case HttpStatusCode.Found: not possible since content is not HTML\n case HttpStatusCode.PaymentRequired:\n return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#demonstrating-payment\n */\n async demostratePayment(orderId: string, body: TalerMerchantApi.PaidRequest) {\n const url = new URL(`orders/${orderId}/paid`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments\n */\n async abortIncompletePayment(\n orderId: string,\n body: TalerMerchantApi.AbortRequest,\n ) {\n const url = new URL(`orders/${orderId}/abort`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForAbortResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#obtaining-refunds\n */\n async obtainRefund(\n orderId: string,\n body: TalerMerchantApi.WalletRefundRequest,\n ) {\n const url = new URL(`orders/${orderId}/refund`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForWalletRefundResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth\n */\n async updateCurrentInstanceAuthentication(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(`private/auth`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: // FIXME: missing in docs\n return opEmptySuccess(resp);\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private\n */\n async updateCurrentInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private\n *\n */\n async getCurrentInstanceDetails(token: AccessToken) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private\n */\n async deleteCurrentInstance(\n token: AccessToken | undefined,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc\n */\n async getCurrentIntanceKycStatus(\n token: AccessToken | undefined,\n params: TalerMerchantApi.GetKycStatusRequestParams = {},\n ) {\n const url = new URL(`private/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForAccountKycRedirects(),\n );\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Bank Accounts\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts\n */\n async addBankAccount(\n token: AccessToken | undefined,\n body: TalerMerchantApi.AccountAddDetails,\n ) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForAccountAddResponse());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async updateBankAccount(\n token: AccessToken | undefined,\n wireAccount: string,\n body: TalerMerchantApi.AccountPatchDetails,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts\n */\n async listBankAccounts(token: AccessToken, params?: PaginationParams) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n // addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async getBankAccountDetails(\n token: AccessToken | undefined,\n wireAccount: string,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountEntry());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async deleteBankAccount(token: AccessToken | undefined, wireAccount: string) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Inventory Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products\n */\n async addProduct(\n token: AccessToken | undefined,\n body: TalerMerchantApi.ProductAddDetail,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async updateProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.ProductPatchDetail,\n ) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products\n */\n async listProducts(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInventorySummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: not in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async getProductDetails(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForProductDetail());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#reserving-inventory\n */\n async lockProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.LockRequest,\n ) {\n const url = new URL(`private/products/${productId}/lock`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory\n */\n async deleteProduct(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Payment processing\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders\n */\n async createOrder(\n token: AccessToken | undefined,\n body: TalerMerchantApi.PostOrderRequest,\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n return this.procesOrderCreationResponse(resp);\n }\n\n private async procesOrderCreationResponse(resp: HttpResponse) {\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPostOrderResponse());\n }\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-orders\n */\n async listOrders(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListOrdersRequestParams = {},\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n if (params.date) {\n url.searchParams.set(\"date_s\", String(params.date));\n }\n if (params.fulfillmentUrl) {\n url.searchParams.set(\"fulfillment_url\", params.fulfillmentUrl);\n }\n if (params.paid !== undefined) {\n url.searchParams.set(\"paid\", params.paid ? \"YES\" : \"NO\");\n }\n if (params.refunded !== undefined) {\n url.searchParams.set(\"refunded\", params.refunded ? \"YES\" : \"NO\");\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout\", String(params.timeout));\n }\n if (params.wired !== undefined) {\n url.searchParams.set(\"wired\", params.wired ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOrderHistory());\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async getOrderDetails(\n token: AccessToken | undefined,\n orderId: string,\n params: TalerMerchantApi.GetOrderRequestParams = {},\n ) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup\n */\n async forgetOrder(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.ForgetRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async deleteOrder(token: AccessToken | undefined, orderId: string) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Refunds\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund\n */\n async addRefund(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.RefundRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForMerchantRefundResponse());\n }\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wire Transfer\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers\n */\n async informWireTransfer(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TransferInformation,\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers\n */\n async listWireTransfers(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListWireTransferRequestParams = {},\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n if (params.after) {\n url.searchParams.set(\"after\", String(params.after));\n }\n if (params.before) {\n url.searchParams.set(\"before\", String(params.before));\n }\n if (params.paytoURI) {\n url.searchParams.set(\"payto_uri\", params.paytoURI);\n }\n if (params.verified !== undefined) {\n url.searchParams.set(\"verified\", params.verified ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTansferList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID\n */\n async deleteWireTransfer(token: AccessToken | undefined, transferId: string) {\n const url = new URL(`private/transfers/${transferId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // OTP Devices\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices\n */\n async addOtpDevice(\n token: AccessToken | undefined,\n body: TalerMerchantApi.OtpDeviceAddDetails,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async updateOtpDevice(\n token: AccessToken | undefined,\n deviceId: string,\n body: TalerMerchantApi.OtpDevicePatchDetails,\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices\n */\n async listOtpDevices(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async getOtpDeviceDetails(\n token: AccessToken | undefined,\n deviceId: string,\n params: TalerMerchantApi.GetOtpDeviceRequestParams = {},\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n if (params.faketime) {\n url.searchParams.set(\"faketime\", String(params.faketime));\n }\n if (params.price) {\n url.searchParams.set(\"price\", params.price);\n }\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async deleteOtpDevice(token: AccessToken | undefined, deviceId: string) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Templates\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates\n */\n async addTemplate(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TemplateAddDetails,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async updateTemplate(\n token: AccessToken | undefined,\n templateId: string,\n body: TalerMerchantApi.TemplatePatchDetails,\n ) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-template\n */\n async listTemplates(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async getTemplateDetails(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async deleteTemplate(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-templates-$TEMPLATE_ID\n */\n async useTemplateGetInfo(templateId: string) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWalletTemplateDetails());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID\n */\n async useTemplateCreateOrder(\n templateId: string,\n body: TalerMerchantApi.UsingTemplateDetails,\n ) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n return this.procesOrderCreationResponse(resp);\n }\n\n //\n // Webhooks\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks\n */\n async addWebhook(\n token: AccessToken | undefined,\n body: TalerMerchantApi.WebhookAddDetails,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async updateWebhook(\n token: AccessToken | undefined,\n webhookId: string,\n body: TalerMerchantApi.WebhookPatchDetails,\n ) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks\n */\n async listWebhooks(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWebhookSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async getWebhookDetails(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opSuccessFromHttp(resp, codecForWebhookDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async deleteWebhook(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // token families\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async createTokenFamily(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TokenFamilyCreateRequest,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async updateTokenFamily(\n token: AccessToken | undefined,\n tokenSlug: string,\n body: TalerMerchantApi.TokenFamilyUpdateRequest,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY,\n );\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async listTokenFamilies(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamiliesList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async getTokenFamilyDetails(\n token: AccessToken | undefined,\n tokenSlug: string,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async deleteTokenFamily(token: AccessToken | undefined, tokenSlug: string) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * Get the auth api against the current instance\n *\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token\n */\n getAuthenticationAPI(): URL {\n return new URL(`private/`, this.baseUrl);\n }\n}\n\nexport type TalerMerchantManagementResultByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = ResultByMethod<TalerMerchantManagementHttpClient, prop>;\nexport type TalerMerchantManagementErrorsByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = FailCasesByMethod<TalerMerchantManagementHttpClient, prop>;\n\nexport class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {\n readonly cacheManagementEvictor: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n // cacheManagementEvictor?: CacheEvictor<TalerMerchantManagementCacheEviction>,\n cacheEvictor?: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >,\n ) {\n super(baseUrl, httpClient, cacheEvictor);\n this.cacheManagementEvictor = cacheEvictor ?? nullEvictor;\n }\n\n getSubInstanceAPI(instanceId: string) {\n return new URL(`instances/${instanceId}/`, this.baseUrl);\n }\n\n //\n // Instance Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances\n */\n async createInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceConfigurationMessage,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.CREATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth\n */\n async updateInstanceAuthentication(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(\n `management/instances/${instanceId}/auth`,\n this.baseUrl,\n );\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE\n */\n async updateInstance(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.UPDATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances\n */\n async listInstances(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE\n *\n */\n async getInstanceDetails(token: AccessToken | undefined, instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE\n */\n async deleteInstance(\n token: AccessToken | undefined,\n instanceId: string,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.DELETE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc\n */\n async getIntanceKycStatus(\n token: AccessToken | undefined,\n instanceId: string,\n params: TalerMerchantApi.GetKycStatusRequestParams,\n ) {\n const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { TalerCoreBankCacheEviction } from \"../index.node.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n RedirectResult,\n ResultByMethod,\n opFixedSuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n codecForChallengeCreateResponse,\n codecForChallengeSetupResponse,\n codecForChallengeStatus,\n codecForChallengerAuthResponse,\n codecForChallengerInfoResponse,\n codecForChallengerTermsOfServiceResponse,\n codecForInvalidPinResponse,\n} from \"./types.js\";\nimport { CacheEvictor, makeBearerTokenAuthHeader, nullEvictor } from \"./utils.js\";\n\nexport type ChallengerResultByMethod<prop extends keyof ChallengerHttpClient> =\n ResultByMethod<ChallengerHttpClient, prop>;\nexport type ChallengerErrorsByMethod<prop extends keyof ChallengerHttpClient> =\n FailCasesByMethod<ChallengerHttpClient, prop>;\n\nexport enum ChallengerCacheEviction {\n CREATE_CHALLENGE,\n}\n\n/**\n */\nexport class ChallengerHttpClient {\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<ChallengerCacheEviction>;\n public readonly PROTOCOL_VERSION = \"1:0:0\";\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<ChallengerCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForChallengerTermsOfServiceResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#post--setup-$CLIENT_ID\n *\n */\n async setup(clientId: string, token: AccessToken) {\n const url = new URL(`setup/${clientId}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeSetupResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // LOGIN\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--authorize-$NONCE\n *\n */\n async login(\n nonce: string,\n clientId: string,\n redirectUri: string,\n state: string | undefined,\n ) {\n const url = new URL(`authorize/${nonce}`, this.baseUrl);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n if (state) {\n url.searchParams.set(\"state\", state);\n }\n // url.searchParams.set(\"scope\", \"code\");\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeStatus());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // CHALLENGE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--challenge-$NONCE\n *\n */\n async challenge(nonce: string, body: Record<\"email\", string>) {\n const url = new URL(`challenge/${nonce}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n ChallengerCacheEviction.CREATE_CHALLENGE,\n );\n return opSuccessFromHttp(resp, codecForChallengeCreateResponse());\n }\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // SOLVE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--solve-$NONCE\n *\n */\n async solve(nonce: string, body: Record<string, string>) {\n const url = new URL(`solve/${nonce}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForInvalidPinResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // AUTH\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--token\n *\n */\n async token(\n client_id: string,\n redirect_uri: string,\n client_secret: AccessToken,\n code: string,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams(\n Object.entries({\n client_id,\n redirect_uri,\n client_secret,\n code,\n grant_type: \"authorization_code\",\n }),\n ).toString(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerAuthResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // INFO\n\n /**\n * https://docs.taler.net/core/api-challenger.html#get--info\n *\n */\n async info(token: AccessToken) {\n const url = new URL(`info`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerInfoResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport { hash } from \"../nacl-fast.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n TalerSignaturePurpose,\n amountToBuffer,\n bufferForUint32,\n buildSigPS,\n decodeCrock,\n eddsaSign,\n encodeCrock,\n stringToBytes,\n timestampRoundedToBuffer,\n} from \"../taler-crypto.js\";\nimport {\n OfficerAccount,\n PaginationParams,\n SigningKey,\n TalerExchangeApi,\n codecForAmlDecisionDetails,\n codecForAmlRecords,\n codecForExchangeConfig,\n codecForExchangeKeys,\n} from \"./types.js\";\nimport { CacheEvictor, addPaginationParams, nullEvictor } from \"./utils.js\";\n\nexport type TalerExchangeResultByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = ResultByMethod<TalerExchangeHttpClient, prop>;\nexport type TalerExchangeErrorsByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = FailCasesByMethod<TalerExchangeHttpClient, prop>;\n\nexport enum TalerExchangeCacheEviction {\n CREATE_DESCISION,\n}\n\n\n/**\n */\nexport class TalerExchangeHttpClient {\n httpLib: HttpRequestLibrary;\n public readonly PROTOCOL_VERSION = \"18:0:1\";\n cacheEvictor: CacheEvictor<TalerExchangeCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerExchangeCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--seed\n *\n */\n async getSeed() {\n const url = new URL(`seed`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n const buffer = await resp.bytes();\n const uintar = new Uint8Array(buffer);\n\n return opFixedSuccess(uintar);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n * PARTIALLY IMPLEMENTED!!\n */\n async getKeys() {\n const url = new URL(`keys`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeKeys());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // TERMS\n\n //\n // AML operations\n //\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decisions-$STATE\n *\n */\n async getDecisionsByState(\n auth: OfficerAccount,\n state: TalerExchangeApi.AmlState,\n pagination?: PaginationParams,\n ) {\n const url = new URL(\n `aml/${auth.id}/decisions/${TalerExchangeApi.AmlState[state]}`,\n this.baseUrl,\n );\n addPaginationParams(url, pagination);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlRecords());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ records: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decision-$H_PAYTO\n *\n */\n async getDecisionDetails(auth: OfficerAccount, account: string) {\n const url = new URL(`aml/${auth.id}/decision/${account}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlDecisionDetails());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ aml_history: [], kyc_attributes: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#post--aml-$OFFICER_PUB-decision\n *\n */\n async addDecisionDetails(\n auth: OfficerAccount,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n ) {\n const url = new URL(`aml/${auth.id}/decision`, this.baseUrl);\n\n const body = buildDecisionSignature(auth.signingKey, decision);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: this two need to be split by error code\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n\nfunction buildQuerySignature(key: SigningKey): string {\n const sigBlob = buildSigPS(\n TalerSignaturePurpose.TALER_SIGNATURE_AML_QUERY,\n ).build();\n\n return encodeCrock(eddsaSign(sigBlob, key));\n}\n\nfunction buildDecisionSignature(\n key: SigningKey,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n): TalerExchangeApi.AmlDecision {\n const zero = new Uint8Array(new ArrayBuffer(64));\n\n const sigBlob = buildSigPS(TalerSignaturePurpose.TALER_SIGNATURE_AML_DECISION)\n //TODO: new need the null terminator, also in the exchange\n .put(hash(stringToBytes(decision.justification))) //check null\n .put(timestampRoundedToBuffer(decision.decision_time))\n .put(amountToBuffer(decision.new_threshold))\n .put(decodeCrock(decision.h_payto))\n .put(zero) //kyc_requirement\n .put(bufferForUint32(decision.new_state))\n .build();\n\n const officer_sig = encodeCrock(eddsaSign(sigBlob, key));\n return {\n ...decision,\n officer_sig,\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) 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 * IBAN validation.\n *\n * Currently only validates the checksum.\n *\n * It does not validate:\n * - Country-specific length\n * - Country-specific checksums\n *\n * The country list is also not complete.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\nexport type IbanValidationResult =\n | { type: \"invalid\" }\n | {\n type: \"valid\";\n normalizedIban: string;\n };\n\nexport interface IbanCountryInfo {\n name: string;\n isSepa?: boolean;\n length?: number;\n}\n\n/**\n * Incomplete list, see https://www.swift.com/resource/iban-registry-pdf\n */\nexport const ibanCountryInfoTable: Record<string, IbanCountryInfo> = {\n AE: { name: \"U.A.E.\" },\n AF: { name: \"Afghanistan\" },\n AL: { name: \"Albania\" },\n AM: { name: \"Armenia\" },\n AN: { name: \"Netherlands Antilles\" },\n AR: { name: \"Argentina\" },\n AT: { name: \"Austria\" },\n AU: { name: \"Australia\" },\n AZ: { name: \"Azerbaijan\" },\n BA: { name: \"Bosnia and Herzegovina\" },\n BD: { name: \"Bangladesh\" },\n BE: { name: \"Belgium\" },\n BG: { name: \"Bulgaria\" },\n BH: { name: \"Bahrain\" },\n BN: { name: \"Brunei Darussalam\" },\n BO: { name: \"Bolivia\" },\n BR: { name: \"Brazil\" },\n BT: { name: \"Bhutan\" },\n BY: { name: \"Belarus\" },\n BZ: { name: \"Belize\" },\n CA: { name: \"Canada\" },\n CG: { name: \"Congo\" },\n CH: { name: \"Switzerland\" },\n CI: { name: \"Cote d'Ivoire\" },\n CL: { name: \"Chile\" },\n CM: { name: \"Cameroon\" },\n CN: { name: \"People's Republic of China\" },\n CO: { name: \"Colombia\" },\n CR: { name: \"Costa Rica\" },\n CS: { name: \"Serbia and Montenegro\" },\n CZ: { name: \"Czech Republic\" },\n DE: { name: \"Germany\" },\n DK: { name: \"Denmark\" },\n DO: { name: \"Dominican Republic\" },\n DZ: { name: \"Algeria\" },\n EC: { name: \"Ecuador\" },\n EE: { name: \"Estonia\" },\n EG: { name: \"Egypt\" },\n ER: { name: \"Eritrea\" },\n ES: { name: \"Spain\" },\n ET: { name: \"Ethiopia\" },\n FI: { name: \"Finland\" },\n FO: { name: \"Faroe Islands\" },\n FR: { name: \"France\" },\n GB: { name: \"United Kingdom\" },\n GD: { name: \"Caribbean\" },\n GE: { name: \"Georgia\" },\n GL: { name: \"Greenland\" },\n GR: { name: \"Greece\" },\n GT: { name: \"Guatemala\" },\n HK: { name: \"Hong Kong S.A.R.\" },\n HN: { name: \"Honduras\" },\n HR: { name: \"Croatia\" },\n HT: { name: \"Haiti\" },\n HU: { name: \"Hungary\" },\n ID: { name: \"Indonesia\" },\n IE: { name: \"Ireland\" },\n IL: { name: \"Israel\" },\n IN: { name: \"India\" },\n IQ: { name: \"Iraq\" },\n IR: { name: \"Iran\" },\n IS: { name: \"Iceland\" },\n IT: { name: \"Italy\" },\n JM: { name: \"Jamaica\" },\n JO: { name: \"Jordan\" },\n JP: { name: \"Japan\" },\n KE: { name: \"Kenya\" },\n KG: { name: \"Kyrgyzstan\" },\n KH: { name: \"Cambodia\" },\n KR: { name: \"South Korea\" },\n KW: { name: \"Kuwait\" },\n KZ: { name: \"Kazakhstan\" },\n LA: { name: \"Laos\" },\n LB: { name: \"Lebanon\" },\n LI: { name: \"Liechtenstein\" },\n LK: { name: \"Sri Lanka\" },\n LT: { name: \"Lithuania\" },\n LU: { name: \"Luxembourg\" },\n LV: { name: \"Latvia\" },\n LY: { name: \"Libya\" },\n MA: { name: \"Morocco\" },\n MC: { name: \"Principality of Monaco\" },\n MD: { name: \"Moldava\" },\n ME: { name: \"Montenegro\" },\n MK: { name: \"Former Yugoslav Republic of Macedonia\" },\n ML: { name: \"Mali\" },\n MM: { name: \"Myanmar\" },\n MN: { name: \"Mongolia\" },\n MO: { name: \"Macau S.A.R.\" },\n MT: { name: \"Malta\" },\n MV: { name: \"Maldives\" },\n MX: { name: \"Mexico\" },\n MY: { name: \"Malaysia\" },\n NG: { name: \"Nigeria\" },\n NI: { name: \"Nicaragua\" },\n NL: { name: \"Netherlands\" },\n NO: { name: \"Norway\" },\n NP: { name: \"Nepal\" },\n NZ: { name: \"New Zealand\" },\n OM: { name: \"Oman\" },\n PA: { name: \"Panama\" },\n PE: { name: \"Peru\" },\n PH: { name: \"Philippines\" },\n PK: { name: \"Islamic Republic of Pakistan\" },\n PL: { name: \"Poland\" },\n PR: { name: \"Puerto Rico\" },\n PT: { name: \"Portugal\" },\n PY: { name: \"Paraguay\" },\n QA: { name: \"Qatar\" },\n RE: { name: \"Reunion\" },\n RO: { name: \"Romania\" },\n RS: { name: \"Serbia\" },\n RU: { name: \"Russia\" },\n RW: { name: \"Rwanda\" },\n SA: { name: \"Saudi Arabia\" },\n SE: { name: \"Sweden\" },\n SG: { name: \"Singapore\" },\n SI: { name: \"Slovenia\" },\n SK: { name: \"Slovak\" },\n SN: { name: \"Senegal\" },\n SO: { name: \"Somalia\" },\n SR: { name: \"Suriname\" },\n SV: { name: \"El Salvador\" },\n SY: { name: \"Syria\" },\n TH: { name: \"Thailand\" },\n TJ: { name: \"Tajikistan\" },\n TM: { name: \"Turkmenistan\" },\n TN: { name: \"Tunisia\" },\n TR: { name: \"Turkey\" },\n TT: { name: \"Trinidad and Tobago\" },\n TW: { name: \"Taiwan\" },\n TZ: { name: \"Tanzania\" },\n UA: { name: \"Ukraine\" },\n US: { name: \"United States\" },\n UY: { name: \"Uruguay\" },\n VA: { name: \"Vatican\" },\n VE: { name: \"Venezuela\" },\n VN: { name: \"Viet Nam\" },\n YE: { name: \"Yemen\" },\n ZA: { name: \"South Africa\" },\n ZW: { name: \"Zimbabwe\" },\n};\n\nlet ccZero = \"0\".charCodeAt(0);\nlet ccNine = \"9\".charCodeAt(0);\nlet ccA = \"A\".charCodeAt(0);\nlet ccZ = \"Z\".charCodeAt(0);\n\n/**\n * Append a IBAN digit(s) based on a char code.\n */\nfunction appendDigit(digits: number[], cc: number): boolean {\n if (cc >= ccZero && cc <= ccNine) {\n digits.push(cc - ccZero);\n } else if (cc >= ccA && cc <= ccZ) {\n const n = cc - ccA + 10;\n digits.push(Math.floor(n / 10) % 10);\n digits.push(n % 10);\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Compute MOD-97-10 as per ISO/IEC 7064:2003.\n */\nfunction mod97(digits: number[]): number {\n let i = 0;\n let modAccum = 0;\n while (i < digits.length) {\n let n = 0;\n while (n < 9 && i < digits.length) {\n modAccum = modAccum * 10 + digits[i];\n i++;\n n++;\n }\n modAccum = modAccum % 97;\n }\n return modAccum;\n}\n\nexport function validateIban(ibanString: string): IbanValidationResult {\n let myIban = ibanString.toLocaleUpperCase().replace(\" \", \"\");\n let countryCode = myIban.substring(0, 2);\n let countryInfo = ibanCountryInfoTable[countryCode];\n\n if (!countryInfo) {\n return {\n type: \"invalid\",\n };\n }\n\n let digits: number[] = [];\n\n for (let i = 4; i < myIban.length; i++) {\n const cc = myIban.charCodeAt(i);\n if (!appendDigit(digits, cc)) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n for (let i = 0; i < 4; i++) {\n if (!appendDigit(digits, ibanString.charCodeAt(i))) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n const rem = mod97(digits);\n if (rem === 1) {\n return {\n type: \"valid\",\n normalizedIban: myIban,\n };\n } else {\n return {\n type: \"invalid\",\n };\n }\n}\n\nexport function generateIban(countryCode: string, length: number): string {\n let ibanSuffix = \"\";\n let digits: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const cc = ccZero + (Math.floor(Math.random() * 100) % 10);\n appendDigit(digits, cc);\n ibanSuffix += String.fromCharCode(cc);\n }\n\n appendDigit(digits, countryCode.charCodeAt(0));\n appendDigit(digits, countryCode.charCodeAt(1));\n\n // Try using \"00\" as check digits\n appendDigit(digits, ccZero);\n appendDigit(digits, ccZero);\n\n const requiredChecksum = 98 - mod97(digits);\n\n const checkDigit1 = Math.floor(requiredChecksum / 10) % 10;\n const checkDigit2 = requiredChecksum % 10;\n\n return countryCode + checkDigit1 + checkDigit2 + ibanSuffix;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019-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 * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { AbsoluteTime } from \"./time.js\";\nimport { TransactionState } from \"./transactions-types.js\";\nimport { ExchangeEntryState, TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n BalanceChange = \"balance-change\",\n BackupOperationError = \"backup-error\",\n TransactionStateTransition = \"transaction-state-transition\",\n /**\n * @deprecated\n */\n WithdrawalOperationTransition = \"withdrawal-operation-transition\",\n ExchangeStateTransition = \"exchange-state-transition\",\n Idle = \"idle\",\n TaskObservabilityEvent = \"task-observability-event\",\n RequestObservabilityEvent = \"request-observability-event\",\n}\n\nexport interface ErrorInfoSummary {\n code: number;\n hint?: string;\n message?: string;\n}\n\nexport interface TransactionStateTransitionNotification {\n type: NotificationType.TransactionStateTransition;\n transactionId: string;\n oldTxState: TransactionState;\n newTxState: TransactionState;\n errorInfo?: ErrorInfoSummary;\n\n /**\n * Additional \"user data\" that is dependent on the\n * state transition.\n *\n * Usage should be avoided.\n *\n * Currently used to notify the iOS app about\n * the KYC URL.\n */\n experimentalUserData?: any;\n}\n\nexport interface ExchangeStateTransitionNotification {\n type: NotificationType.ExchangeStateTransition;\n /**\n * Identification of the exchange entry that this\n * notification is about.\n */\n exchangeBaseUrl: string;\n\n /**\n * If missing, the notification means that\n * the exchange entry is newly created.\n */\n oldExchangeState?: ExchangeEntryState;\n\n /**\n * New state of the exchange.\n */\n newExchangeState: ExchangeEntryState;\n\n /**\n * Summary of the error that occurred when trying to update the exchange entry,\n * if applicable.\n */\n errorInfo?: ErrorInfoSummary;\n}\n\nexport interface BalanceChangeNotification {\n type: NotificationType.BalanceChange;\n\n /**\n * Transaction ID of the transaction that caused the balance update.\n *\n * Only used as a hint for debugging, should not be relied upon by clients.\n */\n hintTransactionId: string;\n}\n\nexport interface TaskProgressNotification {\n type: NotificationType.TaskObservabilityEvent;\n taskId: string;\n event: ObservabilityEvent;\n}\n\nexport interface RequestProgressNotification {\n type: NotificationType.RequestObservabilityEvent;\n requestId: string;\n operation: string;\n event: ObservabilityEvent;\n}\n\nexport enum ObservabilityEventType {\n HttpFetchStart = \"http-fetch-start\",\n HttpFetchFinishError = \"http-fetch-finish-error\",\n HttpFetchFinishSuccess = \"http-fetch-finish-success\",\n DbQueryStart = \"db-query-start\",\n DbQueryFinishSuccess = \"db-query-finish-success\",\n DbQueryFinishError = \"db-query-finish-error\",\n RequestStart = \"request-start\",\n RequestFinishSuccess = \"request-finish-success\",\n RequestFinishError = \"request-finish-error\",\n TaskStart = \"task-start\",\n TaskStop = \"task-stop\",\n TaskReset = \"task-reset\",\n ShepherdTaskResult = \"sheperd-task-result\",\n DeclareTaskDependency = \"declare-task-dependency\",\n CryptoStart = \"crypto-start\",\n CryptoFinishSuccess = \"crypto-finish-success\",\n CryptoFinishError = \"crypto-finish-error\",\n Message = \"message\",\n}\n\nexport type ObservabilityEvent =\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchStart;\n url: string;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishSuccess;\n url: string;\n status: number;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishError;\n url: string;\n error: TalerErrorDetail;\n }\n | {\n type: ObservabilityEventType.DbQueryStart;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishSuccess;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishError;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.RequestStart;\n }\n | {\n type: ObservabilityEventType.RequestFinishSuccess;\n durationMs: number;\n }\n | {\n type: ObservabilityEventType.RequestFinishError;\n }\n | {\n type: ObservabilityEventType.TaskStart;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskStop;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskReset;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.DeclareTaskDependency;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.CryptoStart;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishSuccess;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishError;\n operation: string;\n }\n | {\n type: ObservabilityEventType.ShepherdTaskResult;\n resultType: string;\n }\n | {\n type: ObservabilityEventType.Message;\n contents: string;\n };\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n/**\n * This notification is required to signal UI that\n * the withdrawal operation changed the state.\n *\n * https://bugs.gnunet.org/view.php?id=8099\n */\nexport interface WithdrawalOperationTransitionNotification {\n type: NotificationType.WithdrawalOperationTransition;\n uri: string;\n}\n\nexport interface IdleNotification {\n type: NotificationType.Idle;\n}\n\nexport type WalletNotification =\n | BalanceChangeNotification\n | WithdrawalOperationTransitionNotification\n | BackupOperationErrorNotification\n | ExchangeStateTransitionNotification\n | TransactionStateTransitionNotification\n | TaskProgressNotification\n | RequestProgressNotification\n | IdleNotification;\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 * Cross-platform timers.\n *\n * NodeJS and the browser use slightly different timer API,\n * this abstracts over these differences.\n */\n\n/**\n * Imports.\n */\nimport { Logger, Duration } from \"@gnu-taler/taler-util\";\n\nconst logger = new Logger(\"timer.ts\");\n\n/**\n * Cancelable timer.\n */\nexport interface TimerHandle {\n clear(): void;\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void;\n}\n\nclass IntervalHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearInterval(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\nclass TimeoutHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearTimeout(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\n/**\n * Get a performance counter in nanoseconds.\n */\nexport const performanceNow: () => bigint = (() => {\n // @ts-ignore\n if (typeof process !== \"undefined\" && process.hrtime) {\n return () => {\n return process.hrtime.bigint();\n };\n }\n\n // @ts-ignore\n if (typeof performance !== \"undefined\") {\n // @ts-ignore\n return () => BigInt(Math.floor(performance.now() * 1000)) * BigInt(1000);\n }\n\n return () => BigInt(new Date().getTime()) * BigInt(1000) * BigInt(1000);\n})();\n\nconst nullTimerHandle = {\n clear() {\n // do nothing\n return;\n },\n unref() {\n // do nothing\n return;\n },\n};\n\n/**\n * Group of timers that can be destroyed at once.\n */\nexport interface TimerAPI {\n after(delayMs: number, callback: () => void): TimerHandle;\n every(delayMs: number, callback: () => void): TimerHandle;\n}\n\nexport class SetTimeoutTimerAPI implements TimerAPI {\n /**\n * Call a function every time the delay given in milliseconds passes.\n */\n every(delayMs: number, callback: () => void): TimerHandle {\n return new IntervalHandle(setInterval(callback, delayMs));\n }\n\n /**\n * Call a function after the delay given in milliseconds passes.\n */\n after(delayMs: number, callback: () => void): TimerHandle {\n return new TimeoutHandle(setTimeout(callback, delayMs));\n }\n}\n\nexport const timer = new SetTimeoutTimerAPI();\n\n/**\n * Implementation of [[TimerGroup]] using setTimeout\n */\nexport class TimerGroup {\n private stopped = false;\n\n private readonly timerMap: { [index: number]: TimerHandle } = {};\n\n private idGen = 1;\n\n constructor(public readonly timerApi: TimerAPI) {}\n\n stopCurrentAndFutureTimers(): void {\n this.stopped = true;\n for (const x in this.timerMap) {\n if (!this.timerMap.hasOwnProperty(x)) {\n continue;\n }\n this.timerMap[x].clear();\n delete this.timerMap[x];\n }\n }\n\n resolveAfter(delayMs: Duration): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (delayMs.d_ms !== \"forever\") {\n this.after(delayMs.d_ms, () => {\n resolve();\n });\n }\n });\n }\n\n after(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.after(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\n }\n\n every(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.every(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\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\nimport {\n TransactionType,\n PaymentStatus,\n TransactionMajorState,\n} from \"./transactions-types.js\";\nimport { RefreshReason } from \"./wallet-types.js\";\n\n/**\n * Sample transaction list entries.\n */\nexport const sampleWalletCoreTransactions = [\n {\n type: TransactionType.Payment,\n txState: {\n major: TransactionMajorState.Done,\n },\n amountRaw: \"KUDOS:10\",\n amountEffective: \"KUDOS:10\",\n totalRefundRaw: \"KUDOS:0\",\n totalRefundEffective: \"KUDOS:0\",\n status: PaymentStatus.Paid,\n refundPending: undefined,\n posConfirmation: undefined,\n pending: false,\n refunds: [],\n timestamp: {\n t_s: 1677166045,\n },\n transactionId:\n \"txn:payment:NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n proposalId: \"NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n info: {\n merchant: {\n name: \"woocommerce\",\n website: \"woocommerce.demo.taler.net\",\n email: \"foo@example.com\",\n address: {},\n jurisdiction: {},\n },\n orderId: \"wc_order_KQCRldghIgDRB-100\",\n products: [\n {\n description: \"Using GCC\",\n quantity: 1,\n price: \"KUDOS:10\",\n product_id: \"28\",\n },\n ],\n summary: \"WooTalerShop #100\",\n contractTermsHash:\n \"A02E1M6ARWKBJ87K2TV4S6WQ4X5YH7BRVR6MYCHCTVAED8MBXTFD6PZ5Q50Y7Z5K18PYBTDA14NQ56XPC1VCQW1EVRWTSB7ZYT65B5G\",\n fulfillmentUrl:\n \"https://woocommerce.demo.taler.net/?wc-api=wc_gnutaler_gateway&order_id=wc_order_KQCRldghIgDRB-100\",\n },\n refundQueryActive: false,\n frozen: false,\n },\n {\n type: TransactionType.Refresh,\n txState: {\n major: TransactionMajorState.Pending,\n },\n refreshReason: RefreshReason.PayMerchant,\n amountEffective: \"KUDOS:0\",\n amountRaw: \"KUDOS:0\",\n refreshInputAmount: \"KUDOS:1.5\",\n refreshOutputAmount: \"KUDOS:1.4\",\n originatingTransactionId:\n \"txn:proposal:ZCGBZFE8KZ1CBYYGSC3ZC8E40KVJWV16VYCTHGC8FFSVZ5HD24BG\",\n pending: true,\n timestamp: {\n t_s: 1681376214,\n },\n transactionId:\n \"txn:refresh:QQSWHHXCRQ269G0E3RW14JMC6F7NFDYDW26NSFHRTXSKDS6CMCZ0\",\n frozen: false,\n error: {\n code: 7029,\n when: {\n t_ms: 1681376473665,\n },\n hint: \"Error (WALLET_REFRESH_GROUP_INCOMPLETE)\",\n numErrors: 1,\n errors: [\n {\n code: 7001,\n when: {\n t_ms: 1681376473189,\n },\n hint: \"unexpected exception (message: exchange wire fee signature invalid)\",\n stack:\n \" at validateWireInfo (../taler-wallet-core-qjs.mjs:23166)\\n\",\n },\n ],\n },\n },\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 { i18n, setupI18n } from \"@gnu-taler/taler-util\";\nimport { createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect } from \"preact/hooks\";\nimport { useLang } from \"../hooks/useLang.js\";\nimport { strings } from \"../i18n/strings.js\";\n\ninterface Type {\n lang: string;\n supportedLang: { [id in keyof typeof supportedLang]: string };\n changeLanguage: (l: string) => void;\n i18n: typeof i18n;\n isSaved: boolean;\n}\n\nconst supportedLang = {\n es: \"Espa\u00F1ol [es]\",\n ja: \"\u65E5\u672C\u8A9E [ja]\",\n en: \"English [en]\",\n fr: \"Fran\u00E7ais [fr]\",\n de: \"Deutsch [de]\",\n sv: \"Svenska [sv]\",\n it: \"Italiano [it]\",\n // ko: \"\uD55C\uAD6D\uC5B4 [ko]\",\n // ru: \"\u0420\u0443\u0301\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u0301\u043A [ru]\",\n tr: \"T\u00FCrk [tr]\",\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: any;\n forceLang?: string;\n}\n\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\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, strings);\n }, [lang]);\n if (forceLang) {\n setupI18n(forceLang, strings);\n } else {\n setupI18n(lang, strings);\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 { 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", "/*\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, 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 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\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 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 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/*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 },\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 },\n },\n};\n", "// This file is auto-generated, do not modify.\n// Generated from v0.2.0-151-g2ae958d on Thu, 14 Apr 2022 20:38:58 +0200\n// To re-generate, run contrib/gen-ts.sh from the main anastasis code base.\n\nexport const anastasisData = {\n providersList: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n anastasis_provider: [\n {\n url: \"https://v1.anastasis.taler.net/\",\n name: \"Bern University of Applied Sciences, Switzerland\",\n },\n// {\n// url: \"https://v1.anastasis.codeblau.de/\",\n// name: \"Codeblau GmbH, Germany\",\n// },\n {\n url: \"https://v1.anastasis.lu/\",\n name: \"Anastasis SARL, Luxembourg\",\n },\n {\n url: \"https://v1.anastasis.taler.net/\",\n restricted: \"xx\",\n },\n {\n url: \"https://v1.anastasis.lu/\",\n restricted: \"xx\",\n },\n // {\n // url: \"http://localhost:8086/\",\n // restricted: \"xx\",\n // },\n // {\n // url: \"http://localhost:8087/\",\n // restricted: \"xx\",\n // },\n // {\n // url: \"http://localhost:8088/\",\n // restricted: \"xx\",\n // },\n // {\n // url: \"http://localhost:8089/\",\n // restricted: \"xx\",\n // },\n ],\n },\n countriesList: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n countries: [\n {\n code: \"al\",\n name: \"Albania\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Albanien\",\n en_UK: \"Albania\",\n },\n call_code: \"+355\",\n },\n {\n code: \"be\",\n name: \"Belgium\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Belgien\",\n en_UK: \"Belgium\",\n },\n call_code: \"+32\",\n },\n {\n code: \"ch\",\n name: \"Switzerland\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Schweiz\",\n de_CH: \"Schwiiz\",\n fr_FR: \"Suisse\",\n en_UK: \"Swiss\",\n },\n call_code: \"+41\",\n },\n {\n code: \"cz\",\n name: \"Czech Republic\",\n continent: \"Europe\",\n name_i18n: {\n en_UK: \"Czech Republic\",\n },\n call_code: \"+420\",\n },\n {\n code: \"de\",\n name: \"Germany\",\n continent: \"Europe\",\n continent_i18n: { de_DE: \"Europa\" },\n name_i18n: {\n de_DE: \"Deutschland\",\n de_CH: \"Deutschland\",\n fr_FR: \"Allemagne\",\n en_UK: \"Germany\",\n },\n call_code: \"+49\",\n },\n {\n code: \"dk\",\n name: \"Denmark\",\n continent: \"Europe\",\n continent_i18n: { de_DE: \"Europa\" },\n name_i18n: {\n en_UK: \"Denmark\",\n },\n call_code: \"+45\",\n },\n {\n code: \"es\",\n name: \"Spain\",\n continent: \"Europe\",\n continent_i18n: { es_ES: \"Europa\" },\n name_i18n: {\n es_ES: \"Espa\u00F1a\",\n },\n call_code: \"+44\",\n },\n {\n code: \"fr\",\n name: \"France\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Frankreich\",\n fr_FR: \"La France\",\n },\n call_code: \"+33\",\n },\n {\n code: \"in\",\n name: \"India\",\n continent: \"India\",\n continent_i18n: { en_EN: \"India\" },\n name_i18n: {\n de_DE: \"Indien\",\n de_CH: \"Indien\",\n fr_FR: \"l'Inde\",\n en_UK: \"India\",\n },\n call_code: \"+91\",\n },\n {\n code: \"it\",\n name: \"Italy\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Italien\",\n en_UK: \"Italy\",\n },\n call_code: \"+39\",\n },\n {\n code: \"jp\",\n name: \"Japan\",\n continent: \"Asia\",\n continent_i18n: { en_EN: \"Japan\" },\n name_i18n: {\n de_DE: \"Japan\",\n de_CH: \"Japan\",\n en_UK: \"Japan\",\n },\n call_code: \"+81\",\n },\n {\n code: \"nl\",\n name: \"Netherlands\",\n continent: \"Europe\",\n name_i18n: {\n de_DE: \"Niederlande\",\n nl_NL: \"Nederland\",\n en_UK: \"Netherlands\",\n },\n call_code: \"+31\",\n },\n {\n code: \"sk\",\n name: \"Slovakia\",\n continent: \"Europe\",\n name_i18n: {\n en_UK: \"Slovakia\",\n },\n call_code: \"+421\",\n },\n {\n code: \"us\",\n name: \"United States of America (USA)\",\n continent: \"North America\",\n continent_i18n: { de_DE: \"Nordamerika\" },\n name_i18n: {\n de_DE: \"Vereinigte Staaten von Amerika (USA)\",\n de_CH: \"Vereinigte Staaten von Amerika (USA)\",\n fr_FR: \"\u00C9tats-Unis d'Am\u00E9rique (USA)\",\n en_UK: \"United States of America (USA)\",\n },\n call_code: \"+1\",\n },\n // {\n // code: \"xx\",\n // name: \"Testland\",\n // continent: \"Demoworld\",\n // name_i18n: {\n // de_DE: \"Testlandt\",\n // de_CH: \"Testlandi\",\n // fr_FR: \"Testpais\",\n // en_UK: \"Testland\",\n // },\n // call_code: \"+00\",\n // },\n ].sort((a, b) => a.name > b.name ? 1 : (a.name < b.name ? -1 : 0)),\n },\n countryDetails: {\n al: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"nid_number\",\n label: \"Numri i Identitetit\",\n label_i18n: {\n en: \"Identity Number\",\n al: \"Numri i Identitetit\",\n },\n widget: \"anastasis_gtk_ia_nid_al\",\n uuid: \"256e5d30-d65e-481b-9ac4-55f5ac03b24a\",\n \"validation-regex\":\n \"^[0-9A-T][0-9](((0|5)[0-9])|10|11|51|52)[0-9]{3}[A-W]$\",\n \"validation-logic\": \"AL_NID_check\",\n },\n ],\n },\n be: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"nrn_number\",\n label: \"National Register Number\",\n label_i18n: {\n en: \"National Register Number\",\n },\n widget: \"anastasis_gtk_ia_nid_be\",\n uuid: \"0452f99a-06f7-48bd-8ac0-2e4ed9a24560\",\n \"validation-regex\": \"^[0-9]{11}$\",\n \"validation-logic\": \"BE_NRN_check\",\n },\n ],\n },\n ch: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"ahv_number\",\n label: \"AHV number\",\n label_i18n: {\n de_DE: \"AHV-Nummer\",\n de_CH: \"AHV-Nummer\",\n },\n widget: \"anastasis_gtk_ia_ahv\",\n uuid: \"1da87570-ba16-4f62-8a7e-cbda92f51591\",\n \"validation-regex\":\n \"^(756)\\\\.[0-9]{4}\\\\.[0-9]{4}\\\\.[0-9]{2}|(756)[0-9]{10}$\",\n \"validation-logic\": \"CH_AHV_check\",\n autocomplete: \"???.????.????.??\",\n },\n ],\n },\n cz: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"birth_number\",\n label: \"Birth Number\",\n label_i18n: {\n en: \"Birth Number\",\n cz: \"rodn\u00E9 \u010D\u00EDslo\",\n },\n widget: \"anastasis_gtk_ia_birthnumber_cz\",\n uuid: \"03e3a05b-1192-44f1-ac36-7425512eee1a\",\n \"validation-regex\":\n \"^[0-9]{2}(((0|2|5|7)[0-9])|10|11|31|32|51|52|81|82)/[0-9]{3}[0-9]?$\",\n \"validation-logic\": \"CZ_BN_check\",\n },\n ],\n },\n de: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"social_security_number\",\n label: \"Social security number\",\n label_i18n: {\n de_DE: \"Deutsche Sozialversicherungsnummer\",\n en: \"German Social security number\",\n },\n widget: \"anastasis_gtk_ia_ssn_de\",\n uuid: \"d5e2aa79-1c88-4cf4-a4d2-252508b38e05\",\n \"validation-regex\": \"^[0-9]{8}[[:upper:]][0-9]{3}$\",\n \"validation-logic\": \"DE_SVN_check\",\n optional: true,\n },\n {\n type: \"string\",\n name: \"tax_number\",\n label: \"Taxpayer identification number\",\n label_i18n: {\n de_DE: \"Steuerliche Identifikationsnummer\",\n en: \"German taxpayer identification number\",\n },\n widget: \"anastasis_gtk_ia_tin_de\",\n uuid: \"dae48f85-e3ff-47a4-a4a3-ed981ed8c3c6\",\n \"validation-regex\": \"^[0-9]{11}$\",\n \"validation-logic\": \"DE_TIN_check\",\n },\n ],\n },\n dk: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"cpr_number\",\n label: \"CPR-nummer\",\n label_i18n: {\n en: \"CPR Number\",\n dk: \"CPR-nummer\",\n },\n widget: \"anastasis_gtk_ia_cpr_dk\",\n uuid: \"38f13a4d-4302-4ada-ada1-c3ff4a8ff689\",\n \"validation-regex\":\n \"^(0[1-9]|[1-2][0-9]|30|31)((0[1-9]|10|11|12))[0-9]{2}-[0-9A-Z]{4}$\",\n },\n ],\n },\n es: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"tax_number\",\n label: \"Tax number\",\n label_i18n: {\n es_ES: \"N\u00FAmero de Identificaci\u00F3n Fiscal (DNI, NIE)\",\n },\n widget: \"anastasis_gtk_ia_es_dni\",\n uuid: \"ac8bd865-6be8-445c-b650-6a18eef16a49\",\n \"validation-regex\": \"^[0-9MXYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$\",\n \"validation-logic\": \"ES_DNI_check\",\n },\n {\n type: \"string\",\n name: \"ssn_number\",\n label: \"Social security number\",\n label_i18n: {\n es_ES: \"N\u00FAmero de Seguridad Social\",\n },\n widget: \"anastasis_gtk_ia_es_ssn\",\n uuid: \"22396a19-f3bb-497e-b63a-961fd639140e\",\n \"validation-regex\": \"^[0-9]{11}$\",\n },\n ],\n },\n fr: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"social_security_number\",\n label: \"Code Insee\",\n label_i18n: {\n fr_FR: \"Code Insee\",\n en: \"INSEE code\",\n },\n widget: \"anastasis_gtk_ia_insee_fr\",\n uuid: \"2f36a81c-3f6d-41f3-97ee-9c885bc41873\",\n \"validation-regex\": \"^[0-9]{15}$\",\n \"validation-logic\": \"FR_INSEE_check\",\n },\n ],\n },\n in: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"aadhar_number\",\n label: \"Aadhar number\",\n label_i18n: {\n en: \"Aadhar number\",\n },\n widget: \"anastasis_gtk_ia_aadhar_in\",\n uuid: \"55afe97a-98bc-48d1-bb37-a9658be3fdc9\",\n \"validation-regex\": \"^[2-9]{1}[0-9]{3}\\\\s[0-9]{4}\\\\s[0-9]{4}$\",\n \"validation-logic\": \"IN_AADHAR_check\",\n },\n ],\n },\n it: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"fiscal_code\",\n label: \"Codice fiscale\",\n label_i18n: {\n it: \"Codice fiscale\",\n en: \"Fiscal code\",\n },\n widget: \"anastasis_gtk_ia_cf_it\",\n uuid: \"88f53c51-52ad-4d63-a163-ec042589f925\",\n \"validation-regex\":\n \"^[[:upper:]]{6}[0-9]{2}[A-EHLMPRT](([0-24-6][0-9])|(30|31|70|71))[A-MZ][0-9]{3}[A-Z]$\",\n \"validation-logic\": \"IT_CF_check\",\n },\n ],\n },\n jp: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"my_number\",\n label: \"My number\",\n label_i18n: {\n en: \"My number\",\n jp: \"\u30DE\u30A4\u30CA\u30F3\u30D0\u30FC\",\n },\n widget: \"anastasis_gtk_ia_my_jp\",\n uuid: \"90848f42-a83e-4226-8186-329696c14152\",\n \"validation-regex\": \"^[0-9]{12}$\",\n },\n ],\n },\n nl: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"social_security_number\",\n label: \"Citizen Service Number\",\n label_i18n: {\n nl_NL: \"Burgerservicenummer (BSN)\",\n en: \"Citizen Service Number\",\n },\n widget: \"anastasis_gtk_ia_ssn_nl\",\n uuid: \"b6bf1f14-1f85-4afb-af21-f54b88490bdc\",\n \"validation-regex\": \"^[1-9][0-9]{8}$\",\n \"validation-logic\": \"NL_BSN_check\",\n },\n ],\n },\n sk: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"birth_number\",\n label: \"Birth Number\",\n label_i18n: {\n en: \"Birth Number\",\n sk: \"rodn\u00E9 \u010D\u00EDslo\",\n },\n widget: \"anastasis_gtk_ia_birthnumber_sk\",\n uuid: \"1cd372fe-2cea-4928-9f29-66f2bdd8555c\",\n \"validation-regex\":\n \"^[0-9]{2}(((0|2|5|7)[0-9])|10|11|31|32|51|52|81|82)/[0-9]{3}[0-9]?$\",\n \"validation-logic\": \"CZ_BN_check\",\n },\n ],\n },\n us: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"birthplace\",\n label: \"Birthplace\",\n widget: \"anastasis_gtk_ia_birthplace\",\n uuid: \"4c822e8e-89c6-11eb-95c4-8b077ad8489f\",\n },\n {\n type: \"string\",\n name: \"social_security_number\",\n label: \"Social security number\",\n label_i18n: {\n en: \"US Social security number\",\n },\n widget: \"anastasis_gtk_ia_ssn_us\",\n uuid: \"310a138c-b0b7-4985-b8b8-d00e765e9f9b\",\n \"validation-regex\": \"^[0-9]{3}-[0-9]{2}-[0-9]{4}$\",\n autocomplete: \"???-??-????\",\n },\n ],\n },\n xx: {\n license: \"GPLv3+\",\n \"SPDX-License-Identifier\": \"GPL3.0-or-later\",\n restricted: \"xx\",\n required_attributes: [\n {\n type: \"string\",\n name: \"full_name\",\n label: \"Full name\",\n widget: \"anastasis_gtk_ia_full_name\",\n uuid: \"9e8f463f-575f-42cb-85f3-759559997331\",\n },\n {\n type: \"date\",\n name: \"birthdate\",\n label: \"Birthdate\",\n widget: \"anastasis_gtk_ia_birthdate\",\n uuid: \"83d655c7-bdb6-484d-904e-80c1058c8854\",\n },\n {\n type: \"string\",\n name: \"prime_number\",\n label: \"Prime number\",\n widget: \"anastasis_gtk_xx_prime\",\n uuid: \"39190a95-cacb-4412-8bae-1f7da3f980b4\",\n \"validation-regex\": \"^[0-9]+$\",\n \"validation-logic\": \"XY_PRIME_check\",\n optional: true,\n },\n {\n type: \"string\",\n name: \"sq_number\",\n label: \"Square number\",\n widget: \"anastasis_gtk_xx_square\",\n uuid: \"ed790bca-89bf-11eb-96f2-233996cf644e\",\n \"validation-regex\": \"^[0-9]+$\",\n \"validation-logic\": \"XX_SQUARE_check\",\n },\n ],\n },\n },\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 {\n AmountString,\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForAmountString,\n codecForAny,\n codecForConstString,\n codecForNumber,\n codecForString,\n TalerProtocolTimestamp,\n} from \"@gnu-taler/taler-util\";\n\nexport interface EscrowConfigurationResponse {\n // Protocol identifier, clarifies that this is an Anastasis provider.\n name: \"anastasis\";\n\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency in which this provider processes payments.\n currency: string;\n\n // Supported authorization methods.\n methods: AuthorizationMethodConfig[];\n\n // Maximum policy upload size supported.\n storage_limit_in_megabytes: number;\n\n // Payment required to maintain an account to store policy documents for a year.\n // Users can pay more, in which case the storage time will go up proportionally.\n annual_fee: AmountString;\n\n // Payment required to upload truth. To be paid per upload.\n truth_upload_fee: AmountString;\n\n // Limit on the liability that the provider is offering with\n // respect to the services provided.\n liability_limit: AmountString;\n\n // Salt value with 128 bits of entropy.\n // Different providers\n // will use different high-entropy salt values. The resulting\n // **provider salt** is then used in various operations to ensure\n // cryptographic operations differ by provider. A provider must\n // never change its salt value.\n provider_salt: string;\n\n /**\n * Human-readable business name of the provider.\n */\n business_name: string;\n}\n\nexport interface AuthorizationMethodConfig {\n // Name of the authorization method.\n type: string;\n\n // Fee for accessing key share using this method.\n cost: AmountString;\n}\n\nexport interface TruthUploadRequest {\n // Contains the information of an interface EncryptedKeyShare, but simply\n // as one binary block (in Crockford Base32 encoding for JSON).\n key_share_data: string;\n\n // Key share method, i.e. \"security question\", \"SMS\", \"e-mail\", ...\n type: string;\n\n // Variable-size truth. After decryption,\n // this contains the ground truth, i.e. H(challenge answer),\n // phone number, e-mail address, picture, fingerprint, ...\n // **base32 encoded**.\n //\n // The nonce of the HKDF for this encryption must include the\n // string \"ECT\".\n encrypted_truth: string; //bytearray\n\n // MIME type of truth, i.e. text/ascii, image/jpeg, etc.\n truth_mime?: string;\n\n // For how many years from now would the client like us to\n // store the truth?\n storage_duration_years: number;\n}\n\nexport interface IbanExternalAuthResponse {\n method: \"iban\";\n answer_code: number;\n details: {\n challenge_amount: AmountString;\n credit_iban: string;\n business_name: string;\n wire_transfer_subject: string;\n };\n}\n\nexport interface RecoveryMetaResponse {\n /**\n * Version numbers as a string (!) are used as keys.\n */\n [version: string]: RecoveryMetaDataItem;\n}\n\nexport interface RecoveryMetaDataItem {\n // The meta value can be NULL if the document\n // exists but no meta data was provided.\n meta?: string;\n\n // Server-time indicative of when the recovery\n // document was uploaded.\n upload_time: TalerProtocolTimestamp;\n}\n\nexport type ChallengeInstructionMessage =\n | FileChallengeInstructionMessage\n | IbanChallengeInstructionMessage\n | PinChallengeInstructionMessage;\n\nexport interface IbanChallengeInstructionMessage {\n // What kind of challenge is this?\n challenge_type: \"IBAN_WIRE\";\n\n wire_details: {\n // How much should be wired?\n challenge_amount: AmountString;\n\n // What is the target IBAN?\n credit_iban: string;\n\n // What is the receiver name?\n business_name: string;\n\n // What is the expected wire transfer subject?\n wire_transfer_subject: string;\n\n // What is the numeric code (also part of the\n // wire transfer subject) to be hashed when\n // solving the challenge?\n answer_code: number;\n\n // Hint about the origin account that must be used.\n debit_account_hint: string;\n };\n}\n\nexport interface PinChallengeInstructionMessage {\n // What kind of challenge is this?\n challenge_type: \"TAN_SENT\";\n\n // Where was the PIN code sent? Note that this\n // address will most likely have been obscured\n // to improve privacy.\n tan_address_hint: string;\n}\n\nexport interface FileChallengeInstructionMessage {\n // What kind of challenge is this?\n challenge_type: \"FILE_WRITTEN\";\n\n // Name of the file where the PIN code was written.\n filename: string;\n}\n\nexport const codecForFileChallengeInstructionMessage =\n (): Codec<FileChallengeInstructionMessage> =>\n buildCodecForObject<FileChallengeInstructionMessage>()\n .property(\"challenge_type\", codecForConstString(\"FILE_WRITTEN\"))\n .property(\"filename\", codecForString())\n .build(\"FileChallengeInstructionMessage\");\n\nexport const codecForPinChallengeInstructionMessage =\n (): Codec<PinChallengeInstructionMessage> =>\n buildCodecForObject<PinChallengeInstructionMessage>()\n .property(\"challenge_type\", codecForConstString(\"TAN_SENT\"))\n .property(\"tan_address_hint\", codecForString())\n .build(\"PinChallengeInstructionMessage\");\n\nexport const codecForIbanChallengeInstructionMessage =\n (): Codec<IbanChallengeInstructionMessage> =>\n buildCodecForObject<IbanChallengeInstructionMessage>()\n .property(\"challenge_type\", codecForConstString(\"IBAN_WIRE\"))\n .property(\"wire_details\", codecForAny())\n .build(\"IbanChallengeInstructionMessage\");\n\nexport const codecForChallengeInstructionMessage =\n (): Codec<ChallengeInstructionMessage> =>\n buildCodecForUnion<ChallengeInstructionMessage>()\n .discriminateOn(\"challenge_type\")\n .alternative(\"FILE_WRITTEN\", codecForFileChallengeInstructionMessage())\n .alternative(\"IBAN_WIRE\", codecForIbanChallengeInstructionMessage())\n .alternative(\"TAN_SENT\", codecForPinChallengeInstructionMessage())\n .build(\"ChallengeInstructionMessage\");\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 {\n AmountString,\n buildCodecForObject,\n codecForAny,\n codecForList,\n codecForNumber,\n codecForString,\n codecForTimestamp,\n TalerProtocolTimestamp,\n} from \"@gnu-taler/taler-util\";\nimport { ChallengeFeedback } from \"./challenge-feedback-types.js\";\nimport { KeyShare } from \"./crypto.js\";\nimport { RecoveryDocument } from \"./recovery-document-types.js\";\n\nexport type ReducerState =\n | ReducerStateBackup\n | ReducerStateRecovery\n | ReducerStateError;\n\nexport interface ContinentInfo {\n name: string;\n}\n\nexport interface CountryInfo {\n code: string;\n name: string;\n continent: string;\n}\n\nexport interface Policy {\n methods: {\n authentication_method: number;\n provider: string;\n }[];\n}\n\nexport interface PolicyProvider {\n provider_url: string;\n}\n\nexport interface SuccessDetails {\n [provider_url: string]: {\n policy_version: number;\n policy_expiration: TalerProtocolTimestamp;\n };\n}\n\nexport interface CoreSecret {\n mime: string;\n value: string;\n /**\n * Filename, only set if the secret comes from\n * a file. Should be set unless the mime type is \"text/plain\";\n */\n filename?: string;\n}\n\nexport interface ReducerStateBackup {\n reducer_type: \"backup\";\n\n backup_state: BackupStates;\n\n continents?: ContinentInfo[];\n\n countries?: CountryInfo[];\n\n identity_attributes?: { [n: string]: string };\n\n authentication_providers?: AuthenticationProviderStatusMap;\n\n authentication_methods?: AuthMethod[];\n\n required_attributes?: UserAttributeSpec[];\n\n selected_continent?: string;\n\n selected_country?: string;\n\n secret_name?: string;\n\n policies?: Policy[];\n\n recovery_data?: {\n /**\n * Map from truth key (`${methodIndex}/${providerUrl}`) to\n * the truth metadata.\n */\n truth_metadata: Record<string, TruthMetaData>;\n recovery_document: RecoveryDocument;\n };\n\n /**\n * Policy providers are providers that we checked to be functional\n * and that are actually used in policies.\n */\n policy_providers?: PolicyProvider[];\n success_details?: SuccessDetails;\n\n /**\n * Currently requested payments.\n *\n * List of taler://pay URIs.\n *\n * FIXME: There should be more information in this,\n * including the provider and amount.\n */\n payments?: string[];\n\n /**\n * FIXME: Why is this not a map from provider to payto?\n */\n policy_payment_requests?: {\n /**\n * FIXME: This is not a payto URI, right?!\n */\n payto: string;\n provider: string;\n }[];\n\n core_secret?: CoreSecret;\n\n expiration?: TalerProtocolTimestamp;\n\n upload_fees?: { fee: AmountString }[];\n\n // FIXME: The payment secrets and pay URIs should\n // probably be consolidated into a single field.\n truth_upload_payment_secrets?: Record<string, string>;\n}\n\nexport interface AuthMethod {\n type: string;\n instructions: string;\n challenge: string;\n mime_type?: string;\n}\n\nexport interface ChallengeInfo {\n instructions: string;\n type: string;\n uuid: string;\n}\n\nexport interface UserAttributeSpec {\n label: string;\n name: string;\n type: string;\n uuid: string;\n widget: string;\n optional?: boolean;\n \"validation-regex\": string | undefined;\n \"validation-logic\": string | undefined;\n autocomplete?: string;\n}\n\nexport interface RecoveryInternalData {\n secret_name: string;\n provider_url: string;\n version: number;\n}\n\nexport interface RecoveryInformation {\n challenges: ChallengeInfo[];\n policies: {\n /**\n * UUID of the associated challenge.\n */\n uuid: string;\n }[][];\n}\n\nexport interface AuthenticationProviderStatusMap {\n [url: string]: AuthenticationProviderStatus;\n}\n\nexport interface ReducerStateRecovery {\n reducer_type: \"recovery\";\n\n recovery_state: RecoveryStates;\n\n identity_attributes?: { [n: string]: string };\n\n continents?: ContinentInfo[];\n countries?: CountryInfo[];\n\n selected_continent?: string;\n selected_country?: string;\n\n required_attributes?: UserAttributeSpec[];\n\n /**\n * Recovery information, used by the UI.\n */\n recovery_information?: RecoveryInformation;\n\n // FIXME: This should really be renamed to recovery_internal_data\n recovery_document?: RecoveryInternalData;\n\n // FIXME: The C reducer should also use this!\n verbatim_recovery_document?: RecoveryDocument;\n\n selected_challenge_uuid?: string;\n\n /**\n * Explicitly selected version by the user.\n */\n selected_version?: SelectedVersionInfo;\n\n challenge_feedback?: { [uuid: string]: ChallengeFeedback };\n\n /**\n * Key shares that we managed to recover so far.\n */\n recovered_key_shares?: { [truth_uuid: string]: KeyShare };\n\n core_secret?: CoreSecret;\n\n authentication_providers?: AuthenticationProviderStatusMap;\n}\n\n/**\n * Truth data as stored in the reducer.\n */\nexport interface TruthMetaData {\n uuid: string;\n\n key_share: string;\n\n policy_index: number;\n\n pol_method_index: number;\n\n /**\n * Nonce used for encrypting the truth.\n */\n nonce: string;\n\n /**\n * Key that the truth (i.e. secret question answer, email address, mobile number, ...)\n * is encrypted with when stored at the provider.\n */\n truth_key: string;\n\n /**\n * Truth-specific salt.\n */\n master_salt: string;\n}\n\nexport interface ReducerStateError {\n reducer_type: \"error\";\n code: number;\n hint?: string;\n detail?: string;\n}\n\nexport enum BackupStates {\n ContinentSelecting = \"CONTINENT_SELECTING\",\n CountrySelecting = \"COUNTRY_SELECTING\",\n UserAttributesCollecting = \"USER_ATTRIBUTES_COLLECTING\",\n AuthenticationsEditing = \"AUTHENTICATIONS_EDITING\",\n PoliciesReviewing = \"POLICIES_REVIEWING\",\n SecretEditing = \"SECRET_EDITING\",\n TruthsPaying = \"TRUTHS_PAYING\",\n PoliciesPaying = \"POLICIES_PAYING\",\n BackupFinished = \"BACKUP_FINISHED\",\n}\n\nexport enum RecoveryStates {\n ContinentSelecting = \"CONTINENT_SELECTING\",\n CountrySelecting = \"COUNTRY_SELECTING\",\n UserAttributesCollecting = \"USER_ATTRIBUTES_COLLECTING\",\n SecretSelecting = \"SECRET_SELECTING\",\n ChallengeSelecting = \"CHALLENGE_SELECTING\",\n ChallengePaying = \"CHALLENGE_PAYING\",\n ChallengeSolving = \"CHALLENGE_SOLVING\",\n RecoveryFinished = \"RECOVERY_FINISHED\",\n}\n\nexport interface MethodSpec {\n type: string;\n usage_fee: AmountString;\n}\n\nexport type AuthenticationProviderStatusNotContacted = {\n status: \"not-contacted\";\n};\n\nexport interface AuthenticationProviderStatusOk {\n status: \"ok\";\n\n annual_fee: string;\n business_name: string;\n currency: string;\n http_status: 200;\n liability_limit: string;\n provider_salt: string;\n storage_limit_in_megabytes: number;\n truth_upload_fee: string;\n methods: MethodSpec[];\n // FIXME: add timestamp?\n}\n\nexport interface AuthenticationProviderStatusDisabled {\n status: \"disabled\";\n}\n\nexport interface AuthenticationProviderStatusError {\n status: \"error\";\n\n http_status?: number;\n code: number;\n hint?: string;\n // FIXME: add timestamp?\n}\n\nexport type AuthenticationProviderStatus =\n | AuthenticationProviderStatusNotContacted\n | AuthenticationProviderStatusDisabled\n | AuthenticationProviderStatusError\n | AuthenticationProviderStatusOk;\n\nexport interface ReducerStateBackupUserAttributesCollecting\n extends ReducerStateBackup {\n backup_state: BackupStates.UserAttributesCollecting;\n selected_country: string;\n currencies: string[];\n required_attributes: UserAttributeSpec[];\n authentication_providers: AuthenticationProviderStatusMap;\n}\n\nexport interface ActionArgsEnterUserAttributes {\n identity_attributes: Record<string, string>;\n}\n\nexport const codecForActionArgsEnterUserAttributes = () =>\n buildCodecForObject<ActionArgsEnterUserAttributes>()\n .property(\"identity_attributes\", codecForAny())\n .build(\"ActionArgsEnterUserAttributes\");\n\nexport interface ActionArgsAddProvider {\n provider_url: string;\n}\n\nexport interface ActionArgsDeleteProvider {\n provider_url: string;\n}\n\nexport interface ActionArgsAddAuthentication {\n authentication_method: {\n type: string;\n instructions: string;\n challenge: string;\n mime?: string;\n };\n}\n\nexport interface ActionArgsDeleteAuthentication {\n authentication_method: number;\n}\n\nexport interface ActionArgsDeletePolicy {\n policy_index: number;\n}\n\nexport interface ActionArgsEnterSecretName {\n name: string;\n}\n\nexport interface ActionArgsEnterSecret {\n secret: {\n value: string;\n mime?: string;\n filename?: string;\n };\n expiration: TalerProtocolTimestamp;\n}\n\nexport interface ActionArgsSelectContinent {\n continent: string;\n}\n\nexport const codecForActionArgSelectContinent = () =>\n buildCodecForObject<ActionArgsSelectContinent>()\n .property(\"continent\", codecForString())\n .build(\"ActionArgSelectContinent\");\n\nexport interface ActionArgsSelectCountry {\n country_code: string;\n}\n\nexport interface ActionArgsSelectChallenge {\n uuid: string;\n}\n\nexport type ActionArgsSolveChallengeRequest =\n | SolveChallengeAnswerRequest\n | SolveChallengePinRequest\n | SolveChallengeHashRequest;\n\n/**\n * Answer to a challenge.\n *\n * For \"question\" challenges, this is a string with the answer.\n *\n * For \"sms\" / \"email\" / \"post\" this is a numeric code with optionally\n * the \"A-\" prefix.\n */\nexport interface SolveChallengeAnswerRequest {\n answer: string;\n}\n\n/**\n * Answer to a challenge that requires a numeric response.\n *\n * XXX: Should be deprecated in favor of just \"answer\".\n */\nexport interface SolveChallengePinRequest {\n pin: number;\n}\n\n/**\n * Answer to a challenge by directly providing the hash.\n *\n * XXX: When / why is this even used?\n */\nexport interface SolveChallengeHashRequest {\n /**\n * Base32-crock encoded hash code.\n */\n hash: string;\n}\n\nexport interface PolicyMember {\n authentication_method: number;\n provider: string;\n}\n\nexport interface ActionArgsAddPolicy {\n policy: PolicyMember[];\n}\n\nexport interface ActionArgsUpdateExpiration {\n expiration: TalerProtocolTimestamp;\n}\n\nexport interface SelectedVersionInfo {\n attribute_mask: number;\n providers: {\n url: string;\n version: number;\n }[];\n}\n\nexport type ActionArgsChangeVersion = SelectedVersionInfo;\n\nexport interface ActionArgsUpdatePolicy {\n policy_index: number;\n policy: PolicyMember[];\n}\n\n/**\n * Cursor for a provider discovery process.\n */\nexport interface DiscoveryCursor {\n position: {\n provider_url: string;\n mask: number;\n max_version?: number;\n }[];\n}\n\nexport interface PolicyMetaInfo {\n policy_hash: string;\n provider_url: string;\n version: number;\n attribute_mask: number;\n server_time: TalerProtocolTimestamp;\n secret_name?: string;\n}\n\n/**\n * Aggregated / de-duplicated policy meta info.\n */\nexport interface AggregatedPolicyMetaInfo {\n secret_name?: string;\n policy_hash: string;\n attribute_mask: number;\n providers: {\n url: string;\n version: number;\n }[];\n}\n\nexport interface DiscoveryResult {\n /**\n * Found policies.\n */\n policies: PolicyMetaInfo[];\n\n /**\n * Cursor that allows getting more results.\n */\n cursor?: DiscoveryCursor;\n}\n\n// FIXME: specify schema!\nexport const codecForActionArgsChangeVersion = codecForAny;\n\nexport const codecForPolicyMember = () =>\n buildCodecForObject<PolicyMember>()\n .property(\"authentication_method\", codecForNumber())\n .property(\"provider\", codecForString())\n .build(\"PolicyMember\");\n\nexport const codecForActionArgsAddPolicy = () =>\n buildCodecForObject<ActionArgsAddPolicy>()\n .property(\"policy\", codecForList(codecForPolicyMember()))\n .build(\"ActionArgsAddPolicy\");\n\nexport const codecForActionArgsUpdateExpiration = () =>\n buildCodecForObject<ActionArgsUpdateExpiration>()\n .property(\"expiration\", codecForTimestamp)\n .build(\"ActionArgsUpdateExpiration\");\n\nexport const codecForActionArgsSelectChallenge = () =>\n buildCodecForObject<ActionArgsSelectChallenge>()\n .property(\"uuid\", codecForString())\n .build(\"ActionArgsSelectChallenge\");\n\nexport const codecForActionArgSelectCountry = () =>\n buildCodecForObject<ActionArgsSelectCountry>()\n .property(\"country_code\", codecForString())\n .build(\"ActionArgSelectCountry\");\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 {\n canonicalJson,\n decodeCrock,\n encodeCrock,\n getRandomBytes,\n kdfKw,\n secretbox,\n crypto_sign_keyPair_fromSeed,\n stringToBytes,\n secretbox_open,\n hash,\n bytesToString,\n hashArgon2id,\n} from \"@gnu-taler/taler-util\";\n\nexport type Flavor<T, FlavorT extends string> = T & {\n _flavor?: `anastasis.${FlavorT}`;\n};\n\nexport type FlavorP<T, FlavorT extends string, S extends number> = T & {\n _flavor?: `anastasis.${FlavorT}`;\n _size?: S;\n};\n\nexport type UserIdentifier = Flavor<string, \"UserIdentifier\">;\nexport type ServerSalt = Flavor<string, \"ServerSalt\">;\nexport type PolicySalt = Flavor<string, \"PolicySalt\">;\nexport type PolicyKey = FlavorP<string, \"PolicyKey\", 64>;\nexport type KeyShare = Flavor<string, \"KeyShare\">;\nexport type EncryptedKeyShare = Flavor<string, \"EncryptedKeyShare\">;\nexport type EncryptedTruth = Flavor<string, \"EncryptedTruth\">;\nexport type EncryptedCoreSecret = Flavor<string, \"EncryptedCoreSecret\">;\nexport type EncryptedMasterKey = Flavor<string, \"EncryptedMasterKey\">;\nexport type EddsaPublicKey = Flavor<string, \"EddsaPublicKey\">;\nexport type EddsaPrivateKey = Flavor<string, \"EddsaPrivateKey\">;\nexport type TruthUuid = Flavor<string, \"TruthUuid\">;\nexport type SecureAnswerHash = Flavor<string, \"SecureAnswerHash\">;\n/**\n * Truth-specific randomness, also called question salt sometimes.\n */\nexport type TruthSalt = Flavor<string, \"TruthSalt\">;\n/**\n * Truth key, found in the recovery document.\n */\nexport type TruthKey = Flavor<string, \"TruthKey\">;\nexport type EncryptionNonce = Flavor<string, \"EncryptionNonce\">;\nexport type OpaqueData = Flavor<string, \"OpaqueData\">;\n\nconst nonceSize = 24;\nconst masterKeySize = 64;\n\nexport async function userIdentifierDerive(\n idData: any,\n serverSalt: ServerSalt,\n): Promise<UserIdentifier> {\n const canonIdData = canonicalJson(idData);\n const hashInput = stringToBytes(canonIdData);\n const result = await hashArgon2id(\n hashInput, // password\n decodeCrock(serverSalt), // salt\n 3, // iterations\n 1024, // memoryLimit (kibibytes)\n 64, // hashLength\n );\n return encodeCrock(result);\n}\n\nexport interface AccountKeyPair {\n priv: EddsaPrivateKey;\n pub: EddsaPublicKey;\n}\n\nexport function accountKeypairDerive(userId: UserIdentifier): AccountKeyPair {\n // FIXME: the KDF invocation looks fishy, but that's what the C code presently does.\n const d = kdfKw({\n outputLength: 32,\n ikm: decodeCrock(userId),\n info: stringToBytes(\"ver\"),\n });\n const pair = crypto_sign_keyPair_fromSeed(d);\n return {\n priv: encodeCrock(d),\n pub: encodeCrock(pair.publicKey),\n };\n}\n\n/**\n * Encrypt the recovery document.\n *\n * The caller should first compress the recovery doc.\n */\nexport async function encryptRecoveryDocument(\n userId: UserIdentifier,\n recoveryDocData: OpaqueData,\n): Promise<OpaqueData> {\n const nonce = encodeCrock(getRandomBytes(nonceSize));\n return anastasisEncrypt(nonce, asOpaque(userId), recoveryDocData, \"erd\");\n}\n\n/**\n * Encrypt the recovery document.\n *\n * The caller should first compress the recovery doc.\n */\nexport async function decryptRecoveryDocument(\n userId: UserIdentifier,\n recoveryDocData: OpaqueData,\n): Promise<OpaqueData> {\n return anastasisDecrypt(asOpaque(userId), recoveryDocData, \"erd\");\n}\n\nexport interface PolicyMetadata {\n secret_name: string;\n policy_hash: string;\n}\n\nexport async function encryptPolicyMetadata(\n userId: UserIdentifier,\n metadata: PolicyMetadata,\n): Promise<OpaqueData> {\n const metadataBytes = typedArrayConcat([\n decodeCrock(metadata.policy_hash),\n stringToBytes(metadata.secret_name),\n ]);\n const nonce = encodeCrock(getRandomBytes(nonceSize));\n return anastasisEncrypt(\n nonce,\n asOpaque(userId),\n encodeCrock(metadataBytes),\n \"rmd\",\n );\n}\n\nexport async function decryptPolicyMetadata(\n userId: UserIdentifier,\n metadataEnc: OpaqueData,\n): Promise<PolicyMetadata> {\n // @ts-ignore\n console.log(\"metadataEnc\", metadataEnc);\n const plain = await anastasisDecrypt(asOpaque(userId), metadataEnc, \"rmd\");\n // @ts-ignore\n console.log(\"plain:\", plain);\n const metadataBytes = decodeCrock(plain);\n const policyHash = encodeCrock(metadataBytes.slice(0, 64));\n const secretName = bytesToString(metadataBytes.slice(64));\n return {\n policy_hash: policyHash,\n secret_name: secretName,\n };\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\nexport async function policyKeyDerive(\n keyShares: KeyShare[],\n policySalt: PolicySalt,\n): Promise<PolicyKey> {\n const chunks = keyShares.map((x) => decodeCrock(x));\n const polKey = kdfKw({\n outputLength: 64,\n ikm: typedArrayConcat(chunks),\n salt: decodeCrock(policySalt),\n info: stringToBytes(\"anastasis-policy-key-derive\"),\n });\n\n return encodeCrock(polKey);\n}\n\nasync function deriveKey(\n keySeed: OpaqueData,\n nonce: EncryptionNonce,\n salt: string,\n): Promise<Uint8Array> {\n return kdfKw({\n outputLength: 32,\n salt: decodeCrock(nonce),\n ikm: decodeCrock(keySeed),\n info: stringToBytes(salt),\n });\n}\n\nasync function anastasisEncrypt(\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 nonceBuf = decodeCrock(nonce);\n const cipherText = secretbox(decodeCrock(plaintext), decodeCrock(nonce), key);\n return encodeCrock(typedArrayConcat([nonceBuf, cipherText]));\n}\n\nasync function anastasisDecrypt(\n keySeed: OpaqueData,\n ciphertext: OpaqueData,\n salt: string,\n): Promise<OpaqueData> {\n const ctBuf = decodeCrock(ciphertext);\n const nonceBuf = ctBuf.slice(0, nonceSize);\n const enc = ctBuf.slice(nonceSize);\n const key = await deriveKey(keySeed, encodeCrock(nonceBuf), salt);\n const clearText = secretbox_open(enc, nonceBuf, key);\n if (!clearText) {\n throw Error(\"could not decrypt\");\n }\n return encodeCrock(clearText);\n}\n\nexport const asOpaque = (x: string): OpaqueData => x;\nconst asEncryptedKeyShare = (x: OpaqueData): EncryptedKeyShare => x as string;\nconst asEncryptedTruth = (x: OpaqueData): EncryptedTruth => x as string;\nconst asKeyShare = (x: OpaqueData): KeyShare => x as string;\n\nexport async function encryptKeyshare(\n keyShare: KeyShare,\n userId: UserIdentifier,\n answerSalt?: string,\n): Promise<EncryptedKeyShare> {\n const s = answerSalt ?? \"eks\";\n const nonce = encodeCrock(getRandomBytes(24));\n return asEncryptedKeyShare(\n await anastasisEncrypt(nonce, asOpaque(userId), asOpaque(keyShare), s),\n );\n}\n\nexport async function decryptKeyShare(\n encKeyShare: EncryptedKeyShare,\n userId: UserIdentifier,\n answerSalt?: string,\n): Promise<KeyShare> {\n const s = answerSalt ?? \"eks\";\n return asKeyShare(\n await anastasisDecrypt(asOpaque(userId), asOpaque(encKeyShare), s),\n );\n}\n\nexport async function encryptTruth(\n nonce: EncryptionNonce,\n truthEncKey: TruthKey,\n truth: OpaqueData,\n): Promise<EncryptedTruth> {\n const salt = \"ect\";\n return asEncryptedTruth(\n await anastasisEncrypt(nonce, asOpaque(truthEncKey), truth, salt),\n );\n}\n\nexport async function decryptTruth(\n truthEncKey: TruthKey,\n truthEnc: EncryptedTruth,\n): Promise<OpaqueData> {\n const salt = \"ect\";\n return await anastasisDecrypt(\n asOpaque(truthEncKey),\n asOpaque(truthEnc),\n salt,\n );\n}\n\nexport interface CoreSecretEncResult {\n encCoreSecret: EncryptedCoreSecret;\n encMasterKeys: EncryptedMasterKey[];\n}\n\nexport async function coreSecretRecover(args: {\n encryptedMasterKey: OpaqueData;\n policyKey: PolicyKey;\n encryptedCoreSecret: OpaqueData;\n}): Promise<OpaqueData> {\n const masterKey = await anastasisDecrypt(\n asOpaque(args.policyKey),\n args.encryptedMasterKey,\n \"emk\",\n );\n return await anastasisDecrypt(masterKey, args.encryptedCoreSecret, \"cse\");\n}\n\nexport async function coreSecretEncrypt(\n policyKeys: PolicyKey[],\n coreSecret: OpaqueData,\n): Promise<CoreSecretEncResult> {\n const masterKey = getRandomBytes(masterKeySize);\n const nonce = encodeCrock(getRandomBytes(nonceSize));\n const coreSecretEncSalt = \"cse\";\n const masterKeyEncSalt = \"emk\";\n const encCoreSecret = (await anastasisEncrypt(\n nonce,\n encodeCrock(masterKey),\n coreSecret,\n coreSecretEncSalt,\n )) as string;\n const encMasterKeys: EncryptedMasterKey[] = [];\n for (let i = 0; i < policyKeys.length; i++) {\n const polNonce = encodeCrock(getRandomBytes(nonceSize));\n const encMasterKey = await anastasisEncrypt(\n polNonce,\n asOpaque(policyKeys[i]),\n encodeCrock(masterKey),\n masterKeyEncSalt,\n );\n encMasterKeys.push(encMasterKey as string);\n }\n return {\n encCoreSecret,\n encMasterKeys,\n };\n}\n\nexport async function pinAnswerHash(pin: number): Promise<SecureAnswerHash> {\n return encodeCrock(hash(stringToBytes(pin.toString())));\n}\n\nexport async function secureAnswerHash(\n answer: string,\n truthUuid: TruthUuid,\n questionSalt: TruthSalt,\n): Promise<SecureAnswerHash> {\n const powResult = await hashArgon2id(\n stringToBytes(answer), // password\n decodeCrock(questionSalt), // salt\n 3, // iterations\n 1024, // memorySize (kibibytes)\n 64, // hashLength\n );\n const kdfResult = kdfKw({\n outputLength: 64,\n salt: decodeCrock(truthUuid),\n ikm: powResult,\n info: stringToBytes(\"anastasis-secure-question-hashing\"),\n });\n return encodeCrock(kdfResult);\n}\n", "import { TruthKey, TruthSalt, TruthUuid } from \"./crypto.js\";\n\nexport enum ChallengeType {\n Question = \"question\",\n Sms = \"sms\",\n Email = \"email\",\n Post = \"post\",\n Totp = \"totp\",\n Iban = \"iban\",\n}\n\nexport interface RecoveryDocument {\n /**\n * Human-readable name of the secret\n * FIXME: Why is this optional?\n */\n secret_name?: string;\n\n /**\n * Encrypted core secret.\n *\n * Variable-size length, base32-crock encoded.\n */\n encrypted_core_secret: string;\n\n /**\n * List of escrow providers and selected authentication method.\n */\n escrow_methods: EscrowMethod[];\n\n /**\n * List of possible decryption policies.\n */\n policies: DecryptionPolicy[];\n}\n\nexport interface DecryptionPolicy {\n /**\n * Salt included to encrypt master key share when\n * using this decryption policy.\n *\n * FIXME: Rename to policy_salt\n */\n salt: string;\n\n /**\n * Master key, AES-encrypted with key derived from\n * salt and keyshares revealed by the following list of\n * escrow methods identified by UUID.\n */\n master_key: string;\n\n /**\n * List of escrow methods identified by their UUID.\n */\n uuids: string[];\n}\n\nexport interface EscrowMethod {\n /**\n * URL of the escrow provider (including possibly this Anastasis server).\n */\n url: string;\n\n /**\n * Type of the escrow method (e.g. security question, SMS etc.).\n */\n escrow_type: ChallengeType;\n\n /**\n * UUID of the escrow method.\n * 16 bytes base32-crock encoded.\n */\n uuid: TruthUuid;\n\n /**\n * Key used to encrypt the Truth this EscrowMethod is related to.\n * Client has to provide this key to the server when using /truth/.\n */\n truth_key: TruthKey;\n\n /**\n * Salt to hash the security question answer if applicable.\n */\n question_salt: TruthSalt;\n\n // Salt from the provider to derive the user ID\n // at this provider.\n provider_salt: string;\n\n /**\n * The instructions to give to the user (i.e. the security question\n * if this is challenge-response).\n */\n instructions: string;\n}\n", "import { AmountString, j2s, Logger } from \"@gnu-taler/taler-util\";\nimport { AuthMethod, Policy, PolicyProvider } from \"./reducer-types.js\";\n\nconst logger = new Logger(\"anastasis-core:policy-suggestion.ts\");\n\nconst maxMethodSelections = 200;\nconst maxPolicyEvaluations = 10000;\n\n/**\n * Provider information used during provider/method mapping.\n */\nexport interface ProviderInfo {\n url: string;\n methodCost: Record<string, AmountString>;\n}\n\nexport function suggestPolicies(\n methods: AuthMethod[],\n providers: ProviderInfo[],\n): PolicySelectionResult {\n const numMethods = methods.length;\n if (numMethods === 0) {\n throw Error(\"no methods\");\n }\n let numSel: number;\n if (numMethods <= 2) {\n numSel = numMethods;\n } else if (numMethods <= 4) {\n numSel = numMethods - 1;\n } else if (numMethods <= 6) {\n numSel = numMethods - 2;\n } else if (numMethods == 7) {\n numSel = numMethods - 3;\n } else {\n numSel = 4;\n }\n const policies: Policy[] = [];\n const selections = enumerateMethodSelections(\n numSel,\n numMethods,\n maxMethodSelections,\n );\n logger.info(`selections: ${j2s(selections)}`);\n for (const sel of selections) {\n const p = assignProviders(policies, methods, providers, sel);\n if (p) {\n policies.push(p);\n }\n }\n logger.info(`suggesting policies ${j2s(policies)}`);\n return {\n policies,\n policy_providers: providers.map((x) => ({\n provider_url: x.url,\n })),\n };\n}\n\n/**\n * Assign providers to a method selection.\n *\n * The evaluation of the assignment is made with respect to\n * previously generated policies.\n */\nfunction assignProviders(\n existingPolicies: Policy[],\n methods: AuthMethod[],\n providers: ProviderInfo[],\n methodSelection: number[],\n): Policy | undefined {\n const providerSelections = enumerateProviderMappings(\n methodSelection.length,\n providers.length,\n maxPolicyEvaluations,\n );\n\n let bestProvSel: ProviderSelection | undefined;\n // Number of different providers selected, larger is better\n let bestDiversity = 0;\n // Number of identical challenges duplicated at different providers,\n // smaller is better\n let bestDuplication = Number.MAX_SAFE_INTEGER;\n\n for (const provSel of providerSelections) {\n // First, check if selection is even possible with the methods offered\n let possible = true;\n for (const methSelIndex in provSel) {\n const provIndex = provSel[methSelIndex];\n if (typeof provIndex !== \"number\") {\n throw Error(\"invariant failed\");\n }\n const methIndex = methodSelection[methSelIndex];\n const meth = methods[methIndex];\n if (!meth) {\n throw Error(\"invariant failed\");\n }\n const prov = providers[provIndex];\n if (!prov.methodCost[meth.type]) {\n possible = false;\n break;\n }\n }\n if (!possible) {\n continue;\n }\n // Evaluate diversity, always prefer policies\n // that increase diversity.\n const providerSet = new Set<string>();\n // The C reducer evaluates diversity only per policy\n // for (const pol of existingPolicies) {\n // for (const m of pol.methods) {\n // providerSet.add(m.provider);\n // }\n // }\n for (const provIndex of provSel) {\n const prov = providers[provIndex];\n providerSet.add(prov.url);\n }\n\n const diversity = providerSet.size;\n\n // Number of providers that each method shows up at.\n const provPerMethod: Set<string>[] = [];\n for (let i = 0; i < methods.length; i++) {\n provPerMethod[i] = new Set<string>();\n }\n for (const pol of existingPolicies) {\n for (const m of pol.methods) {\n provPerMethod[m.authentication_method].add(m.provider);\n }\n }\n for (const methSelIndex in provSel) {\n const prov = providers[provSel[methSelIndex]];\n provPerMethod[methodSelection[methSelIndex]].add(prov.url);\n }\n\n let duplication = 0;\n for (const provSet of provPerMethod) {\n duplication += provSet.size;\n }\n\n logger.info(`diversity ${diversity}, duplication ${duplication}`);\n\n if (!bestProvSel || diversity > bestDiversity) {\n bestProvSel = provSel;\n bestDiversity = diversity;\n bestDuplication = duplication;\n logger.info(`taking based on diversity`);\n } else if (diversity == bestDiversity && duplication < bestDuplication) {\n bestProvSel = provSel;\n bestDiversity = diversity;\n bestDuplication = duplication;\n logger.info(`taking based on duplication`);\n }\n // TODO: also evaluate costs\n }\n\n if (!bestProvSel) {\n return undefined;\n }\n\n return {\n methods: bestProvSel.map((x, i) => ({\n authentication_method: methodSelection[i],\n provider: providers[x].url,\n })),\n };\n}\n\n/**\n * A provider selection maps a method selection index to a provider index.\n *\n * I.e. \"PSEL[i] = x\" means that provider with index \"x\" should be used\n * for method with index \"MSEL[i]\"\n */\ntype ProviderSelection = number[];\n\n/**\n * A method selection \"MSEL[j] = y\" means that policy method j\n * should use method y.\n */\ntype MethodSelection = number[];\n\n/**\n * Compute provider mappings.\n * Enumerates all n-combinations with repetition of m providers.\n */\nfunction enumerateProviderMappings(\n n: number,\n m: number,\n limit?: number,\n): ProviderSelection[] {\n const selections: ProviderSelection[] = [];\n const a = new Array(n);\n const sel = (i: number, start: number = 0) => {\n if (i === n) {\n selections.push([...a]);\n return;\n }\n for (let j = start; j < m; j++) {\n a[i] = j;\n sel(i + 1, 0);\n if (limit && selections.length >= limit) {\n break;\n }\n }\n };\n sel(0);\n return selections;\n}\n\ninterface PolicySelectionResult {\n policies: Policy[];\n policy_providers: PolicyProvider[];\n}\n\n/**\n * Compute method selections.\n * Enumerates all n-combinations without repetition of m methods.\n */\nfunction enumerateMethodSelections(\n n: number,\n m: number,\n limit?: number,\n): MethodSelection[] {\n const selections: MethodSelection[] = [];\n const a = new Array(n);\n const sel = (i: number, start: number = 0) => {\n if (i === n) {\n selections.push([...a]);\n return;\n }\n for (let j = start; j < m; j++) {\n a[i] = j;\n sel(i + 1, j + 1);\n if (limit && selections.length >= limit) {\n break;\n }\n }\n };\n sel(0);\n return selections;\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\n/**\n * Imports.\n */\nimport { AmountString, HttpStatusCode } from \"@gnu-taler/taler-util\";\n\nexport enum ChallengeFeedbackStatus {\n Solved = \"solved\",\n CodeInFile = \"code-in-file\",\n CodeSent = \"code-sent\",\n ServerFailure = \"server-failure\",\n TruthUnknown = \"truth-unknown\",\n TalerPayment = \"taler-payment\",\n Unsupported = \"unsupported\",\n RateLimitExceeded = \"rate-limit-exceeded\",\n IbanInstructions = \"iban-instructions\",\n IncorrectAnswer = \"incorrect-answer\",\n}\n\nexport type ChallengeFeedback =\n | ChallengeFeedbackSolved\n | ChallengeFeedbackCodeInFile\n | ChallengeFeedbackCodeSent\n | ChallengeFeedbackIncorrectAnswer\n | ChallengeFeedbackTalerPaymentRequired\n | ChallengeFeedbackServerFailure\n | ChallengeFeedbackRateLimitExceeded\n | ChallengeFeedbackTruthUnknown\n | ChallengeFeedbackUnsupported\n | ChallengeFeedbackBankTransferRequired;\n\n/**\n * Challenge has been solved and the key share has\n * been retrieved.\n */\nexport interface ChallengeFeedbackSolved {\n state: ChallengeFeedbackStatus.Solved;\n}\n\nexport interface ChallengeFeedbackIncorrectAnswer {\n state: ChallengeFeedbackStatus.IncorrectAnswer;\n}\n\nexport interface ChallengeFeedbackCodeInFile {\n state: ChallengeFeedbackStatus.CodeInFile;\n filename: string;\n display_hint: string;\n}\n\nexport interface ChallengeFeedbackCodeSent {\n state: ChallengeFeedbackStatus.CodeSent;\n display_hint: string;\n address_hint: string;\n}\n\n/**\n * The challenge given by the server is unsupported\n * by the current anastasis client.\n */\nexport interface ChallengeFeedbackUnsupported {\n state: ChallengeFeedbackStatus.Unsupported;\n\n /**\n * Human-readable identifier of the unsupported method.\n */\n unsupported_method: string;\n}\n\n/**\n * The user tried to answer too often with a wrong answer.\n */\nexport interface ChallengeFeedbackRateLimitExceeded {\n state: ChallengeFeedbackStatus.RateLimitExceeded;\n}\n\n/**\n * Instructions for performing authentication via an\n * IBAN bank transfer.\n */\nexport interface ChallengeFeedbackBankTransferRequired {\n state: ChallengeFeedbackStatus.IbanInstructions;\n\n /**\n * Amount that should be transferred for a successful authentication.\n */\n challenge_amount: AmountString;\n\n /**\n * Account that should be credited.\n */\n target_iban: string;\n\n /**\n * Creditor name.\n */\n target_business_name: string;\n\n /**\n * Unstructured remittance information that should\n * be contained in the bank transfer.\n */\n wire_transfer_subject: string;\n\n answer_code: number;\n}\n\n/**\n * The server experienced a temporary failure.\n */\nexport interface ChallengeFeedbackServerFailure {\n state: ChallengeFeedbackStatus.ServerFailure;\n http_status: HttpStatusCode | 0;\n\n /**\n * Taler-style error response, if available.\n */\n error_response?: any;\n}\n\n/**\n * The truth is unknown to the provider. There\n * is no reason to continue trying to solve any\n * challenges in the policy.\n */\nexport interface ChallengeFeedbackTruthUnknown {\n state: ChallengeFeedbackStatus.TruthUnknown;\n}\n\n/**\n * A payment is required before the user can\n * even attempt to solve the challenge.\n */\nexport interface ChallengeFeedbackTalerPaymentRequired {\n state: ChallengeFeedbackStatus.TalerPayment;\n\n taler_pay_uri: string;\n\n provider: string;\n\n /**\n * FIXME: Why is this required?!\n */\n payment_secret: string;\n}\n", "function isPrime(num: number): boolean {\n for (let i = 2, s = Math.sqrt(num); i <= s; i++)\n if (num % i === 0) return false;\n return num > 1;\n}\n\nexport function AL_NID_check(s: string): boolean { return true }\nexport function BE_NRN_check(s: string): boolean { return true }\nexport function CH_AHV_check(s: string): boolean { return true }\nexport function CZ_BN_check(s: string): boolean { return true }\nexport function DE_TIN_check(s: string): boolean { return true }\nexport function DE_SVN_check(s: string): boolean { return true }\nexport function ES_DNI_check(s: string): boolean { return true }\nexport function IN_AADHAR_check(s: string): boolean { return true }\nexport function IT_CF_check(s: string): boolean {\n return true\n}\n\nexport function XX_SQUARE_check(s: string): boolean {\n const n = parseInt(s, 10)\n const r = Math.sqrt(n)\n return n === r * r;\n}\nexport function XY_PRIME_check(s: string): boolean {\n const n = parseInt(s, 10)\n return isPrime(n)\n}\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\n/**\n * Imports.\n */\nimport {\n AmountJson,\n AmountLike,\n Amounts,\n AmountString,\n buildSigPS,\n bytesToString,\n Codec,\n codecForAny,\n decodeCrock,\n Duration,\n eddsaSign,\n encodeCrock,\n getRandomBytes,\n hash,\n HttpStatusCode,\n Logger,\n parsePayUri,\n stringToBytes,\n TalerErrorCode,\n TalerProtocolTimestamp,\n TalerSignaturePurpose,\n AbsoluteTime,\n URL,\n j2s,\n} from \"@gnu-taler/taler-util\";\nimport { HttpResponse } from \"@gnu-taler/taler-util/http\";\nimport { anastasisData } from \"./anastasis-data.js\";\nimport {\n codecForChallengeInstructionMessage,\n EscrowConfigurationResponse,\n RecoveryMetaResponse,\n TruthUploadRequest,\n} from \"./provider-types.js\";\nimport {\n ActionArgsAddAuthentication,\n ActionArgsDeleteAuthentication,\n ActionArgsDeletePolicy,\n ActionArgsEnterSecret,\n ActionArgsEnterSecretName,\n ActionArgsEnterUserAttributes,\n ActionArgsAddPolicy,\n ActionArgsSelectContinent,\n ActionArgsSelectCountry,\n ActionArgsSelectChallenge,\n ActionArgsSolveChallengeRequest,\n ActionArgsUpdateExpiration,\n AuthenticationProviderStatus,\n AuthenticationProviderStatusOk,\n AuthMethod,\n BackupStates,\n codecForActionArgsEnterUserAttributes,\n codecForActionArgsAddPolicy,\n codecForActionArgsSelectChallenge,\n codecForActionArgSelectContinent,\n codecForActionArgSelectCountry,\n codecForActionArgsUpdateExpiration,\n ContinentInfo,\n CountryInfo,\n RecoveryInformation,\n RecoveryInternalData,\n RecoveryStates,\n ReducerState,\n ReducerStateBackup,\n ReducerStateError,\n ReducerStateRecovery,\n SuccessDetails,\n codecForActionArgsChangeVersion,\n ActionArgsChangeVersion,\n TruthMetaData,\n ActionArgsUpdatePolicy,\n ActionArgsAddProvider,\n ActionArgsDeleteProvider,\n DiscoveryCursor,\n DiscoveryResult,\n PolicyMetaInfo,\n ChallengeInfo,\n AggregatedPolicyMetaInfo,\n AuthenticationProviderStatusMap,\n} from \"./reducer-types.js\";\nimport {\n accountKeypairDerive,\n asOpaque,\n coreSecretEncrypt,\n encryptKeyshare,\n encryptRecoveryDocument,\n encryptTruth,\n OpaqueData,\n PolicyKey,\n policyKeyDerive,\n PolicySalt,\n TruthSalt,\n secureAnswerHash,\n UserIdentifier,\n userIdentifierDerive,\n typedArrayConcat,\n decryptRecoveryDocument,\n decryptKeyShare,\n KeyShare,\n coreSecretRecover,\n pinAnswerHash,\n decryptPolicyMetadata,\n encryptPolicyMetadata,\n} from \"./crypto.js\";\nimport { unzlibSync, zlibSync } from \"fflate\";\nimport {\n ChallengeType,\n EscrowMethod,\n RecoveryDocument,\n} from \"./recovery-document-types.js\";\nimport { ProviderInfo, suggestPolicies } from \"./policy-suggestion.js\";\nimport {\n ChallengeFeedback,\n ChallengeFeedbackStatus,\n} from \"./challenge-feedback-types.js\";\n\nexport * from \"./reducer-types.js\";\nexport * as validators from \"./validators.js\";\nexport * from \"./challenge-feedback-types.js\";\n\nconst logger = new Logger(\"anastasis-core:index.ts\");\n\nconst ANASTASIS_HTTP_HEADER_POLICY_META_DATA = \"Anastasis-Policy-Meta-Data\";\n\nfunction getContinents(): ContinentInfo[] {\n const continentSet = new Set<string>();\n const continents: ContinentInfo[] = [];\n for (const country of anastasisData.countriesList.countries) {\n if (continentSet.has(country.continent)) {\n continue;\n }\n continentSet.add(country.continent);\n continents.push({\n ...{ name_i18n: country.continent_i18n },\n name: country.continent,\n });\n }\n return continents;\n}\n\ninterface ErrorDetails {\n code: TalerErrorCode;\n message?: string;\n hint?: string;\n}\n\nexport class ReducerError extends Error {\n constructor(public errorJson: ErrorDetails) {\n super(\n errorJson.message ??\n errorJson.hint ??\n `${TalerErrorCode[errorJson.code]}`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, ReducerError.prototype);\n }\n}\n\n/**\n * Get countries for a continent, abort with ReducerError\n * exception when continent doesn't exist.\n */\nfunction getCountries(continent: string): CountryInfo[] {\n const countries = anastasisData.countriesList.countries.filter(\n (x) => x.continent === continent,\n );\n if (countries.length <= 0) {\n throw new ReducerError({\n code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID,\n hint: `continent ${continent} not found`,\n });\n }\n return countries;\n}\n\nexport async function getBackupStartState(): Promise<ReducerStateBackup> {\n return {\n reducer_type: \"backup\",\n backup_state: BackupStates.ContinentSelecting,\n continents: getContinents(),\n };\n}\n\nexport async function getRecoveryStartState(): Promise<ReducerStateRecovery> {\n return {\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ContinentSelecting,\n continents: getContinents(),\n };\n}\n\nasync function selectCountry(\n selectedContinent: string,\n args: ActionArgsSelectCountry,\n): Promise<Partial<ReducerStateBackup> & Partial<ReducerStateRecovery>> {\n const countryCode = args.country_code;\n const country = anastasisData.countriesList.countries.find(\n (x) => x.code === countryCode,\n );\n if (!country) {\n throw new ReducerError({\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: \"invalid country selected\",\n });\n }\n\n if (country.continent !== selectedContinent) {\n throw new ReducerError({\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: \"selected country is not in selected continent\",\n });\n }\n\n const providers: { [x: string]: AuthenticationProviderStatus } = {};\n for (const prov of anastasisData.providersList.anastasis_provider) {\n let shouldAdd =\n country.code === prov.restricted ||\n (country.code !== \"xx\" && !prov.restricted);\n if (shouldAdd) {\n providers[prov.url] = {\n status: \"not-contacted\",\n };\n }\n }\n\n const ra = (anastasisData.countryDetails as any)[countryCode]\n .required_attributes;\n\n return {\n selected_country: countryCode,\n required_attributes: ra,\n authentication_providers: providers,\n };\n}\n\nasync function backupSelectCountry(\n state: ReducerStateBackup,\n args: ActionArgsSelectCountry,\n): Promise<ReducerStateError | ReducerStateBackup> {\n return {\n ...state,\n ...(await selectCountry(state.selected_continent!, args)),\n backup_state: BackupStates.UserAttributesCollecting,\n };\n}\n\nasync function recoverySelectCountry(\n state: ReducerStateRecovery,\n args: ActionArgsSelectCountry,\n): Promise<ReducerStateError | ReducerStateRecovery> {\n return {\n ...state,\n recovery_state: RecoveryStates.UserAttributesCollecting,\n ...(await selectCountry(state.selected_continent!, args)),\n };\n}\n\nasync function getProviderInfo(\n providerBaseUrl: string,\n): Promise<AuthenticationProviderStatus> {\n // FIXME: Use a reasonable timeout here.\n let resp: Response;\n try {\n resp = await fetch(new URL(\"config\", providerBaseUrl).href);\n } catch (e) {\n console.warn(\n \"Encountered an HTTP error whilst trying to get the provider's config: \",\n e,\n );\n return {\n status: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: \"request to anastasis provider failed\",\n };\n }\n if (!resp.ok) {\n console.warn(\"Got bad response code whilst getting provider config\", resp);\n return {\n status: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: \"unexpected status\",\n http_status: resp.status,\n };\n }\n try {\n const jsonResp: EscrowConfigurationResponse = await resp.json();\n if (!jsonResp.provider_salt) {\n return {\n status: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_PROVIDER_CONFIG_FAILED,\n hint: \"provider did not have provider salt\",\n };\n }\n return {\n status: \"ok\",\n http_status: 200,\n annual_fee: jsonResp.annual_fee,\n business_name: jsonResp.business_name,\n currency: jsonResp.currency,\n liability_limit: jsonResp.liability_limit,\n methods: jsonResp.methods.map((x) => ({\n type: x.type,\n usage_fee: x.cost,\n })),\n provider_salt: jsonResp.provider_salt,\n storage_limit_in_megabytes: jsonResp.storage_limit_in_megabytes,\n truth_upload_fee: jsonResp.truth_upload_fee,\n };\n } catch (e) {\n return {\n status: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: \"provider did not return JSON\",\n };\n }\n}\n\nasync function backupEnterUserAttributes(\n state: ReducerStateBackup,\n args: ActionArgsEnterUserAttributes,\n): Promise<ReducerStateBackup> {\n const attributes = args.identity_attributes;\n const newState = {\n ...state,\n backup_state: BackupStates.AuthenticationsEditing,\n identity_attributes: attributes,\n };\n return newState;\n}\n\nasync function getTruthValue(\n authMethod: AuthMethod,\n truthUuid: string,\n questionSalt: TruthSalt,\n): Promise<OpaqueData> {\n switch (authMethod.type) {\n case \"question\": {\n return asOpaque(\n await secureAnswerHash(\n bytesToString(decodeCrock(authMethod.challenge)),\n truthUuid,\n questionSalt,\n ),\n );\n }\n case \"sms\":\n case \"email\":\n case \"totp\":\n case \"iban\":\n case \"post\":\n return authMethod.challenge;\n default:\n throw Error(`unknown auth type '${authMethod.type}'`);\n }\n}\n\n/**\n * Compress the recovery document and add a size header.\n */\nasync function compressRecoveryDoc(rd: any): Promise<Uint8Array> {\n const docBytes = stringToBytes(JSON.stringify(rd));\n const sizeHeaderBuf = new ArrayBuffer(4);\n const dvbuf = new DataView(sizeHeaderBuf);\n dvbuf.setUint32(0, docBytes.length, false);\n const zippedDoc = zlibSync(docBytes);\n return typedArrayConcat([new Uint8Array(sizeHeaderBuf), zippedDoc]);\n}\n\nasync function uncompressRecoveryDoc(zippedRd: Uint8Array): Promise<any> {\n const header = zippedRd.slice(0, 4);\n const data = zippedRd.slice(4);\n const res = unzlibSync(data);\n return JSON.parse(bytesToString(res));\n}\n\n/**\n * Prepare the recovery document and truth metadata based\n * on the selected policies.\n */\nasync function prepareRecoveryData(\n state: ReducerStateBackup,\n): Promise<ReducerStateBackup> {\n const policies = state.policies!;\n const secretName = state.secret_name!;\n const coreSecret: OpaqueData = encodeCrock(\n stringToBytes(JSON.stringify(state.core_secret!)),\n );\n\n // Truth key is `${methodIndex}/${providerUrl}`\n const truthMetadataMap: Record<string, TruthMetaData> = {};\n\n const policyKeys: PolicyKey[] = [];\n const policySalts: PolicySalt[] = [];\n // truth UUIDs for every policy.\n const policyUuids: string[][] = [];\n\n for (let policyIndex = 0; policyIndex < policies.length; policyIndex++) {\n const pol = policies[policyIndex];\n const policySalt = encodeCrock(getRandomBytes(64));\n const keyShares: string[] = [];\n const methUuids: string[] = [];\n for (let methIndex = 0; methIndex < pol.methods.length; methIndex++) {\n const meth = pol.methods[methIndex];\n const truthReference = `${meth.authentication_method}:${meth.provider}`;\n let tm = truthMetadataMap[truthReference];\n if (!tm) {\n tm = {\n key_share: encodeCrock(getRandomBytes(32)),\n nonce: encodeCrock(getRandomBytes(24)),\n master_salt: encodeCrock(getRandomBytes(16)),\n truth_key: encodeCrock(getRandomBytes(64)),\n uuid: encodeCrock(getRandomBytes(32)),\n pol_method_index: methIndex,\n policy_index: policyIndex,\n };\n truthMetadataMap[truthReference] = tm;\n }\n keyShares.push(tm.key_share);\n methUuids.push(tm.uuid);\n }\n const policyKey = await policyKeyDerive(keyShares, policySalt);\n policyUuids.push(methUuids);\n policyKeys.push(policyKey);\n policySalts.push(policySalt);\n }\n\n const csr = await coreSecretEncrypt(policyKeys, coreSecret);\n\n const escrowMethods: EscrowMethod[] = [];\n\n for (const truthKey of Object.keys(truthMetadataMap)) {\n const tm = truthMetadataMap[truthKey];\n const pol = state.policies![tm.policy_index];\n const meth = pol.methods[tm.pol_method_index];\n const authMethod =\n state.authentication_methods![meth.authentication_method];\n const provider = state.authentication_providers![\n meth.provider\n ] as AuthenticationProviderStatusOk;\n escrowMethods.push({\n escrow_type: authMethod.type as any,\n instructions: authMethod.instructions,\n provider_salt: provider.provider_salt,\n question_salt: tm.master_salt,\n truth_key: tm.truth_key,\n url: meth.provider,\n uuid: tm.uuid,\n });\n }\n\n const rd: RecoveryDocument = {\n secret_name: secretName,\n encrypted_core_secret: csr.encCoreSecret,\n escrow_methods: escrowMethods,\n policies: policies.map((x, i) => {\n return {\n master_key: csr.encMasterKeys[i],\n uuids: policyUuids[i],\n salt: policySalts[i],\n };\n }),\n };\n\n return {\n ...state,\n recovery_data: {\n recovery_document: rd,\n truth_metadata: truthMetadataMap,\n },\n };\n}\n\nasync function uploadSecret(\n state: ReducerStateBackup,\n): Promise<ReducerStateBackup | ReducerStateError> {\n if (!state.recovery_data) {\n state = await prepareRecoveryData(state);\n }\n\n const recoveryData = state.recovery_data;\n if (!recoveryData) {\n throw Error(\"invariant failed\");\n }\n\n const truthMetadataMap = recoveryData.truth_metadata;\n const rd = recoveryData.recovery_document;\n\n const truthPayUris: string[] = [];\n const truthPaySecrets: Record<string, string> = {};\n\n const userIdCache: Record<string, UserIdentifier> = {};\n const getUserIdCaching = async (providerUrl: string) => {\n let userId = userIdCache[providerUrl];\n if (!userId) {\n const provider = state.authentication_providers![\n providerUrl\n ] as AuthenticationProviderStatusOk;\n userId = userIdCache[providerUrl] = await userIdentifierDerive(\n state.identity_attributes!,\n provider.provider_salt,\n );\n }\n return userId;\n };\n for (const truthKey of Object.keys(truthMetadataMap)) {\n const tm = truthMetadataMap[truthKey];\n const pol = state.policies![tm.policy_index];\n const meth = pol.methods[tm.pol_method_index];\n const authMethod =\n state.authentication_methods![meth.authentication_method];\n const truthValue = await getTruthValue(authMethod, tm.uuid, tm.master_salt);\n const encryptedTruth = await encryptTruth(\n tm.nonce,\n tm.truth_key,\n truthValue,\n );\n logger.info(`uploading truth to ${meth.provider}`);\n const userId = await getUserIdCaching(meth.provider);\n const encryptedKeyShare = await encryptKeyshare(\n tm.key_share,\n userId,\n authMethod.type === \"question\"\n ? bytesToString(decodeCrock(authMethod.challenge))\n : undefined,\n );\n const tur: TruthUploadRequest = {\n encrypted_truth: encryptedTruth,\n key_share_data: encryptedKeyShare,\n storage_duration_years: 5 /* FIXME */,\n type: authMethod.type,\n truth_mime: authMethod.mime_type,\n };\n const reqUrl = new URL(`truth/${tm.uuid}`, meth.provider);\n const paySecret = (state.truth_upload_payment_secrets ?? {})[meth.provider];\n if (paySecret) {\n // FIXME: Get this from the params\n reqUrl.searchParams.set(\"timeout_ms\", \"500\");\n }\n const resp = await fetch(reqUrl.href, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(paySecret\n ? {\n \"Anastasis-Payment-Identifier\": paySecret,\n }\n : {}),\n },\n body: JSON.stringify(tur),\n });\n\n if (resp.status === HttpStatusCode.NoContent) {\n continue;\n }\n if (resp.status === HttpStatusCode.PaymentRequired) {\n const talerPayUri = resp.headers.get(\"Taler\");\n if (!talerPayUri) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE,\n hint: `payment requested, but no taler://pay URI given`,\n };\n }\n truthPayUris.push(talerPayUri);\n const parsedUri = parsePayUri(talerPayUri);\n if (!parsedUri) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE,\n hint: `payment requested, but no taler://pay URI given`,\n };\n }\n truthPaySecrets[meth.provider] = parsedUri.orderId;\n continue;\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: `could not upload truth (HTTP status ${resp.status})`,\n };\n }\n\n if (truthPayUris.length > 0) {\n return {\n ...state,\n backup_state: BackupStates.TruthsPaying,\n truth_upload_payment_secrets: truthPaySecrets,\n payments: truthPayUris,\n };\n }\n\n const successDetails: SuccessDetails = {};\n\n const policyPayUris: string[] = [];\n const policyPayUriMap: Record<string, string> = {};\n //const policyPaySecrets: Record<string, string> = {};\n\n for (const prov of state.policy_providers!) {\n const userId = await getUserIdCaching(prov.provider_url);\n const acctKeypair = accountKeypairDerive(userId);\n const zippedDoc = await compressRecoveryDoc(rd);\n const recoveryDocHash = encodeCrock(hash(zippedDoc));\n const encRecoveryDoc = await encryptRecoveryDocument(\n userId,\n encodeCrock(zippedDoc),\n );\n const bodyHash = hash(decodeCrock(encRecoveryDoc));\n const sigPS = buildSigPS(TalerSignaturePurpose.ANASTASIS_POLICY_UPLOAD)\n .put(bodyHash)\n .build();\n const sig = eddsaSign(sigPS, decodeCrock(acctKeypair.priv));\n const metadataEnc = await encryptPolicyMetadata(userId, {\n policy_hash: recoveryDocHash,\n secret_name: state.secret_name ?? \"<unnamed secret>\",\n });\n const talerPayUri = state.policy_payment_requests?.find(\n (x) => x.provider === prov.provider_url,\n )?.payto;\n let paySecret: string | undefined;\n if (talerPayUri) {\n paySecret = parsePayUri(talerPayUri)!.orderId;\n }\n const reqUrl = new URL(`policy/${acctKeypair.pub}`, prov.provider_url);\n if (paySecret) {\n // FIXME: Get this from the params\n reqUrl.searchParams.set(\"timeout_ms\", \"500\");\n }\n logger.info(`uploading policy to ${prov.provider_url}`);\n const resp = await fetch(reqUrl.href, {\n method: \"POST\",\n headers: {\n \"Anastasis-Policy-Signature\": encodeCrock(sig),\n \"If-None-Match\": JSON.stringify(encodeCrock(bodyHash)),\n [ANASTASIS_HTTP_HEADER_POLICY_META_DATA]: metadataEnc,\n ...(paySecret\n ? {\n \"Anastasis-Payment-Identifier\": paySecret,\n }\n : {}),\n },\n body: decodeCrock(encRecoveryDoc),\n });\n logger.info(`got response for policy upload (http status ${resp.status})`);\n if (resp.status === HttpStatusCode.NoContent) {\n let policyVersion = 0;\n let policyExpiration: TalerProtocolTimestamp = { t_s: 0 };\n try {\n policyVersion = Number(resp.headers.get(\"Anastasis-Version\") ?? \"0\");\n } catch (e) {}\n try {\n policyExpiration = {\n t_s: Number(resp.headers.get(\"Anastasis-Policy-Expiration\") ?? \"0\"),\n };\n } catch (e) {}\n successDetails[prov.provider_url] = {\n policy_version: policyVersion,\n policy_expiration: policyExpiration,\n };\n continue;\n }\n if (resp.status === HttpStatusCode.PaymentRequired) {\n const talerPayUri = resp.headers.get(\"Taler\");\n if (!talerPayUri) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE,\n hint: `payment requested, but no taler://pay URI given`,\n };\n }\n policyPayUris.push(talerPayUri);\n const parsedUri = parsePayUri(talerPayUri);\n if (!parsedUri) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE,\n hint: `payment requested, but no taler://pay URI given`,\n };\n }\n policyPayUriMap[prov.provider_url] = talerPayUri;\n continue;\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n hint: `could not upload policy (http status ${resp.status})`,\n };\n }\n\n if (policyPayUris.length > 0) {\n return {\n ...state,\n backup_state: BackupStates.PoliciesPaying,\n payments: policyPayUris,\n policy_payment_requests: Object.keys(policyPayUriMap).map((x) => {\n return {\n payto: policyPayUriMap[x],\n provider: x,\n };\n }),\n };\n }\n\n logger.info(\"backup finished\");\n\n return {\n ...state,\n core_secret: undefined,\n backup_state: BackupStates.BackupFinished,\n success_details: successDetails,\n payments: undefined,\n };\n}\n\ninterface PolicyDownloadResult {\n recoveryDoc: RecoveryDocument;\n recoveryData: RecoveryInternalData;\n}\n\nasync function downloadPolicyFromProvider(\n state: ReducerStateRecovery,\n providerUrl: string,\n version: number,\n): Promise<PolicyDownloadResult | undefined> {\n logger.info(`trying to download policy from ${providerUrl}`);\n const userAttributes = state.identity_attributes!;\n let pi = state.authentication_providers?.[providerUrl];\n if (!pi || pi.status !== \"ok\") {\n // FIXME: this one blocks!\n logger.info(`fetching provider info for ${providerUrl}`);\n pi = await getProviderInfo(providerUrl);\n }\n logger.info(`new provider status is ${pi.status}`);\n if (pi.status !== \"ok\") {\n return undefined;\n }\n const userId = await userIdentifierDerive(userAttributes, pi.provider_salt);\n const acctKeypair = accountKeypairDerive(userId);\n const reqUrl = new URL(`policy/${acctKeypair.pub}`, providerUrl);\n reqUrl.searchParams.set(\"version\", `${version}`);\n const resp = await fetch(reqUrl.href);\n if (resp.status !== 200) {\n logger.info(\n `Could not download policy from provider ${providerUrl}, status ${resp.status}`,\n );\n return undefined;\n }\n const body = await resp.arrayBuffer();\n const bodyDecrypted = await decryptRecoveryDocument(\n userId,\n encodeCrock(body),\n );\n const rd: RecoveryDocument = await uncompressRecoveryDoc(\n decodeCrock(bodyDecrypted),\n );\n // FIXME: Not clear why we do this, since we always have an explicit version by now.\n let policyVersion = 0;\n try {\n policyVersion = Number(resp.headers.get(\"Anastasis-Version\") ?? \"0\");\n } catch (e) {\n logger.warn(\"Could not read policy version header\");\n policyVersion = version;\n }\n return {\n recoveryDoc: rd,\n recoveryData: {\n provider_url: providerUrl,\n secret_name: rd.secret_name ?? \"<unknown>\",\n version: policyVersion,\n },\n };\n}\n\n/**\n * Download policy based on current user attributes and selected\n * version in the state.\n */\nasync function downloadPolicy(\n state: ReducerStateRecovery,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n logger.info(\"downloading policy\");\n if (!state.selected_version) {\n throw Error(\"invalid state\");\n }\n let policyDownloadResult: PolicyDownloadResult | undefined = undefined;\n // FIXME: Do this concurrently/asynchronously so that one slow provider doesn't block us.\n for (const prov of state.selected_version.providers) {\n const res = await downloadPolicyFromProvider(state, prov.url, prov.version);\n if (res) {\n policyDownloadResult = res;\n break;\n }\n }\n if (!policyDownloadResult) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_POLICY_LOOKUP_FAILED,\n hint: \"No backups found at any provider for your identity information.\",\n };\n }\n\n const challenges: ChallengeInfo[] = [];\n const recoveryDoc = policyDownloadResult.recoveryDoc;\n\n for (const x of recoveryDoc.escrow_methods) {\n challenges.push({\n instructions: x.instructions,\n type: x.escrow_type,\n uuid: x.uuid,\n });\n }\n\n const recoveryInfo: RecoveryInformation = {\n challenges,\n policies: recoveryDoc.policies.map((x) => {\n return x.uuids.map((m) => {\n return {\n uuid: m,\n };\n });\n }),\n };\n return {\n ...state,\n recovery_state: RecoveryStates.ChallengeSelecting,\n recovery_document: policyDownloadResult.recoveryData,\n recovery_information: recoveryInfo,\n verbatim_recovery_document: recoveryDoc,\n };\n}\n\n/**\n * Try to reconstruct the secret from the available shares.\n *\n * Returns the state unmodified if not enough key shares are available yet.\n */\nasync function tryRecoverSecret(\n state: ReducerStateRecovery,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const rd = state.verbatim_recovery_document!;\n for (const p of rd.policies) {\n const keyShares: KeyShare[] = [];\n let missing = false;\n for (const truthUuid of p.uuids) {\n const ks = (state.recovered_key_shares ?? {})[truthUuid];\n if (!ks) {\n missing = true;\n break;\n }\n keyShares.push(ks);\n }\n\n if (missing) {\n continue;\n }\n\n const policyKey = await policyKeyDerive(keyShares, p.salt);\n const coreSecretBytes = await coreSecretRecover({\n encryptedCoreSecret: rd.encrypted_core_secret,\n encryptedMasterKey: p.master_key,\n policyKey,\n });\n\n return {\n ...state,\n recovery_state: RecoveryStates.RecoveryFinished,\n selected_challenge_uuid: undefined,\n core_secret: JSON.parse(bytesToString(decodeCrock(coreSecretBytes))),\n };\n }\n return { ...state };\n}\n\n/**\n * Re-check the status of challenges that are solved asynchronously.\n */\nasync function pollChallenges(\n state: ReducerStateRecovery,\n args: void,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n for (const truthUuid in state.challenge_feedback) {\n if (state.recovery_state === RecoveryStates.RecoveryFinished) {\n break;\n }\n const feedback = state.challenge_feedback[truthUuid];\n const truth = state.verbatim_recovery_document!.escrow_methods.find(\n (x) => x.uuid === truthUuid,\n );\n if (!truth) {\n logger.warn(\n \"truth for challenge feedback entry not found in recovery document\",\n );\n continue;\n }\n if (feedback.state === ChallengeFeedbackStatus.IbanInstructions) {\n const s2 = await requestTruth(state, truth, {\n pin: feedback.answer_code,\n });\n if (s2.reducer_type === \"recovery\") {\n state = s2;\n }\n }\n }\n return state;\n}\n\nasync function getResponseHash(\n truth: EscrowMethod,\n solveRequest: ActionArgsSolveChallengeRequest,\n): Promise<string> {\n let respHash: string;\n switch (truth.escrow_type) {\n case ChallengeType.Question: {\n if (\"answer\" in solveRequest) {\n respHash = await secureAnswerHash(\n solveRequest.answer,\n truth.uuid,\n truth.question_salt,\n );\n } else {\n throw Error(\"unsupported answer request\");\n }\n break;\n }\n case ChallengeType.Email:\n case ChallengeType.Sms:\n case ChallengeType.Post:\n case ChallengeType.Iban:\n case ChallengeType.Totp: {\n if (\"answer\" in solveRequest) {\n const s = solveRequest.answer.trim().replace(/^A-/, \"\");\n let pin: number;\n try {\n pin = Number.parseInt(s);\n } catch (e) {\n throw Error(\"invalid pin format\");\n }\n respHash = await pinAnswerHash(pin);\n } else if (\"pin\" in solveRequest) {\n respHash = await pinAnswerHash(solveRequest.pin);\n } else {\n throw Error(\"unsupported answer request\");\n }\n break;\n }\n default:\n throw Error(`unsupported challenge type \"${truth.escrow_type}\"\"`);\n }\n return respHash;\n}\n\n/**\n * Request a truth, optionally with a challenge solution\n * provided by the user.\n */\nasync function requestTruth(\n state: ReducerStateRecovery,\n truth: EscrowMethod,\n solveRequest: ActionArgsSolveChallengeRequest,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const url = new URL(`/truth/${truth.uuid}/solve`, truth.url);\n\n const hresp = await getResponseHash(truth, solveRequest);\n\n let resp: Response;\n\n try {\n resp = await fetch(url.href, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n truth_decryption_key: truth.truth_key,\n h_response: hresp,\n }),\n });\n } catch (e) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED,\n hint: \"network error\",\n } as ReducerStateError;\n }\n\n logger.info(\n `got POST /truth/.../solve response from ${truth.url}, http status ${resp.status}`,\n );\n\n if (resp.status === HttpStatusCode.Ok) {\n let answerSalt: string | undefined = undefined;\n if (\n solveRequest &&\n truth.escrow_type === \"question\" &&\n \"answer\" in solveRequest\n ) {\n answerSalt = solveRequest.answer;\n }\n\n const userId = await userIdentifierDerive(\n state.identity_attributes,\n truth.provider_salt,\n );\n\n const respBody = new Uint8Array(await resp.arrayBuffer());\n const keyShare = await decryptKeyShare(\n encodeCrock(respBody),\n userId,\n answerSalt,\n );\n\n const recoveredKeyShares = {\n ...(state.recovered_key_shares ?? {}),\n [truth.uuid]: keyShare,\n };\n\n const challengeFeedback: { [x: string]: ChallengeFeedback } = {\n ...state.challenge_feedback,\n [truth.uuid]: {\n state: ChallengeFeedbackStatus.Solved,\n },\n };\n\n const newState: ReducerStateRecovery = {\n ...state,\n recovery_state: RecoveryStates.ChallengeSelecting,\n challenge_feedback: challengeFeedback,\n recovered_key_shares: recoveredKeyShares,\n };\n\n return tryRecoverSecret(newState);\n }\n\n if (resp.status === HttpStatusCode.Forbidden) {\n const challengeFeedback: { [x: string]: ChallengeFeedback } = {\n ...state.challenge_feedback,\n [truth.uuid]: {\n state: ChallengeFeedbackStatus.IncorrectAnswer,\n },\n };\n return {\n ...state,\n challenge_feedback: challengeFeedback,\n };\n }\n\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED,\n hint: \"got unexpected /truth/ response status\",\n http_status: resp.status,\n } as ReducerStateError;\n}\n\nasync function solveChallenge(\n state: ReducerStateRecovery,\n ta: ActionArgsSolveChallengeRequest,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const recDoc: RecoveryDocument = state.verbatim_recovery_document!;\n const truth = recDoc.escrow_methods.find(\n (x) => x.uuid === state.selected_challenge_uuid,\n );\n if (!truth) {\n throw Error(\"truth for challenge not found\");\n }\n\n return requestTruth(state, truth, ta);\n}\n\nasync function recoveryEnterUserAttributes(\n state: ReducerStateRecovery,\n args: ActionArgsEnterUserAttributes,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n // FIXME: validate attributes\n const st: ReducerStateRecovery = {\n ...state,\n recovery_state: RecoveryStates.SecretSelecting,\n identity_attributes: args.identity_attributes,\n };\n return st;\n}\n\nasync function changeVersion(\n state: ReducerStateRecovery,\n args: ActionArgsChangeVersion,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const st: ReducerStateRecovery = {\n ...state,\n selected_version: args,\n };\n return downloadPolicy(st);\n}\n\nasync function selectChallenge(\n state: ReducerStateRecovery,\n ta: ActionArgsSelectChallenge,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const recDoc: RecoveryDocument = state.verbatim_recovery_document!;\n const truth = recDoc.escrow_methods.find((x) => x.uuid === ta.uuid);\n if (!truth) {\n throw \"truth for challenge not found\";\n }\n\n const url = new URL(`/truth/${truth.uuid}/challenge`, truth.url);\n\n const newFeedback = { ...state.challenge_feedback };\n delete newFeedback[truth.uuid];\n\n switch (truth.escrow_type) {\n case ChallengeType.Question:\n case ChallengeType.Totp: {\n return {\n ...state,\n recovery_state: RecoveryStates.ChallengeSolving,\n selected_challenge_uuid: truth.uuid,\n challenge_feedback: newFeedback,\n };\n }\n }\n\n let resp: Response;\n\n try {\n resp = await fetch(url.href, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n truth_decryption_key: truth.truth_key,\n }),\n });\n } catch (e) {\n const feedback: ChallengeFeedback = {\n state: ChallengeFeedbackStatus.ServerFailure,\n http_status: 0,\n };\n return {\n ...state,\n recovery_state: RecoveryStates.ChallengeSelecting,\n selected_challenge_uuid: truth.uuid,\n challenge_feedback: {\n ...state.challenge_feedback,\n [truth.uuid]: feedback,\n },\n };\n }\n\n logger.info(\n `got GET /truth/.../challenge response from ${truth.url}, http status ${resp.status}`,\n );\n\n if (resp.status === HttpStatusCode.Ok) {\n const respBodyJson = await resp.json();\n logger.info(`validating ${j2s(respBodyJson)}`);\n const instr = codecForChallengeInstructionMessage().decode(respBodyJson);\n let feedback: ChallengeFeedback;\n switch (instr.challenge_type) {\n case \"FILE_WRITTEN\": {\n feedback = {\n state: ChallengeFeedbackStatus.CodeInFile,\n display_hint: \"TAN code is in file (for debugging)\",\n filename: instr.filename,\n };\n break;\n }\n case \"IBAN_WIRE\": {\n feedback = {\n state: ChallengeFeedbackStatus.IbanInstructions,\n answer_code: instr.wire_details.answer_code,\n target_business_name: instr.wire_details.business_name,\n challenge_amount: instr.wire_details.challenge_amount,\n target_iban: instr.wire_details.credit_iban,\n wire_transfer_subject: instr.wire_details.wire_transfer_subject,\n };\n break;\n }\n case \"TAN_SENT\": {\n feedback = {\n state: ChallengeFeedbackStatus.CodeSent,\n address_hint: instr.tan_address_hint,\n display_hint: \"Code sent to address\",\n };\n }\n }\n return {\n ...state,\n recovery_state: RecoveryStates.ChallengeSolving,\n selected_challenge_uuid: truth.uuid,\n challenge_feedback: {\n ...state.challenge_feedback,\n [truth.uuid]: feedback,\n },\n };\n }\n\n // FIXME: look at more error codes in response\n\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED,\n hint: `got unexpected /truth/.../challenge response status (${resp.status})`,\n http_status: resp.status,\n } as ReducerStateError;\n}\n\nasync function backupSelectContinent(\n state: ReducerStateBackup,\n args: ActionArgsSelectContinent,\n): Promise<ReducerStateBackup | ReducerStateError> {\n const countries = getCountries(args.continent);\n if (countries.length <= 0) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID,\n hint: \"continent not found\",\n };\n }\n return {\n ...state,\n backup_state: BackupStates.CountrySelecting,\n countries,\n selected_continent: args.continent,\n };\n}\n\nasync function recoverySelectContinent(\n state: ReducerStateRecovery,\n args: ActionArgsSelectContinent,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const countries = getCountries(args.continent);\n return {\n ...state,\n recovery_state: RecoveryStates.CountrySelecting,\n countries,\n selected_continent: args.continent,\n };\n}\n\ninterface TransitionImpl<S, T> {\n argCodec: Codec<T>;\n handler: (s: S, args: T) => Promise<S | ReducerStateError>;\n}\n\ninterface Transition<S> {\n [x: string]: TransitionImpl<S, any>;\n}\n\nfunction transition<S, T>(\n action: string,\n argCodec: Codec<T>,\n handler: (s: S, args: T) => Promise<S | ReducerStateError>,\n): Transition<S> {\n return {\n [action]: {\n argCodec,\n handler,\n },\n };\n}\n\nfunction transitionBackupJump(\n action: string,\n st: BackupStates,\n): Transition<ReducerStateBackup> {\n return {\n [action]: {\n argCodec: codecForAny(),\n handler: async (s, a) => ({ ...s, backup_state: st }),\n },\n };\n}\n\nfunction transitionRecoveryJump(\n action: string,\n st: RecoveryStates,\n): Transition<ReducerStateRecovery> {\n return {\n [action]: {\n argCodec: codecForAny(),\n handler: async (s, a) => ({ ...s, recovery_state: st }),\n },\n };\n}\n\nasync function addProviderBackup(\n state: ReducerStateBackup,\n args: ActionArgsAddProvider,\n): Promise<ReducerStateBackup> {\n const info = await getProviderInfo(args.provider_url);\n return {\n ...state,\n authentication_providers: {\n ...(state.authentication_providers ?? {}),\n [args.provider_url]: info,\n },\n };\n}\n\nasync function deleteProviderBackup(\n state: ReducerStateBackup,\n args: ActionArgsDeleteProvider,\n): Promise<ReducerStateBackup> {\n const authentication_providers = {\n ...(state.authentication_providers ?? {}),\n };\n delete authentication_providers[args.provider_url];\n return {\n ...state,\n authentication_providers,\n };\n}\n\nasync function addProviderRecovery(\n state: ReducerStateRecovery,\n args: ActionArgsAddProvider,\n): Promise<ReducerStateRecovery> {\n const info = await getProviderInfo(args.provider_url);\n return {\n ...state,\n authentication_providers: {\n ...(state.authentication_providers ?? {}),\n [args.provider_url]: info,\n },\n };\n}\n\nasync function deleteProviderRecovery(\n state: ReducerStateRecovery,\n args: ActionArgsDeleteProvider,\n): Promise<ReducerStateRecovery> {\n const authentication_providers = {\n ...(state.authentication_providers ?? {}),\n };\n delete authentication_providers[args.provider_url];\n return {\n ...state,\n authentication_providers,\n };\n}\n\nasync function addAuthentication(\n state: ReducerStateBackup,\n args: ActionArgsAddAuthentication,\n): Promise<ReducerStateBackup> {\n return {\n ...state,\n authentication_methods: [\n ...(state.authentication_methods ?? []),\n args.authentication_method,\n ],\n };\n}\n\nasync function deleteAuthentication(\n state: ReducerStateBackup,\n args: ActionArgsDeleteAuthentication,\n): Promise<ReducerStateBackup> {\n const m = state.authentication_methods ?? [];\n m.splice(args.authentication_method, 1);\n return {\n ...state,\n authentication_methods: m,\n };\n}\n\nasync function deletePolicy(\n state: ReducerStateBackup,\n args: ActionArgsDeletePolicy,\n): Promise<ReducerStateBackup> {\n const policies = [...(state.policies ?? [])];\n policies.splice(args.policy_index, 1);\n return {\n ...state,\n policies,\n };\n}\n\nasync function updatePolicy(\n state: ReducerStateBackup,\n args: ActionArgsUpdatePolicy,\n): Promise<ReducerStateBackup> {\n const policies = [...(state.policies ?? [])];\n policies[args.policy_index] = { methods: args.policy };\n return {\n ...state,\n policies,\n };\n}\n\nasync function addPolicy(\n state: ReducerStateBackup,\n args: ActionArgsAddPolicy,\n): Promise<ReducerStateBackup> {\n return {\n ...state,\n policies: [\n ...(state.policies ?? []),\n {\n methods: args.policy,\n },\n ],\n };\n}\n\nasync function nextFromAuthenticationsEditing(\n state: ReducerStateBackup,\n args: {},\n): Promise<ReducerStateBackup | ReducerStateError> {\n const methods = state.authentication_methods ?? [];\n const providers: ProviderInfo[] = [];\n for (const provUrl of Object.keys(state.authentication_providers ?? {})) {\n const prov = state.authentication_providers![provUrl];\n if (prov.status !== \"ok\") {\n continue;\n }\n const methodCost: Record<string, AmountString> = {};\n for (const meth of prov.methods) {\n methodCost[meth.type] = meth.usage_fee;\n }\n providers.push({\n methodCost,\n url: provUrl,\n });\n }\n const pol = suggestPolicies(methods, providers);\n if (pol.policies.length === 0) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n detail:\n \"Unable to suggest any policies. Check if providers are available and reachable.\",\n };\n }\n return {\n ...state,\n backup_state: BackupStates.PoliciesReviewing,\n ...pol,\n };\n}\n\nasync function updateUploadFees(\n state: ReducerStateBackup,\n): Promise<ReducerStateBackup | ReducerStateError> {\n const expiration = state.expiration;\n if (!expiration) {\n return { ...state };\n }\n logger.info(\"updating upload fees\");\n const feePerCurrency: Record<string, AmountJson> = {};\n const addFee = (x: AmountLike) => {\n x = Amounts.jsonifyAmount(x);\n feePerCurrency[x.currency] = Amounts.add(\n feePerCurrency[x.currency] ?? Amounts.zeroOfAmount(x),\n x,\n ).amount;\n };\n const expirationTime = AbsoluteTime.fromProtocolTimestamp(expiration);\n const years = Duration.toIntegerYears(Duration.getRemaining(expirationTime));\n logger.info(`computing fees for ${years} years`);\n // For now, we compute fees for *all* available providers.\n for (const provUrl in state.authentication_providers ?? {}) {\n const prov = state.authentication_providers![provUrl];\n if (\"annual_fee\" in prov) {\n const annualFee = Amounts.mult(prov.annual_fee, years).amount;\n logger.info(`adding annual fee ${Amounts.stringify(annualFee)}`);\n addFee(annualFee);\n }\n }\n const coveredProvTruth = new Set<string>();\n for (const x of state.policies ?? []) {\n for (const m of x.methods) {\n const prov = state.authentication_providers![\n m.provider\n ] as AuthenticationProviderStatusOk;\n const authMethod = state.authentication_methods![m.authentication_method];\n const key = `${m.authentication_method}@${m.provider}`;\n if (coveredProvTruth.has(key)) {\n continue;\n }\n logger.info(\n `adding cost for auth method ${authMethod.challenge} / \"${authMethod.instructions}\" at ${m.provider}`,\n );\n coveredProvTruth.add(key);\n addFee(prov.truth_upload_fee);\n }\n }\n return {\n ...state,\n upload_fees: Object.values(feePerCurrency).map((x) => ({\n fee: Amounts.stringify(x),\n })),\n };\n}\n\nasync function enterSecret(\n state: ReducerStateBackup,\n args: ActionArgsEnterSecret,\n): Promise<ReducerStateBackup | ReducerStateError> {\n return updateUploadFees({\n ...state,\n expiration: args.expiration,\n core_secret: {\n mime: args.secret.mime ?? \"text/plain\",\n value: args.secret.value,\n filename: args.secret.filename,\n },\n // A new secret invalidates the existing recovery data.\n recovery_data: undefined,\n });\n}\n\nasync function nextFromChallengeSelecting(\n state: ReducerStateRecovery,\n args: void,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n const s2 = await tryRecoverSecret(state);\n if (\n s2.reducer_type === \"recovery\" &&\n s2.recovery_state === RecoveryStates.RecoveryFinished\n ) {\n return s2;\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: \"Not enough challenges solved\",\n };\n}\n\nasync function syncOneProviderRecoveryTransition(\n state: ReducerStateRecovery,\n args: void,\n): Promise<ReducerStateRecovery | ReducerStateError> {\n // FIXME: Should we not add this when we obtain the recovery document?\n const escrowMethods = state.verbatim_recovery_document?.escrow_methods ?? [];\n if (escrowMethods.length === 0) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: \"Can't sync, no escrow methods in recovery doc.\",\n };\n }\n for (const x of escrowMethods) {\n const pi = state.authentication_providers?.[x.url];\n if (pi?.status === \"ok\") {\n logger.info(`provider ${x.url} is synced`);\n continue;\n }\n const newPi = await getProviderInfo(x.url);\n return {\n ...state,\n authentication_providers: {\n ...state.authentication_providers,\n [x.url]: newPi,\n },\n };\n }\n\n for (const [provUrl, pi] of Object.entries(\n state.authentication_providers ?? {},\n )) {\n if (\n pi.status === \"ok\" ||\n pi.status === \"disabled\" ||\n pi.status === \"error\"\n ) {\n continue;\n }\n const newPi = await getProviderInfo(provUrl);\n return {\n ...state,\n authentication_providers: {\n ...state.authentication_providers,\n [provUrl]: newPi,\n },\n };\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED,\n hint: \"all providers are already synced\",\n };\n}\n\nasync function syncOneProviderBackupTransition(\n state: ReducerStateBackup,\n args: void,\n): Promise<ReducerStateBackup | ReducerStateError> {\n for (const [provUrl, pi] of Object.entries(\n state.authentication_providers ?? {},\n )) {\n if (\n pi.status === \"ok\" ||\n pi.status === \"disabled\" ||\n pi.status === \"error\"\n ) {\n continue;\n }\n const newPi = await getProviderInfo(provUrl);\n return {\n ...state,\n authentication_providers: {\n ...state.authentication_providers,\n [provUrl]: newPi,\n },\n };\n }\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED,\n hint: \"all providers are already synced\",\n };\n}\n\nasync function enterSecretName(\n state: ReducerStateBackup,\n args: ActionArgsEnterSecretName,\n): Promise<ReducerStateBackup | ReducerStateError> {\n return {\n ...state,\n secret_name: args.name,\n };\n}\n\nasync function updateSecretExpiration(\n state: ReducerStateBackup,\n args: ActionArgsUpdateExpiration,\n): Promise<ReducerStateBackup | ReducerStateError> {\n return updateUploadFees({\n ...state,\n expiration: args.expiration,\n });\n}\n\nexport function mergeDiscoveryAggregate(\n newPolicies: PolicyMetaInfo[],\n oldAgg: AggregatedPolicyMetaInfo[],\n): AggregatedPolicyMetaInfo[] {\n const aggregatedPolicies: AggregatedPolicyMetaInfo[] = [...oldAgg];\n const polHashToIndex: Record<string, number> = {};\n for (const pol of newPolicies) {\n const oldIndex = polHashToIndex[pol.policy_hash];\n if (oldIndex != null) {\n aggregatedPolicies[oldIndex].providers.push({\n url: pol.provider_url,\n version: pol.version,\n });\n } else {\n aggregatedPolicies.push({\n attribute_mask: pol.attribute_mask,\n policy_hash: pol.policy_hash,\n providers: [\n {\n url: pol.provider_url,\n version: pol.version,\n },\n ],\n secret_name: pol.secret_name,\n });\n polHashToIndex[pol.policy_hash] = aggregatedPolicies.length - 1;\n }\n }\n return aggregatedPolicies;\n}\n\nconst backupTransitions: Record<\n BackupStates,\n Transition<ReducerStateBackup>\n> = {\n [BackupStates.ContinentSelecting]: {\n ...transition(\n \"select_continent\",\n codecForActionArgSelectContinent(),\n backupSelectContinent,\n ),\n },\n [BackupStates.CountrySelecting]: {\n ...transitionBackupJump(\"back\", BackupStates.ContinentSelecting),\n ...transition(\n \"select_country\",\n codecForActionArgSelectCountry(),\n backupSelectCountry,\n ),\n ...transition(\n \"select_continent\",\n codecForActionArgSelectContinent(),\n backupSelectContinent,\n ),\n },\n [BackupStates.UserAttributesCollecting]: {\n ...transitionBackupJump(\"back\", BackupStates.CountrySelecting),\n ...transition(\n \"enter_user_attributes\",\n codecForActionArgsEnterUserAttributes(),\n backupEnterUserAttributes,\n ),\n ...transition(\n \"sync_providers\",\n codecForAny(),\n syncOneProviderBackupTransition,\n ),\n },\n [BackupStates.AuthenticationsEditing]: {\n ...transitionBackupJump(\"back\", BackupStates.UserAttributesCollecting),\n ...transition(\"add_authentication\", codecForAny(), addAuthentication),\n ...transition(\"delete_authentication\", codecForAny(), deleteAuthentication),\n ...transition(\"add_provider\", codecForAny(), addProviderBackup),\n ...transition(\"delete_provider\", codecForAny(), deleteProviderBackup),\n ...transition(\n \"sync_providers\",\n codecForAny(),\n syncOneProviderBackupTransition,\n ),\n ...transition(\"next\", codecForAny(), nextFromAuthenticationsEditing),\n },\n [BackupStates.PoliciesReviewing]: {\n ...transitionBackupJump(\"back\", BackupStates.AuthenticationsEditing),\n ...transitionBackupJump(\"next\", BackupStates.SecretEditing),\n ...transition(\"add_policy\", codecForActionArgsAddPolicy(), addPolicy),\n ...transition(\"delete_policy\", codecForAny(), deletePolicy),\n ...transition(\"update_policy\", codecForAny(), updatePolicy),\n },\n [BackupStates.SecretEditing]: {\n ...transitionBackupJump(\"back\", BackupStates.PoliciesReviewing),\n ...transition(\"next\", codecForAny(), uploadSecret),\n ...transition(\"enter_secret\", codecForAny(), enterSecret),\n ...transition(\n \"update_expiration\",\n codecForActionArgsUpdateExpiration(),\n updateSecretExpiration,\n ),\n ...transition(\"enter_secret_name\", codecForAny(), enterSecretName),\n },\n [BackupStates.PoliciesPaying]: {\n ...transitionBackupJump(\"back\", BackupStates.SecretEditing),\n ...transition(\"pay\", codecForAny(), uploadSecret),\n },\n [BackupStates.TruthsPaying]: {\n ...transitionBackupJump(\"back\", BackupStates.SecretEditing),\n ...transition(\"pay\", codecForAny(), uploadSecret),\n },\n [BackupStates.BackupFinished]: {\n ...transitionBackupJump(\"back\", BackupStates.SecretEditing),\n },\n};\n\nconst recoveryTransitions: Record<\n RecoveryStates,\n Transition<ReducerStateRecovery>\n> = {\n [RecoveryStates.ContinentSelecting]: {\n ...transition(\n \"select_continent\",\n codecForActionArgSelectContinent(),\n recoverySelectContinent,\n ),\n },\n [RecoveryStates.CountrySelecting]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.ContinentSelecting),\n ...transition(\n \"select_country\",\n codecForActionArgSelectCountry(),\n recoverySelectCountry,\n ),\n ...transition(\n \"select_continent\",\n codecForActionArgSelectContinent(),\n recoverySelectContinent,\n ),\n },\n [RecoveryStates.UserAttributesCollecting]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.CountrySelecting),\n ...transition(\n \"enter_user_attributes\",\n codecForActionArgsEnterUserAttributes(),\n recoveryEnterUserAttributes,\n ),\n },\n [RecoveryStates.SecretSelecting]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.UserAttributesCollecting),\n ...transitionRecoveryJump(\"next\", RecoveryStates.ChallengeSelecting),\n ...transition(\"add_provider\", codecForAny(), addProviderRecovery),\n ...transition(\"delete_provider\", codecForAny(), deleteProviderRecovery),\n ...transition(\n \"select_version\",\n codecForActionArgsChangeVersion(),\n changeVersion,\n ),\n },\n [RecoveryStates.ChallengeSelecting]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.SecretSelecting),\n ...transition(\n \"select_challenge\",\n codecForActionArgsSelectChallenge(),\n selectChallenge,\n ),\n ...transition(\"poll\", codecForAny(), pollChallenges),\n ...transition(\"next\", codecForAny(), nextFromChallengeSelecting),\n ...transition(\n \"sync_providers\",\n codecForAny(),\n syncOneProviderRecoveryTransition,\n ),\n },\n [RecoveryStates.ChallengeSolving]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.ChallengeSelecting),\n ...transition(\"solve_challenge\", codecForAny(), solveChallenge),\n },\n [RecoveryStates.ChallengePaying]: {},\n [RecoveryStates.RecoveryFinished]: {\n ...transitionRecoveryJump(\"back\", RecoveryStates.ChallengeSelecting),\n },\n};\n\nexport async function discoverPolicies(\n state: ReducerState,\n cursor?: DiscoveryCursor,\n): Promise<DiscoveryResult> {\n if (state.reducer_type !== \"recovery\") {\n throw Error(\"can only discover providers in recovery state\");\n }\n\n const policies: PolicyMetaInfo[] = [];\n\n const providerUrls = Object.keys(state.authentication_providers || {});\n // FIXME: Do we need to re-contact providers here / check if they're disabled?\n // FIXME: Do this concurrently and take the first. Otherwise, one provider might block for a long time.\n\n for (const providerUrl of providerUrls) {\n const providerInfo = await getProviderInfo(providerUrl);\n if (providerInfo.status !== \"ok\") {\n continue;\n }\n const userId = await userIdentifierDerive(\n state.identity_attributes!,\n providerInfo.provider_salt,\n );\n const acctKeypair = accountKeypairDerive(userId);\n const reqUrl = new URL(`policy/${acctKeypair.pub}/meta`, providerUrl);\n const resp = await fetch(reqUrl.href);\n if (resp.status !== 200) {\n logger.warn(`Could not fetch policy metadate from ${reqUrl.href}`);\n continue;\n }\n const respJson: RecoveryMetaResponse = await resp.json();\n const versions = Object.keys(respJson);\n for (const version of versions) {\n const item = respJson[version];\n if (!item.meta) {\n continue;\n }\n const metaData = await decryptPolicyMetadata(userId, item.meta!);\n policies.push({\n attribute_mask: 0,\n provider_url: providerUrl,\n server_time: item.upload_time,\n version: Number.parseInt(version, 10),\n secret_name: metaData.secret_name,\n policy_hash: metaData.policy_hash,\n });\n }\n }\n return {\n policies,\n cursor: undefined,\n };\n}\n\nexport async function reduceAction(\n state: ReducerState,\n action: string,\n args: any,\n): Promise<ReducerState> {\n let h: TransitionImpl<any, any>;\n let stateName: string;\n if (\"backup_state\" in state && state.backup_state) {\n stateName = state.backup_state;\n h = backupTransitions[state.backup_state][action];\n } else if (\"recovery_state\" in state && state.recovery_state) {\n stateName = state.recovery_state;\n h = recoveryTransitions[state.recovery_state][action];\n } else {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: `Invalid state (needs backup_state or recovery_state)`,\n };\n }\n if (!h) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID,\n hint: `Unsupported action '${action}' in state '${stateName}'`,\n };\n }\n let parsedArgs: any;\n try {\n parsedArgs = h.argCodec.decode(args);\n } catch (e: any) {\n return {\n reducer_type: \"error\",\n code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID,\n hint: \"argument validation failed\",\n detail: e.toString(),\n };\n }\n try {\n return await h.handler(state, parsedArgs);\n } catch (e: any) {\n logger.error(\"action handler failed\");\n logger.error(`${e?.stack ?? e}`);\n if (e instanceof ReducerError) {\n return {\n reducer_type: \"error\",\n ...e.errorJson,\n };\n }\n throw e;\n }\n}\n\n/**\n * Update provider status of providers that we still need to contact.\n *\n * Returns updates as soon as new information about at least one provider\n * is found.\n *\n * Returns an empty object if provider information is complete.\n *\n * FIXME: Also pass a cancellation token.\n */\nexport async function completeProviderStatus(\n providerMap: AuthenticationProviderStatusMap,\n): Promise<AuthenticationProviderStatusMap> {\n const updateTasks: Promise<[string, AuthenticationProviderStatus]>[] = [];\n for (const [provUrl, pi] of Object.entries(providerMap)) {\n switch (pi.status) {\n case \"ok\":\n case \"error\":\n case \"disabled\":\n default:\n continue;\n case \"not-contacted\":\n updateTasks.push(\n (async () => {\n return [provUrl, await getProviderInfo(provUrl)];\n })(),\n );\n }\n }\n\n if (updateTasks.length === 0) {\n return {};\n }\n\n const [firstUrl, firstStatus] = await Promise.race(updateTasks);\n return {\n [firstUrl]: firstStatus,\n };\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 */\nimport { BackupStates, RecoveryStates } from \"@gnu-taler/anastasis-core\";\nimport {\n ComponentChildren,\n Fragment,\n FunctionalComponent,\n h,\n VNode,\n} from \"preact\";\nimport { useCallback, useEffect, useErrorBoundary } from \"preact/hooks\";\nimport { AsyncButton } from \"../../components/AsyncButton.js\";\nimport { Menu } from \"../../components/menu/index.js\";\nimport { Notifications } from \"../../components/Notifications.js\";\nimport {\n AnastasisProvider,\n useAnastasisContext,\n} from \"../../context/anastasis.js\";\nimport {\n AnastasisReducerApi,\n useAnastasisReducer,\n} from \"../../hooks/use-anastasis-reducer.js\";\nimport { AttributeEntryScreen } from \"./AttributeEntryScreen.js\";\nimport { AuthenticationEditorScreen } from \"./AuthenticationEditorScreen.js\";\nimport { BackupFinishedScreen } from \"./BackupFinishedScreen.js\";\nimport { ChallengeOverviewScreen } from \"./ChallengeOverviewScreen.js\";\nimport { ChallengePayingScreen } from \"./ChallengePayingScreen.js\";\nimport { ContinentSelectionScreen } from \"./ContinentSelectionScreen.js\";\nimport { PoliciesPayingScreen } from \"./PoliciesPayingScreen.js\";\nimport { RecoveryFinishedScreen } from \"./RecoveryFinishedScreen.js\";\nimport { ReviewPoliciesScreen } from \"./ReviewPoliciesScreen.js\";\nimport { SecretEditorScreen } from \"./SecretEditorScreen.js\";\nimport { SecretSelectionScreen } from \"./SecretSelectionScreen.js\";\nimport { SolveScreen } from \"./SolveScreen.js\";\nimport { StartScreen } from \"./StartScreen.js\";\nimport { TruthsPayingScreen } from \"./TruthsPayingScreen.js\";\n\nfunction isBackup(reducer: AnastasisReducerApi): boolean {\n return reducer.currentReducerState?.reducer_type === \"backup\";\n}\n\nexport function withProcessLabel(\n reducer: AnastasisReducerApi,\n text: string,\n): string {\n if (isBackup(reducer)) {\n return `Backup: ${text}`;\n }\n return `Recovery: ${text}`;\n}\n\ninterface AnastasisClientFrameProps {\n onNext?(): Promise<void>;\n /**\n * Override for the \"back\" functionality.\n */\n onBack?(): Promise<void>;\n title: string;\n children: ComponentChildren;\n /**\n * Should back/next buttons be provided?\n */\n hideNav?: boolean;\n /**\n * Hide only the \"next\" button.\n */\n hideNext?: string;\n}\n\nfunction ErrorBoundary(props: {\n reducer: AnastasisReducerApi;\n children: ComponentChildren;\n}): VNode {\n const [error, resetError] = useErrorBoundary((error) =>\n console.log(\"ErrorBoundary got error\", error),\n );\n if (error) {\n return (\n <div>\n <button\n onClick={() => {\n props.reducer.reset();\n resetError();\n }}\n >\n Reset\n </button>\n <p>\n Error: <pre>{error.stack}</pre>\n </p>\n </div>\n );\n }\n return <div>{props.children}</div>;\n}\n\nlet currentHistoryId = 0;\n\nexport function AnastasisClientFrame(props: AnastasisClientFrameProps): VNode {\n const reducer = useAnastasisContext();\n\n const doBack = async (): Promise<void> => {\n if (props.onBack) {\n await props.onBack();\n } else {\n if (!reducer) return;\n await reducer.back();\n }\n };\n const doNext = async (fromPopstate?: boolean): Promise<void> => {\n if (!fromPopstate) {\n try {\n const nextId: number =\n (history.state && typeof history.state.id === \"number\"\n ? history.state.id\n : 0) + 1;\n\n currentHistoryId = nextId;\n\n history.pushState({ id: nextId }, \"unused\", `#${nextId}`);\n } catch (e) {\n console.log(\"ERROR doNext \", e);\n }\n }\n\n if (props.onNext) {\n await props.onNext();\n } else {\n if (!reducer) return;\n await reducer.transition(\"next\", {});\n }\n };\n const handleKeyPress = (\n e: h.JSX.TargetedKeyboardEvent<HTMLDivElement>,\n ): void => {\n // console.log(\"Got key press\", e.key);\n // FIXME: By default, \"next\" action should be executed here\n };\n\n const browserOnBackButton = useCallback(async (ev: PopStateEvent) => {\n //check if we are going back or forward\n if (!ev.state || ev.state.id === 0 || ev.state.id < currentHistoryId) {\n await doBack();\n } else {\n await doNext(true);\n }\n\n // reducer\n return false;\n }, []);\n useEffect(() => {\n window.addEventListener(\"popstate\", browserOnBackButton);\n\n return () => {\n window.removeEventListener(\"popstate\", browserOnBackButton);\n };\n }, []);\n // if (!reducer) {\n // return <p>Fatal: Reducer must be in context.</p>;\n // }\n\n return (\n <Fragment>\n <div class=\"home\" onKeyPress={(e) => handleKeyPress(e)}>\n <h1 class=\"title\">{props.title}</h1>\n <ErrorBanner />\n <section class=\"section is-main-section\">\n {props.children}\n {!props.hideNav ? (\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => doBack()}>\n Back\n </button>\n <AsyncButton\n class=\"button is-info\"\n data-tooltip={props.hideNext}\n onClick={() => doNext()}\n disabled={props.hideNext !== undefined}\n >\n Next\n </AsyncButton>\n </div>\n ) : null}\n </section>\n </div>\n </Fragment>\n );\n}\n\nconst AnastasisClient: FunctionalComponent = () => {\n const reducer = useAnastasisReducer();\n return (\n <AnastasisProvider value={reducer}>\n <ErrorBoundary reducer={reducer}>\n <Menu title=\"Anastasis\" />\n <AnastasisClientImpl />\n </ErrorBoundary>\n </AnastasisProvider>\n );\n};\n\nfunction AnastasisClientImpl(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <p>Fatal: Reducer must be in context.</p>;\n }\n const state = reducer.currentReducerState;\n if (!state) {\n return <StartScreen />;\n }\n\n // FIXME: Use switch statements here!\n\n if (\n (state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.ContinentSelecting) ||\n (state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.ContinentSelecting) ||\n (state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.CountrySelecting) ||\n (state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.CountrySelecting)\n ) {\n return <ContinentSelectionScreen />;\n }\n if (\n (state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.UserAttributesCollecting) ||\n (state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.UserAttributesCollecting)\n ) {\n return <AttributeEntryScreen />;\n }\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.AuthenticationsEditing\n ) {\n return <AuthenticationEditorScreen />;\n }\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.PoliciesReviewing\n ) {\n return <ReviewPoliciesScreen />;\n }\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.SecretEditing\n ) {\n return <SecretEditorScreen />;\n }\n\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.BackupFinished\n ) {\n return <BackupFinishedScreen />;\n }\n\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.TruthsPaying\n ) {\n return <TruthsPayingScreen />;\n }\n\n if (\n state.reducer_type === \"backup\" &&\n state.backup_state === BackupStates.PoliciesPaying\n ) {\n return <PoliciesPayingScreen />;\n }\n\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.SecretSelecting\n ) {\n return <SecretSelectionScreen />;\n }\n\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.ChallengeSelecting\n ) {\n return <ChallengeOverviewScreen />;\n }\n\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.ChallengeSolving\n ) {\n return <SolveScreen />;\n }\n\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.RecoveryFinished\n ) {\n return <RecoveryFinishedScreen />;\n }\n if (\n state.reducer_type === \"recovery\" &&\n state.recovery_state === RecoveryStates.ChallengePaying\n ) {\n return <ChallengePayingScreen />;\n }\n console.log(\"unknown state\", reducer.currentReducerState);\n return (\n <AnastasisClientFrame hideNav title=\"Bug\">\n <p>Bug: Unknown state.</p>\n <div class=\"buttons is-right\">\n <button class=\"button\" onClick={() => reducer.reset()}>\n Reset\n </button>\n </div>\n </AnastasisClientFrame>\n );\n}\n\n/**\n * Show a dismissible error banner if there is a current error.\n */\nfunction ErrorBanner(): VNode | null {\n const reducer = useAnastasisContext();\n if (!reducer || !reducer.currentError) return null;\n return (\n <Notifications\n removeNotification={reducer.dismissError}\n notifications={[\n {\n type: \"ERROR\",\n message: `Error code: ${reducer.currentError.code}`,\n description: reducer.currentError.hint,\n },\n ]}\n />\n );\n}\n\nexport default AnastasisClient;\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 { ComponentChildren, h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef } from \"preact/hooks\";\nimport { useAsync } from \"../hooks/async.js\";\n\ntype Props = {\n children: ComponentChildren;\n disabled?: boolean;\n onClick?: () => Promise<void>;\n grabFocus?: boolean;\n [rest: string]: any;\n};\n\nexport function AsyncButton({\n onClick,\n grabFocus,\n disabled,\n children,\n ...rest\n}: Props): VNode {\n const { isLoading, request } = useAsync(onClick);\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n useLayoutEffect(() => {\n if (grabFocus) {\n buttonRef.current?.focus();\n }\n }, [grabFocus]);\n\n // if (isSlow) {\n // return <LoadingModal onCancel={cancel} />;\n // }\n if (isLoading) {\n return <button class=\"button\">Loading...</button>;\n }\n\n return (\n <span data-tooltip={rest[\"data-tooltip\"]} style={{ marginLeft: 5 }}>\n <button {...rest} ref={buttonRef} onClick={request} disabled={disabled}>\n {children}\n </button>\n </span>\n );\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useCallback, useEffect, useRef, useState } from \"preact/hooks\";\n// import { cancelPendingRequest } from \"./backend.js\";\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 useIsMounted() {\n const isMountedRef = useRef(true);\n const isMounted = useCallback(() => isMountedRef.current, []);\n\n useEffect(() => {\n return () => void (isMountedRef.current = false);\n }, []);\n\n return isMounted;\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 const isMounted = useIsMounted();\n\n const request = async (...args: any) => {\n if (!fn) return;\n setLoading(true);\n const handler = setTimeout(() => {\n if (!isMounted()) {\n return;\n }\n setSlow(true);\n }, tooLong);\n\n try {\n const result = await fn(...args);\n if (!isMounted()) {\n // Possibly calling fn(...) resulted in the component being unmounted.\n return;\n }\n setData(result);\n } catch (error) {\n setError(error);\n }\n setLoading(false);\n setSlow(false);\n clearTimeout(handler);\n };\n\n function cancel() {\n // cancelPendingRequest()\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 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 { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { Match } from \"preact-router/match.js\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { NavigationBar } from \"./NavigationBar.js\";\nimport { Sidebar } from \"./SideBar.js\";\n\ninterface MenuProps {\n title: string;\n}\n\nfunction WithTitle({\n title,\n children,\n}: {\n title: string;\n children: ComponentChildren;\n}): VNode {\n useEffect(() => {\n document.title = `${title}`;\n }, [title]);\n return <Fragment>{children}</Fragment>;\n}\n\nexport function Menu({ title }: MenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n return (\n <Match>\n {({ path }: { path: string }) => {\n const titleWithSubtitle = title; // title ? title : (!admin ? getInstanceTitle(path, instance) : getAdminTitle(path, instance))\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 <Sidebar mobile={mobileOpen} />\n </div>\n </WithTitle>\n );\n }}\n </Match>\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 && <div class=\"message-body\">{n.description}</div>}\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=\"has-aside-mobile-expanded\"\n // class={mobileOpen ? \"has-aside-mobile-expanded\" : \"\"}\n onClick={() => setMobileOpen(false)}\n >\n <NavigationBar\n onMobileMenu={() => setMobileOpen(!mobileOpen)}\n title={title}\n />\n {onLogout && <Sidebar mobile={mobileOpen} />}\n </div>\n );\n}\n\nexport interface Notification {\n message: string;\n description?: string | VNode;\n type: MessageType;\n}\n\nexport type ValueOrFunction<T> = T | ((p: T) => T);\nexport type MessageType = \"INFO\" | \"WARN\" | \"ERROR\" | \"SUCCESS\";\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 { h, VNode } from \"preact\";\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 <a\n href=\"mailto:contact@anastasis.lu\"\n style={{ alignSelf: \"center\", padding: \"0.5em\" }}\n >\n Contact us\n </a>\n <a\n href=\"https://bugs.anastasis.lu/\"\n style={{ alignSelf: \"center\", padding: \"0.5em\" }}\n >\n Report a bug\n </a>\n {/* <a\n style={{\n alignSelf: \"center\",\n padding: \"0.5em\",\n }}\n >\n Settings\n </a> */}\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 <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 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 { BackupStates, RecoveryStates } from \"@gnu-taler/anastasis-core\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { useTranslationContext } from \"../../context/translation.js\";\n\ninterface Props {\n mobile?: boolean;\n}\n\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : \"dev\";\nconst GIT_HASH =\n typeof __GIT_HASH__ !== \"undefined\"\n ? __GIT_HASH__.substring(0, 7)\n : undefined;\nconst VERSION_WITH_HASH = GIT_HASH ? `${VERSION}-${GIT_HASH}` : VERSION;\n\nexport function Sidebar({ mobile }: Props): VNode {\n const reducer = useAnastasisContext()!;\n const { i18n } = useTranslationContext();\n\n function saveSession(): void {\n const state = reducer.exportState();\n const link = document.createElement(\"a\");\n link.download = \"anastasis.json\";\n link.href = `data:text/plain,${state}`;\n link.click();\n }\n\n return (\n <aside class=\"aside is-placed-left is-expanded\">\n {/* {mobile && <div class=\"footer\" onClick={(e) => { return e.stopImmediatePropagation() }}>\n <LangSelector />\n </div>} */}\n <div class=\"aside-tools\">\n <div class=\"aside-tools-label\">\n <div>\n <b>Anastasis</b>\n </div>\n <div\n class=\"is-size-7 has-text-right\"\n style={{ lineHeight: 0, marginTop: -10 }}\n >\n Version {VERSION_WITH_HASH}\n </div>\n </div>\n </div>\n <div class=\"menu is-menu-main\">\n {!reducer.currentReducerState && (\n <p class=\"menu-label\">\n <i18n.Translate>Backup or Recorver</i18n.Translate>\n </p>\n )}\n <ul class=\"menu-list\">\n {!reducer.currentReducerState && (\n <li>\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Select one option</i18n.Translate>\n </span>\n </div>\n </li>\n )}\n {reducer.currentReducerState?.reducer_type === \"backup\" ? (\n <Fragment>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.ContinentSelecting ||\n reducer.currentReducerState.backup_state ===\n BackupStates.CountrySelecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Location</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.UserAttributesCollecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Personal information</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.AuthenticationsEditing\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Authorization methods</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.PoliciesReviewing\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Policies</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.SecretEditing\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Secret input</i18n.Translate>\n </span>\n </div>\n </li>\n {/* <li class={reducer.currentReducerState.backup_state === BackupStates.PoliciesPaying ? 'is-active' : ''}>\n <div class=\"ml-4\">\n\n <span class=\"menu-item-label\"><i18n.Translate>Payment (optional)</i18n.Translate></span>\n </div>\n </li> */}\n <li\n class={\n reducer.currentReducerState.backup_state ===\n BackupStates.BackupFinished\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Backup completed</i18n.Translate>\n </span>\n </div>\n </li>\n {/* <li class={reducer.currentReducerState.backup_state === BackupStates.TruthsPaying ? 'is-active' : ''}>\n <div class=\"ml-4\">\n\n <span class=\"menu-item-label\"><i18n.Translate>Truth Paying</i18n.Translate></span>\n </div>\n </li> */}\n {reducer.currentReducerState.backup_state !==\n BackupStates.BackupFinished && (\n <li>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-primary is-right\"\n onClick={saveSession}\n >\n Save backup session\n </button>\n </div>\n </li>\n )}\n {reducer.currentReducerState.backup_state !==\n BackupStates.BackupFinished && (\n <li>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-danger is-right\"\n onClick={() => reducer.reset()}\n >\n Reset session\n </button>\n </div>\n </li>\n )}\n </Fragment>\n ) : (\n reducer.currentReducerState?.reducer_type === \"recovery\" && (\n <Fragment>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.ContinentSelecting ||\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.CountrySelecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Location</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.UserAttributesCollecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Personal information</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.SecretSelecting\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Secret selection</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.ChallengeSelecting ||\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.ChallengeSolving\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Solve Challenges</i18n.Translate>\n </span>\n </div>\n </li>\n <li\n class={\n reducer.currentReducerState.recovery_state ===\n RecoveryStates.RecoveryFinished\n ? \"is-active\"\n : \"\"\n }\n >\n <div class=\"ml-4\">\n <span class=\"menu-item-label\">\n <i18n.Translate>Secret recovered</i18n.Translate>\n </span>\n </div>\n </li>\n {reducer.currentReducerState.recovery_state !==\n RecoveryStates.RecoveryFinished && (\n <li>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-primary is-right\"\n onClick={saveSession}\n >\n Save recovery session\n </button>\n </div>\n </li>\n )}\n {reducer.currentReducerState.recovery_state ===\n RecoveryStates.RecoveryFinished ? (\n <Fragment />\n ) : (\n <li>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-danger is-right\"\n onClick={() => reducer.reset()}\n >\n Reset session\n </button>\n </div>\n </li>\n )}\n </Fragment>\n )\n )}\n\n {/* <li>\n <div class=\"buttons ml-4\">\n <button class=\"button is-info is-right\" >Manage providers</button>\n </div>\n </li> */}\n </ul>\n </div>\n </aside>\n );\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { AnastasisReducerApi } from \"../hooks/use-anastasis-reducer.js\";\n\nconst initial = undefined;\n\nconst Context = createContext<AnastasisReducerApi | undefined>(initial);\n\ninterface Props {\n value: AnastasisReducerApi;\n children: any;\n}\n\nexport const AnastasisProvider = ({ value, children }: Props): VNode => {\n return h(Context.Provider, { value, children });\n};\n\nexport const useAnastasisContext = (): AnastasisReducerApi | undefined =>\n useContext(Context);\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 { h, VNode } from \"preact\";\n\nexport interface Notification {\n message: string;\n description?: string | VNode;\n type: MessageType;\n}\n\nexport type MessageType = \"INFO\" | \"WARN\" | \"ERROR\" | \"SUCCESS\";\n\ninterface Props {\n notifications: Notification[];\n removeNotification?: (n: Notification) => void;\n}\n\nfunction messageStyle(type: MessageType): string {\n switch (type) {\n case \"INFO\":\n return \"message is-info\";\n case \"WARN\":\n return \"message is-warning\";\n case \"ERROR\":\n return \"message is-danger\";\n case \"SUCCESS\":\n return \"message is-success\";\n default:\n return \"message\";\n }\n}\n\nexport function Notifications({\n notifications,\n removeNotification,\n}: Props): VNode {\n return (\n <div class=\"block\">\n {notifications.map((n, i) => (\n <article key={i} class={messageStyle(n.type)}>\n <div class=\"message-header\">\n <p>{n.message}</p>\n {removeNotification && (\n <button\n class=\"delete\"\n onClick={() => removeNotification && removeNotification(n)}\n />\n )}\n </div>\n {n.description && <div class=\"message-body\">{n.description}</div>}\n </article>\n ))}\n </div>\n );\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\n/**\n * Imports.\n */\nimport { TalerErrorCode } from \"@gnu-taler/taler-util\";\nimport {\n AggregatedPolicyMetaInfo,\n BackupStates,\n completeProviderStatus,\n discoverPolicies,\n DiscoveryCursor,\n getBackupStartState,\n getRecoveryStartState,\n mergeDiscoveryAggregate,\n RecoveryStates,\n reduceAction,\n ReducerState,\n} from \"@gnu-taler/anastasis-core\";\nimport { useState } from \"preact/hooks\";\n\nconst reducerBaseUrl = \"http://localhost:5000/\";\nconst remoteReducer = false;\n\ninterface AnastasisState {\n reducerState: ReducerState | undefined;\n currentError: any;\n discoveryState: DiscoveryUiState;\n}\n\nasync function getBackupStartStateRemote(): Promise<ReducerState> {\n let resp: Response;\n\n try {\n resp = await fetch(new URL(\"start-backup\", reducerBaseUrl).href);\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Network request to remote reducer ${reducerBaseUrl} failed`,\n } as any;\n }\n try {\n return await resp.json();\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Could not parse response from reducer`,\n } as any;\n }\n}\n\nasync function getRecoveryStartStateRemote(): Promise<ReducerState> {\n let resp: Response;\n try {\n resp = await fetch(new URL(\"start-recovery\", reducerBaseUrl).href);\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Network request to remote reducer ${reducerBaseUrl} failed`,\n } as any;\n }\n try {\n return await resp.json();\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Could not parse response from reducer`,\n } as any;\n }\n}\n\nasync function reduceStateRemote(\n state: any,\n action: string,\n args: any,\n): Promise<ReducerState> {\n let resp: Response;\n try {\n resp = await fetch(new URL(\"action\", reducerBaseUrl).href, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n state,\n action,\n arguments: args,\n }),\n });\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Network request to remote reducer ${reducerBaseUrl} failed`,\n } as any;\n }\n try {\n return await resp.json();\n } catch (e) {\n return {\n code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED,\n message: `Could not parse response from reducer`,\n } as any;\n }\n}\n\nexport interface ReducerTransactionHandle {\n transactionState: ReducerState;\n transition(action: string, args: any): Promise<ReducerState>;\n}\n\n/**\n * UI-relevant state of the policy discovery process.\n */\nexport interface DiscoveryUiState {\n state: \"none\" | \"active\" | \"finished\";\n\n aggregatedPolicies?: AggregatedPolicyMetaInfo[];\n\n cursor?: DiscoveryCursor;\n}\n\nexport interface AnastasisReducerApi {\n currentReducerState: ReducerState | undefined;\n // FIXME: Explain better!\n currentError: any;\n discoveryState: DiscoveryUiState;\n dismissError: () => void;\n startBackup: () => void;\n startRecover: () => void;\n reset: () => void;\n back: () => Promise<void>;\n transition(action: string, args: any): Promise<void>;\n exportState: () => string;\n importState: (s: string) => void;\n discoverStart(): Promise<void>;\n discoverMore(): Promise<void>;\n /**\n * Run multiple reducer steps in a transaction without\n * affecting the UI-visible transition state in-between.\n */\n runTransaction(\n f: (h: ReducerTransactionHandle) => Promise<void>,\n ): Promise<void>;\n}\n\nfunction storageGet(key: string): string | null {\n if (typeof localStorage === \"object\") {\n return localStorage.getItem(key);\n }\n return null;\n}\n\nfunction storageSet(key: string, value: any): void {\n if (typeof localStorage === \"object\") {\n return localStorage.setItem(key, value);\n }\n}\n\nfunction getStateFromStorage(): any {\n let state: any;\n try {\n const s = storageGet(\"anastasisReducerState\");\n if (s === \"undefined\") {\n state = undefined;\n } else if (s) {\n state = JSON.parse(s);\n }\n } catch (e) {\n console.log(\"ERROR: getStateFromStorage \", e);\n }\n return state ?? undefined;\n}\n\nexport function useAnastasisReducer(): AnastasisReducerApi {\n const [anastasisState, setAnastasisStateInternal] = useState<AnastasisState>(\n () => ({\n reducerState: getStateFromStorage(),\n currentError: undefined,\n discoveryState: {\n state: \"none\",\n },\n }),\n );\n\n const setAnastasisState = (newState: AnastasisState) => {\n try {\n storageSet(\n \"anastasisReducerState\",\n JSON.stringify(newState.reducerState),\n );\n } catch (e) {\n console.log(\"ERROR setAnastasisState\", e);\n }\n setAnastasisStateInternal(newState);\n\n const tryUpdateProviders = () => {\n const reducerState = newState.reducerState;\n if (\n reducerState?.reducer_type !== \"backup\" &&\n reducerState?.reducer_type !== \"recovery\"\n ) {\n return;\n }\n const provMap = reducerState.authentication_providers;\n if (!provMap) {\n return;\n }\n const doUpdate = async () => {\n const updates = await completeProviderStatus(provMap);\n if (Object.keys(updates).length === 0) {\n return;\n }\n const rs2 = reducerState;\n if (rs2.reducer_type !== \"backup\" && rs2.reducer_type !== \"recovery\") {\n return;\n }\n setAnastasisState({\n ...anastasisState,\n reducerState: {\n ...rs2,\n authentication_providers: {\n ...rs2.authentication_providers,\n ...updates,\n },\n },\n });\n };\n doUpdate().catch((e) => console.log(\"ERROR doUpdate\", e));\n };\n\n tryUpdateProviders();\n };\n\n async function doTransition(action: string, args: any): Promise<void> {\n let s: ReducerState;\n if (remoteReducer) {\n s = await reduceStateRemote(anastasisState.reducerState, action, args);\n } else {\n s = await reduceAction(anastasisState.reducerState!, action, args);\n }\n if (s.reducer_type === \"error\") {\n setAnastasisState({ ...anastasisState, currentError: s });\n } else {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: s,\n });\n }\n }\n\n return {\n currentReducerState: anastasisState.reducerState,\n currentError: anastasisState.currentError,\n discoveryState: anastasisState.discoveryState,\n async startBackup() {\n let s: ReducerState;\n if (remoteReducer) {\n s = await getBackupStartStateRemote();\n } else {\n s = await getBackupStartState();\n }\n if (s.reducer_type === \"error\") {\n setAnastasisState({\n ...anastasisState,\n currentError: s,\n });\n } else {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: s,\n });\n }\n },\n exportState() {\n const state = getStateFromStorage();\n return JSON.stringify(state);\n },\n importState(s: string) {\n try {\n const state = JSON.parse(s);\n setAnastasisState({\n reducerState: state,\n currentError: undefined,\n discoveryState: {\n state: \"none\",\n },\n });\n } catch (e) {\n throw new Error(\"could not restore the state\");\n }\n },\n async discoverStart(): Promise<void> {\n const res = await discoverPolicies(this.currentReducerState!, undefined);\n const aggregatedPolicies = mergeDiscoveryAggregate(res.policies, []);\n setAnastasisState({\n ...anastasisState,\n discoveryState: {\n state: \"finished\",\n aggregatedPolicies,\n cursor: res.cursor,\n },\n });\n },\n async discoverMore(): Promise<void> {\n return;\n },\n async startRecover() {\n let s: ReducerState;\n if (remoteReducer) {\n s = await getRecoveryStartStateRemote();\n } else {\n s = await getRecoveryStartState();\n }\n if (s.reducer_type === \"error\") {\n setAnastasisState({\n ...anastasisState,\n currentError: s,\n });\n } else {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: s,\n });\n }\n },\n transition(action: string, args: any) {\n return doTransition(action, args);\n },\n async back() {\n const reducerState = anastasisState.reducerState;\n if (!reducerState) {\n return;\n }\n if (\n (reducerState.reducer_type === \"backup\" &&\n reducerState.backup_state === BackupStates.ContinentSelecting) ||\n (reducerState.reducer_type === \"recovery\" &&\n reducerState.recovery_state === RecoveryStates.ContinentSelecting)\n ) {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: undefined,\n });\n } else {\n await doTransition(\"back\", {});\n }\n },\n dismissError() {\n setAnastasisState({ ...anastasisState, currentError: undefined });\n },\n reset() {\n setAnastasisState({\n ...anastasisState,\n currentError: undefined,\n reducerState: undefined,\n });\n },\n async runTransaction(f) {\n const txHandle = new ReducerTxImpl(anastasisState.reducerState!);\n try {\n await f(txHandle);\n } catch (e) {\n console.log(\"exception during reducer transaction\", e);\n }\n const s = txHandle.transactionState;\n if (s.reducer_type === \"error\") {\n setAnastasisState({\n ...anastasisState,\n currentError: txHandle.transactionState,\n });\n } else {\n setAnastasisState({\n ...anastasisState,\n reducerState: txHandle.transactionState,\n currentError: undefined,\n });\n }\n },\n };\n}\n\nclass ReducerTxImpl implements ReducerTransactionHandle {\n constructor(public transactionState: ReducerState) {}\n async transition(action: string, args: any): Promise<ReducerState> {\n let s: ReducerState;\n if (remoteReducer) {\n s = await reduceStateRemote(this.transactionState, action, args);\n } else {\n s = await reduceAction(this.transactionState, action, args);\n }\n this.transactionState = s;\n // Abort transaction as soon as we transition into an error state.\n if (this.transactionState.reducer_type === \"error\") {\n throw new Error(\"transition resulted in error\");\n }\n return this.transactionState;\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}", "import 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 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}", "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 toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years 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 years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\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;", "import 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 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 (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 (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 (date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function (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 (date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function (date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function (date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function (date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function (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 (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 (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 (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 (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 (date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\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}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport class Setter {\n constructor() {\n _defineProperty(this, \"priority\", void 0);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n validate(_utcDate, _options) {\n return true;\n }\n\n}\nexport class ValueSetter extends Setter {\n constructor(value, validateValue, setValue, priority, subPriority) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n\n set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n\n}\nexport class DateToSystemTimezoneSetter extends Setter {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(this, \"subPriority\", -1);\n }\n\n set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport class Parser {\n constructor() {\n _defineProperty(this, \"incompatibleTokens\", void 0);\n\n _defineProperty(this, \"priority\", void 0);\n\n _defineProperty(this, \"subPriority\", void 0);\n }\n\n run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport class EraParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 140);\n\n _defineProperty(this, \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};", "import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\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 |\nexport class YearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 130);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 130);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport class ISOWeekYearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 130);\n\n _defineProperty(this, \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport class ExtendedYearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 130);\n\n _defineProperty(this, \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport class QuarterParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 120);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport class StandAloneQuarterParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 120);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport class MonthParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(this, \"priority\", 110);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport class StandAloneMonthParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 110);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport class LocalWeekParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 100);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n\n}", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport class ISOWeekParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 100);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport class DateParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"subPriority\", 1);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport class DayOfYearParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"subpriority\", 1);\n\n _defineProperty(this, \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\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 setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, 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 = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport class DayParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport class LocalDayParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport class StandAloneLocalDayParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n }\n\n parse(dateString, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport class ISODayParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 90);\n\n _defineProperty(this, \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n var valueCallback = function (value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport class AMPMParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 80);\n\n _defineProperty(this, \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport class AMPMMidnightParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 80);\n\n _defineProperty(this, \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport class DayPeriodParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 80);\n\n _defineProperty(this, \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n\n set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class Hour1to12Parser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 70);\n\n _defineProperty(this, \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class Hour0to23Parser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 70);\n\n _defineProperty(this, \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class Hour0To11Parser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 70);\n\n _defineProperty(this, \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class Hour1To24Parser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 70);\n\n _defineProperty(this, \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class MinuteParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 60);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport class SecondParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 50);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T']);\n }\n\n parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport class FractionOfSecondParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 30);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T']);\n }\n\n parse(dateString, token) {\n var valueCallback = function (value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport class ISOTimezoneWithZParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 10);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T', 'x']);\n }\n\n parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport class ISOTimezoneParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 10);\n\n _defineProperty(this, \"incompatibleTokens\", ['t', 'T', 'X']);\n }\n\n parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport class TimestampSecondsParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 40);\n\n _defineProperty(this, \"incompatibleTokens\", '*');\n }\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport class TimestampMillisecondsParser extends Parser {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"priority\", 20);\n\n _defineProperty(this, \"incompatibleTokens\", '*');\n }\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n\n}", "import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\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 | | P | |\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 `parse` 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 */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\n};", "import defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/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 { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/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 notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\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 in the format string 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 *\n * Format of the format 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 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\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) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\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 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\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) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\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 | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | 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) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\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) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\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 | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | 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] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | 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) | 10 | 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 * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\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 * In `format` function, they will produce different result:\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 * `parse` will try to match both formatting and stand-alone units interchangably.\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:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. 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` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\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 [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. 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 * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `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 * 7. `D` and `DD` tokens represent days of the year but they are ofthen 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 * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\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 {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\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 {Date} the parsed date\n * @throws {TypeError} 3 arguments required\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} `options.locale` must contain `match` property\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 * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, 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(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\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\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\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 (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _loop = function (_token) {\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(_token)) {\n throwProtectedError(_token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(_token)) {\n throwProtectedError(_token, formatString, dirtyDateString);\n }\n\n var firstCharacter = _token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(_token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(_token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: _token\n });\n var parseResult = parser.run(dateString, _token, locale.match, subFnOptions);\n\n if (!parseResult) {\n token = _token;\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (_token === \"''\") {\n _token = \"'\";\n } else if (firstCharacter === \"'\") {\n _token = cleanEscapedString(_token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(_token) === 0) {\n dateString = dateString.slice(_token.length);\n } else {\n token = _token;\n return {\n v: new Date(NaN)\n };\n }\n }\n\n token = _token;\n };\n\n for (var token of tokens) {\n var _ret = _loop(token);\n\n if (typeof _ret === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n for (var setter of uniquePrioritySetters) {\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addYears from \"../addYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years 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 years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\n\nexport default function subYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addYears(dirtyDate, -amount);\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 */\nimport { UserAttributeSpec, validators } from \"@gnu-taler/anastasis-core\";\nimport { isAfter, parse } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DateInput } from \"../../components/fields/DateInput.js\";\nimport { PhoneNumberInput } from \"../../components/fields/NumberInput.js\";\nimport { TextInput } from \"../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { ConfirmModal } from \"./ConfirmModal.js\";\nimport { AnastasisClientFrame, withProcessLabel } from \"./index.js\";\n\nexport function AttributeEntryScreen(): VNode {\n const reducer = useAnastasisContext();\n const state = reducer?.currentReducerState;\n const currentIdentityAttributes =\n state && \"identity_attributes\" in state\n ? state.identity_attributes || {}\n : {};\n const [attrs, setAttrs] = useState<Record<string, string>>(\n currentIdentityAttributes,\n );\n const isBackup = state?.reducer_type === \"backup\";\n const [askUserIfSure, setAskUserIfSure] = useState(false);\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (\n !reducer.currentReducerState ||\n !(\"required_attributes\" in reducer.currentReducerState)\n ) {\n return <div>invalid state</div>;\n }\n const reqAttr = reducer.currentReducerState.required_attributes || [];\n let hasErrors = false;\n\n const fieldList: VNode[] = reqAttr.map((spec, i: number) => {\n const value = attrs[spec.name];\n const error = checkIfValid(value, spec);\n\n function addAutocomplete(newValue: string): string {\n const ac = spec.autocomplete;\n if (!ac || ac.length <= newValue.length || ac[newValue.length] === \"?\")\n return newValue;\n\n if (!value || newValue.length < value.length) {\n return newValue.slice(0, -1);\n }\n\n return newValue + ac[newValue.length];\n }\n\n hasErrors = hasErrors || error !== undefined;\n return (\n <AttributeEntryField\n key={i}\n isFirst={i == 0}\n setValue={(v: string) =>\n setAttrs({ ...attrs, [spec.name]: addAutocomplete(v) })\n }\n spec={spec}\n errorMessage={error}\n onConfirm={() => {\n if (!hasErrors) {\n setAskUserIfSure(true);\n }\n }}\n value={value}\n />\n );\n });\n\n const doConfirm = async () => {\n await reducer.transition(\"enter_user_attributes\", {\n identity_attributes: {\n application_id: \"anastasis-standalone\",\n ...attrs,\n },\n });\n };\n\n function saveAsPDF(): void {\n const printWindow = window.open(\"\", \"\", \"height=400,width=800\");\n const divContents = document.getElementById(\"printThis\");\n\n if (!printWindow || !divContents) return;\n printWindow.document.write(\n `<html><head><link rel=\"stylesheet\" href=\"index.css\" /><title>Anastasis Recovery Document</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 return (\n <AnastasisClientFrame\n title={withProcessLabel(reducer, \"Who are you?\")}\n hideNext={hasErrors ? \"Complete the form.\" : undefined}\n onNext={async () => (isBackup ? setAskUserIfSure(true) : doConfirm())}\n >\n {askUserIfSure ? (\n <ConfirmModal\n active\n onCancel={() => setAskUserIfSure(false)}\n description=\"The values in the form must be correct\"\n label=\"I am sure\"\n cancelLabel=\"Wait, I want to check\"\n onConfirm={() => doConfirm().then(() => setAskUserIfSure(false))}\n >\n You personal information is used to define the location where your\n secret will be safely stored. If you forget what you have entered or\n if there is a misspell you will be unable to recover your secret.\n <p>\n {/* TODO: make this actually work reliably cross-browser lol (opens about:blank for me) */}\n <a onClick={saveAsPDF}>Save the personal information as PDF</a>\n </p>\n </ConfirmModal>\n ) : undefined}\n\n <div class=\"columns\" style={{ maxWidth: \"unset\" }}>\n <div class=\"column\" id=\"printThis\">\n {fieldList}\n </div>\n <div class=\"column\">\n <p>This personal information will help to locate your secret.</p>\n <h1 class=\"title\">This stays private</h1>\n <p>The information you have entered here:</p>\n <ul>\n <li>\n <span class=\"icon is-right\">\n <i class=\"mdi mdi-circle-small\" />\n </span>\n Will be hashed, and therefore unreadable\n </li>\n <li>\n <span class=\"icon is-right\">\n <i class=\"mdi mdi-circle-small\" />\n </span>\n The non-hashed version is not shared\n </li>\n </ul>\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\ninterface AttributeEntryFieldProps {\n isFirst: boolean;\n value: string;\n setValue: (newValue: string) => void;\n spec: UserAttributeSpec;\n errorMessage: string | undefined;\n onConfirm: () => void;\n}\nconst possibleBirthdayYear: Array<number> = [];\nfor (let i = 0; i < 100; i++) {\n possibleBirthdayYear.push(2020 - i);\n}\nfunction AttributeEntryField(props: AttributeEntryFieldProps): VNode {\n return (\n <div style={{ marginTop: 16 }}>\n {props.spec.type === \"date\" && (\n <DateInput\n grabFocus={props.isFirst}\n label={props.spec.label}\n years={possibleBirthdayYear}\n onConfirm={props.onConfirm}\n error={props.errorMessage}\n bind={[props.value, props.setValue]}\n />\n )}\n {props.spec.type === \"number\" && (\n <PhoneNumberInput\n grabFocus={props.isFirst}\n label={props.spec.label}\n onConfirm={props.onConfirm}\n error={props.errorMessage}\n bind={[props.value, props.setValue]}\n />\n )}\n {props.spec.type === \"string\" && (\n <TextInput\n grabFocus={props.isFirst}\n label={props.spec.label}\n onConfirm={props.onConfirm}\n error={props.errorMessage}\n bind={[props.value, props.setValue]}\n />\n )}\n {props.spec.type === \"string\" && (\n <div>\n This field is case-sensitive. You must enter exactly the same value\n during recovery.\n </div>\n )}\n {props.spec.name === \"full_name\" && (\n <div>\n If possible, use &quot;LASTNAME, Firstname(s)&quot; without\n abbreviations.\n </div>\n )}\n <div class=\"block\">\n This stays private\n <span class=\"icon is-right\">\n <i class=\"mdi mdi-eye-off\" />\n </span>\n </div>\n </div>\n );\n}\nconst YEAR_REGEX = /^[0-9]+-[0-9]+-[0-9]+$/;\n\nfunction checkIfValid(\n value: string,\n spec: UserAttributeSpec,\n): string | undefined {\n const pattern = spec[\"validation-regex\"];\n if (pattern) {\n const re = new RegExp(pattern);\n if (!re.test(value)) return \"The value is invalid\";\n }\n const logic = spec[\"validation-logic\"];\n if (logic) {\n const func = (validators as any)[logic];\n if (func && typeof func === \"function\" && !func(value))\n return \"Please check the value\";\n }\n const optional = spec.optional;\n if (!optional && !value) {\n return \"This value is required\";\n }\n if (\"date\" === spec.type) {\n if (!YEAR_REGEX.test(value)) {\n return \"The date doesn't follow the format\";\n }\n\n try {\n const v = parse(value, \"yyyy-MM-dd\", new Date());\n if (Number.isNaN(v.getTime())) {\n return \"Some numeric values seems out of range for a date\";\n }\n if (\"birthdate\" === spec.name && isAfter(v, new Date())) {\n return \"A birthdate cannot be in the future\";\n }\n } catch (e) {\n return \"Could not parse the date\";\n }\n }\n return undefined;\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 */\nimport { format, subYears } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\nimport { DatePicker } from \"../picker/DatePicker.js\";\n\nexport interface DateInputProps {\n label: string;\n grabFocus?: boolean;\n tooltip?: string;\n error?: string;\n years?: Array<number>;\n onConfirm?: () => void;\n bind: [string, (x: string) => void];\n}\n\nexport function DateInput(props: DateInputProps): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (props.grabFocus) {\n inputRef.current?.focus();\n }\n }, [props.grabFocus]);\n const [opened, setOpened] = useState(false);\n\n const value = props.bind[0] || \"\";\n const [dirty, setDirty] = useState(false);\n const showError = dirty && props.error;\n\n const calendar = subYears(new Date(), 30);\n\n return (\n <div class=\"field\">\n <label class=\"label\">\n {props.label}\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control\">\n <div class=\"field has-addons\">\n <p class=\"control\">\n <input\n type=\"text\"\n class={showError ? \"input is-danger\" : \"input\"}\n value={value}\n onKeyPress={(e) => {\n if (e.key === \"Enter\" && props.onConfirm) {\n props.onConfirm();\n }\n }}\n onInput={(e) => {\n const text = e.currentTarget.value;\n setDirty(true);\n props.bind[1](text);\n }}\n ref={inputRef}\n />\n </p>\n <p class=\"control\">\n <a\n class=\"button\"\n onClick={() => {\n setOpened(true);\n }}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-calendar\" />\n </span>\n </a>\n </p>\n </div>\n </div>\n <p class=\"help\">Using the format yyyy-mm-dd</p>\n {showError && <p class=\"help is-danger\">{props.error}</p>}\n <DatePicker\n opened={opened}\n initialDate={calendar}\n years={props.years}\n closeFunction={() => setOpened(false)}\n dateReceiver={(d) => {\n setDirty(true);\n const v = format(d, \"yyyy-MM-dd\");\n props.bind[1](v);\n }}\n />\n </div>\n );\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\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 initialDate?: Date;\n years?: Array<number>;\n opened?: boolean;\n}\ninterface State {\n displayedMonth: number;\n displayedYear: number;\n selectYearMode: boolean;\n currentDate: Date;\n}\nconst now = new Date();\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 yearArr: number[] = [];\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(props: any) {\n super(props);\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 const initial = props.initialDate || now;\n\n this.state = {\n currentDate: initial,\n displayedMonth: initial.getMonth(),\n displayedYear: initial.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 {(this.props.years || 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\nfor (let i = 2010; i <= now.getFullYear() + 10; i++) {\n yearArr.push(i);\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 */\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\n\nexport interface TextInputProps {\n label: string;\n grabFocus?: boolean;\n error?: string;\n placeholder?: string;\n tooltip?: string;\n onConfirm?: () => void;\n bind: [string, (x: string) => void];\n}\n\nexport function PhoneNumberInput(props: TextInputProps): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (props.grabFocus) {\n inputRef.current?.focus();\n }\n }, [props.grabFocus]);\n const value = props.bind[0];\n const [dirty, setDirty] = useState(false);\n const showError = dirty && props.error;\n return (\n <div class=\"field\">\n <label class=\"label\">\n {props.label}\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control has-icons-right\">\n <input\n value={value}\n type=\"tel\"\n placeholder={props.placeholder}\n class={showError ? \"input is-danger\" : \"input\"}\n onKeyPress={(e) => {\n if (e.key === \"Enter\" && props.onConfirm) {\n props.onConfirm();\n }\n }}\n onInput={(e) => {\n setDirty(true);\n props.bind[1]((e.target as HTMLInputElement).value);\n }}\n ref={inputRef}\n style={{ display: \"block\" }}\n />\n </div>\n {showError && <p class=\"help is-danger\">{props.error}</p>}\n </div>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\n\nexport interface TextInputProps {\n inputType?: \"text\" | \"number\" | \"multiline\" | \"password\";\n label: string;\n grabFocus?: boolean;\n disabled?: boolean;\n error?: string;\n placeholder?: string;\n tooltip?: string;\n onConfirm?: () => void;\n bind: [string, (x: string) => void];\n}\n\nconst TextInputType = function ({ inputType, grabFocus, ...rest }: any): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (grabFocus) {\n inputRef.current?.focus();\n }\n }, [grabFocus]);\n\n return inputType === \"multiline\" ? (\n <textarea {...rest} rows={5} ref={inputRef} style={{ height: \"unset\" }} />\n ) : (\n <input {...rest} type={inputType} ref={inputRef} />\n );\n};\n\nexport function TextInput(props: TextInputProps): VNode {\n const value = props.bind[0];\n const [dirty, setDirty] = useState(false);\n const showError = dirty && props.error;\n return (\n <div class=\"field\">\n <label class=\"label\">\n {props.label}\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control has-icons-right\">\n <TextInputType\n inputType={props.inputType}\n value={value}\n grabFocus={props.grabFocus}\n disabled={props.disabled}\n placeholder={props.placeholder}\n class={showError ? \"input is-danger\" : \"input\"}\n onKeyPress={(e: any) => {\n if (e.key === \"Enter\" && props.onConfirm) {\n props.onConfirm();\n }\n }}\n onInput={(e: any) => {\n setDirty(true);\n props.bind[1]((e.target as HTMLInputElement).value);\n }}\n style={{ display: \"block\" }}\n />\n </div>\n {showError && <p class=\"help is-danger\">{props.error}</p>}\n </div>\n );\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 */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../components/AsyncButton.js\";\n\nexport interface ConfirmModelProps {\n active?: boolean;\n description?: string;\n onCancel?: () => void;\n onConfirm?: () => Promise<void>;\n label?: string;\n cancelLabel?: 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 cancelLabel = \"Dismiss\",\n}: ConfirmModelProps): VNode {\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 <button class=\"button\" onClick={onCancel}>\n {cancelLabel}\n </button>\n <div\n class=\"buttons is-right\"\n style={{ width: \"100%\" }}\n onKeyDown={(e) => {\n if (e.key === \"Escape\" && onCancel) onCancel();\n }}\n >\n <AsyncButton\n grabFocus\n class={danger ? \"button is-danger \" : \"button is-info \"}\n disabled={disabled}\n onClick={onConfirm}\n >\n {label}\n </AsyncButton>\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 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 */\nimport { AuthMethod, ReducerStateBackup } from \"@gnu-taler/anastasis-core\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport AddingProviderScreen from \"./AddingProviderScreen/index.js\";\nimport {\n authMethods,\n AuthMethodSetupProps,\n AuthMethodWithRemove,\n isKnownAuthMethods,\n KnownAuthMethods,\n} from \"./authMethod/index.js\";\nimport { ConfirmModal } from \"./ConfirmModal.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nconst getKeys = Object.keys as <T extends object>(obj: T) => Array<keyof T>;\n\nexport function AuthenticationEditorScreen(): VNode {\n const [noProvidersAck, setNoProvidersAck] = useState(false);\n const [selectedMethod, setSelectedMethod] = useState<\n KnownAuthMethods | undefined\n >(undefined);\n const [tooFewAuths, setTooFewAuths] = useState(false);\n const [manageProvider, setManageProvider] = useState<string | undefined>(\n undefined,\n );\n\n // const [addingProvider, setAddingProvider] = useState<string | undefined>(undefined)\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n const configuredAuthMethods: AuthMethod[] =\n reducer.currentReducerState.authentication_methods ?? [];\n\n function removeByIndex(index: number): void {\n if (reducer)\n reducer.transition(\"delete_authentication\", {\n authentication_method: index,\n });\n }\n\n const camByType: { [s: string]: AuthMethodWithRemove[] } = {};\n for (let index = 0; index < configuredAuthMethods.length; index++) {\n const cam = {\n ...configuredAuthMethods[index],\n remove: () => removeByIndex(index),\n };\n const prevValue = camByType[cam.type] || [];\n prevValue.push(cam);\n camByType[cam.type] = prevValue;\n }\n\n const providers = reducer.currentReducerState.authentication_providers!;\n\n const authAvailableSet = new Set<string>();\n for (const provKey of Object.keys(providers)) {\n const p = providers[provKey];\n if (p.status === \"ok\") {\n for (const meth of p.methods) {\n authAvailableSet.add(meth.type);\n }\n }\n }\n\n if (manageProvider !== undefined) {\n return (\n <AddingProviderScreen\n onCancel={async () => setManageProvider(undefined)}\n providerType={\n isKnownAuthMethods(manageProvider) ? manageProvider : undefined\n }\n />\n );\n }\n\n if (selectedMethod) {\n const cancel = (): void => setSelectedMethod(undefined);\n const addMethod = (args: any): void => {\n reducer.transition(\"add_authentication\", args);\n setSelectedMethod(undefined);\n };\n\n const AuthSetup =\n authMethods[selectedMethod].setup ?? AuthMethodNotImplemented;\n return (\n <Fragment>\n <AuthSetup\n cancel={cancel}\n configured={camByType[selectedMethod] || []}\n addAuthMethod={addMethod}\n method={selectedMethod}\n />\n\n {!authAvailableSet.has(selectedMethod) && (\n <ConfirmModal\n active\n onCancel={cancel}\n description=\"No providers found\"\n label=\"Add a provider manually\"\n onConfirm={async () => {\n setManageProvider(selectedMethod);\n }}\n >\n <p>\n We have found no Anastasis providers that support this\n authentication method. You can add a provider manually. To add a\n provider you must know the provider URL (e.g.\n https://provider.com)\n </p>\n <p>\n <a>Learn more about Anastasis providers</a>\n </p>\n </ConfirmModal>\n )}\n </Fragment>\n );\n }\n\n function MethodButton(props: { method: KnownAuthMethods }): VNode {\n if (authMethods[props.method].skip) return <div />;\n\n return (\n <div class=\"block\">\n <button\n style={{ justifyContent: \"space-between\" }}\n class=\"button is-fullwidth\"\n onClick={() => {\n setSelectedMethod(props.method);\n }}\n >\n <div style={{ display: \"flex\" }}>\n <span class=\"icon \">{authMethods[props.method].icon}</span>\n {authAvailableSet.has(props.method) ? (\n <span>Add a {authMethods[props.method].label} challenge</span>\n ) : (\n <span>Add a {authMethods[props.method].label} provider</span>\n )}\n </div>\n {!authAvailableSet.has(props.method) && (\n <span class=\"icon has-text-danger\">\n <i class=\"mdi mdi-exclamation-thick\" />\n </span>\n )}\n {camByType[props.method] && (\n <span class=\"tag is-info\">{camByType[props.method].length}</span>\n )}\n </button>\n </div>\n );\n }\n const errors =\n configuredAuthMethods.length < 2\n ? \"There is not enough authentication methods.\"\n : undefined;\n const handleNext = async () => {\n const st = reducer.currentReducerState as ReducerStateBackup;\n if ((st.authentication_methods ?? []).length <= 2) {\n setTooFewAuths(true);\n } else {\n await reducer.transition(\"next\", {});\n }\n };\n return (\n <AnastasisClientFrame\n title=\"Backup: Configure Authentication Methods\"\n hideNext={errors}\n onNext={handleNext}\n >\n <div class=\"columns\">\n <div class=\"column\">\n <div>\n {getKeys(authMethods).map((method) => (\n <MethodButton key={method} method={method} />\n ))}\n </div>\n {tooFewAuths ? (\n <ConfirmModal\n active={tooFewAuths}\n onCancel={() => setTooFewAuths(false)}\n description=\"Too few auth methods configured\"\n label=\"Proceed anyway\"\n onConfirm={() => reducer.transition(\"next\", {})}\n >\n You have selected fewer than 3 authentication methods. We\n recommend that you add at least 3.\n </ConfirmModal>\n ) : null}\n {authAvailableSet.size === 0 && (\n <ConfirmModal\n active={!noProvidersAck}\n onCancel={() => setNoProvidersAck(true)}\n description=\"No providers found\"\n label=\"Add a provider manually\"\n onConfirm={async () => {\n setManageProvider(\"\");\n }}\n >\n <p>\n We have found no Anastasis providers for your chosen country /\n currency. You can add a providers manually. To add a provider\n you must know the provider URL (e.g. https://provider.com)\n </p>\n <p>\n <a>Learn more about Anastasis providers</a>\n </p>\n </ConfirmModal>\n )}\n </div>\n <div class=\"column\">\n <p class=\"block\">\n When recovering your secret data, you will be asked to verify your\n identity via the methods you configure here. The list of\n authentication method is defined by the backup provider list.\n </p>\n <p class=\"block\">\n <button\n class=\"button is-info\"\n onClick={() => setManageProvider(\"\")}\n >\n Manage backup providers\n </button>\n </p>\n {authAvailableSet.size > 0 && (\n <p class=\"block\">\n We couldn't find provider for some of the authentication\n methods.\n </p>\n )}\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\nfunction AuthMethodNotImplemented(props: AuthMethodSetupProps): VNode {\n return (\n <AnastasisClientFrame hideNav title={`Add ${props.method} authentication`}>\n <p>This auth method is not implemented yet, please choose another one.</p>\n <button onClick={() => props.cancel()}>Cancel</button>\n </AnastasisClientFrame>\n );\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 { h, VNode } from \"preact\";\n\nexport default function InvalidState(): VNode {\n return <div>invalid state</div>;\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 { h, VNode } from \"preact\";\n\nexport default function NoReducer(): VNode {\n return <div>no reducer</div>;\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 */\nimport {\n AuthenticationProviderStatusError,\n AuthenticationProviderStatusOk,\n BackupStates,\n RecoveryStates,\n ReducerState,\n ReducerStateRecovery,\n} from \"@gnu-taler/anastasis-core\";\nimport { VNode } from \"preact\";\n\nconst noop = async (): Promise<void> => {\n return;\n};\n\nconst base = {\n continents: [\n {\n name: \"Europe\",\n },\n {\n name: \"India\",\n },\n {\n name: \"Asia\",\n },\n {\n name: \"North America\",\n },\n {\n name: \"Testcontinent\",\n },\n ],\n countries: [\n {\n code: \"xx\",\n name: \"Testland\",\n continent: \"Testcontinent\",\n continent_i18n: {\n de_DE: \"Testkontinent\",\n },\n name_i18n: {\n de_DE: \"Testlandt\",\n de_CH: \"Testlandi\",\n fr_FR: \"Testpais\",\n en_UK: \"Testland\",\n },\n currency: \"TESTKUDOS\",\n call_code: \"+00\",\n },\n {\n code: \"xy\",\n name: \"Demoland\",\n continent: \"Testcontinent\",\n continent_i18n: {\n de_DE: \"Testkontinent\",\n },\n name_i18n: {\n de_DE: \"Demolandt\",\n de_CH: \"Demolandi\",\n fr_FR: \"Demopais\",\n en_UK: \"Demoland\",\n },\n currency: \"KUDOS\",\n call_code: \"+01\",\n },\n ],\n authentication_providers: {\n \"http://localhost:8086/\": {\n status: \"ok\",\n http_status: 200,\n annual_fee: \"COL:0\",\n business_name: \"Anastasis Local\",\n currency: \"COL\",\n liability_limit: \"COL:10\",\n methods: [\n {\n type: \"question\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"sms\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"email\",\n usage_fee: \"COL:0\",\n },\n ],\n provider_salt: \"WBMDD76BR1E90YQ5AHBMKPH7GW\",\n storage_limit_in_megabytes: 16,\n truth_upload_fee: \"COL:0\",\n } as AuthenticationProviderStatusOk,\n \"https://kudos.demo.anastasis.lu/\": {\n status: \"ok\",\n http_status: 200,\n annual_fee: \"COL:0\",\n business_name: \"Anastasis Kudo\",\n currency: \"COL\",\n liability_limit: \"COL:10\",\n methods: [\n {\n type: \"question\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"email\",\n usage_fee: \"COL:0\",\n },\n ],\n provider_salt: \"WBMDD76BR1E90YQ5AHBMKPH7GW\",\n storage_limit_in_megabytes: 16,\n truth_upload_fee: \"COL:0\",\n } as AuthenticationProviderStatusOk,\n \"https://anastasis.demo.taler.net/\": {\n status: \"ok\",\n http_status: 200,\n annual_fee: \"COL:0\",\n business_name: \"Anastasis Demo\",\n currency: \"COL\",\n liability_limit: \"COL:10\",\n methods: [\n {\n type: \"question\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"sms\",\n usage_fee: \"COL:0\",\n },\n {\n type: \"totp\",\n usage_fee: \"COL:0\",\n },\n ],\n provider_salt: \"WBMDD76BR1E90YQ5AHBMKPH7GW\",\n storage_limit_in_megabytes: 16,\n truth_upload_fee: \"COL:0\",\n } as AuthenticationProviderStatusOk,\n\n \"http://localhost:8087/\": {\n status: \"error\",\n code: 8414,\n hint: \"request to provider failed\",\n } as AuthenticationProviderStatusError,\n \"http://localhost:8088/\": {\n status: \"error\",\n code: 8414,\n hint: \"request to provider failed\",\n } as AuthenticationProviderStatusError,\n \"http://localhost:8089/\": {\n status: \"error\",\n code: 8414,\n hint: \"request to provider failed\",\n } as AuthenticationProviderStatusError,\n },\n} as Partial<ReducerState>;\n\nexport const reducerStatesExample = {\n initial: undefined,\n recoverySelectCountry: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.CountrySelecting,\n } as ReducerState,\n recoverySelectContinent: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ContinentSelecting,\n } as ReducerState,\n secretSelection: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.SecretSelecting,\n } as ReducerState,\n recoveryFinished: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.RecoveryFinished,\n } as ReducerState,\n challengeSelecting: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ChallengeSelecting,\n } as ReducerState,\n challengeSolving: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ChallengeSolving,\n } as ReducerStateRecovery,\n challengePaying: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.ChallengePaying,\n } as ReducerState,\n recoveryAttributeEditing: {\n ...base,\n reducer_type: \"recovery\",\n recovery_state: RecoveryStates.UserAttributesCollecting,\n } as ReducerState,\n backupSelectCountry: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.CountrySelecting,\n } as ReducerState,\n backupSelectContinent: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.ContinentSelecting,\n } as ReducerState,\n secretEdition: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.SecretEditing,\n } as ReducerState,\n policyReview: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.PoliciesReviewing,\n } as ReducerState,\n policyPay: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.PoliciesPaying,\n } as ReducerState,\n backupFinished: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.BackupFinished,\n } as ReducerState,\n authEditing: {\n ...base,\n backup_state: BackupStates.AuthenticationsEditing,\n reducer_type: \"backup\",\n } as ReducerState,\n backupAttributeEditing: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.UserAttributesCollecting,\n } as ReducerState,\n truthsPaying: {\n ...base,\n reducer_type: \"backup\",\n backup_state: BackupStates.TruthsPaying,\n } as ReducerState,\n};\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 function compose<SType extends { status: string }, PType>(\n name: string,\n hook: (p: PType) => SType,\n vs: StateViewMap<SType>,\n): (p: PType) => VNode {\n const Component = (p: PType): VNode => {\n const state = hook(p);\n const s = state.status as unknown as SType[\"status\"];\n const c = vs[s] as unknown as StateFunc<SType>;\n return c(state);\n };\n // Component.name = `${name}`;\n return Component;\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 */\nimport { AuthMethod } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport postalIcon from \"../../../assets/icons/auth_method/postal.svg\";\nimport questionIcon from \"../../../assets/icons/auth_method/question.svg\";\nimport smsIcon from \"../../../assets/icons/auth_method/sms.svg\";\nimport { AuthMethodEmailSetup as EmailSetup } from \"./AuthMethodEmailSetup.js\";\nimport { AuthMethodEmailSolve as EmailSolve } from \"./AuthMethodEmailSolve.js\";\nimport { AuthMethodIbanSetup as IbanSetup } from \"./AuthMethodIbanSetup.js\";\nimport { AuthMethodIbanSolve as IbanSolve } from \"./AuthMethodIbanSolve.js\";\nimport { AuthMethodPostSetup as PostalSetup } from \"./AuthMethodPostSetup.js\";\nimport { AuthMethodPostSolve as PostalSolve } from \"./AuthMethodPostSolve.js\";\nimport { AuthMethodQuestionSetup as QuestionSetup } from \"./AuthMethodQuestionSetup.js\";\nimport { AuthMethodQuestionSolve as QuestionSolve } from \"./AuthMethodQuestionSolve.js\";\nimport { AuthMethodSmsSetup as SmsSetup } from \"./AuthMethodSmsSetup.js\";\nimport { AuthMethodSmsSolve as SmsSolve } from \"./AuthMethodSmsSolve.js\";\nimport { AuthMethodTotpSetup as TotpSetup } from \"./AuthMethodTotpSetup.js\";\nimport { AuthMethodTotpSolve as TotpSolve } from \"./AuthMethodTotpSolve.js\";\n\nexport type AuthMethodWithRemove = AuthMethod & { remove: () => void };\n\nexport interface AuthMethodSetupProps {\n method: string;\n addAuthMethod: (x: any) => void;\n configured: AuthMethodWithRemove[];\n cancel: () => void;\n}\n\nexport interface AuthMethodSolveProps {\n id: string;\n}\n\ninterface AuthMethodConfiguration {\n icon: VNode;\n label: string;\n setup: (props: AuthMethodSetupProps) => VNode;\n solve: (props: AuthMethodSolveProps) => VNode;\n skip?: boolean;\n}\n\nconst ALL_METHODS = [\n \"sms\",\n \"email\",\n \"post\",\n \"question\",\n \"totp\",\n \"iban\",\n] as const;\nexport type KnownAuthMethods = typeof ALL_METHODS[number];\nexport function isKnownAuthMethods(value: string): value is KnownAuthMethods {\n return ALL_METHODS.includes(value as KnownAuthMethods);\n}\n\ntype KnowMethodConfig = {\n [name in KnownAuthMethods]: AuthMethodConfiguration;\n};\n\nexport const authMethods: KnowMethodConfig = {\n question: {\n icon: <img src={questionIcon} />,\n label: \"Question\",\n setup: QuestionSetup,\n solve: QuestionSolve,\n },\n sms: {\n icon: <img src={smsIcon} />,\n label: \"SMS\",\n setup: SmsSetup,\n solve: SmsSolve,\n },\n email: {\n icon: <i class=\"mdi mdi-email\" />,\n label: \"Email\",\n setup: EmailSetup,\n solve: EmailSolve,\n },\n iban: {\n icon: <i class=\"mdi mdi-bank\" />,\n label: \"IBAN\",\n setup: IbanSetup,\n solve: IbanSolve,\n },\n post: {\n icon: <img src={postalIcon} />,\n label: \"Physical mail\",\n setup: PostalSetup,\n solve: PostalSolve,\n },\n totp: {\n icon: <i class=\"mdi mdi-devices\" />,\n label: \"TOTP\",\n setup: TotpSetup,\n solve: TotpSolve,\n },\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 */\nimport { encodeCrock, stringToBytes } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { EmailInput } from \"../../../components/fields/EmailInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nconst EMAIL_PATTERN =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nexport function AuthMethodEmailSetup({\n cancel,\n addAuthMethod,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [email, setEmail] = useState(\"\");\n const addEmailAuth = (): void =>\n addAuthMethod({\n authentication_method: {\n type: \"email\",\n instructions: `Email to ${email}`,\n challenge: encodeCrock(stringToBytes(email)),\n },\n });\n const emailError = !EMAIL_PATTERN.test(email)\n ? \"Email address is not valid\"\n : undefined;\n const errors = !email ? \"Add your email\" : emailError;\n\n function goNextIfNoErrors(): void {\n if (!errors) addEmailAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add email authentication\">\n <p>\n For email authentication, you need to provide an email address. When\n recovering your secret, you will need to enter the code you receive by\n email. Add the uuid from the challenge\n </p>\n <div>\n <EmailInput\n label=\"Email address\"\n error={emailError}\n onConfirm={goNextIfNoErrors}\n placeholder=\"email@domain.com\"\n bind={[email, setEmail]}\n />\n </div>\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your emails:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginBottom: \"auto\", marginTop: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addEmailAuth}\n >\n Add\n </button>\n </span>\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\n\nexport interface TextInputProps {\n label: string;\n grabFocus?: boolean;\n error?: string;\n placeholder?: string;\n tooltip?: string;\n onConfirm?: () => void;\n bind: [string, (x: string) => void];\n}\n\nexport function EmailInput(props: TextInputProps): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (props.grabFocus) {\n inputRef.current?.focus();\n }\n }, [props.grabFocus]);\n const value = props.bind[0];\n const [dirty, setDirty] = useState(false);\n const showError = dirty && props.error;\n return (\n <div class=\"field\">\n <label class=\"label\">\n {props.label}\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control has-icons-right\">\n <input\n value={value}\n required\n placeholder={props.placeholder}\n type=\"email\"\n class={showError ? \"input is-danger\" : \"input\"}\n onKeyPress={(e) => {\n if (e.key === \"Enter\" && props.onConfirm) {\n props.onConfirm();\n }\n }}\n onInput={(e) => {\n setDirty(true);\n props.bind[1]((e.target as HTMLInputElement).value);\n }}\n ref={inputRef}\n style={{ display: \"block\" }}\n />\n </div>\n {showError && <p class=\"help is-danger\">{props.error}</p>}\n </div>\n );\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\n/**\n * Imports.\n */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { useTranslationContext } from \"../../../context/translation.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodEmailSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, _setAnswer] = useState(\"A-\");\n\n function setAnswer(str: string): void {\n //A-12345-678-1234-5678\n const unformatted = str\n .replace(/^A-/, \"\")\n .replace(/-/g, \"\")\n .toLocaleUpperCase();\n\n let result = `A-${unformatted.substring(0, 5)}`;\n if (unformatted.length > 5) {\n result += `-${unformatted.substring(5, 8)}`;\n }\n if (unformatted.length > 8) {\n result += `-${unformatted.substring(8, 12)}`;\n }\n if (unformatted.length > 12) {\n result += `-${unformatted.substring(12)}`;\n }\n\n _setAnswer(result);\n }\n const [expanded, setExpanded] = useState(false);\n const { i18n } = useTranslationContext();\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state, no recovery state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state, no challenge id</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", {\n answer: `A-${answer.replace(/^A-/, \"\").replace(/-/g, \"\").trim()}`,\n });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n const error =\n answer.length > 21\n ? i18n.str`The answer should not be greater than 21 characters.`\n : undefined;\n\n return (\n <AnastasisClientFrame hideNav title=\"Email challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>\n An email has been sent to &quot;<b>{selectedChallenge.instructions}</b>\n &quot;. The message has and identification code and recovery code that\n starts with &quot;\n <b>A-</b>&quot;. Wait the message to arrive and the enter the recovery\n code below.\n </p>\n {!expanded ? (\n <p>\n The identification code in the email should start with &quot;\n {selectedUuid.substring(0, 10)}&quot;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip=\"click to expand\"\n onClick={() => setExpanded((e) => !e)}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </p>\n ) : (\n <p>\n The identification code in the email is &quot;{selectedUuid}&quot;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip=\"click to show less code\"\n onClick={() => setExpanded((e) => !e)}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </p>\n )}\n <TextInput\n label=\"Answer\"\n grabFocus\n onConfirm={onNext}\n bind={[answer, setAnswer]}\n error={error}\n placeholder=\"A-12345-678-1234-5678\"\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton\n class=\"button is-info\"\n onClick={onNext}\n disabled={!!error}\n >\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport {\n ChallengeFeedback,\n ChallengeFeedbackStatus,\n} from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { Notifications } from \"../../components/Notifications.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"./authMethod/index.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function SolveOverviewFeedbackDisplay(props: {\n feedback?: ChallengeFeedback;\n}): VNode {\n const { feedback } = props;\n if (!feedback) {\n return <div />;\n }\n switch (feedback.state) {\n case ChallengeFeedbackStatus.TalerPayment:\n return (\n <Notifications\n notifications={[\n {\n type: \"INFO\",\n message: `Message from provider`,\n description: (\n <span>\n To pay you can{\" \"}\n <a\n href={feedback.taler_pay_uri}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n click here\n </a>\n </span>\n ),\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.IbanInstructions:\n return (\n <Notifications\n notifications={[\n {\n type: \"INFO\",\n message: `Message from provider`,\n description: `Need to send a wire transfer to \"${feedback.target_business_name}\"`,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.ServerFailure:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: `Server error: response code ${feedback.http_status}`,\n description: !feedback.error_response\n ? undefined\n : `More information: ${JSON.stringify(\n feedback.error_response,\n )}`,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.RateLimitExceeded:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: \"There were to many failed attempts.\",\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.Unsupported:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: `This client doesn't support solving this type of challenge`,\n description: `Use another version or contact the provider. Type of challenge \"${feedback.unsupported_method}\"`,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.TruthUnknown:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: `Provider doesn't recognize the type of challenge`,\n description: \"Contact the provider for further information\",\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.CodeInFile:\n return (\n <Notifications\n notifications={[\n {\n type: \"INFO\",\n message: `Required TAN can be found in file \"${feedback.filename}\"`,\n description: feedback.display_hint\n ? `HINT: ${feedback.display_hint}`\n : undefined,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.CodeSent:\n return (\n <Notifications\n notifications={[\n {\n type: \"INFO\",\n message: `Code sent to address \"${feedback.address_hint}\"`,\n description: feedback.display_hint\n ? `HINT: ${feedback.display_hint}`\n : undefined,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.IncorrectAnswer:\n return (\n <Notifications\n notifications={[\n {\n type: \"ERROR\",\n message: `The answer is wrong.`,\n },\n ]}\n />\n );\n case ChallengeFeedbackStatus.Solved:\n return (\n <Notifications\n notifications={[\n {\n type: \"SUCCESS\",\n message: `This challenge is solved`,\n },\n ]}\n />\n );\n }\n}\n\nexport function SolveScreen(): VNode {\n const reducer = useAnastasisContext();\n\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n function SolveNotImplemented(): VNode {\n return (\n <AnastasisClientFrame hideNav title=\"Not implemented\">\n <p>\n The challenge selected is not supported for this UI. Please update\n this version or try using another policy.\n </p>\n {reducer && (\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n )}\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const selectedChallenge = chArr.find((ch) => ch.uuid === selectedUuid);\n\n const SolveDialog =\n !selectedChallenge ||\n !authMethods[selectedChallenge.type as KnownAuthMethods]\n ? SolveNotImplemented\n : authMethods[selectedChallenge.type as KnownAuthMethods].solve ??\n SolveNotImplemented;\n\n return <SolveDialog id={selectedUuid} />;\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 */\nimport {\n ChallengeFeedback,\n ChallengeFeedbackStatus,\n} from \"@gnu-taler/anastasis-core\";\n\nexport function shouldHideConfirm(feedback: ChallengeFeedback): boolean {\n return (\n feedback?.state === ChallengeFeedbackStatus.RateLimitExceeded ||\n feedback?.state === ChallengeFeedbackStatus.Unsupported ||\n feedback?.state === ChallengeFeedbackStatus.TruthUnknown\n );\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 */\nimport {\n canonicalJson,\n encodeCrock,\n stringToBytes,\n} from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nexport function AuthMethodIbanSetup({\n addAuthMethod,\n cancel,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [name, setName] = useState(\"\");\n const [account, setAccount] = useState(\"\");\n const addIbanAuth = (): void =>\n addAuthMethod({\n authentication_method: {\n type: \"iban\",\n instructions: `Wire transfer from ${account} with holder ${name}`,\n challenge: encodeCrock(\n stringToBytes(\n canonicalJson({\n name,\n account,\n }),\n ),\n ),\n },\n });\n const errors = !name\n ? \"Add an account name\"\n : !account\n ? \"Add an account IBAN number\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) addIbanAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add bank transfer authentication\">\n <p>\n For bank transfer authentication, you need to provide a bank account\n (account holder name and IBAN). When recovering your secret, you will be\n asked to pay the recovery fee via bank transfer from the account you\n provided here.\n </p>\n <div>\n <TextInput\n label=\"Bank account holder name\"\n grabFocus\n placeholder=\"John Smith\"\n onConfirm={goNextIfNoErrors}\n bind={[name, setName]}\n />\n <TextInput\n label=\"IBAN\"\n placeholder=\"DE91100000000123456789\"\n onConfirm={goNextIfNoErrors}\n bind={[account, setAccount]}\n />\n </div>\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your bank accounts:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginBottom: \"auto\", marginTop: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addIbanAuth}\n >\n Add\n </button>\n </span>\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodIbanSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, setAnswer] = useState(\"\");\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", { answer });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n return (\n <AnastasisClientFrame hideNav title=\"IBAN Challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>Send a wire transfer to the address,</p>\n <button class=\"button\">Check</button>\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton class=\"button is-info\" onClick={onNext}>\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport {\n canonicalJson,\n encodeCrock,\n stringToBytes,\n} from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nexport function AuthMethodPostSetup({\n addAuthMethod,\n cancel,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [fullName, setFullName] = useState(\"\");\n const [street, setStreet] = useState(\"\");\n const [city, setCity] = useState(\"\");\n const [postcode, setPostcode] = useState(\"\");\n const [country, setCountry] = useState(\"\");\n\n const addPostAuth = () => {\n const challengeJson = {\n full_name: fullName,\n street,\n city,\n postcode,\n country,\n };\n addAuthMethod({\n authentication_method: {\n type: \"post\",\n instructions: `Letter to address in postal code ${postcode}`,\n challenge: encodeCrock(stringToBytes(canonicalJson(challengeJson))),\n },\n });\n };\n\n const errors = !fullName\n ? \"The full name is missing\"\n : !street\n ? \"The street is missing\"\n : !city\n ? \"The city is missing\"\n : !postcode\n ? \"The postcode is missing\"\n : !country\n ? \"The country is missing\"\n : undefined;\n\n function goNextIfNoErrors(): void {\n if (!errors) addPostAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add postal authentication\">\n <p>\n For postal letter authentication, you need to provide a postal address.\n When recovering your secret, you will be asked to enter a code that you\n will receive in a letter to that address.\n </p>\n <div>\n <TextInput\n grabFocus\n label=\"Full Name\"\n bind={[fullName, setFullName]}\n onConfirm={goNextIfNoErrors}\n />\n </div>\n <div>\n <TextInput\n onConfirm={goNextIfNoErrors}\n label=\"Street\"\n bind={[street, setStreet]}\n />\n </div>\n <div>\n <TextInput\n onConfirm={goNextIfNoErrors}\n label=\"City\"\n bind={[city, setCity]}\n />\n </div>\n <div>\n <TextInput\n onConfirm={goNextIfNoErrors}\n label=\"Postal Code\"\n bind={[postcode, setPostcode]}\n />\n </div>\n <div>\n <TextInput\n onConfirm={goNextIfNoErrors}\n label=\"Country\"\n bind={[country, setCountry]}\n />\n </div>\n\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your postal code:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginBottom: \"auto\", marginTop: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addPostAuth}\n >\n Add\n </button>\n </span>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { useTranslationContext } from \"../../../context/translation.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodPostSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, _setAnswer] = useState(\"A-\");\n\n function setAnswer(str: string): void {\n //A-12345-678-1234-5678\n const unformatted = str\n .replace(/^A-/, \"\")\n .replace(/-/g, \"\")\n .toLocaleUpperCase();\n\n let result = `A-${unformatted.substring(0, 5)}`;\n if (unformatted.length > 5) {\n result += `-${unformatted.substring(5, 8)}`;\n }\n if (unformatted.length > 8) {\n result += `-${unformatted.substring(8, 12)}`;\n }\n if (unformatted.length > 12) {\n result += `-${unformatted.substring(12)}`;\n }\n\n _setAnswer(result);\n }\n const { i18n } = useTranslationContext();\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", {\n answer: `A-${answer.replace(/^A-/, \"\").replace(/-/g, \"\").trim()}`,\n });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n const error =\n answer.length > 21\n ? i18n.str`The answer should not be greater than 21 characters.`\n : undefined;\n\n return (\n <AnastasisClientFrame hideNav title=\"Postal Challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>Wait for the answer</p>\n <TextInput\n onConfirm={onNext}\n label=\"Answer\"\n grabFocus\n placeholder=\"A-12345-678-1234-5678\"\n error={error}\n bind={[answer, setAnswer]}\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton\n class=\"button is-info\"\n onClick={onNext}\n disabled={!!error}\n >\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { encodeCrock, stringToBytes } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nexport function AuthMethodQuestionSetup({\n cancel,\n addAuthMethod,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [questionText, setQuestionText] = useState(\"\");\n const [answerText, setAnswerText] = useState(\"\");\n const addQuestionAuth = (): void =>\n addAuthMethod({\n authentication_method: {\n type: \"question\",\n instructions: questionText,\n challenge: encodeCrock(stringToBytes(answerText)),\n },\n });\n\n const errors = !questionText\n ? \"Add your security question\"\n : !answerText\n ? \"Add the answer to your question\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) addQuestionAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add Security Question\">\n <div>\n <p>\n For security question authentication, you need to provide a question\n and its answer. When recovering your secret, you will be shown the\n question and you will need to type the answer exactly as you typed it\n here.\n </p>\n <p class=\"notification is-warning\">\n Note that the answer is case-sensitive and must be entered in exactly\n the same way (punctuation, spaces) during recovery.\n </p>\n <div>\n <TextInput\n label=\"Security question\"\n grabFocus\n onConfirm={goNextIfNoErrors}\n placeholder=\"Your question\"\n bind={[questionText, setQuestionText]}\n />\n </div>\n <div>\n <TextInput\n label=\"Answer\"\n onConfirm={goNextIfNoErrors}\n placeholder=\"Your answer\"\n bind={[answerText, setAnswerText]}\n />\n </div>\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addQuestionAuth}\n >\n Add\n </button>\n </span>\n </div>\n\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your security questions:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginBottom: \"auto\", marginTop: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodQuestionSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, setAnswer] = useState(\"\");\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", { answer });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n return (\n <AnastasisClientFrame hideNav title=\"Question challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>\n In this challenge you need to provide the answer for the next question:\n </p>\n <pre>{selectedChallenge.instructions}</pre>\n <p>Type the answer below</p>\n <TextInput\n label=\"Answer\"\n onConfirm={onNext}\n grabFocus\n bind={[answer, setAnswer]}\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton class=\"button is-info\" onClick={onNext}>\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { encodeCrock, stringToBytes } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\nimport { PhoneNumberInput } from \"../../../components/fields/NumberInput.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\n\nconst REGEX_JUST_NUMBERS = /^\\+[0-9 ]*$/;\n\nfunction isJustNumbers(str: string): boolean {\n return REGEX_JUST_NUMBERS.test(str);\n}\n\nexport function AuthMethodSmsSetup({\n addAuthMethod,\n cancel,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [mobileNumber, setMobileNumber] = useState(\"+\");\n const addSmsAuth = (): void => {\n addAuthMethod({\n authentication_method: {\n type: \"sms\",\n instructions: `SMS to ${mobileNumber}`,\n challenge: encodeCrock(stringToBytes(mobileNumber)),\n },\n });\n };\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n inputRef.current?.focus();\n }, []);\n const errors = !mobileNumber\n ? \"Add a mobile number\"\n : !mobileNumber.startsWith(\"+\")\n ? \"Mobile number should start with '+'\"\n : !isJustNumbers(mobileNumber)\n ? \"Mobile number can't have other than numbers\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) addSmsAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add SMS authentication\">\n <div>\n <p>\n For SMS authentication, you need to provide a mobile number. When\n recovering your secret, you will be asked to enter the code you\n receive via SMS.\n </p>\n <div class=\"container\">\n <PhoneNumberInput\n label=\"Mobile number\"\n placeholder=\"Your mobile number\"\n onConfirm={goNextIfNoErrors}\n error={errors}\n grabFocus\n bind={[mobileNumber, setMobileNumber]}\n />\n <div>\n Enter mobile number including +CC international dialing prefix.\n </div>\n </div>\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your mobile numbers:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginTop: \"auto\", marginBottom: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addSmsAuth}\n >\n Add\n </button>\n </span>\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { useTranslationContext } from \"../../../context/translation.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodSmsSolve({ id }: AuthMethodSolveProps): VNode {\n const [answer, _setAnswer] = useState(\"A-\");\n\n function setAnswer(str: string): void {\n //A-12345-678-1234-5678\n const unformatted = str\n .replace(/^A-/, \"\")\n .replace(/-/g, \"\")\n .toLocaleUpperCase();\n\n let result = `A-${unformatted.substring(0, 5)}`;\n if (unformatted.length > 5) {\n result += `-${unformatted.substring(5, 8)}`;\n }\n if (unformatted.length > 8) {\n result += `-${unformatted.substring(8, 12)}`;\n }\n if (unformatted.length > 12) {\n result += `-${unformatted.substring(12)}`;\n }\n\n _setAnswer(result);\n }\n const { i18n } = useTranslationContext();\n\n const [expanded, setExpanded] = useState(false);\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const selectedChallenge = challenges[selectedUuid];\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", {\n answer: `A-${answer.replace(/^A-/, \"\").replace(/-/g, \"\").trim()}`,\n });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n const error =\n answer.length > 21\n ? i18n.str`The answer should not be greater than 21 characters.`\n : undefined;\n\n return (\n <AnastasisClientFrame hideNav title=\"SMS Challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>\n An sms has been sent to &quot;<b>{selectedChallenge.instructions}</b>\n &quot;. The message has and identification code and recovery code that\n starts with &quot;\n <b>A-</b>&quot;. Wait the message to arrive and the enter the recovery\n code below.\n </p>\n {!expanded ? (\n <p>\n The identification code in the SMS should start with &quot;\n {selectedUuid.substring(0, 10)}&quot;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip=\"click to expand\"\n onClick={() => setExpanded((e) => !e)}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </p>\n ) : (\n <p>\n The identification code in the SMS is &quot;{selectedUuid}&quot;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip=\"click to show less code\"\n onClick={() => setExpanded((e) => !e)}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </p>\n )}\n <TextInput\n label=\"Answer\"\n grabFocus\n onConfirm={onNext}\n bind={[answer, setAnswer]}\n error={error}\n placeholder=\"A-12345-678-1234-5678\"\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton\n class=\"button is-info\"\n onClick={onNext}\n disabled={!!error}\n >\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { encodeCrock } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useMemo, useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { QR } from \"../../../components/QR.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { AuthMethodSetupProps } from \"./index.js\";\nimport { base32enc, computeTOTPandCheck } from \"./totp.js\";\n\n/**\n * This is hard-coded in the protocol for TOTP auth.\n */\nconst ANASTASIS_TOTP_DIGITS = 8;\n\nexport function AuthMethodTotpSetup({\n addAuthMethod,\n cancel,\n configured,\n}: AuthMethodSetupProps): VNode {\n const [name, setName] = useState(\"anastasis\");\n const [test, setTest] = useState(\"\");\n const secretKey = useMemo(() => {\n const array = new Uint8Array(32);\n if (typeof window === \"undefined\") return array;\n return window.crypto.getRandomValues(array);\n }, []);\n\n const secret32 = base32enc(secretKey);\n const totpURL = `otpauth://totp/${name}?digits=${ANASTASIS_TOTP_DIGITS}&secret=${secret32}`;\n\n const addTotpAuth = (): void =>\n addAuthMethod({\n authentication_method: {\n type: \"totp\",\n instructions: `Enter ${ANASTASIS_TOTP_DIGITS} digits code for \"${name}\"`,\n challenge: encodeCrock(secretKey),\n },\n });\n\n const testCodeMatches = computeTOTPandCheck(secretKey, 8, parseInt(test, 10));\n\n const errors = !name\n ? \"The TOTP name is missing\"\n : !testCodeMatches\n ? \"The test code doesn't match\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) addTotpAuth();\n }\n return (\n <AnastasisClientFrame hideNav title=\"Add TOTP authentication\">\n <p>\n For Time-based One-Time Password (TOTP) authentication, you need to set\n a name for the TOTP secret. Then, you must scan the generated QR code\n with your TOTP App to import the TOTP secret into your TOTP App.\n </p>\n <div class=\"block\">\n <TextInput label=\"TOTP Name\" grabFocus bind={[name, setName]} />\n </div>\n <div style={{ height: 300 }}>\n <QR text={totpURL} />\n </div>\n <p>\n Confirm that your TOTP App works by entering the current 8-digit TOTP\n code here:\n </p>\n <TextInput\n label=\"Test code\"\n onConfirm={goNextIfNoErrors}\n bind={[test, setTest]}\n />\n <div>\n We note that Google&apos;s implementation of TOTP is incomplete and will\n not work. We recommend using FreeOTP+.\n </div>\n\n {configured.length > 0 && (\n <section class=\"section\">\n <div class=\"block\">Your TOTP numbers:</div>\n <div class=\"block\">\n {configured.map((c, i) => {\n return (\n <div\n key={i}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <p style={{ marginTop: \"auto\", marginBottom: \"auto\" }}>\n {c.instructions}\n </p>\n <div>\n <button class=\"button is-danger\" onClick={c.remove}>\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n <div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span data-tooltip={errors}>\n <button\n class=\"button is-info\"\n disabled={errors !== undefined}\n onClick={addTotpAuth}\n >\n Add\n </button>\n </span>\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 { 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 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", "import { packedValue, EncodingType, FormatType } from \"./custom_types\";\n/**\n * Return type for all the *2packed functions\n */\nconst b64Tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nconst arraybuffer_error = \"ARRAYBUFFER not supported by this environment\";\nconst uint8array_error = \"UINT8ARRAY not supported by this environment\";\n\n/**\n * Convert a string to an array of words.\n *\n * There is a known bug with an odd number of existing bytes and using a UTF-16 encoding. However, this function is\n * used such that the existing bytes are always a result of a previous UTF-16 str2packed call and therefore there \n * should never be an odd number of existing bytes.\n\n * @param str Unicode string to be converted to binary representation.\n * @param utfType The Unicode type to use to encode the source string.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked`.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction str2packed(\n str: string,\n utfType: EncodingType,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let codePnt,\n codePntArr,\n byteCnt = 0,\n i,\n j,\n intOffset,\n byteOffset,\n shiftModifier,\n transposeBytes;\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3;\n\n if (\"UTF8\" === utfType) {\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n for (i = 0; i < str.length; i += 1) {\n codePnt = str.charCodeAt(i);\n codePntArr = [];\n\n if (0x80 > codePnt) {\n codePntArr.push(codePnt);\n } else if (0x800 > codePnt) {\n codePntArr.push(0xc0 | (codePnt >>> 6));\n codePntArr.push(0x80 | (codePnt & 0x3f));\n } else if (0xd800 > codePnt || 0xe000 <= codePnt) {\n codePntArr.push(0xe0 | (codePnt >>> 12), 0x80 | ((codePnt >>> 6) & 0x3f), 0x80 | (codePnt & 0x3f));\n } else {\n i += 1;\n codePnt = 0x10000 + (((codePnt & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n codePntArr.push(\n 0xf0 | (codePnt >>> 18),\n 0x80 | ((codePnt >>> 12) & 0x3f),\n 0x80 | ((codePnt >>> 6) & 0x3f),\n 0x80 | (codePnt & 0x3f)\n );\n }\n\n for (j = 0; j < codePntArr.length; j += 1) {\n byteOffset = byteCnt + existingByteLen;\n intOffset = byteOffset >>> 2;\n while (packed.length <= intOffset) {\n packed.push(0);\n }\n /* Known bug kicks in here */\n packed[intOffset] |= codePntArr[j] << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n byteCnt += 1;\n }\n }\n } else {\n /* UTF16BE or UTF16LE */\n shiftModifier = bigEndianMod === -1 ? 2 : 0;\n /* Internally strings are UTF-16BE so transpose bytes under two conditions:\n * need LE and not switching endianness due to SHA-3\n * need BE and switching endianness due to SHA-3 */\n transposeBytes = (\"UTF16LE\" === utfType && bigEndianMod !== 1) || (\"UTF16LE\" !== utfType && bigEndianMod === 1);\n for (i = 0; i < str.length; i += 1) {\n codePnt = str.charCodeAt(i);\n if (transposeBytes === true) {\n j = codePnt & 0xff;\n codePnt = (j << 8) | (codePnt >>> 8);\n }\n\n byteOffset = byteCnt + existingByteLen;\n intOffset = byteOffset >>> 2;\n while (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |= codePnt << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n byteCnt += 2;\n }\n }\n return { value: packed, binLen: byteCnt * 8 + existingPackedLen };\n}\n\n/**\n * Convert a hex string to an array of words.\n *\n * @param str Hexadecimal string to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction hex2packed(\n str: string,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let i, num, intOffset, byteOffset;\n\n if (0 !== str.length % 2) {\n throw new Error(\"String of HEX type must be in byte increments\");\n }\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < str.length; i += 2) {\n num = parseInt(str.substr(i, 2), 16);\n if (!isNaN(num)) {\n byteOffset = (i >>> 1) + existingByteLen;\n intOffset = byteOffset >>> 2;\n while (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |= num << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n } else {\n throw new Error(\"String of HEX type contains invalid characters\");\n }\n }\n\n return { value: packed, binLen: str.length * 4 + existingPackedLen };\n}\n\n/**\n * Convert a string of raw bytes to an array of words.\n *\n * @param str String of raw bytes to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction bytes2packed(\n str: string,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let codePnt, i, intOffset, byteOffset;\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < str.length; i += 1) {\n codePnt = str.charCodeAt(i);\n\n byteOffset = i + existingByteLen;\n intOffset = byteOffset >>> 2;\n if (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |= codePnt << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n }\n\n return { value: packed, binLen: str.length * 8 + existingPackedLen };\n}\n\n/**\n * Convert a base-64 string to an array of words.\n *\n * @param str Base64-encoded string to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction b642packed(\n str: string,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let byteCnt = 0,\n index,\n i,\n j,\n tmpInt,\n strPart,\n intOffset,\n byteOffset;\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3,\n shiftModifier = bigEndianMod === -1 ? 3 : 0,\n firstEqual = str.indexOf(\"=\");\n\n if (-1 === str.search(/^[a-zA-Z0-9=+/]+$/)) {\n throw new Error(\"Invalid character in base-64 string\");\n }\n\n str = str.replace(/=/g, \"\");\n if (-1 !== firstEqual && firstEqual < str.length) {\n throw new Error(\"Invalid '=' found in base-64 string\");\n }\n\n for (i = 0; i < str.length; i += 4) {\n strPart = str.substr(i, 4);\n tmpInt = 0;\n\n for (j = 0; j < strPart.length; j += 1) {\n index = b64Tab.indexOf(strPart.charAt(j));\n tmpInt |= index << (18 - 6 * j);\n }\n\n for (j = 0; j < strPart.length - 1; j += 1) {\n byteOffset = byteCnt + existingByteLen;\n intOffset = byteOffset >>> 2;\n while (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |=\n ((tmpInt >>> (16 - j * 8)) & 0xff) << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n byteCnt += 1;\n }\n }\n\n return { value: packed, binLen: byteCnt * 8 + existingPackedLen };\n}\n\n/**\n * Convert an Uint8Array to an array of words.\n *\n * @param arr Uint8Array to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction uint8array2packed(\n arr: Uint8Array,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n let i, intOffset, byteOffset;\n\n existingPackedLen = existingPackedLen || 0;\n const packed = existingPacked || [0],\n existingByteLen = existingPackedLen >>> 3,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < arr.length; i += 1) {\n byteOffset = i + existingByteLen;\n intOffset = byteOffset >>> 2;\n if (packed.length <= intOffset) {\n packed.push(0);\n }\n packed[intOffset] |= arr[i] << (8 * (shiftModifier + bigEndianMod * (byteOffset % 4)));\n }\n\n return { value: packed, binLen: arr.length * 8 + existingPackedLen };\n}\n\n/**\n * Convert an ArrayBuffer to an array of words\n *\n * @param arr ArrayBuffer to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Hashmap of the packed values.\n */\nfunction arraybuffer2packed(\n arr: ArrayBuffer,\n existingPacked: number[] | undefined,\n existingPackedLen: number | undefined,\n bigEndianMod: -1 | 1\n): packedValue {\n return uint8array2packed(new Uint8Array(arr), existingPacked, existingPackedLen, bigEndianMod);\n}\n\n/**\n * Function that takes an input format and UTF encoding and returns the appropriate function used to convert the input.\n *\n * @param format The format of the input to be converted\n * @param utfType The string encoding to use for TEXT inputs.\n * @param bigEndianMod Modifier for whether hash function is big or small endian\n * @returns Function that will convert an input to a packed int array.\n */\nexport function getStrConverter(\n format: FormatType,\n utfType: EncodingType,\n bigEndianMod: -1 | 1\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n): (input: any, existingBin?: number[], existingBinLen?: number) => packedValue {\n /* Validate encoding */\n switch (utfType) {\n case \"UTF8\":\n /* Fallthrough */\n case \"UTF16BE\":\n /* Fallthrough */\n case \"UTF16LE\":\n /* Fallthrough */\n break;\n default:\n throw new Error(\"encoding must be UTF8, UTF16BE, or UTF16LE\");\n }\n\n /* Map inputFormat to the appropriate converter */\n switch (format) {\n case \"HEX\":\n /**\n * @param str String of hexadecimal bytes to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (str: string, existingBin?: number[], existingBinLen?: number): packedValue {\n return hex2packed(str, existingBin, existingBinLen, bigEndianMod);\n };\n case \"TEXT\":\n /**\n * @param str Unicode string to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (str: string, existingBin?: number[], existingBinLen?: number): packedValue {\n return str2packed(str, utfType, existingBin, existingBinLen, bigEndianMod);\n };\n case \"B64\":\n /**\n * @param str Base64-encoded string to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (str: string, existingBin?: number[], existingBinLen?: number): packedValue {\n return b642packed(str, existingBin, existingBinLen, bigEndianMod);\n };\n case \"BYTES\":\n /**\n * @param str String of raw bytes to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (str: string, existingBin?: number[], existingBinLen?: number): packedValue {\n return bytes2packed(str, existingBin, existingBinLen, bigEndianMod);\n };\n case \"ARRAYBUFFER\":\n try {\n new ArrayBuffer(0);\n } catch (ignore) {\n throw new Error(arraybuffer_error);\n }\n /**\n * @param arr ArrayBuffer to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (arr: ArrayBuffer, existingBin?: number[], existingBinLen?: number): packedValue {\n return arraybuffer2packed(arr, existingBin, existingBinLen, bigEndianMod);\n };\n case \"UINT8ARRAY\":\n try {\n new Uint8Array(0);\n } catch (ignore) {\n throw new Error(uint8array_error);\n }\n /**\n * @param arr Uint8Array to be converted to binary representation.\n * @param existingPacked A packed int array of bytes to append the results to.\n * @param existingPackedLen The number of bits in `existingPacked` array.\n * @returns Hashmap of the packed values.\n */\n return function (arr: Uint8Array, existingBin?: number[], existingBinLen?: number): packedValue {\n return uint8array2packed(arr, existingBin, existingBinLen, bigEndianMod);\n };\n default:\n throw new Error(\"format must be HEX, TEXT, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY\");\n }\n}\n\n/**\n * Convert an array of words to a hexadecimal string.\n *\n * toString() won't work here because it removes preceding zeros (e.g. 0x00000001.toString === \"1\" rather than\n * \"00000001\" and 0.toString(16) === \"0\" rather than \"00\").\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @param formatOpts Hashmap containing validated output formatting options.\n * @returns Hexadecimal representation of `packed`.\n */\nexport function packed2hex(\n packed: number[],\n outputLength: number,\n bigEndianMod: -1 | 1,\n formatOpts: { outputUpper: boolean; b64Pad: string }\n): string {\n const hex_tab = \"0123456789abcdef\";\n let str = \"\",\n i,\n srcByte;\n\n const length = outputLength / 8,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < length; i += 1) {\n /* The below is more than a byte but it gets taken care of later */\n srcByte = packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)));\n str += hex_tab.charAt((srcByte >>> 4) & 0xf) + hex_tab.charAt(srcByte & 0xf);\n }\n\n return formatOpts[\"outputUpper\"] ? str.toUpperCase() : str;\n}\n\n/**\n * Convert an array of words to a base-64 string.\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @param formatOpts Hashmap containing validated output formatting options.\n * @returns Base64-encoded representation of `packed`.\n */\nexport function packed2b64(\n packed: number[],\n outputLength: number,\n bigEndianMod: -1 | 1,\n formatOpts: { outputUpper: boolean; b64Pad: string }\n): string {\n let str = \"\",\n i,\n j,\n triplet,\n int1,\n int2;\n\n const length = outputLength / 8,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < length; i += 3) {\n int1 = i + 1 < length ? packed[(i + 1) >>> 2] : 0;\n int2 = i + 2 < length ? packed[(i + 2) >>> 2] : 0;\n triplet =\n (((packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)))) & 0xff) << 16) |\n (((int1 >>> (8 * (shiftModifier + bigEndianMod * ((i + 1) % 4)))) & 0xff) << 8) |\n ((int2 >>> (8 * (shiftModifier + bigEndianMod * ((i + 2) % 4)))) & 0xff);\n for (j = 0; j < 4; j += 1) {\n if (i * 8 + j * 6 <= outputLength) {\n str += b64Tab.charAt((triplet >>> (6 * (3 - j))) & 0x3f);\n } else {\n str += formatOpts[\"b64Pad\"];\n }\n }\n }\n return str;\n}\n\n/**\n * Convert an array of words to raw bytes string.\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns Raw bytes representation of `packed`.\n */\nexport function packed2bytes(packed: number[], outputLength: number, bigEndianMod: -1 | 1): string {\n let str = \"\",\n i,\n srcByte;\n\n const length = outputLength / 8,\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < length; i += 1) {\n srcByte = (packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)))) & 0xff;\n str += String.fromCharCode(srcByte);\n }\n\n return str;\n}\n\n/**\n * Convert an array of words to an ArrayBuffer.\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns An ArrayBuffer containing bytes from `packed.\n */\nexport function packed2arraybuffer(packed: number[], outputLength: number, bigEndianMod: -1 | 1): ArrayBuffer {\n let i;\n const length = outputLength / 8,\n retVal = new ArrayBuffer(length),\n arrView = new Uint8Array(retVal),\n shiftModifier = bigEndianMod === -1 ? 3 : 0;\n\n for (i = 0; i < length; i += 1) {\n arrView[i] = (packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)))) & 0xff;\n }\n\n return retVal;\n}\n\n/**\n * Convert an array of words to an Uint8Array.\n *\n * @param packed Array of integers to be converted.\n * @param outputLength Length of output in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @returns An Uint8Array containing bytes from `packed.\n */\nexport function packed2uint8array(packed: number[], outputLength: number, bigEndianMod: -1 | 1): Uint8Array {\n let i;\n const length = outputLength / 8,\n shiftModifier = bigEndianMod === -1 ? 3 : 0,\n retVal = new Uint8Array(length);\n\n for (i = 0; i < length; i += 1) {\n retVal[i] = (packed[i >>> 2] >>> (8 * (shiftModifier + bigEndianMod * (i % 4)))) & 0xff;\n }\n\n return retVal;\n}\n\n/**\n * Function that takes an output format and associated parameters and returns a function that converts packed integers\n * to that format.\n *\n * @param format The desired output formatting.\n * @param outputBinLen Output length in bits.\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @param outputOptions Hashmap of output formatting options\n * @returns Function that will convert a packed integer array to desired format.\n */\nexport function getOutputConverter(\n format: \"HEX\" | \"B64\" | \"BYTES\",\n outputBinLen: number,\n bigEndianMod: -1 | 1,\n outputOptions: { outputUpper: boolean; b64Pad: string }\n): (binarray: number[]) => string;\nexport function getOutputConverter(\n format: \"ARRAYBUFFER\",\n outputBinLen: number,\n bigEndianMod: -1 | 1,\n outputOptions: { outputUpper: boolean; b64Pad: string }\n): (binarray: number[]) => ArrayBuffer;\nexport function getOutputConverter(\n format: \"UINT8ARRAY\",\n outputBinLen: number,\n bigEndianMod: -1 | 1,\n outputOptions: { outputUpper: boolean; b64Pad: string }\n): (binarray: number[]) => Uint8Array;\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function getOutputConverter(format: any, outputBinLen: any, bigEndianMod: any, outputOptions: any): any {\n switch (format) {\n case \"HEX\":\n return function (binarray: number[]): string {\n return packed2hex(binarray, outputBinLen, bigEndianMod, outputOptions);\n };\n case \"B64\":\n return function (binarray: number[]): string {\n return packed2b64(binarray, outputBinLen, bigEndianMod, outputOptions);\n };\n case \"BYTES\":\n return function (binarray: number[]): string {\n return packed2bytes(binarray, outputBinLen, bigEndianMod);\n };\n case \"ARRAYBUFFER\":\n try {\n /* Need to test ArrayBuffer support */\n new ArrayBuffer(0);\n } catch (ignore) {\n throw new Error(arraybuffer_error);\n }\n return function (binarray: number[]): ArrayBuffer {\n return packed2arraybuffer(binarray, outputBinLen, bigEndianMod);\n };\n case \"UINT8ARRAY\":\n try {\n /* Need to test Uint8Array support */\n new Uint8Array(0);\n } catch (ignore) {\n throw new Error(uint8array_error);\n }\n return function (binarray: number[]): Uint8Array {\n return packed2uint8array(binarray, outputBinLen, bigEndianMod);\n };\n default:\n throw new Error(\"format must be HEX, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY\");\n }\n}\n", "import { getStrConverter, getOutputConverter } from \"./converters\";\n\nimport {\n FormatType,\n EncodingType,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n packedValue,\n GenericInputType,\n} from \"./custom_types\";\n\nexport const TWO_PWR_32 = 4294967296;\n\n/* Constant used in SHA-2 families */\nexport const K_sha2 = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,\n 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8,\n 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,\n 0xc67178f2,\n];\n\n/* Constant used in SHA-2 families */\nexport const H_trunc = [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4];\n\n/* Constant used in SHA-2 families */\nexport const H_full = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];\n\nexport const sha_variant_error = \"Chosen SHA variant is not supported\";\nexport const mac_rounds_error = \"Cannot set numRounds with MAC\";\n\n/**\n * Concatenates 2 packed arrays. Clobbers array `a`.\n *\n * @param a First array to concatenate.\n * @param b Second array to concatenate.\n * @returns The concatentation of `a` + `b`.\n */\nexport function packedLEConcat(a: packedValue, b: packedValue): packedValue {\n let i, arrOffset;\n const aByteLen = a[\"binLen\"] >>> 3,\n bByteLen = b[\"binLen\"] >>> 3,\n leftShiftAmount = aByteLen << 3,\n rightShiftAmount = (4 - aByteLen) << 3;\n\n /* If a only contains \"full\" integers, we can just use concat which is so much easier */\n if (aByteLen % 4 !== 0) {\n for (i = 0; i < bByteLen; i += 4) {\n arrOffset = (aByteLen + i) >>> 2;\n /* Left shift chops off bits over 32-bits */\n a[\"value\"][arrOffset] |= b[\"value\"][i >>> 2] << leftShiftAmount;\n a[\"value\"].push(0);\n a[\"value\"][arrOffset + 1] |= b[\"value\"][i >>> 2] >>> rightShiftAmount;\n }\n\n /* Since an unconditional push was performed above, we may have pushed an extra value if it could have been\n encoded without it. Check if popping an int off (reducing total length by 4 bytes) is still bigger than the\n needed size. */\n if ((a[\"value\"].length << 2) - 4 >= bByteLen + aByteLen) {\n a[\"value\"].pop();\n }\n\n return { value: a[\"value\"], binLen: a[\"binLen\"] + b[\"binLen\"] };\n } else {\n return { value: a[\"value\"].concat(b[\"value\"]), binLen: a[\"binLen\"] + b[\"binLen\"] };\n }\n}\n\n/**\n * Validate hash list containing output formatting options, ensuring presence of every option or adding the default\n * value.\n *\n * @param options Hashmap of output formatting options from user.\n * @returns Validated hashmap containing output formatting options.\n */\nexport function getOutputOpts(options?: {\n outputUpper?: boolean;\n b64Pad?: string;\n shakeLen?: number;\n outputLen?: number;\n}): { outputUpper: boolean; b64Pad: string; outputLen: number } {\n const retVal = { outputUpper: false, b64Pad: \"=\", outputLen: -1 },\n outputOptions: { outputUpper?: boolean; b64Pad?: string; shakeLen?: number; outputLen?: number } = options || {},\n lenErrstr = \"Output length must be a multiple of 8\";\n\n retVal[\"outputUpper\"] = outputOptions[\"outputUpper\"] || false;\n\n if (outputOptions[\"b64Pad\"]) {\n retVal[\"b64Pad\"] = outputOptions[\"b64Pad\"];\n }\n\n if (outputOptions[\"outputLen\"]) {\n if (outputOptions[\"outputLen\"] % 8 !== 0) {\n throw new Error(lenErrstr);\n }\n retVal[\"outputLen\"] = outputOptions[\"outputLen\"];\n } else if (outputOptions[\"shakeLen\"]) {\n if (outputOptions[\"shakeLen\"] % 8 !== 0) {\n throw new Error(lenErrstr);\n }\n retVal[\"outputLen\"] = outputOptions[\"shakeLen\"];\n }\n\n if (\"boolean\" !== typeof retVal[\"outputUpper\"]) {\n throw new Error(\"Invalid outputUpper formatting option\");\n }\n\n if (\"string\" !== typeof retVal[\"b64Pad\"]) {\n throw new Error(\"Invalid b64Pad formatting option\");\n }\n\n return retVal;\n}\n\n/**\n * Parses an external constructor object and returns a packed number, if possible.\n *\n * @param key The human-friendly key name to prefix any errors with\n * @param value The input value object to parse\n * @param bigEndianMod Modifier for whether hash function is big or small endian.\n * @param fallback Fallback value if `value` is undefined. If not present and `value` is undefined, an Error is thrown\n */\nexport function parseInputOption(\n key: string,\n value: GenericInputType | undefined,\n bigEndianMod: -1 | 1,\n fallback?: packedValue\n): packedValue {\n const errStr = key + \" must include a value and format\";\n if (!value) {\n if (!fallback) {\n throw new Error(errStr);\n }\n return fallback;\n }\n\n if (typeof value[\"value\"] === \"undefined\" || !value[\"format\"]) {\n throw new Error(errStr);\n }\n\n return getStrConverter(\n value[\"format\"],\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - the value of encoding gets value checked by getStrConverter\n value[\"encoding\"] || \"UTF8\",\n bigEndianMod\n )(value[\"value\"]);\n}\n\nexport abstract class jsSHABase<StateT, VariantT> {\n /**\n * @param variant The desired SHA variant.\n * @param inputFormat The input format to be used in future `update` calls.\n * @param options Hashmap of extra input options.\n */\n /* Needed inputs */\n protected readonly shaVariant: VariantT;\n protected readonly inputFormat: FormatType;\n protected readonly utfType: EncodingType;\n protected readonly numRounds: number;\n\n /* State */\n protected abstract intermediateState: StateT;\n protected keyWithIPad: number[];\n protected keyWithOPad: number[];\n protected remainder: number[];\n protected remainderLen: number;\n protected updateCalled: boolean;\n protected processedLen: number;\n protected macKeySet: boolean;\n\n /* Variant specifics */\n protected abstract readonly variantBlockSize: number;\n protected abstract readonly bigEndianMod: -1 | 1;\n protected abstract readonly outputBinLen: number;\n protected abstract readonly isVariableLen: boolean;\n protected abstract readonly HMACSupported: boolean;\n\n /* Functions */\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n protected abstract readonly converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n protected abstract readonly roundFunc: (block: number[], H: StateT) => StateT;\n protected abstract readonly finalizeFunc: (\n remainder: number[],\n remainderBinLen: number,\n processedBinLen: number,\n H: StateT,\n outputLen: number\n ) => number[];\n protected abstract readonly stateCloneFunc: (state: StateT) => StateT;\n protected abstract readonly newStateFunc: (variant: VariantT) => StateT;\n protected abstract readonly getMAC: ((options: { outputLen: number }) => number[]) | null;\n\n protected constructor(variant: VariantT, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n protected constructor(variant: VariantT, inputFormat: FormatNoTextType, options?: FixedLengthOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected constructor(variant: any, inputFormat: any, options?: any) {\n const inputOptions = options || {};\n this.inputFormat = inputFormat;\n\n this.utfType = inputOptions[\"encoding\"] || \"UTF8\";\n this.numRounds = inputOptions[\"numRounds\"] || 1;\n\n /* eslint-disable-next-line @typescript-eslint/ban-ts-comment */\n // @ts-ignore - The spec actually says ToString is called on the first parseInt argument so it's OK to use it here\n // to check if an arugment is an integer. This cheat would break if it's used to get the value of the argument.\n if (isNaN(this.numRounds) || this.numRounds !== parseInt(this.numRounds, 10) || 1 > this.numRounds) {\n throw new Error(\"numRounds must a integer >= 1\");\n }\n\n this.shaVariant = variant;\n this.remainder = [];\n this.remainderLen = 0;\n this.updateCalled = false;\n this.processedLen = 0;\n this.macKeySet = false;\n this.keyWithIPad = [];\n this.keyWithOPad = [];\n }\n\n /**\n * Hashes as many blocks as possible. Stores the rest for either a future update or getHash call.\n *\n * @param srcString The input to be hashed.\n * @returns A reference to the object.\n */\n update(srcString: string | ArrayBuffer | Uint8Array): this {\n let i,\n updateProcessedLen = 0;\n const variantBlockIntInc = this.variantBlockSize >>> 5,\n convertRet = this.converterFunc(srcString, this.remainder, this.remainderLen),\n chunkBinLen = convertRet[\"binLen\"],\n chunk = convertRet[\"value\"],\n chunkIntLen = chunkBinLen >>> 5;\n\n for (i = 0; i < chunkIntLen; i += variantBlockIntInc) {\n if (updateProcessedLen + this.variantBlockSize <= chunkBinLen) {\n this.intermediateState = this.roundFunc(chunk.slice(i, i + variantBlockIntInc), this.intermediateState);\n updateProcessedLen += this.variantBlockSize;\n }\n }\n this.processedLen += updateProcessedLen;\n this.remainder = chunk.slice(updateProcessedLen >>> 5);\n this.remainderLen = chunkBinLen % this.variantBlockSize;\n this.updateCalled = true;\n\n return this;\n }\n\n /**\n * Returns the desired SHA hash of the input fed in via `update` calls.\n *\n * @param format The desired output formatting\n * @param options Hashmap of output formatting options. `outputLen` must be specified for variable length hashes.\n * `outputLen` replaces the now deprecated `shakeLen` key.\n * @returns The hash in the format specified.\n */\n getHash(format: \"HEX\", options?: { outputUpper?: boolean; outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"B64\", options?: { b64Pad?: string; outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"BYTES\", options?: { outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"UINT8ARRAY\", options?: { outputLen?: number; shakeLen?: number }): Uint8Array;\n getHash(format: \"ARRAYBUFFER\", options?: { outputLen?: number; shakeLen?: number }): ArrayBuffer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getHash(format: any, options?: any): any {\n let i,\n finalizedState,\n outputBinLen = this.outputBinLen;\n\n const outputOptions = getOutputOpts(options);\n\n if (this.isVariableLen) {\n if (outputOptions[\"outputLen\"] === -1) {\n throw new Error(\"Output length must be specified in options\");\n }\n outputBinLen = outputOptions[\"outputLen\"];\n }\n\n const formatFunc = getOutputConverter(format, outputBinLen, this.bigEndianMod, outputOptions);\n if (this.macKeySet && this.getMAC) {\n return formatFunc(this.getMAC(outputOptions));\n }\n\n finalizedState = this.finalizeFunc(\n this.remainder.slice(),\n this.remainderLen,\n this.processedLen,\n this.stateCloneFunc(this.intermediateState),\n outputBinLen\n );\n for (i = 1; i < this.numRounds; i += 1) {\n /* Need to mask out bits that should be zero due to output not being a multiple of 32 */\n if (this.isVariableLen && outputBinLen % 32 !== 0) {\n finalizedState[finalizedState.length - 1] &= 0x00ffffff >>> (24 - (outputBinLen % 32));\n }\n finalizedState = this.finalizeFunc(\n finalizedState,\n outputBinLen,\n 0,\n this.newStateFunc(this.shaVariant),\n outputBinLen\n );\n }\n\n return formatFunc(finalizedState);\n }\n\n /**\n * Sets the HMAC key for an eventual `getHMAC` call. Must be called immediately after jsSHA object instantiation.\n *\n * @param key The key used to calculate the HMAC\n * @param inputFormat The format of key.\n * @param options Hashmap of extra input options.\n */\n setHMACKey(key: string, inputFormat: \"TEXT\", options?: { encoding?: EncodingType }): void;\n setHMACKey(key: string, inputFormat: \"B64\" | \"HEX\" | \"BYTES\"): void;\n setHMACKey(key: ArrayBuffer, inputFormat: \"ARRAYBUFFER\"): void;\n setHMACKey(key: Uint8Array, inputFormat: \"UINT8ARRAY\"): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setHMACKey(key: any, inputFormat: any, options?: any): void {\n if (!this.HMACSupported) {\n throw new Error(\"Variant does not support HMAC\");\n }\n\n if (this.updateCalled) {\n throw new Error(\"Cannot set MAC key after calling update\");\n }\n\n const keyOptions = options || {},\n keyConverterFunc = getStrConverter(inputFormat, keyOptions[\"encoding\"] || \"UTF8\", this.bigEndianMod);\n\n this._setHMACKey(keyConverterFunc(key));\n }\n\n /**\n * Internal function that sets the MAC key.\n *\n * @param key The packed MAC key to use\n */\n protected _setHMACKey(key: packedValue): void {\n const blockByteSize = this.variantBlockSize >>> 3,\n lastArrayIndex = blockByteSize / 4 - 1;\n let i;\n if (this.numRounds !== 1) {\n throw new Error(mac_rounds_error);\n }\n\n if (this.macKeySet) {\n throw new Error(\"MAC key already set\");\n }\n\n /* Figure out what to do with the key based on its size relative to\n * the hash's block size */\n if (blockByteSize < key[\"binLen\"] / 8) {\n key[\"value\"] = this.finalizeFunc(\n key[\"value\"],\n key[\"binLen\"],\n 0,\n this.newStateFunc(this.shaVariant),\n this.outputBinLen\n );\n }\n while (key[\"value\"].length <= lastArrayIndex) {\n key[\"value\"].push(0);\n }\n /* Create ipad and opad */\n for (i = 0; i <= lastArrayIndex; i += 1) {\n this.keyWithIPad[i] = key[\"value\"][i] ^ 0x36363636;\n this.keyWithOPad[i] = key[\"value\"][i] ^ 0x5c5c5c5c;\n }\n\n this.intermediateState = this.roundFunc(this.keyWithIPad, this.intermediateState);\n this.processedLen = this.variantBlockSize;\n\n this.macKeySet = true;\n }\n\n /**\n * Returns the the HMAC in the specified format using the key given by a previous `setHMACKey` call.\n *\n * @param format The desired output formatting.\n * @param options Hashmap of extra outputs options.\n * @returns The HMAC in the format specified.\n */\n getHMAC(format: \"HEX\", options?: { outputUpper?: boolean }): string;\n getHMAC(format: \"B64\", options?: { b64Pad?: string }): string;\n getHMAC(format: \"BYTES\"): string;\n getHMAC(format: \"UINT8ARRAY\"): Uint8Array;\n getHMAC(format: \"ARRAYBUFFER\"): ArrayBuffer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getHMAC(format: any, options?: any): any {\n const outputOptions = getOutputOpts(options),\n formatFunc = getOutputConverter(format, this.outputBinLen, this.bigEndianMod, outputOptions);\n\n return formatFunc(this._getHMAC());\n }\n\n /**\n * Internal function that returns the \"raw\" HMAC\n */\n protected _getHMAC(): number[] {\n let finalizedState;\n\n if (!this.macKeySet) {\n throw new Error(\"Cannot call getHMAC without first setting MAC key\");\n }\n\n const firstHash = this.finalizeFunc(\n this.remainder.slice(),\n this.remainderLen,\n this.processedLen,\n this.stateCloneFunc(this.intermediateState),\n this.outputBinLen\n );\n finalizedState = this.roundFunc(this.keyWithOPad, this.newStateFunc(this.shaVariant));\n finalizedState = this.finalizeFunc(\n firstHash,\n this.outputBinLen,\n this.variantBlockSize,\n finalizedState,\n this.outputBinLen\n );\n\n return finalizedState;\n }\n}\n", "/*\n * Note 1: All the functions in this file guarantee only that the bottom 32-bits of the return value are correct.\n * JavaScript is flakey when it comes to bit operations and a '1' in the highest order bit of a 32-bit number causes\n * it to be interpreted as a negative number per two's complement.\n *\n * Note 2: Per the ECMAScript spec, all JavaScript operations mask the shift amount by 0x1F. This results in weird\n * cases like 1 << 32 == 1 and 1 << 33 === 1 << 1 === 2\n */\n\n/**\n * The 32-bit implementation of circular rotate left.\n *\n * @param x The 32-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted left circularly by `n` bits\n */\nexport function rotl_32(x: number, n: number): number {\n return (x << n) | (x >>> (32 - n));\n}\n\n/**\n * The 32-bit implementation of circular rotate right.\n *\n * @param x The 32-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted right circularly by `n` bits\n */\nfunction rotr_32(x: number, n: number): number {\n return (x >>> n) | (x << (32 - n));\n}\n\n/**\n * The 32-bit implementation of shift right.\n *\n * @param x The 32-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted by `n` bits.\n */\nfunction shr_32(x: number, n: number): number {\n return x >>> n;\n}\n\n/**\n * The 32-bit implementation of the NIST specified Parity function.\n *\n * @param x The first 32-bit integer argument.\n * @param y The second 32-bit integer argument.\n * @param z The third 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function parity_32(x: number, y: number, z: number): number {\n return x ^ y ^ z;\n}\n\n/**\n * The 32-bit implementation of the NIST specified Ch function.\n *\n * @param x The first 32-bit integer argument.\n * @param y The second 32-bit integer argument.\n * @param z The third 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function ch_32(x: number, y: number, z: number): number {\n return (x & y) ^ (~x & z);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Maj function.\n *\n * @param x The first 32-bit integer argument.\n * @param y The second 32-bit integer argument.\n * @param z The third 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function maj_32(x: number, y: number, z: number): number {\n return (x & y) ^ (x & z) ^ (y & z);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Sigma0 function.\n *\n * @param x The 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function sigma0_32(x: number): number {\n return rotr_32(x, 2) ^ rotr_32(x, 13) ^ rotr_32(x, 22);\n}\n\n/**\n * Add two 32-bit integers.\n *\n * This uses 16-bit operations internally to work around sign problems due to JavaScript's lack of uint32 support.\n *\n * @param a The first 32-bit integer argument to be added.\n * @param b The second 32-bit integer argument to be added.\n * @returns The sum of `a` + `b`.\n */\nexport function safeAdd_32_2(a: number, b: number): number {\n const lsw = (a & 0xffff) + (b & 0xffff),\n msw = (a >>> 16) + (b >>> 16) + (lsw >>> 16);\n\n return ((msw & 0xffff) << 16) | (lsw & 0xffff);\n}\n\n/**\n * Add four 32-bit integers.\n *\n * This uses 16-bit operations internally to work around sign problems due to JavaScript's lack of uint32 support.\n *\n * @param a The first 32-bit integer argument to be added.\n * @param b The second 32-bit integer argument to be added.\n * @param c The third 32-bit integer argument to be added.\n * @param d The fourth 32-bit integer argument to be added.\n * @returns The sum of `a` + `b` + `c` + `d`.\n */\nexport function safeAdd_32_4(a: number, b: number, c: number, d: number): number {\n const lsw = (a & 0xffff) + (b & 0xffff) + (c & 0xffff) + (d & 0xffff),\n msw = (a >>> 16) + (b >>> 16) + (c >>> 16) + (d >>> 16) + (lsw >>> 16);\n\n return ((msw & 0xffff) << 16) | (lsw & 0xffff);\n}\n\n/**\n * Add five 32-bit integers.\n *\n * This uses 16-bit operations internally to work around sign problems due to JavaScript's lack of uint32 support.\n *\n * @param a The first 32-bit integer argument to be added.\n * @param b The second 32-bit integer argument to be added.\n * @param c The third 32-bit integer argument to be added.\n * @param d The fourth 32-bit integer argument to be added.\n * @param e The fifth 32-bit integer argument to be added.\n * @returns The sum of `a` + `b` + `c` + `d` + `e`.\n */\nexport function safeAdd_32_5(a: number, b: number, c: number, d: number, e: number): number {\n const lsw = (a & 0xffff) + (b & 0xffff) + (c & 0xffff) + (d & 0xffff) + (e & 0xffff),\n msw = (a >>> 16) + (b >>> 16) + (c >>> 16) + (d >>> 16) + (e >>> 16) + (lsw >>> 16);\n\n return ((msw & 0xffff) << 16) | (lsw & 0xffff);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Gamma1 function.\n *\n * @param x The 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function gamma1_32(x: number): number {\n return rotr_32(x, 17) ^ rotr_32(x, 19) ^ shr_32(x, 10);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Gamma0 function.\n *\n * @param x The 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function gamma0_32(x: number): number {\n return rotr_32(x, 7) ^ rotr_32(x, 18) ^ shr_32(x, 3);\n}\n\n/**\n * The 32-bit implementation of the NIST specified Sigma1 function.\n *\n * @param x The 32-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function sigma1_32(x: number): number {\n return rotr_32(x, 6) ^ rotr_32(x, 11) ^ rotr_32(x, 25);\n}\n", "import { jsSHABase, TWO_PWR_32, sha_variant_error, parseInputOption } from \"./common\";\nimport {\n packedValue,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n} from \"./custom_types\";\nimport { getStrConverter } from \"./converters\";\nimport { ch_32, parity_32, maj_32, rotl_32, safeAdd_32_2, safeAdd_32_5 } from \"./primitives_32\";\n\n/**\n * Gets the state values for the specified SHA variant.\n *\n * @param _variant: Unused\n * @returns The initial state values.\n */\nfunction getNewState(_variant: \"SHA-1\"): number[] {\n return [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n}\n\n/**\n * Performs a round of SHA-1 hashing over a 512-byte block. This clobbers `H`.\n *\n * @param block The binary array representation of the block to hash.\n * @param H The intermediate H values from a previous round.\n * @returns The resulting H values.\n */\nfunction roundSHA1(block: number[], H: number[]): number[] {\n let a, b, c, d, e, T, t;\n const W: number[] = [];\n\n a = H[0];\n b = H[1];\n c = H[2];\n d = H[3];\n e = H[4];\n\n for (t = 0; t < 80; t += 1) {\n if (t < 16) {\n W[t] = block[t];\n } else {\n W[t] = rotl_32(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n if (t < 20) {\n T = safeAdd_32_5(rotl_32(a, 5), ch_32(b, c, d), e, 0x5a827999, W[t]);\n } else if (t < 40) {\n T = safeAdd_32_5(rotl_32(a, 5), parity_32(b, c, d), e, 0x6ed9eba1, W[t]);\n } else if (t < 60) {\n T = safeAdd_32_5(rotl_32(a, 5), maj_32(b, c, d), e, 0x8f1bbcdc, W[t]);\n } else {\n T = safeAdd_32_5(rotl_32(a, 5), parity_32(b, c, d), e, 0xca62c1d6, W[t]);\n }\n\n e = d;\n d = c;\n c = rotl_32(b, 30);\n b = a;\n a = T;\n }\n\n H[0] = safeAdd_32_2(a, H[0]);\n H[1] = safeAdd_32_2(b, H[1]);\n H[2] = safeAdd_32_2(c, H[2]);\n H[3] = safeAdd_32_2(d, H[3]);\n H[4] = safeAdd_32_2(e, H[4]);\n\n return H;\n}\n\n/**\n * Finalizes the SHA-1 hash. This clobbers `remainder` and `H`.\n *\n * @param remainder Any leftover unprocessed packed ints that still need to be processed.\n * @param remainderBinLen The number of bits in `remainder`.\n * @param processedBinLen The number of bits already processed.\n * @param H The intermediate H values from a previous round.\n * @returns The array of integers representing the SHA-1 hash of message.\n */\nfunction finalizeSHA1(remainder: number[], remainderBinLen: number, processedBinLen: number, H: number[]): number[] {\n let i;\n\n /* The 65 addition is a hack but it works. The correct number is\n\t\tactually 72 (64 + 8) but the below math fails if\n\t\tremainderBinLen + 72 % 512 = 0. Since remainderBinLen % 8 = 0,\n\t\t\"shorting\" the addition is OK. */\n const offset = (((remainderBinLen + 65) >>> 9) << 4) + 15,\n totalLen = remainderBinLen + processedBinLen;\n while (remainder.length <= offset) {\n remainder.push(0);\n }\n /* Append '1' at the end of the binary string */\n remainder[remainderBinLen >>> 5] |= 0x80 << (24 - (remainderBinLen % 32));\n\n /* Append length of binary string in the position such that the new\n * length is a multiple of 512. Logic does not work for even multiples\n * of 512 but there can never be even multiples of 512. JavaScript\n * numbers are limited to 2^53 so it's \"safe\" to treat the totalLen as\n * a 64-bit integer. */\n remainder[offset] = totalLen & 0xffffffff;\n\n /* Bitwise operators treat the operand as a 32-bit number so need to\n * use hacky division and round to get access to upper 32-ish bits */\n remainder[offset - 1] = (totalLen / TWO_PWR_32) | 0;\n\n /* This will always be at least 1 full chunk */\n for (i = 0; i < remainder.length; i += 16) {\n H = roundSHA1(remainder.slice(i, i + 16), H);\n }\n\n return H;\n}\n\nexport default class jsSHA extends jsSHABase<number[], \"SHA-1\"> {\n intermediateState: number[];\n variantBlockSize: number;\n bigEndianMod: -1 | 1;\n outputBinLen: number;\n isVariableLen: boolean;\n HMACSupported: boolean;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n roundFunc: (block: number[], H: number[]) => number[];\n finalizeFunc: (remainder: number[], remainderBinLen: number, processedBinLen: number, H: number[]) => number[];\n stateCloneFunc: (state: number[]) => number[];\n newStateFunc: (variant: \"SHA-1\") => number[];\n getMAC: () => number[];\n\n constructor(variant: \"SHA-1\", inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(variant: \"SHA-1\", inputFormat: FormatNoTextType, options?: FixedLengthOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n if (\"SHA-1\" !== variant) {\n throw new Error(sha_variant_error);\n }\n super(variant, inputFormat, options);\n const resolvedOptions = options || {};\n\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n this.bigEndianMod = -1;\n this.converterFunc = getStrConverter(this.inputFormat, this.utfType, this.bigEndianMod);\n this.roundFunc = roundSHA1;\n this.stateCloneFunc = function (state: number[]): number[] {\n return state.slice();\n };\n this.newStateFunc = getNewState;\n this.finalizeFunc = finalizeSHA1;\n\n this.intermediateState = getNewState(variant);\n this.variantBlockSize = 512;\n this.outputBinLen = 160;\n this.isVariableLen = false;\n\n if (resolvedOptions[\"hmacKey\"]) {\n this._setHMACKey(parseInputOption(\"hmacKey\", resolvedOptions[\"hmacKey\"], this.bigEndianMod));\n }\n }\n}\n", "import { jsSHABase, TWO_PWR_32, H_full, H_trunc, K_sha2, sha_variant_error, parseInputOption } from \"./common\";\nimport {\n packedValue,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n} from \"./custom_types\";\nimport { getStrConverter } from \"./converters\";\nimport {\n ch_32,\n gamma0_32,\n gamma1_32,\n maj_32,\n safeAdd_32_2,\n safeAdd_32_4,\n safeAdd_32_5,\n sigma0_32,\n sigma1_32,\n} from \"./primitives_32\";\n\ntype VariantType = \"SHA-224\" | \"SHA-256\";\n\n/**\n * Gets the state values for the specified SHA variant.\n *\n * @param variant: The SHA-256 family variant.\n * @returns The initial state values.\n */\nfunction getNewState256(variant: VariantType): number[] {\n let retVal;\n\n if (\"SHA-224\" == variant) {\n retVal = H_trunc.slice();\n } else {\n /* \"SHA-256\" */\n retVal = H_full.slice();\n }\n return retVal;\n}\n\n/**\n * Performs a round of SHA-256 hashing over a block. This clobbers `H`.\n *\n * @param block The binary array representation of the block to hash.\n * @param H The intermediate H values from a previous round.\n * @returns The resulting H values.\n */\nfunction roundSHA256(block: number[], H: number[]): number[] {\n let a, b, c, d, e, f, g, h, T1, T2, t;\n\n const W: number[] = [];\n\n a = H[0];\n b = H[1];\n c = H[2];\n d = H[3];\n e = H[4];\n f = H[5];\n g = H[6];\n h = H[7];\n\n for (t = 0; t < 64; t += 1) {\n if (t < 16) {\n W[t] = block[t];\n } else {\n W[t] = safeAdd_32_4(gamma1_32(W[t - 2]), W[t - 7], gamma0_32(W[t - 15]), W[t - 16]);\n }\n T1 = safeAdd_32_5(h, sigma1_32(e), ch_32(e, f, g), K_sha2[t], W[t]);\n T2 = safeAdd_32_2(sigma0_32(a), maj_32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = safeAdd_32_2(d, T1);\n d = c;\n c = b;\n b = a;\n a = safeAdd_32_2(T1, T2);\n }\n\n H[0] = safeAdd_32_2(a, H[0]);\n H[1] = safeAdd_32_2(b, H[1]);\n H[2] = safeAdd_32_2(c, H[2]);\n H[3] = safeAdd_32_2(d, H[3]);\n H[4] = safeAdd_32_2(e, H[4]);\n H[5] = safeAdd_32_2(f, H[5]);\n H[6] = safeAdd_32_2(g, H[6]);\n H[7] = safeAdd_32_2(h, H[7]);\n\n return H;\n}\n\n/**\n * Finalizes the SHA-256 hash. This clobbers `remainder` and `H`.\n *\n * @param remainder Any leftover unprocessed packed ints that still need to be processed.\n * @param remainderBinLen The number of bits in `remainder`.\n * @param processedBinLen The number of bits already processed.\n * @param H The intermediate H values from a previous round.\n * @param variant The desired SHA-256 variant.\n * @returns The array of integers representing the SHA-2 hash of message.\n */\nfunction finalizeSHA256(\n remainder: number[],\n remainderBinLen: number,\n processedBinLen: number,\n H: number[],\n variant: VariantType\n): number[] {\n let i, retVal;\n\n /* The 65 addition is a hack but it works. The correct number is\n actually 72 (64 + 8) but the below math fails if\n remainderBinLen + 72 % 512 = 0. Since remainderBinLen % 8 = 0,\n \"shorting\" the addition is OK. */\n const offset = (((remainderBinLen + 65) >>> 9) << 4) + 15,\n binaryStringInc = 16,\n totalLen = remainderBinLen + processedBinLen;\n\n while (remainder.length <= offset) {\n remainder.push(0);\n }\n /* Append '1' at the end of the binary string */\n remainder[remainderBinLen >>> 5] |= 0x80 << (24 - (remainderBinLen % 32));\n /* Append length of binary string in the position such that the new\n * length is correct. JavaScript numbers are limited to 2^53 so it's\n * \"safe\" to treat the totalLen as a 64-bit integer. */\n\n remainder[offset] = totalLen & 0xffffffff;\n /* Bitwise operators treat the operand as a 32-bit number so need to\n * use hacky division and round to get access to upper 32-ish bits */\n remainder[offset - 1] = (totalLen / TWO_PWR_32) | 0;\n\n /* This will always be at least 1 full chunk */\n for (i = 0; i < remainder.length; i += binaryStringInc) {\n H = roundSHA256(remainder.slice(i, i + binaryStringInc), H);\n }\n\n if (\"SHA-224\" === variant) {\n retVal = [H[0], H[1], H[2], H[3], H[4], H[5], H[6]];\n } else {\n /* \"SHA-256 */\n retVal = H;\n }\n\n return retVal;\n}\nexport default class jsSHA extends jsSHABase<number[], VariantType> {\n intermediateState: number[];\n variantBlockSize: number;\n bigEndianMod: -1 | 1;\n outputBinLen: number;\n isVariableLen: boolean;\n HMACSupported: boolean;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n roundFunc: (block: number[], H: number[]) => number[];\n finalizeFunc: (remainder: number[], remainderBinLen: number, processedBinLen: number, H: number[]) => number[];\n stateCloneFunc: (state: number[]) => number[];\n newStateFunc: (variant: VariantType) => number[];\n getMAC: () => number[];\n\n constructor(variant: VariantType, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(variant: VariantType, inputFormat: FormatNoTextType, options?: FixedLengthOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n if (!(\"SHA-224\" === variant || \"SHA-256\" === variant)) {\n throw new Error(sha_variant_error);\n }\n super(variant, inputFormat, options);\n const resolvedOptions = options || {};\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n this.HMACSupported = true;\n this.bigEndianMod = -1;\n this.converterFunc = getStrConverter(this.inputFormat, this.utfType, this.bigEndianMod);\n this.roundFunc = roundSHA256;\n this.stateCloneFunc = function (state): number[] {\n return state.slice();\n };\n\n this.newStateFunc = getNewState256;\n this.finalizeFunc = function (remainder, remainderBinLen, processedBinLen, H): number[] {\n return finalizeSHA256(remainder, remainderBinLen, processedBinLen, H, variant);\n };\n\n this.intermediateState = getNewState256(variant);\n this.variantBlockSize = 512;\n this.outputBinLen = \"SHA-224\" === variant ? 224 : 256;\n this.isVariableLen = false;\n\n if (resolvedOptions[\"hmacKey\"]) {\n this._setHMACKey(parseInputOption(\"hmacKey\", resolvedOptions[\"hmacKey\"], this.bigEndianMod));\n }\n }\n}\n", "/*\n * Note 1: All the functions in this file guarantee only that the bottom 32-bits of the returned Int_64 are correct.\n * JavaScript is flakey when it comes to bit operations and a '1' in the highest order bit of a 32-bit number causes\n * it to be interpreted as a negative number per two's complement.\n *\n * Note 2: Per the ECMAScript spec, all JavaScript operations mask the shift amount by 0x1F. This results in weird\n * cases like 1 << 32 == 1 and 1 << 33 === 1 << 1 === 2\n */\n\n/**\n * Int_64 is a object for 2 32-bit numbers emulating a 64-bit number.\n */\nexport class Int_64 {\n /**\n * @param msint_32 The most significant 32-bits of a 64-bit number.\n * @param lsint_32 The least significant 32-bits of a 64-bit number.\n */\n readonly highOrder: number;\n readonly lowOrder: number;\n constructor(msint_32: number, lsint_32: number) {\n this.highOrder = msint_32;\n this.lowOrder = lsint_32;\n }\n}\n\n/**\n * The 64-bit implementation of circular rotate left.\n *\n * This does not work for n >= 64 or n == 32 but those are never done.\n *\n * @param x The 64-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted left circularly by `n` bits.\n */\nexport function rotl_64(x: Int_64, n: number): Int_64 {\n let tmp;\n if (n > 32) {\n tmp = 64 - n;\n return new Int_64((x.lowOrder << n) | (x.highOrder >>> tmp), (x.highOrder << n) | (x.lowOrder >>> tmp));\n } else if (0 !== n) {\n tmp = 32 - n;\n return new Int_64((x.highOrder << n) | (x.lowOrder >>> tmp), (x.lowOrder << n) | (x.highOrder >>> tmp));\n } else {\n return x;\n }\n}\n\n/**\n * The 64-bit implementation of circular rotate right.\n *\n * This does not work for n >= 64, n == 32, or n == 0 but those are never done.\n *\n * @param x The 64-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted right circularly by `n` bits.\n */\nfunction rotr_64(x: Int_64, n: number): Int_64 {\n let tmp;\n if (n < 32) {\n tmp = 32 - n;\n return new Int_64((x.highOrder >>> n) | (x.lowOrder << tmp), (x.lowOrder >>> n) | (x.highOrder << tmp));\n } else {\n tmp = 64 - n;\n return new Int_64((x.lowOrder >>> n) | (x.highOrder << tmp), (x.highOrder >>> n) | (x.lowOrder << tmp));\n }\n}\n\n/**\n * The 64-bit implementation of shift right.\n *\n * This does not work for n >= 32 but is only called for n < 32.\n *\n * @param x The 64-bit integer argument.\n * @param n The number of bits to shift.\n * @returns `x` shifted right by `n` bits\n */\nfunction shr_64(x: Int_64, n: number): Int_64 {\n return new Int_64(x.highOrder >>> n, (x.lowOrder >>> n) | (x.highOrder << (32 - n)));\n}\n\n/**\n * The 64-bit implementation of the NIST specified Ch function.\n *\n * @param x The first 64-bit integer argument.\n * @param y The second 64-bit integer argument.\n * @param z The third 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function ch_64(x: Int_64, y: Int_64, z: Int_64): Int_64 {\n return new Int_64(\n (x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),\n (x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Maj function.\n *\n * @param x The first 64-bit integer argument.\n * @param y The second 64-bit integer argument.\n * @param z The third 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function maj_64(x: Int_64, y: Int_64, z: Int_64): Int_64 {\n return new Int_64(\n (x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),\n (x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Sigma0 function.\n *\n * @param x The 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function sigma0_64(x: Int_64): Int_64 {\n const rotr28 = rotr_64(x, 28),\n rotr34 = rotr_64(x, 34),\n rotr39 = rotr_64(x, 39);\n\n return new Int_64(\n rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,\n rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder\n );\n}\n\n/**\n * Add two 64-bit integers.\n *\n * @param x The first 64-bit integer argument to be added.\n * @param y The second 64-bit integer argument to be added.\n * @returns The sum of `x` + `y`.\n */\nexport function safeAdd_64_2(x: Int_64, y: Int_64): Int_64 {\n let lsw, msw;\n\n lsw = (x.lowOrder & 0xffff) + (y.lowOrder & 0xffff);\n msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);\n const lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n lsw = (x.highOrder & 0xffff) + (y.highOrder & 0xffff) + (msw >>> 16);\n msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);\n const highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n return new Int_64(highOrder, lowOrder);\n}\n\n/**\n * Add four 64-bit integers.\n *\n * @param a The first 64-bit integer argument to be added.\n * @param b The second 64-bit integer argument to be added.\n * @param c The third 64-bit integer argument to be added.\n * @param d The fouth 64-bit integer argument to be added.\n * @returns The sum of `a` + `b` + `c` + `d`.\n */\nexport function safeAdd_64_4(a: Int_64, b: Int_64, c: Int_64, d: Int_64): Int_64 {\n let lsw, msw;\n\n lsw = (a.lowOrder & 0xffff) + (b.lowOrder & 0xffff) + (c.lowOrder & 0xffff) + (d.lowOrder & 0xffff);\n msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);\n const lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n lsw =\n (a.highOrder & 0xffff) + (b.highOrder & 0xffff) + (c.highOrder & 0xffff) + (d.highOrder & 0xffff) + (msw >>> 16);\n msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);\n const highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n return new Int_64(highOrder, lowOrder);\n}\n\n/**\n * Add five 64-bit integers.\n *\n * @param a The first 64-bit integer argument to be added.\n * @param b The second 64-bit integer argument to be added.\n * @param c The third 64-bit integer argument to be added.\n * @param d The fouth 64-bit integer argument to be added.\n * @param e The fifth 64-bit integer argument to be added.\n * @returns The sum of `a` + `b` + `c` + `d` + `e`.\n */\nexport function safeAdd_64_5(a: Int_64, b: Int_64, c: Int_64, d: Int_64, e: Int_64): Int_64 {\n let lsw, msw;\n\n lsw =\n (a.lowOrder & 0xffff) +\n (b.lowOrder & 0xffff) +\n (c.lowOrder & 0xffff) +\n (d.lowOrder & 0xffff) +\n (e.lowOrder & 0xffff);\n msw =\n (a.lowOrder >>> 16) +\n (b.lowOrder >>> 16) +\n (c.lowOrder >>> 16) +\n (d.lowOrder >>> 16) +\n (e.lowOrder >>> 16) +\n (lsw >>> 16);\n const lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n lsw =\n (a.highOrder & 0xffff) +\n (b.highOrder & 0xffff) +\n (c.highOrder & 0xffff) +\n (d.highOrder & 0xffff) +\n (e.highOrder & 0xffff) +\n (msw >>> 16);\n msw =\n (a.highOrder >>> 16) +\n (b.highOrder >>> 16) +\n (c.highOrder >>> 16) +\n (d.highOrder >>> 16) +\n (e.highOrder >>> 16) +\n (lsw >>> 16);\n const highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);\n\n return new Int_64(highOrder, lowOrder);\n}\n\n/**\n * XORs two given arguments.\n *\n * @param a The first argument to be XORed.\n * @param b The second argument to be XORed.\n * @returns The The XOR `a` and `b`\n */\nexport function xor_64_2(a: Int_64, b: Int_64): Int_64 {\n return new Int_64(a.highOrder ^ b.highOrder, a.lowOrder ^ b.lowOrder);\n}\n\n/**\n * XORs five given arguments.\n *\n * @param a The first argument to be XORed.\n * @param b The second argument to be XORed.\n * @param c The third argument to be XORed.\n * @param d The fourth argument to be XORed.\n * @param e The fifth argument to be XORed.\n * @returns The XOR of `a`, `b`, `c`, `d`, and `e`.\n */\nexport function xor_64_5(a: Int_64, b: Int_64, c: Int_64, d: Int_64, e: Int_64): Int_64 {\n return new Int_64(\n a.highOrder ^ b.highOrder ^ c.highOrder ^ d.highOrder ^ e.highOrder,\n a.lowOrder ^ b.lowOrder ^ c.lowOrder ^ d.lowOrder ^ e.lowOrder\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Gamma1 function.\n *\n * @param x The 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function gamma1_64(x: Int_64): Int_64 {\n const rotr19 = rotr_64(x, 19),\n rotr61 = rotr_64(x, 61),\n shr6 = shr_64(x, 6);\n\n return new Int_64(\n rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,\n rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Gamma0 function.\n *\n * @param x The 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function gamma0_64(x: Int_64): Int_64 {\n const rotr1 = rotr_64(x, 1),\n rotr8 = rotr_64(x, 8),\n shr7 = shr_64(x, 7);\n\n return new Int_64(\n rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,\n rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder\n );\n}\n\n/**\n * The 64-bit implementation of the NIST specified Sigma1 function.\n *\n * @param x The 64-bit integer argument.\n * @returns The NIST specified output of the function.\n */\nexport function sigma1_64(x: Int_64): Int_64 {\n const rotr14 = rotr_64(x, 14),\n rotr18 = rotr_64(x, 18),\n rotr41 = rotr_64(x, 41);\n\n return new Int_64(\n rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,\n rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder\n );\n}\n", "import { jsSHABase, TWO_PWR_32, H_trunc, H_full, K_sha2, sha_variant_error, parseInputOption } from \"./common\";\nimport {\n packedValue,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n} from \"./custom_types\";\nimport { getStrConverter } from \"./converters\";\nimport {\n ch_64,\n gamma0_64,\n gamma1_64,\n Int_64,\n maj_64,\n safeAdd_64_2,\n safeAdd_64_4,\n safeAdd_64_5,\n sigma0_64,\n sigma1_64,\n} from \"./primitives_64\";\n\ntype VariantType = \"SHA-384\" | \"SHA-512\";\n\nconst K_sha512 = [\n new Int_64(K_sha2[0], 0xd728ae22),\n new Int_64(K_sha2[1], 0x23ef65cd),\n new Int_64(K_sha2[2], 0xec4d3b2f),\n new Int_64(K_sha2[3], 0x8189dbbc),\n new Int_64(K_sha2[4], 0xf348b538),\n new Int_64(K_sha2[5], 0xb605d019),\n new Int_64(K_sha2[6], 0xaf194f9b),\n new Int_64(K_sha2[7], 0xda6d8118),\n new Int_64(K_sha2[8], 0xa3030242),\n new Int_64(K_sha2[9], 0x45706fbe),\n new Int_64(K_sha2[10], 0x4ee4b28c),\n new Int_64(K_sha2[11], 0xd5ffb4e2),\n new Int_64(K_sha2[12], 0xf27b896f),\n new Int_64(K_sha2[13], 0x3b1696b1),\n new Int_64(K_sha2[14], 0x25c71235),\n new Int_64(K_sha2[15], 0xcf692694),\n new Int_64(K_sha2[16], 0x9ef14ad2),\n new Int_64(K_sha2[17], 0x384f25e3),\n new Int_64(K_sha2[18], 0x8b8cd5b5),\n new Int_64(K_sha2[19], 0x77ac9c65),\n new Int_64(K_sha2[20], 0x592b0275),\n new Int_64(K_sha2[21], 0x6ea6e483),\n new Int_64(K_sha2[22], 0xbd41fbd4),\n new Int_64(K_sha2[23], 0x831153b5),\n new Int_64(K_sha2[24], 0xee66dfab),\n new Int_64(K_sha2[25], 0x2db43210),\n new Int_64(K_sha2[26], 0x98fb213f),\n new Int_64(K_sha2[27], 0xbeef0ee4),\n new Int_64(K_sha2[28], 0x3da88fc2),\n new Int_64(K_sha2[29], 0x930aa725),\n new Int_64(K_sha2[30], 0xe003826f),\n new Int_64(K_sha2[31], 0x0a0e6e70),\n new Int_64(K_sha2[32], 0x46d22ffc),\n new Int_64(K_sha2[33], 0x5c26c926),\n new Int_64(K_sha2[34], 0x5ac42aed),\n new Int_64(K_sha2[35], 0x9d95b3df),\n new Int_64(K_sha2[36], 0x8baf63de),\n new Int_64(K_sha2[37], 0x3c77b2a8),\n new Int_64(K_sha2[38], 0x47edaee6),\n new Int_64(K_sha2[39], 0x1482353b),\n new Int_64(K_sha2[40], 0x4cf10364),\n new Int_64(K_sha2[41], 0xbc423001),\n new Int_64(K_sha2[42], 0xd0f89791),\n new Int_64(K_sha2[43], 0x0654be30),\n new Int_64(K_sha2[44], 0xd6ef5218),\n new Int_64(K_sha2[45], 0x5565a910),\n new Int_64(K_sha2[46], 0x5771202a),\n new Int_64(K_sha2[47], 0x32bbd1b8),\n new Int_64(K_sha2[48], 0xb8d2d0c8),\n new Int_64(K_sha2[49], 0x5141ab53),\n new Int_64(K_sha2[50], 0xdf8eeb99),\n new Int_64(K_sha2[51], 0xe19b48a8),\n new Int_64(K_sha2[52], 0xc5c95a63),\n new Int_64(K_sha2[53], 0xe3418acb),\n new Int_64(K_sha2[54], 0x7763e373),\n new Int_64(K_sha2[55], 0xd6b2b8a3),\n new Int_64(K_sha2[56], 0x5defb2fc),\n new Int_64(K_sha2[57], 0x43172f60),\n new Int_64(K_sha2[58], 0xa1f0ab72),\n new Int_64(K_sha2[59], 0x1a6439ec),\n new Int_64(K_sha2[60], 0x23631e28),\n new Int_64(K_sha2[61], 0xde82bde9),\n new Int_64(K_sha2[62], 0xb2c67915),\n new Int_64(K_sha2[63], 0xe372532b),\n new Int_64(0xca273ece, 0xea26619c),\n new Int_64(0xd186b8c7, 0x21c0c207),\n new Int_64(0xeada7dd6, 0xcde0eb1e),\n new Int_64(0xf57d4f7f, 0xee6ed178),\n new Int_64(0x06f067aa, 0x72176fba),\n new Int_64(0x0a637dc5, 0xa2c898a6),\n new Int_64(0x113f9804, 0xbef90dae),\n new Int_64(0x1b710b35, 0x131c471b),\n new Int_64(0x28db77f5, 0x23047d84),\n new Int_64(0x32caab7b, 0x40c72493),\n new Int_64(0x3c9ebe0a, 0x15c9bebc),\n new Int_64(0x431d67c4, 0x9c100d4c),\n new Int_64(0x4cc5d4be, 0xcb3e42b6),\n new Int_64(0x597f299c, 0xfc657e2a),\n new Int_64(0x5fcb6fab, 0x3ad6faec),\n new Int_64(0x6c44198c, 0x4a475817),\n];\n\n/**\n * Gets the state values for the specified SHA variant.\n *\n * @param variant: The SHA-512 family variant.\n * @returns The initial state values.\n */\nfunction getNewState512(variant: VariantType): Int_64[] {\n if (\"SHA-384\" === variant) {\n return [\n new Int_64(0xcbbb9d5d, H_trunc[0]),\n new Int_64(0x0629a292a, H_trunc[1]),\n new Int_64(0x9159015a, H_trunc[2]),\n new Int_64(0x0152fecd8, H_trunc[3]),\n new Int_64(0x67332667, H_trunc[4]),\n new Int_64(0x98eb44a87, H_trunc[5]),\n new Int_64(0xdb0c2e0d, H_trunc[6]),\n new Int_64(0x047b5481d, H_trunc[7]),\n ];\n } else {\n /* SHA-512 */\n return [\n new Int_64(H_full[0], 0xf3bcc908),\n new Int_64(H_full[1], 0x84caa73b),\n new Int_64(H_full[2], 0xfe94f82b),\n new Int_64(H_full[3], 0x5f1d36f1),\n new Int_64(H_full[4], 0xade682d1),\n new Int_64(H_full[5], 0x2b3e6c1f),\n new Int_64(H_full[6], 0xfb41bd6b),\n new Int_64(H_full[7], 0x137e2179),\n ];\n }\n}\n\n/**\n * Performs a round of SHA-512 hashing over a block. This clobbers `H`.\n *\n * @param block The binary array representation of the block to hash.\n * @param H The intermediate H values from a previous round.\n * @returns The resulting H values.\n */\nfunction roundSHA512(block: number[], H: Int_64[]): Int_64[] {\n let a, b, c, d, e, f, g, h, T1, T2, t, offset;\n\n const W: Int_64[] = [];\n\n a = H[0];\n b = H[1];\n c = H[2];\n d = H[3];\n e = H[4];\n f = H[5];\n g = H[6];\n h = H[7];\n\n for (t = 0; t < 80; t += 1) {\n if (t < 16) {\n offset = t * 2;\n W[t] = new Int_64(block[offset], block[offset + 1]);\n } else {\n W[t] = safeAdd_64_4(gamma1_64(W[t - 2]), W[t - 7], gamma0_64(W[t - 15]), W[t - 16]);\n }\n T1 = safeAdd_64_5(h, sigma1_64(e), ch_64(e, f, g), K_sha512[t], W[t]);\n T2 = safeAdd_64_2(sigma0_64(a), maj_64(a, b, c));\n h = g;\n g = f;\n f = e;\n e = safeAdd_64_2(d, T1);\n d = c;\n c = b;\n b = a;\n a = safeAdd_64_2(T1, T2);\n }\n\n H[0] = safeAdd_64_2(a, H[0]);\n H[1] = safeAdd_64_2(b, H[1]);\n H[2] = safeAdd_64_2(c, H[2]);\n H[3] = safeAdd_64_2(d, H[3]);\n H[4] = safeAdd_64_2(e, H[4]);\n H[5] = safeAdd_64_2(f, H[5]);\n H[6] = safeAdd_64_2(g, H[6]);\n H[7] = safeAdd_64_2(h, H[7]);\n\n return H;\n}\n\n/**\n * Finalizes the SHA-512 hash. This clobbers `remainder` and `H`.\n *\n * @param remainder Any leftover unprocessed packed ints that still need to be processed.\n * @param remainderBinLen The number of bits in `remainder`.\n * @param processedBinLen The number of bits already processed.\n * @param H The intermediate H values from a previous round.\n * @param variant The desired SHA-512 variant.\n * @returns The array of integers representing the SHA-512 hash of message.\n */\nfunction finalizeSHA512(\n remainder: number[],\n remainderBinLen: number,\n processedBinLen: number,\n H: Int_64[],\n variant: VariantType\n): number[] {\n let i, retVal;\n\n /* The 129 addition is a hack but it works. The correct number is\n actually 136 (128 + 8) but the below math fails if\n remainderBinLen + 136 % 1024 = 0. Since remainderBinLen % 8 = 0,\n \"shorting\" the addition is OK. */\n const offset = (((remainderBinLen + 129) >>> 10) << 5) + 31,\n binaryStringInc = 32,\n totalLen = remainderBinLen + processedBinLen;\n\n while (remainder.length <= offset) {\n remainder.push(0);\n }\n /* Append '1' at the end of the binary string */\n remainder[remainderBinLen >>> 5] |= 0x80 << (24 - (remainderBinLen % 32));\n /* Append length of binary string in the position such that the new\n * length is correct. JavaScript numbers are limited to 2^53 so it's\n * \"safe\" to treat the totalLen as a 64-bit integer. */\n\n remainder[offset] = totalLen & 0xffffffff;\n /* Bitwise operators treat the operand as a 32-bit number so need to\n * use hacky division and round to get access to upper 32-ish bits */\n remainder[offset - 1] = (totalLen / TWO_PWR_32) | 0;\n\n /* This will always be at least 1 full chunk */\n for (i = 0; i < remainder.length; i += binaryStringInc) {\n H = roundSHA512(remainder.slice(i, i + binaryStringInc), H);\n }\n\n if (\"SHA-384\" === variant) {\n H = (H as unknown) as Int_64[];\n retVal = [\n H[0].highOrder,\n H[0].lowOrder,\n H[1].highOrder,\n H[1].lowOrder,\n H[2].highOrder,\n H[2].lowOrder,\n H[3].highOrder,\n H[3].lowOrder,\n H[4].highOrder,\n H[4].lowOrder,\n H[5].highOrder,\n H[5].lowOrder,\n ];\n } else {\n /* SHA-512 */\n retVal = [\n H[0].highOrder,\n H[0].lowOrder,\n H[1].highOrder,\n H[1].lowOrder,\n H[2].highOrder,\n H[2].lowOrder,\n H[3].highOrder,\n H[3].lowOrder,\n H[4].highOrder,\n H[4].lowOrder,\n H[5].highOrder,\n H[5].lowOrder,\n H[6].highOrder,\n H[6].lowOrder,\n H[7].highOrder,\n H[7].lowOrder,\n ];\n }\n return retVal;\n}\n\nexport default class jsSHA extends jsSHABase<Int_64[], VariantType> {\n intermediateState: Int_64[];\n variantBlockSize: number;\n bigEndianMod: -1 | 1;\n outputBinLen: number;\n isVariableLen: boolean;\n HMACSupported: boolean;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n roundFunc: (block: number[], H: Int_64[]) => Int_64[];\n finalizeFunc: (remainder: number[], remainderBinLen: number, processedBinLen: number, H: Int_64[]) => number[];\n stateCloneFunc: (state: Int_64[]) => Int_64[];\n newStateFunc: (variant: VariantType) => Int_64[];\n getMAC: () => number[];\n\n constructor(variant: VariantType, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(variant: VariantType, inputFormat: FormatNoTextType, options?: FixedLengthOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n if (!(\"SHA-384\" === variant || \"SHA-512\" === variant)) {\n throw new Error(sha_variant_error);\n }\n super(variant, inputFormat, options);\n const resolvedOptions = options || {};\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n this.HMACSupported = true;\n this.bigEndianMod = -1;\n this.converterFunc = getStrConverter(this.inputFormat, this.utfType, this.bigEndianMod);\n this.roundFunc = roundSHA512;\n this.stateCloneFunc = function (state): Int_64[] {\n return state.slice();\n };\n this.newStateFunc = getNewState512;\n this.finalizeFunc = function (remainder, remainderBinLen, processedBinLen, H): number[] {\n return finalizeSHA512(remainder, remainderBinLen, processedBinLen, H, variant);\n };\n\n this.intermediateState = getNewState512(variant);\n this.variantBlockSize = 1024;\n this.outputBinLen = \"SHA-384\" === variant ? 384 : 512;\n this.isVariableLen = false;\n\n if (resolvedOptions[\"hmacKey\"]) {\n this._setHMACKey(parseInputOption(\"hmacKey\", resolvedOptions[\"hmacKey\"], this.bigEndianMod));\n }\n }\n}\n", "import { jsSHABase, packedLEConcat, sha_variant_error, mac_rounds_error, TWO_PWR_32, parseInputOption } from \"./common\";\nimport {\n packedValue,\n CSHAKEOptionsNoEncodingType,\n CSHAKEOptionsEncodingType,\n SHAKEOptionsNoEncodingType,\n SHAKEOptionsEncodingType,\n KMACOptionsNoEncodingType,\n KMACOptionsEncodingType,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n ResolvedCSHAKEOptionsNoEncodingType,\n ResolvedKMACOptionsNoEncodingType,\n} from \"./custom_types\";\nimport { getStrConverter } from \"./converters\";\nimport { Int_64, rotl_64, xor_64_2, xor_64_5 } from \"./primitives_64\";\n\ntype FixedLengthVariantType = \"SHA3-224\" | \"SHA3-256\" | \"SHA3-384\" | \"SHA3-512\" | \"SHAKE128\" | \"SHAKE256\";\n\ntype VariantType = FixedLengthVariantType | \"SHAKE128\" | \"SHAKE256\" | \"CSHAKE128\" | \"CSHAKE256\" | \"KMAC128\" | \"KMAC256\";\n\nconst rc_sha3 = [\n new Int_64(0x00000000, 0x00000001),\n new Int_64(0x00000000, 0x00008082),\n new Int_64(0x80000000, 0x0000808a),\n new Int_64(0x80000000, 0x80008000),\n new Int_64(0x00000000, 0x0000808b),\n new Int_64(0x00000000, 0x80000001),\n new Int_64(0x80000000, 0x80008081),\n new Int_64(0x80000000, 0x00008009),\n new Int_64(0x00000000, 0x0000008a),\n new Int_64(0x00000000, 0x00000088),\n new Int_64(0x00000000, 0x80008009),\n new Int_64(0x00000000, 0x8000000a),\n new Int_64(0x00000000, 0x8000808b),\n new Int_64(0x80000000, 0x0000008b),\n new Int_64(0x80000000, 0x00008089),\n new Int_64(0x80000000, 0x00008003),\n new Int_64(0x80000000, 0x00008002),\n new Int_64(0x80000000, 0x00000080),\n new Int_64(0x00000000, 0x0000800a),\n new Int_64(0x80000000, 0x8000000a),\n new Int_64(0x80000000, 0x80008081),\n new Int_64(0x80000000, 0x00008080),\n new Int_64(0x00000000, 0x80000001),\n new Int_64(0x80000000, 0x80008008),\n];\n\nconst r_sha3 = [\n [0, 36, 3, 41, 18],\n [1, 44, 10, 45, 2],\n [62, 6, 43, 15, 61],\n [28, 55, 25, 21, 56],\n [27, 20, 39, 8, 14],\n];\n\n/**\n * Gets the state values for the specified SHA-3 variant.\n *\n * @param _variant Unused for this family.\n * @returns The initial state values.\n */\nfunction getNewState(_variant: VariantType): Int_64[][] {\n let i;\n const retVal = [];\n\n for (i = 0; i < 5; i += 1) {\n retVal[i] = [new Int_64(0, 0), new Int_64(0, 0), new Int_64(0, 0), new Int_64(0, 0), new Int_64(0, 0)];\n }\n\n return retVal;\n}\n\n/**\n * Returns a clone of the given SHA3 state.\n *\n * @param state The state to be cloned.\n * @returns The cloned state.\n */\nfunction cloneSHA3State(state: Int_64[][]): Int_64[][] {\n let i;\n const clone = [];\n for (i = 0; i < 5; i += 1) {\n clone[i] = state[i].slice();\n }\n\n return clone;\n}\n\n/**\n * Performs a round of SHA-3 hashing over a block. This clobbers `state`.\n *\n * @param block The binary array representation of the block to hash.\n * @param state Hash state from a previous round.\n * @returns The resulting state value.\n */\nfunction roundSHA3(block: number[] | null, state: Int_64[][]): Int_64[][] {\n let round, x, y, B;\n const C = [],\n D = [];\n\n if (null !== block) {\n for (x = 0; x < block.length; x += 2) {\n state[(x >>> 1) % 5][((x >>> 1) / 5) | 0] = xor_64_2(\n state[(x >>> 1) % 5][((x >>> 1) / 5) | 0],\n new Int_64(block[x + 1], block[x])\n );\n }\n }\n\n for (round = 0; round < 24; round += 1) {\n /* Any SHA-3 variant name will do here */\n B = getNewState(\"SHA3-384\");\n\n /* Perform theta step */\n for (x = 0; x < 5; x += 1) {\n C[x] = xor_64_5(state[x][0], state[x][1], state[x][2], state[x][3], state[x][4]);\n }\n for (x = 0; x < 5; x += 1) {\n D[x] = xor_64_2(C[(x + 4) % 5], rotl_64(C[(x + 1) % 5], 1));\n }\n for (x = 0; x < 5; x += 1) {\n for (y = 0; y < 5; y += 1) {\n state[x][y] = xor_64_2(state[x][y], D[x]);\n }\n }\n\n /* Perform combined ro and pi steps */\n for (x = 0; x < 5; x += 1) {\n for (y = 0; y < 5; y += 1) {\n B[y][(2 * x + 3 * y) % 5] = rotl_64(state[x][y], r_sha3[x][y]);\n }\n }\n\n /* Perform chi step */\n for (x = 0; x < 5; x += 1) {\n for (y = 0; y < 5; y += 1) {\n state[x][y] = xor_64_2(\n B[x][y],\n new Int_64(\n ~B[(x + 1) % 5][y].highOrder & B[(x + 2) % 5][y].highOrder,\n ~B[(x + 1) % 5][y].lowOrder & B[(x + 2) % 5][y].lowOrder\n )\n );\n }\n }\n\n /* Perform iota step */\n state[0][0] = xor_64_2(state[0][0], rc_sha3[round]);\n }\n\n return state;\n}\n\n/**\n * Finalizes the SHA-3 hash. This clobbers `remainder` and `state`.\n *\n * @param remainder Any leftover unprocessed packed ints that still need to be processed.\n * @param remainderBinLen The number of bits in `remainder`.\n * @param _processedBinLen Unused for this family.\n * @param state The state from a previous round.\n * @param blockSize The block size/rate of the variant in bits\n * @param delimiter The delimiter value for the variant\n * @param outputLen The output length for the variant in bits\n * @returns The array of integers representing the SHA-3 hash of message.\n */\nfunction finalizeSHA3(\n remainder: number[],\n remainderBinLen: number,\n _processedBinLen: number,\n state: Int_64[][],\n blockSize: number,\n delimiter: number,\n outputLen: number\n): number[] {\n let i,\n state_offset = 0,\n temp;\n const retVal = [],\n binaryStringInc = blockSize >>> 5,\n remainderIntLen = remainderBinLen >>> 5;\n\n /* Process as many blocks as possible, some may be here for multiple rounds\n\t\twith SHAKE\n\t*/\n for (i = 0; i < remainderIntLen && remainderBinLen >= blockSize; i += binaryStringInc) {\n state = roundSHA3(remainder.slice(i, i + binaryStringInc), state);\n remainderBinLen -= blockSize;\n }\n\n remainder = remainder.slice(i);\n remainderBinLen = remainderBinLen % blockSize;\n\n /* Pad out the remainder to a full block */\n while (remainder.length < binaryStringInc) {\n remainder.push(0);\n }\n\n /* Find the next \"empty\" byte for the 0x80 and append it via an xor */\n i = remainderBinLen >>> 3;\n remainder[i >> 2] ^= delimiter << (8 * (i % 4));\n\n remainder[binaryStringInc - 1] ^= 0x80000000;\n state = roundSHA3(remainder, state);\n\n while (retVal.length * 32 < outputLen) {\n temp = state[state_offset % 5][(state_offset / 5) | 0];\n retVal.push(temp.lowOrder);\n if (retVal.length * 32 >= outputLen) {\n break;\n }\n retVal.push(temp.highOrder);\n state_offset += 1;\n\n if (0 === (state_offset * 64) % blockSize) {\n roundSHA3(null, state);\n state_offset = 0;\n }\n }\n\n return retVal;\n}\n\n/**\n * Performs NIST left_encode function returned with no extra garbage bits. `x` is limited to <= 9007199254740991.\n *\n * @param x 32-bit number to to encode.\n * @returns The NIST specified output of the function.\n */\nfunction left_encode(x: number): packedValue {\n let byteOffset,\n byte,\n numEncodedBytes = 0;\n /* JavaScript numbers max out at 0x1FFFFFFFFFFFFF (7 bytes) so this will return a maximum of 7 + 1 = 8 bytes */\n const retVal = [0, 0],\n x_64 = [x & 0xffffffff, (x / TWO_PWR_32) & 0x1fffff];\n\n for (byteOffset = 6; byteOffset >= 0; byteOffset--) {\n /* This will surprisingly work for large shifts because JavaScript masks the shift amount by 0x1F */\n byte = (x_64[byteOffset >> 2] >>> (8 * byteOffset)) & 0xff;\n\n /* Starting from the most significant byte of a 64-bit number, start recording the first non-0 byte and then\n every byte thereafter */\n if (byte !== 0 || numEncodedBytes !== 0) {\n retVal[(numEncodedBytes + 1) >> 2] |= byte << ((numEncodedBytes + 1) * 8);\n numEncodedBytes += 1;\n }\n }\n numEncodedBytes = numEncodedBytes !== 0 ? numEncodedBytes : 1;\n retVal[0] |= numEncodedBytes;\n\n return { value: numEncodedBytes + 1 > 4 ? retVal : [retVal[0]], binLen: 8 + numEncodedBytes * 8 };\n}\n\n/**\n * Performs NIST right_encode function returned with no extra garbage bits. `x` is limited to <= 9007199254740991.\n *\n * @param x 32-bit number to to encode.\n * @returns The NIST specified output of the function.\n */\nfunction right_encode(x: number): packedValue {\n let byteOffset,\n byte,\n numEncodedBytes = 0;\n /* JavaScript numbers max out at 0x1FFFFFFFFFFFFF (7 bytes) so this will return a maximum of 7 + 1 = 8 bytes */\n const retVal = [0, 0],\n x_64 = [x & 0xffffffff, (x / TWO_PWR_32) & 0x1fffff];\n\n for (byteOffset = 6; byteOffset >= 0; byteOffset--) {\n /* This will surprisingly work for large shifts because JavaScript masks the shift amount by 0x1F */\n byte = (x_64[byteOffset >> 2] >>> (8 * byteOffset)) & 0xff;\n\n /* Starting from the most significant byte of a 64-bit number, start recording the first non-0 byte and then\n every byte thereafter */\n if (byte !== 0 || numEncodedBytes !== 0) {\n retVal[numEncodedBytes >> 2] |= byte << (numEncodedBytes * 8);\n numEncodedBytes += 1;\n }\n }\n numEncodedBytes = numEncodedBytes !== 0 ? numEncodedBytes : 1;\n retVal[numEncodedBytes >> 2] |= numEncodedBytes << (numEncodedBytes * 8);\n\n return { value: numEncodedBytes + 1 > 4 ? retVal : [retVal[0]], binLen: 8 + numEncodedBytes * 8 };\n}\n\n/**\n * Performs NIST encode_string function.\n *\n * @param input Packed array of integers.\n * @returns NIST encode_string output.\n */\nfunction encode_string(input: packedValue): packedValue {\n return packedLEConcat(left_encode(input[\"binLen\"]), input);\n}\n\n/**\n * Performs NIST byte_pad function.\n *\n * @param packed Packed array of integers.\n * @param outputByteLen Desired length of the output in bytes, assumed to be a multiple of 4.\n * @returns NIST byte_pad output.\n */\nfunction byte_pad(packed: packedValue, outputByteLen: number): number[] {\n let encodedLen = left_encode(outputByteLen),\n i;\n\n encodedLen = packedLEConcat(encodedLen, packed);\n const outputIntLen = outputByteLen >>> 2,\n intsToAppend = (outputIntLen - (encodedLen[\"value\"].length % outputIntLen)) % outputIntLen;\n\n for (i = 0; i < intsToAppend; i++) {\n encodedLen[\"value\"].push(0);\n }\n\n return encodedLen[\"value\"];\n}\n\n/**\n * Parses/validate constructor options for a CSHAKE variant\n *\n * @param options Option given to constructor\n */\nfunction resolveCSHAKEOptions(options: CSHAKEOptionsNoEncodingType): ResolvedCSHAKEOptionsNoEncodingType {\n const resolvedOptions = options || {};\n\n return {\n funcName: parseInputOption(\"funcName\", resolvedOptions[\"funcName\"], 1, { value: [], binLen: 0 }),\n customization: parseInputOption(\"Customization\", resolvedOptions[\"customization\"], 1, { value: [], binLen: 0 }),\n };\n}\n\n/**\n * Parses/validate constructor options for a KMAC variant\n *\n * @param options Option given to constructor\n */\nfunction resolveKMACOptions(options: KMACOptionsNoEncodingType): ResolvedKMACOptionsNoEncodingType {\n const resolvedOptions = options || {};\n\n return {\n kmacKey: parseInputOption(\"kmacKey\", resolvedOptions[\"kmacKey\"], 1),\n /* This is little-endian packed \"KMAC\" */\n funcName: { value: [0x43414d4b], binLen: 32 },\n customization: parseInputOption(\"Customization\", resolvedOptions[\"customization\"], 1, { value: [], binLen: 0 }),\n };\n}\n\nexport default class jsSHA extends jsSHABase<Int_64[][], VariantType> {\n intermediateState: Int_64[][];\n variantBlockSize: number;\n bigEndianMod: -1 | 1;\n outputBinLen: number;\n isVariableLen: boolean;\n HMACSupported: boolean;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n converterFunc: (input: any, existingBin: number[], existingBinLen: number) => packedValue;\n roundFunc: (block: number[], H: Int_64[][]) => Int_64[][];\n finalizeFunc: (\n remainder: number[],\n remainderBinLen: number,\n processedBinLen: number,\n H: Int_64[][],\n outputLen: number\n ) => number[];\n stateCloneFunc: (state: Int_64[][]) => Int_64[][];\n newStateFunc: (variant: VariantType) => Int_64[][];\n getMAC: ((options: { outputLen: number }) => number[]) | null;\n\n constructor(variant: FixedLengthVariantType, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(\n variant: FixedLengthVariantType,\n inputFormat: FormatNoTextType,\n options?: FixedLengthOptionsNoEncodingType\n );\n constructor(variant: \"SHAKE128\" | \"SHAKE256\", inputFormat: \"TEXT\", options?: SHAKEOptionsEncodingType);\n constructor(variant: \"SHAKE128\" | \"SHAKE256\", inputFormat: FormatNoTextType, options?: SHAKEOptionsNoEncodingType);\n constructor(variant: \"CSHAKE128\" | \"CSHAKE256\", inputFormat: \"TEXT\", options?: CSHAKEOptionsEncodingType);\n constructor(variant: \"CSHAKE128\" | \"CSHAKE256\", inputFormat: FormatNoTextType, options?: CSHAKEOptionsNoEncodingType);\n constructor(variant: \"KMAC128\" | \"KMAC256\", inputFormat: \"TEXT\", options: KMACOptionsEncodingType);\n constructor(variant: \"KMAC128\" | \"KMAC256\", inputFormat: FormatNoTextType, options: KMACOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n let delimiter = 0x06,\n variantBlockSize = 0;\n super(variant, inputFormat, options);\n const resolvedOptions = options || {};\n\n /* In other variants, this was done after variable initialization but need to do it earlier here becaue we want to\n avoid KMAC initialization */\n if (this.numRounds !== 1) {\n if (resolvedOptions[\"kmacKey\"] || resolvedOptions[\"hmacKey\"]) {\n throw new Error(mac_rounds_error);\n } else if (this.shaVariant === \"CSHAKE128\" || this.shaVariant === \"CSHAKE256\") {\n throw new Error(\"Cannot set numRounds for CSHAKE variants\");\n }\n }\n\n this.bigEndianMod = 1;\n this.converterFunc = getStrConverter(this.inputFormat, this.utfType, this.bigEndianMod);\n this.roundFunc = roundSHA3;\n this.stateCloneFunc = cloneSHA3State;\n this.newStateFunc = getNewState;\n this.intermediateState = getNewState(variant);\n\n this.isVariableLen = false;\n switch (variant) {\n case \"SHA3-224\":\n this.variantBlockSize = variantBlockSize = 1152;\n this.outputBinLen = 224;\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n break;\n case \"SHA3-256\":\n this.variantBlockSize = variantBlockSize = 1088;\n this.outputBinLen = 256;\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n break;\n case \"SHA3-384\":\n this.variantBlockSize = variantBlockSize = 832;\n this.outputBinLen = 384;\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n break;\n case \"SHA3-512\":\n this.variantBlockSize = variantBlockSize = 576;\n this.outputBinLen = 512;\n this.HMACSupported = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getHMAC;\n break;\n case \"SHAKE128\":\n delimiter = 0x1f;\n this.variantBlockSize = variantBlockSize = 1344;\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n this.getMAC = null;\n break;\n case \"SHAKE256\":\n delimiter = 0x1f;\n this.variantBlockSize = variantBlockSize = 1088;\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n this.getMAC = null;\n break;\n case \"KMAC128\":\n delimiter = 0x4;\n this.variantBlockSize = variantBlockSize = 1344;\n this._initializeKMAC(options);\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getKMAC;\n break;\n case \"KMAC256\":\n delimiter = 0x4;\n this.variantBlockSize = variantBlockSize = 1088;\n this._initializeKMAC(options);\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.getMAC = this._getKMAC;\n break;\n case \"CSHAKE128\":\n this.variantBlockSize = variantBlockSize = 1344;\n delimiter = this._initializeCSHAKE(options);\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n this.getMAC = null;\n break;\n case \"CSHAKE256\":\n this.variantBlockSize = variantBlockSize = 1088;\n delimiter = this._initializeCSHAKE(options);\n /* This will be set in getHash */\n this.outputBinLen = -1;\n this.isVariableLen = true;\n this.HMACSupported = false;\n this.getMAC = null;\n break;\n default:\n throw new Error(sha_variant_error);\n }\n\n /* This needs to be down here as CSHAKE can change its delimiter */\n this.finalizeFunc = function (remainder, remainderBinLen, processedBinLen, state, outputBinLen): number[] {\n return finalizeSHA3(\n remainder,\n remainderBinLen,\n processedBinLen,\n state,\n variantBlockSize,\n delimiter,\n outputBinLen\n );\n };\n\n if (resolvedOptions[\"hmacKey\"]) {\n this._setHMACKey(parseInputOption(\"hmacKey\", resolvedOptions[\"hmacKey\"], this.bigEndianMod));\n }\n }\n\n /**\n * Initialize CSHAKE variants.\n *\n * @param options Options containing CSHAKE params.\n * @param funcNameOverride Overrides any \"funcName\" present in `options` (used with KMAC)\n * @returns The delimiter to be used\n */\n protected _initializeCSHAKE(options?: CSHAKEOptionsNoEncodingType, funcNameOverride?: packedValue): number {\n const resolvedOptions = resolveCSHAKEOptions(options || {});\n if (funcNameOverride) {\n resolvedOptions[\"funcName\"] = funcNameOverride;\n }\n const packedParams = packedLEConcat(\n encode_string(resolvedOptions[\"funcName\"]),\n encode_string(resolvedOptions[\"customization\"])\n );\n\n /* CSHAKE is defined to be a call to SHAKE iff both the customization and function-name string are both empty. This\n can be accomplished by processing nothing in this step. */\n if (resolvedOptions[\"customization\"][\"binLen\"] !== 0 || resolvedOptions[\"funcName\"][\"binLen\"] !== 0) {\n const byte_pad_out = byte_pad(packedParams, this.variantBlockSize >>> 3);\n for (let i = 0; i < byte_pad_out.length; i += this.variantBlockSize >>> 5) {\n this.intermediateState = this.roundFunc(\n byte_pad_out.slice(i, i + (this.variantBlockSize >>> 5)),\n this.intermediateState\n );\n this.processedLen += this.variantBlockSize;\n }\n return 0x04;\n } else {\n return 0x1f;\n }\n }\n\n /**\n * Initialize KMAC variants.\n *\n * @param options Options containing KMAC params.\n */\n protected _initializeKMAC(options: KMACOptionsNoEncodingType): void {\n const resolvedOptions = resolveKMACOptions(options || {});\n\n this._initializeCSHAKE(options, resolvedOptions[\"funcName\"]);\n const byte_pad_out = byte_pad(encode_string(resolvedOptions[\"kmacKey\"]), this.variantBlockSize >>> 3);\n for (let i = 0; i < byte_pad_out.length; i += this.variantBlockSize >>> 5) {\n this.intermediateState = this.roundFunc(\n byte_pad_out.slice(i, i + (this.variantBlockSize >>> 5)),\n this.intermediateState\n );\n this.processedLen += this.variantBlockSize;\n }\n this.macKeySet = true;\n }\n\n /**\n * Returns the the KMAC in the specified format.\n *\n * @param options Hashmap of extra outputs options. `outputLen` must be specified.\n * @returns The KMAC in the format specified.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected _getKMAC(options: { outputLen: number }): number[] {\n const concatedRemainder = packedLEConcat(\n { value: this.remainder.slice(), binLen: this.remainderLen },\n right_encode(options[\"outputLen\"])\n );\n\n return this.finalizeFunc(\n concatedRemainder[\"value\"],\n concatedRemainder[\"binLen\"],\n this.processedLen,\n this.stateCloneFunc(this.intermediateState),\n options[\"outputLen\"]\n );\n }\n}\n", "import { sha_variant_error } from \"./common\";\nimport {\n CSHAKEOptionsEncodingType,\n CSHAKEOptionsNoEncodingType,\n SHAKEOptionsEncodingType,\n SHAKEOptionsNoEncodingType,\n EncodingType,\n FixedLengthOptionsEncodingType,\n FixedLengthOptionsNoEncodingType,\n FormatNoTextType,\n KMACOptionsNoEncodingType,\n KMACOptionsEncodingType,\n} from \"./custom_types\";\nimport jsSHA1 from \"./sha1\";\nimport jsSHA256 from \"./sha256\";\nimport jsSHA512 from \"./sha512\";\nimport jsSHA3 from \"./sha3\";\n\ntype FixedLengthVariantType =\n | \"SHA-1\"\n | \"SHA-224\"\n | \"SHA-256\"\n | \"SHA-384\"\n | \"SHA-512\"\n | \"SHA3-224\"\n | \"SHA3-256\"\n | \"SHA3-384\"\n | \"SHA3-512\";\n\nexport default class jsSHA {\n private readonly shaObj: jsSHA1 | jsSHA256 | jsSHA512 | jsSHA3;\n /**\n * @param variant The desired SHA variant (SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA3-224, SHA3-256, SHA3-256,\n * SHA3-384, SHA3-512, SHAKE128, SHAKE256, CSHAKE128, CSHAKE256, KMAC128, or KMAC256) as a string.\n * @param inputFormat The input format to be used in future `update` calls (TEXT, HEX, B64, BYTES, ARRAYBUFFER,\n * or UINT8ARRAY) as a string.\n * @param options Options in the form of { encoding?: \"UTF8\" | \"UTF16BE\" | \"UTF16LE\"; numRounds?: number }.\n * `encoding` is for only TEXT input (defaults to UTF8) and `numRounds` defaults to 1.\n * `numRounds` is not valid for any of the MAC or CSHAKE variants.\n * * If the variant supports HMAC, `options` may have an additional `hmacKey` key which must be in the form of\n * {value: <INPUT>, format: <FORMAT>, encoding?: \"UTF8\" | \"UTF16BE\" | \"UTF16LE\"} where <FORMAT> takes the same\n * values as `inputFormat` and <INPUT> can be a `string | ArrayBuffer | Uint8Array` depending on <FORMAT>.\n * Supplying this key switches to HMAC calculation and replaces the now deprecated call to `setHMACKey`.\n * * If the variant is CSHAKE128 or CSHAKE256, `options` may have two additional keys, `customization` and `funcName`,\n * which are the NIST customization and function-name strings. Both must be in the same form as `hmacKey`.\n * * If the variant is KMAC128 or KMAC256, `options` can include the `customization` key from CSHAKE variants and\n * *must* have a `kmacKey` key that takes the same form as the `customization` key.\n */\n constructor(variant: FixedLengthVariantType, inputFormat: \"TEXT\", options?: FixedLengthOptionsEncodingType);\n constructor(\n variant: FixedLengthVariantType,\n inputFormat: FormatNoTextType,\n options?: FixedLengthOptionsNoEncodingType\n );\n constructor(variant: \"SHAKE128\" | \"SHAKE256\", inputFormat: \"TEXT\", options?: SHAKEOptionsEncodingType);\n constructor(variant: \"SHAKE128\" | \"SHAKE256\", inputFormat: FormatNoTextType, options?: SHAKEOptionsNoEncodingType);\n constructor(variant: \"CSHAKE128\" | \"CSHAKE256\", inputFormat: \"TEXT\", options?: CSHAKEOptionsEncodingType);\n constructor(variant: \"CSHAKE128\" | \"CSHAKE256\", inputFormat: FormatNoTextType, options?: CSHAKEOptionsNoEncodingType);\n constructor(variant: \"KMAC128\" | \"KMAC256\", inputFormat: \"TEXT\", options: KMACOptionsEncodingType);\n constructor(variant: \"KMAC128\" | \"KMAC256\", inputFormat: FormatNoTextType, options: KMACOptionsNoEncodingType);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(variant: any, inputFormat: any, options?: any) {\n if (\"SHA-1\" == variant) {\n this.shaObj = new jsSHA1(variant, inputFormat, options);\n } else if (\"SHA-224\" == variant || \"SHA-256\" == variant) {\n this.shaObj = new jsSHA256(variant, inputFormat, options);\n } else if (\"SHA-384\" == variant || \"SHA-512\" == variant) {\n this.shaObj = new jsSHA512(variant, inputFormat, options);\n } else if (\n \"SHA3-224\" == variant ||\n \"SHA3-256\" == variant ||\n \"SHA3-384\" == variant ||\n \"SHA3-512\" == variant ||\n \"SHAKE128\" == variant ||\n \"SHAKE256\" == variant ||\n \"CSHAKE128\" == variant ||\n \"CSHAKE256\" == variant ||\n \"KMAC128\" == variant ||\n \"KMAC256\" == variant\n ) {\n this.shaObj = new jsSHA3(variant, inputFormat, options);\n } else {\n throw new Error(sha_variant_error);\n }\n }\n\n /**\n * Takes `input` and hashes as many blocks as possible. Stores the rest for either a future `update` or `getHash` call.\n *\n * @param input The input to be hashed.\n * @returns A reference to the object.\n */\n update(input: string | ArrayBuffer | Uint8Array): this {\n this.shaObj.update(input);\n\n return this;\n }\n\n /**\n * Returns the desired SHA or MAC (if a HMAC/KMAC key was specified) hash of the input fed in via `update` calls.\n *\n * @param format The desired output formatting (B64, HEX, BYTES, ARRAYBUFFER, or UINT8ARRAY) as a string.\n * @param options Options in the form of { outputUpper?: boolean; b64Pad?: string; outputLen?: number; }.\n * `outputLen` is required for variable length output variants (this option was previously called `shakeLen` which\n * is now deprecated).\n * `outputUpper` is only for HEX output (defaults to false) and b64pad is only for B64 output (defaults to \"=\").\n * @returns The hash in the format specified.\n */\n getHash(format: \"HEX\", options?: { outputUpper?: boolean; outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"B64\", options?: { b64Pad?: string; outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"BYTES\", options?: { outputLen?: number; shakeLen?: number }): string;\n getHash(format: \"UINT8ARRAY\", options?: { outputLen?: number; shakeLen?: number }): Uint8Array;\n getHash(format: \"ARRAYBUFFER\", options?: { outputLen?: number; shakeLen?: number }): ArrayBuffer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getHash(format: any, options?: any): any {\n return this.shaObj.getHash(format, options);\n }\n\n /**\n * Sets the HMAC key for an eventual `getHMAC` call. Must be called immediately after jsSHA object instantiation.\n * Now deprecated in favor of setting the `hmacKey` at object instantiation.\n *\n * @param key The key used to calculate the HMAC\n * @param inputFormat The format of key (HEX, TEXT, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY) as a string.\n * @param options Options in the form of { encoding?: \"UTF8\" | \"UTF16BE\" | \"UTF16LE }. `encoding` is only for TEXT\n * and defaults to UTF8.\n */\n setHMACKey(key: string, inputFormat: \"TEXT\", options?: { encoding?: EncodingType }): void;\n setHMACKey(key: string, inputFormat: \"B64\" | \"HEX\" | \"BYTES\"): void;\n setHMACKey(key: ArrayBuffer, inputFormat: \"ARRAYBUFFER\"): void;\n setHMACKey(key: Uint8Array, inputFormat: \"UINT8ARRAY\"): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setHMACKey(key: any, inputFormat: any, options?: any): void {\n this.shaObj.setHMACKey(key, inputFormat, options);\n }\n\n /**\n * Returns the the HMAC in the specified format using the key given by a previous `setHMACKey` call. Now deprecated\n * in favor of just calling `getHash`.\n *\n * @param format The desired output formatting (B64, HEX, BYTES, ARRAYBUFFER, or UINT8ARRAY) as a string.\n * @param options Options in the form of { outputUpper?: boolean; b64Pad?: string }. `outputUpper` is only for HEX\n * output (defaults to false) and `b64pad` is only for B64 output (defaults to \"=\").\n * @returns The HMAC in the format specified.\n */\n getHMAC(format: \"HEX\", options?: { outputUpper?: boolean }): string;\n getHMAC(format: \"B64\", options?: { b64Pad?: string }): string;\n getHMAC(format: \"BYTES\"): string;\n getHMAC(format: \"UINT8ARRAY\"): Uint8Array;\n getHMAC(format: \"ARRAYBUFFER\"): ArrayBuffer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getHMAC(format: any, options?: any): any {\n return this.shaObj.getHMAC(format, options);\n }\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\n//@ts-ignore\nimport jssha from \"jssha\";\n\nconst SEARCH_RANGE = 16;\nconst timeStep = 30;\n\nexport function computeTOTPandCheck(\n secretKey: Uint8Array,\n digits: number,\n code: number,\n): boolean {\n const now = new Date().getTime();\n const epoch = Math.floor(Math.round(now / 1000.0) / timeStep);\n\n for (let ms = -SEARCH_RANGE; ms < SEARCH_RANGE; ms++) {\n const movingFactor = (epoch + ms).toString(16).padStart(16, \"0\");\n\n const hmacSha = new jssha(\"SHA-1\", \"HEX\", {\n hmacKey: { value: secretKey, format: \"UINT8ARRAY\" },\n });\n hmacSha.update(movingFactor);\n const hmac_text = hmacSha.getHMAC(\"UINT8ARRAY\");\n\n const offset = hmac_text[hmac_text.length - 1] & 0xf;\n\n const otp =\n (((hmac_text[offset + 0] << 24) +\n (hmac_text[offset + 1] << 16) +\n (hmac_text[offset + 2] << 8) +\n hmac_text[offset + 3]) &\n 0x7fffffff) %\n Math.pow(10, digits);\n\n if (otp == code) return true;\n }\n return false;\n}\n\nconst encTable__ = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\".split(\"\");\nexport function base32enc(buffer: Uint8Array): string {\n let rpos = 0;\n let bits = 0;\n let vbit = 0;\n\n let result = \"\";\n while (rpos < buffer.length || vbit > 0) {\n if (rpos < buffer.length && vbit < 5) {\n bits = (bits << 8) | buffer[rpos++];\n vbit += 8;\n }\n if (vbit < 5) {\n bits <<= 5 - vbit;\n vbit = 5;\n }\n result += encTable__[(bits >> (vbit - 5)) & 31];\n vbit -= 5;\n }\n return result;\n}\n\n// const array = new Uint8Array(256)\n// const secretKey = window.crypto.getRandomValues(array)\n// console.log(base32enc(secretKey))\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 */\nimport { ChallengeInfo } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/AsyncButton.js\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { SolveOverviewFeedbackDisplay } from \"../SolveScreen.js\";\nimport { shouldHideConfirm } from \"./helpers.js\";\nimport { AuthMethodSolveProps } from \"./index.js\";\n\nexport function AuthMethodTotpSolve(props: AuthMethodSolveProps): VNode {\n const [answerCode, setAnswerCode] = useState(\"\");\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>no reducer in context</div>\n </AnastasisClientFrame>\n );\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n </AnastasisClientFrame>\n );\n }\n\n if (!reducer.currentReducerState.recovery_information) {\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery problem\"\n >\n <div>no recovery information found</div>\n </AnastasisClientFrame>\n );\n }\n if (!reducer.currentReducerState.selected_challenge_uuid) {\n return (\n <AnastasisClientFrame hideNav title=\"Recovery problem\">\n <div>invalid state</div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n\n const chArr = reducer.currentReducerState.recovery_information.challenges;\n const challengeFeedback =\n reducer.currentReducerState.challenge_feedback ?? {};\n const selectedUuid = reducer.currentReducerState.selected_challenge_uuid;\n const challenges: {\n [uuid: string]: ChallengeInfo;\n } = {};\n for (const ch of chArr) {\n challenges[ch.uuid] = ch;\n }\n const feedback = challengeFeedback[selectedUuid];\n\n async function onNext(): Promise<void> {\n return reducer?.transition(\"solve_challenge\", {\n answer: answerCode,\n });\n }\n function onCancel(): void {\n reducer?.back();\n }\n\n return (\n <AnastasisClientFrame hideNav title=\"TOTP Challenge\">\n <SolveOverviewFeedbackDisplay feedback={feedback} />\n <p>enter the totp solution</p>\n <TextInput\n label=\"Answer\"\n onConfirm={onNext}\n grabFocus\n bind={[answerCode, setAnswerCode]}\n />\n\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n {!shouldHideConfirm(feedback) && (\n <AsyncButton class=\"button is-info\" onClick={onNext}>\n Confirm\n </AsyncButton>\n )}\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { useEffect, useRef, useState } from \"preact/hooks\";\nimport { Notification } from \"../../../components/Notifications.js\";\nimport { useAnastasisContext } from \"../../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"../authMethod/index.jsx\";\nimport { AuthProvByStatusMap, State, testProvider } from \"./index.js\";\n\ninterface Props {\n providerType?: KnownAuthMethods;\n onCancel: () => Promise<void>;\n notifications?: Notification[];\n}\n\nexport default function useComponentState({\n providerType,\n onCancel,\n notifications = [],\n}: Props): State {\n const reducer = useAnastasisContext();\n\n const [providerURL, setProviderURL] = useState(\"\");\n\n const [error, setError] = useState<string | undefined>();\n const [testing, setTesting] = useState(false);\n\n const providerLabel = providerType\n ? authMethods[providerType].label\n : undefined;\n\n const allAuthProviders =\n !reducer ||\n !reducer.currentReducerState ||\n reducer.currentReducerState.reducer_type === \"error\" ||\n !reducer.currentReducerState.authentication_providers\n ? {}\n : reducer.currentReducerState.authentication_providers;\n\n const authProvidersByStatus = Object.keys(allAuthProviders).reduce(\n (prev, url) => {\n const p = allAuthProviders[url];\n if (\n providerLabel &&\n p.status === \"ok\" &&\n p.methods.findIndex((m) => m.type === providerType) !== -1\n ) {\n return prev;\n }\n prev[p.status].push({ ...p, url });\n return prev;\n },\n {\n \"not-contacted\": [],\n disabled: [],\n error: [],\n ok: [],\n } as AuthProvByStatusMap,\n );\n const authProviders = authProvidersByStatus[\"ok\"].map((p) => p.url);\n\n //FIXME: move this timeout logic into a hook\n const timeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => {\n if (timeout.current) clearTimeout(timeout.current);\n timeout.current = setTimeout(async () => {\n let url = providerURL;\n if (!url || authProviders.includes(url)) return;\n if (url && !url.match(/^(https?:)\\/\\/.+\\/(?:config)?$/iu))\n return setError(\n \"Malformed URL: Must be an HTTP(S) URL ending with a /\",\n );\n if (url.endsWith(\"/config\")) url = url.substring(0, url.length - 6);\n try {\n setTesting(true);\n await testProvider(url, providerType);\n setError(\"\");\n } catch (e) {\n if (e instanceof Error) setError(e.message);\n else\n throw new Error(\n `Unexpected Error Type: ${typeof e} - Cannot handle. Error: ${e}`,\n );\n }\n setTesting(false);\n }, 200);\n }, [providerURL, reducer]);\n\n if (!reducer) {\n return {\n status: \"no-reducer\",\n };\n }\n\n if (\n !reducer.currentReducerState ||\n !(\"authentication_providers\" in reducer.currentReducerState)\n ) {\n return {\n status: \"invalid-state\",\n };\n }\n\n const addProvider = async (provider_url: string): Promise<void> => {\n await reducer.transition(\"add_provider\", { provider_url });\n onCancel();\n };\n const deleteProvider = async (provider_url: string): Promise<void> => {\n reducer.transition(\"delete_provider\", { provider_url });\n };\n\n let errors = !providerURL ? \"Add provider URL\" : undefined;\n let url: string | undefined;\n // We'll validate it in testProvider & via a regex above - there's no need in this :)\n // try {\n // url = new URL(\"\", providerURL).href;\n // } catch {\n // errors = \"Check the URL\";\n // }\n const _url = url;\n\n if (!!error && !errors) {\n errors = error;\n }\n if (!errors && authProviders.includes(url!)) {\n errors = \"That provider is already known\";\n }\n\n const commonState = {\n addProvider: !_url ? undefined : async () => addProvider(_url),\n deleteProvider: async (url: string) => deleteProvider(url),\n allAuthProviders,\n authProvidersByStatus,\n onCancel,\n providerURL,\n testing,\n setProviderURL: async (s: string) => setProviderURL(s),\n errors,\n error,\n notifications,\n };\n\n if (!providerLabel) {\n return {\n status: \"without-type\",\n ...commonState,\n };\n } else {\n return {\n status: \"with-type\",\n providerLabel,\n ...commonState,\n };\n }\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 */\nimport {\n AuthenticationProviderStatusError,\n AuthenticationProviderStatusOk,\n} from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { TextInput } from \"../../../components/fields/TextInput.js\";\nimport { Notifications } from \"../../../components/Notifications.js\";\nimport { AnastasisClientFrame } from \"../index.js\";\nimport { testProvider, WithoutType, WithType } from \"./index.js\";\nimport { useTranslationContext } from \"../../../context/translation.js\";\n\nexport function WithProviderType(props: WithType): VNode {\n const { i18n } = useTranslationContext();\n return (\n <AnastasisClientFrame\n hideNav\n title=\"Backup: Manage providers1\"\n hideNext={props.errors}\n >\n <div>\n <Notifications notifications={props.notifications} />\n <p>{i18n.str`Add a provider url for a ${props.providerLabel} service`}</p>\n <div class=\"container\">\n <TextInput\n label=\"Provider URL\"\n placeholder=\"https://provider.com\"\n grabFocus\n error={props.errors}\n bind={[props.providerURL, props.setProviderURL]}\n />\n </div>\n <p class=\"block\">Example: https://kudos.demo.anastasis.lu</p>\n {props.testing && <p class=\"has-text-info\">Testing</p>}\n\n <div\n class=\"block\"\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={props.onCancel}>\n Cancel\n </button>\n <span data-tooltip={props.errors}>\n <button\n class=\"button is-info\"\n disabled={props.error !== \"\" || props.testing}\n onClick={props.addProvider}\n >\n Add\n </button>\n </span>\n </div>\n\n {props.authProvidersByStatus[\"ok\"].length > 0 ? (\n <p class=\"subtitle\">\n Current providers for {props.providerLabel} service\n </p>\n ) : (\n <p class=\"subtitle\">\n No known providers for {props.providerLabel} service\n </p>\n )}\n\n {props.authProvidersByStatus[\"ok\"].map((k, i) => {\n const p = k as AuthenticationProviderStatusOk;\n return (\n <TableRow\n key={i}\n url={k.url}\n info={p}\n onDelete={props.deleteProvider}\n />\n );\n })}\n <p class=\"subtitle\">Providers with errors</p>\n {props.authProvidersByStatus[\"error\"].map((k, i) => {\n const p = k as AuthenticationProviderStatusError;\n return (\n <TableRowError\n key={i}\n url={k.url}\n info={p}\n onDelete={props.deleteProvider}\n />\n );\n })}\n </div>\n </AnastasisClientFrame>\n );\n}\n\nexport function WithoutProviderType(props: WithoutType): VNode {\n return (\n <AnastasisClientFrame\n hideNav\n title=\"Backup: Manage providers\"\n hideNext={props.errors}\n >\n <div>\n <Notifications notifications={props.notifications} />\n <p>Add a provider url</p>\n <div class=\"container\">\n <TextInput\n label=\"Provider URL\"\n placeholder=\"https://provider.com/\"\n grabFocus\n error={props.errors}\n bind={[props.providerURL, props.setProviderURL]}\n />\n </div>\n <p class=\"block\">Example: https://kudos.demo.anastasis.lu/</p>\n {props.testing && <p class=\"has-text-info\">Testing</p>}\n\n <div\n class=\"block\"\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={props.onCancel}>\n Cancel\n </button>\n <span data-tooltip={props.errors}>\n <button\n class=\"button is-info\"\n disabled={props.error !== \"\" || props.testing}\n onClick={props.addProvider}\n >\n Add\n </button>\n </span>\n </div>\n\n {props.authProvidersByStatus[\"ok\"].length > 0 ? (\n <p class=\"subtitle\">Current providers</p>\n ) : (\n <p class=\"subtitle\">No known providers, add one.</p>\n )}\n\n {props.authProvidersByStatus[\"ok\"].map((k, i) => {\n const p = k as AuthenticationProviderStatusOk;\n return (\n <TableRow\n key={i}\n url={k.url}\n info={p}\n onDelete={props.deleteProvider}\n />\n );\n })}\n <p class=\"subtitle\">Providers with errors</p>\n {props.authProvidersByStatus[\"error\"].map((k, i) => {\n const p = k as AuthenticationProviderStatusError;\n return (\n <TableRowError\n key={i}\n url={k.url}\n info={p}\n onDelete={props.deleteProvider}\n />\n );\n })}\n </div>\n </AnastasisClientFrame>\n );\n}\n\nfunction TableRow({\n url,\n info,\n onDelete,\n}: {\n onDelete: (s: string) => Promise<void>;\n url: string;\n info: AuthenticationProviderStatusOk;\n}): VNode {\n const [status, setStatus] = useState(\"checking\");\n useEffect(function () {\n testProvider(url.endsWith(\"/\") ? url.substring(0, url.length - 1) : url)\n .then(function () {\n setStatus(\"responding\");\n })\n .catch(function () {\n setStatus(\"failed to contact\");\n });\n });\n return (\n <div\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div>\n <div class=\"subtitle\">{url}</div>\n <dl>\n <dt>\n <b>Business Name</b>\n </dt>\n <dd>{info.business_name}</dd>\n <dt>\n <b>Supported methods</b>\n </dt>\n <dd>{info.methods.map((m) => m.type).join(\",\")}</dd>\n <dt>\n <b>Maximum storage</b>\n </dt>\n <dd>{info.storage_limit_in_megabytes} Mb</dd>\n <dt>\n <b>Status</b>\n </dt>\n <dd>{status}</dd>\n </dl>\n </div>\n <div\n class=\"block\"\n style={{\n marginTop: \"auto\",\n marginBottom: \"auto\",\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"column\",\n }}\n >\n <button class=\"button is-danger\" onClick={() => onDelete(url)}>\n Remove\n </button>\n </div>\n </div>\n );\n}\n\nfunction TableRowError({\n url,\n info,\n onDelete,\n}: {\n onDelete: (s: string) => void;\n url: string;\n info: AuthenticationProviderStatusError;\n}): VNode {\n const [status, setStatus] = useState(\"checking\");\n useEffect(function () {\n testProvider(url.endsWith(\"/\") ? url.substring(0, url.length - 1) : url)\n .then(function () {\n setStatus(\"responding\");\n })\n .catch(function () {\n setStatus(\"failed to contact\");\n });\n });\n return (\n <div\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div>\n <div class=\"subtitle\">{url}</div>\n <dl>\n <dt>\n <b>Error</b>\n </dt>\n <dd>{info.hint}</dd>\n <dt>\n <b>Code</b>\n </dt>\n <dd>{info.code}</dd>\n <dt>\n <b>Status</b>\n </dt>\n <dd>{status}</dd>\n </dl>\n </div>\n <div\n class=\"block\"\n style={{\n marginTop: \"auto\",\n marginBottom: \"auto\",\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"column\",\n }}\n >\n <button class=\"button is-danger\" onClick={() => onDelete(url)}>\n Remove\n </button>\n </div>\n </div>\n );\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 */\nimport { AuthenticationProviderStatus } from \"@gnu-taler/anastasis-core\";\nimport InvalidState from \"../../../components/InvalidState.js\";\nimport NoReducer from \"../../../components/NoReducer.js\";\nimport { Notification } from \"../../../components/Notifications.js\";\nimport { compose, StateViewMap } from \"../../../utils/index.js\";\nimport useComponentState from \"./state.js\";\nimport { WithoutProviderType, WithProviderType } from \"./views.js\";\n\nexport type AuthProvByStatusMap = Record<\n AuthenticationProviderStatus[\"status\"],\n (AuthenticationProviderStatus & { url: string })[]\n>;\n\nexport type State = NoReducer | InvalidState | WithType | WithoutType;\n\nexport interface NoReducer {\n status: \"no-reducer\";\n}\nexport interface InvalidState {\n status: \"invalid-state\";\n}\n\ninterface CommonProps {\n addProvider?: () => Promise<void>;\n deleteProvider: (url: string) => Promise<void>;\n authProvidersByStatus: AuthProvByStatusMap;\n error: string | undefined;\n onCancel: () => Promise<void>;\n testing: boolean;\n setProviderURL: (url: string) => Promise<void>;\n providerURL: string;\n errors: string | undefined;\n notifications: Notification[];\n}\n\nexport interface WithType extends CommonProps {\n status: \"with-type\";\n providerLabel: string;\n}\nexport interface WithoutType extends CommonProps {\n status: \"without-type\";\n}\n\nconst map: StateViewMap<State> = {\n \"no-reducer\": NoReducer,\n \"invalid-state\": InvalidState,\n \"with-type\": WithProviderType,\n \"without-type\": WithoutProviderType,\n};\n\nexport default compose(\"AddingProviderScreen\", useComponentState, map);\n\nconst providerResponseCache = new Map<string, any>(); // `any` is the return type of res.json()\nexport async function testProvider(\n url: string,\n expectedMethodType?: string,\n): Promise<void> {\n const testFatalPrefix = `Encountered a fatal error whilst testing the provider ${url}`;\n let configUrl = \"\";\n try {\n configUrl = new URL(\"config\", url).href;\n } catch (error) {\n throw new Error(`${testFatalPrefix}: Invalid Provider URL: ${url}\nError: ${error}`);\n }\n // TODO: look into using core.getProviderInfo :)\n const providerHasUrl = providerResponseCache.has(url);\n const json = providerHasUrl\n ? providerResponseCache.get(url)\n : await fetch(configUrl)\n .catch((error) => {\n throw new Error(`${testFatalPrefix}: Could not connect: ${error}\nPlease check the URL.`);\n })\n .then(async (response) => {\n if (!response.ok)\n throw new Error(\n `${testFatalPrefix}: The server ${response.url} responded with a non-2xx response.`,\n );\n try {\n return await response.json();\n } catch (error) {\n throw new Error(\n `${testFatalPrefix}: The server responded with malformed JSON.\\nError: ${error}`,\n );\n }\n });\n if (typeof json !== \"object\")\n throw new Error(\n `${testFatalPrefix}: Did not get an object after decoding.`,\n );\n if (!(\"name\" in json) || json.name !== \"anastasis\") {\n throw new Error(\n `${testFatalPrefix}: The provider does not appear to be an Anastasis provider. Please check the provider's URL.`,\n );\n }\n if (!(\"methods\" in json) || !Array.isArray(json.methods)) {\n throw new Error(\n \"This provider doesn't have authentication method. Please check the provider's URL and ensure it is properly configured.\",\n );\n }\n if (!providerHasUrl) providerResponseCache.set(url, json);\n if (!expectedMethodType) {\n return;\n }\n let found = false;\n for (let i = 0; i < json.methods.length && !found; i++) {\n found = json.methods[i].type === expectedMethodType;\n }\n if (!found) {\n throw new Error(\n `${testFatalPrefix}: This provider does not support authentication method ${expectedMethodType}`,\n );\n }\n return;\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 */\nimport { AuthenticationProviderStatusOk } from \"@gnu-taler/anastasis-core\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function BackupFinishedScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n const details = reducer.currentReducerState.success_details;\n const providers = reducer.currentReducerState.authentication_providers ?? {};\n\n return (\n <AnastasisClientFrame hideNav title=\"Backup success!\">\n <p>Your backup is complete.</p>\n\n {details && (\n <div class=\"block\">\n <p>The backup is stored by the following providers:</p>\n {Object.keys(details).map((url, i) => {\n const sd = details[url];\n const p = providers[url] as AuthenticationProviderStatusOk;\n return (\n <div key={i} class=\"box\">\n <a href={url} target=\"_blank\" rel=\"noreferrer\">\n {p.business_name}\n </a>\n <p>\n version {sd.policy_version}\n {sd.policy_expiration.t_s !== \"never\"\n ? ` expires at: ${format(\n new Date(sd.policy_expiration.t_s * 1000),\n \"dd-MM-yyyy\",\n )}`\n : \" without expiration date\"}\n </p>\n </div>\n );\n })}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n <p>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-primary is-right\"\n onClick={() => reducer.reset()}\n >\n Start again\n </button>\n </div>\n </p>\n </div>\n </div>\n )}\n </AnastasisClientFrame>\n );\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 */\nimport {\n ChallengeFeedback,\n ChallengeFeedbackStatus,\n} from \"@gnu-taler/anastasis-core\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../components/AsyncButton.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"./authMethod/index.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nfunction OverviewFeedbackDisplay(props: {\n feedback?: ChallengeFeedback;\n}): VNode {\n const { feedback } = props;\n if (!feedback) {\n return <Fragment />;\n }\n\n switch (feedback.state) {\n case ChallengeFeedbackStatus.Solved:\n return <div />;\n case ChallengeFeedbackStatus.IbanInstructions:\n return <div class=\"block has-text-info\">Payment required.</div>;\n case ChallengeFeedbackStatus.ServerFailure:\n return <div class=\"block has-text-danger\">Server error.</div>;\n case ChallengeFeedbackStatus.RateLimitExceeded:\n return (\n <div class=\"block has-text-danger\">\n There were to many failed attempts.\n </div>\n );\n case ChallengeFeedbackStatus.Unsupported:\n return (\n <div class=\"block has-text-danger\">\n This client doesn&apos;t support solving this type of challenge. Use\n another version or contact the provider.\n </div>\n );\n case ChallengeFeedbackStatus.TruthUnknown:\n return (\n <div class=\"block has-text-danger\">\n Provider doesn&apos;t recognize the type of challenge. Use another\n version or contact the provider.\n </div>\n );\n case ChallengeFeedbackStatus.IncorrectAnswer:\n return (\n <div class=\"block has-text-danger\">The answer was not correct.</div>\n );\n case ChallengeFeedbackStatus.CodeInFile:\n return <div class=\"block has-text-info\">code in file</div>;\n case ChallengeFeedbackStatus.CodeSent:\n return <div class=\"block has-text-info\">Code sent</div>;\n case ChallengeFeedbackStatus.TalerPayment:\n return <div class=\"block has-text-info\">Payment required</div>;\n }\n}\n\nexport function ChallengeOverviewScreen(): VNode {\n const reducer = useAnastasisContext();\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return <div>invalid state</div>;\n }\n\n const policies =\n reducer.currentReducerState.recovery_information?.policies ?? [];\n const knownChallengesArray =\n reducer.currentReducerState.recovery_information?.challenges ?? [];\n const challengeFeedback =\n reducer.currentReducerState?.challenge_feedback ?? {};\n\n const knownChallengesMap: {\n [uuid: string]: {\n type: string;\n instructions: string;\n feedback: ChallengeFeedback | undefined;\n };\n } = {};\n for (const ch of knownChallengesArray) {\n knownChallengesMap[ch.uuid] = {\n type: ch.type,\n instructions: ch.instructions,\n feedback: challengeFeedback[ch.uuid],\n };\n }\n const policiesWithInfo = policies\n .map((row) => {\n let isPolicySolved = true;\n const challenges = row\n .map(({ uuid }) => {\n const info = knownChallengesMap[uuid];\n const isChallengeSolved = info?.feedback?.state === \"solved\";\n isPolicySolved = isPolicySolved && isChallengeSolved;\n return { info, uuid, isChallengeSolved };\n })\n .filter((ch) => ch.info !== undefined);\n\n return {\n isPolicySolved,\n challenges,\n corrupted: row.length > challenges.length,\n };\n })\n .filter((p) => !p.corrupted);\n\n const atLeastThereIsOnePolicySolved =\n policiesWithInfo.find((p) => p.isPolicySolved) !== undefined;\n\n const errors = !atLeastThereIsOnePolicySolved\n ? \"Solve one policy before proceeding\"\n : undefined;\n return (\n <AnastasisClientFrame hideNext={errors} title=\"Recovery: Solve challenges\">\n {!policiesWithInfo.length ? (\n <p class=\"block\">\n No policies found, try with another version of the secret\n </p>\n ) : policiesWithInfo.length === 1 ? (\n <p class=\"block\">\n One policy found for this secret. You need to solve all the challenges\n in order to recover your secret.\n </p>\n ) : (\n <p class=\"block\">\n We have found {policiesWithInfo.length} polices. You need to solve all\n the challenges from one policy in order to recover your secret.\n </p>\n )}\n {policiesWithInfo.map((policy, policy_index) => {\n const tableBody = policy.challenges.map(({ info, uuid }) => {\n const method = authMethods[info.type as KnownAuthMethods];\n\n if (!method) {\n return (\n <div\n key={uuid}\n class=\"block\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <span>unknown challenge</span>\n </div>\n </div>\n );\n }\n\n function ChallengeButton({\n id,\n feedback,\n }: {\n id: string;\n feedback?: ChallengeFeedback;\n }): VNode {\n async function selectChallenge(): Promise<void> {\n if (reducer) {\n return reducer.transition(\"select_challenge\", { uuid: id });\n }\n }\n if (!feedback) {\n return (\n <div>\n <AsyncButton\n class=\"button\"\n disabled={\n atLeastThereIsOnePolicySolved && !policy.isPolicySolved\n }\n onClick={selectChallenge}\n >\n Solve\n </AsyncButton>\n </div>\n );\n }\n switch (feedback.state) {\n case ChallengeFeedbackStatus.ServerFailure:\n case ChallengeFeedbackStatus.Unsupported:\n case ChallengeFeedbackStatus.TruthUnknown:\n case ChallengeFeedbackStatus.RateLimitExceeded:\n return <div />;\n case ChallengeFeedbackStatus.IbanInstructions:\n case ChallengeFeedbackStatus.TalerPayment:\n return (\n <div>\n <AsyncButton\n class=\"button\"\n disabled={\n atLeastThereIsOnePolicySolved && !policy.isPolicySolved\n }\n onClick={selectChallenge}\n >\n Pay\n </AsyncButton>\n </div>\n );\n case ChallengeFeedbackStatus.Solved:\n return (\n <div>\n <div class=\"tag is-success is-large\">Solved</div>\n </div>\n );\n default:\n return (\n <div>\n <AsyncButton\n class=\"button\"\n disabled={\n atLeastThereIsOnePolicySolved && !policy.isPolicySolved\n }\n onClick={selectChallenge}\n >\n Solve\n </AsyncButton>\n </div>\n );\n }\n }\n return (\n <div\n key={uuid}\n class=\"block\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <span class=\"icon\">{method?.icon}</span>\n <span>{info.instructions}</span>\n </div>\n <OverviewFeedbackDisplay feedback={info.feedback} />\n </div>\n\n <ChallengeButton id={uuid} feedback={info.feedback} />\n </div>\n );\n });\n\n const policyName = policy.challenges\n .map((x) => x.info.type)\n .join(\" + \");\n\n const opa = !atLeastThereIsOnePolicySolved\n ? undefined\n : policy.isPolicySolved\n ? undefined\n : \"0.6\";\n\n return (\n <div\n key={policy_index}\n class=\"box\"\n style={{\n opacity: opa,\n }}\n >\n <h3 class=\"subtitle\">\n Policy #{policy_index + 1}: {policyName}\n </h3>\n {policy.challenges.length === 0 && (\n <p>This policy doesn&apos;t have any challenges.</p>\n )}\n {policy.challenges.length === 1 && (\n <p>This policy has one challenge.</p>\n )}\n {policy.challenges.length > 1 && (\n <p>This policy has {policy.challenges.length} challenges.</p>\n )}\n {tableBody}\n </div>\n );\n })}\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function ChallengePayingScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return <div>invalid state</div>;\n }\n const payments = [\"\"]; //reducer.currentReducerState.payments ??\n return (\n <AnastasisClientFrame hideNav title=\"Recovery: Challenge Paying\">\n <p>\n Some of the providers require a payment to store the encrypted\n authentication information.\n </p>\n <ul>\n {payments.map((x, i) => {\n return <li key={i}>{x}</li>;\n })}\n </ul>\n <button onClick={() => reducer.transition(\"pay\", {})}>\n Check payment status now\n </button>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame, withProcessLabel } from \"./index.js\";\n\nexport function ContinentSelectionScreen(): VNode {\n const reducer = useAnastasisContext();\n\n // FIXME: remove this when #7056 is fixed\n const countryFromReducer =\n (reducer?.currentReducerState as any).selected_country || \"\";\n const [countryCode, setCountryCode] = useState(countryFromReducer);\n\n if (\n !reducer ||\n !reducer.currentReducerState ||\n !(\"continents\" in reducer.currentReducerState)\n ) {\n return <div />;\n }\n const selectContinent = (continent: string): void => {\n reducer.transition(\"select_continent\", { continent });\n };\n const selectCountry = (country: string): void => {\n setCountryCode(country);\n };\n\n const continentList = reducer.currentReducerState.continents || [];\n const countryList = reducer.currentReducerState.countries || [];\n const theContinent = reducer.currentReducerState.selected_continent || \"\";\n // const cc = reducer.currentReducerState.selected_country || \"\";\n const theCountry = countryList.find((c) => c.code === countryCode);\n const selectCountryAction = async () => {\n // selection should be when the select box changes it value\n if (!theCountry) return;\n // FIXME: Why is there no await?\n reducer.transition(\"select_country\", {\n country_code: countryCode,\n });\n };\n\n // const step1 = reducer.currentReducerState.backup_state === BackupStates.ContinentSelecting ||\n // reducer.currentReducerState.recovery_state === RecoveryStates.ContinentSelecting;\n\n // FIXME: i18n\n const errors = !theCountry ? \"Select a country\" : undefined;\n\n const handleBack = async () => {\n // We want to go to the start, even if we already selected\n // a country.\n // FIXME: What if we don't want to lose all information here?\n // Can we do some kind of soft reset?\n reducer.reset();\n };\n\n return (\n <AnastasisClientFrame\n hideNext={errors}\n title={withProcessLabel(reducer, \"Where do you live?\")}\n onNext={selectCountryAction}\n onBack={handleBack}\n >\n <div class=\"columns\">\n <div class=\"column is-one-third\">\n <div class=\"field\">\n <label class=\"label\">Continent</label>\n <div class=\"control is-expanded has-icons-left\">\n <div class=\"select is-fullwidth\">\n <select\n onChange={(e) => selectContinent(e.currentTarget.value)}\n value={theContinent}\n >\n <option key=\"none\" disabled selected value=\"\">\n {\" \"}\n Choose a continent{\" \"}\n </option>\n {continentList.map((prov) => (\n <option key={prov.name} value={prov.name}>\n {prov.name}\n </option>\n ))}\n </select>\n <div class=\"icon is-small is-left\">\n <i class=\"mdi mdi-earth\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"field\">\n <label class=\"label\">Country</label>\n <div class=\"control is-expanded has-icons-left\">\n <div class=\"select is-fullwidth\">\n <select\n onChange={(e) => selectCountry((e.target as any).value)}\n disabled={!theContinent}\n value={theCountry?.code || \"\"}\n >\n <option key=\"none\" disabled selected value=\"\">\n {\" \"}\n Choose a country{\" \"}\n </option>\n {countryList.map((prov) => (\n <option key={prov.name} value={prov.code}>\n {prov.name}\n </option>\n ))}\n </select>\n <div class=\"icon is-small is-left\">\n <i class=\"mdi mdi-earth\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-two-third\">\n <p>\n Your selection will help us ask right information to uniquely\n identify you when you want to recover your secret again.\n </p>\n <p>\n Choose the country that issued most of your long-term legal\n documents or personal identifiers.\n </p>\n {/* <div\n style={{\n border: \"1px solid gray\",\n borderRadius: \"0.5em\",\n backgroundColor: \"#fbfcbd\",\n padding: \"0.5em\",\n }}\n >\n <p>\n If you just want to try out Anastasis, we recommend that you\n choose <b>Testcontinent</b> with <b>Demoland</b>. For this special\n country, you will be asked for a simple number and not real,\n personal identifiable information.\n </p>\n </div> */}\n </div>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function PoliciesPayingScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n const payments = reducer.currentReducerState.policy_payment_requests ?? [];\n\n return (\n <AnastasisClientFrame hideNav title=\"Backup: Recovery Document Payments\">\n <p>\n Some of the providers require a payment to store the encrypted recovery\n document.\n </p>\n <ul>\n {payments.map((x, i) => {\n return (\n <li key={i}>\n {x.provider}: {x.payto}\n </li>\n );\n })}\n </ul>\n <button onClick={() => reducer.transition(\"pay\", {})}>\n Check payment status now\n </button>\n </AnastasisClientFrame>\n );\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 */\nimport { bytesToString, decodeCrock } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { QR } from \"../../components/QR.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function RecoveryFinishedScreen(): VNode {\n const reducer = useAnastasisContext();\n const [copied, setCopied] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setCopied(false);\n }, 1000);\n }, [copied]);\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"recovery\") {\n return <div>invalid state</div>;\n }\n const secretName = reducer.currentReducerState.recovery_document?.secret_name;\n const encodedSecret = reducer.currentReducerState.core_secret;\n if (!encodedSecret) {\n return (\n <AnastasisClientFrame title=\"Recovery Problem\" hideNav>\n <p>Secret not found</p>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={() => reducer.back()}>\n Back\n </button>\n </div>\n </AnastasisClientFrame>\n );\n }\n const secret = bytesToString(decodeCrock(encodedSecret.value));\n const plainText =\n encodedSecret.value.length < 1000 && encodedSecret.mime === \"text/plain\";\n\n let [uri, setUri] = useState(`data:${encodedSecret.mime},${secret}`);\n fetch(`data:${encodedSecret.mime},${secret}`) // TODO: look into using new Blob\n .then((v) => v.blob())\n .then((blob) => URL.createObjectURL(blob))\n .then((newUri) => {\n setUri(newUri);\n });\n return (\n <AnastasisClientFrame title=\"Recovery Success\" hideNav>\n <h2 class=\"subtitle\">Your secret was recovered</h2>\n {secretName && (\n <p class=\"block\">\n <b>Secret name:</b> {secretName}\n </p>\n )}\n <div class=\"block buttons\" disabled={copied}>\n {plainText ? (\n <button\n class=\"button\"\n onClick={() => {\n navigator.clipboard.writeText(secret);\n setCopied(true);\n }}\n >\n {!copied ? \"Copy\" : \"Copied\"}\n </button>\n ) : undefined}\n\n <a\n class=\"button is-info\"\n download={\n encodedSecret.filename ? encodedSecret.filename : \"secret.file\"\n }\n href={uri}\n >\n <div class=\"icon is-small \">\n <i class=\"mdi mdi-download\" />\n </div>\n <span>Download content</span>\n </a>\n </div>\n\n {plainText ? (\n <div class=\"block\">\n <QR text={secret} />\n </div>\n ) : undefined}\n\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n <p>\n <div class=\"buttons ml-4\">\n <button\n class=\"button is-primary is-right\"\n onClick={() => reducer.reset()}\n >\n Start again\n </button>\n </div>\n </p>\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { AuthenticationProviderStatusOk } from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"./authMethod/index.js\";\nimport { EditPoliciesScreen } from \"./EditPoliciesScreen.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function ReviewPoliciesScreen(): VNode {\n const [editingPolicy, setEditingPolicy] = useState<number | undefined>();\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n\n const configuredAuthMethods =\n reducer.currentReducerState.authentication_methods ?? [];\n const policies = reducer.currentReducerState.policies ?? [];\n\n const providers = reducer.currentReducerState.authentication_providers ?? {};\n\n if (editingPolicy !== undefined) {\n return (\n <EditPoliciesScreen\n index={editingPolicy}\n cancel={() => setEditingPolicy(undefined)}\n confirm={async (newMethods) => {\n await reducer.transition(\"update_policy\", {\n policy_index: editingPolicy,\n policy: newMethods,\n });\n setEditingPolicy(undefined);\n }}\n />\n );\n }\n\n const errors = policies.length < 1 ? \"Need more policies\" : undefined;\n return (\n <AnastasisClientFrame\n hideNext={errors}\n title=\"Backup: Review Recovery Policies\"\n >\n {policies.length > 0 && (\n <p class=\"block\">\n Based on your configured authentication method you have created, some\n policies have been configured. In order to recover your secret you\n have to solve all the challenges of at least one policy.\n </p>\n )}\n {policies.length < 1 && (\n <p class=\"block\">\n No policies had been created. Go back and add more authentication\n methods.\n </p>\n )}\n <div class=\"block\">\n <button\n class=\"button is-success\"\n style={{ marginLeft: 10 }}\n onClick={() => setEditingPolicy(policies.length)}\n >\n Add new policy\n </button>\n </div>\n {policies.map((p, policy_index) => {\n const methods = p.methods\n .map(\n (x) =>\n configuredAuthMethods[x.authentication_method] && {\n ...configuredAuthMethods[x.authentication_method],\n provider: x.provider,\n },\n )\n .filter((x) => !!x);\n\n const policyName = methods.map((x) => x.type).join(\" + \");\n\n if (p.methods.length > methods.length) {\n //there is at least one authentication method that is corrupted\n return null;\n }\n\n return (\n <div\n key={policy_index}\n class=\"box\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div>\n <h3 class=\"subtitle\">\n Policy #{policy_index + 1}: {policyName}\n </h3>\n {!methods.length && <p>No auth method found</p>}\n {methods.map((m, i) => {\n const p = providers[\n m.provider\n ] as AuthenticationProviderStatusOk;\n return (\n <p\n key={i}\n class=\"block\"\n style={{ display: \"flex\", alignItems: \"center\" }}\n >\n <span class=\"icon\">\n {authMethods[m.type as KnownAuthMethods]?.icon}\n </span>\n <span>\n {m.instructions} recovery provided by{\" \"}\n <a href={m.provider} target=\"_blank\" rel=\"noreferrer\">\n {p.business_name}\n </a>\n </span>\n </p>\n );\n })}\n </div>\n <div\n style={{\n marginTop: \"auto\",\n marginBottom: \"auto\",\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"column\",\n }}\n >\n <button\n class=\"button is-info block\"\n onClick={() => setEditingPolicy(policy_index)}\n >\n Edit\n </button>\n <button\n class=\"button is-danger block\"\n onClick={() =>\n reducer.transition(\"delete_policy\", { policy_index })\n }\n >\n Delete\n </button>\n </div>\n </div>\n );\n })}\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { authMethods, KnownAuthMethods } from \"./authMethod/index.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport interface ProviderInfo {\n url: string;\n cost: string;\n isFree: boolean;\n}\n\nexport type ProviderInfoByType = {\n [type in KnownAuthMethods]?: ProviderInfo[];\n};\n\ninterface Props {\n index: number;\n cancel: () => void;\n confirm: (changes: MethodProvider[]) => void;\n}\n\nexport interface MethodProvider {\n authentication_method: number;\n provider: string;\n}\n\nexport function EditPoliciesScreen({\n index: policy_index,\n cancel,\n confirm,\n}: Props): VNode {\n const [changedProvider, setChangedProvider] = useState<Array<string>>([]);\n\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n\n const selectableProviders: ProviderInfoByType = {};\n const allProviders = Object.entries(\n reducer.currentReducerState.authentication_providers || {},\n );\n for (let index = 0; index < allProviders.length; index++) {\n const [url, status] = allProviders[index];\n if (\"methods\" in status) {\n status.methods.map((m) => {\n const type: KnownAuthMethods = m.type as KnownAuthMethods;\n const values = selectableProviders[type] || [];\n const isFree = !m.usage_fee || m.usage_fee.endsWith(\":0\");\n values.push({ url, cost: m.usage_fee, isFree });\n selectableProviders[type] = values;\n });\n }\n }\n\n const allAuthMethods =\n reducer.currentReducerState.authentication_methods ?? [];\n const policies = reducer.currentReducerState.policies ?? [];\n const policy = policies[policy_index];\n\n for (\n let method_index = 0;\n method_index < allAuthMethods.length;\n method_index++\n ) {\n policy?.methods.find((m) => m.authentication_method === method_index)\n ?.provider;\n }\n\n function sendChanges(): void {\n const newMethods: MethodProvider[] = [];\n allAuthMethods.forEach((method, index) => {\n const oldValue = policy?.methods.find(\n (m) => m.authentication_method === index,\n );\n if (changedProvider[index] === undefined && oldValue !== undefined) {\n newMethods.push(oldValue);\n }\n if (\n changedProvider[index] !== undefined &&\n changedProvider[index] !== \"\"\n ) {\n newMethods.push({\n authentication_method: index,\n provider: changedProvider[index],\n });\n }\n });\n confirm(newMethods);\n }\n\n return (\n <AnastasisClientFrame\n hideNav\n title={!policy ? \"Backup: New Policy\" : \"Backup: Edit Policy\"}\n >\n <section class=\"section\">\n {!policy ? (\n <p>Creating a new policy #{policy_index}</p>\n ) : (\n <p>Editing policy #{policy_index}</p>\n )}\n {allAuthMethods.map((method, index) => {\n //take the url from the updated change or from the policy\n const providerURL =\n changedProvider[index] === undefined\n ? policy?.methods.find((m) => m.authentication_method === index)\n ?.provider\n : changedProvider[index];\n\n const type: KnownAuthMethods = method.type as KnownAuthMethods;\n function changeProviderTo(url: string): void {\n const copy = [...changedProvider];\n copy[index] = url;\n setChangedProvider(copy);\n }\n return (\n <div\n key={index}\n class=\"block\"\n style={{ display: \"flex\", alignItems: \"center\" }}\n >\n <span class=\"icon\">{authMethods[type]?.icon}</span>\n <span>{method.instructions}</span>\n <span>\n <span class=\"select \">\n <select\n onChange={(e) => changeProviderTo(e.currentTarget.value)}\n value={providerURL ?? \"\"}\n >\n <option key=\"none\" value=\"\">\n {\" \"}\n &lt;&lt; off &gt;&gt;{\" \"}\n </option>\n {selectableProviders[type]?.map((prov) => (\n <option key={prov.url} value={prov.url}>\n {prov.url}\n </option>\n ))}\n </select>\n </span>\n </span>\n </div>\n );\n })}\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={cancel}>\n Cancel\n </button>\n <span class=\"buttons\">\n <button class=\"button\" onClick={() => setChangedProvider([])}>\n Reset\n </button>\n <button class=\"button is-info\" onClick={sendChanges}>\n Confirm\n </button>\n </span>\n </div>\n </section>\n </AnastasisClientFrame>\n );\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 */\nimport { encodeCrock, stringToBytes } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport {\n FileInput,\n FileTypeContent,\n} from \"../../components/fields/FileInput.js\";\nimport { TextInput } from \"../../components/fields/TextInput.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function SecretEditorScreen(): VNode {\n const reducer = useAnastasisContext();\n const [secretValue, setSecretValue] = useState(\"\");\n const [secretFile, _setSecretFile] = useState<FileTypeContent | undefined>(\n undefined,\n );\n function setSecretFile(v: FileTypeContent | undefined): void {\n setSecretValue(\"\"); // reset secret value when uploading a file\n _setSecretFile(v);\n }\n\n const currentSecretName =\n reducer?.currentReducerState &&\n \"secret_name\" in reducer.currentReducerState &&\n reducer.currentReducerState.secret_name;\n\n const [secretName, setSecretName] = useState(currentSecretName || \"\");\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n\n const secretNext = async (): Promise<void> => {\n const secret = secretFile\n ? {\n value: encodeCrock(stringToBytes(secretFile.content)),\n filename: secretFile.name,\n mime: secretFile.type,\n }\n : {\n value: encodeCrock(stringToBytes(secretValue)),\n mime: \"text/plain\",\n };\n return reducer.runTransaction(async (tx) => {\n await tx.transition(\"enter_secret_name\", {\n name: secretName,\n });\n await tx.transition(\"enter_secret\", {\n secret,\n expiration: {\n t_s: new Date().getTime() + 60 * 60 * 24 * 365 * 5,\n },\n });\n await tx.transition(\"next\", {});\n });\n };\n const errors = !secretName\n ? \"Add a secret name\"\n : !secretValue && !secretFile\n ? \"Add a secret value or a choose a file to upload\"\n : undefined;\n function goNextIfNoErrors(): void {\n if (!errors) secretNext();\n }\n return (\n <AnastasisClientFrame\n hideNext={errors}\n title=\"Backup: Provide secret to backup\"\n onNext={() => secretNext()}\n >\n <div class=\"block\">\n <TextInput\n label=\"Secret name:\"\n tooltip=\"This allows you to uniquely identify a secret if you have made multiple back ups. The value entered here will NOT be protected by the authentication checks!\"\n grabFocus\n onConfirm={goNextIfNoErrors}\n bind={[secretName, setSecretName]}\n />\n <div>\n Names should be unique, so that you can easily identify your secret\n later.\n </div>\n </div>\n <div class=\"block\">\n <TextInput\n inputType=\"multiline\"\n disabled={!!secretFile}\n onConfirm={goNextIfNoErrors}\n label=\"Enter the secret as text:\"\n bind={[secretValue, setSecretValue]}\n />\n </div>\n <div class=\"block\">\n Or upload a secret file\n <FileInput label=\"Choose file\" onChange={setSecretFile} />\n {secretFile && (\n <div>\n Uploading secret file <b>{secretFile.name}</b>{\" \"}\n <a onClick={() => setSecretFile(undefined)}>cancel</a>\n </div>\n )}\n </div>\n </AnastasisClientFrame>\n );\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\";\n\nconst MAX_IMAGE_UPLOAD_SIZE = 1024 * 1024;\n\nexport interface FileTypeContent {\n content: string;\n type: string;\n name: string;\n}\n\nexport interface FileInputProps {\n label: string;\n grabFocus?: boolean;\n disabled?: boolean;\n error?: string;\n placeholder?: string;\n tooltip?: string;\n onChange: (v: FileTypeContent | undefined) => void;\n}\n\nexport function FileInput(props: FileInputProps): VNode {\n const inputRef = useRef<HTMLInputElement>(null);\n useLayoutEffect(() => {\n if (props.grabFocus) {\n inputRef.current?.focus();\n }\n }, [props.grabFocus]);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [sizeError, setSizeError] = useState(false);\n return (\n <div class=\"field\">\n <label class=\"label\">\n <a class=\"button\" onClick={(e) => fileInputRef.current?.click()}>\n <div class=\"icon is-small \">\n <i class=\"mdi mdi-folder\" />\n </div>\n <span>{props.label}</span>\n </a>\n {props.tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={props.tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n <div class=\"control\">\n <input\n ref={fileInputRef}\n style={{ display: \"none\" }}\n type=\"file\"\n // name={String(name)}\n onChange={(e) => {\n const f: FileList | null = e.currentTarget.files;\n if (!f || f.length != 1) {\n return props.onChange(undefined);\n }\n if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {\n setSizeError(true);\n return props.onChange(undefined);\n }\n setSizeError(false);\n return f[0].arrayBuffer().then((b) => {\n const b64 = btoa(\n new Uint8Array(b).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n \"\",\n ),\n );\n return props.onChange({\n content: `data:${f[0].type};base64,${b64}`,\n name: f[0].name,\n type: f[0].type,\n });\n });\n }}\n />\n {props.error && <p class=\"help is-danger\">{props.error}</p>}\n {sizeError && (\n <p class=\"help is-danger\">File should be smaller than 1 MB</p>\n )}\n </div>\n </div>\n );\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 */\nimport {\n AggregatedPolicyMetaInfo,\n AuthenticationProviderStatus,\n AuthenticationProviderStatusOk,\n} from \"@gnu-taler/anastasis-core\";\nimport { h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../components/AsyncButton.js\";\nimport { PhoneNumberInput } from \"../../components/fields/NumberInput.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport AddingProviderScreen from \"./AddingProviderScreen/index.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function SecretSelectionScreenFound({\n policies,\n onManageProvider,\n onNext,\n}: {\n policies: AggregatedPolicyMetaInfo[];\n onManageProvider: () => void;\n onNext: (version: AggregatedPolicyMetaInfo) => void;\n}): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n\n if (\n !reducer.currentReducerState ||\n reducer.currentReducerState.reducer_type !== \"recovery\"\n ) {\n return <div>invalid state</div>;\n }\n return (\n <AnastasisClientFrame\n title=\"Recovery: Select secret\"\n hideNext=\"Please select version to recover\"\n >\n <div class=\"columns\">\n <div class=\"column\">\n <p class=\"block\">Found versions:</p>\n {policies.map((version, i) => (\n <div key={i} class=\"box\">\n <div\n class=\"block\"\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <b>Name:</b>&nbsp;<span>{version.secret_name}</span>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <b>Id:</b>&nbsp;\n <span\n class=\"icon has-tooltip-top\"\n data-tooltip={version.policy_hash}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n <span>{version.policy_hash.substring(0, 22)}...</span>\n </div>\n </div>\n\n <div>\n <AsyncButton\n class=\"button\"\n onClick={async () => onNext(version)}\n >\n Recover\n </AsyncButton>\n </div>\n </div>\n </div>\n ))}\n </div>\n <div class=\"column\">\n <p>\n Secret found, you can select another version or continue to the\n challenges solving\n </p>\n <p class=\"block\">\n <a onClick={onManageProvider}>Manage recovery providers</a>\n </p>\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\nexport function SecretSelectionScreen(): VNode {\n const reducer = useAnastasisContext();\n const [manageProvider, setManageProvider] = useState(false);\n\n useEffect(() => {\n async function f() {\n if (reducer) {\n await reducer.discoverStart();\n }\n }\n f().catch((e) => console.log(e));\n }, []);\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n\n if (\n !reducer.currentReducerState ||\n reducer.currentReducerState.reducer_type !== \"recovery\"\n ) {\n return <div>invalid state</div>;\n }\n\n if (manageProvider) {\n return (\n <AddingProviderScreen onCancel={async () => setManageProvider(false)} />\n );\n }\n\n if (\n reducer.discoveryState.state === \"none\" ||\n reducer.discoveryState.state === \"active\"\n ) {\n // Can this even happen?\n return <SecretSelectionScreenWaiting />;\n }\n\n const policies = reducer.discoveryState.aggregatedPolicies ?? [];\n\n if (policies.length === 0) {\n return (\n <AddingProviderScreen\n onCancel={async () => setManageProvider(false)}\n notifications={[\n {\n message: \"Secret not found\",\n type: \"ERROR\",\n description:\n \"With the information you provided we could not found secret in any of the providers. You can try adding more providers if you think the data is correct.\",\n },\n ]}\n />\n );\n }\n\n return (\n <SecretSelectionScreenFound\n policies={policies}\n onNext={(version) => reducer.transition(\"select_version\", version)}\n onManageProvider={async () => setManageProvider(false)}\n />\n );\n}\n\n// export function OldSecretSelectionScreen(): VNode {\n// const [selectingVersion, setSelectingVersion] = useState<boolean>(false);\n// const reducer = useAnastasisContext();\n// const [manageProvider, setManageProvider] = useState(false);\n\n// useEffect(() => {\n// async function f() {\n// if (reducer) {\n// await reducer.discoverStart();\n// }\n// }\n// f().catch((e) => console.log(e));\n// }, []);\n\n// const currentVersion =\n// (reducer?.currentReducerState &&\n// \"recovery_document\" in reducer.currentReducerState &&\n// reducer.currentReducerState.recovery_document?.version) ||\n// 0;\n\n// if (!reducer) {\n// return <div>no reducer in context</div>;\n// }\n// if (\n// !reducer.currentReducerState ||\n// reducer.currentReducerState.reducer_type !== \"recovery\"\n// ) {\n// return <div>invalid state</div>;\n// }\n\n// async function doSelectVersion(p: string, n: number): Promise<void> {\n// if (!reducer) return Promise.resolve();\n// return reducer.runTransaction(async (tx) => {\n// await tx.transition(\"select_version\", {\n// version: n,\n// provider_url: p,\n// });\n// setSelectingVersion(false);\n// });\n// }\n\n// const provs = reducer.currentReducerState.authentication_providers ?? {};\n// const recoveryDocument = reducer.currentReducerState.recovery_document;\n\n// if (!recoveryDocument) {\n// return (\n// <ChooseAnotherProviderScreen\n// providers={provs}\n// selected=\"\"\n// onChange={(newProv) => doSelectVersion(newProv, 0)}\n// />\n// );\n// }\n\n// if (selectingVersion) {\n// return (\n// <SelectOtherVersionProviderScreen\n// providers={provs}\n// provider={recoveryDocument.provider_url}\n// version={recoveryDocument.version}\n// onCancel={() => setSelectingVersion(false)}\n// onConfirm={doSelectVersion}\n// />\n// );\n// }\n\n// if (manageProvider) {\n// return (\n// <AddingProviderScreen onCancel={async () => setManageProvider(false)} />\n// );\n// }\n\n// const providerInfo = provs[\n// recoveryDocument.provider_url\n// ] as AuthenticationProviderStatusOk;\n\n// return (\n// <AnastasisClientFrame title=\"Recovery: Select secret\">\n// <div class=\"columns\">\n// <div class=\"column\">\n// <div class=\"box\" style={{ border: \"2px solid green\" }}>\n// <h1 class=\"subtitle\">{providerInfo.business_name}</h1>\n// <div class=\"block\">\n// {currentVersion === 0 ? (\n// <p>Set to recover the latest version</p>\n// ) : (\n// <p>Set to recover the version number {currentVersion}</p>\n// )}\n// </div>\n// <div class=\"buttons is-right\">\n// <button class=\"button\" onClick={(e) => setSelectingVersion(true)}>\n// Change secret&apos;s version\n// </button>\n// </div>\n// </div>\n// </div>\n// <div class=\"column\">\n// <p>\n// Secret found, you can select another version or continue to the\n// challenges solving\n// </p>\n// <p class=\"block\">\n// <a onClick={() => setManageProvider(true)}>\n// Manage recovery providers\n// </a>\n// </p>\n// </div>\n// </div>\n// </AnastasisClientFrame>\n// );\n// }\n\nfunction ChooseAnotherProviderScreen({\n onChange,\n}: {\n onChange: (prov: string) => void;\n}): VNode {\n const reducer = useAnastasisContext();\n\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n\n if (\n !reducer.currentReducerState ||\n reducer.currentReducerState.reducer_type !== \"recovery\"\n ) {\n return <div>invalid state</div>;\n }\n const providers = reducer.currentReducerState.authentication_providers ?? {};\n\n return (\n <AnastasisClientFrame\n hideNext=\"Recovery document not found\"\n title=\"Recovery: Problem\"\n >\n <p>No recovery document found, try with another provider</p>\n <div class=\"field\">\n <label class=\"label\">Provider</label>\n <div class=\"control is-expanded has-icons-left\">\n <div class=\"select is-fullwidth\">\n <select onChange={(e) => onChange(e.currentTarget.value)} value=\"\">\n <option key=\"none\" disabled selected value=\"\">\n Choose a provider\n </option>\n {Object.keys(providers).map((url) => {\n const p = providers[url];\n if (!(\"methods\" in p)) return null;\n return (\n <option key={url} value={url}>\n {p.business_name}\n </option>\n );\n })}\n </select>\n <div class=\"icon is-small is-left\">\n <i class=\"mdi mdi-earth\" />\n </div>\n </div>\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\nfunction SelectOtherVersionProviderScreen({\n providers,\n provider,\n version,\n onConfirm,\n onCancel,\n}: {\n onCancel: () => void;\n provider: string;\n version: number;\n providers: { [url: string]: AuthenticationProviderStatus };\n onConfirm: (prov: string, v: number) => Promise<void>;\n}): VNode {\n const [otherProvider, setOtherProvider] = useState<string>(provider);\n const [otherVersion, setOtherVersion] = useState(\n version > 0 ? String(version) : \"\",\n );\n const otherProviderInfo = providers[\n otherProvider\n ] as AuthenticationProviderStatusOk;\n\n return (\n <AnastasisClientFrame hideNav title=\"Recovery: Select secret\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"box\">\n <h1 class=\"subtitle\">Provider {otherProviderInfo.business_name}</h1>\n <div class=\"block\">\n {version === 0 ? (\n <p>Set to recover the latest version</p>\n ) : (\n <p>Set to recover the version number {version}</p>\n )}\n <p>Specify other version below or use the latest</p>\n </div>\n\n <div class=\"field\">\n <label class=\"label\">Provider</label>\n <div class=\"control is-expanded has-icons-left\">\n <div class=\"select is-fullwidth\">\n <select\n onChange={(e) => setOtherProvider(e.currentTarget.value)}\n value={otherProvider}\n >\n <option key=\"none\" disabled selected value=\"\">\n {\" \"}\n Choose a provider{\" \"}\n </option>\n {Object.keys(providers).map((url) => {\n const p = providers[url];\n if (!(\"methods\" in p)) return null;\n return (\n <option key={url} value={url}>\n {p.business_name}\n </option>\n );\n })}\n </select>\n <div class=\"icon is-small is-left\">\n <i class=\"mdi mdi-earth\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"container\">\n <PhoneNumberInput\n label=\"Version\"\n placeholder=\"version number to recover\"\n grabFocus\n bind={[otherVersion, setOtherVersion]}\n />\n </div>\n </div>\n <div\n style={{\n marginTop: \"2em\",\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <button class=\"button\" onClick={onCancel}>\n Cancel\n </button>\n <div class=\"buttons\">\n <AsyncButton\n class=\"button\"\n onClick={() => onConfirm(otherProvider, 0)}\n >\n Use latest\n </AsyncButton>\n <AsyncButton\n class=\"button is-info\"\n onClick={() =>\n onConfirm(otherProvider, parseInt(otherVersion, 10))\n }\n >\n Confirm\n </AsyncButton>\n </div>\n </div>\n </div>\n </div>\n </AnastasisClientFrame>\n );\n}\n\nfunction SecretSelectionScreenWaiting(): VNode {\n return (\n <AnastasisClientFrame title=\"Recovery: Select secret\">\n <div>loading secret versions</div>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { FileButton } from \"../../components/FlieButton.js\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function StartScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n return (\n <AnastasisClientFrame hideNav title=\"Home\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"buttons\">\n <button\n class=\"button is-success\"\n autoFocus\n onClick={() => reducer.startBackup()}\n >\n <div class=\"icon\">\n <i class=\"mdi mdi-arrow-up\" />\n </div>\n <span>Backup a secret</span>\n </button>\n\n <button\n class=\"button is-info\"\n onClick={() => reducer.startRecover()}\n >\n <div class=\"icon\">\n <i class=\"mdi mdi-arrow-down\" />\n </div>\n <span>Recover a secret</span>\n </button>\n\n <FileButton\n label=\"Restore a session\"\n onChange={(content) => {\n if (content?.type === \"application/json\") {\n reducer.importState(content.content);\n }\n }}\n />\n\n {/* <button class=\"button\">\n <div class=\"icon\"><i class=\"mdi mdi-file\" /></div>\n <span>Restore a session</span>\n </button> */}\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </AnastasisClientFrame>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useRef, useState } from \"preact/hooks\";\n\nconst MAX_IMAGE_UPLOAD_SIZE = 1024 * 1024;\n\nexport interface FileTypeContent {\n content: string;\n type: string;\n name: string;\n}\n\ninterface Props {\n label: string;\n onChange: (v: FileTypeContent | undefined) => void;\n}\nexport function FileButton(props: Props): VNode {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [sizeError, setSizeError] = useState(false);\n return (\n <div>\n <button class=\"button\" onClick={(e) => fileInputRef.current?.click()}>\n <span>{props.label}</span>\n </button>\n <input\n ref={fileInputRef}\n style={{ display: \"none\" }}\n type=\"file\"\n onChange={(e) => {\n const f: FileList | null = e.currentTarget.files;\n if (!f || f.length != 1) {\n return props.onChange(undefined);\n }\n if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {\n setSizeError(true);\n return props.onChange(undefined);\n }\n setSizeError(false);\n return f[0].arrayBuffer().then((b) => {\n const content = new Uint8Array(b).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n \"\",\n );\n return props.onChange({\n content,\n name: f[0].name,\n type: f[0].type,\n });\n });\n }}\n />\n {sizeError && (\n <p class=\"help is-danger\">File should be smaller than 1 MB</p>\n )}\n </div>\n );\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 */\nimport { h, VNode } from \"preact\";\nimport { useAnastasisContext } from \"../../context/anastasis.js\";\nimport { AnastasisClientFrame } from \"./index.js\";\n\nexport function TruthsPayingScreen(): VNode {\n const reducer = useAnastasisContext();\n if (!reducer) {\n return <div>no reducer in context</div>;\n }\n if (reducer.currentReducerState?.reducer_type !== \"backup\") {\n return <div>invalid state</div>;\n }\n const payments = reducer.currentReducerState.payments ?? [];\n return (\n <AnastasisClientFrame hideNext={\"FIXME\"} title=\"Backup: Truths Paying\">\n <p>\n Some of the providers require a payment to store the encrypted\n authentication information.\n </p>\n <ul>\n {payments.map((x, i) => {\n return <li key={i}>{x}</li>;\n })}\n </ul>\n <button onClick={() => reducer.transition(\"pay\", {})}>\n Check payment status now\n </button>\n </AnastasisClientFrame>\n );\n}\n"],
+ "mappings": "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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,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,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A,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,SAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,SAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,SAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,SAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,SAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAAA,GAAK,UAAA,GACvB,IAAIiH,GAAOjH,GAAO,EAA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",
+ "names": ["assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "this", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "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", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "createContext", "defaultValue", "contextId", "Consumer", "contextValue", "Provider", "subs", "ctx", "_props", "old", "splice", "isValidElement", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "undefined", "v", "sign", "n", "i", "x", "add", "a", "b", "r", "base", "l", "j", "y", "d", "c", "l2", "q", "self", "_2", "t", "isPrime", "bits", "p", "e", "max", "digit", "isValid", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "parse", "self", "a", "r", "lexer", "c", "assign", "obj", "props", "i", "exec", "url", "route", "opts", "let", "ret", "reg", "c", "match", "matches", "p", "split", "length", "r", "decodeURIComponent", "slice", "join", "segmentize", "replace", "max", "Math", "charAt", "param", "flags", "EMPTY", "plus", "indexOf", "star", "val", "map", "default", "pathRankSort", "a", "b", "rank", "index", "prepareVNodeForRanking", "vnode", "rankChild", "rankSegment", "segment", "path", "setUrl", "type", "customHistory", "history", "getCurrentUrl", "location", "getCurrentLocation", "pathname", "search", "e", "canRoute", "routeTo", "ROUTERS", "didRoute", "subscribers", "routeFromLink", "node", "getAttribute", "href", "target", "handleLinkClick", "ctrlKey", "metaKey", "altKey", "shiftKey", "button", "currentTarget", "this", "prevent", "stopImmediatePropagation", "stopPropagation", "preventDefault", "delegateLinkHandler", "t", "nodeName", "String", "toUpperCase", "hasAttribute", "parentNode", "initEventListeners", "eventListenersInitialized", "addEventListener", "const", "Router", "u", "super", "state", "shouldComponentUpdate", "static", "onChange", "getMatchingChildren", "toChildArray", "children", "setState", "updating", "forceUpdate", "componentWillMount", "push", "componentDidMount", "unlisten", "listen", "componentWillUnmount", "splice", "componentWillUpdate", "componentDidUpdate", "invoke", "filter", "sort", "newProps", "ref", "key", "cloneElement", "Boolean", "render", "ref$1", "active", "current", "previous", "previousUrl", "router", "Component", "Link", "createElement", "onClick", "Route", "component", "i", "self", "Match", "Link", "qrcode", "r", "c", "i", "j", "bits", "typeNumber", "errorCorrectionLevel", "max", "x", "y", "s", "r2", "p", "b", "unicodeMap", "b2", "b3", "k", "v", "digit", "d", "a", "n", "_num", "e", "num", "_this", "data", "stringToBytes", "encode", "decode", "r", "i", "x", "n", "I", "h", "l", "y", "d", "o", "p", "k", "c", "j2", "j3", "x2", "u", "m", "b", "z", "s", "t2", "t3", "d2", "d3", "h2", "h3", "r2", "r3", "g", "f", "a", "v", "q", "t", "j", "A", "M", "t22", "b2", "b3", "b4", "S", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "M", "A", "s", "L", "k", "S", "I", "m", "n", "i", "t", "h", "p", "q", "k", "n", "i", "b", "i", "i", "h", "m", "c", "i", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "err", "timer", "CancellationToken", "a", "r", "n", "x", "c", "a2", "x2", "a", "b", "n", "r", "s", "r2", "i", "normal", "small", "digit", "k", "i", "n", "j", "w", "t", "m", "q", "p", "i", "c", "a", "b", "R", "n", "e", "base", "res", "v", "URL", "URLSearchParams", "x", "URL", "e", "s", "i", "s2", "LogLevel", "m", "e", "location", "c", "p", "x", "d", "x", "c", "i", "x", "c", "x", "c", "s", "x", "c", "x", "c", "e", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "P", "e", "a", "b", "i", "p", "c", "bits", "bits", "bits", "x", "r", "i", "_a", "C", "TalerPreciseTimestamp", "now", "t", "s", "TalerProtocolTimestamp", "t2", "max", "Duration", "d", "now", "s", "i", "d2", "max", "n", "AbsoluteTime", "t2", "t", "at", "x", "c", "DenomKeyType", "t", "DenominationPubKey", "p2", "ExchangeProtocolVersion", "MerchantProtocolVersion", "b", "i", "r", "j", "_a", "x", "s", "l", "v", "m", "a", "d", "p", "o", "e", "nt", "e", "l", "s", "t", "i", "r", "c", "n", "add", "b", "d", "p", "v", "o", "t2", "a", "i2", "w", "_a", "_b", "j", "a", "b", "d", "n", "m", "l", "i", "e", "d", "b", "v", "c", "o", "fl", "h", "d", "a", "d", "e", "n", "a", "d", "v", "N", "i", "j", "hashArgon2id", "s", "b", "c", "p", "hash", "d", "logger", "n", "TalerSignaturePurpose", "WalletAccountMergeFlags", "c", "p", "x", "rev", "bigint", "Edx25519", "L", "sign", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "textEncoder", "logger", "s", "s", "p", "r", "TalerUriType", "TalerUriAction", "s", "c", "q", "URLSearchParams", "p", "v", "k", "TalerCorebankApi", "MonitorTimeframeParam", "TanChannel", "TalerExchangeApi", "AmlState", "TalerMerchantApi", "TokenFamilyKind", "HttpStatusCode", "LibtoolVersion", "v", "logger", "logger", "ReserveTransactionType", "logger", "logger", "CreditDebitIndicator", "logger", "ContractTermsUtil", "i", "x", "h", "k", "e", "hash", "fnutil", "f", "x", "TransactionMajorState", "TransactionMinorState", "TransactionAction", "TransactionType", "WithdrawalType", "DenomLossEventType", "PaymentStatus", "TransactionAmountMode", "BalanceFlag", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "ExchangeUpdateStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "ProviderPaymentType", "TalerBankConversionCacheEviction", "TalerCoreBankCacheEviction", "TalerMerchantInstanceCacheEviction", "TalerMerchantManagementCacheEviction", "ChallengerCacheEviction", "TalerExchangeCacheEviction", "logger", "strings", "s", "i", "c", "i", "x", "n", "c", "s", "NotificationType", "ObservabilityEventType", "logger", "h", "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", "useErrorBoundary", "cb", "state", "getHookState", "currentIndex", "errState", "useState", "__", "currentComponent", "componentDidCatch", "err", "errorInfo", "undefined", "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", "p", "initial", "initial", "h", "q", "a", "b", "BackupStates", "RecoveryStates", "hashArgon2id", "d", "typedArrayConcat", "c", "p", "x", "s", "i", "hash", "hashArgon2id", "ChallengeType", "logger", "p", "x", "i", "m", "n", "a", "j", "ChallengeFeedbackStatus", "i", "s", "n", "r", "logger", "x", "URL", "e", "typedArrayConcat", "i", "hash", "talerPayUri", "m", "p", "s2", "s", "a", "h", "_", "T", "h", "p", "error", "_", "s", "initial", "Context", "q", "i18n", "h", "p", "n", "i", "e", "s", "p", "f", "defaultOptions", "defaultOptions", "defaultOptions", "MILLISECONDS_IN_WEEK", "sign", "formatters", "localize", "sign", "delimiter", "formatLong", "format", "format", "defaultOptions", "locale", "_defineProperty", "match", "_defineProperty", "match", "sign", "n", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "_defineProperty", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "defaultOptions", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "match", "_defineProperty", "_defineProperty", "_defineProperty", "_defineProperty", "_defineProperty", "parsers", "formattingTokensRegExp", "longFormattingTokensRegExp", "escapedStringRegExp", "doubleQuoteRegExp", "unescapedLatinCharacterRegExp", "defaultOptions", "locale", "parsers", "cleanEscapedString", "setter", "a", "b", "e", "i", "initial", "_", "s", "p", "e", "d", "v", "_", "s", "p", "e", "_", "s", "p", "e", "e", "p", "isBackup", "i", "error", "v", "e", "base", "p", "s", "c", "_", "s", "p", "e", "p", "errors", "c", "i", "p", "i18n", "error", "e", "p", "errors", "c", "i", "p", "p", "errors", "c", "i", "p", "i18n", "error", "p", "errors", "c", "i", "p", "p", "_", "s", "errors", "c", "i", "p", "i18n", "error", "e", "_", "h", "qrcode", "b64Tab", "uint8array2packed", "arr", "existingPacked", "existingPackedLen", "bigEndianMod", "i", "intOffset", "byteOffset", "packed", "existingByteLen", "shiftModifier", "length", "push", "value", "binLen", "getStrConverter", "format", "utfType", "Error", "str", "existingBin", "existingBinLen", "num", "parseInt", "substr", "isNaN", "codePnt", "codePntArr", "j", "transposeBytes", "byteCnt", "charCodeAt", "index", "tmpInt", "strPart", "firstEqual", "indexOf", "search", "replace", "charAt", "ArrayBuffer", "ignore", "Uint8Array", "getOutputConverter", "outputBinLen", "outputOptions", "binarray", "outputLength", "formatOpts", "hex_tab", "srcByte", "toUpperCase", "triplet", "int1", "int2", "String", "fromCharCode", "retVal", "arrView", "K_sha2", "H_trunc", "H_full", "sha_variant_error", "packedLEConcat", "a", "b", "arrOffset", "aByteLen", "bByteLen", "leftShiftAmount", "rightShiftAmount", "pop", "concat", "getOutputOpts", "options", "outputUpper", "b64Pad", "outputLen", "lenErrstr", "parseInputOption", "key", "fallback", "errStr", "jsSHABase", "constructor", "variant", "inputFormat", "inputOptions", "this", "numRounds", "shaVariant", "remainder", "remainderLen", "updateCalled", "processedLen", "macKeySet", "keyWithIPad", "keyWithOPad", "update", "srcString", "updateProcessedLen", "variantBlockIntInc", "variantBlockSize", "convertRet", "converterFunc", "chunkBinLen", "chunk", "chunkIntLen", "intermediateState", "roundFunc", "slice", "getHash", "finalizedState", "isVariableLen", "formatFunc", "getMAC", "finalizeFunc", "stateCloneFunc", "newStateFunc", "setHMACKey", "HMACSupported", "keyConverterFunc", "_setHMACKey", "blockByteSize", "lastArrayIndex", "getHMAC", "_getHMAC", "firstHash", "rotl_32", "x", "n", "rotr_32", "shr_32", "parity_32", "y", "z", "ch_32", "maj_32", "sigma0_32", "safeAdd_32_2", "lsw", "safeAdd_32_4", "c", "d", "safeAdd_32_5", "e", "gamma0_32", "sigma1_32", "getNewState", "_variant", "roundSHA1", "block", "H", "T", "t", "W", "finalizeSHA1", "remainderBinLen", "processedBinLen", "offset", "totalLen", "jsSHA", "super", "resolvedOptions", "state", "getNewState256", "roundSHA256", "f", "g", "h", "T1", "T2", "Int_64", "msint_32", "lsint_32", "highOrder", "lowOrder", "rotl_64", "tmp", "rotr_64", "shr_64", "maj_64", "sigma0_64", "rotr28", "rotr34", "rotr39", "safeAdd_64_2", "msw", "safeAdd_64_4", "safeAdd_64_5", "xor_64_2", "gamma1_64", "rotr19", "rotr61", "shr6", "gamma0_64", "rotr1", "rotr8", "shr7", "sigma1_64", "rotr14", "rotr18", "rotr41", "K_sha512", "getNewState512", "roundSHA512", "rc_sha3", "r_sha3", "cloneSHA3State", "clone", "roundSHA3", "round", "B", "C", "D", "left_encode", "byte", "numEncodedBytes", "x_64", "encode_string", "input", "byte_pad", "outputByteLen", "encodedLen", "outputIntLen", "intsToAppend", "delimiter", "_initializeKMAC", "_getKMAC", "_initializeCSHAKE", "_processedBinLen", "blockSize", "temp", "state_offset", "binaryStringInc", "remainderIntLen", "funcNameOverride", "funcName", "customization", "packedParams", "byte_pad_out", "kmacKey", "concatedRemainder", "shaObj", "jsSHA1", "jsSHA256", "jsSHA512", "jsSHA3", "now", "bits", "p", "errors", "c", "i", "p", "p", "error", "url", "m", "_", "h", "e", "errors", "s", "i18n", "k", "i", "p", "h", "m", "map", "error", "i", "p", "errors", "i", "p", "p", "errors", "selectChallenge", "x", "x", "i", "p", "selectCountry", "c", "errors", "e", "x", "i", "p", "h", "v", "p", "m", "e", "p", "errors", "x", "m", "i", "_", "s", "p", "e", "f", "b", "p", "v", "errors", "i", "p", "h", "f", "e", "MAX_IMAGE_UPLOAD_SIZE", "_", "p", "e", "f", "b", "x", "i", "error", "P", "e", "T", "h", "e"]
}
diff --git a/backoffice/index.html b/backoffice/index.html
index aed14a1de..b005f967d 100644
--- a/backoffice/index.html
+++ b/backoffice/index.html
@@ -35,7 +35,7 @@
<title>Merchant Backoffice</title>
<!-- Optional customization script. -->
<script src="merchant-backoffice-ui-settings.js"></script>
- <!-- Entry point for the demobank SPA. -->
+ <!-- Entry point for the SPA. -->
<script type="module" src="index.js"></script>
<link rel="stylesheet" href="index.css" />
</head>
diff --git a/backoffice/index.js b/backoffice/index.js
index 915c5dba0..be208e846 100644
--- a/backoffice/index.js
+++ b/backoffice/index.js
@@ -96,12 +96,12 @@ var require_BigInteger = __commonJS({
v3.length = i5 + 1;
}
function createArray(length) {
- var x6 = new Array(length);
+ var x5 = new Array(length);
var i5 = -1;
while (++i5 < length) {
- x6[i5] = 0;
+ x5[i5] = 0;
}
- return x6;
+ return x5;
}
function truncate(n2) {
if (n2 > 0)
@@ -310,18 +310,18 @@ var require_BigInteger = __commonJS({
}
return r3;
}
- function shiftLeft(x6, n2) {
+ function shiftLeft(x5, n2) {
var r3 = [];
while (n2-- > 0)
r3.push(0);
- return r3.concat(x6);
+ return r3.concat(x5);
}
- function multiplyKaratsuba(x6, y5) {
- var n2 = Math.max(x6.length, y5.length);
+ function multiplyKaratsuba(x5, y5) {
+ var n2 = Math.max(x5.length, y5.length);
if (n2 <= 30)
- return multiplyLong(x6, y5);
+ return multiplyLong(x5, y5);
n2 = Math.ceil(n2 / 2);
- var b4 = x6.slice(n2), a5 = x6.slice(0, n2), d5 = y5.slice(n2), c4 = y5.slice(0, n2);
+ var b4 = x5.slice(n2), a5 = x5.slice(0, n2), d5 = y5.slice(n2), c4 = y5.slice(0, n2);
var ac = multiplyKaratsuba(a5, c4), bd = multiplyKaratsuba(b4, d5), abcd = multiplyKaratsuba(addAny(a5, b4), addAny(c4, d5));
var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n2)), shiftLeft(bd, 2 * n2));
trim2(product);
@@ -577,7 +577,7 @@ var require_BigInteger = __commonJS({
};
SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
BigInteger.prototype.pow = function(v3) {
- var n2 = parseValue(v3), a5 = this.value, b4 = n2.value, value, x6, y5;
+ var n2 = parseValue(v3), a5 = this.value, b4 = n2.value, value, x5, y5;
if (b4 === 0)
return Integer[1];
if (a5 === 0)
@@ -595,17 +595,17 @@ var require_BigInteger = __commonJS({
if (isPrecise(value = Math.pow(a5, b4)))
return new SmallInteger(truncate(value));
}
- x6 = this;
+ x5 = this;
y5 = Integer[1];
while (true) {
if (b4 & true) {
- y5 = y5.times(x6);
+ y5 = y5.times(x5);
--b4;
}
if (b4 === 0)
break;
b4 /= 2;
- x6 = x6.square();
+ x5 = x5.square();
}
return y5;
};
@@ -624,17 +624,17 @@ var require_BigInteger = __commonJS({
return n2.isEven() ? Integer[1] : Integer[-1];
if (n2.isNegative())
return new NativeBigInt(_0);
- var x6 = this;
+ var x5 = this;
var y5 = Integer[1];
while (true) {
if ((b4 & _1) === _1) {
- y5 = y5.times(x6);
+ y5 = y5.times(x5);
--b4;
}
if (b4 === _0)
break;
b4 /= _22;
- x6 = x6.square();
+ x5 = x5.square();
}
return y5;
};
@@ -833,21 +833,21 @@ var require_BigInteger = __commonJS({
return true;
}
function millerRabinTest(n2, a5) {
- var nPrev = n2.prev(), b4 = nPrev, r3 = 0, d5, t4, i5, x6;
+ var nPrev = n2.prev(), b4 = nPrev, r3 = 0, d5, t4, i5, x5;
while (b4.isEven())
b4 = b4.divide(2), r3++;
next:
for (i5 = 0; i5 < a5.length; i5++) {
if (n2.lesser(a5[i5]))
continue;
- x6 = bigInt(a5[i5]).modPow(b4, n2);
- if (x6.isUnit() || x6.equals(nPrev))
+ x5 = bigInt(a5[i5]).modPow(b4, n2);
+ if (x5.isUnit() || x5.equals(nPrev))
continue;
for (d5 = r3 - 1; d5 != 0; d5--) {
- x6 = x6.square().mod(n2);
- if (x6.isUnit())
+ x5 = x5.square().mod(n2);
+ if (x5.isUnit())
return false;
- if (x6.equals(nPrev))
+ if (x5.equals(nPrev))
continue next;
}
return false;
@@ -980,10 +980,10 @@ var require_BigInteger = __commonJS({
return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
};
NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;
- function bitwise(x6, y5, fn2) {
+ function bitwise(x5, y5, fn2) {
y5 = parseValue(y5);
- var xSign = x6.isNegative(), ySign = y5.isNegative();
- var xRem = xSign ? x6.not() : x6, yRem = ySign ? y5.not() : y5;
+ var xSign = x5.isNegative(), ySign = y5.isNegative();
+ var xRem = xSign ? x5.not() : x5, yRem = ySign ? y5.not() : y5;
var xDigit = 0, yDigit = 0;
var xDivMod = null, yDivMod = null;
var result = [];
@@ -1032,8 +1032,8 @@ var require_BigInteger = __commonJS({
NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;
var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;
function roughLOB(n2) {
- var v3 = n2.value, x6 = typeof v3 === "number" ? v3 | LOBMASK_I : typeof v3 === "bigint" ? v3 | BigInt(LOBMASK_I) : v3[0] + v3[1] * BASE | LOBMASK_BI;
- return x6 & -x6;
+ var v3 = n2.value, x5 = typeof v3 === "number" ? v3 | LOBMASK_I : typeof v3 === "bigint" ? v3 | BigInt(LOBMASK_I) : v3[0] + v3[1] * BASE | LOBMASK_BI;
+ return x5 & -x5;
}
function integerLogarithm(value, base2) {
if (base2.compareTo(value) <= 0) {
@@ -1236,8 +1236,8 @@ var require_BigInteger = __commonJS({
}
function toBaseString(n2, base2, alphabet) {
var arr = toBase(n2, base2);
- return (arr.isNegative ? "-" : "") + arr.value.map(function(x6) {
- return stringify(x6, alphabet);
+ return (arr.isNegative ? "-" : "") + arr.value.map(function(x5) {
+ return stringify(x5, alphabet);
}).join("");
}
BigInteger.prototype.toArray = function(radix) {
@@ -1286,9 +1286,9 @@ var require_BigInteger = __commonJS({
};
function parseStringValue(v3) {
if (isPrecise(+v3)) {
- var x6 = +v3;
- if (x6 === truncate(x6))
- return supportsNativeBigInt ? new NativeBigInt(BigInt(x6)) : new SmallInteger(x6);
+ var x5 = +v3;
+ if (x5 === truncate(x5))
+ return supportsNativeBigInt ? new NativeBigInt(BigInt(x5)) : new SmallInteger(x5);
throw new Error("Invalid integer: " + v3);
}
var sign = v3[0] === "-";
@@ -1367,8 +1367,8 @@ var require_BigInteger = __commonJS({
Integer.min = min;
Integer.gcd = gcd;
Integer.lcm = lcm;
- Integer.isInstance = function(x6) {
- return x6 instanceof BigInteger || x6 instanceof SmallInteger || x6 instanceof NativeBigInt;
+ Integer.isInstance = function(x5) {
+ return x5 instanceof BigInteger || x5 instanceof SmallInteger || x5 instanceof NativeBigInt;
};
Integer.randBetween = randBetween;
Integer.fromArray = function(digits, base2, isNegative) {
@@ -1474,8 +1474,8 @@ var require_jed = __commonJS({
if ({}.toString.call(sArr) != "[object Array]") {
sArr = [].slice.call(arguments, 0);
}
- return (sArr && sArr.length ? Jed2.sprintf : function(x6) {
- return x6;
+ return (sArr && sArr.length ? Jed2.sprintf : function(x5) {
+ return x5;
})(
this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val),
sArr
@@ -2263,23 +2263,23 @@ function g() {
});
}
function w(n2, l3, u4, i4, t4, o3, r3, c4, s5, a5) {
- var h5, y5, d5, k5, b4, g4, w5, x6 = i4 && i4.__k || e, C3 = x6.length;
+ var h5, y5, d5, k5, b4, g4, w5, x5 = i4 && i4.__k || e, C3 = x5.length;
for (u4.__k = [], h5 = 0; h5 < l3.length; h5++)
if (null != (k5 = u4.__k[h5] = null == (k5 = l3[h5]) || "boolean" == typeof k5 ? null : "string" == typeof k5 || "number" == typeof k5 || "bigint" == typeof k5 ? v(null, k5, null, null, k5) : Array.isArray(k5) ? v(p2, { children: k5 }, null, null, null) : k5.__b > 0 ? v(k5.type, k5.props, k5.key, k5.ref ? k5.ref : null, k5.__v) : k5)) {
- if (k5.__ = u4, k5.__b = u4.__b + 1, null === (d5 = x6[h5]) || d5 && k5.key == d5.key && k5.type === d5.type)
- x6[h5] = void 0;
+ if (k5.__ = u4, k5.__b = u4.__b + 1, null === (d5 = x5[h5]) || d5 && k5.key == d5.key && k5.type === d5.type)
+ x5[h5] = void 0;
else
for (y5 = 0; y5 < C3; y5++) {
- if ((d5 = x6[y5]) && k5.key == d5.key && k5.type === d5.type) {
- x6[y5] = void 0;
+ if ((d5 = x5[y5]) && k5.key == d5.key && k5.type === d5.type) {
+ x5[y5] = void 0;
break;
}
d5 = null;
}
- j(n2, k5, d5 = d5 || f, t4, o3, r3, c4, s5, a5), b4 = k5.__e, (y5 = k5.ref) && d5.ref != y5 && (w5 || (w5 = []), d5.ref && w5.push(d5.ref, null, k5), w5.push(y5, k5.__c || b4, k5)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k5.type && k5.__k === d5.__k ? k5.__d = s5 = m(k5, s5, n2) : s5 = A2(n2, k5, d5, x6, b4, s5), "function" == typeof u4.type && (u4.__d = s5)) : s5 && d5.__e == s5 && s5.parentNode != n2 && (s5 = _(d5));
+ j(n2, k5, d5 = d5 || f, t4, o3, r3, c4, s5, a5), b4 = k5.__e, (y5 = k5.ref) && d5.ref != y5 && (w5 || (w5 = []), d5.ref && w5.push(d5.ref, null, k5), w5.push(y5, k5.__c || b4, k5)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k5.type && k5.__k === d5.__k ? k5.__d = s5 = m(k5, s5, n2) : s5 = A2(n2, k5, d5, x5, b4, s5), "function" == typeof u4.type && (u4.__d = s5)) : s5 && d5.__e == s5 && s5.parentNode != n2 && (s5 = _(d5));
}
for (u4.__e = g4, h5 = C3; h5--; )
- null != x6[h5] && N(x6[h5], x6[h5]);
+ null != x5[h5] && N(x5[h5], x5[h5]);
if (w5)
for (h5 = 0; h5 < w5.length; h5++)
M2(w5[h5], w5[++h5], w5[++h5]);
@@ -2289,9 +2289,9 @@ function m(n2, l3, u4) {
(i4 = t4[o3]) && (i4.__ = n2, l3 = "function" == typeof i4.type ? m(i4, l3, u4) : A2(u4, i4, i4, t4, i4.__e, l3));
return l3;
}
-function x2(n2, l3) {
+function x(n2, l3) {
return l3 = l3 || [], null == n2 || "boolean" == typeof n2 || (Array.isArray(n2) ? n2.some(function(n3) {
- x2(n3, l3);
+ x(n3, l3);
}) : l3.push(n2)), l3;
}
function A2(n2, l3, u4, i4, t4, o3) {
@@ -2355,17 +2355,17 @@ function T(n2) {
this.l[n2.type + true](l.event ? l.event(n2) : n2);
}
function j(n2, u4, i4, t4, o3, r3, f3, e4, c4) {
- var a5, h5, v3, y5, _3, k5, b4, g4, m5, x6, A5, C3, $3, H5, I5, T5 = u4.type;
+ var a5, h5, v3, y5, _3, k5, b4, g4, m5, x5, A5, C3, $3, H5, I5, T5 = u4.type;
if (void 0 !== u4.constructor)
return null;
null != i4.__h && (c4 = i4.__h, e4 = u4.__e = i4.__e, u4.__h = null, r3 = [e4]), (a5 = l.__b) && a5(u4);
try {
n:
if ("function" == typeof T5) {
- if (g4 = u4.props, m5 = (a5 = T5.contextType) && t4[a5.__c], x6 = a5 ? m5 ? m5.props.value : a5.__ : t4, i4.__c ? b4 = (h5 = u4.__c = i4.__c).__ = h5.__E : ("prototype" in T5 && T5.prototype.render ? u4.__c = h5 = new T5(g4, x6) : (u4.__c = h5 = new d(g4, x6), h5.constructor = T5, h5.render = O), m5 && m5.sub(h5), h5.props = g4, h5.state || (h5.state = {}), h5.context = x6, h5.__n = t4, v3 = h5.__d = true, h5.__h = [], h5._sb = []), null == h5.__s && (h5.__s = h5.state), null != T5.getDerivedStateFromProps && (h5.__s == h5.state && (h5.__s = s({}, h5.__s)), s(h5.__s, T5.getDerivedStateFromProps(g4, h5.__s))), y5 = h5.props, _3 = h5.state, v3)
+ if (g4 = u4.props, m5 = (a5 = T5.contextType) && t4[a5.__c], x5 = a5 ? m5 ? m5.props.value : a5.__ : t4, i4.__c ? b4 = (h5 = u4.__c = i4.__c).__ = h5.__E : ("prototype" in T5 && T5.prototype.render ? u4.__c = h5 = new T5(g4, x5) : (u4.__c = h5 = new d(g4, x5), h5.constructor = T5, h5.render = O), m5 && m5.sub(h5), h5.props = g4, h5.state || (h5.state = {}), h5.context = x5, h5.__n = t4, v3 = h5.__d = true, h5.__h = [], h5._sb = []), null == h5.__s && (h5.__s = h5.state), null != T5.getDerivedStateFromProps && (h5.__s == h5.state && (h5.__s = s({}, h5.__s)), s(h5.__s, T5.getDerivedStateFromProps(g4, h5.__s))), y5 = h5.props, _3 = h5.state, v3)
null == T5.getDerivedStateFromProps && null != h5.componentWillMount && h5.componentWillMount(), null != h5.componentDidMount && h5.__h.push(h5.componentDidMount);
else {
- if (null == T5.getDerivedStateFromProps && g4 !== y5 && null != h5.componentWillReceiveProps && h5.componentWillReceiveProps(g4, x6), !h5.__e && null != h5.shouldComponentUpdate && false === h5.shouldComponentUpdate(g4, h5.__s, x6) || u4.__v === i4.__v) {
+ if (null == T5.getDerivedStateFromProps && g4 !== y5 && null != h5.componentWillReceiveProps && h5.componentWillReceiveProps(g4, x5), !h5.__e && null != h5.shouldComponentUpdate && false === h5.shouldComponentUpdate(g4, h5.__s, x5) || u4.__v === i4.__v) {
for (h5.props = g4, h5.state = h5.__s, u4.__v !== i4.__v && (h5.__d = false), h5.__v = u4, u4.__e = i4.__e, u4.__k = i4.__k, u4.__k.forEach(function(n3) {
n3 && (n3.__ = u4);
}), A5 = 0; A5 < h5._sb.length; A5++)
@@ -2373,11 +2373,11 @@ function j(n2, u4, i4, t4, o3, r3, f3, e4, c4) {
h5._sb = [], h5.__h.length && f3.push(h5);
break n;
}
- null != h5.componentWillUpdate && h5.componentWillUpdate(g4, h5.__s, x6), null != h5.componentDidUpdate && h5.__h.push(function() {
+ null != h5.componentWillUpdate && h5.componentWillUpdate(g4, h5.__s, x5), null != h5.componentDidUpdate && h5.__h.push(function() {
h5.componentDidUpdate(y5, _3, k5);
});
}
- if (h5.context = x6, h5.props = g4, h5.__v = u4, h5.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T5 && T5.prototype.render) {
+ if (h5.context = x5, h5.props = g4, h5.__v = u4, h5.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T5 && T5.prototype.render) {
for (h5.state = h5.__s, h5.__d = false, C3 && C3(u4), a5 = h5.render(h5.props, h5.state, h5.context), H5 = 0; H5 < h5._sb.length; H5++)
h5.__h.push(h5._sb[H5]);
h5._sb = [];
@@ -2594,7 +2594,7 @@ function q2(n2) {
var u4 = r2.context[n2.__c], i4 = d2(t2++, 9);
return i4.c = n2, u4 ? (null == i4.__ && (i4.__ = true, u4.sub(r2)), u4.props.value) : n2.__;
}
-function x3(t4, r3) {
+function x2(t4, r3) {
l.useDebugValue && l.useDebugValue(r3 ? r3(t4) : t4);
}
function P2(n2) {
@@ -2730,7 +2730,7 @@ __export(compat_module_exports, {
unstable_batchedUpdates: () => sn,
useCallback: () => T2,
useContext: () => q2,
- useDebugValue: () => x3,
+ useDebugValue: () => x2,
useDeferredValue: () => pn,
useEffect: () => h2,
useErrorBoundary: () => P2,
@@ -2889,7 +2889,7 @@ function _n(n2, t4) {
});
}, [n2]), e4;
}
-var x4, N2, A4, O2, T3, I3, W, z3, B3, H2, Z2, G, X2, nn, tn, en, rn, un, sn, hn, vn2, yn, bn;
+var x3, N2, A4, O2, T3, I3, W, z3, B3, H2, Z2, G, X2, nn, tn, en, rn, un, sn, hn, vn2, yn, bn;
var init_compat_module = __esm({
"../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/dist/compat.module.js"() {
init_preact_module();
@@ -2899,22 +2899,22 @@ var init_compat_module = __esm({
(w3.prototype = new d()).isPureReactComponent = true, w3.prototype.shouldComponentUpdate = function(n2, t4) {
return C2(this.props, n2) || C2(this.state, t4);
};
- x4 = l.__b;
+ x3 = l.__b;
l.__b = function(n2) {
- n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x4 && x4(n2);
+ n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x3 && x3(n2);
};
N2 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911;
A4 = function(n2, t4) {
- return null == n2 ? null : x2(x2(n2).map(t4));
+ return null == n2 ? null : x(x(n2).map(t4));
};
O2 = { map: A4, forEach: A4, count: function(n2) {
- return n2 ? x2(n2).length : 0;
+ return n2 ? x(n2).length : 0;
}, only: function(n2) {
- var t4 = x2(n2);
+ var t4 = x(n2);
if (1 !== t4.length)
throw "Children.only";
return t4[0];
- }, toArray: x2 };
+ }, toArray: x };
T3 = l.__e;
l.__e = function(n2, t4, e4, r3) {
if (n2.then) {
@@ -2980,7 +2980,7 @@ var init_compat_module = __esm({
};
}, V2.prototype.render = function(n2) {
this.u = null, this.o = /* @__PURE__ */ new Map();
- var t4 = x2(n2.children);
+ var t4 = x(n2.children);
n2.revealOrder && "b" === n2.revealOrder[0] && t4.reverse();
for (var e4 = t4.length; e4--; )
this.o.set(t4[e4], this.u = [1, 0, this.u]);
@@ -3020,9 +3020,9 @@ var init_compat_module = __esm({
var l3 = e4[i4];
H2 && "children" === i4 && "noscript" === t4 || "value" === i4 && "defaultValue" in e4 && null == l3 || ("defaultValue" === i4 && "value" in e4 && null == e4.value ? i4 = "value" : "download" === i4 && true === l3 ? l3 = "" : /ondoubleclick/i.test(i4) ? i4 = "ondblclick" : /^onchange(textarea|input)/i.test(i4 + t4) && !Z2(e4.type) ? i4 = "oninput" : /^onfocus$/i.test(i4) ? i4 = "onfocusin" : /^onblur$/i.test(i4) ? i4 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i4) ? i4 = i4.toLowerCase() : o3 && B3.test(i4) ? i4 = i4.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : null === l3 && (l3 = void 0), /^oninput$/i.test(i4) && (i4 = i4.toLowerCase(), u4[i4] && (i4 = "oninputCapture")), u4[i4] = l3);
}
- "select" == t4 && u4.multiple && Array.isArray(u4.value) && (u4.value = x2(e4.children).forEach(function(n3) {
+ "select" == t4 && u4.multiple && Array.isArray(u4.value) && (u4.value = x(e4.children).forEach(function(n3) {
n3.props.selected = -1 != u4.value.indexOf(n3.props.value);
- })), "select" == t4 && null != u4.defaultValue && (u4.value = x2(e4.children).forEach(function(n3) {
+ })), "select" == t4 && null != u4.defaultValue && (u4.value = x(e4.children).forEach(function(n3) {
n3.props.selected = u4.multiple ? -1 != u4.defaultValue.indexOf(n3.props.value) : u4.defaultValue == n3.props.value;
})), n2.props = u4, e4.class != e4.className && (nn.enumerable = "className" in e4, null != e4.className && (u4.class = e4.className), Object.defineProperty(u4, "className", nn));
}
@@ -3044,7 +3044,7 @@ var init_compat_module = __esm({
};
vn2 = p2;
yn = s2;
- bn = { useState: p3, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A3, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x3, version: "17.0.2", Children: O2, render: Y2, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p2, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn2, Suspense: D3, SuspenseList: V2, lazy: M3, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn };
+ bn = { useState: p3, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A3, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x2, version: "17.0.2", Children: O2, render: Y2, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p2, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn2, Suspense: D3, SuspenseList: V2, lazy: M3, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn };
}
});
@@ -6337,9 +6337,9 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max = size - margin;
- return createDataURL(size, size, function(x6, y5) {
- if (min <= x6 && x6 < max && min <= y5 && y5 < max) {
- var c4 = Math.floor((x6 - min) / cellSize);
+ return createDataURL(size, size, function(x5, y5) {
+ if (min <= x5 && x5 < max && min <= y5 && y5 < max) {
+ var c4 = Math.floor((x5 - min) / cellSize);
var r3 = Math.floor((y5 - min) / cellSize);
return _this.isDark(r3, c4) ? 0 : 1;
} else {
@@ -6400,7 +6400,7 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max = size - margin;
- var y5, x6, r1, r22, p4;
+ var y5, x5, r1, r22, p4;
var blocks = {
"\u2588\u2588": "\u2588",
"\u2588 ": "\u2580",
@@ -6417,12 +6417,12 @@ var require_qrcode = __commonJS({
for (y5 = 0; y5 < size; y5 += 2) {
r1 = Math.floor((y5 - min) / cellSize);
r22 = Math.floor((y5 + 1 - min) / cellSize);
- for (x6 = 0; x6 < size; x6 += 1) {
+ for (x5 = 0; x5 < size; x5 += 1) {
p4 = "\u2588";
- if (min <= x6 && x6 < max && min <= y5 && y5 < max && _this.isDark(r1, Math.floor((x6 - min) / cellSize))) {
+ if (min <= x5 && x5 < max && min <= y5 && y5 < max && _this.isDark(r1, Math.floor((x5 - min) / cellSize))) {
p4 = " ";
}
- if (min <= x6 && x6 < max && min <= y5 + 1 && y5 + 1 < max && _this.isDark(r22, Math.floor((x6 - min) / cellSize))) {
+ if (min <= x5 && x5 < max && min <= y5 + 1 && y5 + 1 < max && _this.isDark(r22, Math.floor((x5 - min) / cellSize))) {
p4 += " ";
} else {
p4 += "\u2588";
@@ -6446,7 +6446,7 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max = size - margin;
- var y5, x6, r3, p4;
+ var y5, x5, r3, p4;
var white = Array(cellSize + 1).join("\u2588\u2588");
var black = Array(cellSize + 1).join(" ");
var ascii = "";
@@ -6454,9 +6454,9 @@ var require_qrcode = __commonJS({
for (y5 = 0; y5 < size; y5 += 1) {
r3 = Math.floor((y5 - min) / cellSize);
line = "";
- for (x6 = 0; x6 < size; x6 += 1) {
+ for (x5 = 0; x5 < size; x5 += 1) {
p4 = 1;
- if (min <= x6 && x6 < max && min <= y5 && y5 < max && _this.isDark(r3, Math.floor((x6 - min) / cellSize))) {
+ if (min <= x5 && x5 < max && min <= y5 && y5 < max && _this.isDark(r3, Math.floor((x5 - min) / cellSize))) {
p4 = 0;
}
line += p4 ? white : black;
@@ -7452,8 +7452,8 @@ var require_qrcode = __commonJS({
var _height = height;
var _data = new Array(width * height);
var _this = {};
- _this.setPixel = function(x6, y5, pixel) {
- _data[y5 * _width + x6] = pixel;
+ _this.setPixel = function(x5, y5, pixel) {
+ _data[y5 * _width + x5] = pixel;
};
_this.write = function(out) {
out.writeString("GIF87a");
@@ -7578,8 +7578,8 @@ var require_qrcode = __commonJS({
var createDataURL = function(width, height, getPixel) {
var gif = gifImage(width, height);
for (var y5 = 0; y5 < height; y5 += 1) {
- for (var x6 = 0; x6 < width; x6 += 1) {
- gif.setPixel(x6, y5, getPixel(x6, y5));
+ for (var x5 = 0; x5 < width; x5 += 1) {
+ gif.setPixel(x5, y5, getPixel(x5, y5));
}
}
var b4 = byteArrayOutputStream();
@@ -7649,7 +7649,7 @@ var gf = function(init = []) {
r3[i4] = init[i4];
return r3;
};
-var randombytes = function(x6, n2) {
+var randombytes = function(x5, n2) {
throw new Error("no PRNG");
};
var _9 = new Uint8Array(32);
@@ -7747,24 +7747,24 @@ var I = gf([
9344,
11139
]);
-function ts64(x6, i4, h5, l3) {
- x6[i4] = h5 >> 24 & 255;
- x6[i4 + 1] = h5 >> 16 & 255;
- x6[i4 + 2] = h5 >> 8 & 255;
- x6[i4 + 3] = h5 & 255;
- x6[i4 + 4] = l3 >> 24 & 255;
- x6[i4 + 5] = l3 >> 16 & 255;
- x6[i4 + 6] = l3 >> 8 & 255;
- x6[i4 + 7] = l3 & 255;
-}
-function vn(x6, xi, y5, yi, n2) {
+function ts64(x5, i4, h5, l3) {
+ x5[i4] = h5 >> 24 & 255;
+ x5[i4 + 1] = h5 >> 16 & 255;
+ x5[i4 + 2] = h5 >> 8 & 255;
+ x5[i4 + 3] = h5 & 255;
+ x5[i4 + 4] = l3 >> 24 & 255;
+ x5[i4 + 5] = l3 >> 16 & 255;
+ x5[i4 + 6] = l3 >> 8 & 255;
+ x5[i4 + 7] = l3 & 255;
+}
+function vn(x5, xi, y5, yi, n2) {
let i4, d5 = 0;
for (i4 = 0; i4 < n2; i4++)
- d5 |= x6[xi + i4] ^ y5[yi + i4];
+ d5 |= x5[xi + i4] ^ y5[yi + i4];
return (1 & d5 - 1 >>> 8) - 1;
}
-function crypto_verify_32(x6, xi, y5, yi) {
- return vn(x6, xi, y5, yi, 32);
+function crypto_verify_32(x5, xi, y5, yi) {
+ return vn(x5, xi, y5, yi, 32);
}
var sigma = new Uint8Array([
101,
@@ -8755,7 +8755,7 @@ function crypto_hashblocks_hl(hh, hl, m5, n2) {
function crypto_hash(out, m5, n2) {
const hh = new Int32Array(8);
const hl = new Int32Array(8);
- const x6 = new Uint8Array(256);
+ const x5 = new Uint8Array(256);
const b4 = n2;
hh[0] = 1779033703;
hh[1] = 3144134277;
@@ -8776,12 +8776,12 @@ function crypto_hash(out, m5, n2) {
crypto_hashblocks_hl(hh, hl, m5, n2);
n2 %= 128;
for (let i4 = 0; i4 < n2; i4++)
- x6[i4] = m5[b4 - n2 + i4];
- x6[n2] = 128;
+ x5[i4] = m5[b4 - n2 + i4];
+ x5[n2] = 128;
n2 = 256 - 128 * (n2 < 112 ? 1 : 0);
- x6[n2 - 9] = 0;
- ts64(x6, n2 - 8, b4 / 536870912 | 0, b4 << 3);
- crypto_hashblocks_hl(hh, hl, x6, n2);
+ x5[n2 - 9] = 0;
+ ts64(x5, n2 - 8, b4 / 536870912 | 0, b4 << 3);
+ crypto_hashblocks_hl(hh, hl, x5, n2);
for (let i4 = 0; i4 < 8; i4++)
ts64(out, 8 * i4, hh[i4], hl[i4]);
return 0;
@@ -8835,15 +8835,15 @@ var HashState = class {
finish() {
const out = new Uint8Array(64);
let n2 = this.p;
- const x6 = new Uint8Array(256);
+ const x5 = new Uint8Array(256);
const b4 = this.total;
for (let i4 = 0; i4 < n2; i4++)
- x6[i4] = this.next[i4];
- x6[n2] = 128;
+ x5[i4] = this.next[i4];
+ x5[n2] = 128;
n2 = 256 - 128 * (n2 < 112 ? 1 : 0);
- x6[n2 - 9] = 0;
- ts64(x6, n2 - 8, b4 / 536870912 | 0, b4 << 3);
- crypto_hashblocks_hl(this.hh, this.hl, x6, n2);
+ x5[n2 - 9] = 0;
+ ts64(x5, n2 - 8, b4 / 536870912 | 0, b4 << 3);
+ crypto_hashblocks_hl(this.hh, this.hl, x5, n2);
for (let i4 = 0; i4 < 8; i4++)
ts64(out, 8 * i4, this.hh[i4], this.hl[i4]);
return out;
@@ -8940,38 +8940,38 @@ var L = new Float64Array([
0,
16
]);
-function modL(r3, x6) {
+function modL(r3, x5) {
let carry, i4, j4, k5;
for (i4 = 63; i4 >= 32; --i4) {
carry = 0;
for (j4 = i4 - 32, k5 = i4 - 12; j4 < k5; ++j4) {
- x6[j4] += carry - 16 * x6[i4] * L[j4 - (i4 - 32)];
- carry = Math.floor((x6[j4] + 128) / 256);
- x6[j4] -= carry * 256;
+ x5[j4] += carry - 16 * x5[i4] * L[j4 - (i4 - 32)];
+ carry = Math.floor((x5[j4] + 128) / 256);
+ x5[j4] -= carry * 256;
}
- x6[j4] += carry;
- x6[i4] = 0;
+ x5[j4] += carry;
+ x5[i4] = 0;
}
carry = 0;
for (j4 = 0; j4 < 32; j4++) {
- x6[j4] += carry - (x6[31] >> 4) * L[j4];
- carry = x6[j4] >> 8;
- x6[j4] &= 255;
+ x5[j4] += carry - (x5[31] >> 4) * L[j4];
+ carry = x5[j4] >> 8;
+ x5[j4] &= 255;
}
for (j4 = 0; j4 < 32; j4++)
- x6[j4] -= carry * L[j4];
+ x5[j4] -= carry * L[j4];
for (i4 = 0; i4 < 32; i4++) {
- x6[i4 + 1] += x6[i4] >> 8;
- r3[i4] = x6[i4] & 255;
+ x5[i4 + 1] += x5[i4] >> 8;
+ r3[i4] = x5[i4] & 255;
}
}
function reduce(r3) {
- const x6 = new Float64Array(64);
+ const x5 = new Float64Array(64);
for (let i4 = 0; i4 < 64; i4++)
- x6[i4] = r3[i4];
+ x5[i4] = r3[i4];
for (let i4 = 0; i4 < 64; i4++)
r3[i4] = 0;
- modL(r3, x6);
+ modL(r3, x5);
}
function unpackpos(r3, p4) {
const q5 = [gf(), gf(), gf(), gf()];
@@ -9091,19 +9091,19 @@ function hash(msg) {
function setPRNG(fn2) {
randombytes = fn2;
}
-function crypto_core_ed25519_scalar_reduce(x6) {
- const len = x6.length;
+function crypto_core_ed25519_scalar_reduce(x5) {
+ const len = x5.length;
const z5 = new Float64Array(64);
for (let i4 = 0; i4 < len; i4++)
- z5[i4] = x6[i4];
+ z5[i4] = x5[i4];
const o3 = new Uint8Array(32);
modL(o3, z5);
return o3;
}
-function crypto_core_ed25519_scalar_sub(x6, y5) {
+function crypto_core_ed25519_scalar_sub(x5, y5) {
const z5 = new Float64Array(64);
for (let i4 = 0; i4 < 32; i4++) {
- z5[i4] = x6[i4] - y5[i4];
+ z5[i4] = x5[i4] - y5[i4];
}
const o3 = new Uint8Array(32);
modL(o3, z5);
@@ -9129,7 +9129,7 @@ function crypto_edx25519_sign_detached(m5, skx, pkx) {
const h5 = new Uint8Array(64);
const r3 = new Uint8Array(64);
let i4, j4;
- const x6 = new Float64Array(64);
+ const x5 = new Float64Array(64);
const p4 = [gf(), gf(), gf(), gf()];
const sm = new Uint8Array(n2 + 64);
for (i4 = 0; i4 < n2; i4++)
@@ -9145,15 +9145,15 @@ function crypto_edx25519_sign_detached(m5, skx, pkx) {
crypto_hash(h5, sm, n2 + 64);
reduce(h5);
for (i4 = 0; i4 < 64; i4++)
- x6[i4] = 0;
+ x5[i4] = 0;
for (i4 = 0; i4 < 32; i4++)
- x6[i4] = r3[i4];
+ x5[i4] = r3[i4];
for (i4 = 0; i4 < 32; i4++) {
for (j4 = 0; j4 < 32; j4++) {
- x6[i4 + j4] += h5[i4] * skx[j4];
+ x5[i4 + j4] += h5[i4] * skx[j4];
}
}
- modL(sm.subarray(32), x6);
+ modL(sm.subarray(32), x5);
return sm.subarray(0, 64);
}
function crypto_edx25519_sign_detached_verify(msg, sig, publicKey) {
@@ -9176,14 +9176,14 @@ function crypto_edx25519_sign_detached_verify(msg, sig, publicKey) {
function loadBrowserPrng() {
const cr = typeof self !== "undefined" ? self.crypto || self.msCrypto : null;
const QUOTA = 65536;
- setPRNG(function(x6, n2) {
+ setPRNG(function(x5, n2) {
let i4;
const v3 = new Uint8Array(n2);
for (i4 = 0; i4 < n2; i4 += QUOTA) {
cr.getRandomValues(v3.subarray(i4, i4 + Math.min(n2 - i4, QUOTA)));
}
for (i4 = 0; i4 < n2; i4++)
- x6[i4] = v3[i4];
+ x5[i4] = v3[i4];
for (i4 = 0; i4 < v3.length; i4++)
v3[i4] = 0;
});
@@ -9502,6 +9502,13 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED"] = 2173] = "MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING"] = 2174] = "MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED"] = 2175] = "MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING"] = 2176] = "MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS"] = 2177] = "MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_INPUT_TOKENS_MISMATCH"] = 2178] = "MERCHANT_POST_ORDERS_ID_PAY_INPUT_TOKENS_MISMATCH";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ISSUE_SIG_INVALID"] = 2179] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ISSUE_SIG_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_USE_SIG_INVALID"] = 2180] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_USE_SIG_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH"] = 2181] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH"] = 2182] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH"] = 2200] = "MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID"] = 2201] = "MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_TOKEN_FAMILY_CONFLICT"] = 2225] = "MERCHANT_POST_TOKEN_FAMILY_CONFLICT";
@@ -9546,6 +9553,7 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT"] = 2530] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID"] = 2531] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT"] = 2532] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN"] = 2533] = "MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN"] = 2550] = "MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR"] = 2551] = "MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS"] = 2552] = "MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS";
@@ -9587,6 +9595,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS"] = 2910] = "MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS";
TalerErrorCode2[TalerErrorCode2["AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID"] = 3100] = "AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED"] = 3101] = "AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED";
+ TalerErrorCode2[TalerErrorCode2["AUDITOR_RESOURCE_NOT_FOUND"] = 3102] = "AUDITOR_RESOURCE_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["AUDITOR_URI_MISSING_PATH_COMPONENT"] = 3103] = "AUDITOR_URI_MISSING_PATH_COMPONENT";
TalerErrorCode2[TalerErrorCode2["BANK_SAME_ACCOUNT"] = 5101] = "BANK_SAME_ACCOUNT";
TalerErrorCode2[TalerErrorCode2["BANK_UNALLOWED_DEBIT"] = 5102] = "BANK_UNALLOWED_DEBIT";
TalerErrorCode2[TalerErrorCode2["BANK_NEGATIVE_NUMBER_AMOUNT"] = 5103] = "BANK_NEGATIVE_NUMBER_AMOUNT";
@@ -9631,6 +9641,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["BANK_CHALLENGE_NOT_FOUND"] = 5143] = "BANK_CHALLENGE_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["BANK_TAN_CHALLENGE_EXPIRED"] = 5144] = "BANK_TAN_CHALLENGE_EXPIRED";
TalerErrorCode2[TalerErrorCode2["BANK_NON_ADMIN_SET_TAN_CHANNEL"] = 5145] = "BANK_NON_ADMIN_SET_TAN_CHANNEL";
+ TalerErrorCode2[TalerErrorCode2["BANK_NON_ADMIN_SET_MIN_CASHOUT"] = 5146] = "BANK_NON_ADMIN_SET_MIN_CASHOUT";
+ TalerErrorCode2[TalerErrorCode2["BANK_CONVERSION_AMOUNT_TO_SMALL"] = 5147] = "BANK_CONVERSION_AMOUNT_TO_SMALL";
TalerErrorCode2[TalerErrorCode2["SYNC_ACCOUNT_UNKNOWN"] = 6100] = "SYNC_ACCOUNT_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["SYNC_BAD_IF_NONE_MATCH"] = 6101] = "SYNC_BAD_IF_NONE_MATCH";
TalerErrorCode2[TalerErrorCode2["SYNC_BAD_IF_MATCH"] = 6102] = "SYNC_BAD_IF_MATCH";
@@ -9752,6 +9764,7 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["DONAU_GENERIC_KEYS_MISSING"] = 8607] = "DONAU_GENERIC_KEYS_MISSING";
TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_SIGNATURE_INVALID"] = 8608] = "DONAU_CHARITY_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_NOT_FOUND"] = 8609] = "DONAU_CHARITY_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["DONAU_EXCEEDING_DONATION_LIMIT"] = 8610] = "DONAU_EXCEEDING_DONATION_LIMIT";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_GENERIC_ERROR"] = 9e3] = "LIBEUFIN_NEXUS_GENERIC_ERROR";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION"] = 9001] = "LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_SANDBOX_GENERIC_ERROR"] = 9500] = "LIBEUFIN_SANDBOX_GENERIC_ERROR";
@@ -9981,14 +9994,14 @@ var Amount = class _Amount {
};
function codecForAmountString() {
return {
- decode(x6, c4) {
- if (typeof x6 !== "string") {
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x6}`);
+ decode(x5, c4) {
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
}
- if (Amounts.parse(x6) === void 0) {
- throw new DecodingError(`invalid amount at ${renderContext(c4)} got "${x6}"`);
+ if (Amounts.parse(x5) === void 0) {
+ throw new DecodingError(`invalid amount at ${renderContext(c4)} got "${x5}"`);
}
- return x6;
+ return x5;
}
};
}
@@ -10050,7 +10063,7 @@ var Amounts = class _Amounts {
if (amounts.length <= 0) {
throw Error("can't sum zero amounts");
}
- const jsonAmounts = amounts.map((x6) => _Amounts.jsonifyAmount(x6));
+ const jsonAmounts = amounts.map((x5) => _Amounts.jsonifyAmount(x5));
return _Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));
}
static sumOrZero(currency, amounts) {
@@ -10060,7 +10073,7 @@ var Amounts = class _Amounts {
saturated: false
};
}
- const jsonAmounts = amounts.map((x6) => _Amounts.jsonifyAmount(x6));
+ const jsonAmounts = amounts.map((x5) => _Amounts.jsonifyAmount(x5));
return _Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));
}
/**
@@ -10085,8 +10098,8 @@ var Amounts = class _Amounts {
};
}
let fraction = firstJ.fraction % amountFractionalBase;
- for (const x6 of rest) {
- const xJ = _Amounts.jsonifyAmount(x6);
+ for (const x5 of rest) {
+ const xJ = _Amounts.jsonifyAmount(x5);
if (xJ.currency.toUpperCase() !== currency.toUpperCase()) {
throw Error(`Mismatched currency: ${xJ.currency} and ${currency}`);
}
@@ -10298,26 +10311,26 @@ var Amounts = class _Amounts {
saturated: false
};
}
- let x6 = a5;
+ let x5 = a5;
let acc = _Amounts.zeroOfCurrency(a5.currency);
while (n2 > 1) {
if (n2 % 2 == 0) {
n2 = n2 / 2;
} else {
n2 = (n2 - 1) / 2;
- const r23 = _Amounts.add(acc, x6);
+ const r23 = _Amounts.add(acc, x5);
if (r23.saturated) {
return r23;
}
acc = r23.amount;
}
- const r22 = _Amounts.add(x6, x6);
+ const r22 = _Amounts.add(x5, x5);
if (r22.saturated) {
return r22;
}
- x6 = r22.amount;
+ x5 = r22.amount;
}
- return _Amounts.add(acc, x6);
+ return _Amounts.add(acc, x5);
}
/**
* Check if the argument is a valid amount in string form.
@@ -12220,13 +12233,13 @@ function canonicalizeBaseUrl(url) {
if (!url.startsWith("http") && !url.startsWith("https")) {
url = "https://" + url;
}
- const x6 = new URL2(url);
- if (!x6.pathname.endsWith("/")) {
- x6.pathname = x6.pathname + "/";
+ const x5 = new URL2(url);
+ if (!x5.pathname.endsWith("/")) {
+ x5.pathname = x5.pathname + "/";
}
- x6.search = "";
- x6.hash = "";
- return x6.href;
+ x5.search = "";
+ x5.hash = "";
+ return x5.href;
}
function canonicalJson(obj) {
obj = JSON.parse(JSON.stringify(obj));
@@ -12264,8 +12277,8 @@ function strcmp(s1, s22) {
}
return 0;
}
-function j2s(x6) {
- return JSON.stringify(x6, void 0, 2);
+function j2s(x5) {
+ return JSON.stringify(x5, void 0, 2);
}
// ../taler-util/lib/logging.js
@@ -12482,11 +12495,11 @@ var ObjectCodecBuilder = class {
/**
* Define a property for the object.
*/
- property(x6, codec) {
+ property(x5, codec) {
if (!codec) {
throw Error("inner codec must be defined");
}
- this.propList.push({ name: x6, codec });
+ this.propList.push({ name: x5, codec });
return this;
}
/**
@@ -12498,18 +12511,18 @@ var ObjectCodecBuilder = class {
build(objectDisplayName) {
const propList = this.propList;
return {
- decode(x6, c4) {
+ decode(x5, c4) {
if (!c4) {
c4 = {
path: [`(${objectDisplayName})`]
};
}
- if (typeof x6 !== "object") {
- throw new DecodingError(`expected object for ${objectDisplayName} at ${renderContext(c4)} but got ${typeof x6}`);
+ if (typeof x5 !== "object") {
+ throw new DecodingError(`expected object for ${objectDisplayName} at ${renderContext(c4)} but got ${typeof x5}`);
}
const obj = {};
for (const prop of propList) {
- const propRawVal = x6[prop.name];
+ const propRawVal = x5[prop.name];
const propVal = prop.codec.decode(propRawVal, joinContext(c4, prop.name));
obj[prop.name] = propVal;
}
@@ -12545,13 +12558,13 @@ var UnionCodecBuilder = class {
const discriminator = this.discriminator;
const baseCodec = this.baseCodec;
return {
- decode(x6, c4) {
+ decode(x5, c4) {
if (!c4) {
c4 = {
path: [`(${objectDisplayName})`]
};
}
- const d5 = x6[discriminator];
+ const d5 = x5[discriminator];
if (d5 === void 0) {
throw new DecodingError(`expected tag for ${objectDisplayName} at ${renderContext(c4)}.${String(discriminator)}`);
}
@@ -12559,9 +12572,9 @@ var UnionCodecBuilder = class {
if (!alt) {
throw new DecodingError(`unknown tag for ${objectDisplayName} ${d5} at ${renderContext(c4)}.${String(discriminator)}`);
}
- const altDecoded = alt.codec.decode(x6);
+ const altDecoded = alt.codec.decode(x5);
if (baseCodec) {
- const baseDecoded = baseCodec.decode(x6, c4);
+ const baseDecoded = baseCodec.decode(x5, c4);
return { ...baseDecoded, ...altDecoded };
} else {
return altDecoded;
@@ -12586,13 +12599,13 @@ function codecForMap(innerCodec) {
throw Error("inner codec must be defined");
}
return {
- decode(x6, c4) {
+ decode(x5, c4) {
const map3 = {};
- if (typeof x6 !== "object") {
+ if (typeof x5 !== "object") {
throw new DecodingError(`expected object at ${renderContext(c4)}`);
}
- for (const i4 in x6) {
- map3[i4] = innerCodec.decode(x6[i4], joinContext(c4, `[${i4}]`));
+ for (const i4 in x5) {
+ map3[i4] = innerCodec.decode(x5[i4], joinContext(c4, `[${i4}]`));
}
return map3;
}
@@ -12603,13 +12616,13 @@ function codecForList(innerCodec) {
throw Error("inner codec must be defined");
}
return {
- decode(x6, c4) {
+ decode(x5, c4) {
const arr = [];
- if (!Array.isArray(x6)) {
+ if (!Array.isArray(x5)) {
throw new DecodingError(`expected array at ${renderContext(c4)}`);
}
- for (const i4 in x6) {
- arr.push(innerCodec.decode(x6[i4], joinContext(c4, `[${i4}]`)));
+ for (const i4 in x5) {
+ arr.push(innerCodec.decode(x5[i4], joinContext(c4, `[${i4}]`)));
}
return arr;
}
@@ -12617,92 +12630,113 @@ function codecForList(innerCodec) {
}
function codecForNumber() {
return {
- decode(x6, c4) {
- if (typeof x6 === "number") {
- return x6;
+ decode(x5, c4) {
+ if (typeof x5 === "number") {
+ return x5;
}
- throw new DecodingError(`expected number at ${renderContext(c4)} but got ${typeof x6}`);
+ throw new DecodingError(`expected number at ${renderContext(c4)} but got ${typeof x5}`);
}
};
}
function codecForBoolean() {
return {
- decode(x6, c4) {
- if (typeof x6 === "boolean") {
- return x6;
+ decode(x5, c4) {
+ if (typeof x5 === "boolean") {
+ return x5;
}
- throw new DecodingError(`expected boolean at ${renderContext(c4)} but got ${typeof x6}`);
+ throw new DecodingError(`expected boolean at ${renderContext(c4)} but got ${typeof x5}`);
}
};
}
function codecForString() {
return {
- decode(x6, c4) {
- if (typeof x6 === "string") {
- return x6;
+ decode(x5, c4) {
+ if (typeof x5 === "string") {
+ return x5;
+ }
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
+ }
+ };
+}
+function codecForURL(shouldEndWithSlash) {
+ return {
+ decode(x5, c4) {
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
+ }
+ if (shouldEndWithSlash && !x5.endsWith("/")) {
+ throw new DecodingError(`expected URL string that ends with slash at ${renderContext(c4)} but got ${x5}`);
+ }
+ try {
+ const url = new URL(x5);
+ return url;
+ } catch (e4) {
+ if (e4 instanceof Error) {
+ throw new DecodingError(e4.message);
+ } else {
+ throw new DecodingError(`expected an URL string at ${renderContext(c4)} but got "${x5}"`);
+ }
}
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x6}`);
}
};
}
function codecForAny() {
return {
- decode(x6, c4) {
- return x6;
+ decode(x5, c4) {
+ return x5;
}
};
}
function codecForConstString(s5) {
return {
- decode(x6, c4) {
- if (x6 === s5) {
- return x6;
+ decode(x5, c4) {
+ if (x5 === s5) {
+ return x5;
}
- if (typeof x6 !== "string") {
- throw new DecodingError(`expected string constant "${s5}" at ${renderContext(c4)} but got ${typeof x6}`);
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string constant "${s5}" at ${renderContext(c4)} but got ${typeof x5}`);
}
- throw new DecodingError(`expected string constant "${s5}" at ${renderContext(c4)} but got string value "${x6}"`);
+ throw new DecodingError(`expected string constant "${s5}" at ${renderContext(c4)} but got string value "${x5}"`);
}
};
}
function codecForConstNumber(n2) {
return {
- decode(x6, c4) {
- if (x6 === n2) {
- return x6;
+ decode(x5, c4) {
+ if (x5 === n2) {
+ return x5;
}
- throw new DecodingError(`expected number constant "${n2}" at ${renderContext(c4)} but got ${typeof x6}`);
+ throw new DecodingError(`expected number constant "${n2}" at ${renderContext(c4)} but got ${typeof x5}`);
}
};
}
function codecOptional(innerCodec) {
return {
- decode(x6, c4) {
- if (x6 === void 0 || x6 === null) {
+ decode(x5, c4) {
+ if (x5 === void 0 || x5 === null) {
return void 0;
}
- return innerCodec.decode(x6, c4);
+ return innerCodec.decode(x5, c4);
}
};
}
function codecForEither(...alts) {
return {
- decode(x6, c4) {
+ decode(x5, c4) {
for (const alt of alts) {
try {
- return alt.decode(x6, c4);
+ return alt.decode(x5, c4);
} catch (e4) {
continue;
}
}
if (logger.shouldLogTrace()) {
- logger.trace(`offending value: ${j2s(x6)}`);
+ logger.trace(`offending value: ${j2s(x5)}`);
}
throw new DecodingError(`No alternative matched at at ${renderContext(c4)}`);
}
};
}
-var x = codecForEither(codecForString(), codecForNumber());
// ../taler-util/lib/sha256.js
var digestLength = 32;
@@ -13452,11 +13486,11 @@ function durationMul(d5, n2) {
return { d_ms: Math.round(d5.d_ms * n2) };
}
var codecForAbsoluteTime = {
- decode(x6, c4) {
- if (x6 === void 0) {
+ decode(x5, c4) {
+ if (x5 === void 0) {
throw Error(`got undefined and expected absolute time at ${renderContext(c4)}`);
}
- const t_ms = x6.t_ms;
+ const t_ms = x5.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
return { t_ms: "never", [opaque_AbsoluteTime]: true };
@@ -13468,11 +13502,11 @@ var codecForAbsoluteTime = {
}
};
var codecForTimestamp = {
- decode(x6, c4) {
- if (x6 === void 0) {
+ decode(x5, c4) {
+ if (x5 === void 0) {
throw Error(`got undefined and expected timestamp at ${renderContext(c4)}`);
}
- const t_ms = x6.t_ms;
+ const t_ms = x5.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
return { t_s: "never" };
@@ -13480,7 +13514,7 @@ var codecForTimestamp = {
} else if (typeof t_ms === "number") {
return { t_s: Math.floor(t_ms / 1e3) };
}
- const t_s = x6.t_s;
+ const t_s = x5.t_s;
if (typeof t_s === "string") {
if (t_s === "never") {
return { t_s: "never" };
@@ -13494,8 +13528,8 @@ var codecForTimestamp = {
}
};
var codecForDuration = {
- decode(x6, c4) {
- const d_us = x6.d_us;
+ decode(x5, c4) {
+ const d_us = x5.d_us;
if (typeof d_us === "string") {
if (d_us === "forever") {
return { d_us: "forever" };
@@ -13808,9 +13842,9 @@ var SignaturePurposeBuilder = class {
function buildSigPS(purposeNum) {
return new SignaturePurposeBuilder(purposeNum);
}
-function bigintToNaclArr(x6, size) {
+function bigintToNaclArr(x5, size) {
const byteArr = new Uint8Array(size);
- const arr = x6.toArray(256).value.reverse();
+ const arr = x5.toArray(256).value.reverse();
byteArr.set(arr, 0);
return byteArr;
}
@@ -13978,10 +14012,10 @@ var AgeRestriction;
return {
commitment: {
mask: ageMask,
- publicKeys: pubs.map((x6) => encodeCrock(x6))
+ publicKeys: pubs.map((x5) => encodeCrock(x5))
},
proof: {
- privateKeys: privs.map((x6) => encodeCrock(x6))
+ privateKeys: privs.map((x5) => encodeCrock(x5))
}
};
}
@@ -14018,10 +14052,10 @@ var AgeRestriction;
return {
commitment: {
mask: ageMask,
- publicKeys: pubs.map((x6) => encodeCrock(x6))
+ publicKeys: pubs.map((x5) => encodeCrock(x5))
},
proof: {
- privateKeys: privs.map((x6) => encodeCrock(x6))
+ privateKeys: privs.map((x5) => encodeCrock(x5))
}
};
}
@@ -14052,10 +14086,10 @@ var AgeRestriction;
return {
commitment: {
mask: commitmentProof.commitment.mask,
- publicKeys: newPubs.map((x6) => encodeCrock(x6))
+ publicKeys: newPubs.map((x5) => encodeCrock(x5))
},
proof: {
- privateKeys: newPrivs.map((x6) => encodeCrock(x6))
+ privateKeys: newPrivs.map((x5) => encodeCrock(x5))
}
};
}
@@ -14299,14 +14333,14 @@ function generateFakeSegwitAddress(reservePub, addr) {
// ../taler-util/lib/payto.js
function codecForPaytoString() {
return {
- decode(x6, c4) {
- if (typeof x6 !== "string") {
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x6}`);
+ decode(x5, c4) {
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
}
- if (!x6.startsWith(paytoPfx)) {
- throw new DecodingError(`expected start with payto at ${renderContext(c4)} but got "${x6}"`);
+ if (!x5.startsWith(paytoPfx)) {
+ throw new DecodingError(`expected start with payto at ${renderContext(c4)} but got "${x5}"`);
}
- return x6;
+ return x5;
}
};
}
@@ -14489,6 +14523,34 @@ async function readSuccessResponseJsonOrErrorCode(httpResponse, codec) {
response: parsedResponse
};
}
+async function readResponseJsonOrErrorCode(httpResponse, codec) {
+ let respJson;
+ try {
+ respJson = await httpResponse.json();
+ } catch (e4) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e4.toString()
+ }, "Couldn't parse JSON format from response");
+ }
+ let parsedResponse;
+ try {
+ parsedResponse = codec.decode(respJson);
+ } catch (e4) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e4.toString()
+ }, "Response invalid");
+ }
+ return {
+ isError: !(httpResponse.status >= 200 && httpResponse.status < 300),
+ response: parsedResponse
+ };
+}
function throwUnexpectedRequestError(httpResponse, talerErrorResponse) {
throw TalerError.fromDetail(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, {
requestUrl: httpResponse.requestUrl,
@@ -14545,7 +14607,7 @@ function opEmptySuccess(resp) {
return { type: "ok", body: void 0 };
}
async function opKnownAlternativeFailure(resp, s5, codec) {
- const body = await readSuccessResponseJsonOrThrow(resp, codec);
+ const body = (await readResponseJsonOrErrorCode(resp, codec)).response;
return { type: "fail", case: s5, body };
}
async function opKnownHttpFailure(s5, resp) {
@@ -14567,14 +14629,14 @@ function opUnknownFailure(resp, error2) {
// ../taler-util/lib/taleruri.js
function codecForTalerUriString() {
return {
- decode(x6, c4) {
- if (typeof x6 !== "string") {
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x6}`);
+ decode(x5, c4) {
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
}
- if (parseTalerUri(x6) === void 0) {
- throw new DecodingError(`invalid taler URI at ${renderContext(c4)} but got "${x6}"`);
+ if (parseTalerUri(x5) === void 0) {
+ throw new DecodingError(`invalid taler URI at ${renderContext(c4)} but got "${x5}"`);
}
- return x6;
+ return x5;
}
};
}
@@ -14720,7 +14782,7 @@ function parseTalerUri(string2) {
const actionStart = https ? 8 : 13;
const actionEnd = string2.indexOf("/", actionStart + 1);
const action = string2.substring(actionStart, actionEnd);
- const found = Object.values(TalerUriAction).find((x6) => x6 === action);
+ const found = Object.values(TalerUriAction).find((x5) => x5 === action);
if (!found)
return void 0;
return parsers[found](string2);
@@ -15015,6 +15077,12 @@ function getUrlInfo(baseUrl, params = {}) {
}
// ../taler-util/lib/http-client/types.js
+function createRFC8959AccessTokenEncoded(token) {
+ return token.startsWith("secret-token:") ? token : `secret-token:${encodeURIComponent(token)}`;
+}
+function createRFC8959AccessTokenPlain(token) {
+ return token.startsWith("secret-token:") ? token : `secret-token:${token}`;
+}
var codecForAccessToken = codecForString;
var codecForTokenSuccessResponse = () => buildCodecForObject().property("access_token", codecForAccessToken()).property("expiration", codecForTimestamp).build("TalerAuthentication.TokenSuccessResponse");
var codecForTokenSuccessResponseMerchant = () => buildCodecForObject().property("token", codecForAccessToken()).property("expiration", codecForTimestamp).build("TalerAuthentication.TokenSuccessResponseMerchant");
@@ -15024,7 +15092,7 @@ var codecForMerchantConfig = () => buildCodecForObject().property("name", codecF
var codecForClaimResponse = () => buildCodecForObject().property("contract_terms", codecForContractTerms()).property("sig", codecForString()).build("TalerMerchantApi.ClaimResponse");
var codecForPaymentResponse = () => buildCodecForObject().property("pos_confirmation", codecOptional(codecForString())).property("sig", codecForString()).build("TalerMerchantApi.PaymentResponse");
var codecForStatusPaid = () => buildCodecForObject().property("refund_amount", codecForAmountString()).property("refund_pending", codecForBoolean()).property("refund_taken", codecForAmountString()).property("refunded", codecForBoolean()).property("type", codecForConstString("paid")).build("TalerMerchantApi.StatusPaid");
-var codecForStatusGoto = () => buildCodecForObject().property("public_reorder_url", codecForURL()).property("type", codecForConstString("goto")).build("TalerMerchantApi.StatusGotoResponse");
+var codecForStatusGoto = () => buildCodecForObject().property("public_reorder_url", codecForURL2()).property("type", codecForConstString("goto")).build("TalerMerchantApi.StatusGotoResponse");
var codecForStatusStatusUnpaid = () => buildCodecForObject().property("type", codecForConstString("unpaid")).property("already_paid_order_id", codecOptional(codecForString())).property("fulfillment_url", codecOptional(codecForString())).property("taler_pay_uri", codecForTalerUriString()).build("TalerMerchantApi.PaymentResponse");
var codecForPaidRefundStatusResponse = () => buildCodecForObject().property("pos_confirmation", codecOptional(codecForString())).property("refunded", codecForBoolean()).build("TalerMerchantApi.PaidRefundStatusResponse");
var codecForMerchantAbortPayRefundSuccessStatus = () => buildCodecForObject().property("exchange_pub", codecForString()).property("exchange_sig", codecForString()).property("exchange_status", codecForConstNumber(200)).property("type", codecForConstString("success")).build("TalerMerchantApi.MerchantAbortPayRefundSuccessStatus");
@@ -15037,12 +15105,12 @@ var codecForMerchantCoinRefundFailureStatus = () => buildCodecForObject().proper
var codecForMerchantCoinRefundStatus = () => buildCodecForUnion().discriminateOn("type").alternative("success", codecForMerchantCoinRefundSuccessStatus()).alternative("failure", codecForMerchantCoinRefundFailureStatus()).build("TalerMerchantApi.MerchantCoinRefundStatus");
var codecForQueryInstancesResponse = () => buildCodecForObject().property("name", codecForString()).property("user_type", codecForString()).property("email", codecOptional(codecForString())).property("website", codecOptional(codecForString())).property("logo", codecOptional(codecForString())).property("merchant_pub", codecForString()).property("address", codecForLocation()).property("jurisdiction", codecForLocation()).property("use_stefan", codecForBoolean()).property("default_wire_transfer_delay", codecForDuration).property("default_pay_delay", codecForDuration).property("auth", buildCodecForObject().property("method", codecForEither(codecForConstString("token"), codecForConstString("external"))).build("TalerMerchantApi.QueryInstancesResponse.auth")).build("TalerMerchantApi.QueryInstancesResponse");
var codecForAccountKycRedirects = () => buildCodecForObject().property("pending_kycs", codecForList(codecForMerchantAccountKycRedirect())).property("timeout_kycs", codecForList(codecForExchangeKycTimeout())).build("TalerMerchantApi.AccountKycRedirects");
-var codecForMerchantAccountKycRedirect = () => buildCodecForObject().property("kyc_url", codecForURL()).property("aml_status", codecForNumber()).property("exchange_url", codecForURL()).property("payto_uri", codecForPaytoString()).build("TalerMerchantApi.MerchantAccountKycRedirect");
-var codecForExchangeKycTimeout = () => buildCodecForObject().property("exchange_url", codecForURL()).property("exchange_code", codecForNumber()).property("exchange_http_status", codecForNumber()).build("TalerMerchantApi.ExchangeKycTimeout");
+var codecForMerchantAccountKycRedirect = () => buildCodecForObject().property("kyc_url", codecForURL2()).property("aml_status", codecForNumber()).property("exchange_url", codecForURL2()).property("payto_uri", codecForPaytoString()).build("TalerMerchantApi.MerchantAccountKycRedirect");
+var codecForExchangeKycTimeout = () => buildCodecForObject().property("exchange_url", codecForURL2()).property("exchange_code", codecForNumber()).property("exchange_http_status", codecForNumber()).build("TalerMerchantApi.ExchangeKycTimeout");
var codecForAccountAddResponse = () => buildCodecForObject().property("h_wire", codecForString()).property("salt", codecForString()).build("TalerMerchantApi.AccountAddResponse");
var codecForAccountsSummaryResponse = () => buildCodecForObject().property("accounts", codecForList(codecForBankAccountSummaryEntry())).build("TalerMerchantApi.AccountsSummaryResponse");
var codecForBankAccountSummaryEntry = () => buildCodecForObject().property("payto_uri", codecForPaytoString()).property("h_wire", codecForString()).build("TalerMerchantApi.BankAccountSummaryEntry");
-var codecForBankAccountEntry = () => buildCodecForObject().property("payto_uri", codecForPaytoString()).property("h_wire", codecForString()).property("salt", codecForString()).property("credit_facade_url", codecOptional(codecForURL())).property("active", codecOptional(codecForBoolean())).build("TalerMerchantApi.BankAccountEntry");
+var codecForBankAccountEntry = () => buildCodecForObject().property("payto_uri", codecForPaytoString()).property("h_wire", codecForString()).property("salt", codecForString()).property("credit_facade_url", codecOptional(codecForURL2())).property("active", codecOptional(codecForBoolean())).build("TalerMerchantApi.BankAccountEntry");
var codecForInventorySummaryResponse = () => buildCodecForObject().property("products", codecForList(codecForInventoryEntry())).build("TalerMerchantApi.InventorySummaryResponse");
var codecForInventoryEntry = () => buildCodecForObject().property("product_id", codecForString()).property("product_serial", codecForNumber()).build("TalerMerchantApi.InventoryEntry");
var codecForProductDetail = () => buildCodecForObject().property("description", codecForString()).property("description_i18n", codecForInternationalizedString()).property("unit", codecForString()).property("price", codecForAmountString()).property("image", codecForString()).property("taxes", codecForList(codecForTax())).property("address", codecForLocation()).property("next_restock", codecForTimestamp).property("total_stock", codecForNumber()).property("total_sold", codecForNumber()).property("total_lost", codecForNumber()).property("minimum_age", codecOptional(codecForNumber())).build("TalerMerchantApi.ProductDetail");
@@ -15055,16 +15123,16 @@ var codecForMerchant = () => buildCodecForObject().property("name", codecForStri
var codecForExchange = () => buildCodecForObject().property("master_pub", codecForString()).property("priority", codecForNumber()).property("url", codecForString()).build("TalerMerchantApi.Exchange");
var codecForContractTerms = () => buildCodecForObject().property("order_id", codecForString()).property("fulfillment_url", codecOptional(codecForString())).property("fulfillment_message", codecOptional(codecForString())).property("fulfillment_message_i18n", codecOptional(codecForInternationalizedString())).property("merchant_base_url", codecForString()).property("h_wire", codecForString()).property("auto_refund", codecOptional(codecForDuration)).property("wire_method", codecForString()).property("summary", codecForString()).property("summary_i18n", codecOptional(codecForInternationalizedString())).property("nonce", codecForString()).property("amount", codecForAmountString()).property("pay_deadline", codecForTimestamp).property("refund_deadline", codecForTimestamp).property("wire_transfer_deadline", codecForTimestamp).property("timestamp", codecForTimestamp).property("delivery_location", codecOptional(codecForLocation())).property("delivery_date", codecOptional(codecForTimestamp)).property("max_fee", codecForAmountString()).property("merchant", codecForMerchant()).property("merchant_pub", codecForString()).property("exchanges", codecForList(codecForExchange())).property("products", codecForList(codecForProduct())).property("extra", codecForAny()).build("TalerMerchantApi.ContractTerms");
var codecForProduct = () => buildCodecForObject().property("product_id", codecOptional(codecForString())).property("description", codecForString()).property("description_i18n", codecOptional(codecForInternationalizedString())).property("quantity", codecOptional(codecForNumber())).property("unit", codecOptional(codecForString())).property("price", codecOptional(codecForAmountString())).property("image", codecOptional(codecForString())).property("taxes", codecOptional(codecForList(codecForTax()))).property("delivery_date", codecOptional(codecForTimestamp)).build("TalerMerchantApi.Product");
-var codecForCheckPaymentPaidResponse = () => buildCodecForObject().property("order_status", codecForConstString("paid")).property("refunded", codecForBoolean()).property("refund_pending", codecForBoolean()).property("wired", codecForBoolean()).property("deposit_total", codecForAmountString()).property("exchange_code", codecForNumber()).property("exchange_http_status", codecForNumber()).property("refund_amount", codecForAmountString()).property("contract_terms", codecForContractTerms()).property("wire_reports", codecForList(codecForTransactionWireReport())).property("wire_details", codecForList(codecForTransactionWireTransfer())).property("refund_details", codecForList(codecForRefundDetails())).property("order_status_url", codecForURL()).build("TalerMerchantApi.CheckPaymentPaidResponse");
+var codecForCheckPaymentPaidResponse = () => buildCodecForObject().property("order_status", codecForConstString("paid")).property("refunded", codecForBoolean()).property("refund_pending", codecForBoolean()).property("wired", codecForBoolean()).property("deposit_total", codecForAmountString()).property("exchange_code", codecForNumber()).property("exchange_http_status", codecForNumber()).property("refund_amount", codecForAmountString()).property("contract_terms", codecForContractTerms()).property("wire_reports", codecForList(codecForTransactionWireReport())).property("wire_details", codecForList(codecForTransactionWireTransfer())).property("refund_details", codecForList(codecForRefundDetails())).property("order_status_url", codecForURL2()).build("TalerMerchantApi.CheckPaymentPaidResponse");
var codecForCheckPaymentUnpaidResponse = () => buildCodecForObject().property("order_status", codecForConstString("unpaid")).property("taler_pay_uri", codecForTalerUriString()).property("creation_time", codecForTimestamp).property("summary", codecForString()).property("total_amount", codecForAmountString()).property("already_paid_order_id", codecOptional(codecForString())).property("already_paid_fulfillment_url", codecOptional(codecForString())).property("order_status_url", codecForString()).build("TalerMerchantApi.CheckPaymentPaidResponse");
var codecForCheckPaymentClaimedResponse = () => buildCodecForObject().property("order_status", codecForConstString("claimed")).property("contract_terms", codecForContractTerms()).build("TalerMerchantApi.CheckPaymentClaimedResponse");
var codecForMerchantOrderPrivateStatusResponse = () => buildCodecForUnion().discriminateOn("order_status").alternative("paid", codecForCheckPaymentPaidResponse()).alternative("unpaid", codecForCheckPaymentUnpaidResponse()).alternative("claimed", codecForCheckPaymentClaimedResponse()).build("TalerMerchantApi.MerchantOrderStatusResponse");
var codecForRefundDetails = () => buildCodecForObject().property("reason", codecForString()).property("pending", codecForBoolean()).property("timestamp", codecForTimestamp).property("amount", codecForAmountString()).build("TalerMerchantApi.RefundDetails");
-var codecForTransactionWireTransfer = () => buildCodecForObject().property("exchange_url", codecForURL()).property("wtid", codecForString()).property("execution_time", codecForTimestamp).property("amount", codecForAmountString()).property("confirmed", codecForBoolean()).build("TalerMerchantApi.TransactionWireTransfer");
+var codecForTransactionWireTransfer = () => buildCodecForObject().property("exchange_url", codecForURL2()).property("wtid", codecForString()).property("execution_time", codecForTimestamp).property("amount", codecForAmountString()).property("confirmed", codecForBoolean()).build("TalerMerchantApi.TransactionWireTransfer");
var codecForTransactionWireReport = () => buildCodecForObject().property("code", codecForNumber()).property("hint", codecForString()).property("exchange_code", codecForNumber()).property("exchange_http_status", codecForNumber()).property("coin_pub", codecForString()).build("TalerMerchantApi.TransactionWireReport");
var codecForMerchantRefundResponse = () => buildCodecForObject().property("taler_refund_uri", codecForTalerUriString()).property("h_contract", codecForString()).build("TalerMerchantApi.MerchantRefundResponse");
var codecForTansferList = () => buildCodecForObject().property("transfers", codecForList(codecForTransferDetails())).build("TalerMerchantApi.TransferList");
-var codecForTransferDetails = () => buildCodecForObject().property("credit_amount", codecForAmountString()).property("wtid", codecForString()).property("payto_uri", codecForPaytoString()).property("exchange_url", codecForURL()).property("transfer_serial_id", codecForNumber()).property("execution_time", codecOptional(codecForTimestamp)).property("verified", codecOptional(codecForBoolean())).property("confirmed", codecOptional(codecForBoolean())).build("TalerMerchantApi.TransferDetails");
+var codecForTransferDetails = () => buildCodecForObject().property("credit_amount", codecForAmountString()).property("wtid", codecForString()).property("payto_uri", codecForPaytoString()).property("exchange_url", codecForURL2()).property("transfer_serial_id", codecForNumber()).property("execution_time", codecOptional(codecForTimestamp)).property("verified", codecOptional(codecForBoolean())).property("confirmed", codecOptional(codecForBoolean())).build("TalerMerchantApi.TransferDetails");
var codecForOtpDeviceSummaryResponse = () => buildCodecForObject().property("otp_devices", codecForList(codecForOtpDeviceEntry())).build("TalerMerchantApi.OtpDeviceSummaryResponse");
var codecForOtpDeviceEntry = () => buildCodecForObject().property("otp_device_id", codecForString()).property("device_description", codecForString()).build("TalerMerchantApi.OtpDeviceEntry");
var codecForOtpDeviceDetails = () => buildCodecForObject().property("device_description", codecForString()).property("otp_algorithm", codecForNumber()).property("otp_ctr", codecOptional(codecForNumber())).property("otp_timestamp", codecForNumber()).property("otp_code", codecOptional(codecForString())).build("TalerMerchantApi.OtpDeviceDetails");
@@ -15086,7 +15154,7 @@ var codecForInstance = () => buildCodecForObject().property("name", codecForStri
var codecForRevenueConfig = () => buildCodecForObject().property("name", codecForConstString("taler-revenue")).property("version", codecForString()).property("currency", codecForString()).property("implementation", codecOptional(codecForString())).build("TalerRevenueApi.RevenueConfig");
var codecForRevenueIncomingHistory = () => buildCodecForObject().property("credit_account", codecForPaytoString()).property("incoming_transactions", codecForList(codecForRevenueIncomingBankTransaction())).build("TalerRevenueApi.MerchantIncomingHistory");
var codecForRevenueIncomingBankTransaction = () => buildCodecForObject().property("amount", codecForAmountString()).property("date", codecForTimestamp).property("debit_account", codecForPaytoString()).property("row_id", codecForNumber()).property("subject", codecForString()).build("TalerRevenueApi.RevenueIncomingBankTransaction");
-var codecForURL = codecForString;
+var codecForURL2 = codecForString;
var TalerCorebankApi;
(function(TalerCorebankApi2) {
let MonitorTimeframeParam;
@@ -15113,12 +15181,12 @@ var TalerExchangeApi;
})(AmlState = TalerExchangeApi2.AmlState || (TalerExchangeApi2.AmlState = {}));
})(TalerExchangeApi || (TalerExchangeApi = {}));
var TalerMerchantApi;
-(function(TalerMerchantApi37) {
+(function(TalerMerchantApi38) {
let TokenFamilyKind;
(function(TokenFamilyKind2) {
TokenFamilyKind2["Discount"] = "discount";
TokenFamilyKind2["Subscription"] = "subscription";
- })(TokenFamilyKind = TalerMerchantApi37.TokenFamilyKind || (TalerMerchantApi37.TokenFamilyKind = {}));
+ })(TokenFamilyKind = TalerMerchantApi38.TokenFamilyKind || (TalerMerchantApi38.TokenFamilyKind = {}));
})(TalerMerchantApi || (TalerMerchantApi = {}));
// ../taler-util/lib/http-status-codes.js
@@ -15397,31 +15465,31 @@ var ContractTermsUtil;
}
} else if (typeof dup === "object" && dup != null) {
if (typeof dup.$forgettable === "object") {
- for (const x6 of Object.keys(dup.$forgettable)) {
- if (!pred([...path, x6])) {
+ for (const x5 of Object.keys(dup.$forgettable)) {
+ if (!pred([...path, x5])) {
continue;
}
if (!dup.$forgotten) {
dup.$forgotten = {};
}
- if (!dup.$forgotten[x6]) {
- const membValCanon = stringToBytes(canonicalJson(scrub(dup[x6])) + "\0");
- const membSalt = stringToBytes(dup.$forgettable[x6] + "\0");
+ if (!dup.$forgotten[x5]) {
+ const membValCanon = stringToBytes(canonicalJson(scrub(dup[x5])) + "\0");
+ const membSalt = stringToBytes(dup.$forgettable[x5] + "\0");
const h5 = kdf(64, membValCanon, membSalt, new Uint8Array([]));
- dup.$forgotten[x6] = encodeCrock(h5);
+ dup.$forgotten[x5] = encodeCrock(h5);
}
- delete dup[x6];
- delete dup.$forgettable[x6];
+ delete dup[x5];
+ delete dup.$forgettable[x5];
}
if (Object.keys(dup.$forgettable).length === 0) {
delete dup.$forgettable;
}
}
- for (const x6 of Object.keys(dup)) {
- if (x6.startsWith("$")) {
+ for (const x5 of Object.keys(dup)) {
+ if (x5.startsWith("$")) {
continue;
}
- dup[x6] = forgetAllImpl(dup[x6], [...path, x6], pred);
+ dup[x5] = forgetAllImpl(dup[x5], [...path, x5], pred);
}
}
return dup;
@@ -15449,11 +15517,11 @@ var ContractTermsUtil;
}
}
}
- for (const x6 of Object.keys(dup)) {
- if (x6.startsWith("$")) {
+ for (const x5 of Object.keys(dup)) {
+ if (x5.startsWith("$")) {
continue;
}
- dup[x6] = saltForgettable(dup[x6]);
+ dup[x5] = saltForgettable(dup[x5]);
}
}
return dup;
@@ -15474,7 +15542,7 @@ var ContractTermsUtil;
return true;
}
if (Array.isArray(anyJson)) {
- return anyJson.every((x6) => validateForgettable(x6));
+ return anyJson.every((x5) => validateForgettable(x5));
}
if (typeof anyJson === "object") {
for (const k5 of Object.keys(anyJson)) {
@@ -15619,7 +15687,7 @@ function getErrorDetailFromException(e4) {
const err = makeErrorDetail(TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION, {}, `unexpected exception (not an exception, ${excString})`);
return err;
}
-function assertUnreachable(x6) {
+function assertUnreachable(x5) {
throw new Error("Didn't expect to get here");
}
@@ -15627,8 +15695,8 @@ function assertUnreachable(x6) {
var fnutil;
(function(fnutil2) {
function all(arr, f3) {
- for (const x6 of arr) {
- if (!f3(x6)) {
+ for (const x5 of arr) {
+ if (!f3(x5)) {
return false;
}
}
@@ -15636,8 +15704,8 @@ var fnutil;
}
fnutil2.all = all;
function any(arr, f3) {
- for (const x6 of arr) {
- if (f3(x6)) {
+ for (const x5 of arr) {
+ if (f3(x5)) {
return true;
}
}
@@ -15698,6 +15766,7 @@ var TransactionMinorState;
TransactionMinorState2["RefundAvailable"] = "refund-available";
TransactionMinorState2["AcceptRefund"] = "accept-refund";
TransactionMinorState2["PaidByOther"] = "paid-by-other";
+ TransactionMinorState2["CompletedByOtherWallet"] = "completed-by-other-wallet";
})(TransactionMinorState || (TransactionMinorState = {}));
var TransactionAction;
(function(TransactionAction2) {
@@ -15715,7 +15784,6 @@ var TransactionType;
TransactionType2["Payment"] = "payment";
TransactionType2["Refund"] = "refund";
TransactionType2["Refresh"] = "refresh";
- TransactionType2["Reward"] = "reward";
TransactionType2["Deposit"] = "deposit";
TransactionType2["PeerPushDebit"] = "peer-push-debit";
TransactionType2["PeerPushCredit"] = "peer-push-credit";
@@ -15882,7 +15950,7 @@ var ProviderPaymentType;
// ../taler-util/lib/http-client/utils.js
function makeBearerTokenAuthHeader(token) {
- return `Bearer secret-token:${token}`;
+ return `Bearer ${token}`;
}
function addPaginationParams(url, pagination) {
if (!pagination)
@@ -17816,6 +17884,12 @@ var TalerMerchantManagementHttpClient = class extends TalerMerchantInstanceHttpC
}
};
+// ../taler-util/lib/http-client/challenger.js
+var ChallengerCacheEviction;
+(function(ChallengerCacheEviction2) {
+ ChallengerCacheEviction2[ChallengerCacheEviction2["CREATE_CHALLENGE"] = 0] = "CREATE_CHALLENGE";
+})(ChallengerCacheEviction || (ChallengerCacheEviction = {}));
+
// ../taler-util/lib/http-client/bank-revenue.js
var TalerRevenueHttpClient = class {
constructor(baseUrl, httpClient) {
@@ -17880,6 +17954,12 @@ var TalerRevenueHttpClient = class {
}
};
+// ../taler-util/lib/http-client/exchange.js
+var TalerExchangeCacheEviction;
+(function(TalerExchangeCacheEviction2) {
+ TalerExchangeCacheEviction2[TalerExchangeCacheEviction2["CREATE_DESCISION"] = 0] = "CREATE_DESCISION";
+})(TalerExchangeCacheEviction || (TalerExchangeCacheEviction = {}));
+
// ../taler-util/lib/i18n.js
var jedLib = __toESM(require_jed(), 1);
var logger9 = new Logger("i18n/index.ts");
@@ -17928,13 +18008,13 @@ function replacePlaceholderWithValues(translation, childArray) {
const tr = translation.split(/%(\d+)\$s/);
const placeholderChildren = [];
for (let i4 = 0; i4 < childArray.length; i4++) {
- const x6 = childArray[i4];
- if (x6 === void 0) {
+ const x5 = childArray[i4];
+ if (x5 === void 0) {
continue;
- } else if (typeof x6 === "string") {
+ } else if (typeof x5 === "string") {
continue;
} else {
- placeholderChildren.push(x6);
+ placeholderChildren.push(x5);
}
}
const result = [];
@@ -17980,6 +18060,7 @@ var NotificationType;
NotificationType2["TransactionStateTransition"] = "transaction-state-transition";
NotificationType2["WithdrawalOperationTransition"] = "withdrawal-operation-transition";
NotificationType2["ExchangeStateTransition"] = "exchange-state-transition";
+ NotificationType2["Idle"] = "idle";
NotificationType2["TaskObservabilityEvent"] = "task-observability-event";
NotificationType2["RequestObservabilityEvent"] = "request-observability-event";
})(NotificationType || (NotificationType = {}));
@@ -18265,6 +18346,10 @@ init_hooks_module();
init_preact_module();
init_hooks_module();
init_preact_module();
+init_hooks_module();
+init_preact_module();
+init_hooks_module();
+init_preact_module();
init_preact_module();
init_preact_module();
init_hooks_module();
@@ -18284,19 +18369,17 @@ init_preact_module();
init_hooks_module();
init_preact_module();
init_preact_module();
-init_hooks_module();
-init_compat_module();
init_preact_module();
init_hooks_module();
init_preact_module();
-init_preact_module();
+init_hooks_module();
init_preact_module();
init_preact_module();
init_preact_module();
init_hooks_module();
init_preact_module();
+init_compat_module();
init_preact_module();
-init_hooks_module();
init_preact_module();
init_preact_module();
init_preact_module();
@@ -18310,6 +18393,7 @@ init_preact_module();
init_preact_module();
init_preact_module();
init_preact_module();
+init_preact_module();
init_hooks_module();
var __defProp2 = Object.defineProperty;
var __export2 = (target, all) => {
@@ -18973,6 +19057,7 @@ var BrowserFetchHttpLib = class {
const requestHeader = options?.headers;
const requestTimeout = options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);
const requestCancel = options?.cancellationToken;
+ const requestRedirect = options?.redirect;
const parsedUrl = new URL(requestUrl);
if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {
throw TalerError.fromDetail(
@@ -19021,7 +19106,8 @@ var BrowserFetchHttpLib = class {
headers: requestHeadersMap,
body: myBody,
method: requestMethod,
- signal: controller.signal
+ signal: controller.signal,
+ redirect: requestRedirect
});
if (timeoutId) {
clearTimeout(timeoutId);
@@ -26288,9 +26374,10 @@ var ActiviyTracker = class {
}
};
var BankContext = B(void 0);
+var ChallengerContext = B(void 0);
var MerchantContext = B(void 0);
var useMerchantApiContext = () => q2(MerchantContext);
-var CONFIG_FAIL_TRY_AGAIN_MS2 = 5e3;
+var CONFIG_FAIL_TRY_AGAIN_MS3 = 5e3;
var MerchantApiProvider = ({
baseUrl,
children,
@@ -26319,7 +26406,7 @@ var MerchantApiProvider = ({
if (keepRetrying) {
setTimeout(() => {
testConfig();
- }, CONFIG_FAIL_TRY_AGAIN_MS2);
+ }, CONFIG_FAIL_TRY_AGAIN_MS3);
}
setChecked({ type: "error", error: error2 });
} else {
@@ -26369,10 +26456,11 @@ function buildMerchantApiClient(url, evictors) {
instance.getAuthenticationAPI().href,
httpLib
);
- const rootUrl = url;
function getSubInstanceAPI(instanceId) {
- const newURL = new URL(`instance/${instanceId}/`, rootUrl);
- const api = buildMerchantApiClient(newURL, evictors);
+ const api = buildMerchantApiClient(
+ instance.getSubInstanceAPI(instanceId),
+ evictors
+ );
return api.lib;
}
async function getRemoteConfig() {
@@ -26394,6 +26482,7 @@ function buildMerchantApiClient(url, evictors) {
cancelRequest: httpLib.cancelRequest
};
}
+var ExchangeContext = B(void 0);
var Context3 = B(void 0);
var useNavigationContext = () => q2(Context3);
function getPathAndParamsFromWindow() {
@@ -26401,7 +26490,10 @@ function getPathAndParamsFromWindow() {
const params = {};
if (typeof window !== "undefined") {
for (const [key, value] of new URLSearchParams(window.location.search)) {
- params[key] = value;
+ if (!params[key]) {
+ params[key] = [];
+ }
+ params[key].push(value);
}
}
return { path, params };
@@ -26487,8 +26579,8 @@ function compose(hook, viewMap) {
return ComposedComponent;
}
return (p4) => {
- const h41 = withHook(() => hook(p4));
- return h41();
+ const h43 = withHook(() => hook(p4));
+ return h43();
};
}
function recursive(hook) {
@@ -26504,8 +26596,8 @@ function recursive(hook) {
return ComposedComponent;
}
return (p4) => {
- const h41 = withHook(() => hook(p4));
- return h41();
+ const h43 = withHook(() => hook(p4));
+ return h43();
};
}
function saveVNodeForInspection(obj) {
@@ -26549,7 +26641,7 @@ function inspect(obj) {
inspect(children);
}
}
-var FormContext = B({});
+var FormContext = B(void 0);
// src/Application.tsx
init_preact_module();
@@ -26574,7 +26666,7 @@ var mergeObjects = (a5, b4) => ({
...a5,
...b4
});
-var isPromiseLike = (x6) => isFunction(x6.then);
+var isPromiseLike = (x5) => isFunction(x5.then);
var table = /* @__PURE__ */ new WeakMap();
var counter = 0;
var stableHash = (arg) => {
@@ -27430,7 +27522,7 @@ var useSWRHandler = (_key, fetcher, config) => {
refreshWhenOffline,
key
]);
- x3(returnedData);
+ x2(returnedData);
if (suspense && isUndefined(data) && key) {
if (!IS_REACT_LEGACY && IS_SERVER) {
throw new Error("Fallback data is required when using suspense in SSR.");
@@ -28164,7 +28256,7 @@ var Router = function(Component$$1) {
return props.url !== this.props.url || props.onChange !== this.props.onChange;
};
Router2.prototype.canRoute = function canRoute2(url) {
- var children = x2(this.props.children);
+ var children = x(this.props.children);
return this.getMatchingChildren(children, url, false).length > 0;
};
Router2.prototype.routeTo = function routeTo2(url) {
@@ -28219,7 +28311,7 @@ var Router = function(Component$$1) {
var children = ref.children;
var onChange = ref.onChange;
var url = ref$1.url;
- var active = this.getMatchingChildren(x2(children), url, true);
+ var active = this.getMatchingChildren(x(children), url, true);
var current = active[0] || null;
var previous = this.previousUrl;
if (url !== previous) {
@@ -28287,26 +28379,21 @@ init_preact_module();
init_hooks_module();
// src/context/session.ts
-var codecForSessionStateLoggedIn = () => buildCodecForObject().property("status", codecForConstString("loggedIn")).property("instance", codecForString()).property("impersonate", codecOptional(codecForImpresonate())).property("token", codecOptional(codecForString())).property("isAdmin", codecForBoolean()).build("SessionState.LoggedIn");
-var codecForSessionStateExpired = () => buildCodecForObject().property("status", codecForConstString("expired")).property("instance", codecForString()).property("impersonate", codecOptional(codecForImpresonate())).property("isAdmin", codecForBoolean()).build("SessionState.Expired");
-var codecForSessionStateLoggedOut = () => buildCodecForObject().property("status", codecForConstString("loggedOut")).property("instance", codecForString()).property("isAdmin", codecForBoolean()).build("SessionState.LoggedOut");
-var codecForImpresonate = () => buildCodecForObject().property("originalInstance", codecForString()).property(
- "originalToken",
+init_preact_module();
+init_hooks_module();
+var codecForSessionState = () => buildCodecForObject().property("backendUrl", codecForURL()).property("token", codecOptional(codecForString())).property(
+ "prevToken",
codecOptional(codecForString())
-).property("originalBackendUrl", codecForString()).build("SessionState.Impersonate");
-var codecForSessionState = () => buildCodecForUnion().discriminateOn("status").alternative("loggedIn", codecForSessionStateLoggedIn()).alternative("loggedOut", codecForSessionStateLoggedOut()).alternative("expired", codecForSessionStateExpired()).build("SessionState");
+).build("SavedSession");
function inferInstanceName(url) {
const match6 = INSTANCE_ID_LOOKUP.exec(url.href);
return !match6 || !match6[1] ? DEFAULT_ADMIN_USERNAME : match6[1];
}
var defaultState = (url) => {
- const instance = inferInstanceName(url);
return {
- status: "loggedIn",
- instance,
- isAdmin: instance === DEFAULT_ADMIN_USERNAME,
+ backendUrl: url,
token: void 0,
- impersonate: void 0
+ prevToken: void 0
};
};
var SESSION_STATE_KEY = buildStorageKey(
@@ -28315,87 +28402,99 @@ var SESSION_STATE_KEY = buildStorageKey(
);
var DEFAULT_ADMIN_USERNAME = "default";
var INSTANCE_ID_LOOKUP = /\/instances\/([^/]*)\/?$/;
-function useSessionContext() {
- const { url: merchantUrl, changeBackend } = useMerchantApiContext();
+function cleanAllCache() {
+ mutate(() => true, void 0, { revalidate: false });
+}
+var Context5 = B(void 0);
+var useSessionContext = () => q2(Context5);
+var SessionContextProvider = ({
+ children
+ // value,
+}) => {
+ const {
+ lib: rootLib,
+ config: rootConfig,
+ url: merchantUrl
+ } = useMerchantApiContext();
+ const [status, setStatus] = p3("loggedIn");
+ const [currentConfig, setCurrentConfig] = p3();
const { value: state, update } = useLocalStorage(
SESSION_STATE_KEY,
defaultState(merchantUrl)
);
- return {
- state,
+ const currentInstance = inferInstanceName(state.backendUrl);
+ let lib;
+ let config;
+ const doingImpersonation = state.backendUrl.href !== merchantUrl.href;
+ if (doingImpersonation) {
+ lib = rootLib.subInstanceApi(inferInstanceName(state.backendUrl));
+ config = currentConfig ?? rootConfig;
+ } else {
+ lib = rootLib;
+ config = rootConfig;
+ }
+ h2(() => {
+ if (!doingImpersonation)
+ return;
+ lib.instance.getConfig().then((resp) => {
+ if (resp.type === "ok") {
+ setCurrentConfig(resp.body);
+ }
+ });
+ }, [state.backendUrl.href]);
+ const value = {
+ state: {
+ backendUrl: state.backendUrl,
+ token: state.token,
+ impersonated: doingImpersonation,
+ instance: currentInstance,
+ isAdmin: currentInstance === DEFAULT_ADMIN_USERNAME,
+ status
+ },
+ lib,
+ config,
logOut() {
- const instance = inferInstanceName(merchantUrl);
- const nextState = {
- status: "loggedOut",
- instance,
- isAdmin: instance === DEFAULT_ADMIN_USERNAME
- };
- update(nextState);
+ setStatus("loggedOut");
+ update({
+ backendUrl: merchantUrl,
+ token: void 0,
+ prevToken: void 0
+ });
+ cleanAllCache();
},
deImpersonate() {
- if (state.status === "loggedOut" || state.status === "expired") {
- return;
- }
- if (state.impersonate === void 0) {
- return;
- }
- const newURL = new URL(`./`, state.impersonate.originalBackendUrl);
- changeBackend(newURL);
- const nextState = {
- status: "loggedIn",
- isAdmin: state.impersonate.originalInstance === DEFAULT_ADMIN_USERNAME,
- instance: state.impersonate.originalInstance,
- token: state.impersonate.originalToken,
- impersonate: void 0
- };
- update(nextState);
- },
- impersonate(info) {
- if (state.status === "loggedOut" || state.status === "expired") {
- return;
- }
- changeBackend(info.baseUrl);
- const nextState = {
- status: "loggedIn",
- isAdmin: info.instance === DEFAULT_ADMIN_USERNAME,
- instance: info.instance,
- // FIXME: bank and merchant should have consistent behavior
- token: info.token?.substring("secret-token:".length),
- impersonate: {
- originalBackendUrl: merchantUrl.href,
- originalToken: state.token,
- originalInstance: state.instance
- }
- };
- update(nextState);
+ cleanAllCache();
+ update({
+ backendUrl: merchantUrl,
+ token: state.prevToken,
+ prevToken: void 0
+ });
+ setStatus("loggedIn");
},
- expired() {
- if (state.status === "loggedOut")
- return;
- const nextState = {
- ...state,
- status: "expired",
- token: void 0
- };
- update(nextState);
+ impersonate(baseUrl) {
+ update({
+ backendUrl: baseUrl,
+ token: void 0,
+ prevToken: state.token
+ });
+ setStatus("loggedIn");
+ cleanAllCache();
},
- logIn(info) {
- const nextState = {
- impersonate: void 0,
- ...state,
- status: "loggedIn",
- // FIXME: bank and merchant should have consistent behavior
- token: info.token?.substring("secret-token:".length)
- // token: info.token,
- };
- update(nextState);
+ logIn(token) {
cleanAllCache();
+ setStatus("loggedIn");
+ update({
+ backendUrl: state.backendUrl,
+ token,
+ prevToken: state.prevToken
+ });
}
};
-}
-function cleanAllCache() {
- mutate(() => true, void 0, { revalidate: false });
-}
+ return h(Context5.Provider, {
+ value,
+ children
+ });
+};
// src/paths/admin/create/CreatePage.tsx
init_preact_module();
@@ -30045,7 +30144,7 @@ var formatters2 = {
}
},
// Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
- x: function x5(date2, token, _localize, options) {
+ x: function x4(date2, token, _localize, options) {
var originalDate = options._originalDate || date2;
var timezoneOffset = originalDate.getTimezoneOffset();
switch (token) {
@@ -31455,18 +31554,40 @@ function InputWithAddon({
), addonAfter && /* @__PURE__ */ h("div", { class: "control", onClick: addonAfterAction, style: { cursor: addonAfterAction ? "pointer" : void 0 } }, /* @__PURE__ */ h("a", { class: "button is-static" }, addonAfter))), error2 && /* @__PURE__ */ h("p", { class: "help is-danger" }, error2), /* @__PURE__ */ h("span", { class: "has-text-grey" }, help)), expand ? /* @__PURE__ */ h("div", null, side) : side));
}
+// src/components/form/TextField.tsx
+init_preact_module();
+function TextField({
+ name,
+ tooltip,
+ label,
+ expand,
+ help,
+ children,
+ side
+}) {
+ const { error: error2 } = useField(name);
+ return /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, label, tooltip && /* @__PURE__ */ h("span", { class: "icon has-tooltip-right", "data-tooltip": tooltip }, /* @__PURE__ */ h("i", { class: "mdi mdi-information" })))), /* @__PURE__ */ h("div", { class: "field-body is-flex-grow-3" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h(
+ "p",
+ {
+ class: expand ? "control is-expanded has-icons-right" : "control has-icons-right"
+ },
+ children,
+ help
+ ), error2 && /* @__PURE__ */ h("p", { class: "help is-danger" }, error2)), side));
+}
+
// src/components/instance/DefaultInstanceFormFields.tsx
function DefaultInstanceFormFields({
readonlyId,
showId
}) {
const { i18n: i18n2 } = useTranslationContext();
- const { url: backendUrl } = useMerchantApiContext();
+ const { state } = useSessionContext();
return /* @__PURE__ */ h(p2, null, showId && /* @__PURE__ */ h(
InputWithAddon,
{
name: "id",
- addonBefore: new URL("instances/", backendUrl.href).href,
+ addonBefore: new URL("instances/", state.backendUrl.href).href,
readonly: readonlyId,
label: i18n2.str`Identifier`,
tooltip: i18n2.str`Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.`
@@ -31478,13 +31599,16 @@ function DefaultInstanceFormFields({
label: i18n2.str`Business name`,
tooltip: i18n2.str`Legal name of the business represented by this instance.`
}
- ), /* @__PURE__ */ h(
+ ), /* @__PURE__ */ h(TextField, { name: "asdasd", label: "" }, /* @__PURE__ */ h(i18n2.Translate, null, "Choose individual if you don't have or are not required to have legal business permission.")), /* @__PURE__ */ h(
InputSelector,
{
name: "user_type",
- label: i18n2.str`Type`,
+ label: i18n2.str`Selling as`,
tooltip: i18n2.str`Different type of account can have different rules and requirements.`,
- values: ["business", "individual"]
+ values: ["business", "individual"],
+ toStr: (d5) => {
+ return d5.toUpperCase();
+ }
}
), /* @__PURE__ */ h(
Input,
@@ -31508,13 +31632,6 @@ function DefaultInstanceFormFields({
tooltip: i18n2.str`Logo image.`
}
), /* @__PURE__ */ h(
- InputToggle,
- {
- name: "use_stefan",
- label: i18n2.str`Pay transaction fee`,
- tooltip: i18n2.str`Assume the cost of the transaction of let the user pay for it.`
- }
- ), /* @__PURE__ */ h(
InputGroup,
{
name: "address",
@@ -31531,6 +31648,13 @@ function DefaultInstanceFormFields({
},
/* @__PURE__ */ h(InputLocation, { name: "jurisdiction" })
), /* @__PURE__ */ h(
+ InputToggle,
+ {
+ name: "use_stefan",
+ label: i18n2.str`Pay transaction fee`,
+ tooltip: i18n2.str`Assume the cost of the transaction of let the user pay for it.`
+ }
+ ), /* @__PURE__ */ h(
InputDuration,
{
name: "default_pay_delay",
@@ -31604,14 +31728,20 @@ function CreatePage({ onCreate, onBack, forceId }) {
const newValue = structuredClone(value);
const newToken = newValue.auth_token;
newValue.auth_token = void 0;
- newValue.auth = newToken === null || newToken === void 0 ? { method: "external" } : { method: "token", token: `secret-token:${newToken}` };
+ newValue.auth = newToken === null || newToken === void 0 ? { method: "external" } : { method: "token", token: createRFC8959AccessTokenPlain(newToken) };
if (!newValue.address)
newValue.address = {};
if (!newValue.jurisdiction)
newValue.jurisdiction = {};
- newValue.default_pay_delay = Duration.toTalerProtocolDuration(newValue.default_pay_delay);
- newValue.default_wire_transfer_delay = Duration.toTalerProtocolDuration(newValue.default_wire_transfer_delay);
- return onCreate(newValue);
+ newValue.default_pay_delay = Duration.toTalerProtocolDuration(
+ newValue.default_pay_delay
+ );
+ newValue.default_wire_transfer_delay = Duration.toTalerProtocolDuration(
+ newValue.default_wire_transfer_delay
+ );
+ return onCreate(
+ newValue
+ );
};
function updateToken(token) {
valueHandler((old) => ({
@@ -31669,7 +31799,7 @@ function CreatePage({ onCreate, onBack, forceId }) {
function Create({ onBack, onConfirm, forceId }) {
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state, logIn } = useSessionContext();
return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotificationCard, { notification: notif }), /* @__PURE__ */ h(
CreatePage,
@@ -31694,7 +31824,7 @@ function Create({ onBack, onConfirm, forceId }) {
);
if (result.type === "ok") {
const { token } = result.body;
- logIn({ token });
+ logIn(token);
}
}
onConfirm();
@@ -31869,7 +31999,7 @@ function revalidateInstanceDetails() {
}
function useInstanceDetails() {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([token]) {
return await instance.getCurrentInstanceDetails(token);
}
@@ -31882,7 +32012,7 @@ function useInstanceDetails() {
}
function useInstanceKYCDetails() {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([token]) {
return await instance.getCurrentIntanceKycStatus(token, {});
}
@@ -31902,7 +32032,7 @@ function revalidateManagedInstanceDetails() {
}
function useManagedInstanceDetails(instanceId) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([token, instanceId2]) {
return await instance.getInstanceDetails(token, instanceId2);
}
@@ -31922,7 +32052,7 @@ function revalidateBackendInstances() {
}
function useBackendInstances() {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([token]) {
return await instance.listInstances(token);
}
@@ -31934,6 +32064,115 @@ function useBackendInstances() {
return void 0;
}
+// src/paths/login/index.tsx
+init_preact_module();
+init_hooks_module();
+var tokenRequest = {
+ scope: "write",
+ duration: {
+ d_us: "forever"
+ },
+ refreshable: true
+};
+function LoginPage(_p) {
+ const [token, setToken] = p3("");
+ const [notif, setNotif] = p3(void 0);
+ const { state, logIn } = useSessionContext();
+ const { lib } = useSessionContext();
+ const { i18n: i18n2 } = useTranslationContext();
+ async function doLoginImpl() {
+ const result = await lib.authenticate.createAccessTokenBearer(
+ createRFC8959AccessTokenEncoded(token),
+ tokenRequest
+ );
+ if (result.type === "ok") {
+ const { token: token2 } = result.body;
+ logIn(token2);
+ return;
+ } else {
+ switch (result.case) {
+ case HttpStatusCode.Unauthorized: {
+ setNotif({
+ message: "Your password is incorrect",
+ type: "ERROR"
+ });
+ return;
+ }
+ case HttpStatusCode.NotFound: {
+ setNotif({
+ message: "Your instance not found",
+ type: "ERROR"
+ });
+ return;
+ }
+ }
+ }
+ }
+ return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotificationCard, { notification: notif }), /* @__PURE__ */ h("div", { class: "columns is-centered", style: { margin: "auto" } }, /* @__PURE__ */ h("div", { class: "column is-two-thirds " }, /* @__PURE__ */ h("div", { class: "modal-card", style: { width: "100%", margin: 0 } }, /* @__PURE__ */ h(
+ "header",
+ {
+ class: "modal-card-head",
+ style: { border: "1px solid", borderBottom: 0 }
+ },
+ /* @__PURE__ */ h("p", { class: "modal-card-title" }, i18n2.str`Login required`)
+ ), /* @__PURE__ */ h(
+ "section",
+ {
+ class: "modal-card-body",
+ style: { border: "1px solid", borderTop: 0, borderBottom: 0 }
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "Please enter your access token for ", /* @__PURE__ */ h("b", null, '"', state.instance, '"'), "."),
+ /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Access Token"))), /* @__PURE__ */ h("div", { class: "field-body" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control is-expanded" }, /* @__PURE__ */ h(
+ "input",
+ {
+ class: "input",
+ type: "password",
+ placeholder: "current access token",
+ name: "token",
+ onKeyPress: (e4) => e4.keyCode === 13 ? doLoginImpl() : null,
+ value: token,
+ onInput: (e4) => setToken(e4?.currentTarget.value)
+ }
+ )))))
+ ), /* @__PURE__ */ h(
+ "footer",
+ {
+ class: "modal-card-foot ",
+ style: {
+ justifyContent: "space-between",
+ border: "1px solid",
+ borderTop: 0
+ }
+ },
+ /* @__PURE__ */ h("div", null),
+ /* @__PURE__ */ h(AsyncButton2, { type: "is-info", onClick: doLoginImpl }, /* @__PURE__ */ h(i18n2.Translate, null, "Confirm"))
+ )))));
+}
+function AsyncButton2({
+ onClick,
+ disabled,
+ type = "",
+ children
+}) {
+ const [running, setRunning] = p3(false);
+ return /* @__PURE__ */ h(
+ "button",
+ {
+ class: "button " + type,
+ disabled: disabled || running,
+ onClick: () => {
+ setRunning(true);
+ onClick().then(() => {
+ setRunning(false);
+ }).catch(() => {
+ setRunning(false);
+ });
+ }
+ },
+ children
+ );
+}
+
// src/paths/admin/list/View.tsx
init_preact_module();
init_hooks_module();
@@ -32005,6 +32244,8 @@ function Table({
onPurge
}) {
const { i18n: i18n2 } = useTranslationContext();
+ const { lib } = useSessionContext();
+ const { impersonate } = useSessionContext();
return /* @__PURE__ */ h("div", { class: "table-container" }, /* @__PURE__ */ h("table", { class: "table is-fullwidth is-striped is-hoverable is-fullwidth" }, /* @__PURE__ */ h("thead", null, /* @__PURE__ */ h("tr", null, /* @__PURE__ */ h("th", { class: "is-checkbox-cell" }, /* @__PURE__ */ h("label", { class: "b-checkbox checkbox" }, /* @__PURE__ */ h(
"input",
{
@@ -32022,7 +32263,17 @@ function Table({
checked: rowSelection.indexOf(i4.id) != -1,
onClick: () => rowSelectionHandler(toggleSelected(i4.id))
}
- ), /* @__PURE__ */ h("span", { class: "check" }))), /* @__PURE__ */ h("td", null, i4.id), /* @__PURE__ */ h("td", null, i4.name), /* @__PURE__ */ h("td", { class: "is-actions-cell right-sticky" }, /* @__PURE__ */ h("div", { class: "buttons is-right" }, /* @__PURE__ */ h(
+ ), /* @__PURE__ */ h("span", { class: "check" }))), /* @__PURE__ */ h("td", null, /* @__PURE__ */ h(
+ "a",
+ {
+ href: `#/orders`,
+ onClick: async (_e) => {
+ const newInstanceApi = lib.subInstanceApi(i4.id);
+ impersonate(new URL(newInstanceApi.instance.baseUrl));
+ }
+ },
+ i4.id
+ )), /* @__PURE__ */ h("td", null, i4.name), /* @__PURE__ */ h("td", { class: "is-actions-cell right-sticky" }, /* @__PURE__ */ h("div", { class: "buttons is-right" }, /* @__PURE__ */ h(
"button",
{
class: "button is-small is-success jb-modal",
@@ -32109,193 +32360,6 @@ function View({
));
}
-// src/paths/login/index.tsx
-init_preact_module();
-init_hooks_module();
-var tokenRequest = {
- scope: "write",
- duration: {
- d_us: "forever"
- },
- refreshable: true
-};
-function LoginPage(_p) {
- const [token, setToken] = p3("");
- const [notif, setNotif] = p3(void 0);
- const { state, logIn, impersonate } = useSessionContext();
- const { lib } = useMerchantApiContext();
- const { i18n: i18n2 } = useTranslationContext();
- async function doImpersonateImpl(instanceId) {
- const newInstanceApi = lib.subInstanceApi(instanceId);
- const cfg = await newInstanceApi.instance.getConfig();
- if (cfg.type !== "ok") {
- setNotif({
- message: "Could not load the configuration of this instance.",
- description: newInstanceApi.instance.baseUrl,
- type: "ERROR"
- });
- return;
- }
- const result = await newInstanceApi.authenticate.createAccessTokenBearer(
- token,
- tokenRequest
- );
- if (result.type === "ok") {
- const { token: token2 } = result.body;
- impersonate({ instance: instanceId, baseUrl: new URL(newInstanceApi.instance.baseUrl), token: token2 });
- return;
- } else {
- switch (result.case) {
- case HttpStatusCode.Unauthorized: {
- setNotif({
- message: "Your password is incorrect",
- type: "ERROR"
- });
- return;
- }
- case HttpStatusCode.NotFound: {
- setNotif({
- message: "Your instance not found",
- type: "ERROR"
- });
- return;
- }
- }
- }
- }
- async function doLoginImpl() {
- const result = await lib.authenticate.createAccessTokenBearer(
- token,
- tokenRequest
- );
- if (result.type === "ok") {
- const { token: token2 } = result.body;
- logIn({ token: token2 });
- return;
- } else {
- switch (result.case) {
- case HttpStatusCode.Unauthorized: {
- setNotif({
- message: "Your password is incorrect",
- type: "ERROR"
- });
- return;
- }
- case HttpStatusCode.NotFound: {
- setNotif({
- message: "Your instance not found",
- type: "ERROR"
- });
- return;
- }
- }
- }
- }
- if (state.status === "loggedIn" && state.impersonate !== void 0) {
- return /* @__PURE__ */ h("div", { class: "columns is-centered", style: { margin: "auto" } }, /* @__PURE__ */ h("div", { class: "column is-two-thirds " }, /* @__PURE__ */ h("div", { class: "modal-card", style: { width: "100%", margin: 0 } }, /* @__PURE__ */ h(
- "header",
- {
- class: "modal-card-head",
- style: { border: "1px solid", borderBottom: 0 }
- },
- /* @__PURE__ */ h("p", { class: "modal-card-title" }, i18n2.str`Login required`)
- ), /* @__PURE__ */ h(
- "section",
- {
- class: "modal-card-body",
- style: { border: "1px solid", borderTop: 0, borderBottom: 0 }
- },
- /* @__PURE__ */ h("p", null, /* @__PURE__ */ h(i18n2.Translate, null, "Need the access token for the instance", " ", /* @__PURE__ */ h("b", null, '"', state.instance, '"'))),
- /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Access Token"))), /* @__PURE__ */ h("div", { class: "field-body" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control is-expanded" }, /* @__PURE__ */ h(
- "input",
- {
- class: "input",
- type: "password",
- placeholder: "current access token",
- name: "token",
- onKeyPress: (e4) => e4.keyCode === 13 ? doImpersonateImpl(state.instance) : null,
- value: token,
- onInput: (e4) => setToken(e4?.currentTarget.value)
- }
- )))))
- ), /* @__PURE__ */ h(
- "footer",
- {
- class: "modal-card-foot ",
- style: {
- justifyContent: "flex-end",
- border: "1px solid",
- borderTop: 0
- }
- },
- /* @__PURE__ */ h(AsyncButton2, { onClick: () => doImpersonateImpl(state.instance) }, /* @__PURE__ */ h(i18n2.Translate, null, "Confirm"))
- ))));
- }
- return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotificationCard, { notification: notif }), /* @__PURE__ */ h("div", { class: "columns is-centered", style: { margin: "auto" } }, /* @__PURE__ */ h("div", { class: "column is-two-thirds " }, /* @__PURE__ */ h("div", { class: "modal-card", style: { width: "100%", margin: 0 } }, /* @__PURE__ */ h(
- "header",
- {
- class: "modal-card-head",
- style: { border: "1px solid", borderBottom: 0 }
- },
- /* @__PURE__ */ h("p", { class: "modal-card-title" }, i18n2.str`Login required`)
- ), /* @__PURE__ */ h(
- "section",
- {
- class: "modal-card-body",
- style: { border: "1px solid", borderTop: 0, borderBottom: 0 }
- },
- /* @__PURE__ */ h(i18n2.Translate, null, "Please enter your access token for ", /* @__PURE__ */ h("b", null, '"', state.instance, '"'), "."),
- /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Access Token"))), /* @__PURE__ */ h("div", { class: "field-body" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control is-expanded" }, /* @__PURE__ */ h(
- "input",
- {
- class: "input",
- type: "password",
- placeholder: "current access token",
- name: "token",
- onKeyPress: (e4) => e4.keyCode === 13 ? doLoginImpl() : null,
- value: token,
- onInput: (e4) => setToken(e4?.currentTarget.value)
- }
- )))))
- ), /* @__PURE__ */ h(
- "footer",
- {
- class: "modal-card-foot ",
- style: {
- justifyContent: "space-between",
- border: "1px solid",
- borderTop: 0
- }
- },
- /* @__PURE__ */ h("div", null),
- /* @__PURE__ */ h(AsyncButton2, { type: "is-info", onClick: doLoginImpl }, /* @__PURE__ */ h(i18n2.Translate, null, "Confirm"))
- )))));
-}
-function AsyncButton2({
- onClick,
- disabled,
- type = "",
- children
-}) {
- const [running, setRunning] = p3(false);
- return /* @__PURE__ */ h(
- "button",
- {
- class: "button " + type,
- disabled: disabled || running,
- onClick: () => {
- setRunning(true);
- onClick().then(() => {
- setRunning(false);
- }).catch(() => {
- setRunning(false);
- });
- }
- },
- children
- );
-}
-
// src/paths/admin/list/index.tsx
function Instances({
onCreate,
@@ -32306,7 +32370,7 @@ function Instances({
const [purging, setPurging] = p3(null);
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
if (!result)
return /* @__PURE__ */ h(Loading, null);
@@ -42116,15 +42180,14 @@ function LangSelector() {
}
// src/components/menu/SideBar.tsx
-var VERSION = true ? "0.9.3-dev.27" : void 0;
+var VERSION = true ? "0.10.7" : void 0;
function Sidebar({ mobile }) {
const { i18n: i18n2 } = useTranslationContext();
+ const { state, logOut, config } = useSessionContext();
const kycStatus = useInstanceKYCDetails();
const needKYC = kycStatus !== void 0 && !(kycStatus instanceof TalerError) && kycStatus.type === "ok" && !!kycStatus.body;
- const { state, logOut } = useSessionContext();
const isLoggedIn = state.status === "loggedIn";
const hasToken = isLoggedIn && state.token !== void 0;
- const { config, url: backendURL } = useMerchantApiContext();
return /* @__PURE__ */ h(
"aside",
{
@@ -42152,15 +42215,7 @@ function Sidebar({ mobile }) {
config.version,
")"
))),
- /* @__PURE__ */ h("div", { class: "menu is-menu-main" }, isLoggedIn ? /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("ul", { class: "menu-list" }, /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/orders", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-cash-register" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Orders")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/inventory", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-shopping" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Inventory")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/transfers", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-arrow-left-right" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Transfers")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/templates", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-newspaper" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Templates")))), needKYC && /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/kyc", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-account-check" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, "KYC Status")))), /* @__PURE__ */ h("p", { class: "menu-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Configuration")), /* @__PURE__ */ h("ul", { class: "menu-list" }, /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/bank", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-bank" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Bank account")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/otp-devices", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-lock" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "OTP Devices")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/webhooks", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-newspaper" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Webhooks")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/settings", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-square-edit-outline" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Settings")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/token", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-security" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Access token")))))) : void 0, /* @__PURE__ */ h("p", { class: "menu-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Connection")), /* @__PURE__ */ h("ul", { class: "menu-list" }, /* @__PURE__ */ h("li", null, /* @__PURE__ */ h(
- "a",
- {
- class: "has-icon is-state-info is-hoverable",
- href: "/interface"
- },
- /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-newspaper" })),
- /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Interface"))
- )), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("span", { style: { width: "3rem" }, class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-web" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, backendURL.hostname))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("span", { style: { width: "3rem" }, class: "icon" }, "ID"), /* @__PURE__ */ h("span", { class: "menu-item-label" }, state.instance))), state.isAdmin && /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("p", { class: "menu-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Instances")), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/instance/new", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-plus" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "New")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/instances", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-format-list-bulleted" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "List"))))), hasToken ? /* @__PURE__ */ h("li", null, /* @__PURE__ */ h(
+ /* @__PURE__ */ h("div", { class: "menu is-menu-main" }, isLoggedIn ? /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("ul", { class: "menu-list" }, /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/orders", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-cash-register" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Orders")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/inventory", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-shopping" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Inventory")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/transfers", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-arrow-left-right" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Transfers")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/templates", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-newspaper" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Templates")))), needKYC && /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/kyc", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-account-check" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, "KYC Status")))), /* @__PURE__ */ h("p", { class: "menu-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Configuration")), /* @__PURE__ */ h("ul", { class: "menu-list" }, /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/bank", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-bank" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Bank account")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/otp-devices", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-lock" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "OTP Devices")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/webhooks", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-newspaper" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Webhooks")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/settings", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-square-edit-outline" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Settings")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/token", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-security" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Access token")))))) : void 0, /* @__PURE__ */ h("p", { class: "menu-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Connection")), /* @__PURE__ */ h("ul", { class: "menu-list" }, /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { class: "has-icon is-state-info is-hoverable", href: "/interface" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-newspaper" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Interface")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("span", { style: { width: "3rem" }, class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-web" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, state.backendUrl.hostname))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("span", { style: { width: "3rem" }, class: "icon" }, "ID"), /* @__PURE__ */ h("span", { class: "menu-item-label" }, state.instance))), state.isAdmin && /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("p", { class: "menu-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Instances")), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/instance/new", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-plus" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "New")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/instances", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-format-list-bulleted" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "List"))))), hasToken ? /* @__PURE__ */ h("li", null, /* @__PURE__ */ h(
"a",
{
class: "has-icon is-state-info is-hoverable",
@@ -42260,7 +42315,7 @@ function Menu(_p) {
}
),
isLoggedIn && /* @__PURE__ */ h(Sidebar, { mobile: mobileOpen }),
- state.status !== "loggedOut" && state.impersonate !== void 0 && /* @__PURE__ */ h(
+ state.status !== "loggedOut" && state.impersonated && /* @__PURE__ */ h(
"nav",
{
class: "level",
@@ -42275,9 +42330,8 @@ function Menu(_p) {
"a",
{
href: "#/instances",
- onClick: (e4) => {
+ onClick: () => {
deImpersonate();
- e4.preventDefault();
}
},
"go back"
@@ -42333,8 +42387,8 @@ function revalidateInstanceBankAccounts() {
}
function useInstanceBankAccounts() {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
- async function fetcher([token, bid]) {
+ const { lib: { instance } } = useSessionContext();
+ async function fetcher([token, _bid]) {
return await instance.listBankAccounts(token, {
// limit: PAGINATED_LIST_REQUEST,
// offset: bid,
@@ -42359,7 +42413,7 @@ function revalidateBankAccountDetails() {
}
function useBankAccountDetails(h_wire) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([token, wireId]) {
return await instance.getBankAccountDetails(token, wireId);
}
@@ -42434,7 +42488,7 @@ function isEthereumAddress(address) {
function checkAddressChecksum(address) {
return true;
}
-function validateBitcoin(addr, i18n2) {
+function validateBitcoin_path1(addr, i18n2) {
try {
const valid = /^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$/.test(addr);
if (valid)
@@ -42444,7 +42498,7 @@ function validateBitcoin(addr, i18n2) {
}
return i18n2.str`This is not a valid bitcoin address.`;
}
-function validateEthereum(addr, i18n2) {
+function validateEthereum_path1(addr, i18n2) {
try {
const valid = isEthereumAddress(addr);
if (valid)
@@ -42454,7 +42508,19 @@ function validateEthereum(addr, i18n2) {
}
return i18n2.str`This is not a valid Ethereum address.`;
}
-function validateIBAN(iban, i18n2) {
+var DOMAIN_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+(\/[a-zA-Z0-9-.]+)*\/?$/;
+function validateTalerBank_path1(addr, i18n2) {
+ console.log(addr, DOMAIN_REGEX.test(addr));
+ try {
+ const valid = DOMAIN_REGEX.test(addr);
+ if (valid)
+ return void 0;
+ } catch (e4) {
+ console.log(e4);
+ }
+ return i18n2.str`This is not a valid host.`;
+}
+function validateIBAN_path1(iban, i18n2) {
if (iban.length < 4)
return i18n2.str`IBAN numbers usually have more that 4 digits`;
if (iban.length > 34)
@@ -42521,7 +42587,7 @@ function InputPaytoForm({
const { i18n: i18n2 } = useTranslationContext();
const errors2 = {
target: value.target === noTargetValue ? i18n2.str`required` : void 0,
- path1: !value.path1 ? i18n2.str`required` : value.target === "iban" ? validateIBAN(value.path1, i18n2) : value.target === "bitcoin" ? validateBitcoin(value.path1, i18n2) : value.target === "ethereum" ? validateEthereum(value.path1, i18n2) : void 0,
+ path1: !value.path1 ? i18n2.str`required` : value.target === "iban" ? validateIBAN_path1(value.path1, i18n2) : value.target === "bitcoin" ? validateBitcoin_path1(value.path1, i18n2) : value.target === "ethereum" ? validateEthereum_path1(value.path1, i18n2) : value.target === "x-taler-bank" ? validateTalerBank_path1(value.path1, i18n2) : void 0,
path2: value.target === "x-taler-bank" ? !value.path2 ? i18n2.str`required` : void 0 : void 0,
params: undefinedIfEmpty({
"receiver-name": !value.params?.["receiver-name"] ? i18n2.str`required` : void 0
@@ -42530,9 +42596,10 @@ function InputPaytoForm({
const hasErrors = Object.keys(errors2).some(
(k5) => errors2[k5] !== void 0
);
+ const path1WithSlash = value.path1 && !value.path1.endsWith("/") ? value.path1 + "/" : value.path1;
const str = hasErrors || !value.target ? void 0 : stringifyPaytoUri({
targetType: value.target,
- targetPath: value.path2 ? `${value.path1}/${value.path2}` : value.path1 ?? "",
+ targetPath: value.path2 ? `${path1WithSlash}${value.path2}` : value.path1 ?? "",
params: value.params ?? {},
isKnown: false
});
@@ -42638,7 +42705,19 @@ function InputPaytoForm({
name: "path1",
readonly,
label: i18n2.str`Host`,
- tooltip: i18n2.str`Bank host.`
+ fromStr: (v3) => {
+ if (v3.startsWith("http")) {
+ try {
+ const url = new URL(v3);
+ return url.host + url.pathname;
+ } catch {
+ return v3;
+ }
+ }
+ return v3;
+ },
+ tooltip: i18n2.str`Bank host.`,
+ help: /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h(i18n2.Translate, null, "Without scheme and may include subpath:")), /* @__PURE__ */ h("div", null, "bank.com/"), /* @__PURE__ */ h("div", null, "bank.com/path/subpath/"))
}
), /* @__PURE__ */ h(
Input,
@@ -42889,7 +42968,7 @@ function CreatePage2({ onCreate, onBack }) {
// src/paths/instance/accounts/create/index.tsx
function CreateValidator({ onConfirm, onBack }) {
- const { lib: api } = useMerchantApiContext();
+ const { lib: api } = useSessionContext();
const { state } = useSessionContext();
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
@@ -43069,6 +43148,7 @@ function NotFoundPageOrAdminCreate() {
{
forceId: DEFAULT_ADMIN_USERNAME,
onConfirm: () => {
+ cleanAllCache();
route("/bank" /* bank_list */);
}
}
@@ -43282,7 +43362,7 @@ function ListOtpDevices({
}) {
const { i18n: i18n2 } = useTranslationContext();
const [notif, setNotif] = p3(void 0);
- const { lib: api } = useMerchantApiContext();
+ const { lib: api } = useSessionContext();
const { state } = useSessionContext();
const result = useInstanceBankAccounts();
if (!result)
@@ -43341,7 +43421,7 @@ function UpdateValidator({
onConfirm,
onBack
}) {
- const { lib: api } = useMerchantApiContext();
+ const { lib: api } = useSessionContext();
const { state } = useSessionContext();
const result = useBankAccountDetails(bid);
const [notif, setNotif] = p3(void 0);
@@ -43525,8 +43605,8 @@ function revalidateInstanceWebhooks() {
}
function useInstanceWebhooks() {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
- async function fetcher([token, bid]) {
+ const { lib: { instance } } = useSessionContext();
+ async function fetcher([token, _bid]) {
return await instance.listWebhooks(token, {
// limit: PAGINATED_LIST_REQUEST,
// offset: bid,
@@ -43574,7 +43654,7 @@ function revalidateWebhookDetails() {
}
function useWebhookDetails(webhookId) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([hookId, token]) {
return await instance.getWebhookDetails(token, hookId);
}
@@ -43600,7 +43680,7 @@ function revalidateInstanceProducts() {
}
function useInstanceProducts() {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
const [offset, setOffset] = p3();
async function fetcher([token, bid]) {
const list = await instance.listProducts(token, {
@@ -43641,7 +43721,7 @@ function revalidateProductDetails() {
}
function useProductDetails(productId) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([pid, token]) {
return await instance.getProductDetails(token, pid);
}
@@ -43671,7 +43751,7 @@ function InputCurrency({
children,
side
}) {
- const { config } = useMerchantApiContext();
+ const { config } = useSessionContext();
return /* @__PURE__ */ h(
InputWithAddon,
{
@@ -44053,9 +44133,9 @@ function InputNumber2({
help,
tooltip,
inputExtra: { min: 0 },
- children,
side
- }
+ },
+ children
);
}
@@ -46837,7 +46917,7 @@ function CreatePage3({
instanceConfig,
instanceInventory
}) {
- const { config } = useMerchantApiContext();
+ const { config } = useSessionContext();
const instance_default = with_defaults2(instanceConfig, config.currency);
const [value, valueHandler] = p3(instance_default);
const zero = Amounts.zeroOfCurrency(config.currency);
@@ -47290,7 +47370,6 @@ function CreatePage3({
class: "button",
onClick: (e4) => {
if (value.extra && value.extra[key] !== void 0) {
- console.log(value.extra);
delete value.extra[key];
}
valueHandler({
@@ -47382,7 +47461,7 @@ function OrderCreate({
onConfirm,
onBack
}) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const [notif, setNotif] = p3(void 0);
const { state } = useSessionContext();
const detailsResult = useInstanceDetails();
@@ -47466,7 +47545,7 @@ function revalidateOrderDetails() {
}
function useOrderDetails(oderId) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([dId, token]) {
return await instance.getOrderDetails(token, dId);
}
@@ -47487,7 +47566,7 @@ function revalidateInstanceOrders() {
function useInstanceOrders(args, updatePosition = () => {
}) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([token, o3, p4, r3, w5, d5]) {
return await instance.listOrders(token, {
limit: PAGINATED_LIST_REQUEST,
@@ -47513,28 +47592,6 @@ function useInstanceOrders(args, updatePosition = () => {
init_preact_module();
init_hooks_module();
-// src/components/form/TextField.tsx
-init_preact_module();
-function TextField({
- name,
- tooltip,
- label,
- expand,
- help,
- children,
- side
-}) {
- const { error: error2 } = useField(name);
- return /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, label, tooltip && /* @__PURE__ */ h("span", { class: "icon has-tooltip-right", "data-tooltip": tooltip }, /* @__PURE__ */ h("i", { class: "mdi mdi-information" })))), /* @__PURE__ */ h("div", { class: "field-body is-flex-grow-3" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h(
- "p",
- {
- class: expand ? "control is-expanded has-icons-right" : "control has-icons-right"
- },
- children,
- help
- ), error2 && /* @__PURE__ */ h("p", { class: "help is-danger" }, error2)), side));
-}
-
// src/paths/instance/orders/list/Table.tsx
init_preact_module();
init_hooks_module();
@@ -47638,7 +47695,7 @@ function RefundModal({
const [settings] = usePreference();
const { i18n: i18n2 } = useTranslationContext();
const refunds = (order.order_status === "paid" ? order.refund_details : []).reduce(mergeRefunds, []);
- const { config } = useMerchantApiContext();
+ const { config } = useSessionContext();
const totalRefunded = refunds.map((r3) => r3.amount).reduce(
(p4, c4) => Amounts.add(p4, Amounts.parseOrThrow(c4)).amount,
Amounts.zeroOfCurrency(config.currency)
@@ -48064,9 +48121,9 @@ function PaidPage({
return e4.when.getTime() > now2.getTime();
});
const [value, valueHandler] = p3(order);
- const { url: backendUrl } = useMerchantApiContext();
+ const { state } = useSessionContext();
const refundurl = stringifyRefundUri({
- merchantBaseUrl: backendUrl.href,
+ merchantBaseUrl: state.backendUrl.href,
orderId: order.contract_terms.order_id
});
const { i18n: i18n2 } = useTranslationContext();
@@ -48264,7 +48321,7 @@ function DetailPage({ id, selected, onRefund, onBack }) {
function Update({ oid, onBack }) {
const result = useOrderDetails(oid);
const [notif, setNotif] = p3(void 0);
- const { lib: api } = useMerchantApiContext();
+ const { lib: api } = useSessionContext();
const { state } = useSessionContext();
const { i18n: i18n2 } = useTranslationContext();
if (!result)
@@ -48506,7 +48563,7 @@ function OrderList({ onCreate, onSelect }) {
filter,
(d5) => setFilter({ ...filter, position: d5 })
);
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
const { state } = useSessionContext();
@@ -48647,101 +48704,6 @@ async function copyToClipboard(text) {
init_preact_module();
init_hooks_module();
-// src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx
-init_preact_module();
-
-// src/components/exception/QR.tsx
-init_preact_module();
-init_hooks_module();
-var import_qrcode_generator = __toESM(require_qrcode(), 1);
-function QR({ text }) {
- const divRef = _2(null);
- h2(() => {
- const qr = (0, import_qrcode_generator.default)(0, "L");
- qr.addData(text);
- qr.make();
- if (divRef.current) {
- divRef.current.innerHTML = qr.createSvgTag({
- scalable: true
- });
- }
- });
- return /* @__PURE__ */ h(
- "div",
- {
- style: {
- width: "100%",
- display: "flex",
- flexDirection: "column",
- alignItems: "center"
- }
- },
- /* @__PURE__ */ h(
- "div",
- {
- style: { width: "50%", minWidth: 200, maxWidth: 300 },
- ref: divRef
- }
- )
- );
-}
-
-// src/components/notifications/CreatedSuccessfully.tsx
-init_preact_module();
-function CreatedSuccessfully({
- children,
- onConfirm,
- onCreateAnother
-}) {
- return /* @__PURE__ */ h("div", { class: "columns is-fullwidth is-vcentered mt-3" }, /* @__PURE__ */ h("div", { class: "column" }), /* @__PURE__ */ h("div", { class: "column is-four-fifths" }, /* @__PURE__ */ h("div", { class: "card" }, /* @__PURE__ */ h("header", { class: "card-header has-background-success" }, /* @__PURE__ */ h("p", { class: "card-header-title has-text-white-ter" }, "Success.")), /* @__PURE__ */ h("div", { class: "card-content" }, children)), /* @__PURE__ */ h("div", { class: "buttons is-right" }, onCreateAnother && /* @__PURE__ */ h("button", { class: "button is-info", onClick: onCreateAnother }, "Create another"), /* @__PURE__ */ h("button", { class: "button is-info", onClick: onConfirm }, "Continue"))), /* @__PURE__ */ h("div", { class: "column" }));
-}
-
-// src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx
-function CreatedSuccessfully2({
- entity,
- onConfirm
-}) {
- const { i18n: i18n2 } = useTranslationContext();
- const { url: backendUrl } = useMerchantApiContext();
- const { state } = useSessionContext();
- const issuer = backendUrl.href;
- const qrText = `otpauth://totp/${state.instance}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key}`;
- const qrTextSafe = `otpauth://totp/${state.instance}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key.substring(0, 6)}...`;
- return /* @__PURE__ */ h(CreatedSuccessfully, { onConfirm }, /* @__PURE__ */ h("p", { class: "is-size-5" }, /* @__PURE__ */ h(i18n2.Translate, null, "You can scan the next QR code with your device or save the key before continuing.")), /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, "ID")), /* @__PURE__ */ h("div", { class: "field-body is-flex-grow-3" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control" }, /* @__PURE__ */ h(
- "input",
- {
- readonly: true,
- class: "input",
- value: entity.otp_device_id
- }
- ))))), /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Description"))), /* @__PURE__ */ h("div", { class: "field-body is-flex-grow-3" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control" }, /* @__PURE__ */ h(
- "input",
- {
- class: "input",
- readonly: true,
- value: entity.otp_device_description
- }
- ))))), /* @__PURE__ */ h(
- QR,
- {
- text: qrText
- }
- ), /* @__PURE__ */ h(
- "div",
- {
- style: {
- color: "grey",
- fontSize: "small",
- width: 200,
- textAlign: "center",
- margin: "auto",
- wordBreak: "break-all"
- }
- },
- qrTextSafe
- ));
-}
-
// src/paths/instance/otp_devices/create/CreatePage.tsx
init_preact_module();
init_hooks_module();
@@ -48841,9 +48803,103 @@ function CreatePage4({ onCreate, onBack }) {
))), /* @__PURE__ */ h("div", { class: "column" }))));
}
+// src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx
+init_preact_module();
+
+// src/components/exception/QR.tsx
+init_preact_module();
+init_hooks_module();
+var import_qrcode_generator = __toESM(require_qrcode(), 1);
+function QR({ text }) {
+ const divRef = _2(null);
+ h2(() => {
+ const qr = (0, import_qrcode_generator.default)(0, "L");
+ qr.addData(text);
+ qr.make();
+ if (divRef.current) {
+ divRef.current.innerHTML = qr.createSvgTag({
+ scalable: true
+ });
+ }
+ });
+ return /* @__PURE__ */ h(
+ "div",
+ {
+ style: {
+ width: "100%",
+ display: "flex",
+ flexDirection: "column",
+ alignItems: "center"
+ }
+ },
+ /* @__PURE__ */ h(
+ "div",
+ {
+ style: { width: "50%", minWidth: 200, maxWidth: 300 },
+ ref: divRef
+ }
+ )
+ );
+}
+
+// src/components/notifications/CreatedSuccessfully.tsx
+init_preact_module();
+function CreatedSuccessfully({
+ children,
+ onConfirm,
+ onCreateAnother
+}) {
+ return /* @__PURE__ */ h("div", { class: "columns is-fullwidth is-vcentered mt-3" }, /* @__PURE__ */ h("div", { class: "column" }), /* @__PURE__ */ h("div", { class: "column is-four-fifths" }, /* @__PURE__ */ h("div", { class: "card" }, /* @__PURE__ */ h("header", { class: "card-header has-background-success" }, /* @__PURE__ */ h("p", { class: "card-header-title has-text-white-ter" }, "Success.")), /* @__PURE__ */ h("div", { class: "card-content" }, children)), /* @__PURE__ */ h("div", { class: "buttons is-right" }, onCreateAnother && /* @__PURE__ */ h("button", { class: "button is-info", onClick: onCreateAnother }, "Create another"), /* @__PURE__ */ h("button", { class: "button is-info", onClick: onConfirm }, "Continue"))), /* @__PURE__ */ h("div", { class: "column" }));
+}
+
+// src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx
+function CreatedSuccessfully2({
+ entity,
+ onConfirm
+}) {
+ const { i18n: i18n2 } = useTranslationContext();
+ const { state } = useSessionContext();
+ const issuer = state.backendUrl.href;
+ const qrText = `otpauth://totp/${state.instance}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key}`;
+ const qrTextSafe = `otpauth://totp/${state.instance}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key.substring(0, 6)}...`;
+ return /* @__PURE__ */ h(CreatedSuccessfully, { onConfirm }, /* @__PURE__ */ h("p", { class: "is-size-5" }, /* @__PURE__ */ h(i18n2.Translate, null, "You can scan the next QR code with your device or save the key before continuing.")), /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, "ID")), /* @__PURE__ */ h("div", { class: "field-body is-flex-grow-3" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control" }, /* @__PURE__ */ h(
+ "input",
+ {
+ readonly: true,
+ class: "input",
+ value: entity.otp_device_id
+ }
+ ))))), /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Description"))), /* @__PURE__ */ h("div", { class: "field-body is-flex-grow-3" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control" }, /* @__PURE__ */ h(
+ "input",
+ {
+ class: "input",
+ readonly: true,
+ value: entity.otp_device_description
+ }
+ ))))), /* @__PURE__ */ h(
+ QR,
+ {
+ text: qrText
+ }
+ ), /* @__PURE__ */ h(
+ "div",
+ {
+ style: {
+ color: "grey",
+ fontSize: "small",
+ width: 200,
+ textAlign: "center",
+ margin: "auto",
+ wordBreak: "break-all"
+ }
+ },
+ qrTextSafe
+ ));
+}
+
// src/paths/instance/otp_devices/create/index.tsx
function CreateValidator2({ onConfirm, onBack }) {
- const { lib: api } = useMerchantApiContext();
+ const { lib: api } = useSessionContext();
const { state } = useSessionContext();
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
@@ -48885,8 +48941,8 @@ function revalidateInstanceOtpDevices() {
}
function useInstanceOtpDevices() {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
- async function fetcher([token, bid]) {
+ const { lib: { instance } } = useSessionContext();
+ async function fetcher([token, _bid]) {
return await instance.listOtpDevices(token, {
// limit: PAGINATED_LIST_REQUEST,
// offset: bid,
@@ -48911,7 +48967,7 @@ function revalidateOtpDeviceDetails() {
}
function useOtpDeviceDetails(deviceId) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([dId, token]) {
return await instance.getOtpDeviceDetails(token, dId);
}
@@ -49043,7 +49099,7 @@ function ListPage4({
function ListOtpDevices2({ onCreate, onSelect }) {
const { i18n: i18n2 } = useTranslationContext();
const [notif, setNotif] = p3(void 0);
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const result = useInstanceOtpDevices();
if (!result)
@@ -49209,7 +49265,7 @@ function UpdateValidator2({
const result = useOtpDeviceDetails(vid);
const [notif, setNotif] = p3(void 0);
const [keyUpdated, setKeyUpdated] = p3(null);
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const { i18n: i18n2 } = useTranslationContext();
if (!result)
@@ -49459,8 +49515,8 @@ function ProductForm2({ onSubscribe, initial: initial3, alreadyExist }) {
h2(() => {
onSubscribe(hasErrors ? void 0 : submit);
}, [submit, hasErrors]);
- const { url: backendUrl } = useMerchantApiContext();
const { i18n: i18n2 } = useTranslationContext();
+ const { state } = useSessionContext();
return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h(
FormProvider,
{
@@ -49473,7 +49529,7 @@ function ProductForm2({ onSubscribe, initial: initial3, alreadyExist }) {
InputWithAddon,
{
name: "product_id",
- addonBefore: new URL("product/", backendUrl.href).href,
+ addonBefore: new URL("product/", state.backendUrl.href).href,
label: i18n2.str`ID`,
tooltip: i18n2.str`product identification to use in URLs (for internal use only)`
}
@@ -49564,7 +49620,7 @@ function CreatePage5({ onCreate, onBack }) {
// src/paths/instance/products/create/index.tsx
function CreateProduct({ onConfirm, onBack }) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
@@ -49901,7 +49957,7 @@ function ProductList2({
onSelect
}) {
const result = useInstanceProducts();
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const [deleting, setDeleting] = p3(null);
const [notif, setNotif] = p3(void 0);
@@ -50032,7 +50088,7 @@ function UpdateProduct({
}) {
const result = useProductDetails(pid);
const [notif, setNotif] = p3(void 0);
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const { i18n: i18n2 } = useTranslationContext();
if (!result)
@@ -50080,7 +50136,8 @@ init_preact_module();
init_hooks_module();
function CreatePage6({ onCreate, onBack }) {
const { i18n: i18n2 } = useTranslationContext();
- const { url: backendUrl, config } = useMerchantApiContext();
+ const { config } = useSessionContext();
+ const { state: session } = useSessionContext();
const devices = useInstanceOtpDevices();
const [state, setState] = p3({
minimum_age: 0,
@@ -50150,7 +50207,7 @@ function CreatePage6({ onCreate, onBack }) {
InputWithAddon,
{
name: "id",
- help: new URL(`templates/${state.id ?? ""}`, backendUrl.href).href,
+ help: new URL(`templates/${state.id ?? ""}`, session.backendUrl.href).href,
label: i18n2.str`Identifier`,
tooltip: i18n2.str`Name of the template in URLs.`
}
@@ -50265,7 +50322,7 @@ function CreatePage6({ onCreate, onBack }) {
// src/paths/instance/templates/create/index.tsx
function CreateTransfer({ onConfirm, onBack }) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
@@ -50302,7 +50359,7 @@ function revalidateInstanceTemplates() {
}
function useInstanceTemplates() {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
const [offset, setOffset] = p3();
async function fetcher([token, bid]) {
return await instance.listTemplates(token, {
@@ -50329,7 +50386,7 @@ function revalidateTemplateDetails() {
}
function useTemplateDetails(templateId) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([tid, token]) {
return await instance.getTemplateDetails(token, tid);
}
@@ -50492,7 +50549,7 @@ function ListTemplates({
}) {
const { i18n: i18n2 } = useTranslationContext();
const [notif, setNotif] = p3(void 0);
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const result = useInstanceTemplates();
const [deleting, setDeleting] = p3(null);
const { state } = useSessionContext();
@@ -50580,10 +50637,10 @@ init_preact_module();
// src/paths/instance/templates/qr/QrPage.tsx
init_preact_module();
-function QrPage({ contract, id: templateId, onBack }) {
+function QrPage({ id: templateId, onBack }) {
const { i18n: i18n2 } = useTranslationContext();
- const { config, url: backendUrl } = useMerchantApiContext();
- const merchantBaseUrl = backendUrl.href;
+ const { state } = useSessionContext();
+ const merchantBaseUrl = state.backendUrl.href;
const payTemplateUri = stringifyPayTemplateUri({
merchantBaseUrl,
templateId,
@@ -50652,7 +50709,8 @@ init_preact_module();
init_hooks_module();
function UpdatePage4({ template, onUpdate, onBack }) {
const { i18n: i18n2 } = useTranslationContext();
- const { url: backendUrl, config } = useMerchantApiContext();
+ const { config } = useSessionContext();
+ const { state: session } = useSessionContext();
const [state, setState] = p3({
description: template.template_description,
minimum_age: template.template_contract.minimum_age,
@@ -50715,7 +50773,7 @@ function UpdatePage4({ template, onUpdate, onBack }) {
otp_id: state.otpId
});
};
- return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("section", { class: "section" }, /* @__PURE__ */ h("section", { class: "hero is-hero-bar" }, /* @__PURE__ */ h("div", { class: "hero-body" }, /* @__PURE__ */ h("div", { class: "level" }, /* @__PURE__ */ h("div", { class: "level-left" }, /* @__PURE__ */ h("div", { class: "level-item" }, /* @__PURE__ */ h("span", { class: "is-size-4" }, new URL(`templates/${template.id}`, backendUrl.href).href)))))), /* @__PURE__ */ h("hr", null), /* @__PURE__ */ h("section", { class: "section is-main-section" }, /* @__PURE__ */ h("div", { class: "columns" }, /* @__PURE__ */ h("div", { class: "column is-four-fifths" }, /* @__PURE__ */ h(
+ return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("section", { class: "section" }, /* @__PURE__ */ h("section", { class: "hero is-hero-bar" }, /* @__PURE__ */ h("div", { class: "hero-body" }, /* @__PURE__ */ h("div", { class: "level" }, /* @__PURE__ */ h("div", { class: "level-left" }, /* @__PURE__ */ h("div", { class: "level-item" }, /* @__PURE__ */ h("span", { class: "is-size-4" }, new URL(`templates/${template.id}`, session.backendUrl.href).href)))))), /* @__PURE__ */ h("hr", null), /* @__PURE__ */ h("section", { class: "section is-main-section" }, /* @__PURE__ */ h("div", { class: "columns" }, /* @__PURE__ */ h("div", { class: "column is-four-fifths" }, /* @__PURE__ */ h(
FormProvider,
{
object: state,
@@ -50836,7 +50894,7 @@ function UpdateTemplate({
onConfirm,
onBack
}) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const result = useTemplateDetails(tid);
const [notif, setNotif] = p3(void 0);
@@ -50952,7 +51010,7 @@ function TemplateUsePage({
onOrderCreated,
onBack
}) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const result = useTemplateDetails(tid);
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
@@ -51034,9 +51092,9 @@ function DetailPage2({
async function submitForm() {
if (hasErrors)
return;
- const oldToken = hasToken ? form.old_token : void 0;
- const newToken = form.new_token;
- onNewToken(oldToken, `secret-token:${newToken}`);
+ const oldToken = form.old_token !== void 0 && hasToken ? createRFC8959AccessTokenPlain(form.old_token) : void 0;
+ const newToken = createRFC8959AccessTokenPlain(form.new_token);
+ onNewToken(oldToken, newToken);
}
return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("section", { class: "section" }, /* @__PURE__ */ h("section", { class: "hero is-hero-bar" }, /* @__PURE__ */ h("div", { class: "hero-body" }, /* @__PURE__ */ h("div", { class: "level" }, /* @__PURE__ */ h("div", { class: "level-left" }, /* @__PURE__ */ h("div", { class: "level-item" }, /* @__PURE__ */ h("span", { class: "is-size-4" }, text)))))), /* @__PURE__ */ h("hr", null), !hasToken && /* @__PURE__ */ h(
NotificationCard,
@@ -51061,8 +51119,7 @@ function DetailPage2({
class: "button",
onClick: () => {
if (hasToken) {
- const oldToken = form.old_token;
- onClearToken(oldToken);
+ onClearToken(form.old_token ? createRFC8959AccessTokenPlain(form.old_token) : void 0);
} else {
onClearToken(void 0);
}
@@ -51098,12 +51155,9 @@ function DetailPage2({
}
// src/paths/instance/token/index.tsx
-function Token({
- onChange,
- onCancel
-}) {
+function Token({ onChange, onCancel }) {
const { i18n: i18n2 } = useTranslationContext();
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { logIn } = useSessionContext();
const [notif, setNotif] = p3(void 0);
const result = useInstanceDetails();
@@ -51133,13 +51187,24 @@ function Token({
hasToken,
onClearToken: async (currentToken) => {
try {
- await lib.instance.updateCurrentInstanceAuthentication(currentToken, {
- method: "external"
- });
- onChange();
+ const resp = await lib.instance.updateCurrentInstanceAuthentication(
+ currentToken,
+ {
+ method: "external"
+ }
+ );
+ if (resp.type === "ok") {
+ onChange();
+ } else {
+ return setNotif({
+ message: i18n2.str`Failed to clear token`,
+ type: "ERROR",
+ description: resp.detail.hint
+ });
+ }
} catch (error2) {
if (error2 instanceof Error) {
- setNotif({
+ return setNotif({
message: i18n2.str`Failed to clear token`,
type: "ERROR",
description: error2.message
@@ -51149,29 +51214,44 @@ function Token({
},
onNewToken: async (currentToken, newToken) => {
try {
- await lib.instance.updateCurrentInstanceAuthentication(currentToken, {
- token: newToken,
- method: "token"
- });
- const resp = await lib.authenticate.createAccessTokenBearer(newToken, {
- scope: "write",
- duration: {
- d_us: "forever"
- },
- refreshable: true
- });
+ {
+ const resp2 = await lib.instance.updateCurrentInstanceAuthentication(
+ currentToken,
+ {
+ token: newToken,
+ method: "token"
+ }
+ );
+ if (resp2.type === "fail") {
+ return setNotif({
+ message: i18n2.str`Failed to set new token`,
+ type: "ERROR",
+ description: resp2.detail.hint
+ });
+ }
+ }
+ const resp = await lib.authenticate.createAccessTokenBearer(
+ newToken,
+ {
+ scope: "write",
+ duration: {
+ d_us: "forever"
+ },
+ refreshable: true
+ }
+ );
if (resp.type === "ok") {
- logIn({ token: resp.body.token });
- onChange();
+ logIn(resp.body.token);
+ return onChange();
} else {
- setNotif({
+ return setNotif({
message: i18n2.str`Failed to set new token`,
type: "ERROR"
});
}
} catch (error2) {
if (error2 instanceof Error) {
- setNotif({
+ return setNotif({
message: i18n2.str`Failed to set new token`,
type: "ERROR",
description: error2.message
@@ -51268,7 +51348,7 @@ function CreatePage7({ accounts, onCreate, onBack }) {
// src/paths/instance/transfers/create/index.tsx
function CreateTransfer2({ onConfirm, onBack }) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
@@ -51308,7 +51388,7 @@ function revalidateInstanceTransfers() {
function useInstanceTransfers(args, updatePosition = () => {
}) {
const { state: session } = useSessionContext();
- const { lib: { instance } } = useMerchantApiContext();
+ const { lib: { instance } } = useSessionContext();
async function fetcher([token, o3, p4, v3]) {
return await instance.listWireTransfers(token, {
paytoURI: p4,
@@ -51628,13 +51708,13 @@ function UpdatePage5({
// src/paths/instance/update/index.tsx
function Update2(props) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const updateInstance = lib.instance.updateCurrentInstance.bind(lib.instance);
const result = useInstanceDetails();
return CommonUpdate(props, result, updateInstance);
}
function AdminUpdate(props) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const t4 = lib.subInstanceApi(props.instanceId).instance;
const updateInstance = t4.updateCurrentInstance.bind(t4);
const result = useManagedInstanceDetails(props.instanceId);
@@ -51792,7 +51872,7 @@ function CreatePage8({ onCreate, onBack }) {
function CreateWebhook({ onConfirm, onBack }) {
const [notif, setNotif] = p3(void 0);
const { i18n: i18n2 } = useTranslationContext();
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotificationCard, { notification: notif }), /* @__PURE__ */ h(
CreatePage8,
@@ -51937,7 +52017,7 @@ function ListPage7({
function ListWebhooks({ onCreate, onSelect }) {
const { i18n: i18n2 } = useTranslationContext();
const [notif, setNotif] = p3(void 0);
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const result = useInstanceWebhooks();
if (!result)
@@ -52076,7 +52156,7 @@ function UpdateWebhook({
onConfirm,
onBack
}) {
- const { lib } = useMerchantApiContext();
+ const { lib } = useSessionContext();
const { state } = useSessionContext();
const result = useWebhookDetails(tid);
const [notif, setNotif] = p3(void 0);
@@ -52221,7 +52301,7 @@ function Routing(_p) {
const instance = useInstanceBankAccounts();
const accounts = !instance || instance instanceof TalerError || instance.type === "fail" ? void 0 : instance.body;
const shouldWarnAboutMissingBankAccounts = !state.isAdmin && accounts !== void 0 && accounts.accounts.length < 1 && (AbsoluteTime.isNever(preference.hideMissingAccountUntil) || AbsoluteTime.cmp(now2, preference.hideMissingAccountUntil) > 1);
- const shouldLogin = state.status === "loggedOut" || state.status === "expired";
+ const shouldLogin = state.status === "loggedOut";
if (shouldLogin) {
return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Welcome!" }), /* @__PURE__ */ h(LoginPage, null));
}
@@ -52682,12 +52762,12 @@ function KycBanner() {
init_preact_module();
init_hooks_module();
var initial2 = {};
-var Context5 = B(initial2);
+var Context6 = B(initial2);
var SettingsProvider = ({
children,
value
}) => {
- return h(Context5.Provider, {
+ return h(Context6.Provider, {
value,
children
});
@@ -52748,34 +52828,42 @@ function Application() {
de: strings["de"].completeness
}
},
- /* @__PURE__ */ h(MerchantApiProvider, { baseUrl: new URL("./", baseUrl), frameOnError: OnConfigError, evictors: {
- management: swrCacheEvictor
- } }, /* @__PURE__ */ h(
- SWRConfig2,
+ /* @__PURE__ */ h(
+ MerchantApiProvider,
{
- value: {
- provider: WITH_LOCAL_STORAGE_CACHE ? localStorageProvider : void 0,
- // normally, do not revalidate
- revalidateOnFocus: false,
- revalidateOnReconnect: false,
- revalidateIfStale: false,
- revalidateOnMount: void 0,
- focusThrottleInterval: void 0,
- // normally, do not refresh
- refreshInterval: void 0,
- dedupingInterval: 2e3,
- refreshWhenHidden: false,
- refreshWhenOffline: false,
- // ignore errors
- shouldRetryOnError: false,
- errorRetryCount: 0,
- errorRetryInterval: void 0,
- // do not go to loading again if already has data
- keepPreviousData: true
+ baseUrl: new URL("./", baseUrl),
+ frameOnError: OnConfigError,
+ evictors: {
+ management: swrCacheEvictor
}
},
- /* @__PURE__ */ h(TalerWalletIntegrationBrowserProvider, null, /* @__PURE__ */ h(BrowserHashNavigationProvider, null, /* @__PURE__ */ h(Routing, null)))
- ))
+ /* @__PURE__ */ h(SessionContextProvider, null, /* @__PURE__ */ h(
+ SWRConfig2,
+ {
+ value: {
+ provider: WITH_LOCAL_STORAGE_CACHE ? localStorageProvider : void 0,
+ // normally, do not revalidate
+ revalidateOnFocus: false,
+ revalidateOnReconnect: false,
+ revalidateIfStale: false,
+ revalidateOnMount: void 0,
+ focusThrottleInterval: void 0,
+ // normally, do not refresh
+ refreshInterval: void 0,
+ dedupingInterval: 2e3,
+ refreshWhenHidden: false,
+ refreshWhenOffline: false,
+ // ignore errors
+ shouldRetryOnError: false,
+ errorRetryCount: 0,
+ errorRetryInterval: void 0,
+ // do not go to loading again if already has data
+ keepPreviousData: true
+ }
+ },
+ /* @__PURE__ */ h(TalerWalletIntegrationBrowserProvider, null, /* @__PURE__ */ h(BrowserHashNavigationProvider, null, /* @__PURE__ */ h(Routing, null)))
+ ))
+ )
));
}
function getInitialBackendBaseURL(backendFromSettings) {
@@ -52807,7 +52895,9 @@ function localStorageProvider() {
});
return map3;
}
-function OnConfigError({ state }) {
+function OnConfigError({
+ state
+}) {
const { i18n: i18n2 } = useTranslationContext();
if (!state) {
return /* @__PURE__ */ h(i18n2.Translate, null, "checking compatibility with server...");
@@ -52846,153 +52936,103 @@ var swrCacheEvictor = new class {
async notifySuccess(op) {
switch (op) {
case TalerMerchantManagementCacheEviction.CREATE_INSTANCE: {
- await Promise.all([
- revalidateBackendInstances()
- ]);
+ await Promise.all([revalidateBackendInstances()]);
return;
}
case TalerMerchantManagementCacheEviction.UPDATE_INSTANCE: {
- await Promise.all([
- revalidateManagedInstanceDetails()
- ]);
+ await Promise.all([revalidateManagedInstanceDetails()]);
return;
}
case TalerMerchantManagementCacheEviction.DELETE_INSTANCE: {
- await Promise.all([
- revalidateBackendInstances()
- ]);
+ await Promise.all([revalidateBackendInstances()]);
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE: {
- await Promise.all([
- revalidateInstanceDetails()
- ]);
+ await Promise.all([revalidateInstanceDetails()]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE: {
- await Promise.all([
- revalidateInstanceDetails()
- ]);
+ await Promise.all([revalidateInstanceDetails()]);
return;
}
case TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT: {
- await Promise.all([
- revalidateInstanceBankAccounts()
- ]);
+ await Promise.all([revalidateInstanceBankAccounts()]);
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT: {
- await Promise.all([
- revalidateBankAccountDetails()
- ]);
+ await Promise.all([revalidateBankAccountDetails()]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT: {
- await Promise.all([
- revalidateInstanceBankAccounts()
- ]);
+ await Promise.all([revalidateInstanceBankAccounts()]);
return;
}
case TalerMerchantInstanceCacheEviction.CREATE_PRODUCT: {
- await Promise.all([
- revalidateInstanceProducts()
- ]);
+ await Promise.all([revalidateInstanceProducts()]);
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT: {
- await Promise.all([
- revalidateProductDetails()
- ]);
+ await Promise.all([revalidateProductDetails()]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_PRODUCT: {
- await Promise.all([
- revalidateInstanceProducts()
- ]);
+ await Promise.all([revalidateInstanceProducts()]);
return;
}
case TalerMerchantInstanceCacheEviction.CREATE_TRANSFER: {
- await Promise.all([
- revalidateInstanceTransfers()
- ]);
+ await Promise.all([revalidateInstanceTransfers()]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_TRANSFER: {
- await Promise.all([
- revalidateInstanceTransfers()
- ]);
+ await Promise.all([revalidateInstanceTransfers()]);
return;
}
case TalerMerchantInstanceCacheEviction.CREATE_DEVICE: {
- await Promise.all([
- revalidateInstanceOtpDevices()
- ]);
+ await Promise.all([revalidateInstanceOtpDevices()]);
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_DEVICE: {
- await Promise.all([
- revalidateOtpDeviceDetails()
- ]);
+ await Promise.all([revalidateOtpDeviceDetails()]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_DEVICE: {
- await Promise.all([
- revalidateInstanceOtpDevices()
- ]);
+ await Promise.all([revalidateInstanceOtpDevices()]);
return;
}
case TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE: {
- await Promise.all([
- revalidateInstanceTemplates()
- ]);
+ await Promise.all([revalidateInstanceTemplates()]);
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE: {
- await Promise.all([
- revalidateTemplateDetails()
- ]);
+ await Promise.all([revalidateTemplateDetails()]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE: {
- await Promise.all([
- revalidateInstanceTemplates()
- ]);
+ await Promise.all([revalidateInstanceTemplates()]);
return;
}
case TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK: {
- await Promise.all([
- revalidateInstanceWebhooks()
- ]);
+ await Promise.all([revalidateInstanceWebhooks()]);
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK: {
- await Promise.all([
- revalidateWebhookDetails()
- ]);
+ await Promise.all([revalidateWebhookDetails()]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK: {
- await Promise.all([
- revalidateInstanceWebhooks()
- ]);
+ await Promise.all([revalidateInstanceWebhooks()]);
return;
}
case TalerMerchantInstanceCacheEviction.CREATE_ORDER: {
- await Promise.all([
- revalidateInstanceOrders()
- ]);
+ await Promise.all([revalidateInstanceOrders()]);
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_ORDER: {
- await Promise.all([
- revalidateOrderDetails()
- ]);
+ await Promise.all([revalidateOrderDetails()]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_ORDER: {
- await Promise.all([
- revalidateInstanceOrders()
- ]);
+ await Promise.all([revalidateInstanceOrders()]);
return;
}
case TalerMerchantInstanceCacheEviction.LAST:
diff --git a/backoffice/index.js.map b/backoffice/index.js.map
index 91a8db30d..eb515d168 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.52/node_modules/big-integer/BigInteger.js", "../../../../node_modules/.pnpm/jed@1.1.1/node_modules/jed/jed.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", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/util.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/PureComponent.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/memo.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/forwardRef.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/Children.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense-list.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/portals.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/render.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/index.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/index.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", "../../../taler-util/src/nacl-fast.ts", "../../../taler-util/src/prng-browser.ts", "../../../taler-util/src/taler-error-codes.ts", "../../../taler-util/src/CancellationToken.ts", "../../../taler-util/src/amounts.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/logging.ts", "../../../taler-util/src/codec.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/bech32.ts", "../../../taler-util/src/segwit_addr.ts", "../../../taler-util/src/bitcoin.ts", "../../../taler-util/src/payto.ts", "../../../taler-util/src/http-common.ts", "../../../taler-util/src/operation.ts", "../../../taler-util/src/taleruri.ts", "../../../taler-util/src/http-client/types.ts", "../../../taler-util/src/http-status-codes.ts", "../../../taler-util/src/http-impl.missing.ts", "../../../taler-util/src/http.ts", "../../../taler-util/src/libtool-version.ts", "../../../taler-util/src/MerchantApiClient.ts", "../../../taler-util/src/RequestThrottler.ts", "../../../taler-util/src/ReserveTransaction.ts", "../../../taler-util/src/TaskThrottler.ts", "../../../taler-util/src/bank-api-client.ts", "../../../taler-util/src/base64.ts", "../../../taler-util/src/contract-terms.ts", "../../../taler-util/src/errors.ts", "../../../taler-util/src/fnutils.ts", "../../../taler-util/src/transactions-types.ts", "../../../taler-util/src/wallet-types.ts", "../../../taler-util/src/http-client/utils.ts", "../../../taler-util/src/http-client/bank-conversion.ts", "../../../taler-util/src/http-client/authentication.ts", "../../../taler-util/src/http-client/bank-core.ts", "../../../taler-util/src/http-client/merchant.ts", "../../../taler-util/src/http-client/bank-revenue.ts", "../../../taler-util/src/i18n.ts", "../../../taler-util/src/iban.ts", "../../../taler-util/src/notifications.ts", "../../../taler-util/src/observability.ts", "../../../taler-util/src/rfc3548.ts", "../../../taler-util/src/timer.ts", "../../../taler-util/src/transaction-test-data.ts", "../../../taler-util/src/index.browser.ts", "../../../web-util/src/hooks/useLocalStorage.ts", "../../../web-util/src/utils/observable.ts", "../../../web-util/src/hooks/useLang.ts", "../../../web-util/src/hooks/useMemoryStorage.ts", "../../../web-util/src/hooks/useNotifications.ts", "../../../web-util/src/hooks/useAsyncAsHook.ts", "../../../web-util/src/utils/base64.ts", "../../../web-util/src/utils/request.ts", "../../../web-util/src/utils/http-impl.browser.ts", "../../../web-util/src/utils/http-impl.sw.ts", "../../../web-util/src/utils/route.ts", "../../../web-util/src/context/api.ts", "../../../web-util/src/context/translation.ts", "../../../../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/_lib/buildLocalizeFn/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/_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/startOfWeek/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/constants/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameDay/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/endOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/eachDayOfInterval/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfWeek/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/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/en-US/_lib/localize/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/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMinutes/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getSeconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Setter.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/constants.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/utils.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCDay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISODay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subDays/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/sub/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/index.js", "../../../web-util/src/context/bank-api.ts", "../../../web-util/src/context/activity.ts", "../../../web-util/src/context/merchant-api.ts", "../../../web-util/src/context/navigation.ts", "../../../web-util/src/context/wallet-integration.ts", "../../../web-util/src/components/utils.ts", "../../../web-util/src/components/Attention.tsx", "../../../web-util/src/components/CopyButton.tsx", "../../../web-util/src/components/ErrorLoading.tsx", "../../../web-util/src/components/LangSelector.tsx", "../../../web-util/src/components/Loading.tsx", "../../../web-util/src/components/Header.tsx", "../../../web-util/src/components/Footer.tsx", "../../../web-util/src/components/Button.tsx", "../../../web-util/src/components/ShowInputErrorLabel.tsx", "../../../web-util/src/components/NotificationBanner.tsx", "../../../web-util/src/components/ToastBanner.tsx", "../../../web-util/src/forms/Calendar.tsx", "../../../web-util/src/forms/Caption.tsx", "../../../web-util/src/forms/InputLine.tsx", "../../../web-util/src/forms/useField.ts", "../../../web-util/src/forms/FormProvider.tsx", "../../../web-util/src/forms/DefaultForm.tsx", "../../../web-util/src/forms/forms.ts", "../../../web-util/src/forms/Group.tsx", "../../../web-util/src/forms/InputAbsoluteTime.tsx", "../../../web-util/src/forms/Dialog.tsx", "../../../web-util/src/forms/InputAmount.tsx", "../../../web-util/src/forms/InputArray.tsx", "../../../web-util/src/forms/InputChoiceHorizontal.tsx", "../../../web-util/src/forms/InputChoiceStacked.tsx", "../../../web-util/src/forms/InputFile.tsx", "../../../web-util/src/forms/InputInteger.tsx", "../../../web-util/src/forms/InputSelectMultiple.tsx", "../../../web-util/src/forms/InputSelectOne.tsx", "../../../web-util/src/forms/InputText.tsx", "../../../web-util/src/forms/InputTextArea.tsx", "../../../web-util/src/forms/InputToggle.tsx", "../../../web-util/src/forms/TimePicker.tsx", "../../../web-util/src/stories.tsx", "../../src/Application.tsx", "../../../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/core/dist/index.mjs", "../../../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/_internal/dist/index.mjs", "../../../../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-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/Routing.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", "../../src/components/exception/loading.tsx", "../../src/components/menu/index.tsx", "../../src/AdminRoutes.tsx", "../../src/paths/admin/create/index.tsx", "../../src/context/session.ts", "../../src/paths/admin/create/CreatePage.tsx", "../../src/components/exception/AsyncButton.tsx", "../../src/components/modal/index.tsx", "../../src/utils/constants.ts", "../../src/components/form/FormProvider.tsx", "../../src/components/form/Input.tsx", "../../src/components/form/useField.tsx", "../../src/hooks/async.ts", "../../src/components/instance/DefaultInstanceFormFields.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/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/cloneObject/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/formatDistance/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/isFuture/index.js", "../../src/components/form/InputDuration.tsx", "../../src/components/picker/DurationPicker.tsx", "../../src/components/form/InputGroup.tsx", "../../src/components/form/useGroupField.tsx", "../../src/components/form/InputImage.tsx", "../../src/components/form/InputLocation.tsx", "../../src/components/form/InputSelector.tsx", "../../src/components/form/InputToggle.tsx", "../../src/components/form/InputWithAddon.tsx", "../../src/utils/table.ts", "../../src/paths/admin/list/index.tsx", "../../src/components/ErrorLoadingMerchant.tsx", "../../src/hooks/instance.ts", "../../src/paths/admin/list/View.tsx", "../../src/paths/admin/list/TableActive.tsx", "../../src/paths/login/index.tsx", "../../src/components/menu/NavigationBar.tsx", "../../src/components/menu/SideBar.tsx", "../../src/components/menu/LangSelector.tsx", "../../src/i18n/strings.ts", "../../src/hooks/bank.ts", "../../src/hooks/preference.ts", "../../src/paths/instance/accounts/create/index.tsx", "../../src/paths/instance/accounts/create/CreatePage.tsx", "../../src/components/form/InputPaytoForm.tsx", "../../src/paths/instance/accounts/update/UpdatePage.tsx", "../../src/paths/instance/accounts/list/index.tsx", "../../src/paths/notfound/index.tsx", "../../src/paths/instance/accounts/list/ListPage.tsx", "../../src/paths/instance/accounts/list/Table.tsx", "../../src/paths/instance/accounts/update/index.tsx", "../../src/paths/instance/kyc/list/index.tsx", "../../src/paths/instance/kyc/list/ListPage.tsx", "../../src/paths/instance/orders/create/index.tsx", "../../src/hooks/product.ts", "../../src/hooks/webhooks.ts", "../../src/paths/instance/orders/create/CreatePage.tsx", "../../src/components/form/InputCurrency.tsx", "../../src/components/form/InputDate.tsx", "../../src/components/picker/DatePicker.tsx", "../../src/components/form/InputNumber.tsx", "../../src/components/product/InventoryProductForm.tsx", "../../src/components/form/InputSearchOnList.tsx", "../../src/components/product/NonInventoryProductForm.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/ProductList.tsx", "../../src/utils/amount.ts", "../../src/paths/instance/orders/details/index.tsx", "../../src/hooks/order.ts", "../../src/paths/instance/orders/details/DetailPage.tsx", "../../src/components/form/TextField.tsx", "../../src/paths/instance/orders/list/Table.tsx", "../../src/paths/instance/orders/details/Timeline.tsx", "../../src/paths/instance/orders/list/index.tsx", "../../src/components/form/JumpToElementById.tsx", "../../src/paths/instance/orders/list/ListPage.tsx", "../../src/paths/instance/otp_devices/create/index.tsx", "../../src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx", "../../src/components/exception/QR.tsx", "../../src/components/notifications/CreatedSuccessfully.tsx", "../../src/paths/instance/otp_devices/create/CreatePage.tsx", "../../src/paths/instance/otp_devices/list/index.tsx", "../../src/hooks/otp.ts", "../../src/paths/instance/otp_devices/list/ListPage.tsx", "../../src/paths/instance/otp_devices/list/Table.tsx", "../../src/paths/instance/otp_devices/update/index.tsx", "../../src/paths/instance/otp_devices/update/UpdatePage.tsx", "../../src/paths/instance/products/create/index.tsx", "../../src/paths/instance/products/create/CreatePage.tsx", "../../src/components/product/ProductForm.tsx", "../../src/components/form/InputStock.tsx", "../../src/paths/instance/products/list/index.tsx", "../../src/paths/instance/products/list/Table.tsx", "../../src/paths/instance/products/update/index.tsx", "../../src/paths/instance/products/update/UpdatePage.tsx", "../../src/paths/instance/templates/create/index.tsx", "../../src/paths/instance/templates/create/CreatePage.tsx", "../../src/paths/instance/templates/list/index.tsx", "../../src/hooks/templates.ts", "../../src/paths/instance/templates/list/ListPage.tsx", "../../src/paths/instance/templates/list/Table.tsx", "../../src/paths/instance/templates/qr/index.tsx", "../../src/paths/instance/templates/qr/QrPage.tsx", "../../src/paths/instance/templates/update/index.tsx", "../../src/paths/instance/templates/update/UpdatePage.tsx", "../../src/paths/instance/templates/use/index.tsx", "../../src/paths/instance/templates/use/UsePage.tsx", "../../src/paths/instance/token/index.tsx", "../../src/paths/instance/token/DetailPage.tsx", "../../src/paths/instance/transfers/create/index.tsx", "../../src/paths/instance/transfers/create/CreatePage.tsx", "../../src/paths/instance/transfers/list/index.tsx", "../../src/hooks/transfer.ts", "../../src/paths/instance/transfers/list/ListPage.tsx", "../../src/paths/instance/transfers/list/Table.tsx", "../../src/paths/instance/update/index.tsx", "../../src/paths/instance/update/UpdatePage.tsx", "../../src/paths/instance/webhooks/create/index.tsx", "../../src/paths/instance/webhooks/create/CreatePage.tsx", "../../src/paths/instance/webhooks/list/index.tsx", "../../src/paths/instance/webhooks/list/ListPage.tsx", "../../src/paths/instance/webhooks/list/Table.tsx", "../../src/paths/instance/webhooks/update/index.tsx", "../../src/paths/instance/webhooks/update/UpdatePage.tsx", "../../src/paths/settings/index.tsx", "../../src/context/settings.ts", "../../src/settings.ts", "../../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 || alphabet) 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 || alphabet) 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", "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", "/**\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", "/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\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 `_.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", "// 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 * An error response did not include an error code in the format expected by the client. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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. Details should be in the local logs. Check if you are using the latest available version or file a report with the developers.\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 in the expected format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 * The operation timed out. Trying again might help. Check the network connection.\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 protocol version given by the server does not follow the required format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 the right data format, but the content did not satisfy the protocol. Please file a bug report.\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 an option is set to an invalid value. Check the logs and fix the local 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 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. Please file a bug report.\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 token used by the client to authorize the request does not grant the required permissions for the request. Check the requirements and obtain a suitable authorization token to proceed.\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 GENERIC_TOKEN_PERMISSION_INSUFFICIENT = 16,\n\n\n /**\n * The HTTP method used is invalid for this endpoint. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you used the correct URL and/or file a report with the developers of the client software.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 were malformed and caused the server to not be able to handle the request. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check that you are using the correct syntax as of RFC 8905 and/or that you entered the bank account number correctly.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 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 body in the request could not be decompressed by the server. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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_COMPRESSION_INVALID = 28,\n\n\n /**\n * The currency involved in the operation is not acceptable for this server. Check your configuration and make sure the currency specified for a given service provider is one of the currencies supported by that provider.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\n * Returned with an HTTP status code of #MHD_HTTP_CONTENT_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 refused the request due to lack of proper 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 GENERIC_UNAUTHORIZED = 40,\n\n\n /**\n * The service refused the request as the given authorization token is unknown.\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 GENERIC_TOKEN_UNKNOWN = 41,\n\n\n /**\n * The service refused the request as the given authorization token expired.\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 GENERIC_TOKEN_EXPIRED = 42,\n\n\n /**\n * The service refused the request as the given authorization token is malformed.\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 GENERIC_TOKEN_MALFORMED = 43,\n\n\n /**\n * The service refused the request due to lack of proper rights on the resource.\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 GENERIC_FORBIDDEN = 44,\n\n\n /**\n * The service failed initialize its connection to the database. The system administrator should check that the service has permissions to access the database and that the database is running.\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. The system administrator should check that the database is running.\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. The system administrator should check that the database is running and review the service logs.\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. The system administrator should check that the database is running and review the service logs.\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 unrecoverable error trying to commit a transaction to the database. The system administrator should check that the database is running and review the service logs.\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; it should only happen if some client maliciously tries to create conflicting concurrent transactions. It could also be a sign of a missing index. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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). Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. The system administrator should check if the resource files are installed in the correct location and are readable to the 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 GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply. The system administrator should investigate the logs and check if the templates are well-formed.\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 coin is not known to the exchange (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_GENERIC_COIN_UNKNOWN = 1019,\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 failed to start a KYC attribute conversion helper process. It is likely configured incorrectly.\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_KYC_CONVERTER_FAILED = 1037,\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 client provided an unknown commitment for an age-withdraw 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 EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN = 1161,\n\n\n /**\n * The total sum of amounts from the denominations did overflow.\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_AGE_WITHDRAW_AMOUNT_OVERFLOW = 1162,\n\n\n /**\n * The total sum of value and fees from the denominations differs from the committed amount with fees.\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_AGE_WITHDRAW_AMOUNT_INCORRECT = 1163,\n\n\n /**\n * The original commitment differs from the calculated hash\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_AGE_WITHDRAW_REVEAL_INVALID_HASH = 1164,\n\n\n /**\n * The maximum age in the commitment is too large for the reserve\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_MAXIMUM_AGE_TOO_LARGE = 1165,\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 coin 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_COIN_HISTORY_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_RESERVE_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 * Withdrawal from the reserve requires age restriction to be set.\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_AGE_RESTRICTION_REQUIRED = 1681,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys or the helpers had no denominations (properly) configured.\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_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_BAD_GATEWAY (502).\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 * TOTP key 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_TOTP_KEY_INVALID = 1980,\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 reward ID is unknown. This could happen if the reward 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_REWARD_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 backend could not find the OTP device(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_OTP_DEVICE_UNKNOWN = 2021,\n\n\n /**\n * The account 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_ACCOUNT_UNKNOWN = 2022,\n\n\n /**\n * The wire hash 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 MERCHANT_GENERIC_H_WIRE_MALFORMED = 2023,\n\n\n /**\n * The currency specified in the operation does not work with the current state of the given resource.\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_GENERIC_CURRENCY_MISMATCH = 2024,\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_BAD_REQUEST (400).\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_BAD_REQUEST (400).\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 exchange does not support the selected bank account of the merchant. Likely the merchant had stale data on the bank accounts of the exchange and thus selected an inappropriate exchange when making the offer.\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_WIRE_METHOD_UNSUPPORTED = 2175,\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 * A token family with this ID but conflicting data 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_POST_TOKEN_FAMILY_CONFLICT = 2225,\n\n\n /**\n * The backend is unaware of a token family with the given ID.\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_PATCH_TOKEN_FAMILY_NOT_FOUND = 2226,\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 are waiting for the exchange to provide us with key material before checking the wire transfer.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS = 2258,\n\n\n /**\n * We are waiting for the exchange to provide us with the list of aggregated transactions.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST = 2259,\n\n\n /**\n * The endpoint indicated in the wire transfer does not belong to a GNU Taler exchange.\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_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE = 2260,\n\n\n /**\n * The exchange indicated in the wire transfer claims to know nothing about the wire transfer.\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_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND = 2261,\n\n\n /**\n * The interaction with the exchange is delayed due to rate limiting.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED = 2262,\n\n\n /**\n * We experienced a transient failure in our interaction with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE = 2263,\n\n\n /**\n * The response from the exchange was unacceptable and should be reviewed with an auditor.\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_EXCHANGE_TRANSFERS_HARD_FAILURE = 2264,\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_REWARD_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_REWARD_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_REWARD_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The reward 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_REWARD_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_REWARD_PICKUP_AMOUNT_EXCEEDS_REWARD_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_REWARD_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The merchant instance has no active bank accounts configured. However, at least one bank account must be available to create 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 merchant backend failed to obtain the current local time.\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; likely 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 * A conflicting order (sharing the same order identifier) already exists at this merchant backend instance.\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 order creation request is invalid because the given 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 order creation request is invalid because the delivery date given 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 order creation request is invalid because a wire deadline of \"never\" 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_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The order creation request is invalid because the given payment deadline 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 order creation request is invalid because the given refund deadline 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 * The backend does not trust any exchange that would allow funds to be wired to any bank account of this instance using the wire method specified with the order. Note that right now, we do not support the use of exchange bank accounts with mandatory currency conversion.\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_NO_EXCHANGES_FOR_WIRE_METHOD = 2509,\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. Deletion may work later after the offer has expired if it remains unpaid.\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 exceeds the original price paid by the customer.\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 * Only paid orders can be refunded, and the frontend specified an unpaid order to issue a refund for.\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 ever 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 amount transferred differs between what was submitted and what the exchange claimed.\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_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS = 2563,\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 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 MERCHANT_PRIVATE_ACCOUNT_DELETE_UNKNOWN_ACCOUNT = 2626,\n\n\n /**\n * The bank account specified in the request already exists at the merchant.\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_ACCOUNT_EXISTS = 2627,\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 requested exchange does not allow rewards.\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_REWARDS_NOT_ALLOWED = 2701,\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 rewards 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_REWARD_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the rewards 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_REWARD_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the reward, and it was configured for rewardping. However, the funds remaining are insufficient to cover the reward, 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_REWARD_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the reward.\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_REWARD_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 * The OTP device 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_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS = 2851,\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 * 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 client tried to register a new account under a reserved username (like 'admin' for example).\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_RESERVED_USERNAME_CONFLICT = 5120,\n\n\n /**\n * The client tried to register a new account with an username 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 BANK_REGISTER_USERNAME_REUSE = 5121,\n\n\n /**\n * The client tried to register a new account with a payto:// URI 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 BANK_REGISTER_PAYTO_URI_REUSE = 5122,\n\n\n /**\n * The client tried to delete an account with a non null 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 BANK_ACCOUNT_BALANCE_NOT_ZERO = 5123,\n\n\n /**\n * The client tried to create a transaction or an operation that credit an unknown account.\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_UNKNOWN_CREDITOR = 5124,\n\n\n /**\n * The client tried to create a transaction or an operation that debit an unknown account.\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_UNKNOWN_DEBTOR = 5125,\n\n\n /**\n * The client tried to perform an action prohibited for exchange accounts.\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_ACCOUNT_IS_EXCHANGE = 5126,\n\n\n /**\n * The client tried to perform an action reserved for exchange accounts.\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_ACCOUNT_IS_NOT_EXCHANGE = 5127,\n\n\n /**\n * Received currency conversion is wrong.\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_BAD_CONVERSION = 5128,\n\n\n /**\n * The account referenced in this operation is missing tan info for the chosen channel.\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_MISSING_TAN_INFO = 5129,\n\n\n /**\n * The client attempted to confirm a transaction with incomplete info.\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_INCOMPLETE = 5130,\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 BANK_TAN_RATE_LIMITED = 5131,\n\n\n /**\n * This TAN channel is not supported.\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 BANK_TAN_CHANNEL_NOT_SUPPORTED = 5132,\n\n\n /**\n * Failed to send TAN using the helper script. Either script is not found, or script timeout, or script 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 BANK_TAN_CHANNEL_SCRIPT_FAILED = 5133,\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 BANK_TAN_CHALLENGE_FAILED = 5134,\n\n\n /**\n * A non-admin user has tried to change their legal 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_NON_ADMIN_PATCH_LEGAL_NAME = 5135,\n\n\n /**\n * A non-admin user has tried to change their debt limit.\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_NON_ADMIN_PATCH_DEBT_LIMIT = 5136,\n\n\n /**\n * A non-admin user has tried to change their password whihout providing the current 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 BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD = 5137,\n\n\n /**\n * Provided old password does not match current password.\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_PATCH_BAD_OLD_PASSWORD = 5138,\n\n\n /**\n * An admin user has tried to become an 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 BANK_PATCH_ADMIN_EXCHANGE = 5139,\n\n\n /**\n * A non-admin user has tried to change their cashout account.\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_NON_ADMIN_PATCH_CASHOUT = 5140,\n\n\n /**\n * A non-admin user has tried to change their contact info.\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_NON_ADMIN_PATCH_CONTACT = 5141,\n\n\n /**\n * The client tried to create a transaction that credit the admin account.\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_ADMIN_CREDITOR = 5142,\n\n\n /**\n * The referenced challenge 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_CHALLENGE_NOT_FOUND = 5143,\n\n\n /**\n * The referenced challenge has expired.\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_TAN_CHALLENGE_EXPIRED = 5144,\n\n\n /**\n * A non-admin user has tried to create an account with 2fa.\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_NON_ADMIN_SET_TAN_CHANNEL = 5145,\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_CONTENT_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_CONTENT_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 a reward) 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_REWARD_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 * The exchange's self-reported base URL does not match the one that the wallet is using.\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_BASE_URL_MISMATCH = 7030,\n\n\n /**\n * The order has already been paid 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_PAID = 7031,\n\n\n /**\n * An exchange that is required for some request is currently 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_EXCHANGE_UNAVAILABLE = 7032,\n\n\n /**\n * An exchange entry is still used by the exchange, thus it can't be deleted without purging.\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_ENTRY_USED = 7033,\n\n\n /**\n * The wallet database is unavailable and the wallet thus is not operational.\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_DB_UNAVAILABLE = 7034,\n\n\n /**\n * A taler:// URI is malformed and 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_TALER_URI_MALFORMED = 7035,\n\n\n /**\n * A wallet-core request was cancelled and thus can't provide a 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_CORE_REQUEST_CANCELLED = 7036,\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_CONTENT_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 * The Donau failed to perform the operation as it could not find the private keys. This is a problem with the Donau 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 DONAU_GENERIC_KEYS_MISSING = 8607,\n\n\n /**\n * The signature of the charity key 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 DONAU_CHARITY_SIGNATURE_INVALID = 8608,\n\n\n /**\n * The charity 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 DONAU_CHARITY_NOT_FOUND = 8609,\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 * The client is unknown or unauthorized.\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 CHALLENGER_GENERIC_CLIENT_UNKNOWN = 9750,\n\n\n /**\n * The client is not authorized to use the given redirect URI.\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 CHALLENGER_GENERIC_CLIENT_FORBIDDEN_BAD_REDIRECT_URI = 9751,\n\n\n /**\n * The service failed to execute its helper process to send the challenge.\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 CHALLENGER_HELPER_EXEC_FAILED = 9752,\n\n\n /**\n * The grant is unknown to the service (it could also have 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 CHALLENGER_GRANT_UNKNOWN = 9753,\n\n\n /**\n * The code given is not even well-formed.\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 CHALLENGER_CLIENT_FORBIDDEN_BAD_CODE = 9754,\n\n\n /**\n * The service is not aware of the referenced validation process.\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 CHALLENGER_GENERIC_VALIDATION_UNKNOWN = 9755,\n\n\n /**\n * The code given 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 CHALLENGER_CLIENT_FORBIDDEN_INVALID_CODE = 9756,\n\n\n /**\n * Too many attempts have been made, validation is temporarily disabled for this address.\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 CHALLENGER_TOO_MANY_ATTEMPTS = 9757,\n\n\n /**\n * The PIN code provided is incorrect.\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 CHALLENGER_INVALID_PIN = 9758,\n\n\n /**\n * The token cannot be valid as no address was ever provided by the client.\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 CHALLENGER_MISSING_ADDRESS = 9759,\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", "/*\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) 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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n renderContext,\n} from \"./codec.js\";\nimport { CurrencySpecification } from \"./index.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 * Separator character between integer and fractional\n */\nexport const FRAC_SEPARATOR = \".\";\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\n/**\n * Immutable amount.\n */\nexport class Amount {\n static from(a: AmountLike): Amount {\n return new Amount(Amounts.parseOrThrow(a), 0);\n }\n\n static zeroOfCurrency(currency: string): Amount {\n return new Amount(Amounts.zeroOfCurrency(currency), 0);\n }\n\n add(...a: AmountLike[]): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.add(this.val, ...a);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n mult(n: number): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.mult(this, n);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n toJson(): AmountJson {\n return { ...this.val };\n }\n\n toString(): AmountString {\n return Amounts.stringify(this.val);\n }\n\n private constructor(\n private val: AmountJson,\n private saturated: number,\n ) {}\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 function codecForAmountString(): Codec<AmountString> {\n return {\n decode(x: any, c?: Context): AmountString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (Amounts.parse(x) === undefined) {\n throw new DecodingError(\n `invalid amount at ${renderContext(c)} got \"${x}\"`,\n );\n }\n return x as AmountString;\n },\n };\n}\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 = string | AmountString | AmountJson | Amount;\n\nexport interface DivmodResult {\n quotient: number;\n remainder: AmountJson;\n}\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 if (amt instanceof Amount) {\n return amt.toJson();\n }\n return amt;\n }\n\n static divmod(a1: AmountLike, a2: AmountLike): DivmodResult {\n const am1 = Amounts.jsonifyAmount(a1);\n const am2 = Amounts.jsonifyAmount(a2);\n if (am1.currency != am2.currency) {\n throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);\n }\n\n const x1 =\n BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);\n const x2 =\n BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);\n\n const quotient = x1 / x2;\n const remainderScaled = x1 % x2;\n\n return {\n quotient: Number(quotient),\n remainder: {\n currency: am1.currency,\n value: Number(remainderScaled / BigInt(amountFractionalBase)),\n fraction: Number(remainderScaled % BigInt(amountFractionalBase)),\n },\n };\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 * Check whether a string is a valid currency for a Taler amount.\n */\n static isCurrency(s: string): boolean {\n return /^[a-zA-Z]{1,11}$/.test(s);\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n *\n * Currency name size limit is 11 of ASCII letters\n * Fraction size limit is 8\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z]{1,11}):([0-9]+)([.][0-9]{1,8})?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || FRAC_SEPARATOR + \"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 (s instanceof Amount) {\n return s.toJson();\n }\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 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 multiplied 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): AmountString {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}` as AmountString;\n }\n\n static amountHasSameCurrency(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 isSameCurrency(curr1: string, curr2: string): boolean {\n return curr1.toLowerCase() === curr2.toLowerCase();\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 + FRAC_SEPARATOR;\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 static stringifyValueWithSpec(\n value: AmountJson,\n spec: CurrencySpecification,\n ): { currency: string; normal: string; small?: string } {\n const strValue = Amounts.stringifyValue(value);\n const pos = strValue.indexOf(FRAC_SEPARATOR);\n const originalPosition = pos < 0 ? strValue.length : pos;\n\n let currency = value.currency;\n const names = Object.keys(spec.alt_unit_names);\n let FRAC_POS_NEW_POSITION = originalPosition;\n //find symbol\n //FIXME: this should be based on a cache to speed up\n if (names.length > 0) {\n let unitIndex: string = \"0\"; //default entry by DD51\n names.forEach((index) => {\n const i = Number.parseInt(index, 10);\n if (Number.isNaN(i)) return; //skip\n if (originalPosition - i <= 0) return; //too big\n if (originalPosition - i < FRAC_POS_NEW_POSITION) {\n FRAC_POS_NEW_POSITION = originalPosition - i;\n unitIndex = index;\n }\n });\n currency = spec.alt_unit_names[unitIndex];\n }\n\n if (originalPosition === FRAC_POS_NEW_POSITION) {\n const { normal, small } = splitNormalAndSmall(\n strValue,\n originalPosition,\n spec,\n );\n return { currency, normal, small };\n }\n\n const intPart = strValue.substring(0, originalPosition);\n const fracPArt = strValue.substring(originalPosition + 1);\n //indexSize is always smaller than originalPosition\n const newValue =\n intPart.substring(0, FRAC_POS_NEW_POSITION) +\n FRAC_SEPARATOR +\n intPart.substring(FRAC_POS_NEW_POSITION) +\n fracPArt;\n const { normal, small } = splitNormalAndSmall(\n newValue,\n FRAC_POS_NEW_POSITION,\n spec,\n );\n return { currency, normal, small };\n }\n}\n\nfunction splitNormalAndSmall(\n decimal: string,\n fracSeparatorIndex: number,\n spec: CurrencySpecification,\n): { normal: string; small?: string } {\n let normal: string;\n let small: string | undefined;\n if (\n decimal.length - fracSeparatorIndex - 1 >\n spec.num_fractional_normal_digits\n ) {\n const limit = fracSeparatorIndex + spec.num_fractional_normal_digits + 1;\n normal = decimal.substring(0, limit);\n small = decimal.substring(limit);\n } else {\n normal = decimal;\n small = undefined;\n }\n return { normal, small };\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 //Include URL type for \"url\" and \"base\" params.\n constructor(url: string | URL, base?: string | URL) {\n let parsedBase = null;\n if (base !== undefined) {\n if (base instanceof URL) {\n base = base.href;\n }\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n if (url instanceof URL) {\n url = url.href;\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) 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\nlet globalLogLevel = LogLevel.Info;\nconst byTagLogLevel: Record<string, LogLevel> = {};\n\nlet nativeLogging: boolean = false;\n\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString\nError.prototype.toString = function () {\n if (\n this === null ||\n (typeof this !== \"object\" && typeof this !== \"function\")\n ) {\n throw new TypeError();\n }\n let name = this.name;\n name = name === undefined ? \"Error\" : `${name}`;\n let msg = this.message;\n msg = msg === undefined ? \"\" : `${msg}`;\n\n let cause = \"\";\n if (\"cause\" in this) {\n cause = `\\n Caused by: ${this.cause}`;\n }\n return `${name}: ${msg}${cause}`;\n};\n\nexport function getGlobalLogLevel(): string {\n return globalLogLevel;\n}\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nexport function enableNativeLogging() {\n nativeLogging = true;\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 writeNativeLog(\n message: any,\n tag: string,\n level: number,\n args: any[],\n): void {\n const logFn = (globalThis as any).__nativeLog;\n if (logFn) {\n let m: string;\n if (args.length == 0) {\n m = message;\n } else {\n m = message + \" \" + args.toString();\n }\n logFn(level, tag, message);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 2, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 3, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 4, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 1, args);\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", "/*\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\nimport { j2s } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\nconst logger = new Logger(\"codec.ts\");\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 * Return a codec for a value that must be a string.\n */\nexport function codecForStringURL(shouldEndWithSlash?: boolean): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return x;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\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 if (logger.shouldLogTrace()) {\n logger.trace(`offending value: ${j2s(x)}`);\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\n\nconst x = codecForEither(codecForString(), codecForNumber());\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 reuse 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 * as argon2 from \"./argon2.js\";\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\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\nimport { AmountLike, Amounts } from \"./amounts.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 hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n ): 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 async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n if (tart) {\n return tart.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\n }\n return await argon2.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\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 global/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 public 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 public 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\n/**\n * This makes the assumption that the uint64 fits a float,\n * which should be true for all Taler protocol messages.\n */\nexport function bufferForUint64(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(8);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n if (n < 0 || !Number.isInteger(n)) {\n throw Error(\"non-negative integer expected\");\n }\n dv.setBigUint64(0, BigInt(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 MERCHANT_REFUND = 1102,\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 WALLET_PURSE_DELETE = 1220,\n WALLET_COIN_HISTORY = 1209,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n TALER_SIGNATURE_AML_DECISION = 1350,\n TALER_SIGNATURE_AML_QUERY = 1351,\n TALER_SIGNATURE_MASTER_AML_KEY = 1017,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport 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 const PublishedAgeRestrictionBaseKey: Edx25519PublicKey = decodeCrock(\n \"CH0VKFDZ2GWRWHQBBGEK9MWV5YDQVJ0RXEE0KYT3NMB69F0R96TG\",\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 < numPrivs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-commitment\"),\n salt: bufferForUint32(i),\n });\n\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n privs.push(priv);\n }\n\n for (let i = numPrivs; i < numPubs; i++) {\n const deriveSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-factor\"),\n salt: bufferForUint32(i),\n });\n const pub = await Edx25519.publicKeyDerive(\n PublishedAgeRestrictionBaseKey,\n deriveSeed,\n );\n pubs.push(pub);\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!\nexport type 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\nexport async 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\nexport async 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 nonce: EncryptionNonce,\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(nonce, key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n nonce: EncryptionNonce,\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(nonce, 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\nexport function amountToBuffer(amount: AmountLike): Uint8Array {\n const amountJ = Amounts.jsonifyAmount(amount);\n const buffer = new ArrayBuffer(8 + 4 + 12);\n const dvbuf = new DataView(buffer);\n const u8buf = new Uint8Array(buffer);\n const curr = stringToBytes(amountJ.currency);\n if (typeof dvbuf.setBigUint64 !== \"undefined\") {\n dvbuf.setBigUint64(0, BigInt(amountJ.value));\n } else {\n const arr = bigint(amountJ.value).toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n dvbuf.setUint8(offset++, arr[i]);\n }\n }\n dvbuf.setUint32(8, amountJ.fraction);\n u8buf.set(curr, 8 + 4);\n\n return u8buf;\n}\n\nexport function timestampRoundedToBuffer(\n ts: TalerProtocolTimestamp,\n): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.t_s) * BigInt(1000 * 1000);\n v.setBigUint64(0, s);\n } else {\n const s =\n ts.t_s === \"never\" ? bigint.zero : bigint(ts.t_s).multiply(1000 * 1000);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n\nexport function durationRoundedToBuffer(ts: TalerProtocolDuration): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.d_us);\n v.setBigUint64(0, s);\n } else {\n const s = ts.d_us === \"forever\" ? bigint.zero : bigint(ts.d_us);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\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, Context, renderContext } from \"./codec.js\";\n\ndeclare const flavor_AbsoluteTime: unique symbol;\ndeclare const flavor_TalerProtocolTimestamp: unique symbol;\ndeclare const flavor_TalerPreciseTimestamp: unique symbol;\n\nconst opaque_AbsoluteTime: unique symbol = Symbol(\"opaque_AbsoluteTime\");\n\n// FIXME: Make this opaque!\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n\n readonly _flavor?: typeof flavor_AbsoluteTime;\n\n // Make the type opaque, we only want our constructors\n // to able to create an AbsoluteTime value.\n [opaque_AbsoluteTime]: true;\n}\n\nexport interface TalerProtocolTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n readonly _flavor?: typeof flavor_TalerProtocolTimestamp;\n}\n\n/**\n * Precise timestamp, typically used in the wallet-core\n * API but not in other Taler APIs so far.\n */\nexport interface TalerPreciseTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n /**\n * Optional microsecond offset (non-negative integer).\n */\n readonly off_us?: number;\n\n readonly _flavor?: typeof flavor_TalerPreciseTimestamp;\n}\n\nexport namespace TalerPreciseTimestamp {\n export function now(): TalerPreciseTimestamp {\n const absNow = AbsoluteTime.now();\n return AbsoluteTime.toPreciseTimestamp(absNow);\n }\n\n export function round(t: TalerPreciseTimestamp): TalerProtocolTimestamp {\n return {\n t_s: t.t_s,\n };\n }\n\n export function fromSeconds(s: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(s),\n off_us: Math.floor((s - Math.floor(s)) / 1000 / 1000),\n };\n }\n\n export function fromMilliseconds(ms: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(ms / 1000),\n off_us: Math.floor((ms - Math.floor(ms / 1000) * 1000) * 1000),\n };\n }\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toProtocolTimestamp(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 isNever(t: TalerProtocolTimestamp): boolean {\n return t.t_s === \"never\";\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\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\n/**\n * Timeshift in milliseconds.\n */\nlet timeshift = 0;\n\n/**\n * Set timetravel offset in milliseconds.\n *\n * Use carefully and only for testing.\n */\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function toMilliseconds(d: Duration): number {\n if (d.d_ms === \"forever\") {\n return Number.MAX_VALUE;\n }\n return d.d_ms;\n }\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 /**\n * Compare two durations. Returns 0 when equal, -1 when a < b\n * and +1 when a > b.\n */\n export function cmp(d1: Duration, d2: Duration): 1 | 0 | -1 {\n if (d1.d_ms === \"forever\") {\n if (d2.d_ms === \"forever\") {\n return 0;\n }\n return 1;\n }\n if (d2.d_ms === \"forever\") {\n return -1;\n }\n if (d1.d_ms == d2.d_ms) {\n return 0;\n }\n if (d1.d_ms > d2.d_ms) {\n return 1;\n }\n return -1;\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 function fromSpec(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\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: Math.floor(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 fromMilliseconds(ms: number): Duration {\n return {\n d_ms: ms,\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 getStampMsNow(): number {\n return new Date().getTime();\n }\n\n export function getStampMsNever(): number {\n return Number.MAX_SAFE_INTEGER;\n }\n\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromMilliseconds(ms: number): AbsoluteTime {\n return {\n t_ms: ms,\n [opaque_AbsoluteTime]: true,\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, [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\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 isNever(t: AbsoluteTime): boolean {\n return t.t_ms === \"never\";\n }\n\n export function fromProtocolTimestamp(\n t: TalerProtocolTimestamp,\n ): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return {\n t_ms: t.t_s * 1000,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromStampMs(stampMs: number): AbsoluteTime {\n return {\n t_ms: stampMs,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromPreciseTimestamp(t: TalerPreciseTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n const offsetUs = t.off_us ?? 0;\n return {\n t_ms: t.t_s * 1000 + Math.floor(offsetUs / 1000),\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function toStampMs(at: AbsoluteTime): number {\n if (at.t_ms === \"never\") {\n return Number.MAX_SAFE_INTEGER;\n }\n return at.t_ms;\n }\n\n export function toPreciseTimestamp(at: AbsoluteTime): TalerPreciseTimestamp {\n if (at.t_ms == \"never\") {\n return {\n t_s: \"never\",\n };\n }\n const t_s = Math.floor(at.t_ms / 1000);\n const off_us = Math.floor(1000 * (at.t_ms - t_s * 1000));\n return {\n t_s,\n off_us,\n };\n }\n\n export function toProtocolTimestamp(\n at: AbsoluteTime,\n ): 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\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: t1.t_ms + d.d_ms, [opaque_AbsoluteTime]: true };\n }\n\n /**\n * Get the remaining duration until {@param t1}.\n *\n * If {@param t1} already happened, the remaining duration\n * is zero.\n */\n export function remaining(t1: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return Duration.getForever();\n }\n const stampNow = now();\n if (stampNow.t_ms === \"never\") {\n throw Error(\"invariant violated\");\n }\n return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_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\", [opaque_AbsoluteTime]: true };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms), [opaque_AbsoluteTime]: true };\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 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 if (x === undefined) {\n throw Error(`got undefined and expected absolute time at ${renderContext(c)}`);\n }\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms, [opaque_AbsoluteTime]: true };\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 if (x === undefined) {\n throw Error(`got undefined and expected timestamp at ${renderContext(c)}`);\n }\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 protocol timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForPreciseTimestamp: Codec<TalerPreciseTimestamp> = {\n decode(x: any, c?: Context): TalerPreciseTimestamp {\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 throw Error(`expected precise 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 { Amounts, codecForAmountString } from \"./amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecForStringURL,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport {\n CurrencySpecification,\n codecForCurrencySpecificiation,\n codecForEither,\n codecForProduct,\n} from \"./index.js\";\nimport { Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForDuration,\n codecForTimestamp,\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 // The exchange's base URL.\n url: string;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKeyString;\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: EddsaPublicKeyString;\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 // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\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?: InternationalizedString;\n\n // The number of units of the product to deliver to the customer.\n quantity?: Integer;\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?: ImageDataUrl;\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 // The hash of the merchant instance's wire details.\n h_wire: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: TalerProtocolDuration;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: InternationalizedString;\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: string;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: TalerProtocolTimestamp;\n\n // More info about the merchant, see below.\n merchant: MerchantInfo;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: string;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: TalerProtocolTimestamp;\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: ExchangeHandle[];\n\n // List of products that are part of the purchase (see Product).\n products?: Product[];\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: TalerProtocolTimestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // Time when this contract was generated.\n timestamp: TalerProtocolTimestamp;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional, but either fulfillment_url\n // or fulfillment_message must be specified in every\n // contract terms.\n //\n // If a non-unique fulfillment URL is used, a customer can only\n // buy the order once and will be redirected to a previous purchase\n // when trying to buy an order with the same fulfillment URL a second\n // time. This is useful for digital goods that a customer only needs\n // to buy once but should be able to repeatedly download.\n //\n // For orders where the customer is expected to be able to make\n // repeated purchases (for equivalent goods), the fulfillment URL\n // should be made unique for every order. The easiest way to do\n // this is to include a unique order ID in the fulfillment URL.\n //\n // When POSTing to the merchant, the placeholder text \"${ORDER_ID}\"\n // is be replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL). Note that this placeholder can only be used once.\n // Front-ends may use other means to generate a unique fulfillment URL.\n fulfillment_url?: string;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: InternationalizedString;\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: string;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n // Must really be an Object (not a string, integer, float or array).\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\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 * 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 * Canonical, public base URL of the exchange.\n */\n base_url: string;\n\n currency: string;\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 accounts: ExchangeWireAccount[];\n\n wire_fees: { [methodName: string]: WireFeesJson[] };\n\n denominations: DenomGroup[];\n}\n\nexport type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n\nexport interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n\n // XOR of all the SHA-512 hash values of the denominations' public keys\n // in this group. Note that for hashing, the binary format of the\n // public keys is used, and not their base32 encoding.\n hash: HashCodeString;\n}\n\nexport interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignatureString;\n\n // When does the denomination key become valid?\n stamp_start: TalerProtocolTimestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: TalerProtocolTimestamp;\n\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n}\n\nexport type RsaPublicKeySring = string;\nexport type AgeMask = number;\nexport type ImageDataUrl = string;\n\n/**\n * 32-byte value representing a point on Curve25519.\n */\nexport type Cs25519Point = string;\n\nexport interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\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\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 status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\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 RewardPickupGetResponse {\n reward_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 pos_confirmation?: 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 // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected or pending.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Deprecated field use status instead\n // The transfer has been confirmed and registered by the bank.\n // Does not guarantee that the funds have arrived at the exchange already.\n transfer_done: boolean;\n}\n\nexport const codeForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\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\ndeclare const __amount_str: unique symbol;\nexport type AmountString = string & { [__amount_str]: true };\n// export 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 codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\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\", codecForAmountString())\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\", codecForAmountString())\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\", codecForAmountString())\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 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\n// FIXME: Validate properly!\nexport const codecForNgDenominations: Codec<DenomGroup> = codecForAny();\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\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 .property(\"accounts\", codecForList(codecForExchangeWireAccount()))\n .property(\"wire_fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .property(\"denominations\", codecForList(codecForNgDenominations))\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 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(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\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 codecForRewardPickupGetResponse =\n (): Codec<RewardPickupGetResponse> =>\n buildCodecForObject<RewardPickupGetResponse>()\n .property(\"reward_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 codecForExchangeWithdrawBatchResponse =\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 .property(\"pos_confirmation\", codecOptional(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 codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\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 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 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\ninterface DepositConfirmationSignature {\n // The EdDSA signature of `TALER_DepositConfirmationPS` using a current\n // `signing key of the exchange <sign-key-priv>` 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: EddsaSignatureString;\n}\n\nexport interface BatchDepositSuccess {\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 // `Public EdDSA key of the exchange <sign-key-pub>` 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: EddsaPublicKeyString;\n\n // Array of deposit confirmation signatures from the exchange\n // Entries must be in the same order the coins were given\n // in the batch deposit request.\n exchange_sig: EddsaSignatureString;\n}\n\nexport const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> =>\n buildCodecForObject<BatchDepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"BatchDepositSuccess\");\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\n/**\n * @deprecated batch deposit should be used.\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 type WireSalt = string;\n\nexport interface ExchangeBatchDepositRequest {\n // The merchant's account details.\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: WireSalt;\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 // The list of coins that are going to be deposited with this Request.\n coins: BatchDepositRequestCoin[];\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 <merchant-pub>`, so that the client can identify the\n // merchant for refund requests.\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 batch-deposit.\n // This might be a refund, auction or escrow policy.\n policy?: any;\n}\n\nexport interface BatchDepositRequestCoin {\n // EdDSA public key of the coin being deposited.\n coin_pub: EddsaPublicKeyString;\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 // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: Amounts;\n\n // Signature over `TALER_DepositRequestPS`, made by the customer with the\n // `coin's private key <coin-priv>`.\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\nexport interface ExchangeRefundRequest {\n // Amount to be refunded, can be a fraction of the\n // coin's total deposit value (including deposit fee);\n // must be larger than the refund fee.\n refund_amount: AmountString;\n\n // SHA-512 hash of the contact of the merchant with the customer.\n h_contract_terms: HashCodeString;\n\n // 64-bit transaction id of the refund transaction between merchant and customer.\n rtransaction_id: number;\n\n // EdDSA public key of the merchant.\n merchant_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the merchant over a\n // TALER_RefundRequestPS with purpose\n // TALER_SIGNATURE_MERCHANT_REFUND\n // affirming the refund.\n merchant_sig: EddsaPublicKeyString;\n}\n\nexport interface ExchangeRefundSuccessResponse {\n // The EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND over\n // a TALER_RecoupRefreshConfirmationPS\n // 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\nexport const codecForExchangeRefundSuccessResponse =\n (): Codec<ExchangeRefundSuccessResponse> =>\n buildCodecForObject<ExchangeRefundSuccessResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .build(\"ExchangeRefundSuccessResponse\");\n\nexport type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n\nexport interface DenyAllAccountRestriction {\n type: \"deny\";\n}\n\n// Accounts interacting with this type of account\n// restriction must have a payto://-URI matching\n// the given regex.\nexport interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: InternationalizedString;\n}\n\nexport interface ExchangeWireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: string;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignatureString;\n\n // Display label wallets should use to show this\n // bank account.\n // Since protocol **v19**.\n bank_label?: string;\n priority?: number;\n}\n\nexport const codecForExchangeWireAccount = (): Codec<ExchangeWireAccount> =>\n buildCodecForObject<ExchangeWireAccount>()\n .property(\"conversion_url\", codecOptional(codecForStringURL()))\n .property(\"credit_restrictions\", codecForList(codecForAny()))\n .property(\"debit_restrictions\", codecForList(codecForAny()))\n .property(\"master_sig\", codecForString())\n .property(\"payto_uri\", codecForString())\n .property(\"bank_label\", codecOptional(codecForString()))\n .property(\"priority\", codecOptional(codecForNumber()))\n .build(\"WireAccount\");\n\nexport type Integer = number;\n\nexport interface BankConversionInfoConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n regional_currency: string;\n\n fiat_currency: string;\n\n // Currency used by this bank.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency_specification: CurrencySpecification;\n}\n\nexport const codecForBankConversionInfoConfig =\n (): Codec<BankConversionInfoConfig> =>\n buildCodecForObject<BankConversionInfoConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"fiat_currency\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .build(\"BankConversionInfoConfig\");\n\nexport interface DenominationExpiredMessage {\n // Taler error code. Note that beyond\n // expiration this message format is also\n // used if the key is not yet valid, or\n // has been revoked.\n code: number;\n\n // Signature by the exchange over a\n // TALER_DenominationExpiredAffirmationPS.\n // Must have purpose TALER_SIGNATURE_EXCHANGE_AFFIRM_DENOM_EXPIRED.\n exchange_sig: EddsaSignatureString;\n\n // Public key of the exchange used to create\n // the 'exchange_sig.\n exchange_pub: EddsaPublicKeyString;\n\n // Hash of the denomination public key that is unknown.\n h_denom_pub: HashCodeString;\n\n // When was the signature created.\n timestamp: TalerProtocolTimestamp;\n\n // What kind of operation was requested that now\n // failed?\n oper: string;\n}\n\nexport const codecForDenominationExpiredMessage = () =>\n buildCodecForObject<DenominationExpiredMessage>()\n .property(\"code\", codecForNumber())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"oper\", codecForString())\n .build(\"DenominationExpiredMessage\");\n\nexport interface CoinHistoryResponse {\n // Current balance of the coin.\n balance: AmountString;\n\n // Hash of the coin's denomination.\n h_denom_pub: HashCodeString;\n\n // Transaction history for the coin.\n history: any[];\n}\n\nexport const codecForCoinHistoryResponse = () =>\n buildCodecForObject<CoinHistoryResponse>()\n .property(\"balance\", codecForAmountString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"history\", codecForAny())\n .build(\"CoinHistoryResponse\");\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 { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { URLSearchParams } from \"./url.js\";\n\nexport type PaytoUri =\n | PaytoUriUnknown\n | PaytoUriIBAN\n | PaytoUriTalerBank\n | PaytoUriBitcoin;\n\ndeclare const __payto_str: unique symbol;\nexport type PaytoString = string & { [__payto_str]: true };\n\nexport function codecForPaytoString(): Codec<PaytoString> {\n return {\n decode(x: any, c?: Context): PaytoString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (!x.startsWith(paytoPfx)) {\n throw new DecodingError(\n `expected start with payto at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as PaytoString;\n },\n };\n}\n\nexport interface PaytoUriGeneric {\n targetType: PaytoType | 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 address: string;\n segwitAddrs: Array<string>;\n}\n\nconst paytoPfx = \"payto://\";\n\nexport type PaytoType = \"iban\" | \"bitcoin\" | \"x-taler-bank\";\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: PaytoType,\n first: string,\n second?: string,\n): PaytoUriGeneric {\n switch (type) {\n case \"bitcoin\": {\n const uppercased = first.toUpperCase();\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetType: \"bitcoin\",\n targetPath: first,\n address: uppercased,\n params: {},\n segwitAddrs: !second ? [] : generateFakeSegwitAddress(second, first),\n };\n return result;\n }\n case \"iban\": {\n const uppercased = first.toUpperCase();\n const result: PaytoUriIBAN = {\n isKnown: true,\n targetType: \"iban\",\n iban: uppercased,\n params: {},\n targetPath: !second ? uppercased : `${second}/${uppercased}`,\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): PaytoString {\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 as PaytoString;\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].toUpperCase();\n }\n if (parts.length === 2) {\n bic = parts[0];\n iban = parts[1].toUpperCase();\n } else {\n iban = targetPath.toUpperCase();\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 uppercased = targetType.toUpperCase();\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetPath,\n targetType,\n address: uppercased,\n params,\n segwitAddrs,\n };\n\n return result;\n }\n return {\n targetPath,\n targetType,\n params,\n isKnown: false,\n };\n}\n\nexport function talerPaytoFromExchangeReserve(\n exchangeBaseUrl: string,\n reservePub: string,\n): string {\n const url = new URL(exchangeBaseUrl);\n let proto: string;\n if (url.protocol === \"http:\") {\n proto = \"taler-reserve-http\";\n } else if (url.protocol === \"https:\") {\n proto = \"taler-reserve\";\n } else {\n throw Error(`unsupported exchange base URL protocol (${url.protocol})`);\n }\n\n let path = url.pathname;\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n return `payto://${proto}/${url.host}${url.pathname}${reservePub}`;\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 type { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport {\n TalerError,\n base64FromArrayBuffer,\n makeErrorDetail,\n stringToBytes,\n} from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AbsoluteTime, Duration } 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\" | \"PATCH\" | \"PUT\" | \"GET\" | \"DELETE\";\n headers?: { [name: string]: string | undefined };\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 * How to handle redirects.\n * Same semantics as WHATWG fetch.\n */\n redirect?: \"follow\" | \"error\" | \"manual\";\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 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\n/**\n * Read Taler error details from an HTTP response.\n */\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const contentType = httpResponse.headers.get(\"content-type\");\n if (contentType !== \"application/json\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n contentType: contentType || \"<null>\",\n },\n \"Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.\",\n );\n }\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\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 let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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 expectSuccessResponseOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (httpResponse.status >= 200 && httpResponse.status <= 299) {\n return;\n }\n const errResp = await readTalerErrorResponse(httpResponse);\n throwUnexpectedRequestError(httpResponse, errResp);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 = AbsoluteTime.fromMilliseconds(expiryDateMs);\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 * Only allow HTTPS connections, not plain http.\n */\n requireTls?: boolean;\n printAsCurl?: 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/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport {\n HttpResponse,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http-common.js\";\nimport {\n Codec,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TalerErrorDetail,\n} from \"./index.js\";\n\ntype OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =\n ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;\n\nexport type OperationResult<Body, ErrorEnum, K = never> =\n | OperationOk<Body>\n | OperationAlternative<ErrorEnum, any>\n | OperationFail<ErrorEnum>\n | OperationFailWithBodyOrNever<ErrorEnum, K>;\n\nexport function isOperationOk<T, E>(\n c: OperationResult<T, E>,\n): c is OperationOk<T> {\n return c.type === \"ok\";\n}\n\nexport function isOperationFail<T, E>(\n c: OperationResult<T, E>,\n): c is OperationFail<E> {\n return c.type === \"fail\";\n}\n\n/**\n * successful operation\n */\nexport interface OperationOk<BodyT> {\n type: \"ok\";\n\n /**\n * Parsed response body.\n */\n body: BodyT;\n}\n\n/**\n * unsuccessful operation, see details\n */\nexport interface OperationFail<T> {\n type: \"fail\";\n\n /**\n * Error case (either HTTP status code or TalerErrorCode)\n */\n case: T;\n\n detail: TalerErrorDetail;\n}\n\n/**\n * unsuccessful operation, see body\n */\nexport interface OperationAlternative<T, B> {\n type: \"fail\";\n\n case: T;\n body: B;\n}\n\nexport interface OperationFailWithBody<B> {\n type: \"fail\";\n\n case: keyof B;\n body: B[OperationFailWithBody<B>[\"case\"]];\n}\n\nexport async function opSuccessFromHttp<T>(\n resp: HttpResponse,\n codec: Codec<T>,\n): Promise<OperationOk<T>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"ok\" as const, body };\n}\n\n/**\n * Success case, but instead of the body we're returning a fixed response\n * to the client.\n */\nexport function opFixedSuccess<T>(body: T): OperationOk<T> {\n return { type: \"ok\" as const, body };\n}\n\nexport function opEmptySuccess(resp: HttpResponse): OperationOk<void> {\n return { type: \"ok\" as const, body: void 0 };\n}\n\nexport async function opKnownFailureWithBody<B>(\n case_: keyof B,\n body: B[typeof case_],\n): Promise<OperationFailWithBody<B>> {\n return { type: \"fail\", case: case_, body };\n}\n\nexport async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(\n resp: HttpResponse,\n s: T,\n codec: Codec<B>,\n): Promise<OperationAlternative<T, B>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"fail\", case: s, body };\n}\n\nexport async function opKnownHttpFailure<T extends HttpStatusCode>(\n s: T,\n resp: HttpResponse,\n): Promise<OperationFail<T>> {\n const detail = await readTalerErrorResponse(resp);\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opKnownTalerFailure<T extends TalerErrorCode>(\n s: T,\n detail: TalerErrorDetail,\n): OperationFail<T> {\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: resp.requestUrl,\n requestMethod: resp.requestMethod,\n httpStatusCode: resp.status,\n errorResponse: error,\n },\n `Unexpected HTTP status ${resp.status} in response`,\n );\n}\n\n/**\n * Convenience function to throw an error if the operation is not a success.\n */\nexport function narrowOpSuccessOrThrow<Body, ErrorEnum>(\n opName: string,\n opRes: OperationResult<Body, ErrorEnum>,\n): asserts opRes is OperationOk<Body> {\n if (opRes.type !== \"ok\") {\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR,\n {\n operation: opName,\n error: String(opRes.case),\n detail: \"detail\" in opRes ? opRes.detail : undefined,\n },\n `Operation ${opName} failed: ${String(opRes.case)}`,\n );\n }\n}\n\nexport type ResultByMethod<\n TT extends object,\n p extends keyof TT,\n> = TT[p] extends (...args: any[]) => infer Ret\n ? Ret extends Promise<infer Result>\n ? Result extends OperationResult<any, any>\n ? Result\n : never\n : never //api always use Promises\n : never; //error cases just for functions\n\nexport type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<\n ResultByMethod<TT, p>,\n OperationOk<any>\n>;\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\n/**\n * @fileoverview\n * Construction and parsing of taler:// URIs.\n * Specification: https://lsd.gnunet.org/lsd0006/\n */\n\n/**\n * Imports.\n */\nimport { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { opFixedSuccess, opKnownTalerFailure } from \"./operation.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { URL, URLSearchParams } from \"./url.js\";\n/**\n * A parsed taler URI.\n */\nexport type TalerUri =\n | PayUriResult\n | PayTemplateUriResult\n | DevExperimentUri\n | PayPullUriResult\n | PayPushUriResult\n | BackupRestoreUri\n | RefundUriResult\n | WithdrawUriResult\n | WithdrawExchangeUri\n | AddExchangeUri;\n\ndeclare const __action_str: unique symbol;\nexport type TalerUriString = string & { [__action_str]: true };\n\nexport function codecForTalerUriString(): Codec<TalerUriString> {\n return {\n decode(x: any, c?: Context): TalerUriString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (parseTalerUri(x) === undefined) {\n throw new DecodingError(\n `invalid taler URI at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as TalerUriString;\n },\n };\n}\n\nexport interface PayUriResult {\n type: TalerUriAction.Pay;\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken?: string;\n noncePriv?: string;\n}\n\nexport type TemplateParams = {\n amount?: string;\n summary?: string;\n};\n\nexport interface PayTemplateUriResult {\n type: TalerUriAction.PayTemplate;\n merchantBaseUrl: string;\n templateId: string;\n templateParams: TemplateParams;\n}\n\nexport interface WithdrawUriResult {\n type: TalerUriAction.Withdraw;\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n type: TalerUriAction.Refund;\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface PayPushUriResult {\n type: TalerUriAction.PayPush;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n type: TalerUriAction.PayPull;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n type: TalerUriAction.DevExperiment;\n devExperimentId: string;\n}\n\nexport interface BackupRestoreUri {\n type: TalerUriAction.Restore;\n walletRootPriv: string;\n providers: Array<string>;\n}\n\nexport interface WithdrawExchangeUri {\n type: TalerUriAction.WithdrawExchange;\n exchangeBaseUrl: string;\n exchangePub?: string;\n amount?: AmountString;\n}\n\nexport interface AddExchangeUri {\n type: TalerUriAction.AddExchange;\n exchangeBaseUrl: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"withdraw\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 const result: WithdrawUriResult = {\n type: TalerUriAction.Withdraw,\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n withdrawalOperationId: withdrawId,\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const r = parseWithdrawUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseAddExchangeUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"add-exchange\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 p = [host, ...pathSegments].join(\"/\");\n\n const result: AddExchangeUri = {\n type: TalerUriAction.AddExchange,\n exchangeBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseAddExchangeUri(s: string): AddExchangeUri | undefined {\n const r = parseAddExchangeUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * @deprecated use TalerUriAction\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\nexport enum TalerUriAction {\n Pay = \"pay\",\n Withdraw = \"withdraw\",\n Refund = \"refund\",\n PayPull = \"pay-pull\",\n PayPush = \"pay-push\",\n PayTemplate = \"pay-template\",\n Restore = \"restore\",\n DevExperiment = \"dev-experiment\",\n WithdrawExchange = \"withdraw-exchange\",\n AddExchange = \"add-exchange\",\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\nfunction parseProtoInfoWithError(s: string, action: string) {\n if (\n !s.toLowerCase().startsWith(\"taler://\") &&\n !s.toLowerCase().startsWith(\"taler+http://\")\n ) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return opFixedSuccess({\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n });\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return opFixedSuccess({\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n });\n } else {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n}\n\ntype Parser = (s: string) => TalerUri | undefined;\nconst parsers: { [A in TalerUriAction]: Parser } = {\n [TalerUriAction.Pay]: parsePayUri,\n [TalerUriAction.PayPull]: parsePayPullUri,\n [TalerUriAction.PayPush]: parsePayPushUri,\n [TalerUriAction.PayTemplate]: parsePayTemplateUri,\n [TalerUriAction.Restore]: parseRestoreUri,\n [TalerUriAction.Refund]: parseRefundUri,\n [TalerUriAction.Withdraw]: parseWithdrawUri,\n [TalerUriAction.DevExperiment]: parseDevExperimentUri,\n [TalerUriAction.WithdrawExchange]: parseWithdrawExchangeUri,\n [TalerUriAction.AddExchange]: parseAddExchangeUri,\n};\n\nexport function parseTalerUri(string: string): TalerUri | undefined {\n const https = string.startsWith(\"taler://\");\n const http = string.startsWith(\"taler+http://\");\n if (!https && !http) return undefined;\n const actionStart = https ? 8 : 13;\n const actionEnd = string.indexOf(\"/\", actionStart + 1);\n const action = string.substring(actionStart, actionEnd);\n const found = Object.values(TalerUriAction).find((x) => x === action);\n if (!found) return undefined;\n return parsers[found](string);\n}\n\nexport function stringifyTalerUri(uri: TalerUri): string {\n switch (uri.type) {\n case TalerUriAction.DevExperiment: {\n return stringifyDevExperimentUri(uri);\n }\n case TalerUriAction.Pay: {\n return stringifyPayUri(uri);\n }\n case TalerUriAction.PayPull: {\n return stringifyPayPullUri(uri);\n }\n case TalerUriAction.PayPush: {\n return stringifyPayPushUri(uri);\n }\n case TalerUriAction.PayTemplate: {\n return stringifyPayTemplateUri(uri);\n }\n case TalerUriAction.Restore: {\n return stringifyRestoreUri(uri);\n }\n case TalerUriAction.Refund: {\n return stringifyRefundUri(uri);\n }\n case TalerUriAction.Withdraw: {\n return stringifyWithdrawUri(uri);\n }\n case TalerUriAction.WithdrawExchange: {\n return stringifyWithdrawExchange(uri);\n }\n case TalerUriAction.AddExchange: {\n return stringifyAddExchange(uri);\n }\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 type: TalerUriAction.Pay,\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n uriString: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(uriString, TalerUriAction.PayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi.rest.split(\"?\");\n\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n\n const q = new URLSearchParams(c[1] ?? \"\");\n const params: Record<string, string> = {};\n q.forEach((v, k) => {\n params[k] = v;\n });\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayTemplate,\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPush);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPush,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPull);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPull,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parseWithdrawExchangeUri(\n s: string,\n): WithdrawExchangeUri | undefined {\n const pi = parseProtoInfo(s, \"withdraw-exchange\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 1) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;\n const pathSegments = parts.slice(1, parts.length - 1);\n const hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n const q = new URLSearchParams(c[1] ?? \"\");\n const amount = (q.get(\"a\") ?? undefined) as AmountString | undefined;\n\n return {\n type: TalerUriAction.WithdrawExchange,\n exchangeBaseUrl,\n exchangePub: exchangePub != \"\" ? exchangePub : undefined,\n amount,\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.Refund,\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 parts = c[0].split(\"/\");\n return {\n type: TalerUriAction.DevExperiment,\n devExperimentId: parts[0],\n };\n}\n\nexport function parseRestoreUri(uri: string): BackupRestoreUri | undefined {\n const pi = parseProtoInfo(uri, \"restore\");\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\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<string>();\n parts[1].split(\",\").map((name) => {\n const url = canonicalizeBaseUrl(\n `${pi.innerProto}://${decodeURIComponent(name)}/`,\n );\n providers.push(url);\n });\n return {\n type: TalerUriAction.Restore,\n walletRootPriv,\n providers,\n };\n}\n\n// ================================================\n// To string functions\n// ================================================\n\nexport function stringifyPayUri({\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n}: Omit<PayUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, {\n c: claimToken,\n n: noncePriv,\n });\n return `${proto}://pay/${path}${orderId}/${sessionId}${query}`;\n}\n\nexport function stringifyPayPullUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPullUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://pay-pull/${path}${contractPriv}`;\n}\n\nexport function stringifyPayPushUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPushUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n\n return `${proto}://pay-push/${path}${contractPriv}`;\n}\n\nexport function stringifyRestoreUri({\n providers,\n walletRootPriv,\n}: Omit<BackupRestoreUri, \"type\">): string {\n const list = providers\n .map((url) => `${encodeURIComponent(new URL(url).href)}`)\n .join(\",\");\n return `taler://restore/${walletRootPriv}/${list}`;\n}\n\nexport function stringifyWithdrawExchange({\n exchangeBaseUrl,\n exchangePub,\n amount,\n}: Omit<WithdrawExchangeUri, \"type\">): string {\n const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {\n a: amount,\n });\n return `${proto}://withdraw-exchange/${path}${exchangePub ?? \"\"}${query}`;\n}\n\nexport function stringifyAddExchange({\n exchangeBaseUrl,\n}: Omit<AddExchangeUri, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://add-exchange/${path}`;\n}\n\nexport function stringifyDevExperimentUri({\n devExperimentId,\n}: Omit<DevExperimentUri, \"type\">): string {\n return `taler://dev-experiment/${devExperimentId}`;\n}\n\nexport function stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams,\n}: Omit<PayTemplateUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, templateParams);\n return `${proto}://pay-template/${path}${templateId}${query}`;\n}\n\nexport function stringifyRefundUri({\n merchantBaseUrl,\n orderId,\n}: Omit<RefundUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(merchantBaseUrl);\n return `${proto}://refund/${path}${orderId}/`;\n}\n\nexport function stringifyWithdrawUri({\n bankIntegrationApiBaseUrl,\n withdrawalOperationId,\n}: Omit<WithdrawUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(bankIntegrationApiBaseUrl);\n return `${proto}://withdraw/${path}${withdrawalOperationId}`;\n}\n\n/**\n * Use baseUrl to defined http or https\n * create path using host+port+pathname\n * use params to create a query parameter string or empty\n */\nfunction getUrlInfo(\n baseUrl: string,\n params: Record<string, string | undefined> = {},\n): { proto: string; path: string; query: string } {\n const url = new URL(baseUrl);\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 URL protocol in ${baseUrl}`);\n }\n let path = url.hostname;\n if (url.port) {\n path = path + \":\" + url.port;\n }\n if (url.pathname) {\n path = path + url.pathname;\n }\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n const qp = new URLSearchParams();\n let withParams = false;\n Object.entries(params).forEach(([name, value]) => {\n if (value !== undefined) {\n withParams = true;\n qp.append(name, value);\n }\n });\n const query = withParams ? \"?\" + qp.toString() : \"\";\n\n return { proto, path, query };\n}\n", "import { deprecate } from \"util\";\nimport { codecForAmountString } from \"../amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"../codec.js\";\nimport { PaytoString, codecForPaytoString } from \"../payto.js\";\nimport {\n AmountString,\n codecForInternationalizedString,\n codecForLocation,\n} from \"../taler-types.js\";\nimport { TalerUriString, codecForTalerUriString } from \"../taleruri.js\";\nimport {\n AbsoluteTime,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n} from \"../time.js\";\n\nexport type UserAndPassword = {\n username: string;\n password: string;\n};\n\nexport type UserAndToken = {\n username: string;\n token: AccessToken;\n};\n\ndeclare const opaque_OfficerAccount: unique symbol;\nexport type LockedAccount = string & { [opaque_OfficerAccount]: true };\n\ndeclare const opaque_OfficerId: unique symbol;\nexport type OfficerId = string & { [opaque_OfficerId]: true };\n\ndeclare const opaque_OfficerSigningKey: unique symbol;\nexport type SigningKey = Uint8Array & { [opaque_OfficerSigningKey]: true };\n\nexport interface OfficerAccount {\n id: OfficerId;\n signingKey: SigningKey;\n}\n\nexport type PaginationParams = {\n /**\n * row identifier as the starting point of the query\n */\n offset?: string;\n /**\n * max number of element in the result response\n * always greater than 0\n */\n limit?: number;\n /**\n * order\n */\n order?: \"asc\" | \"dec\";\n};\n\nexport type LongPollParams = {\n /**\n * milliseconds the server should wait for at least one result to be shown\n */\n timeoutMs?: number;\n};\n///\n/// HASH\n///\n\n// 64-byte hash code.\ntype HashCode = string;\n\ntype PaytoHash = string;\n\ntype AmlOfficerPublicKeyP = string;\n\n// 32-byte hash code.\ntype ShortHashCode = string;\n\n// 16-byte salt.\ntype WireSalt = string;\n\ntype SHA256HashCode = ShortHashCode;\n\ntype SHA512HashCode = HashCode;\n\n// 32-byte nonce value, must only be used once.\ntype CSNonce = string;\n\n// 32-byte nonce value, must only be used once.\ntype RefreshMasterSeed = string;\n\n// 32-byte value representing a point on Curve25519.\ntype Cs25519Point = string;\n\n// 32-byte value representing a scalar multiplier\n// for scalar operations on points on Curve25519.\ntype Cs25519Scalar = string;\n\n///\n/// KEYS\n///\n\n// 16-byte access token used to authorize access.\ntype ClaimToken = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPublicKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPrivateKey = string;\n\n// Edx25519 public keys are points on Curve25519 and represented using the\n// standard 256 bits Ed25519 compact format converted to Crockford\n// Base32.\ntype Edx25519PublicKey = string;\n\n// Edx25519 private keys are always points on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype Edx25519PrivateKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePublicKey = string;\n\n// Point on Curve25519 represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype CsRPublic = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePrivateKey = string;\n\ntype CoinPublicKey = EddsaPublicKey;\n\n// RSA public key converted to Crockford Base32.\ntype RsaPublicKey = string;\n\ntype Integer = number;\n\ntype WireTransferIdentifierRawP = string;\n// Subset of numbers: Integers in the\n// inclusive range 0 .. (2^53 - 1).\ntype SafeUint64 = number;\n\n// The string must be a data URL according to RFC 2397\n// with explicit mediatype and base64 parameters.\n//\n// data:<mediatype>;base64,<data>\n//\n// Supported mediatypes are image/jpeg and image/png.\n// Invalid strings will be rejected by the wallet.\ntype ImageDataUrl = string;\n\ntype WadId = string;\n\ntype Timestamp = TalerProtocolTimestamp;\n\ntype RelativeTime = TalerProtocolDuration;\n\nexport interface LoginToken {\n token: AccessToken;\n expiration: Timestamp;\n}\n\ndeclare const __ac_token: unique symbol;\nexport type AccessToken = string & {\n [__ac_token]: true;\n};\n\ndeclare const __officer_signature: unique symbol;\nexport type OfficerSignature = string & {\n [__officer_signature]: true;\n};\n\nexport namespace TalerAuthentication {\n export interface TokenRequest {\n // Service-defined scope for the token.\n // Typical scopes would be \"readonly\" or \"readwrite\".\n scope: string;\n\n // Server may impose its own upper bound\n // on the token validity duration\n duration?: RelativeTime;\n\n // Is the token refreshable into a new token during its\n // validity?\n // Refreshable tokens effectively provide indefinite\n // access if they are refreshed in time.\n refreshable?: boolean;\n }\n\n export interface TokenSuccessResponse {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n access_token: AccessToken;\n }\n export interface TokenSuccessResponseMerchant {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n token: AccessToken;\n }\n}\n\n// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html\nexport interface CurrencySpecification {\n // Name of the currency.\n name: string;\n\n // how many digits the user may enter after the decimal_separator\n num_fractional_input_digits: Integer;\n\n // Number of fractional digits to render in normal font and size.\n num_fractional_normal_digits: Integer;\n\n // Number of fractional digits to render always, if needed by\n // padding with zeros.\n num_fractional_trailing_zero_digits: Integer;\n\n // map of powers of 10 to alternative currency names / symbols, must\n // always have an entry under \"0\" that defines the base name,\n // e.g. \"0 => \u20AC\" or \"3 => k\u20AC\". For BTC, would be \"0 => BTC, -3 => mBTC\".\n // Communicates the currency symbol to be used.\n alt_unit_names: { [log10: string]: string };\n}\n\n//FIXME: implement this codec\nexport const codecForAccessToken = codecForString as () => Codec<AccessToken>;\nexport const codecForTokenSuccessResponse =\n (): Codec<TalerAuthentication.TokenSuccessResponse> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponse>()\n .property(\"access_token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponse\");\n\nexport const codecForTokenSuccessResponseMerchant =\n (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()\n .property(\"token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponseMerchant\");\n\nexport const codecForCurrencySpecificiation =\n (): Codec<CurrencySpecification> =>\n buildCodecForObject<CurrencySpecification>()\n .property(\"name\", codecForString())\n .property(\"num_fractional_input_digits\", codecForNumber())\n .property(\"num_fractional_normal_digits\", codecForNumber())\n .property(\"num_fractional_trailing_zero_digits\", codecForNumber())\n .property(\"alt_unit_names\", codecForMap(codecForString()))\n .build(\"CurrencySpecification\");\n\nexport const codecForIntegrationBankConfig =\n (): Codec<TalerCorebankApi.IntegrationConfig> =>\n buildCodecForObject<TalerCorebankApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .build(\"TalerCorebankApi.IntegrationConfig\");\n\nexport const codecForCoreBankConfig = (): Codec<TalerCorebankApi.Config> =>\n buildCodecForObject<TalerCorebankApi.Config>()\n .property(\"name\", codecForConstString(\"libeufin-bank\"))\n .property(\"version\", codecForString())\n .property(\"bank_name\", codecForString())\n .property(\"allow_conversion\", codecForBoolean())\n .property(\"allow_registrations\", codecForBoolean())\n .property(\"allow_deletions\", codecForBoolean())\n .property(\"allow_edit_name\", codecForBoolean())\n .property(\"allow_edit_cashout_payto_uri\", codecForBoolean())\n .property(\"default_debit_threshold\", codecForAmountString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"supported_tan_channels\",\n codecForList(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\"wire_type\", codecForString())\n .build(\"TalerCorebankApi.Config\");\n\n//FIXME: implement this codec\nexport const codecForURN = codecForString;\n\nexport const codecForExchangeConfigInfo =\n (): Codec<TalerMerchantApi.ExchangeConfigInfo> =>\n buildCodecForObject<TalerMerchantApi.ExchangeConfigInfo>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"master_pub\", codecForString())\n .build(\"TalerMerchantApi.ExchangeConfigInfo\");\n\nexport const codecForMerchantConfig =\n (): Codec<TalerMerchantApi.VersionResponse> =>\n buildCodecForObject<TalerMerchantApi.VersionResponse>()\n .property(\"name\", codecForConstString(\"taler-merchant\"))\n .property(\"currency\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currencies\", codecForMap(codecForCurrencySpecificiation()))\n .property(\"exchanges\", codecForList(codecForExchangeConfigInfo()))\n .build(\"TalerMerchantApi.VersionResponse\");\n\nexport const codecForClaimResponse =\n (): Codec<TalerMerchantApi.ClaimResponse> =>\n buildCodecForObject<TalerMerchantApi.ClaimResponse>()\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.ClaimResponse\");\n\nexport const codecForPaymentResponse =\n (): Codec<TalerMerchantApi.PaymentResponse> =>\n buildCodecForObject<TalerMerchantApi.PaymentResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForStatusPaid = (): Codec<TalerMerchantApi.StatusPaid> =>\n buildCodecForObject<TalerMerchantApi.StatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refunded\", codecForBoolean())\n .property(\"type\", codecForConstString(\"paid\"))\n .build(\"TalerMerchantApi.StatusPaid\");\n\nexport const codecForStatusGoto =\n (): Codec<TalerMerchantApi.StatusGotoResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusGotoResponse>()\n .property(\"public_reorder_url\", codecForURL())\n .property(\"type\", codecForConstString(\"goto\"))\n .build(\"TalerMerchantApi.StatusGotoResponse\");\n\nexport const codecForStatusStatusUnpaid =\n (): Codec<TalerMerchantApi.StatusUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusUnpaidResponse>()\n .property(\"type\", codecForConstString(\"unpaid\"))\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForPaidRefundStatusResponse =\n (): Codec<TalerMerchantApi.PaidRefundStatusResponse> =>\n buildCodecForObject<TalerMerchantApi.PaidRefundStatusResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"refunded\", codecForBoolean())\n .build(\"TalerMerchantApi.PaidRefundStatusResponse\");\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse =\n (): Codec<TalerMerchantApi.AbortResponse> =>\n buildCodecForObject<TalerMerchantApi.AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForWalletRefundResponse =\n (): Codec<TalerMerchantApi.WalletRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.WalletRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantCoinRefundStatus\");\n\nexport const codecForQueryInstancesResponse =\n (): Codec<TalerMerchantApi.QueryInstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.QueryInstancesResponse>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"merchant_pub\", codecForString())\n .property(\"address\", codecForLocation())\n .property(\"jurisdiction\", codecForLocation())\n .property(\"use_stefan\", codecForBoolean())\n .property(\"default_wire_transfer_delay\", codecForDuration)\n .property(\"default_pay_delay\", codecForDuration)\n .property(\n \"auth\",\n buildCodecForObject<{\n method: \"external\" | \"token\";\n }>()\n .property(\n \"method\",\n codecForEither(\n codecForConstString(\"token\"),\n codecForConstString(\"external\"),\n ),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse.auth\"),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse\");\n\nexport const codecForAccountKycRedirects =\n (): Codec<TalerMerchantApi.AccountKycRedirects> =>\n buildCodecForObject<TalerMerchantApi.AccountKycRedirects>()\n .property(\n \"pending_kycs\",\n codecForList(codecForMerchantAccountKycRedirect()),\n )\n .property(\"timeout_kycs\", codecForList(codecForExchangeKycTimeout()))\n\n .build(\"TalerMerchantApi.AccountKycRedirects\");\n\nexport const codecForMerchantAccountKycRedirect =\n (): Codec<TalerMerchantApi.MerchantAccountKycRedirect> =>\n buildCodecForObject<TalerMerchantApi.MerchantAccountKycRedirect>()\n .property(\"kyc_url\", codecForURL())\n .property(\"aml_status\", codecForNumber())\n .property(\"exchange_url\", codecForURL())\n .property(\"payto_uri\", codecForPaytoString())\n .build(\"TalerMerchantApi.MerchantAccountKycRedirect\");\n\nexport const codecForExchangeKycTimeout =\n (): Codec<TalerMerchantApi.ExchangeKycTimeout> =>\n buildCodecForObject<TalerMerchantApi.ExchangeKycTimeout>()\n .property(\"exchange_url\", codecForURL())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .build(\"TalerMerchantApi.ExchangeKycTimeout\");\n\nexport const codecForAccountAddResponse =\n (): Codec<TalerMerchantApi.AccountAddResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountAddResponse>()\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .build(\"TalerMerchantApi.AccountAddResponse\");\n\nexport const codecForAccountsSummaryResponse =\n (): Codec<TalerMerchantApi.AccountsSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountsSummaryResponse>()\n .property(\"accounts\", codecForList(codecForBankAccountSummaryEntry()))\n .build(\"TalerMerchantApi.AccountsSummaryResponse\");\n\nexport const codecForBankAccountSummaryEntry =\n (): Codec<TalerMerchantApi.BankAccountSummaryEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountSummaryEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .build(\"TalerMerchantApi.BankAccountSummaryEntry\");\n\nexport const codecForBankAccountEntry =\n (): Codec<TalerMerchantApi.BankAccountEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .property(\"credit_facade_url\", codecOptional(codecForURL()))\n .property(\"active\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.BankAccountEntry\");\n\nexport const codecForInventorySummaryResponse =\n (): Codec<TalerMerchantApi.InventorySummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.InventorySummaryResponse>()\n .property(\"products\", codecForList(codecForInventoryEntry()))\n .build(\"TalerMerchantApi.InventorySummaryResponse\");\n\nexport const codecForInventoryEntry =\n (): Codec<TalerMerchantApi.InventoryEntry> =>\n buildCodecForObject<TalerMerchantApi.InventoryEntry>()\n .property(\"product_id\", codecForString())\n .property(\"product_serial\", codecForNumber())\n .build(\"TalerMerchantApi.InventoryEntry\");\n\nexport const codecForProductDetail =\n (): Codec<TalerMerchantApi.ProductDetail> =>\n buildCodecForObject<TalerMerchantApi.ProductDetail>()\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"unit\", codecForString())\n .property(\"price\", codecForAmountString())\n .property(\"image\", codecForString())\n .property(\"taxes\", codecForList(codecForTax()))\n .property(\"address\", codecForLocation())\n .property(\"next_restock\", codecForTimestamp)\n .property(\"total_stock\", codecForNumber())\n .property(\"total_sold\", codecForNumber())\n .property(\"total_lost\", codecForNumber())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"TalerMerchantApi.ProductDetail\");\n\nexport const codecForTax = (): Codec<TalerMerchantApi.Tax> =>\n buildCodecForObject<TalerMerchantApi.Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForAmountString())\n .build(\"TalerMerchantApi.Tax\");\n\nexport const codecForPostOrderResponse =\n (): Codec<TalerMerchantApi.PostOrderResponse> =>\n buildCodecForObject<TalerMerchantApi.PostOrderResponse>()\n .property(\"order_id\", codecForString())\n .property(\"token\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.PostOrderResponse\");\n\nexport const codecForOutOfStockResponse =\n (): Codec<TalerMerchantApi.OutOfStockResponse> =>\n buildCodecForObject<TalerMerchantApi.OutOfStockResponse>()\n .property(\"product_id\", codecForString())\n .property(\"available_quantity\", codecForNumber())\n .property(\"requested_quantity\", codecForNumber())\n .property(\"restock_expected\", codecForTimestamp)\n .build(\"TalerMerchantApi.OutOfStockResponse\");\n\nexport const codecForOrderHistory = (): Codec<TalerMerchantApi.OrderHistory> =>\n buildCodecForObject<TalerMerchantApi.OrderHistory>()\n .property(\"orders\", codecForList(codecForOrderHistoryEntry()))\n .build(\"TalerMerchantApi.OrderHistory\");\n\nexport const codecForOrderHistoryEntry =\n (): Codec<TalerMerchantApi.OrderHistoryEntry> =>\n buildCodecForObject<TalerMerchantApi.OrderHistoryEntry>()\n .property(\"order_id\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"refundable\", codecForBoolean())\n .property(\"paid\", codecForBoolean())\n .build(\"TalerMerchantApi.OrderHistoryEntry\");\n\nexport const codecForMerchant = (): Codec<TalerMerchantApi.Merchant> =>\n buildCodecForObject<TalerMerchantApi.Merchant>()\n .property(\"name\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"TalerMerchantApi.MerchantInfo\");\n\nexport const codecForExchange = (): Codec<TalerMerchantApi.Exchange> =>\n buildCodecForObject<TalerMerchantApi.Exchange>()\n .property(\"master_pub\", codecForString())\n .property(\"priority\", codecForNumber())\n .property(\"url\", codecForString())\n .build(\"TalerMerchantApi.Exchange\");\n\nexport const codecForContractTerms =\n (): Codec<TalerMerchantApi.ContractTerms> =>\n buildCodecForObject<TalerMerchantApi.ContractTerms>()\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(\n \"summary_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"merchant\", codecForMerchant())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchange()))\n .property(\"products\", codecForList(codecForProduct()))\n .property(\"extra\", codecForAny())\n .build(\"TalerMerchantApi.ContractTerms\");\n\nexport const codecForProduct = (): Codec<TalerMerchantApi.Product> =>\n buildCodecForObject<TalerMerchantApi.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(codecForAmountString()))\n .property(\"image\", codecOptional(codecForString()))\n .property(\"taxes\", codecOptional(codecForList(codecForTax())))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .build(\"TalerMerchantApi.Product\");\n\nexport const codecForCheckPaymentPaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentPaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentPaidResponse>()\n .property(\"order_status\", codecForConstString(\"paid\"))\n .property(\"refunded\", codecForBoolean())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"wired\", codecForBoolean())\n .property(\"deposit_total\", codecForAmountString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"wire_reports\", codecForList(codecForTransactionWireReport()))\n .property(\"wire_details\", codecForList(codecForTransactionWireTransfer()))\n .property(\"refund_details\", codecForList(codecForRefundDetails()))\n .property(\"order_status_url\", codecForURL())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentUnpaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentUnpaidResponse>()\n .property(\"order_status\", codecForConstString(\"unpaid\"))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .property(\"creation_time\", codecForTimestamp)\n .property(\"summary\", codecForString())\n .property(\"total_amount\", codecForAmountString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"already_paid_fulfillment_url\", codecOptional(codecForString()))\n .property(\"order_status_url\", codecForString())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentClaimedResponse =\n (): Codec<TalerMerchantApi.CheckPaymentClaimedResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentClaimedResponse>()\n .property(\"order_status\", codecForConstString(\"claimed\"))\n .property(\"contract_terms\", codecForContractTerms())\n .build(\"TalerMerchantApi.CheckPaymentClaimedResponse\");\n\nexport const codecForMerchantOrderPrivateStatusResponse =\n (): Codec<TalerMerchantApi.MerchantOrderStatusResponse> =>\n buildCodecForUnion<TalerMerchantApi.MerchantOrderStatusResponse>()\n .discriminateOn(\"order_status\")\n .alternative(\"paid\", codecForCheckPaymentPaidResponse())\n .alternative(\"unpaid\", codecForCheckPaymentUnpaidResponse())\n .alternative(\"claimed\", codecForCheckPaymentClaimedResponse())\n .build(\"TalerMerchantApi.MerchantOrderStatusResponse\");\n\nexport const codecForRefundDetails =\n (): Codec<TalerMerchantApi.RefundDetails> =>\n buildCodecForObject<TalerMerchantApi.RefundDetails>()\n .property(\"reason\", codecForString())\n .property(\"pending\", codecForBoolean())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .build(\"TalerMerchantApi.RefundDetails\");\n\nexport const codecForTransactionWireTransfer =\n (): Codec<TalerMerchantApi.TransactionWireTransfer> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireTransfer>()\n .property(\"exchange_url\", codecForURL())\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"confirmed\", codecForBoolean())\n .build(\"TalerMerchantApi.TransactionWireTransfer\");\n\nexport const codecForTransactionWireReport =\n (): Codec<TalerMerchantApi.TransactionWireReport> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireReport>()\n .property(\"code\", codecForNumber())\n .property(\"hint\", codecForString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"coin_pub\", codecForString())\n .build(\"TalerMerchantApi.TransactionWireReport\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<TalerMerchantApi.MerchantRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.MerchantRefundResponse>()\n .property(\"taler_refund_uri\", codecForTalerUriString())\n .property(\"h_contract\", codecForString())\n .build(\"TalerMerchantApi.MerchantRefundResponse\");\n\nexport const codecForTansferList = (): Codec<TalerMerchantApi.TransferList> =>\n buildCodecForObject<TalerMerchantApi.TransferList>()\n .property(\"transfers\", codecForList(codecForTransferDetails()))\n .build(\"TalerMerchantApi.TransferList\");\n\nexport const codecForTransferDetails =\n (): Codec<TalerMerchantApi.TransferDetails> =>\n buildCodecForObject<TalerMerchantApi.TransferDetails>()\n .property(\"credit_amount\", codecForAmountString())\n .property(\"wtid\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"exchange_url\", codecForURL())\n .property(\"transfer_serial_id\", codecForNumber())\n .property(\"execution_time\", codecOptional(codecForTimestamp))\n .property(\"verified\", codecOptional(codecForBoolean()))\n .property(\"confirmed\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.TransferDetails\");\n\nexport const codecForOtpDeviceSummaryResponse =\n (): Codec<TalerMerchantApi.OtpDeviceSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceSummaryResponse>()\n .property(\"otp_devices\", codecForList(codecForOtpDeviceEntry()))\n .build(\"TalerMerchantApi.OtpDeviceSummaryResponse\");\n\nexport const codecForOtpDeviceEntry =\n (): Codec<TalerMerchantApi.OtpDeviceEntry> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceEntry>()\n .property(\"otp_device_id\", codecForString())\n .property(\"device_description\", codecForString())\n .build(\"TalerMerchantApi.OtpDeviceEntry\");\n\nexport const codecForOtpDeviceDetails =\n (): Codec<TalerMerchantApi.OtpDeviceDetails> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceDetails>()\n .property(\"device_description\", codecForString())\n .property(\"otp_algorithm\", codecForNumber())\n .property(\"otp_ctr\", codecOptional(codecForNumber()))\n .property(\"otp_timestamp\", codecForNumber())\n .property(\"otp_code\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.OtpDeviceDetails\");\n\nexport const codecForTemplateSummaryResponse =\n (): Codec<TalerMerchantApi.TemplateSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.TemplateSummaryResponse>()\n .property(\"templates\", codecForList(codecForTemplateEntry()))\n .build(\"TalerMerchantApi.TemplateSummaryResponse\");\n\nexport const codecForTemplateEntry =\n (): Codec<TalerMerchantApi.TemplateEntry> =>\n buildCodecForObject<TalerMerchantApi.TemplateEntry>()\n .property(\"template_id\", codecForString())\n .property(\"template_description\", codecForString())\n .build(\"TalerMerchantApi.TemplateEntry\");\n\nexport const codecForTemplateDetails =\n (): Codec<TalerMerchantApi.TemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateDetails>()\n .property(\"template_description\", codecForString())\n .property(\"otp_id\", codecOptional(codecForString()))\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\"editable_defaults\", codecOptional(codecForTemplateContractDetailsDefaults()))\n .build(\"TalerMerchantApi.TemplateDetails\");\n\nexport const codecForTemplateContractDetails =\n (): Codec<TalerMerchantApi.TemplateContractDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetails>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecForNumber())\n .property(\"pay_duration\", codecForDuration)\n .build(\"TalerMerchantApi.TemplateContractDetails\");\n\nexport const codecForTemplateContractDetailsDefaults =\n (): Codec<TalerMerchantApi.TemplateContractDetailsDefaults> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetailsDefaults>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .property(\"pay_duration\", codecOptional(codecForDuration))\n .build(\"TalerMerchantApi.TemplateContractDetailsDefaults\");\n\nexport const codecForWalletTemplateDetails =\n (): Codec<TalerMerchantApi.WalletTemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.WalletTemplateDetails>()\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\"editable_defaults\", codecOptional(codecForTemplateContractDetailsDefaults()))\n .build(\"TalerMerchantApi.WalletTemplateDetails\");\n\nexport const codecForWebhookSummaryResponse =\n (): Codec<TalerMerchantApi.WebhookSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.WebhookSummaryResponse>()\n .property(\"webhooks\", codecForList(codecForWebhookEntry()))\n .build(\"TalerMerchantApi.WebhookSummaryResponse\");\n\nexport const codecForWebhookEntry = (): Codec<TalerMerchantApi.WebhookEntry> =>\n buildCodecForObject<TalerMerchantApi.WebhookEntry>()\n .property(\"webhook_id\", codecForString())\n .property(\"event_type\", codecForString())\n .build(\"TalerMerchantApi.WebhookEntry\");\n\nexport const codecForWebhookDetails =\n (): Codec<TalerMerchantApi.WebhookDetails> =>\n buildCodecForObject<TalerMerchantApi.WebhookDetails>()\n .property(\"event_type\", codecForString())\n .property(\"url\", codecForString())\n .property(\"http_method\", codecForString())\n .property(\"header_template\", codecOptional(codecForString()))\n .property(\"body_template\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.WebhookDetails\");\n\nexport const codecForTokenFamilyKind =\n (): Codec<TalerMerchantApi.TokenFamilyKind> =>\n codecForEither(\n codecForConstString(\"discount\"),\n codecForConstString(\"subscription\"),\n ) as any; //FIXME: create a codecForEnum\nexport const codecForTokenFamilyDetails =\n (): Codec<TalerMerchantApi.TokenFamilyDetails> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilyDetails>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"duration\", codecForDuration)\n .property(\"kind\", codecForTokenFamilyKind())\n .property(\"issued\", codecForNumber())\n .property(\"redeemed\", codecForNumber())\n .build(\"TalerMerchantApi.TokenFamilyDetails\");\n\nexport const codecForTokenFamiliesList =\n (): Codec<TalerMerchantApi.TokenFamiliesList> =>\n buildCodecForObject<TalerMerchantApi.TokenFamiliesList>()\n .property(\"token_families\", codecForList(codecForTokenFamilySummary()))\n .build(\"TalerMerchantApi.TokenFamiliesList\");\n\nexport const codecForTokenFamilySummary =\n (): Codec<TalerMerchantApi.TokenFamilySummary> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilySummary>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"kind\", codecForTokenFamilyKind())\n .build(\"TalerMerchantApi.TokenFamilySummary\");\n\nexport const codecForInstancesResponse =\n (): Codec<TalerMerchantApi.InstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.InstancesResponse>()\n .property(\"instances\", codecForList(codecForInstance()))\n .build(\"TalerMerchantApi.InstancesResponse\");\n\nexport const codecForInstance = (): Codec<TalerMerchantApi.Instance> =>\n buildCodecForObject<TalerMerchantApi.Instance>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"id\", codecForString())\n .property(\"merchant_pub\", codecForString())\n .property(\"payment_targets\", codecForList(codecForString()))\n .property(\"deleted\", codecForBoolean())\n .build(\"TalerMerchantApi.Instance\");\n\nexport const codecForExchangeConfig =\n (): Codec<TalerExchangeApi.ExchangeVersionResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeVersionResponse>()\n .property(\"version\", codecForString())\n .property(\"name\", codecForConstString(\"taler-exchange\"))\n .property(\"implementation\", codecOptional(codecForURN()))\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"supported_kyc_requirements\", codecForList(codecForString()))\n .build(\"TalerExchangeApi.ExchangeVersionResponse\");\n\nexport const codecForExchangeKeys =\n (): Codec<TalerExchangeApi.ExchangeKeysResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeKeysResponse>()\n .property(\"version\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"TalerExchangeApi.ExchangeKeysResponse\");\n\nconst codecForBalance = (): Codec<TalerCorebankApi.Balance> =>\n buildCodecForObject<TalerCorebankApi.Balance>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"credit_debit_indicator\",\n codecForEither(\n codecForConstString(\"credit\"),\n codecForConstString(\"debit\"),\n ),\n )\n .build(\"TalerCorebankApi.Balance\");\n\nconst codecForPublicAccount = (): Codec<TalerCorebankApi.PublicAccount> =>\n buildCodecForObject<TalerCorebankApi.PublicAccount>()\n .property(\"username\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.PublicAccount\");\n\nexport const codecForPublicAccountsResponse =\n (): Codec<TalerCorebankApi.PublicAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.PublicAccountsResponse>()\n .property(\"public_accounts\", codecForList(codecForPublicAccount()))\n .build(\"TalerCorebankApi.PublicAccountsResponse\");\n\nexport const codecForAccountMinimalData =\n (): Codec<TalerCorebankApi.AccountMinimalData> =>\n buildCodecForObject<TalerCorebankApi.AccountMinimalData>()\n .property(\"username\", codecForString())\n .property(\"name\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"balance\", codecForBalance())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.AccountMinimalData\");\n\nexport const codecForListBankAccountsResponse =\n (): Codec<TalerCorebankApi.ListBankAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.ListBankAccountsResponse>()\n .property(\"accounts\", codecForList(codecForAccountMinimalData()))\n .build(\"TalerCorebankApi.ListBankAccountsResponse\");\n\nexport const codecForAccountData = (): Codec<TalerCorebankApi.AccountData> =>\n buildCodecForObject<TalerCorebankApi.AccountData>()\n .property(\"name\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"contact_data\", codecOptional(codecForChallengeContactData()))\n .property(\"cashout_payto_uri\", codecOptional(codecForPaytoString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"tan_channel\",\n codecOptional(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountData\");\n\nexport const codecForChallengeContactData =\n (): Codec<TalerCorebankApi.ChallengeContactData> =>\n buildCodecForObject<TalerCorebankApi.ChallengeContactData>()\n .property(\"email\", codecOptional(codecForString()))\n .property(\"phone\", codecOptional(codecForString()))\n .build(\"TalerCorebankApi.ChallengeContactData\");\n\nexport const codecForWithdrawalPublicInfo =\n (): Codec<TalerCorebankApi.WithdrawalPublicInfo> =>\n buildCodecForObject<TalerCorebankApi.WithdrawalPublicInfo>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"username\", codecForString())\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\n \"selected_exchange_account\",\n codecOptional(codecForPaytoString()),\n )\n .build(\"TalerCorebankApi.WithdrawalPublicInfo\");\n\nexport const codecForBankAccountTransactionsResponse =\n (): Codec<TalerCorebankApi.BankAccountTransactionsResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionsResponse>()\n .property(\n \"transactions\",\n codecForList(codecForBankAccountTransactionInfo()),\n )\n .build(\"TalerCorebankApi.BankAccountTransactionsResponse\");\n\nexport const codecForBankAccountTransactionInfo =\n (): Codec<TalerCorebankApi.BankAccountTransactionInfo> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionInfo>()\n .property(\"creditor_payto_uri\", codecForPaytoString())\n .property(\"debtor_payto_uri\", codecForPaytoString())\n .property(\"amount\", codecForAmountString())\n .property(\n \"direction\",\n codecForEither(\n codecForConstString(\"debit\"),\n codecForConstString(\"credit\"),\n ),\n )\n .property(\"subject\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"date\", codecForTimestamp)\n .build(\"TalerCorebankApi.BankAccountTransactionInfo\");\n\nexport const codecForCreateTransactionResponse =\n (): Codec<TalerCorebankApi.CreateTransactionResponse> =>\n buildCodecForObject<TalerCorebankApi.CreateTransactionResponse>()\n .property(\"row_id\", codecForNumber())\n .build(\"TalerCorebankApi.CreateTransactionResponse\");\n\nexport const codecForRegisterAccountResponse =\n (): Codec<TalerCorebankApi.RegisterAccountResponse> =>\n buildCodecForObject<TalerCorebankApi.RegisterAccountResponse>()\n .property(\"internal_payto_uri\", codecForPaytoString())\n .build(\"TalerCorebankApi.RegisterAccountResponse\");\n\nexport const codecForBankAccountCreateWithdrawalResponse =\n (): Codec<TalerCorebankApi.BankAccountCreateWithdrawalResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountCreateWithdrawalResponse>()\n .property(\"taler_withdraw_uri\", codecForTalerUriString())\n .property(\"withdrawal_id\", codecForString())\n .build(\"TalerCorebankApi.BankAccountCreateWithdrawalResponse\");\n\nexport const codecForCashoutPending =\n (): Codec<TalerCorebankApi.CashoutResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutResponse>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutPending\");\n\nexport const codecForCashoutConversionResponse =\n (): Codec<TalerBankConversionApi.CashoutConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashoutConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashoutConversionResponse\");\n\nexport const codecForCashinConversionResponse =\n (): Codec<TalerBankConversionApi.CashinConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashinConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashinConversionResponse\");\n\nexport const codecForCashouts = (): Codec<TalerCorebankApi.Cashouts> =>\n buildCodecForObject<TalerCorebankApi.Cashouts>()\n .property(\"cashouts\", codecForList(codecForCashoutInfo()))\n .build(\"TalerCorebankApi.Cashouts\");\n\nexport const codecForCashoutInfo = (): Codec<TalerCorebankApi.CashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.CashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutInfo\");\n\nexport const codecForGlobalCashouts =\n (): Codec<TalerCorebankApi.GlobalCashouts> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashouts>()\n .property(\"cashouts\", codecForList(codecForGlobalCashoutInfo()))\n .build(\"TalerCorebankApi.GlobalCashouts\");\n\nexport const codecForGlobalCashoutInfo =\n (): Codec<TalerCorebankApi.GlobalCashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .property(\"username\", codecForString())\n .build(\"TalerCorebankApi.GlobalCashoutInfo\");\n\nexport const codecForCashoutStatusResponse =\n (): Codec<TalerCorebankApi.CashoutStatusResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutStatusResponse>()\n .property(\"amount_debit\", codecForAmountString())\n .property(\"amount_credit\", codecForAmountString())\n .property(\"subject\", codecForString())\n .property(\"creation_time\", codecForTimestamp)\n .build(\"TalerCorebankApi.CashoutStatusResponse\");\n\nexport const codecForConversionRatesResponse =\n (): Codec<TalerCorebankApi.ConversionRatesResponse> =>\n buildCodecForObject<TalerCorebankApi.ConversionRatesResponse>()\n .property(\"buy_at_ratio\", codecForDecimalNumber())\n .property(\"buy_in_fee\", codecForDecimalNumber())\n .property(\"sell_at_ratio\", codecForDecimalNumber())\n .property(\"sell_out_fee\", codecForDecimalNumber())\n .build(\"TalerCorebankApi.ConversionRatesResponse\");\n\nexport const codecForMonitorResponse =\n (): Codec<TalerCorebankApi.MonitorResponse> =>\n buildCodecForUnion<TalerCorebankApi.MonitorResponse>()\n .discriminateOn(\"type\")\n .alternative(\"no-conversions\", codecForMonitorNoConversion())\n .alternative(\"with-conversions\", codecForMonitorWithCashout())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForMonitorNoConversion =\n (): Codec<TalerCorebankApi.MonitorNoConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorNoConversion>()\n .property(\"type\", codecForConstString(\"no-conversions\"))\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorJustPayouts\");\n\nexport const codecForMonitorWithCashout =\n (): Codec<TalerCorebankApi.MonitorWithConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorWithConversion>()\n .property(\"type\", codecForConstString(\"with-conversions\"))\n .property(\"cashinCount\", codecForNumber())\n .property(\"cashinFiatVolume\", codecForAmountString())\n .property(\"cashinRegionalVolume\", codecForAmountString())\n .property(\"cashoutCount\", codecForNumber())\n .property(\"cashoutFiatVolume\", codecForAmountString())\n .property(\"cashoutRegionalVolume\", codecForAmountString())\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorWithCashout\");\n\nexport const codecForBankVersion =\n (): Codec<TalerBankIntegrationApi.BankVersion> =>\n buildCodecForObject<TalerBankIntegrationApi.BankVersion>()\n .property(\"currency\", codecForCurrencyName())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForLibtoolVersion())\n .build(\"TalerBankIntegrationApi.BankVersion\");\n\nexport const codecForBankWithdrawalOperationStatus =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"sender_wire\", codecOptional(codecForPaytoString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .property(\"wire_types\", codecForList(codecForString()))\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\"selected_exchange_account\", codecOptional(codecForString()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationStatus\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationPostResponse\");\n\nexport const codecForRevenueConfig = (): Codec<TalerRevenueApi.RevenueConfig> =>\n buildCodecForObject<TalerRevenueApi.RevenueConfig>()\n .property(\"name\", codecForConstString(\"taler-revenue\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"TalerRevenueApi.RevenueConfig\");\n\nexport const codecForRevenueIncomingHistory =\n (): Codec<TalerRevenueApi.RevenueIncomingHistory> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForRevenueIncomingBankTransaction()),\n )\n .build(\"TalerRevenueApi.MerchantIncomingHistory\");\n\nexport const codecForRevenueIncomingBankTransaction =\n (): Codec<TalerRevenueApi.RevenueIncomingBankTransaction> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"row_id\", codecForNumber())\n .property(\"subject\", codecForString())\n .build(\"TalerRevenueApi.RevenueIncomingBankTransaction\");\n\nexport const codecForTransferResponse =\n (): Codec<TalerWireGatewayApi.TransferResponse> =>\n buildCodecForObject<TalerWireGatewayApi.TransferResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.TransferResponse\");\n\nexport const codecForIncomingHistory =\n (): Codec<TalerWireGatewayApi.IncomingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForIncomingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.IncomingHistory\");\n\nexport const codecForIncomingBankTransaction =\n (): Codec<TalerWireGatewayApi.IncomingBankTransaction> =>\n buildCodecForUnion<TalerWireGatewayApi.IncomingBankTransaction>()\n .discriminateOn(\"type\")\n .alternative(\"RESERVE\", codecForIncomingReserveTransaction())\n .alternative(\"WAD\", codecForIncomingWadTransaction())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForIncomingReserveTransaction =\n (): Codec<TalerWireGatewayApi.IncomingReserveTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingReserveTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"reserve_pub\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"RESERVE\"))\n .build(\"TalerWireGatewayApi.IncomingReserveTransaction\");\n\nexport const codecForIncomingWadTransaction =\n (): Codec<TalerWireGatewayApi.IncomingWadTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingWadTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"origin_exchange_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"WAD\"))\n .property(\"wad_id\", codecForString())\n .build(\"TalerWireGatewayApi.IncomingWadTransaction\");\n\nexport const codecForOutgoingHistory =\n (): Codec<TalerWireGatewayApi.OutgoingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingHistory>()\n .property(\"debit_account\", codecForPaytoString())\n .property(\n \"outgoing_transactions\",\n codecForList(codecForOutgoingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.OutgoingHistory\");\n\nexport const codecForOutgoingBankTransaction =\n (): Codec<TalerWireGatewayApi.OutgoingBankTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"exchange_base_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"wtid\", codecForString())\n .build(\"TalerWireGatewayApi.OutgoingBankTransaction\");\n\nexport const codecForAddIncomingResponse =\n (): Codec<TalerWireGatewayApi.AddIncomingResponse> =>\n buildCodecForObject<TalerWireGatewayApi.AddIncomingResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.AddIncomingResponse\");\n\nexport const codecForAmlRecords = (): Codec<TalerExchangeApi.AmlRecords> =>\n buildCodecForObject<TalerExchangeApi.AmlRecords>()\n .property(\"records\", codecForList(codecForAmlRecord()))\n .build(\"TalerExchangeApi.PublicAccountsResponse\");\n\nexport const codecForAmlRecord = (): Codec<TalerExchangeApi.AmlRecord> =>\n buildCodecForObject<TalerExchangeApi.AmlRecord>()\n .property(\"current_state\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .property(\"rowid\", codecForNumber())\n .property(\"threshold\", codecForAmountString())\n .build(\"TalerExchangeApi.AmlRecord\");\n\nexport const codecForAmlDecisionDetails =\n (): Codec<TalerExchangeApi.AmlDecisionDetails> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetails>()\n .property(\"aml_history\", codecForList(codecForAmlDecisionDetail()))\n .property(\"kyc_attributes\", codecForList(codecForKycDetail()))\n .build(\"TalerExchangeApi.AmlDecisionDetails\");\n\nexport const codecForAmlDecisionDetail =\n (): Codec<TalerExchangeApi.AmlDecisionDetail> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetail>()\n .property(\"justification\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"new_threshold\", codecForAmountString())\n .property(\"decider_pub\", codecForString())\n .build(\"TalerExchangeApi.AmlDecisionDetail\");\n\nexport const codecForChallenge = (): Codec<TalerCorebankApi.Challenge> =>\n buildCodecForObject<TalerCorebankApi.Challenge>()\n .property(\"challenge_id\", codecForNumber())\n .build(\"TalerCorebankApi.Challenge\");\n\nexport const codecForTanTransmission =\n (): Codec<TalerCorebankApi.TanTransmission> =>\n buildCodecForObject<TalerCorebankApi.TanTransmission>()\n .property(\n \"tan_channel\",\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n )\n .property(\"tan_info\", codecForString())\n .build(\"TalerCorebankApi.TanTransmission\");\n\ninterface KycDetail {\n provider_section: string;\n attributes?: Object;\n collection_time: Timestamp;\n expiration_time: Timestamp;\n}\nexport const codecForKycDetail = (): Codec<TalerExchangeApi.KycDetail> =>\n buildCodecForObject<TalerExchangeApi.KycDetail>()\n .property(\"provider_section\", codecForString())\n .property(\"attributes\", codecOptional(codecForAny()))\n .property(\"collection_time\", codecForTimestamp)\n .property(\"expiration_time\", codecForTimestamp)\n .build(\"TalerExchangeApi.KycDetail\");\n\nexport const codecForAmlDecision = (): Codec<TalerExchangeApi.AmlDecision> =>\n buildCodecForObject<TalerExchangeApi.AmlDecision>()\n .property(\"justification\", codecForString())\n .property(\"new_threshold\", codecForAmountString())\n .property(\"h_payto\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"officer_sig\", codecForString())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"kyc_requirements\", codecOptional(codecForList(codecForString())))\n .build(\"TalerExchangeApi.AmlDecision\");\n\n// version: string;\n\n// // Name of the API.\n// name: \"taler-conversion-info\";\n\n// // Currency used by this bank.\n// regional_currency: string;\n\n// // How the bank SPA should render this currency.\n// regional_currency_specification: CurrencySpecification;\n\n// // External currency used during conversion.\n// fiat_currency: string;\n\n// // How the bank SPA should render this currency.\n// fiat_currency_specification: CurrencySpecification;\n\n// Extra conversion rate information.\n// // Only present if server opts in to report the static conversion rate.\n// conversion_info?: {\n\n// // Fee to subtract after applying the cashin ratio.\n// cashin_fee: AmountString;\n\n// // Fee to subtract after applying the cashout ratio.\n// cashout_fee: AmountString;\n\n// // Minimum amount authorised for cashin, in fiat before conversion\n// cashin_min_amount: AmountString;\n\n// // Minimum amount authorised for cashout, in regional before conversion\n// cashout_min_amount: AmountString;\n\n// // Smallest possible regional amount, converted amount is rounded to this amount\n// cashin_tiny_amount: AmountString;\n\n// // Smallest possible fiat amount, converted amount is rounded to this amount\n// cashout_tiny_amount: AmountString;\n\n// // Rounding mode used during cashin conversion\n// cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n// // Rounding mode used during cashout conversion\n// cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n// }\nexport const codecForConversionInfo =\n (): Codec<TalerBankConversionApi.ConversionInfo> =>\n buildCodecForObject<TalerBankConversionApi.ConversionInfo>()\n .property(\"cashin_fee\", codecForAmountString())\n .property(\"cashin_min_amount\", codecForAmountString())\n .property(\"cashin_ratio\", codecForDecimalNumber())\n .property(\n \"cashin_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashin_tiny_amount\", codecForAmountString())\n .property(\"cashout_fee\", codecForAmountString())\n .property(\"cashout_min_amount\", codecForAmountString())\n .property(\"cashout_ratio\", codecForDecimalNumber())\n .property(\n \"cashout_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashout_tiny_amount\", codecForAmountString())\n .build(\"ConversionBankConfig.ConversionInfo\");\n\nexport const codecForConversionBankConfig =\n (): Codec<TalerBankConversionApi.IntegrationConfig> =>\n buildCodecForObject<TalerBankConversionApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .property(\"fiat_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n\n .property(\"conversion_rate\", codecForConversionInfo())\n .build(\"ConversionBankConfig.IntegrationConfig\");\n\n// export const codecFor =\n// (): Codec<TalerWireGatewayApi.PublicAccountsResponse> =>\n// buildCodecForObject<TalerWireGatewayApi.PublicAccountsResponse>()\n// .property(\"\", codecForString())\n// .build(\"TalerWireGatewayApi.PublicAccountsResponse\");\n\ntype EmailAddress = string;\ntype PhoneNumber = string;\ntype EddsaSignature = string;\n// base32 encoded RSA blinded signature.\ntype BlindedRsaSignature = string;\ntype Base32 = string;\n\ntype DecimalNumber = string;\ntype RsaSignature = string;\ntype Float = number;\ntype LibtoolVersion = string;\n// The type of a coin's blinded envelope depends on the cipher that is used\n// for signing with a denomination key.\ntype CoinEnvelope = RSACoinEnvelope | CSCoinEnvelope;\n// For denomination signatures based on RSA, the planchet is just a blinded\n// coin's public EdDSA key.\ninterface RSACoinEnvelope {\n cipher: \"RSA\" | \"RSA+age_restricted\";\n rsa_blinded_planchet: string; // Crockford Base32 encoded\n}\n// For denomination signatures based on Blind Clause-Schnorr, the planchet\n// consists of the public nonce and two Curve25519 scalars which are two\n// blinded challenges in the Blinded Clause-Schnorr signature scheme.\n// See https://taler.net/papers/cs-thesis.pdf for details.\ninterface CSCoinEnvelope {\n cipher: \"CS\" | \"CS+age_restricted\";\n cs_nonce: string; // Crockford Base32 encoded\n cs_blinded_c0: string; // Crockford Base32 encoded\n cs_blinded_c1: string; // Crockford Base32 encoded\n}\n// Secret for blinding/unblinding.\n// An RSA blinding secret, which is basically\n// a 256-bit nonce, converted to Crockford Base32.\ntype DenominationBlindingKeyP = string;\n\n//FIXME: implement this codec\nconst codecForURL = codecForString;\n//FIXME: implement this codec\nconst codecForLibtoolVersion = codecForString;\n//FIXME: implement this codec\nconst codecForCurrencyName = codecForString;\n//FIXME: implement this codec\nconst codecForDecimalNumber = codecForString;\n\nexport type WithdrawalOperationStatus =\n | \"pending\"\n | \"selected\"\n | \"aborted\"\n | \"confirmed\";\n\nexport namespace TalerWireGatewayApi {\n export interface TransferResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n\n export interface TransferRequest {\n // Nonce to make the request idempotent. Requests with the same\n // transaction_uid that differ in any of the other fields\n // are rejected.\n request_uid: HashCode;\n\n // Amount to transfer.\n amount: AmountString;\n\n // Base URL of the exchange. Shall be included by the bank gateway\n // in the appropriate section of the wire transfer details.\n exchange_base_url: string;\n\n // Wire transfer identifier chosen by the exchange,\n // used by the merchant to identify the Taler order(s)\n // associated with this wire transfer.\n wtid: ShortHashCode;\n\n // The recipient's account identifier as a payto URI.\n credit_account: PaytoString;\n }\n\n export interface IncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: IncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if incoming transaction is empty\n credit_account?: PaytoString;\n }\n\n // Union discriminated by the \"type\" field.\n export type IncomingBankTransaction =\n | IncomingReserveTransaction\n | IncomingWadTransaction;\n\n export interface IncomingReserveTransaction {\n type: \"RESERVE\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // The reserve public key extracted from the transaction details.\n reserve_pub: EddsaPublicKey;\n }\n\n export interface IncomingWadTransaction {\n type: \"WAD\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n credit_account: PaytoString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // Base URL of the exchange that originated the wad.\n origin_exchange_url: string;\n\n // The reserve public key extracted from the transaction details.\n wad_id: WadId;\n }\n\n export interface OutgoingHistory {\n // Array of outgoing transactions.\n outgoing_transactions: OutgoingBankTransaction[];\n\n // Payto URI to identify the sender of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if outgoing transactions is empty\n debit_account?: PaytoString;\n }\n\n export interface OutgoingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n credit_account: PaytoString;\n\n // The wire transfer ID in the outgoing transaction.\n wtid: ShortHashCode;\n\n // Base URL of the exchange.\n exchange_base_url: string;\n }\n\n export interface AddIncomingRequest {\n // Amount to transfer.\n amount: AmountString;\n\n // Reserve public key that is included in the wire transfer details\n // to identify the reserve that is being topped up.\n reserve_pub: EddsaPublicKey;\n\n // Account (as payto URI) that makes the wire transfer to the exchange.\n // Usually this account must be created by the test harness before this API is\n // used. An exception is the \"exchange-fakebank\", where any debit account can be\n // specified, as it is automatically created.\n debit_account: PaytoString;\n }\n\n export interface AddIncomingResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n}\n\nexport namespace TalerRevenueApi {\n export interface RevenueConfig {\n // Name of the API.\n name: \"taler-revenue\";\n\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this gateway.\n currency: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface RevenueIncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: RevenueIncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n credit_account: string;\n }\n\n export interface RevenueIncomingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: string;\n\n // The wire transfer subject.\n subject: string;\n }\n}\n\nexport namespace TalerBankConversionApi {\n export interface ConversionInfo {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n }\n\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n // Currency used by this bank.\n regional_currency: string;\n\n // How the bank SPA should render this currency.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency: string;\n\n // How the bank SPA should render this currency.\n fiat_currency_specification: CurrencySpecification;\n\n // Extra conversion rate information.\n // Only present if server opts in to report the static conversion rate.\n conversion_rate: ConversionInfo;\n }\n\n export interface CashinConversionResponse {\n // Amount that the user will get deducted from their fiat\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their regional\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export interface CashoutConversionResponse {\n // Amount that the user will get deducted from their regional\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their fiat\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export type RoundingMode = \"zero\" | \"up\" | \"nearest\";\n\n export interface ConversionRate {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: RoundingMode;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: RoundingMode;\n }\n}\nexport namespace TalerBankIntegrationApi {\n export interface BankVersion {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification?: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n\n export interface BankWithdrawalOperationStatus {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Bank account of the customer that is withdrawing, as a\n // payto URI.\n sender_wire?: PaytoString;\n\n // Suggestion for an exchange given by the bank.\n suggested_exchange?: string;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Wire transfer types supported by the bank.\n wire_types: string[];\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: string;\n }\n\n export interface BankWithdrawalOperationPostRequest {\n // Reserve public key.\n reserve_pub: string;\n\n // Payto address of the exchange selected for the withdrawal.\n selected_exchange: PaytoString;\n }\n\n export interface BankWithdrawalOperationPostResponse {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: Omit<\"pending\", WithdrawalOperationStatus>;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n }\n}\nexport namespace TalerCorebankApi {\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n export interface Config {\n // Name of this API, always \"taler-corebank\".\n name: \"libeufin-bank\";\n // name: \"taler-corebank\";\n\n // API version in the form $n:$n:$n\n version: string;\n\n // Bank display name to be used in user interfaces.\n // For consistency use \"Taler Bank\" if missing.\n // @since v4, will become mandatory in the next version.\n bank_name: string;\n\n // If 'true' the server provides local currency conversion support\n // If 'false' some parts of the API are not supported and return 501\n allow_conversion: boolean;\n\n // If 'true' anyone can register\n // If 'false' only the admin can\n allow_registrations: boolean;\n\n // If 'true' account can delete themselves\n // If 'false' only the admin can delete accounts\n allow_deletions: boolean;\n\n // If 'true' anyone can edit their name\n // If 'false' only admin can\n allow_edit_name: boolean;\n\n // If 'true' anyone can edit their cashout account\n // If 'false' only the admin\n allow_edit_cashout_payto_uri: boolean;\n\n // Default debt limit for newly created accounts\n default_debit_threshold: AmountString;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // TAN channels supported by the server\n supported_tan_channels: TanChannel[];\n\n // Wire transfer type supported by the bank.\n // Default to 'iban' is missing\n // @since v4, may become mandatory in the future.\n wire_type: string;\n }\n\n export interface BankAccountCreateWithdrawalRequest {\n // Amount to withdraw.\n amount: AmountString;\n }\n export interface BankAccountCreateWithdrawalResponse {\n // ID of the withdrawal, can be used to view/modify the withdrawal operation.\n withdrawal_id: string;\n\n // URI that can be passed to the wallet to initiate the withdrawal.\n taler_withdraw_uri: TalerUriString;\n }\n export interface WithdrawalPublicInfo {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Account username\n username: string;\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: PaytoString;\n }\n\n export interface BankAccountTransactionsResponse {\n transactions: BankAccountTransactionInfo[];\n }\n\n export interface BankAccountTransactionInfo {\n creditor_payto_uri: PaytoString;\n debtor_payto_uri: PaytoString;\n\n amount: AmountString;\n direction: \"debit\" | \"credit\";\n\n subject: string;\n\n // Transaction unique ID. Matches\n // $transaction_id from the URI.\n row_id: number;\n date: Timestamp;\n }\n\n export interface CreateTransactionRequest {\n // Address in the Payto format of the wire transfer receiver.\n // It needs at least the 'message' query string parameter.\n payto_uri: PaytoString;\n\n // Transaction amount (in the $currency:x.y format), optional.\n // However, when not given, its value must occupy the 'amount'\n // query string parameter of the 'payto' field. In case it\n // is given in both places, the paytoUri's takes the precedence.\n amount?: AmountString;\n }\n\n export interface CreateTransactionResponse {\n // ID identifying the transaction being created\n row_id: Integer;\n }\n\n export interface RegisterAccountResponse {\n // Internal payto URI of this bank account.\n internal_payto_uri: PaytoString;\n }\n\n export interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n contact_data?: ChallengeContactData;\n\n // 'payto' address of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n cashout_payto_uri?: PaytoString;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: PaytoString;\n\n // If present, set the max debit allowed for this user\n // Only admin can set this property.\n debit_threshold?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n // Only admin can set this property, other user can reconfig their account\n // after creation.\n tan_channel?: TanChannel;\n }\n\n export interface ChallengeContactData {\n // E-Mail address\n email?: EmailAddress;\n\n // Phone number.\n phone?: PhoneNumber;\n }\n\n export interface AccountReconfiguration {\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n // Only admin can change this property.\n contact_data?: ChallengeContactData;\n\n // 'payto' URI of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n // Only admin can change this property if not allowed in config\n cashout_payto_uri?: PaytoString;\n\n // If present, change the legal name associated with $username.\n // Only admin can change this property if not allowed in config\n name?: string;\n\n // Make this account visible to anyone?\n is_public?: boolean;\n\n // If present, change the max debit allowed for this user\n // Only admin can change this property.\n debit_threshold?: AmountString;\n\n //FIX: missing in SPEC\n // If present, enables 2FA and set the TAN channel used for challenges\n tan_channel?: TanChannel | null;\n }\n\n export interface AccountPasswordChange {\n // New password.\n new_password: string;\n // Old password. If present, check that the old password matches.\n // Optional for admin account.\n old_password?: string;\n }\n\n export interface PublicAccountsResponse {\n public_accounts: PublicAccount[];\n }\n export interface PublicAccount {\n // Username of the account\n username: string;\n\n // Internal payto URI of this bank account.\n payto_uri: string;\n\n // Current balance of the account\n balance: Balance;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface ListBankAccountsResponse {\n accounts: AccountMinimalData[];\n }\n export interface Balance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n }\n export interface AccountMinimalData {\n // Username\n username: string;\n\n // Legal name of the account owner.\n name: string;\n\n // Internal payto URI of this bank account.\n payto_uri: PaytoString;\n\n // current balance of the account\n balance: Balance;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: Balance;\n\n // payto://-URI of the account.\n payto_uri: PaytoString;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: PaytoString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Is 2FA enabled and what channel is used for challenges?\n tan_channel?: TanChannel;\n }\n\n export interface CashoutRequest {\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n request_uid: ShortHashCode;\n\n // Optional subject to associate to the\n // cashout operation. This data will appear\n // as the incoming wire transfer subject in\n // the user's fiat bank account.\n subject?: string;\n\n // That is the plain amount that the user specified\n // to cashout. Its $currency is the (regional) currency of the\n // bank instance.\n amount_debit: AmountString;\n\n // That is the amount that will effectively be\n // transferred by the bank to the user's bank\n // account, that is external to the regional currency.\n // It is expressed in the fiat currency and\n // is calculated after the cashout fee and the\n // exchange rate. See the /cashout-rates call.\n // The client needs to calculate this amount\n // correctly based on the amount_debit and the cashout rate,\n // otherwise the request will fail.\n amount_credit: AmountString;\n }\n\n export interface CashoutResponse {\n // ID identifying the operation being created\n cashout_id: number;\n }\n\n /**\n * @deprecated since 4, use 2fa\n */\n export interface CashoutConfirmRequest {\n // the TAN that confirms $CASHOUT_ID.\n tan: string;\n }\n\n export interface Cashouts {\n // Every string represents a cash-out operation ID.\n cashouts: CashoutInfo[];\n }\n\n export interface CashoutInfo {\n cashout_id: number;\n /**\n * @deprecated since 4, use new 2fa\n */\n status?: \"pending\" | \"aborted\" | \"confirmed\";\n }\n export interface GlobalCashouts {\n // Every string represents a cash-out operation ID.\n cashouts: GlobalCashoutInfo[];\n }\n export interface GlobalCashoutInfo {\n cashout_id: number;\n username: string;\n }\n\n export interface CashoutStatusResponse {\n // Amount debited to the internal\n // regional currency bank account.\n amount_debit: AmountString;\n\n // Amount credited to the external bank account.\n amount_credit: AmountString;\n\n // Transaction subject.\n subject: string;\n\n // Time when the cashout was created.\n creation_time: Timestamp;\n }\n\n export interface ConversionRatesResponse {\n // Exchange rate to buy the local currency from the external one\n buy_at_ratio: DecimalNumber;\n\n // Exchange rate to sell the local currency for the external one\n sell_at_ratio: DecimalNumber;\n\n // Fee to subtract after applying the buy ratio.\n buy_in_fee: DecimalNumber;\n\n // Fee to subtract after applying the sell ratio.\n sell_out_fee: DecimalNumber;\n }\n\n export enum MonitorTimeframeParam {\n hour,\n day,\n month,\n year,\n decade,\n }\n\n export type MonitorResponse = MonitorNoConversion | MonitorWithConversion;\n\n // Monitoring stats when conversion is not supported\n export interface MonitorNoConversion {\n type: \"no-conversions\";\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n // Monitoring stats when conversion is supported\n export interface MonitorWithConversion {\n type: \"with-conversions\";\n\n // How many cashin operations were confirmed by a\n // wallet owner. Note: wallet owners\n // are NOT required to be customers of the libeufin-bank.\n cashinCount: number;\n\n // Overall regional currency that has been paid by the regional admin account\n // to regional bank accounts to fulfill all the confirmed cashin operations.\n cashinRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid to the fiat admin account\n // by fiat bank accounts to fulfill all the confirmed cashin operations.\n cashinFiatVolume: AmountString;\n\n // How many cashout operations were confirmed.\n cashoutCount: number;\n\n // Overall regional currency that has been paid to the regional admin account\n // by fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid by the fiat admin account\n // to fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutFiatVolume: AmountString;\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n export interface TanTransmission {\n // Channel of the last successful transmission of the TAN challenge.\n tan_channel: TanChannel;\n\n // Info of the last successful transmission of the TAN challenge.\n tan_info: string;\n }\n\n export interface Challenge {\n // Unique identifier of the challenge to solve to run this protected\n // operation.\n challenge_id: number;\n }\n\n export interface ChallengeSolve {\n // The TAN code that solves $CHALLENGE_ID\n tan: string;\n }\n\n export enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n }\n}\n\nexport namespace TalerExchangeApi {\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n export interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: AmountString;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: AmountString;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n export interface AmlDecision {\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: AmountString;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n export interface ExchangeVersionResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-exchange\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v18, may become mandatory in the future.\n implementation?: string;\n\n // Currency supported by this exchange, given\n // as a currency code (\"USD\" or \"EUR\").\n currency: string;\n\n // How wallets should render this currency.\n currency_specification: CurrencySpecification;\n\n // Names of supported KYC requirements.\n supported_kyc_requirements: string[];\n }\n\n export type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n // Account restriction that disables this type of\n // account for the indicated operation categorically.\n export interface DenyAllAccountRestriction {\n type: \"deny\";\n }\n // Accounts interacting with this type of account\n // restriction must have a payto://-URI matching\n // the given regex.\n export interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: { [lang_tag: string]: string };\n }\n\n export interface WireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: PaytoString;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignature;\n }\n\n export interface ExchangeKeysResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // The exchange's base URL.\n base_url: string;\n\n // The exchange's currency or asset unit.\n currency: string;\n\n /**\n * FIXME: PARTIALLY IMPLEMENTED!!\n */\n\n // How wallets should render this currency.\n // currency_specification: CurrencySpecification;\n\n // // Absolute cost offset for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // stefan_abs: AmountString;\n\n // // Factor to multiply the logarithm of the amount\n // // with to (over) approximate fees payable by amount.\n // // Note that the total to be paid is first to be\n // // divided by the smallest denomination to obtain\n // // the value that the logarithm is to be taken of.\n // stefan_log: AmountString;\n\n // // Linear cost factor for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // //\n // // Note that this is a scalar, as it is multiplied\n // // with the actual amount.\n // stefan_lin: Float;\n\n // // Type of the asset. \"fiat\", \"crypto\", \"regional\"\n // // or \"stock\". Wallets should adjust their UI/UX\n // // based on this value.\n // asset_type: string;\n\n // // Array of wire accounts operated by the exchange for\n // // incoming wire transfers.\n // accounts: WireAccount[];\n\n // // Object mapping names of wire methods (i.e. \"iban\" or \"x-taler-bank\")\n // // to wire fees.\n // wire_fees: { method: AggregateTransferFee[] };\n\n // // List of exchanges that this exchange is partnering\n // // with to enable wallet-to-wallet transfers.\n // wads: ExchangePartner[];\n\n // // Set to true if this exchange allows the use\n // // of reserves for rewards.\n // // @deprecated in protocol v18.\n // rewards_allowed: false;\n\n // // EdDSA master public key of the exchange, used to sign entries\n // // in denoms and signkeys.\n // master_public_key: EddsaPublicKey;\n\n // // Relative duration until inactive reserves are closed;\n // // not signed (!), can change without notice.\n // reserve_closing_delay: RelativeTime;\n\n // // Threshold amounts beyond which wallet should\n // // trigger the KYC process of the issuing\n // // exchange. Optional option, if not given there is no limit.\n // // Currency must match currency.\n // wallet_balance_limit_without_kyc?: AmountString[];\n\n // // Denominations offered by this exchange\n // denominations: DenomGroup[];\n\n // // Compact EdDSA signature (binary-only) over the\n // // contatentation of all of the master_sigs (in reverse\n // // chronological order by group) in the arrays under\n // // \"denominations\". Signature of TALER_ExchangeKeySetPS\n // exchange_sig: EddsaSignature;\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 signkeys. It is given\n // // explicitly as the client might otherwise be confused by clock skew as to\n // // which signing key was used for the exchange_sig.\n // exchange_pub: EddsaPublicKey;\n\n // // Denominations for which the exchange currently offers/requests recoup.\n // recoup: Recoup[];\n\n // // Array of globally applicable fees by time range.\n // global_fees: GlobalFees[];\n\n // // The date when the denomination keys were last updated.\n // list_issue_date: Timestamp;\n\n // // Auditors of the exchange.\n // auditors: AuditorKeys[];\n\n // // The exchange's signing keys.\n // signkeys: SignKey[];\n\n // // Optional field with a dictionary of (name, object) pairs defining the\n // // supported and enabled extensions, such as age_restriction.\n // extensions?: { name: ExtensionManifest };\n\n // // Signature by the exchange master key of the SHA-256 hash of the\n // // normalized JSON-object of field extensions, if it was set.\n // // The signature has purpose TALER_SIGNATURE_MASTER_EXTENSIONS.\n // extensions_sig?: EddsaSignature;\n }\n\n interface ExtensionManifest {\n // The criticality of the extension MUST be provided. It has the same\n // semantics as \"critical\" has for extensions in X.509:\n // - if \"true\", the client must \"understand\" the extension before\n // proceeding,\n // - if \"false\", clients can safely skip extensions they do not\n // understand.\n // (see https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)\n critical: boolean;\n\n // The version information MUST be provided in Taler's protocol version\n // ranges notation, see\n // https://docs.taler.net/core/api-common.html#protocol-version-ranges\n version: LibtoolVersion;\n\n // Optional configuration object, defined by the feature itself\n config?: object;\n }\n\n interface SignKey {\n // The actual exchange's EdDSA signing public key.\n key: EddsaPublicKey;\n\n // Initial validity date for the signing key.\n stamp_start: Timestamp;\n\n // Date when the exchange will stop using the signing key, allowed to overlap\n // slightly with the next signing key's validity to allow for clock skew.\n stamp_expire: Timestamp;\n\n // Date when all signatures made by the signing key expire and should\n // henceforth no longer be considered valid in legal disputes.\n stamp_end: Timestamp;\n\n // Signature over key and stamp_expire by the exchange master key.\n // Signature of TALER_ExchangeSigningKeyValidityPS.\n // Must have purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.\n master_sig: EddsaSignature;\n }\n\n interface AuditorKeys {\n // The auditor's EdDSA signing public key.\n auditor_pub: EddsaPublicKey;\n\n // The auditor's URL.\n auditor_url: string;\n\n // The auditor's name (for humans).\n auditor_name: string;\n\n // An array of denomination keys the auditor affirms with its signature.\n // Note that the message only includes the hash of the public key, while the\n // signature is actually over the expanded information including expiration\n // times and fees. The exact format is described below.\n denomination_keys: AuditorDenominationKey[];\n }\n interface AuditorDenominationKey {\n // Hash of the public RSA key used to sign coins of the respective\n // denomination. Note that the auditor's signature covers more than just\n // the hash, but this other information is already provided in denoms and\n // thus not repeated here.\n denom_pub_h: HashCode;\n\n // Signature of TALER_ExchangeKeyValidityPS.\n auditor_sig: EddsaSignature;\n }\n\n interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: Timestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: Timestamp;\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: RelativeTime;\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: Integer;\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: RelativeTime;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: EddsaSignature;\n }\n\n interface Recoup {\n // Hash of the public key of the denomination that is being revoked under\n // emergency protocol (see /recoup).\n h_denom_pub: HashCode;\n\n // We do not include any signature here, as the primary use-case for\n // this emergency involves the exchange having lost its signing keys,\n // so such a signature here would be pretty worthless. However, the\n // exchange will not honor /recoup requests unless they are for\n // denomination keys listed here.\n }\n\n interface AggregateTransferFee {\n // Per transfer wire transfer fee.\n wire_fee: AmountString;\n\n // Per transfer closing fee.\n closing_fee: AmountString;\n\n // What date (inclusive) does this fee go into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n start_date: Timestamp;\n\n // What date (exclusive) does this fee stop going into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n end_date: Timestamp;\n\n // Signature of TALER_MasterWireFeePS with\n // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.\n sig: EddsaSignature;\n }\n\n interface ExchangePartner {\n // Base URL of the partner exchange.\n partner_base_url: string;\n\n // Public master key of the partner exchange.\n partner_master_pub: EddsaPublicKey;\n\n // Per exchange-to-exchange transfer (wad) fee.\n wad_fee: AmountString;\n\n // Exchange-to-exchange wad (wire) transfer frequency.\n wad_frequency: RelativeTime;\n\n // When did this partnership begin (under these conditions)?\n start_date: Timestamp;\n\n // How long is this partnership expected to last?\n end_date: Timestamp;\n\n // Signature using the exchange's offline key over\n // TALER_WadPartnerSignaturePS\n // with purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS.\n master_sig: EddsaSignature;\n }\n\n type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n\n // Binary representation of the age groups.\n // The bits set in the mask mark the edges at the beginning of a next age\n // group. F.e. for the age groups\n // 0-7, 8-9, 10-11, 12-13, 14-15, 16-17, 18-21, 21-*\n // the following bits are set:\n //\n // 31 24 16 8 0\n // | | | | |\n // oooooooo oo1oo1o1 o1o1o1o1 ooooooo1\n //\n // A value of 0 means that the exchange does not support the extension for\n // age-restriction.\n type AgeMask = Integer;\n\n interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n // Common attributes for all denomination groups\n interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n }\n interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignature;\n\n // When does the denomination key become valid?\n stamp_start: Timestamp;\n\n // When is it no longer possible to withdraw coins\n // of this denomination?\n stamp_expire_withdraw: Timestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_deposit: Timestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: Timestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n }\n type DenominationKey = RsaDenominationKey | CSDenominationKey;\n interface RsaDenominationKey {\n cipher: \"RSA\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // RSA public key\n rsa_public_key: RsaPublicKey;\n }\n interface CSDenominationKey {\n cipher: \"CS\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // Public key of the denomination.\n cs_public_key: Cs25519Point;\n }\n}\n\nexport namespace TalerMerchantApi {\n export interface VersionResponse {\n // libtool-style representation of the Merchant protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-merchant\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since **v8**, may become mandatory in the future.\n implementation?: string;\n\n // Default (!) currency supported by this backend.\n // This is the currency that the backend should\n // suggest by default to the user when entering\n // amounts. See currencies for a list of\n // supported currencies and how to render them.\n currency: string;\n\n // How services should render currencies supported\n // by this backend. Maps\n // currency codes (e.g. \"EUR\" or \"KUDOS\") to\n // the respective currency specification.\n // All currencies in this map are supported by\n // the backend. Note that the actual currency\n // specifications are a *hint* for applications\n // that would like *advice* on how to render amounts.\n // Applications *may* ignore the currency specification\n // if they know how to render currencies that they are\n // used with.\n currencies: { [currency: string]: CurrencySpecification };\n\n // Array of exchanges trusted by the merchant.\n // Since protocol **v6**.\n exchanges: ExchangeConfigInfo[];\n }\n\n export interface ExchangeConfigInfo {\n // Base URL of the exchange REST API.\n base_url: string;\n\n // Currency for which the merchant is configured\n // to trust the exchange.\n // May not be the one the exchange actually uses,\n // but is the only one we would trust this exchange for.\n currency: string;\n\n // Offline master public key of the exchange. The\n // /keys data must be signed with this public\n // key for us to trust it.\n master_pub: EddsaPublicKey;\n }\n export interface ClaimRequest {\n // Nonce to identify the wallet that claimed the order.\n nonce: string;\n\n // Token that authorizes the wallet to claim the order.\n // *Optional* as the merchant may not have required it\n // (create_token set to false in PostOrderRequest).\n token?: ClaimToken;\n }\n\n export interface ClaimResponse {\n // Contract terms of the claimed order\n contract_terms: ContractTerms;\n\n // Signature by the merchant over the contract terms.\n sig: EddsaSignature;\n }\n\n export interface PaymentResponse {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Text to be shown to the point-of-sale staff as a proof of\n // payment.\n pos_confirmation?: string;\n }\n\n export interface PaymentStatusRequestParams {\n // Hash of the order\u2019s contract terms (this is used to\n // authenticate the wallet/customer in case\n // $ORDER_ID is guessable).\n // Required once an order was claimed.\n contractTermHash?: string;\n // Authorizes the request via the claim token that\n // was returned in the PostOrderResponse. Used with\n // unclaimed orders only. Whether token authorization is\n // required is determined by the merchant when the\n // frontend creates the order.\n claimToken?: string;\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // If specified, the merchant backend will wait up to\n // timeout_ms milliseconds for completion of the payment\n // before sending the HTTP response. A client must never\n // rely on this behavior, as the merchant backend may return\n // a response immediately.\n timeout?: number;\n // If set to \u201Cyes\u201D, poll for the order\u2019s pending refunds\n // to be picked up. timeout_ms specifies how long we\n // will wait for the refund.\n awaitRefundObtained?: boolean;\n // Indicates that we are polling for a refund above the\n // given AMOUNT. timeout_ms will specify how long we\n // will wait for the refund.\n refund?: AmountString;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface GetKycStatusRequestParams {\n // If specified, the KYC check should return\n // the KYC status only for this wire account.\n // Otherwise, for all wire accounts.\n wireHash?: string;\n // If specified, the KYC check should return\n // the KYC status only for the given exchange.\n // Otherwise, for all exchanges we interacted with.\n exchangeURL?: string;\n // If specified, the merchant will wait up to\n // timeout_ms milliseconds for the exchanges to\n // confirm completion of the KYC process(es).\n timeout?: number;\n }\n export interface GetOtpDeviceRequestParams {\n // Timestamp in seconds to use when calculating\n // the current OTP code of the device. Since protocol v10.\n faketime?: number;\n // Price to use when calculating the current OTP\n // code of the device. Since protocol v10.\n price?: AmountString;\n }\n export interface GetOrderRequestParams {\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // Timeout in milliseconds to wait for a payment if\n // the answer would otherwise be negative (long polling).\n timeout?: number;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface ListWireTransferRequestParams {\n // Filter for transfers to the given bank account\n // (subject and amount MUST NOT be given in the payto URI).\n paytoURI?: string;\n // Filter for transfers executed before the given timestamp.\n before?: number;\n // Filter for transfers executed after the given timestamp.\n after?: number;\n // At most return the given number of results. Negative for\n // descending in execution time, positive for ascending in\n // execution time. Default is -20.\n limit?: number;\n // Starting transfer_serial_id for an iteration.\n offset?: string;\n // Filter transfers by verification status.\n verified?: boolean;\n order?: \"asc\" | \"dec\";\n }\n export interface ListOrdersRequestParams {\n // If set to yes, only return paid orders, if no only\n // unpaid orders. Do not give (or use \u201Call\u201D) to see all\n // orders regardless of payment status.\n paid?: boolean;\n // If set to yes, only return refunded orders, if no only\n // unrefunded orders. Do not give (or use \u201Call\u201D) to see\n // all orders regardless of refund status.\n refunded?: boolean;\n // If set to yes, only return wired orders, if no only\n // orders with missing wire transfers. Do not give (or\n // use \u201Call\u201D) to see all orders regardless of wire transfer\n // status.\n wired?: boolean;\n // At most return the given number of results. Negative\n // for descending by row ID, positive for ascending by\n // row ID. Default is 20. Since protocol v12.\n limit?: number;\n // Non-negative date in seconds after the UNIX Epoc, see delta\n // for its interpretation. If not specified, we default to the\n // oldest or most recent entry, depending on delta.\n date?: AbsoluteTime;\n // Starting product_serial_id for an iteration.\n // Since protocol v12.\n offset?: string;\n // Timeout in milliseconds to wait for additional orders if the\n // answer would otherwise be negative (long polling). Only useful\n // if delta is positive. Note that the merchant MAY still return\n // a response that contains fewer than delta orders.\n timeout?: number;\n // Since protocol v6. Filters by session ID.\n sessionId?: string;\n // Since protocol v6. Filters by fulfillment URL.\n fulfillmentUrl?: string;\n\n order?: \"asc\" | \"dec\";\n }\n\n export interface PayRequest {\n // The coins used to make the payment.\n coins: CoinPaySig[];\n\n // Custom inputs from the wallet for the contract.\n wallet_data?: Object;\n\n // The session for which the payment is made (or replayed).\n // Only set for session-based payments.\n session_id?: string;\n }\n export interface CoinPaySig {\n // Signature by the coin.\n coin_sig: EddsaSignature;\n\n // Public key of the coin being spent.\n coin_pub: EddsaPublicKey;\n\n // Signature made by the denomination public key.\n ub_sig: RsaSignature;\n\n // The hash of the denomination public key associated with this coin.\n h_denom: HashCode;\n\n // The amount that is subtracted from this coin with this payment.\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n }\n\n export interface StatusPaid {\n type: \"paid\";\n\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 export interface StatusGotoResponse {\n type: \"goto\";\n // The client should go to the reorder URL, there a fresh\n // order might be created as this one is taken by another\n // customer or wallet (or repurchase detection logic may\n // apply).\n public_reorder_url: string;\n }\n export interface StatusUnpaidResponse {\n type: \"unpaid\";\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n fulfillment_url?: string;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n }\n\n export interface PaidRefundStatusResponse {\n // Text to be shown to the point-of-sale staff as a proof of\n // payment (present only if reusable OTP algorithm is used).\n pos_confirmation?: string;\n\n // True if the order has been subjected to\n // refunds. False if it was simply paid.\n refunded: boolean;\n }\n export interface PaidRequest {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer and to enable signature verification without\n // database access).\n h_contract: HashCode;\n\n // Hash over custom inputs from the wallet for the contract.\n wallet_data_hash?: HashCode;\n\n // Session id for which the payment is proven.\n session_id: string;\n }\n\n export 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: HashCode;\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 interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKey;\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 export 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 export type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n // Details about why a refund failed.\n export 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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\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.\n export 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: EddsaSignature;\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: EddsaPublicKey;\n }\n\n export interface WalletRefundRequest {\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer).\n h_contract: HashCode;\n }\n export interface WalletRefundResponse {\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Successful refunds for this payment, empty array for none.\n refunds: MerchantCoinRefundStatus[];\n\n // Public key of the merchant.\n merchant_pub: EddsaPublicKey;\n }\n export type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n // Details about why a refund failed.\n export interface MerchantCoinRefundFailureStatus {\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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\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.\n export interface MerchantCoinRefundSuccessStatus {\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: EddsaSignature;\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: EddsaPublicKey;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\n }\n\n interface RewardInformation {\n // Exchange from which the reward will be withdrawn. Needed by the\n // wallet to determine denominations, fees, etc.\n exchange_url: string;\n\n // URL where to go after obtaining the reward.\n next_url: string;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n // Note that rewards that have expired MAY also result in a 404 response.\n expiration: Timestamp;\n }\n\n interface RewardPickupRequest {\n // List of planchets the wallet wants to use for the reward.\n planchets: PlanchetDetail[];\n }\n interface PlanchetDetail {\n // Hash of the denomination's public key (hashed to reduce\n // bandwidth consumption).\n denom_pub_hash: HashCode;\n\n // Coin's blinded public key.\n coin_ev: CoinEnvelope;\n }\n interface RewardResponse {\n // Blind RSA signatures over the planchets.\n // The order of the signatures matches the planchets list.\n blind_sigs: BlindSignature[];\n }\n interface BlindSignature {\n // The (blind) RSA signature. Still needs to be unblinded.\n blind_sig: BlindedRsaSignature;\n }\n\n export interface InstanceConfigurationMessage {\n // Name of the merchant instance to create (will become $INSTANCE).\n // Must match the regex ^[A-Za-z0-9][A-Za-z0-9_.@-]+$.\n id: string;\n\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Authentication settings for this instance\n auth: InstanceAuthConfigurationMessage;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstanceAuthConfigurationMessage {\n // Type of authentication.\n // \"external\": The mechant backend does not do\n // any authentication checks. Instead an API\n // gateway must do the authentication.\n // \"token\": The merchant checks an auth token.\n // See \"token\" for details.\n method: \"external\" | \"token\";\n\n // For method \"token\", this field is mandatory.\n // The token MUST begin with the string \"secret-token:\".\n // After the auth token has been set (with method \"token\"),\n // the value must be provided in a \"Authorization: Bearer $token\"\n // header.\n token?: string;\n }\n\n export interface InstanceReconfigurationMessage {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstancesResponse {\n // List of instances that are present in the backend (see Instance).\n instances: Instance[];\n }\n\n export interface Instance {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Merchant instance this response is about ($INSTANCE).\n id: string;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // List of the payment targets supported by this instance. Clients can\n // specify the desired payment target in /order requests. Note that\n // front-ends do not have to support wallets selecting payment targets.\n payment_targets: string[];\n\n // Has this instance been deleted (but not purged)?\n deleted: boolean;\n }\n\n export interface QueryInstancesResponse {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n\n // Authentication configuration.\n // Does not contain the token when token auth is configured.\n auth: {\n method: \"external\" | \"token\";\n };\n }\n\n export interface AccountKycRedirects {\n // Array of pending KYCs.\n pending_kycs: MerchantAccountKycRedirect[];\n\n // Array of exchanges with no reply.\n timeout_kycs: ExchangeKycTimeout[];\n }\n\n export interface MerchantAccountKycRedirect {\n // URL that the user should open in a browser to\n // proceed with the KYC process (as returned\n // by the exchange's /kyc-check/ endpoint).\n // Optional, missing if the account is blocked\n // due to AML and not due to KYC.\n kyc_url?: string;\n\n // AML status of the account.\n aml_status: Integer;\n\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Our bank wire account this is about.\n payto_uri: PaytoString;\n }\n\n export interface ExchangeKycTimeout {\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Numeric error code indicating errors the exchange\n // returned, or TALER_EC_INVALID for none.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information about the KYC status.\n // 0 if there was no response at all.\n exchange_http_status: number;\n }\n\n export interface AccountAddDetails {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export type FacadeCredentials =\n | NoFacadeCredentials\n | BasicAuthFacadeCredentials;\n export interface NoFacadeCredentials {\n type: \"none\";\n }\n export interface BasicAuthFacadeCredentials {\n type: \"basic\";\n\n // Username to use to authenticate\n username: string;\n\n // Password to use to authenticate\n password: string;\n }\n export interface AccountAddResponse {\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n }\n\n export interface AccountPatchDetails {\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n // If the argument is omitted, the old credentials\n // are simply preserved.\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export interface AccountsSummaryResponse {\n // List of accounts that are known for the instance.\n accounts: BankAccountSummaryEntry[];\n }\n\n // TODO: missing in docs\n export interface BankAccountSummaryEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n }\n export interface BankAccountEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // true if this account is active,\n // false if it is historic.\n active?: boolean;\n }\n\n export interface ProductAddDetail {\n // Product ID to use.\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface ProductPatchDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost?: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface InventorySummaryResponse {\n // List of products that are present in the inventory.\n products: InventoryEntry[];\n }\n\n export interface InventoryEntry {\n // Product identifier, as found in the product.\n product_id: string;\n // product_serial_id of the product in the database.\n product_serial: Integer;\n }\n\n export interface ProductDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that have already been sold.\n total_sold: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost: Integer;\n\n // Identifies where the product is in stock.\n address: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years).\n minimum_age?: Integer;\n }\n export interface LockRequest {\n // UUID that identifies the frontend performing the lock\n // Must be unique for the lifetime of the lock.\n lock_uuid: string;\n\n // How long does the frontend intend to hold the lock?\n duration: RelativeTime;\n\n // How many units should be locked?\n quantity: Integer;\n }\n\n export interface PostOrderRequest {\n // The order must at least contain the minimal\n // order detail, but can override all.\n order: Order;\n\n // If set, the backend will then set the refund deadline to the current\n // time plus the specified delay. If it's not set, refunds will not be\n // possible.\n refund_delay?: RelativeTime;\n\n // Specifies the payment target preferred by the client. Can be used\n // to select among the various (active) wire methods supported by the instance.\n payment_target?: string;\n\n // Specifies that some products are to be included in the\n // order from the inventory. For these inventory management\n // is performed (so the products must be in stock) and\n // details are completed from the product data of the backend.\n inventory_products?: MinimalInventoryProduct[];\n\n // Specifies a lock identifier that was used to\n // lock a product in the inventory. Only useful if\n // inventory_products is set. Used in case a frontend\n // reserved quantities of the individual products while\n // the shopping cart was being built. Multiple UUIDs can\n // be used in case different UUIDs were used for different\n // products (i.e. in case the user started with multiple\n // shopping sessions that were combined during checkout).\n lock_uuids?: string[];\n\n // Should a token for claiming the order be generated?\n // False can make sense if the ORDER_ID is sufficiently\n // high entropy to prevent adversarial claims (like it is\n // if the backend auto-generates one). Default is 'true'.\n create_token?: boolean;\n\n // OTP device ID to associate with the order.\n // This parameter is optional.\n otp_id?: string;\n }\n\n type Order = MinimalOrderDetail | ContractTerms;\n\n interface MinimalOrderDetail {\n // Amount to be paid by the customer.\n amount: AmountString;\n\n // Short summary of the order.\n summary: string;\n\n // See documentation of fulfillment_url in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n // When creating an order, the fulfillment URL can\n // contain ${ORDER_ID} which will be substituted with the\n // order ID of the newly created order.\n fulfillment_url?: string;\n\n // See documentation of fulfillment_message in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n }\n\n interface MinimalInventoryProduct {\n // Which product is requested (here mandatory!).\n product_id: string;\n\n // How many units of the product are requested.\n quantity: Integer;\n }\n\n export interface PostOrderResponse {\n // Order ID of the response that was just created.\n order_id: string;\n\n // Token that authorizes the wallet to claim the order.\n // Provided only if \"create_token\" was set to 'true'\n // in the request.\n token?: ClaimToken;\n }\n export interface OutOfStockResponse {\n // Product ID of an out-of-stock item.\n product_id: string;\n\n // Requested quantity.\n requested_quantity: Integer;\n\n // Available quantity (must be below requested_quantity).\n available_quantity: Integer;\n\n // When do we expect the product to be again in stock?\n // Optional, not given if unknown.\n restock_expected?: Timestamp;\n }\n\n export interface OrderHistory {\n // Timestamp-sorted array of all orders matching the query.\n // The order of the sorting depends on the sign of delta.\n orders: OrderHistoryEntry[];\n }\n export interface OrderHistoryEntry {\n // Order ID of the transaction related to this entry.\n order_id: string;\n\n // Row ID of the order in the database.\n row_id: number;\n\n // When the order was created.\n timestamp: Timestamp;\n\n // The amount of money the order is for.\n amount: AmountString;\n\n // The summary of the order.\n summary: string;\n\n // Whether some part of the order is refundable,\n // that is the refund deadline has not yet expired\n // and the total amount refunded so far is below\n // the value of the original transaction.\n refundable: boolean;\n\n // Whether the order has been paid or not.\n paid: boolean;\n }\n\n export type MerchantOrderStatusResponse =\n | CheckPaymentPaidResponse\n | CheckPaymentClaimedResponse\n | CheckPaymentUnpaidResponse;\n export interface CheckPaymentPaidResponse {\n // The customer paid for this contract.\n order_status: \"paid\";\n\n // Was the payment refunded (even partially)?\n refunded: boolean;\n\n // True if there are any approved refunds that the wallet has\n // not yet obtained.\n refund_pending: boolean;\n\n // Did the exchange wire us the funds?\n wired: boolean;\n\n // Total amount the exchange deposited into our bank account\n // for this contract, excluding fees.\n deposit_total: AmountString;\n\n // Numeric error code indicating errors the exchange\n // encountered tracking the wire transfer for this purchase (before\n // we even got to specific coin issues).\n // 0 if there were no issues.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information to track the wire transfer for this purchase.\n // 0 if there were no issues.\n exchange_http_status: number;\n\n // Total amount that was refunded, 0 if refunded is false.\n refund_amount: AmountString;\n\n // Contract terms.\n contract_terms: ContractTerms;\n\n // The wire transfer status from the exchange for this order if\n // available, otherwise empty array.\n wire_details: TransactionWireTransfer[];\n\n // Reports about trouble obtaining wire transfer details,\n // empty array if no trouble were encountered.\n wire_reports: TransactionWireReport[];\n\n // The refund details for this order. One entry per\n // refunded coin; empty array if there are no refunds.\n refund_details: RefundDetails[];\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n }\n export interface CheckPaymentClaimedResponse {\n // A wallet claimed the order, but did not yet pay for the contract.\n order_status: \"claimed\";\n\n // Contract terms.\n contract_terms: ContractTerms;\n }\n export interface CheckPaymentUnpaidResponse {\n // The order was neither claimed nor paid.\n order_status: \"unpaid\";\n\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // when was the order created\n creation_time: Timestamp;\n\n // Order summary text.\n summary: string;\n\n // Total amount of the order (to be paid by the customer).\n total_amount: AmountString;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n\n // Fulfillment URL of an already paid order. Only given if under this\n // session an already paid order with a fulfillment URL exists.\n already_paid_fulfillment_url?: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n\n // We do we NOT return the contract terms here because they may not\n // exist in case the wallet did not yet claim them.\n }\n export interface RefundDetails {\n // Reason given for the refund.\n reason: string;\n\n // Set to true if a refund is still available for the wallet for this payment.\n pending: boolean;\n\n // When was the refund approved.\n timestamp: Timestamp;\n\n // Total amount that was refunded (minus a refund fee).\n amount: AmountString;\n }\n export interface TransactionWireTransfer {\n // Responsible exchange.\n exchange_url: string;\n\n // 32-byte wire transfer identifier.\n wtid: Base32;\n\n // Execution time of the wire transfer.\n execution_time: Timestamp;\n\n // Total amount that has been wire transferred\n // to the merchant.\n amount: AmountString;\n\n // Was this transfer confirmed by the merchant via the\n // POST /transfers API, or is it merely claimed by the exchange?\n confirmed: boolean;\n }\n export interface TransactionWireReport {\n // Numerical error code.\n code: number;\n\n // Human-readable error description.\n hint: string;\n\n // Numerical error code from the exchange.\n exchange_code: number;\n\n // HTTP status code received from the exchange.\n exchange_http_status: number;\n\n // Public key of the coin for which we got the exchange error.\n coin_pub: CoinPublicKey;\n }\n\n export interface ForgetRequest {\n // Array of valid JSON paths to forgettable fields in the order's\n // contract terms.\n fields: string[];\n }\n\n export interface RefundRequest {\n // Amount to be refunded.\n refund: AmountString;\n\n // Human-readable refund justification.\n reason: string;\n }\n export interface MerchantRefundResponse {\n // URL (handled by the backend) that the wallet should access to\n // trigger refund processing.\n // taler://refund/...\n taler_refund_uri: string;\n\n // Contract hash that a client may need to authenticate an\n // HTTP request to obtain the above URI in a wallet-friendly way.\n h_contract: HashCode;\n }\n\n export interface TransferInformation {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n }\n\n export interface TransferList {\n // List of all the transfers that fit the filter that we know.\n transfers: TransferDetails[];\n }\n export interface TransferDetails {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n\n // Serial number identifying the transfer in the merchant backend.\n // Used for filtering via offset.\n transfer_serial_id: number;\n\n // Time of the execution of the wire transfer by the exchange, according to the exchange\n // Only provided if we did get an answer from the exchange.\n execution_time?: Timestamp;\n\n // True if we checked the exchange's answer and are happy with it.\n // False if we have an answer and are unhappy, missing if we\n // do not have an answer from the exchange.\n verified?: boolean;\n\n // True if the merchant uses the POST /transfers API to confirm\n // that this wire transfer took place (and it is thus not\n // something merely claimed by the exchange).\n confirmed?: boolean;\n }\n\n interface ReserveCreateRequest {\n // Amount that the merchant promises to put into the reserve.\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for rewards.\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\".\n wire_method: string;\n }\n interface ReserveCreateConfirmation {\n // Public key identifying the reserve.\n reserve_pub: EddsaPublicKey;\n\n // Wire accounts of the exchange where to transfer the funds.\n accounts: TalerExchangeApi.WireAccount[];\n }\n\n interface RewardReserveStatus {\n // Array of all known reserves (possibly empty!).\n reserves: ReserveStatusEntry[];\n }\n interface ReserveStatusEntry {\n // Public key of the reserve.\n reserve_pub: EddsaPublicKey;\n\n // Timestamp when it was established.\n creation_time: Timestamp;\n\n // Timestamp when it expires.\n expiration_time: Timestamp;\n\n // Initial amount as per reserve creation call.\n merchant_initial_amount: AmountString;\n\n // Initial amount as per exchange, 0 if exchange did\n // not confirm reserve creation yet.\n exchange_initial_amount: AmountString;\n\n // Amount picked up so far.\n pickup_amount: AmountString;\n\n // Amount approved for rewards that exceeds the pickup_amount.\n committed_amount: AmountString;\n\n // Is this reserve active (false if it was deleted but not purged)?\n active: boolean;\n }\n\n interface ReserveDetail {\n // Timestamp when it was established.\n creation_time: Timestamp;\n\n // Timestamp when it expires.\n expiration_time: Timestamp;\n\n // Initial amount as per reserve creation call.\n merchant_initial_amount: AmountString;\n\n // Initial amount as per exchange, 0 if exchange did\n // not confirm reserve creation yet.\n exchange_initial_amount: AmountString;\n\n // Amount picked up so far.\n pickup_amount: AmountString;\n\n // Amount approved for rewards that exceeds the pickup_amount.\n committed_amount: AmountString;\n\n // Array of all rewards created by this reserves (possibly empty!).\n // Only present if asked for explicitly.\n rewards?: RewardStatusEntry[];\n\n // Is this reserve active (false if it was deleted but not purged)?\n active: boolean;\n\n // Array of wire accounts of the exchange that could\n // be used to fill the reserve, can be NULL\n // if the reserve is inactive or was already filled\n accounts?: TalerExchangeApi.WireAccount[];\n\n // URL of the exchange hosting the reserve,\n // NULL if the reserve is inactive\n exchange_url: string;\n }\n interface RewardStatusEntry {\n // Unique identifier for the reward.\n reward_id: HashCode;\n\n // Total amount of the reward that can be withdrawn.\n total_amount: AmountString;\n\n // Human-readable reason for why the reward was granted.\n reason: string;\n }\n\n interface RewardCreateRequest {\n // Amount that the customer should be rewarded.\n amount: AmountString;\n\n // Justification for giving the reward.\n justification: string;\n\n // URL that the user should be directed to after receiving the reward,\n // will be included in the reward_token.\n next_url: string;\n }\n interface RewardCreateConfirmation {\n // Unique reward identifier for the reward that was created.\n reward_id: HashCode;\n\n // taler://reward URI for the reward.\n taler_reward_uri: string;\n\n // URL that will directly trigger processing\n // the reward when the browser is redirected to it.\n reward_status_url: string;\n\n // When does the reward expire?\n reward_expiration: Timestamp;\n }\n\n interface RewardDetails {\n // Amount that we authorized for this reward.\n total_authorized: AmountString;\n\n // Amount that was picked up by the user already.\n total_picked_up: AmountString;\n\n // Human-readable reason given when authorizing the reward.\n reason: string;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n expiration: Timestamp;\n\n // Reserve public key from which the reward is funded.\n reserve_pub: EddsaPublicKey;\n\n // Array showing the pickup operations of the wallet (possibly empty!).\n // Only present if asked for explicitly.\n pickups?: PickupDetail[];\n }\n interface PickupDetail {\n // Unique identifier for the pickup operation.\n pickup_id: HashCode;\n\n // Number of planchets involved.\n num_planchets: Integer;\n\n // Total amount requested for this pickup_id.\n requested_amount: AmountString;\n }\n\n interface RewardsResponse {\n // List of rewards that are present in the backend.\n rewards: Reward[];\n }\n interface Reward {\n // ID of the reward in the backend database.\n row_id: number;\n\n // Unique identifier for the reward.\n reward_id: HashCode;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n }\n\n export interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n // \"NONE\" or 0: No algorithm (no pos confirmation will be generated)\n // \"TOTP_WITHOUT_PRICE\" or 1: Without amounts (typical OTP device)\n // \"TOTP_WITH_PRICE\" or 2: With amounts (special-purpose OTP device)\n // The \"String\" variants are supported @since protocol **v7**.\n otp_algorithm: Integer | string;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDevicePatchDetails {\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDeviceSummaryResponse {\n // Array of devices that are present in our backend.\n otp_devices: OtpDeviceEntry[];\n }\n export interface OtpDeviceEntry {\n // Device identifier.\n otp_device_id: string;\n\n // Human-readable description for the device.\n device_description: string;\n }\n\n export interface OtpDeviceDetails {\n // Human-readable description for the device.\n device_description: string;\n\n // Algorithm for computing the POS confirmation.\n //\n // Currently, the following numbers are defined:\n // 0: None\n // 1: TOTP without price\n // 2: TOTP with price\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n\n // Current time for time-based OTP devices.\n // Will match the faketime argument of the\n // query if one was present, otherwise the current\n // time at the backend.\n //\n // Available since protocol **v10**.\n otp_timestamp: Integer;\n\n // Current OTP confirmation string of the device.\n // Matches exactly the string that would be returned\n // as part of a payment confirmation for the given\n // amount and time (so may contain multiple OTP codes).\n //\n // If the otp_algorithm is time-based, the code is\n // returned for the current time, or for the faketime\n // if a TIMESTAMP query argument was provided by the client.\n //\n // When using OTP with counters, the counter is **NOT**\n // increased merely because this endpoint created\n // an OTP code (this is a GET request, after all!).\n //\n // If the otp_algorithm requires an amount, the\n // amount argument must be specified in the\n // query, otherwise the otp_code is not\n // generated.\n //\n // This field is *optional* in the response, as it is\n // only provided if we could compute it based on the\n // otp_algorithm and matching client query arguments.\n //\n // Available since protocol **v10**.\n otp_code?: string;\n }\n export interface TemplateAddDetails {\n // Template ID to use.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n\n }\n export interface TemplateContractDetails {\n // Human-readable summary for the template.\n summary?: string;\n\n // Required currency for payments to the template.\n // The user may specify any amount, but it must be\n // in this currency.\n // This parameter is optional and should not be present\n // if \"amount\" is given.\n currency?: string;\n\n // The price is imposed by the merchant and cannot be changed by the customer.\n // This parameter is optional.\n amount?: AmountString;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age: Integer;\n\n // The time the customer need to pay before his order will be deleted.\n // It is deleted if the customer did not pay and if the duration is over.\n pay_duration: RelativeTime;\n }\n\n export interface TemplateContractDetailsDefaults {\n summary?: string;\n\n currency?: string;\n\n amount?: AmountString;\n\n minimum_age?: Integer;\n\n pay_duration?: RelativeTime;\n }\n export interface TemplatePatchDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n\n }\n\n export interface TemplateSummaryResponse {\n // List of templates that are present in our backend.\n templates: TemplateEntry[];\n }\n\n export interface TemplateEntry {\n // Template identifier, as found in the template.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n }\n\n export interface WalletTemplateDetails {\n // Hard-coded information about the contrac terms\n // for this template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface UsingTemplateDetails {\n // Summary of the template\n summary?: string;\n\n // The amount entered by the customer.\n amount?: AmountString;\n }\n\n export interface WebhookAddDetails {\n // Webhook ID to use.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookPatchDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookSummaryResponse {\n // Return webhooks that are present in our backend.\n webhooks: WebhookEntry[];\n }\n\n export interface WebhookEntry {\n // Webhook identifier, as found in the webhook.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n }\n\n export interface WebhookDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface TokenFamilyCreateRequest {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n // If not specified, merchant backend will use the current time.\n valid_after?: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export enum TokenFamilyKind {\n Discount = \"discount\",\n Subscription = \"subscription\",\n }\n\n export interface TokenFamilyUpdateRequest {\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n }\n\n export interface TokenFamiliesList {\n // All configured token families of this instance.\n token_families: TokenFamilySummary[];\n }\n\n export interface TokenFamilySummary {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export interface TokenFamilyDetails {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n\n // How many tokens have been issued for this family.\n issued: Integer;\n\n // How many tokens have been redeemed for this family.\n redeemed: Integer;\n }\n export interface ContractTerms {\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: { [lang_tag: string]: string };\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: AmountString;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional. When POSTing to the\n // merchant, the placeholder \"${ORDER_ID}\" will be\n // replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL).\n // Note that this placeholder can only be used once.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: { [lang_tag: string]: string };\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: AmountString;\n\n // List of products that are part of the purchase (see Product).\n products: Product[];\n\n // Time when this contract was generated.\n timestamp: Timestamp;\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: Timestamp;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: Timestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: Timestamp;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: EddsaPublicKey;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // More info about the merchant, see below.\n merchant: Merchant;\n\n // The hash of the merchant instance's wire details.\n h_wire: HashCode;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: Exchange[];\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: Timestamp;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: RelativeTime;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\n }\n\n export 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?: Integer;\n\n // 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?: ImageDataUrl;\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?: Timestamp;\n }\n\n export interface Tax {\n // The name of the tax.\n name: string;\n\n // Amount paid in tax.\n tax: AmountString;\n }\n export interface Merchant {\n // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\n }\n // Delivery location, loosely modeled as a subset of\n // ISO20022's PostalAddress25.\n export 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 interface Auditor {\n // Official name.\n name: string;\n\n // Auditor's public key.\n auditor_pub: EddsaPublicKey;\n\n // Base URL of the auditor.\n url: string;\n }\n export interface Exchange {\n // The exchange's base URL.\n url: string;\n\n // How much would the merchant like to use this exchange.\n // The wallet should use a suitable exchange with high\n // priority. The following priority values are used, but\n // it should be noted that they are NOT in any way normative.\n //\n // 0: likely it will not work (recently seen with account\n // restriction that would be bad for this merchant)\n // 512: merchant does not know, might be down (merchant\n // did not yet get /wire response).\n // 1024: good choice (recently confirmed working)\n priority: Integer;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKey;\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 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\n/**\n * Imports.\n */\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http.js\";\n\n/**\n * Implementation of the HTTP request library interface for node.\n */\nexport class HttpLibImpl implements HttpRequestLibrary {\n fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n throw new Error(\"Method not implemented.\");\n }\n}\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 * Helpers for doing XMLHttpRequest-s that are based on ES6 promises.\n * Allows for easy mocking for test cases.\n *\n * The API is inspired by the HTML5 fetch API.\n */\n\n/**\n * Imports\n */\n\nimport * as impl from \"#http-impl\";\nimport * as common from \"./http-common.js\";\n\nexport * from \"./http-common.js\";\n\nexport function createPlatformHttpLib(\n args?: common.HttpLibArgs,\n): common.HttpRequestLibrary {\n return new impl.HttpLibImpl(args);\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) 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 { codecForAny } from \"./codec.js\";\nimport {\n TalerMerchantApi,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n} from \"./http-client/types.js\";\nimport { HttpStatusCode } from \"./http-status-codes.js\";\nimport {\n createPlatformHttpLib,\n expectSuccessResponseOrThrow,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http.js\";\nimport { FacadeCredentials } from \"./libeufin-api-types.js\";\nimport { LibtoolVersion } from \"./libtool-version.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n MerchantInstancesResponse,\n MerchantPostOrderRequest,\n MerchantPostOrderResponse,\n MerchantTemplateAddDetails,\n codecForMerchantPostOrderResponse,\n} from \"./merchant-api-types.js\";\nimport {\n FailCasesByMethod,\n OperationFail,\n OperationOk,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"./operation.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { TalerProtocolDuration } from \"./time.js\";\n\nconst logger = new Logger(\"MerchantApiClient.ts\");\n\n// FIXME: Explain!\nexport type TalerMerchantResultByMethod<prop extends keyof MerchantApiClient> =\n ResultByMethod<MerchantApiClient, prop>;\n\n// FIXME: Explain!\nexport type TalerMerchantErrorsByMethod<prop extends keyof MerchantApiClient> =\n FailCasesByMethod<MerchantApiClient, prop>;\n\nexport interface MerchantAuthConfiguration {\n method: \"external\" | \"token\";\n token?: string;\n}\n\n// FIXME: Why do we need this? Describe / fix!\nexport interface PartialMerchantInstanceConfig {\n auth?: MerchantAuthConfiguration;\n id: string;\n name: string;\n paytoUris: string[];\n address?: unknown;\n jurisdiction?: unknown;\n defaultWireTransferDelay?: TalerProtocolDuration;\n defaultPayDelay?: TalerProtocolDuration;\n}\n\nexport interface CreateMerchantTippingReserveRequest {\n // Amount that the merchant promises to put into the reserve\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for tipping\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\"\n wire_method: string;\n}\n\nexport interface DeleteTippingReserveArgs {\n reservePub: string;\n purge?: boolean;\n}\n\ninterface MerchantBankAccount {\n // The payto:// URI where the wallet will send coins.\n payto_uri: string;\n\n // Optional base URL for a facade where the\n // merchant backend can see incoming wire\n // transfers to reconcile its accounting\n // with that of the exchange. Used by\n // taler-merchant-wirewatch.\n credit_facade_url?: string;\n\n // Credentials for accessing the credit facade.\n credit_facade_credentials?: FacadeCredentials;\n}\n\nexport interface MerchantInstanceConfig {\n auth: MerchantAuthConfiguration;\n id: string;\n name: string;\n address: unknown;\n jurisdiction: unknown;\n use_stefan: boolean;\n default_wire_transfer_delay: TalerProtocolDuration;\n default_pay_delay: TalerProtocolDuration;\n}\n\nexport interface PrivateOrderStatusQuery {\n instance?: string;\n orderId: string;\n sessionId?: string;\n}\n\nexport interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A base64-encoded key\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: number;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: number;\n}\n\n/**\n * Client for the GNU Taler merchant backend.\n */\nexport class MerchantApiClient {\n /**\n * Base URL for the particular instance that this merchant API client\n * is for.\n */\n private baseUrl: string;\n\n readonly auth: MerchantAuthConfiguration;\n\n public readonly PROTOCOL_VERSION = \"6:0:2\";\n\n constructor(\n baseUrl: string,\n options: { auth?: MerchantAuthConfiguration } = {},\n ) {\n this.baseUrl = baseUrl;\n\n this.auth = options?.auth ?? {\n method: \"external\",\n };\n }\n\n httpClient = createPlatformHttpLib();\n\n async changeAuth(auth: MerchantAuthConfiguration): Promise<void> {\n const url = new URL(\"private/auth\", this.baseUrl);\n const res = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: auth,\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(res);\n }\n\n async getPrivateInstanceInfo(): Promise<any> {\n const url = new URL(\"private\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n return await resp.json();\n }\n\n async deleteInstance(instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(resp);\n }\n\n async createInstance(req: MerchantInstanceConfig): Promise<void> {\n const url = new URL(\"management/instances\", this.baseUrl);\n await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n }\n\n async getInstances(): Promise<MerchantInstancesResponse> {\n const url = new URL(\"management/instances\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getInstanceFullDetails(instanceId: string): Promise<any> {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n try {\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return resp.json();\n } catch (e) {\n throw e;\n }\n }\n\n async createOrder(\n req: MerchantPostOrderRequest,\n ): Promise<MerchantPostOrderResponse> {\n let url = new URL(\"private/orders\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantPostOrderResponse(),\n );\n }\n\n async deleteOrder(req: { orderId: string; force?: boolean }): Promise<void> {\n let url = new URL(`private/orders/${req.orderId}`, this.baseUrl);\n if (req.force) {\n url.searchParams.set(\"force\", \"yes\");\n }\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n if (resp.status !== 204) {\n throw Error(`failed to delete order (status ${resp.status})`);\n }\n }\n\n async queryPrivateOrderStatus(\n query: PrivateOrderStatusQuery,\n ): Promise<TalerMerchantApi.MerchantOrderStatusResponse> {\n const reqUrl = new URL(`private/orders/${query.orderId}`, this.baseUrl);\n if (query.sessionId) {\n reqUrl.searchParams.set(\"session_id\", query.sessionId);\n }\n const resp = await this.httpClient.fetch(reqUrl.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n }\n\n async giveRefund(r: {\n instance: string;\n orderId: string;\n amount: string;\n justification: string;\n }): Promise<{ talerRefundUri: string }> {\n const reqUrl = new URL(`private/orders/${r.orderId}/refund`, this.baseUrl);\n const resp = await this.httpClient.fetch(reqUrl.href, {\n method: \"POST\",\n body: {\n refund: r.amount,\n reason: r.justification,\n },\n });\n const respBody = await resp.json();\n return {\n talerRefundUri: respBody.taler_refund_uri,\n };\n }\n\n async createTemplate(req: MerchantTemplateAddDetails) {\n let url = new URL(\"private/templates\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async getTemplate(templateId: string) {\n let url = new URL(`private/templates/${templateId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAny());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig(): Promise<OperationOk<TalerMerchantApi.VersionResponse>> {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async createOtpDevice(\n req: OtpDeviceAddDetails,\n ): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>> {\n let url = new URL(\"private/otp-devices\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n private makeAuthHeader(): Record<string, string> {\n switch (this.auth.method) {\n case \"external\":\n return {};\n case \"token\":\n return {\n Authorization: `Bearer ${this.auth.token}`,\n };\n }\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 TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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", "/*\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 { codecForAmountString } from \"./amounts.js\";\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\", codecForAmountString())\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\", codecForAmountString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"closing_fee\", codecForAmountString())\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\", codecForAmountString())\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 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, Duration } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\n/**\n * Logger.\n */\nconst logger = new Logger(\"OperationThrottler.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 task.\n */\nclass TaskState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n 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 TaskThrottler {\n private perTaskInfo: { [taskId: string]: TaskState } = {};\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): TaskState {\n const s = this.perTaskInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perTaskInfo[origin] = new TaskState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(taskId: string): boolean {\n for (let [k, v] of Object.entries(this.perTaskInfo)) {\n // Remove throttled tasks that haven't seen an update in more than one hour.\n if (\n Duration.cmp(\n AbsoluteTime.difference(v.lastUpdate, AbsoluteTime.now()),\n Duration.fromSpec({ hours: 1 }),\n ) > 1\n ) {\n delete this.perTaskInfo[k];\n }\n }\n return this.getState(taskId).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(taskId: string): Record<string, unknown> {\n const state = this.getState(taskId);\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", "/*\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 * Client for the Taler (demo-)bank.\n */\n\n/**\n * Imports.\n */\nimport {\n AmountString,\n base64FromArrayBuffer,\n buildCodecForObject,\n Codec,\n codecForAny,\n codecForString,\n encodeCrock,\n getRandomBytes,\n HttpStatusCode,\n j2s,\n Logger,\n opEmptySuccess,\n opKnownHttpFailure,\n opUnknownFailure,\n stringToBytes,\n TalerError,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n checkSuccessResponseOrThrow,\n createPlatformHttpLib,\n HttpRequestLibrary,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"bank-api-client.ts\");\n\nexport enum CreditDebitIndicator {\n Credit = \"credit\",\n Debit = \"debit\",\n}\n\nexport interface BankAccountBalanceResponse {\n balance: {\n amount: AmountString;\n credit_debit_indicator: CreditDebitIndicator;\n };\n}\n\nexport interface BankUser {\n username: string;\n password: string;\n accountPaytoUri: string;\n}\n\nexport interface WithdrawalOperationInfo {\n withdrawal_id: string;\n taler_withdraw_uri: string;\n}\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nfunction makeBasicAuthHeader(username: string, password: string): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\nconst codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>\n buildCodecForObject<WithdrawalOperationInfo>()\n .property(\"withdrawal_id\", codecForString())\n .property(\"taler_withdraw_uri\", codecForString())\n .build(\"WithdrawalOperationInfo\");\n\nexport interface BankAccessApiClientArgs {\n auth?: { username: string; password: string };\n httpClient?: HttpRequestLibrary;\n}\n\nexport interface BankAccessApiCreateTransactionRequest {\n amount: AmountString;\n paytoUri: string;\n}\n\nexport class WireGatewayApiClientArgs {\n auth?: {\n username: string;\n password: string;\n };\n httpClient?: HttpRequestLibrary;\n}\n\n/**\n * This API look like it belongs to harness\n * but it will be nice to have in utils to be used by others\n */\nexport class WireGatewayApiClient {\n httpLib;\n\n constructor(\n private baseUrl: string,\n private args: WireGatewayApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n private makeAuthHeader(): Record<string, string> {\n const auth = this.args.auth;\n if (auth) {\n return {\n Authorization: makeBasicAuthHeader(auth.username, auth.password),\n };\n }\n return {};\n }\n\n async adminAddIncoming(params: {\n amount: string;\n reservePub: string;\n debitAccountPayto: string;\n }): Promise<void> {\n let url = new URL(`admin/add-incoming`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount: params.amount,\n reserve_pub: params.reservePub,\n debit_account: params.debitAccountPayto,\n },\n headers: this.makeAuthHeader(),\n });\n logger.info(`add-incoming response status: ${resp.status}`);\n await checkSuccessResponseOrThrow(resp);\n }\n}\n\nexport interface ChallengeContactData {\n // E-Mail address\n email?: string;\n\n // Phone number.\n phone?: string;\n}\n\nexport interface AccountBalance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n}\n\nexport interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n challenge_contact_data?: ChallengeContactData;\n\n // 'payto' address pointing a bank account\n // external to the libeufin-bank.\n // Payments will be sent to this bank account\n // when the user wants to convert the local currency\n // back to fiat currency outside libeufin-bank.\n cashout_payto_uri?: string;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: string;\n}\n\nexport interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: AccountBalance;\n\n // payto://-URI of the account.\n payto_uri: string;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: string;\n}\n\nexport interface ConfirmWithdrawalArgs {\n withdrawalOperationId: string;\n}\n\n/**\n * Client for the Taler corebank API.\n */\nexport class TalerCorebankApiClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n private baseUrl: string,\n private args: BankAccessApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n setAuth(auth: { username: string; password: string }) {\n this.args.auth = auth;\n }\n\n private makeAuthHeader(): Record<string, string> {\n if (!this.args.auth) {\n return {};\n }\n const authHeaderValue = makeBasicAuthHeader(\n this.args.auth.username,\n this.args.auth.password,\n );\n return {\n Authorization: authHeaderValue,\n };\n }\n\n async getAccountBalance(\n username: string,\n ): Promise<BankAccountBalanceResponse> {\n const url = new URL(`accounts/${username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getTransactions(username: string): Promise<void> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"GET\",\n headers: {\n ...this.makeAuthHeader(),\n },\n });\n\n const res = await readSuccessResponseJsonOrThrow(resp, codecForAny());\n logger.info(`result: ${j2s(res)}`);\n }\n\n async createTransaction(\n username: string,\n req: BankAccessApiCreateTransactionRequest,\n ): Promise<any> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n return await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async registerAccountExtended(req: RegisterAccountRequest): Promise<void> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n }\n\n /**\n * Register a new account and return information about it.\n *\n * This is a helper, as it does both the registration and the\n * account info query.\n */\n async registerAccount(username: string, password: string): Promise<BankUser> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n username,\n password,\n name: username,\n },\n headers: this.makeAuthHeader(),\n });\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n // FIXME: Corebank should directly return this info!\n const infoUrl = new URL(`accounts/${username}`, this.baseUrl);\n const infoResp = await this.httpLib.fetch(infoUrl.href, {\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n });\n // FIXME: Validate!\n const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(\n infoResp,\n codecForAny(),\n );\n return {\n password,\n username,\n accountPaytoUri: acctInfo.payto_uri,\n };\n }\n\n async createRandomBankUser(): Promise<BankUser> {\n const username = \"user-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n const password = \"pw-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n return await this.registerAccount(username, password);\n }\n\n async createWithdrawalOperation(\n user: string,\n amount: string,\n ): Promise<WithdrawalOperationInfo> {\n const url = new URL(`accounts/${user}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount,\n },\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForWithdrawalOperationInfo(),\n );\n }\n\n async confirmWithdrawalOperation(\n username: string,\n wopi: ConfirmWithdrawalArgs,\n ) {\n const url = new URL(\n `accounts/${username}/withdrawals/${wopi.withdrawalOperationId}/confirm`,\n this.baseUrl,\n );\n logger.info(`confirming withdrawal operation via ${url.href}`);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async abortWithdrawalOperation(wopi: WithdrawalOperationInfo): Promise<void> {\n const url = new URL(\n `withdrawals/${wopi.withdrawal_id}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n}\n", "// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then\n// use window.btoa' step. According to my tests, this appears to be a faster approach:\n// http://jsperf.com/encoding-xhr-image-data/5\n\n/*\nMIT LICENSE\nCopyright 2011 Jon Leighton\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function base64FromArrayBuffer(arrayBuffer: ArrayBuffer): string {\n var base64 = \"\";\n var encodings =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n var bytes = new Uint8Array(arrayBuffer);\n var byteLength = bytes.byteLength;\n var byteRemainder = byteLength % 3;\n var mainLength = byteLength - byteRemainder;\n\n var a, b, c, d;\n var chunk;\n\n // Main loop deals with bytes in chunks of 3\n for (var i = 0; i < mainLength; i = i + 3) {\n // Combine the three bytes into a single integer\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n\n // Use bitmasks to extract 6-bit segments from the triplet\n a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12\n c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6\n d = chunk & 63; // 63 = 2^6 - 1\n\n // Convert the raw binary segments to the appropriate ASCII encoding\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n }\n\n // Deal with the remaining bytes and padding\n if (byteRemainder == 1) {\n chunk = bytes[mainLength];\n\n a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n\n // Set the 4 least significant bits to zero\n b = (chunk & 3) << 4; // 3 = 2^2 - 1\n\n base64 += encodings[a] + encodings[b] + \"==\";\n } else if (byteRemainder == 2) {\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n\n a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4\n\n // Set the 2 least significant bits to zero\n c = (chunk & 15) << 2; // 15 = 2^4 - 1\n\n base64 += encodings[a] + encodings[b] + encodings[c] + \"=\";\n }\n\n return base64;\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\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) 2019-2020 Taler Systems SA\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Classes and helpers for error handling specific to wallet operations.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport {\n AbsoluteTime,\n CancellationToken,\n PaymentInsufficientBalanceDetails,\n TalerErrorCode,\n TalerErrorDetail,\n TransactionType,\n} from \"@gnu-taler/taler-util\";\n\ntype empty = Record<string, never>;\n\nexport interface DetailsMap {\n [TalerErrorCode.WALLET_PENDING_OPERATION_FAILED]: {\n innerError: TalerErrorDetail;\n transactionId?: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT]: {\n exchangeBaseUrl: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE]: {\n exchangeProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK]: empty;\n [TalerErrorCode.WALLET_REWARD_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_ORDER_ALREADY_CLAIMED]: {\n orderId: string;\n claimUrl: string;\n };\n [TalerErrorCode.WALLET_ORDER_ALREADY_PAID]: {\n orderId: string;\n fulfillmentUrl: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_MALFORMED]: empty;\n [TalerErrorCode.WALLET_CONTRACT_TERMS_SIGNATURE_INVALID]: {\n merchantPub: string;\n orderId: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_BASE_URL_MISMATCH]: {\n baseUrlForDownload: string;\n baseUrlFromContractTerms: string;\n };\n [TalerErrorCode.WALLET_INVALID_TALER_PAY_URI]: {\n talerPayUri: string;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n errorResponse?: any;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION]: {\n stack?: string;\n };\n [TalerErrorCode.WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE]: {\n bankProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN]: {\n operation: string;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED]: {\n requestUrl: string;\n requestMethod: string;\n throttleStats: Record<string, unknown>;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.WALLET_NETWORK_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n };\n [TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n validationError?: string;\n /**\n * Content type of the response, usually only specified if not the\n * expected content type.\n */\n contentType?: string;\n };\n [TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR]: {\n operation: string;\n error: string;\n detail: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: {\n numErrors: number;\n errorsPerCoin: Record<number, TalerErrorDetail>;\n };\n [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: {\n lastError?: TalerErrorDetail;\n };\n [TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR]: {\n httpStatusCode: number;\n };\n [TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR]: {\n requestError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_ERROR]: {\n innerError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_BAD_REQUEST]: {\n detail: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED]: {\n kycUrl: string;\n };\n [TalerErrorCode.WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_REFRESH_GROUP_INCOMPLETE]: {\n numErrors: number;\n /**\n * Errors, can be truncated.\n */\n errors: TalerErrorDetail[];\n };\n [TalerErrorCode.WALLET_EXCHANGE_BASE_URL_MISMATCH]: {\n urlWallet: string;\n urlExchange: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_UNAVAILABLE]: {\n exchangeBaseUrl: string;\n innerError: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_DB_UNAVAILABLE]: {\n innerError: TalerErrorDetail | undefined;\n };\n}\n\ntype ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : empty;\n\nexport function makeErrorDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n): TalerErrorDetail {\n if (!hint && !(detail as any).hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return { code, when, hint, ...detail };\n}\n\nexport function makePendingOperationFailedError(\n innerError: TalerErrorDetail,\n tag: TransactionType,\n uid: string,\n): TalerError {\n return TalerError.fromDetail(TalerErrorCode.WALLET_PENDING_OPERATION_FAILED, {\n innerError,\n transactionId: `${tag}:${uid}`,\n });\n}\n\nexport function summarizeTalerErrorDetail(ed: TalerErrorDetail): string {\n const errName = TalerErrorCode[ed.code] ?? \"<unknown>\";\n return `Error (${ed.code}/${errName})`;\n}\n\nfunction getDefaultHint(code: number): string {\n const errName = TalerErrorCode[code];\n if (errName) {\n return `Error (${errName})`;\n } else {\n return `Error (<unknown>)`;\n }\n}\n\nexport class TalerProtocolViolationError extends Error {\n constructor(hint?: string) {\n let msg: string;\n if (hint) {\n msg = `Taler protocol violation error (${hint})`;\n } else {\n msg = `Taler protocol violation error`;\n }\n super(msg);\n Object.setPrototypeOf(this, TalerProtocolViolationError.prototype);\n }\n}\n\n// compute a subset of TalerError, just for http request\ntype HttpErrors =\n | TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT\n | TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED\n | TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE\n | TalerErrorCode.WALLET_NETWORK_ERROR\n | TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR;\n\ntype TalerHttpErrorsDetails = {\n [code in HttpErrors]: TalerError<DetailsMap[code]>;\n};\n\nexport type TalerHttpError =\n TalerHttpErrorsDetails[keyof TalerHttpErrorsDetails];\n\nexport class TalerError<T = any> extends Error {\n errorDetail: TalerErrorDetail & T;\n cause: Error | undefined;\n private constructor(d: TalerErrorDetail & T, cause?: Error) {\n super(d.hint ?? `Error (code ${d.code})`);\n this.errorDetail = d;\n this.cause = cause;\n Object.setPrototypeOf(this, TalerError.prototype);\n }\n\n static fromDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n cause?: Error,\n ): TalerError {\n if (!hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return new TalerError<unknown>({ code, when, hint, ...detail }, cause);\n }\n\n static fromUncheckedDetail(d: TalerErrorDetail, c?: Error): TalerError {\n return new TalerError<unknown>({ ...d }, c);\n }\n\n static fromException(e: any): TalerError {\n const errDetail = getErrorDetailFromException(e);\n return new TalerError(errDetail, e);\n }\n\n hasErrorCode<C extends keyof DetailsMap>(\n code: C,\n ): this is TalerError<DetailsMap[C]> {\n return this.errorDetail.code === code;\n }\n\n toString(): string {\n return `TalerError: ${JSON.stringify(this.errorDetail)}`;\n }\n}\n\n/**\n * Convert an exception (or anything that was thrown) into\n * a TalerErrorDetail object.\n */\nexport function getErrorDetailFromException(e: any): TalerErrorDetail {\n if (e instanceof TalerError) {\n return e.errorDetail;\n }\n if (e instanceof CancellationToken.CancellationError) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_CORE_REQUEST_CANCELLED,\n {},\n );\n return err;\n }\n if (e instanceof Error) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {\n stack: e.stack,\n },\n `unexpected exception (message: ${e.message})`,\n );\n return err;\n }\n // Something was thrown that is not even an exception!\n // Try to stringify it.\n let excString: string;\n try {\n excString = e.toString();\n } catch (e) {\n // Something went horribly wrong.\n excString = \"can't stringify exception\";\n }\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {},\n `unexpected exception (not an exception, ${excString})`,\n );\n return err;\n}\n\nexport function assertUnreachable(x: never): never {\n throw new Error(\"Didn't expect to get here\");\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 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 {\n Codec,\n buildCodecForObject,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport {\n AmountString,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n} from \"./taler-types.js\";\nimport { TalerPreciseTimestamp, TalerProtocolTimestamp } from \"./time.js\";\nimport {\n RefreshReason,\n ScopeInfo,\n TalerErrorDetail,\n TransactionIdStr,\n TransactionStateFilter,\n WithdrawalExchangeAccountDetails,\n codecForScopeInfo,\n} from \"./wallet-types.js\";\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n *\n * it will be removed in next release\n *\n * @deprecated use scopeInfo\n */\n currency?: string;\n\n /**\n * return only transactions in the given scopeInfo\n */\n scopeInfo?: ScopeInfo;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * Sort order of the transaction items.\n * By default, items are sorted ascending by their\n * main timestamp.\n *\n * ascending: ascending by timestamp, but pending transactions first\n * descending: ascending by timestamp, but pending transactions first\n * stable-ascending: ascending by timestamp, with pending transactions amidst other transactions\n * (stable in the sense of: pending transactions don't jump around)\n */\n sort?: \"ascending\" | \"descending\" | \"stable-ascending\";\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n\n filterByState?: TransactionStateFilter;\n}\n\nexport interface TransactionState {\n major: TransactionMajorState;\n minor?: TransactionMinorState;\n}\n\nexport enum TransactionMajorState {\n // No state, only used when reporting transitions into the initial state\n None = \"none\",\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Suspended = \"suspended\",\n Dialog = \"dialog\",\n SuspendedAborting = \"suspended-aborting\",\n Failed = \"failed\",\n Expired = \"expired\",\n // Only used for the notification, never in the transaction history\n Deleted = \"deleted\",\n}\n\nexport enum TransactionMinorState {\n // Placeholder until D37 is fully implemented\n Unknown = \"unknown\",\n Deposit = \"deposit\",\n KycRequired = \"kyc\",\n AmlRequired = \"aml\",\n MergeKycRequired = \"merge-kyc\",\n Track = \"track\",\n SubmitPayment = \"submit-payment\",\n RebindSession = \"rebind-session\",\n Refresh = \"refresh\",\n Pickup = \"pickup\",\n AutoRefund = \"auto-refund\",\n User = \"user\",\n Bank = \"bank\",\n Exchange = \"exchange\",\n ClaimProposal = \"claim-proposal\",\n CheckRefund = \"check-refund\",\n CreatePurse = \"create-purse\",\n DeletePurse = \"delete-purse\",\n RefreshExpired = \"refresh-expired\",\n Ready = \"ready\",\n Merge = \"merge\",\n Repurchase = \"repurchase\",\n BankRegisterReserve = \"bank-register-reserve\",\n BankConfirmTransfer = \"bank-confirm-transfer\",\n WithdrawCoins = \"withdraw-coins\",\n ExchangeWaitReserve = \"exchange-wait-reserve\",\n AbortingBank = \"aborting-bank\",\n Aborting = \"aborting\",\n Refused = \"refused\",\n Withdraw = \"withdraw\",\n MerchantOrderProposed = \"merchant-order-proposed\",\n Proposed = \"proposed\",\n RefundAvailable = \"refund-available\",\n AcceptRefund = \"accept-refund\",\n PaidByOther = \"paid-by-other\",\n}\n\nexport enum TransactionAction {\n Delete = \"delete\",\n Suspend = \"suspend\",\n Resume = \"resume\",\n Abort = \"abort\",\n Fail = \"fail\",\n Retry = \"retry\",\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: TalerPreciseTimestamp;\n\n /**\n * Transaction state, as per DD37.\n */\n txState: TransactionState;\n\n /**\n * Possible transitions based on the current state.\n */\n txActions: TransactionAction[];\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 /**\n * If the transaction minor state is in KycRequired this field is going to\n * have the location where the user need to go to complete KYC information.\n */\n kycUrl?: string;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionReward\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit\n | TransactionInternalWithdrawal\n | TransactionRecoup\n | TransactionDenomLoss;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n InternalWithdrawal = \"internal-withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Reward = \"reward\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n Recoup = \"recoup\",\n DenomLoss = \"denom-loss\",\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 * @deprecated in favor of exchangeCreditAccounts\n */\n exchangePaytoUris: string[];\n\n exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\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 exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\n}\n\nexport enum DenomLossEventType {\n DenomExpired = \"denom-expired\",\n DenomVanished = \"denom-vanished\",\n DenomUnoffered = \"denom-unoffered\",\n}\n\n/**\n * A transaction to indicate financial loss due to denominations\n * that became unusable for deposits.\n */\nexport interface TransactionDenomLoss extends TransactionCommon {\n type: TransactionType.DenomLoss;\n lossEventType: DenomLossEventType;\n exchangeBaseUrl: string;\n}\n\n/**\n * A withdrawal transaction (either bank-integrated or manual).\n */\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\n/**\n * Internal withdrawal operation, only reported on request.\n *\n * Some transactions (peer-*-credit) internally do a withdrawal,\n * but only the peer-*-credit transaction is reported.\n *\n * The internal withdrawal transaction allows to access the details of\n * the underlying withdrawal for testing/debugging.\n *\n * It is usually not reported, so that amounts of transactions properly\n * add up, since the amountEffecive of the withdrawal is already reported\n * in the peer-*-credit transaction.\n */\nexport interface TransactionInternalWithdrawal extends TransactionCommon {\n type: TransactionType.InternalWithdrawal;\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 * Only available in the right state.\n */\n talerUri: string | undefined;\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 * Only present if the transaction is in a state where the other party can\n * 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\n/**\n * The exchange revoked a key and the wallet recoups funds.\n */\nexport interface TransactionRecoup extends TransactionCommon {\n type: TransactionType.Recoup;\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 * 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 /**\n * Does this purchase has an pos validation\n */\n posConfirmation: string | undefined;\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 * 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\n/**\n * Summary information about the payment that we got a refund for.\n */\nexport interface RefundPaymentInfo {\n summary: string;\n summary_i18n?: InternationalizedString;\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\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 // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n paymentInfo: RefundPaymentInfo | undefined;\n}\n\nexport interface TransactionReward extends TransactionCommon {\n type: TransactionType.Reward;\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\nexport interface DepositTransactionTrackingState {\n // Raw wire transfer identifier of the deposit.\n wireTransferId: string;\n // When was the wire transfer given to the bank.\n timestampExecuted: TalerProtocolTimestamp;\n // Total amount transfer for this wtid (including fees)\n amountRaw: AmountString;\n // Wire fee amount for this exchange\n wireFee: 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 trackingState: Array<DepositTransactionTrackingState>;\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 interface WithdrawalTransactionByURIRequest {\n talerWithdrawUri: string;\n}\n\nexport const codecForWithdrawalTransactionByURIRequest =\n (): Codec<WithdrawalTransactionByURIRequest> =>\n buildCodecForObject<WithdrawalTransactionByURIRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .build(\"WithdrawalTransactionByURIRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"scopeInfo\", codecOptional(codecForScopeInfo()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\n \"sort\",\n codecOptional(\n codecForEither(\n codecForConstString(\"ascending\"),\n codecForConstString(\"descending\"),\n codecForConstString(\"stable-ascending\"),\n ),\n ),\n )\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(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n\nexport interface ListAssociatedRefreshesRequest {\n transactionId: string;\n}\n\nexport const codecForListAssociatedRefreshesRequest =\n (): Codec<ListAssociatedRefreshesRequest> =>\n buildCodecForObject<ListAssociatedRefreshesRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ListAssociatedRefreshesRequest\");\n\nexport interface ListAssociatedRefreshesResponse {\n transactionIds: string[];\n}\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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n renderContext,\n} from \"./codec.js\";\nimport {\n CurrencySpecification,\n TemplateParams,\n WithdrawalOperationStatus,\n} from \"./index.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 AccountRestriction,\n AmountString,\n AuditorDenomSig,\n CoinEnvelope,\n DenomKeyType,\n DenominationPubKey,\n ExchangeAuditor,\n ExchangeWireAccount,\n InternationalizedString,\n MerchantContractTerms,\n MerchantInfo,\n PeerContractTerms,\n UnblindedSignature,\n codecForExchangeWireAccount,\n codecForMerchantContractTerms,\n codecForPeerContractTerms,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n TalerPreciseTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForPreciseTimestamp,\n codecForTimestamp,\n} from \"./time.js\";\nimport {\n OrderShortInfo,\n TransactionState,\n TransactionType,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\ndeclare const __txId: unique symbol;\nexport type TransactionIdStr = `txn:${string}:${string}` & { [__txId]: true };\n\n/**\n * Identifier for a pending task in the wallet.\n */\ndeclare const __pndId: unique symbol;\nexport type PendingIdStr = `pnd:${string}:${string}` & { [__pndId]: true };\n\ndeclare const __tmbId: unique symbol;\nexport type TombstoneIdStr = `tmb:${string}:${string}` & { [__tmbId]: true };\n\nfunction codecForTransactionIdStr(): Codec<TransactionIdStr> {\n return {\n decode(x: any, c?: Context): TransactionIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as TransactionIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForPendingIdStr(): Codec<PendingIdStr> {\n return {\n decode(x: any, c?: Context): PendingIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as PendingIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForTombstoneIdStr(): Codec<TombstoneIdStr> {\n return {\n decode(x: any, c?: Context): TombstoneIdStr {\n if (typeof x === \"string\" && x.startsWith(\"tmb:\")) {\n return x as TombstoneIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"tmb:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\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\n/**\n * How the amount should be interpreted in a transaction\n * Effective = how the balance is change\n * Raw = effective amount without fee\n *\n * Depending on the transaction, raw can be higher than effective\n */\nexport enum TransactionAmountMode {\n Effective = \"effective\",\n Raw = \"raw\",\n}\n\nexport type GetPlanForOperationRequest =\n | GetPlanForWithdrawRequest\n | GetPlanForDepositRequest;\n// | GetPlanForPushDebitRequest\n// | GetPlanForPullCreditRequest\n// | GetPlanForPaymentRequest\n// | GetPlanForTipRequest\n// | GetPlanForRefundRequest\n// | GetPlanForPullDebitRequest\n// | GetPlanForPushCreditRequest;\n\ninterface GetPlanForWalletInitiatedOperation {\n instructedAmount: AmountString;\n mode: TransactionAmountMode;\n}\n\nexport interface ConvertAmountRequest {\n amount: AmountString;\n type: TransactionAmountMode;\n}\n\nexport const codecForConvertAmountRequest =\n buildCodecForObject<ConvertAmountRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"type\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .build(\"ConvertAmountRequest\");\n\nexport interface GetAmountRequest {\n currency: string;\n}\n\nexport const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetAmountRequest\");\n\ninterface GetPlanToCompleteOperation {\n instructedAmount: AmountString;\n}\n\nconst codecForGetPlanForWalletInitiatedOperation = <\n T extends GetPlanForWalletInitiatedOperation,\n>() =>\n buildCodecForObject<T>()\n .property(\n \"mode\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .property(\"instructedAmount\", codecForAmountString());\n\ninterface GetPlanForWithdrawRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Withdrawal;\n exchangeUrl?: string;\n}\ninterface GetPlanForDepositRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Deposit;\n account: string; //payto string\n}\ninterface GetPlanForPushDebitRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPushDebit;\n}\n\ninterface GetPlanForPullCreditRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPullCredit;\n exchangeUrl: string;\n}\n\nconst codecForGetPlanForWithdrawRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForWithdrawRequest>()\n .property(\"type\", codecForConstString(TransactionType.Withdrawal))\n .property(\"exchangeUrl\", codecOptional(codecForString()))\n .build(\"GetPlanForWithdrawRequest\");\n\nconst codecForGetPlanForDepositRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForDepositRequest>()\n .property(\"type\", codecForConstString(TransactionType.Deposit))\n .property(\"account\", codecForString())\n .build(\"GetPlanForDepositRequest\");\n\nconst codecForGetPlanForPushDebitRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPushDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushDebit))\n .build(\"GetPlanForPushDebitRequest\");\n\nconst codecForGetPlanForPullCreditRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPullCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullCredit))\n .property(\"exchangeUrl\", codecForString())\n .build(\"GetPlanForPullCreditRequest\");\n\ninterface GetPlanForPaymentRequest extends GetPlanToCompleteOperation {\n type: TransactionType.Payment;\n wireMethod: string;\n ageRestriction: number;\n maxDepositFee: AmountString;\n}\n\n// interface GetPlanForTipRequest extends GetPlanForOperationBase {\n// type: TransactionType.Tip;\n// }\n// interface GetPlanForRefundRequest extends GetPlanForOperationBase {\n// type: TransactionType.Refund;\n// }\ninterface GetPlanForPullDebitRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPullDebit;\n}\ninterface GetPlanForPushCreditRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPushCredit;\n}\n\nconst codecForGetPlanForPaymentRequest =\n buildCodecForObject<GetPlanForPaymentRequest>()\n .property(\"type\", codecForConstString(TransactionType.Payment))\n .property(\"maxDepositFee\", codecForAmountString())\n .build(\"GetPlanForPaymentRequest\");\n\nconst codecForGetPlanForPullDebitRequest =\n buildCodecForObject<GetPlanForPullDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullDebit))\n .build(\"GetPlanForPullDebitRequest\");\n\nconst codecForGetPlanForPushCreditRequest =\n buildCodecForObject<GetPlanForPushCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushCredit))\n .build(\"GetPlanForPushCreditRequest\");\n\nexport const codecForGetPlanForOperationRequest =\n (): Codec<GetPlanForOperationRequest> =>\n buildCodecForUnion<GetPlanForOperationRequest>()\n .discriminateOn(\"type\")\n .alternative(\n TransactionType.Withdrawal,\n codecForGetPlanForWithdrawRequest,\n )\n .alternative(TransactionType.Deposit, codecForGetPlanForDepositRequest)\n // .alternative(\n // TransactionType.PeerPushDebit,\n // codecForGetPlanForPushDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPullCredit,\n // codecForGetPlanForPullCreditRequest,\n // )\n // .alternative(TransactionType.Payment, codecForGetPlanForPaymentRequest)\n // .alternative(\n // TransactionType.PeerPullDebit,\n // codecForGetPlanForPullDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPushCredit,\n // codecForGetPlanForPushCreditRequest,\n // )\n .build(\"GetPlanForOperationRequest\");\n\nexport interface GetPlanForOperationResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n counterPartyAmount?: AmountString;\n details: any;\n}\n\nexport const codecForGetPlanForOperationResponse =\n (): Codec<GetPlanForOperationResponse> =>\n buildCodecForObject<GetPlanForOperationResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .property(\"details\", codecForAny())\n .property(\"counterPartyAmount\", codecOptional(codecForAmountString()))\n .build(\"GetPlanForOperationResponse\");\n\nexport interface AmountResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n}\n\nexport const codecForAmountResponse = (): Codec<AmountResponse> =>\n buildCodecForObject<AmountResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .build(\"AmountResponse\");\n\nexport enum BalanceFlag {\n IncomingKyc = \"incoming-kyc\",\n IncomingAml = \"incoming-aml\",\n IncomingConfirmation = \"incoming-confirmation\",\n OutgoingKyc = \"outgoing-kyc\",\n}\n\nexport interface WalletBalance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n /**\n * Does the balance for this currency have a pending\n * transaction?\n *\n * @deprecated use flags and pendingIncoming/pendingOutgoing instead\n */\n hasPendingTransactions: boolean;\n\n /**\n * Is there a transaction that requires user input?\n *\n * @deprecated use flags instead\n */\n requiresUserInput: boolean;\n\n flags: BalanceFlag[];\n}\n\nexport const codecForScopeInfoGlobal = (): Codec<ScopeInfoGlobal> =>\n buildCodecForObject<ScopeInfoGlobal>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Global))\n .build(\"ScopeInfoGlobal\");\n\nexport const codecForScopeInfoExchange = (): Codec<ScopeInfoExchange> =>\n buildCodecForObject<ScopeInfoExchange>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Exchange))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoExchange\");\n\nexport const codecForScopeInfoAuditor = (): Codec<ScopeInfoAuditor> =>\n buildCodecForObject<ScopeInfoAuditor>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Auditor))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoAuditor\");\n\nexport const codecForScopeInfo = (): Codec<ScopeInfo> =>\n buildCodecForUnion<ScopeInfo>()\n .discriminateOn(\"type\")\n .alternative(ScopeType.Global, codecForScopeInfoGlobal())\n .alternative(ScopeType.Exchange, codecForScopeInfoExchange())\n .alternative(ScopeType.Auditor, codecForScopeInfoAuditor())\n .build(\"ScopeInfo\");\n\nexport interface GetCurrencySpecificationRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForGetCurrencyInfoRequest =\n (): Codec<GetCurrencySpecificationRequest> =>\n buildCodecForObject<GetCurrencySpecificationRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"GetCurrencySpecificationRequest\");\n\nexport interface ListExchangesForScopedCurrencyRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForListExchangesForScopedCurrencyRequest =\n (): Codec<ListExchangesForScopedCurrencyRequest> =>\n buildCodecForObject<ListExchangesForScopedCurrencyRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"ListExchangesForScopedCurrencyRequest\");\n\nexport interface GetCurrencySpecificationResponse {\n currencySpecification: CurrencySpecification;\n}\n\nexport interface BuiltinExchange {\n exchangeBaseUrl: string;\n currencyHint: string;\n}\n\nexport interface PartialWalletRunConfig {\n builtin?: Partial<WalletRunConfig[\"builtin\"]>;\n testing?: Partial<WalletRunConfig[\"testing\"]>;\n features?: Partial<WalletRunConfig[\"features\"]>;\n}\n\nexport interface WalletRunConfig {\n /**\n * Initialization values useful for a complete startup.\n *\n * These are values may be overridden by different wallets\n */\n builtin: {\n exchanges: BuiltinExchange[];\n };\n\n /**\n * Unsafe options which it should only be used to create\n * testing environment.\n */\n testing: {\n /**\n * Allow withdrawal of denominations even though they are about to expire.\n */\n denomselAllowLate: boolean;\n devModeActive: boolean;\n insecureTrustExchange: boolean;\n preventThrottling: boolean;\n skipDefaults: boolean;\n emitObservabilityEvents?: boolean;\n };\n\n /**\n * Configurations values that may be safe to show to the user\n */\n features: {\n allowHttp: boolean;\n };\n}\n\nexport interface InitRequest {\n config?: PartialWalletRunConfig;\n}\n\nexport const codecForInitRequest = (): Codec<InitRequest> =>\n buildCodecForObject<InitRequest>()\n .property(\"config\", codecForAny())\n .build(\"InitRequest\");\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 ScopeInfoGlobal = { type: ScopeType.Global; currency: string };\nexport type ScopeInfoExchange = {\n type: ScopeType.Exchange;\n currency: string;\n url: string;\n};\nexport type ScopeInfoAuditor = {\n type: ScopeType.Auditor;\n currency: string;\n url: string;\n};\n\nexport type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;\n\nexport interface BalancesResponse {\n balances: WalletBalance[];\n}\n\nexport const codecForBalance = (): Codec<WalletBalance> =>\n buildCodecForObject<WalletBalance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForAmountString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForAmountString())\n .property(\"pendingOutgoing\", codecForAmountString())\n .property(\"requiresUserInput\", codecForBoolean())\n .property(\"flags\", codecForAny()) // FIXME\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 * Coin was lost as the denomination is not usable anymore.\n */\n DenomLoss = \"denom-loss\",\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: AmountString;\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: TransactionIdStr;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: TransactionIdStr;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecOptional(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\", codecForTransactionIdStr())\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\", codecForTransactionIdStr())\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 * @deprecated use transactionId instead\n */\n walletRewardId: string;\n\n /**\n * Tip transaction ID.\n */\n transactionId: TransactionIdStr;\n\n /**\n * Has the tip already been accepted?\n */\n accepted: boolean;\n\n /**\n * Amount that the merchant gave.\n */\n rewardAmountRaw: AmountString;\n\n /**\n * Amount that arrived at the wallet.\n * Might be lower than the raw amount due to fees.\n */\n rewardAmountEffective: 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: TransactionIdStr;\n next_url?: string;\n}\n\nexport const codecForPrepareTipResult = (): Codec<PrepareTipResult> =>\n buildCodecForObject<PrepareTipResult>()\n .property(\"accepted\", codecForBoolean())\n .property(\"rewardAmountRaw\", codecForAmountString())\n .property(\"rewardAmountEffective\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"expirationTimestamp\", codecForTimestamp)\n .property(\"walletRewardId\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"PrepareRewardResult\");\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(\"transactionId\", codecForTransactionIdStr())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\nexport interface BalanceDetails {}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PaymentInsufficientBalanceDetails {\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 balanceReceiverAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceReceiverDepositable: AmountString;\n\n balanceExchangeDepositable: AmountString;\n\n /**\n * Maximum effective amount that the wallet can spend,\n * when all fees are paid by the wallet.\n */\n maxEffectiveSpendAmount: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n balanceExchangeDepositable: AmountString;\n balanceAgeAcceptable: AmountString;\n balanceReceiverAcceptable: AmountString;\n balanceReceiverDepositable: AmountString;\n maxEffectiveSpendAmount: AmountString;\n /**\n * Exchange doesn't have global fees configured for the relevant year,\n * p2p payments aren't possible.\n */\n missingGlobalFees: boolean;\n };\n };\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PaymentInsufficientBalanceDetails> =>\n buildCodecForObject<PaymentInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceReceiverAcceptable\", codecForAmountString())\n .property(\"balanceReceiverDepositable\", codecForAmountString())\n .property(\"balanceExchangeDepositable\", codecForAmountString())\n .property(\"perExchange\", codecForAny())\n .property(\"maxEffectiveSpendAmount\", 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(\"transactionId\", codecForTransactionIdStr())\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\", codecOptional(codecForAmountString()))\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecForString())\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\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 transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId instead\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: AmountString;\n talerUri: string;\n balanceDetails: PaymentInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n transactionId: TransactionIdStr;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: AmountString;\n amountEffective: AmountString | undefined;\n contractTermsHash: string;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n talerUri: string;\n}\n\nexport interface BankWithdrawDetails {\n status: WithdrawalOperationStatus;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n operationId: string;\n apiBaseUrl: string;\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: TransactionIdStr;\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 AbortDeposit = \"abort-deposit\",\n AbortPeerPushDebit = \"abort-peer-push-debit\",\n AbortPeerPullDebit = \"abort-peer-pull-debit\",\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 * 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 ExchangesShortListResponse {\n exchanges: ShortExchangeListItem[];\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n implementationSemver: string;\n implementationGitHash: string;\n\n /**\n * Wallet-core protocol version supported by this implementation\n * of the API (\"server\" version).\n */\n version: string;\n exchange: string;\n merchant: string;\n\n bankIntegrationApiRange: string;\n bankConversionApiRange: string;\n corebankApiRange: string;\n\n /**\n * @deprecated as bank was split into multiple APIs with separate versioning\n */\n bank: string;\n\n /**\n * @deprecated\n */\n hash: string | undefined;\n\n /**\n * @deprecated will be removed\n */\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\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\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeWireAccount[];\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 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(codecForExchangeWireAccount()))\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 auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n Pending = \"pending\",\n Proposed = \"proposed\",\n Accepted = \"accepted\",\n}\n\nexport enum ExchangeEntryStatus {\n Preset = \"preset\",\n Ephemeral = \"ephemeral\",\n Used = \"used\",\n}\n\nexport enum ExchangeUpdateStatus {\n Initial = \"initial\",\n InitialUpdate = \"initial-update\",\n Suspended = \"suspended\",\n UnavailableUpdate = \"unavailable-update\",\n Ready = \"ready\",\n ReadyUpdate = \"ready-update\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\nexport interface ShortExchangeListItem {\n exchangeBaseUrl: string;\n}\n\n/**\n * Info about an exchange entry in the wallet.\n */\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n masterPub: string | undefined;\n currency: string;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n ageRestrictionOptions: number[];\n\n /**\n * P2P payments are disabled with this exchange\n * (e.g. because no global fees are configured).\n */\n peerPaymentsDisabled: boolean;\n\n /**\n * Set to true if this exchange doesn't charge any fees.\n */\n noFees: boolean;\n\n scopeInfo: ScopeInfo;\n\n lastUpdateTimestamp: TalerPreciseTimestamp | undefined;\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\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(\"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(\"masterPub\", codecOptional(codecForString()))\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeEntryStatus\", codecForAny())\n .property(\"exchangeUpdateStatus\", codecForAny())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .property(\"scopeInfo\", codecForScopeInfo())\n .property(\"lastUpdateErrorInfo\", codecForAny())\n .property(\"lastUpdateTimestamp\", codecOptional(codecForPreciseTimestamp))\n .property(\"noFees\", codecForBoolean())\n .property(\"peerPaymentsDisabled\", codecForBoolean())\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 * @deprecated in favor of withdrawalAccountsList\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\n\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawalDetailsForAmount {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n *\n * @deprecated the client should query the exchange entry instead\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 * Number of coins that would be used for withdrawal.\n *\n * The UIs should warn if this number is too high (roughly at >100).\n */\n numCoins: number;\n\n /**\n * Ways to pay the exchange.\n *\n * @deprecated in favor of withdrawalAccountsList\n */\n paytoUris: string[];\n\n /**\n * Ways to pay the exchange, including accounts that require currency conversion.\n */\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\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 * Scope info of the currency withdrawn.\n */\n scopeInfo: ScopeInfo;\n}\n\nexport interface DenomSelItem {\n denomPubHash: string;\n count: number;\n /**\n * Number of denoms/planchets to skip, because\n * a re-denomination effectively deleted them.\n */\n skip?: number;\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: DenomSelItem[];\n earliestDepositExpiration: TalerProtocolTimestamp;\n hasDenomWithAgeRestriction: boolean;\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 exchangeCreditAccountDetails: WithdrawalExchangeAccountDetails[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\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 scopeInfo: ScopeInfo;\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 /**\n * Language of the returned content.\n *\n * If missing, language is unknown.\n */\n contentLanguage: string | undefined;\n\n /**\n * Available languages as advertised by the exchange.\n */\n tosAvailableLanguages: string[];\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: AmountString;\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\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: AmountString;\n amountToSpend: AmountString;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"IntegrationTestArgs\");\n\nexport interface IntegrationTestV2Args {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n}\n\nexport const codecForIntegrationTestV2Args = (): Codec<IntegrationTestV2Args> =>\n buildCodecForObject<IntegrationTestV2Args>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"IntegrationTestV2Args\");\n\nexport interface GetExchangeEntryByUrlRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeEntryByUrlRequest =\n (): Codec<GetExchangeEntryByUrlRequest> =>\n buildCodecForObject<GetExchangeEntryByUrlRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"GetExchangeEntryByUrlRequest\");\n\nexport type GetExchangeEntryByUrlResponse = ExchangeListItem;\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use a separate API call to start a forced exchange update instead\n */\n forceUpdate?: boolean;\n\n masterPub?: string;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .property(\"masterPub\", codecOptional(codecForString()))\n .build(\"AddExchangeRequest\");\n\nexport interface UpdateExchangeEntryRequest {\n exchangeBaseUrl: string;\n force?: boolean;\n}\n\nexport const codecForUpdateExchangeEntryRequest =\n (): Codec<UpdateExchangeEntryRequest> =>\n buildCodecForObject<UpdateExchangeEntryRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"force\", codecOptional(codecForBoolean()))\n .build(\"UpdateExchangeEntryRequest\");\n\nexport interface GetExchangeResourcesRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeResourcesRequest =\n (): Codec<GetExchangeResourcesRequest> =>\n buildCodecForObject<GetExchangeResourcesRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"GetExchangeResourcesRequest\");\n\nexport interface GetExchangeResourcesResponse {\n hasResources: boolean;\n}\n\nexport interface DeleteExchangeRequest {\n exchangeBaseUrl: string;\n purge?: boolean;\n}\n\nexport const codecForDeleteExchangeRequest = (): Codec<DeleteExchangeRequest> =>\n buildCodecForObject<DeleteExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"purge\", codecOptional(codecForBoolean()))\n .build(\"DeleteExchangeRequest\");\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 acceptLanguage?: string;\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .property(\"acceptLanguage\", codecOptional(codecForString()))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n}\n\nexport const codecForAcceptManualWithdrawalRequest =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * ID provided by the client to cancel the request.\n *\n * If the same request is made again with the same clientCancellationId,\n * all previous requests are cancelled.\n *\n * The cancelled request will receive an error response with\n * an error code that indicates the cancellation.\n *\n * The cancellation is best-effort, responses might still arrive.\n */\n clientCancellationId?: string;\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\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"clientCancellationId\", codecOptional(codecForString()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ForgetExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForgetExchangeTosRequest =\n (): Codec<ForgetExchangeTosRequest> =>\n buildCodecForObject<ForgetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"ForgetExchangeTosRequest\");\n\nexport interface AcceptRefundRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<AcceptRefundRequest> =>\n buildCodecForObject<AcceptRefundRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AcceptRefundRequest\");\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 notifyChangeFromPendingTimeoutMs?: number;\n}\n\nexport const codecForGetWithdrawalDetailsForUri =\n (): Codec<GetWithdrawalDetailsForUriRequest> =>\n buildCodecForObject<GetWithdrawalDetailsForUriRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\n \"notifyChangeFromPendingTimeoutMs\",\n codecOptional(codecForNumber()),\n )\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 SharePaymentRequest {\n merchantBaseUrl: string;\n orderId: string;\n}\nexport const codecForSharePaymentRequest = (): Codec<SharePaymentRequest> =>\n buildCodecForObject<SharePaymentRequest>()\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"orderId\", codecForString())\n .build(\"SharePaymentRequest\");\n\nexport interface SharePaymentResult {\n privatePayUri: string;\n}\nexport const codecForSharePaymentResult = (): Codec<SharePaymentResult> =>\n buildCodecForObject<SharePaymentResult>()\n .property(\"privatePayUri\", codecForString())\n .build(\"SharePaymentResult\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams?: TemplateParams;\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 /**\n * @deprecated use transactionId instead\n */\n proposalId?: string;\n transactionId?: TransactionIdStr;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\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}\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: AmountString;\n /**\n * Corebank API base URL.\n */\n corebankApiBaseUrl: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\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\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"WithdrawTestBalanceRequest\");\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 RefreshCoinSpec {\n coinPub: string;\n amount?: AmountString;\n}\n\nexport const codecForRefreshCoinSpec = (): Codec<RefreshCoinSpec> =>\n buildCodecForObject<RefreshCoinSpec>()\n .property(\"amount\", codecForAmountString())\n .property(\"coinPub\", codecForString())\n .build(\"ForceRefreshRequest\");\n\nexport interface ForceRefreshRequest {\n refreshCoinSpecs: RefreshCoinSpec[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"refreshCoinSpecs\", codecForList(codecForRefreshCoinSpec()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport interface StartRefundQueryForUriResponse {\n /**\n * Transaction id of the *payment* where the refund query was started.\n */\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface StartRefundQueryRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForStartRefundQueryRequest =\n (): Codec<StartRefundQueryRequest> =>\n buildCodecForObject<StartRefundQueryRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"StartRefundQueryRequest\");\n\nexport interface PrepareRewardRequest {\n talerRewardUri: string;\n}\n\nexport const codecForPrepareRewardRequest = (): Codec<PrepareRewardRequest> =>\n buildCodecForObject<PrepareRewardRequest>()\n .property(\"talerRewardUri\", codecForString())\n .build(\"PrepareRewardRequest\");\n\nexport interface AcceptRewardRequest {\n /**\n * @deprecated use transactionId\n */\n walletRewardId?: string;\n /**\n * it will be required when \"walletRewardId\" is removed\n */\n transactionId?: TransactionIdStr;\n}\n\nexport const codecForAcceptTipRequest = (): Codec<AcceptRewardRequest> =>\n buildCodecForObject<AcceptRewardRequest>()\n .property(\"walletRewardId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"AcceptRewardRequest\");\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForFailTransactionRequest =\n (): Codec<FailTransactionRequest> =>\n buildCodecForObject<FailTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"FailTransactionRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForResumeTransaction = (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AbortTransactionRequest\");\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n /**\n * Pre-allocated transaction ID.\n * Allows clients to easily handle notifications\n * that occur while the operation has been created but\n * before the creation request has returned.\n */\n transactionId?: TransactionIdStr;\n depositPaytoUri: string;\n amount: AmountString;\n}\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 fees: DepositGroupFees;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: TransactionIdStr;\n}\n\nexport interface TxIdResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawUriInfoResponse {\n operationId: string;\n status: WithdrawalOperationStatus;\n confirmTransferUrl?: string;\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"operationId\", codecForString())\n .property(\"confirmTransferUrl\", codecOptional(codecForString()))\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\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 TestingListTasksForTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface TestingListTasksForTransactionsResponse {\n taskIdList: string[];\n}\n\nexport const codecForTestingListTasksForTransactionRequest =\n (): Codec<TestingListTasksForTransactionRequest> =>\n buildCodecForObject<TestingListTasksForTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"TestingListTasksForTransactionRequest\");\n\nexport interface DeleteTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\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: TransactionIdStr;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: TransactionIdStr;\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: TransactionIdStr;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: TransactionIdStr;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: TalerPreciseTimestamp;\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 ActiveTask {\n id: string;\n transaction: TransactionIdStr | undefined;\n firstTry: AbsoluteTime | undefined;\n nextTry: AbsoluteTime | undefined;\n counter: number | undefined;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport interface GetActiveTasks {\n tasks: ActiveTask[];\n}\n\nexport const codecForActiveTask = (): Codec<ActiveTask> =>\n buildCodecForObject<ActiveTask>()\n .property(\"id\", codecForString())\n .property(\"transaction\", codecOptional(codecForTransactionIdStr()))\n .property(\"counter\", codecForNumber())\n .property(\"firstTry\", codecForAbsoluteTime)\n .property(\"nextTry\", codecForAbsoluteTime)\n .property(\"lastError\", codecForTalerErrorDetail())\n .build(\"ActiveTask\");\n\nexport const codecForGetActiveTasks = (): Codec<GetActiveTasks> =>\n buildCodecForObject<GetActiveTasks>()\n .property(\"tasks\", codecForList(codecForActiveTask()))\n .build(\"GetActiveTasks\");\n\nexport interface ImportDbRequest {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDbRequest> =>\n buildCodecForObject<ImportDbRequest>()\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 /**\n * Number of coins used for the payment.\n */\n numCoins: number;\n}\n\nexport interface SelectedCoin {\n denomPubHash: string;\n coinPub: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\nexport interface SelectedProspectiveCoin {\n denomPubHash: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n coins: SelectedCoin[];\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 ProspectivePayCoinSelection {\n prospectiveCoins: SelectedProspectiveCoin[];\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 exchangeBaseUrl: string;\n /**\n * Maximum expiration date, based on how close the coins\n * used for the payment are to expiry.\n *\n * The value is based on when the wallet would typically\n * automatically refresh the coins on its own, leaving enough\n * time to get a refund for the push payment and refresh the\n * coin.\n */\n maxExpirationDate: TalerProtocolTimestamp;\n}\n\nexport interface InitiatePeerPushDebitRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushDebitResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n transactionId: TransactionIdStr;\n}\n\nexport const codecForInitiatePeerPushDebitRequest =\n (): Codec<InitiatePeerPushDebitRequest> =>\n buildCodecForObject<InitiatePeerPushDebitRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushDebitRequest\");\n\nexport interface PreparePeerPushCreditRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n transactionId: TransactionIdStr;\n\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use transaction ID instead.\n */\n peerPushCreditId: string;\n\n /**\n * @deprecated\n */\n amount: AmountString;\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 peerPullDebitId: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCreditRequest> =>\n buildCodecForObject<PreparePeerPushCreditRequest>()\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 transactionId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n transactionId: TransactionIdStr;\n}\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(\"transactionId\", codecForTransactionIdStr())\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\n /**\n * Number of coins that will be used,\n * can be used by the UI to warn if excessively large.\n */\n numCoins: number;\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 * @deprecated since it's not necessarily valid yet until the tx is in the right state\n */\n talerUri: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport interface ValidateIbanRequest {\n iban: string;\n}\n\nexport const codecForValidateIbanRequest = (): Codec<ValidateIbanRequest> =>\n buildCodecForObject<ValidateIbanRequest>()\n .property(\"iban\", codecForString())\n .build(\"ValidateIbanRequest\");\n\nexport interface ValidateIbanResponse {\n valid: boolean;\n}\n\nexport const codecForValidateIbanResponse = (): Codec<ValidateIbanResponse> =>\n buildCodecForObject<ValidateIbanResponse>()\n .property(\"valid\", codecForBoolean())\n .build(\"ValidateIbanResponse\");\n\nexport type TransactionStateFilter = \"nonfinal\";\n\nexport interface TransactionRecordFilter {\n onlyState?: TransactionStateFilter;\n onlyCurrency?: string;\n}\n\nexport interface StoredBackupList {\n storedBackups: {\n name: string;\n }[];\n}\n\nexport interface CreateStoredBackupResponse {\n name: string;\n}\n\nexport interface RecoverStoredBackupRequest {\n name: string;\n}\n\nexport interface DeleteStoredBackupRequest {\n name: string;\n}\n\nexport const codecForDeleteStoredBackupRequest =\n (): Codec<DeleteStoredBackupRequest> =>\n buildCodecForObject<DeleteStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"DeleteStoredBackupRequest\");\n\nexport const codecForRecoverStoredBackupRequest =\n (): Codec<RecoverStoredBackupRequest> =>\n buildCodecForObject<RecoverStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"RecoverStoredBackupRequest\");\n\nexport interface TestingSetTimetravelRequest {\n offsetMs: number;\n}\n\nexport const codecForTestingSetTimetravelRequest =\n (): Codec<TestingSetTimetravelRequest> =>\n buildCodecForObject<TestingSetTimetravelRequest>()\n .property(\"offsetMs\", codecForNumber())\n .build(\"TestingSetTimetravelRequest\");\n\nexport interface AllowedAuditorInfo {\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport interface AllowedExchangeInfo {\n exchangeBaseUrl: string;\n exchangePub: string;\n}\n\n/**\n * Data extracted from the contract terms that is relevant for payment\n * processing in the wallet.\n */\nexport interface WalletContractData {\n /**\n * Fulfillment URL, or the empty string if the order has no fulfillment URL.\n *\n * Stored as a non-nullable string as we use this field for IndexedDB indexing.\n */\n fulfillmentUrl: string;\n\n contractTermsHash: string;\n fulfillmentMessage?: string;\n fulfillmentMessageI18n?: InternationalizedString;\n merchantSig: string;\n merchantPub: string;\n merchant: MerchantInfo;\n amount: AmountString;\n orderId: string;\n merchantBaseUrl: string;\n summary: string;\n summaryI18n: { [lang_tag: string]: string } | undefined;\n autoRefund: TalerProtocolDuration | undefined;\n payDeadline: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n allowedExchanges: AllowedExchangeInfo[];\n timestamp: TalerProtocolTimestamp;\n wireMethod: string;\n wireInfoHash: string;\n maxDepositFee: AmountString;\n minimumAge?: number;\n}\n\nexport interface TestingWaitTransactionRequest {\n transactionId: TransactionIdStr;\n txState: TransactionState;\n}\n\nexport interface TestingGetDenomStatsRequest {\n exchangeBaseUrl: string;\n}\n\nexport interface TestingGetDenomStatsResponse {\n numKnown: number;\n numOffered: number;\n numLost: number;\n}\n\nexport const codecForTestingGetDenomStatsRequest =\n (): Codec<TestingGetDenomStatsRequest> =>\n buildCodecForObject<TestingGetDenomStatsRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"TestingGetDenomStatsRequest\");\n\nexport interface WithdrawalExchangeAccountDetails {\n /**\n * Payto URI to credit the exchange.\n *\n * Depending on whether the (manual!) withdrawal is accepted or just\n * being checked, this already includes the subject with the\n * reserve public key.\n */\n paytoUri: string;\n\n /**\n * Status that indicates whether the account can be used\n * by the user to send funds for a withdrawal.\n *\n * ok: account should be shown to the user\n * error: account should not be shown to the user, UIs might render the error (in conversionError),\n * especially in dev mode.\n */\n status: \"ok\" | \"error\";\n\n /**\n * Transfer amount. Might be in a different currency than the requested\n * amount for withdrawal.\n *\n * Absent if this is a conversion account and the conversion failed.\n */\n transferAmount?: AmountString;\n\n /**\n * Currency specification for the external currency.\n *\n * Only included if this account requires a currency conversion.\n */\n currencySpecification?: CurrencySpecification;\n\n /**\n * Further restrictions for sending money to the\n * exchange.\n */\n creditRestrictions?: AccountRestriction[];\n\n /**\n * Label given to the account or the account's bank by the exchange.\n */\n bankLabel?: string;\n\n /*\n * Display priority assigned to this bank account by the exchange.\n */\n priority?: number;\n\n /**\n * Error that happened when attempting to request the conversion rate.\n */\n conversionError?: TalerErrorDetail;\n}\n\nexport interface PrepareWithdrawExchangeRequest {\n /**\n * A taler://withdraw-exchange URI.\n */\n talerUri: string;\n}\n\nexport const codecForPrepareWithdrawExchangeRequest =\n (): Codec<PrepareWithdrawExchangeRequest> =>\n buildCodecForObject<PrepareWithdrawExchangeRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PrepareWithdrawExchangeRequest\");\n\nexport interface PrepareWithdrawExchangeResponse {\n /**\n * Base URL of the exchange that already existed\n * or was ephemerally added as an exchange entry to\n * the wallet.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount from the taler://withdraw-exchange URI.\n * Only present if specified in the URI.\n */\n amount?: AmountString;\n}\n\nexport interface ExchangeEntryState {\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n}\n\nexport interface ListGlobalCurrencyAuditorsResponse {\n auditors: {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n }[];\n}\n\nexport interface ListGlobalCurrencyExchangesResponse {\n exchanges: {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n }[];\n}\n\nexport interface AddGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForAddGlobalCurrencyExchangeRequest =\n (): Codec<AddGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<AddGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"AddGlobalCurrencyExchangeRequest\");\n\nexport interface RemoveGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyExchangeRequest =\n (): Codec<RemoveGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"RemoveGlobalCurrencyExchangeRequest\");\n\nexport interface AddGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForAddGlobalCurrencyAuditorRequest =\n (): Codec<AddGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<AddGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForString())\n .property(\"auditorPub\", codecForString())\n .build(\"AddGlobalCurrencyAuditorRequest\");\n\nexport interface RemoveGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyAuditorRequest =\n (): Codec<RemoveGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForString())\n .property(\"auditorPub\", codecForString())\n .build(\"RemoveGlobalCurrencyAuditorRequest\");\n\nexport interface RetryLoopOpts {\n /**\n * Stop the retry loop when all lifeness-giving pending operations\n * are done.\n *\n * Defaults to false.\n */\n stopWhenDone?: boolean;\n}\n\n/**\n * Information about one provider.\n *\n * We don't store the account key here,\n * as that's derived from the wallet root key.\n */\nexport interface ProviderInfo {\n active: boolean;\n syncProviderBaseUrl: string;\n name: string;\n terms?: BackupProviderTerms;\n /**\n * Last communication issue with the provider.\n */\n lastError?: TalerErrorDetail;\n lastSuccessfulBackupTimestamp?: TalerPreciseTimestamp;\n lastAttemptedBackupTimestamp?: TalerPreciseTimestamp;\n paymentProposalIds: string[];\n backupProblem?: BackupProblem;\n paymentStatus: ProviderPaymentStatus;\n}\n\nexport interface BackupProviderTerms {\n supportedProtocolVersion: string;\n annualFee: AmountString;\n storageLimitInMegabytes: number;\n}\n\nexport type BackupProblem =\n | BackupUnreadableProblem\n | BackupConflictingDeviceProblem;\n\nexport interface BackupUnreadableProblem {\n type: \"backup-unreadable\";\n}\n\nexport interface BackupConflictingDeviceProblem {\n type: \"backup-conflicting-device\";\n otherDeviceId: string;\n myDeviceId: string;\n backupTimestamp: AbsoluteTime;\n}\n\nexport type ProviderPaymentStatus =\n | ProviderPaymentTermsChanged\n | ProviderPaymentPaid\n | ProviderPaymentInsufficientBalance\n | ProviderPaymentUnpaid\n | ProviderPaymentPending;\n\nexport enum ProviderPaymentType {\n Unpaid = \"unpaid\",\n Pending = \"pending\",\n InsufficientBalance = \"insufficient-balance\",\n Paid = \"paid\",\n TermsChanged = \"terms-changed\",\n}\n\nexport interface ProviderPaymentUnpaid {\n type: ProviderPaymentType.Unpaid;\n}\n\nexport interface ProviderPaymentInsufficientBalance {\n type: ProviderPaymentType.InsufficientBalance;\n amount: AmountString;\n}\n\nexport interface ProviderPaymentPending {\n type: ProviderPaymentType.Pending;\n talerUri?: string;\n}\n\nexport interface ProviderPaymentPaid {\n type: ProviderPaymentType.Paid;\n paidUntil: AbsoluteTime;\n}\n\nexport interface ProviderPaymentTermsChanged {\n type: ProviderPaymentType.TermsChanged;\n paidUntil: AbsoluteTime;\n oldTerms: BackupProviderTerms;\n newTerms: BackupProviderTerms;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport interface SyncTermsOfServiceResponse {\n // maximum backup size supported\n storage_limit_in_megabytes: number;\n\n // Fee for an account, per year.\n annual_fee: AmountString;\n\n // protocol version supported by the server,\n // for now always \"0.0\".\n version: string;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport const codecForSyncTermsOfServiceResponse =\n (): Codec<SyncTermsOfServiceResponse> =>\n buildCodecForObject<SyncTermsOfServiceResponse>()\n .property(\"storage_limit_in_megabytes\", codecForNumber())\n .property(\"annual_fee\", codecForAmountString())\n .property(\"version\", codecForString())\n .build(\"SyncTermsOfServiceResponse\");\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { base64FromArrayBuffer } from \"../base64.js\";\nimport { stringToBytes } from \"../taler-crypto.js\";\nimport { AccessToken, LongPollParams, PaginationParams } from \"./types.js\";\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\n/**\n * rfc8959\n * @param token\n * @returns\n */\nexport function makeBearerTokenAuthHeader(token: AccessToken): string {\n return `Bearer secret-token:${token}`;\n}\n\n/**\n * https://bugs.gnunet.org/view.php?id=7949\n */\nexport function addPaginationParams(url: URL, pagination?: PaginationParams) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"start\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"delta\", String(order * limit));\n}\n\nexport function addMerchantPaginationParams(\n url: URL,\n pagination?: PaginationParams,\n) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"offset\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"limit\", String(order * limit));\n}\n\nexport function addLongPollingParam(url: URL, param?: LongPollParams) {\n if (!param) return;\n if (param.timeoutMs) {\n url.searchParams.set(\"long_poll_ms\", String(param.timeoutMs));\n }\n}\n\nexport interface CacheEvictor<T> {\n notifySuccess: (op: T) => Promise<void>;\n}\n\nexport const nullEvictor: CacheEvictor<unknown> = {\n notifySuccess: () => Promise.resolve(),\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { AmountJson, Amounts } from \"../amounts.js\";\nimport { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport { TalerErrorCode } from \"../taler-error-codes.js\";\nimport { codecForTalerErrorDetail } from \"../wallet-types.js\";\nimport {\n AccessToken,\n TalerBankConversionApi,\n codecForCashinConversionResponse,\n codecForCashoutConversionResponse,\n codecForConversionBankConfig,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerBankConversionResultByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = ResultByMethod<TalerBankConversionHttpClient, prop>;\nexport type TalerBankConversionErrorsByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;\n\nexport enum TalerBankConversionCacheEviction {\n UPDATE_RATE,\n}\n\n/**\n * The API is used by the wallets.\n */\nexport class TalerBankConversionHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForConversionBankConfig());\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate\n *\n */\n async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) {\n const url = new URL(`cashin-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashinConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate\n *\n */\n async getCashoutRate(conversion: {\n debit?: AmountJson;\n credit?: AmountJson;\n }) {\n const url = new URL(`cashout-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate\n *\n */\n async updateConversionRate(\n auth: AccessToken,\n body: TalerBankConversionApi.ConversionRate,\n ) {\n const url = new URL(`conversion-rate`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerBankConversionCacheEviction.UPDATE_RATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\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 * Imports.\n */\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n makeBasicAuthHeader,\n readTalerErrorResponse,\n} from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n TalerAuthentication,\n codecForTokenSuccessResponse,\n codecForTokenSuccessResponseMerchant,\n} from \"./types.js\";\nimport { makeBearerTokenAuthHeader } from \"./utils.js\";\n\nexport class TalerAuthenticationHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n * @returns\n */\n async createAccessTokenBasic(\n username: string,\n password: string,\n body: TalerAuthentication.TokenRequest,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenSuccessResponse());\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n *\n * @returns\n */\n async createAccessTokenBearer(\n token: string,\n body: TalerAuthentication.TokenRequest,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token as AccessToken),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenSuccessResponseMerchant());\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async deleteAccessToken(token: AccessToken) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n LibtoolVersion,\n LongPollParams,\n TalerErrorCode,\n codecForChallenge,\n codecForTalerErrorDetail,\n codecForTanTransmission,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opKnownTalerFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n PaginationParams,\n TalerCorebankApi,\n UserAndToken,\n WithdrawalOperationStatus,\n codecForAccountData,\n codecForBankAccountCreateWithdrawalResponse,\n codecForBankAccountTransactionInfo,\n codecForBankAccountTransactionsResponse,\n codecForCashoutPending,\n codecForCashoutStatusResponse,\n codecForCashouts,\n codecForCoreBankConfig,\n codecForCreateTransactionResponse,\n codecForGlobalCashouts,\n codecForListBankAccountsResponse,\n codecForMonitorResponse,\n codecForPublicAccountsResponse,\n codecForRegisterAccountResponse,\n codecForWithdrawalPublicInfo,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n addLongPollingParam,\n addPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerCoreBankResultByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = ResultByMethod<TalerCoreBankHttpClient, prop>;\nexport type TalerCoreBankErrorsByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;\n\nexport enum TalerCoreBankCacheEviction {\n DELETE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_ACCOUNT,\n UPDATE_PASSWORD,\n CREATE_TRANSACTION,\n CONFIRM_WITHDRAWAL,\n ABORT_WITHDRAWAL,\n CREATE_WITHDRAWAL,\n CREATE_CASHOUT,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerCoreBankHttpClient {\n public readonly PROTOCOL_VERSION = \"4:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCoreBankConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // ACCOUNTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts\n *\n */\n async createAccount(\n auth: AccessToken | undefined,\n body: TalerCorebankApi.RegisterAccountRequest,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n const headers: Record<string, string> = {};\n if (auth) {\n headers.Authorization = makeBearerTokenAuthHeader(auth);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers: headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n TalerCoreBankCacheEviction.CREATE_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForRegisterAccountResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-corebank.html#delete--accounts-$USERNAME\n *\n */\n async deleteAccount(auth: UserAndToken, cid?: string) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME\n *\n */\n async updateAccount(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountReconfiguration,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME-auth\n *\n */\n async updatePassword(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountPasswordChange,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/auth`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--public-accounts\n *\n */\n async getPublicAccounts(\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`public-accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForPublicAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ public_accounts: [] });\n case HttpStatusCode.NotFound:\n return opFixedSuccess({ public_accounts: [] });\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts\n *\n */\n async getAccounts(\n auth: AccessToken,\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForListBankAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ accounts: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME\n *\n */\n async getAccount(auth: UserAndToken) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountData());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // TRANSACTIONS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions\n *\n */\n async getTransactions(\n auth: UserAndToken,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountTransactionsResponse(),\n );\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ transactions: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions-$TRANSACTION_ID\n *\n */\n async getTransactionById(auth: UserAndToken, txid: number) {\n const url = new URL(\n `accounts/${auth.username}/transactions/${String(txid)}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountTransactionInfo());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions\n *\n */\n async createTransaction(\n auth: UserAndToken,\n body: TalerCorebankApi.CreateTransactionRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCreateTransactionResponse());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // WITHDRAWALS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals\n *\n */\n async createWithdrawal(\n auth: UserAndToken,\n body: TalerCorebankApi.BankAccountCreateWithdrawalRequest,\n ) {\n const url = new URL(`accounts/${auth.username}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountCreateWithdrawalResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-confirm\n *\n */\n async confirmWithdrawalById(auth: UserAndToken, wid: string, cid?: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-abort\n *\n */\n async abortWithdrawalById(auth: UserAndToken, wid: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--withdrawals-$WITHDRAWAL_ID\n *\n */\n async getWithdrawalById(\n wid: string,\n params?: {\n old_state?: WithdrawalOperationStatus;\n } & LongPollParams,\n ) {\n const url = new URL(`withdrawals/${wid}`, this.baseUrl);\n addLongPollingParam(url, params);\n if (params) {\n url.searchParams.set(\n \"old_state\",\n !params.old_state ? \"pending\" : params.old_state,\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWithdrawalPublicInfo());\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // CASHOUTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts\n *\n */\n async createCashout(\n auth: UserAndToken,\n body: TalerCorebankApi.CashoutRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutPending());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts-$CASHOUT_ID\n *\n */\n async getCashoutById(auth: UserAndToken, cid: number) {\n const url = new URL(\n `accounts/${auth.username}/cashouts/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutStatusResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts\n *\n */\n async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--cashouts\n *\n */\n async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {\n const url = new URL(`cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForGlobalCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // 2FA\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID\n *\n */\n async sendChallenge(auth: UserAndToken, cid: string) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTanTransmission());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID-confirm\n *\n */\n async confirmChallenge(\n auth: UserAndToken,\n cid: string,\n body: TalerCorebankApi.ChallengeSolve,\n ) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // MONITOR\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--monitor\n *\n */\n async getMonitor(\n auth: AccessToken,\n params: {\n timeframe?: TalerCorebankApi.MonitorTimeframeParam;\n date?: AbsoluteTime;\n } = {},\n ) {\n const url = new URL(`monitor`, this.baseUrl);\n if (params.timeframe) {\n url.searchParams.set(\n \"timeframe\",\n TalerCorebankApi.MonitorTimeframeParam[params.timeframe],\n );\n }\n if (params.date) {\n const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);\n if (seconds !== \"never\") {\n url.searchParams.set(\"date_s\", String(seconds));\n }\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMonitorResponse());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Others API\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getIntegrationAPI(): URL {\n return new URL(`taler-integration/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getWireGatewayAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-wire-gateway/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getRevenueAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getAuthenticationAPI(username: string): URL {\n return new URL(`accounts/${username}/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getConversionInfoAPI(): URL {\n return new URL(`conversion-info/`, this.baseUrl);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n FailCasesByMethod,\n HttpStatusCode,\n LibtoolVersion,\n PaginationParams,\n ResultByMethod,\n TalerMerchantApi,\n codecForAbortResponse,\n codecForAccountAddResponse,\n codecForAccountKycRedirects,\n codecForAccountsSummaryResponse,\n codecForBankAccountEntry,\n codecForClaimResponse,\n codecForInstancesResponse,\n codecForInventorySummaryResponse,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n codecForMerchantRefundResponse,\n codecForOrderHistory,\n codecForOtpDeviceDetails,\n codecForOtpDeviceSummaryResponse,\n codecForOutOfStockResponse,\n codecForPaidRefundStatusResponse,\n codecForPaymentResponse,\n codecForPostOrderResponse,\n codecForProductDetail,\n codecForQueryInstancesResponse,\n codecForStatusGoto,\n codecForStatusPaid,\n codecForStatusStatusUnpaid,\n codecForTansferList,\n codecForTemplateDetails,\n codecForTemplateSummaryResponse,\n codecForTokenFamiliesList,\n codecForTokenFamilyDetails,\n codecForWalletRefundResponse,\n codecForWalletTemplateDetails,\n codecForWebhookDetails,\n codecForWebhookSummaryResponse,\n opEmptySuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n HttpResponse,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport { opSuccessFromHttp, opUnknownFailure } from \"../operation.js\";\nimport {\n CacheEvictor,\n addMerchantPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerMerchantInstanceResultByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = ResultByMethod<TalerMerchantInstanceHttpClient, prop>;\nexport type TalerMerchantInstanceErrorsByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = FailCasesByMethod<TalerMerchantInstanceHttpClient, prop>;\n\nexport enum TalerMerchantInstanceCacheEviction {\n CREATE_ORDER,\n UPDATE_ORDER,\n DELETE_ORDER,\n UPDATE_CURRENT_INSTANCE,\n DELETE_CURRENT_INSTANCE,\n CREATE_BANK_ACCOUNT,\n UPDATE_BANK_ACCOUNT,\n DELETE_BANK_ACCOUNT,\n CREATE_PRODUCT,\n UPDATE_PRODUCT,\n DELETE_PRODUCT,\n CREATE_TRANSFER,\n DELETE_TRANSFER,\n CREATE_DEVICE,\n UPDATE_DEVICE,\n DELETE_DEVICE,\n CREATE_TEMPLATE,\n UPDATE_TEMPLATE,\n DELETE_TEMPLATE,\n CREATE_WEBHOOK,\n UPDATE_WEBHOOK,\n DELETE_WEBHOOK,\n CREATE_TOKENFAMILY,\n UPDATE_TOKENFAMILY,\n DELETE_TOKENFAMILY,\n LAST,\n}\nexport enum TalerMerchantManagementCacheEviction {\n CREATE_INSTANCE = TalerMerchantInstanceCacheEviction.LAST + 1,\n UPDATE_INSTANCE,\n DELETE_INSTANCE,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerMerchantInstanceHttpClient {\n public readonly PROTOCOL_VERSION = \"10:0:6\";\n\n readonly httpLib: HttpRequestLibrary;\n readonly cacheEvictor: CacheEvictor<TalerMerchantInstanceCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerMerchantInstanceCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wallet API\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim\n */\n async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {\n const url = new URL(`orders/${orderId}/claim`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForClaimResponse());\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-pay\n */\n async makePayment(orderId: string, body: TalerMerchantApi.PayRequest) {\n const url = new URL(`orders/${orderId}/pay`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaymentResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PaymentRequired:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.RequestTimeout:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PreconditionFailed:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID\n */\n\n async getPaymentStatus(\n orderId: string,\n params: TalerMerchantApi.PaymentStatusRequestParams = {},\n ) {\n const url = new URL(`orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.awaitRefundObtained !== undefined) {\n url.searchParams.set(\n \"await_refund_obtained\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.claimToken !== undefined) {\n url.searchParams.set(\"token\", params.claimToken);\n }\n if (params.contractTermHash !== undefined) {\n url.searchParams.set(\"h_contract\", params.contractTermHash);\n }\n if (params.refund !== undefined) {\n url.searchParams.set(\"refund\", params.refund);\n }\n if (params.sessionId !== undefined) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout !== undefined) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n // body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForStatusPaid());\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForStatusGoto());\n // case HttpStatusCode.Found: not possible since content is not HTML\n case HttpStatusCode.PaymentRequired:\n return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#demonstrating-payment\n */\n async demostratePayment(orderId: string, body: TalerMerchantApi.PaidRequest) {\n const url = new URL(`orders/${orderId}/paid`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments\n */\n async abortIncompletePayment(\n orderId: string,\n body: TalerMerchantApi.AbortRequest,\n ) {\n const url = new URL(`orders/${orderId}/abort`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForAbortResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#obtaining-refunds\n */\n async obtainRefund(\n orderId: string,\n body: TalerMerchantApi.WalletRefundRequest,\n ) {\n const url = new URL(`orders/${orderId}/refund`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForWalletRefundResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth\n */\n async updateCurrentInstanceAuthentication(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(`private/auth`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: // FIXME: missing in docs\n return opEmptySuccess(resp);\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private\n */\n async updateCurrentInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private\n *\n */\n async getCurrentInstanceDetails(token: AccessToken) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private\n */\n async deleteCurrentInstance(\n token: AccessToken | undefined,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc\n */\n async getCurrentIntanceKycStatus(\n token: AccessToken | undefined,\n params: TalerMerchantApi.GetKycStatusRequestParams = {},\n ) {\n const url = new URL(`private/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForAccountKycRedirects(),\n );\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Bank Accounts\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts\n */\n async addBankAccount(\n token: AccessToken | undefined,\n body: TalerMerchantApi.AccountAddDetails,\n ) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForAccountAddResponse());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async updateBankAccount(\n token: AccessToken | undefined,\n wireAccount: string,\n body: TalerMerchantApi.AccountPatchDetails,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts\n */\n async listBankAccounts(token: AccessToken, params?: PaginationParams) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n // addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async getBankAccountDetails(\n token: AccessToken | undefined,\n wireAccount: string,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountEntry());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async deleteBankAccount(token: AccessToken | undefined, wireAccount: string) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Inventory Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products\n */\n async addProduct(\n token: AccessToken | undefined,\n body: TalerMerchantApi.ProductAddDetail,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async updateProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.ProductPatchDetail,\n ) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products\n */\n async listProducts(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInventorySummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: not in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async getProductDetails(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForProductDetail());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#reserving-inventory\n */\n async lockProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.LockRequest,\n ) {\n const url = new URL(`private/products/${productId}/lock`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory\n */\n async deleteProduct(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Payment processing\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders\n */\n async createOrder(\n token: AccessToken | undefined,\n body: TalerMerchantApi.PostOrderRequest,\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n return this.procesOrderCreationResponse(resp);\n }\n\n private async procesOrderCreationResponse(resp: HttpResponse) {\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPostOrderResponse());\n }\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-orders\n */\n async listOrders(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListOrdersRequestParams = {},\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n if (params.date) {\n url.searchParams.set(\"date_s\", String(params.date));\n }\n if (params.fulfillmentUrl) {\n url.searchParams.set(\"fulfillment_url\", params.fulfillmentUrl);\n }\n if (params.paid !== undefined) {\n url.searchParams.set(\"paid\", params.paid ? \"YES\" : \"NO\");\n }\n if (params.refunded !== undefined) {\n url.searchParams.set(\"refunded\", params.refunded ? \"YES\" : \"NO\");\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout\", String(params.timeout));\n }\n if (params.wired !== undefined) {\n url.searchParams.set(\"wired\", params.wired ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOrderHistory());\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async getOrderDetails(\n token: AccessToken | undefined,\n orderId: string,\n params: TalerMerchantApi.GetOrderRequestParams = {},\n ) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup\n */\n async forgetOrder(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.ForgetRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async deleteOrder(token: AccessToken | undefined, orderId: string) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Refunds\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund\n */\n async addRefund(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.RefundRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForMerchantRefundResponse());\n }\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wire Transfer\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers\n */\n async informWireTransfer(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TransferInformation,\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers\n */\n async listWireTransfers(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListWireTransferRequestParams = {},\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n if (params.after) {\n url.searchParams.set(\"after\", String(params.after));\n }\n if (params.before) {\n url.searchParams.set(\"before\", String(params.before));\n }\n if (params.paytoURI) {\n url.searchParams.set(\"payto_uri\", params.paytoURI);\n }\n if (params.verified !== undefined) {\n url.searchParams.set(\"verified\", params.verified ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTansferList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID\n */\n async deleteWireTransfer(token: AccessToken | undefined, transferId: string) {\n const url = new URL(`private/transfers/${transferId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // OTP Devices\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices\n */\n async addOtpDevice(\n token: AccessToken | undefined,\n body: TalerMerchantApi.OtpDeviceAddDetails,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async updateOtpDevice(\n token: AccessToken | undefined,\n deviceId: string,\n body: TalerMerchantApi.OtpDevicePatchDetails,\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices\n */\n async listOtpDevices(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async getOtpDeviceDetails(\n token: AccessToken | undefined,\n deviceId: string,\n params: TalerMerchantApi.GetOtpDeviceRequestParams = {},\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n if (params.faketime) {\n url.searchParams.set(\"faketime\", String(params.faketime));\n }\n if (params.price) {\n url.searchParams.set(\"price\", params.price);\n }\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async deleteOtpDevice(token: AccessToken | undefined, deviceId: string) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Templates\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates\n */\n async addTemplate(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TemplateAddDetails,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async updateTemplate(\n token: AccessToken | undefined,\n templateId: string,\n body: TalerMerchantApi.TemplatePatchDetails,\n ) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-template\n */\n async listTemplates(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async getTemplateDetails(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async deleteTemplate(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-templates-$TEMPLATE_ID\n */\n async useTemplateGetInfo(templateId: string) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWalletTemplateDetails());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID\n */\n async useTemplateCreateOrder(\n templateId: string,\n body: TalerMerchantApi.UsingTemplateDetails,\n ) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n return this.procesOrderCreationResponse(resp);\n }\n\n //\n // Webhooks\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks\n */\n async addWebhook(\n token: AccessToken | undefined,\n body: TalerMerchantApi.WebhookAddDetails,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async updateWebhook(\n token: AccessToken | undefined,\n webhookId: string,\n body: TalerMerchantApi.WebhookPatchDetails,\n ) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks\n */\n async listWebhooks(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWebhookSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async getWebhookDetails(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opSuccessFromHttp(resp, codecForWebhookDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async deleteWebhook(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // token families\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async createTokenFamily(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TokenFamilyCreateRequest,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async updateTokenFamily(\n token: AccessToken | undefined,\n tokenSlug: string,\n body: TalerMerchantApi.TokenFamilyUpdateRequest,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY,\n );\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async listTokenFamilies(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamiliesList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async getTokenFamilyDetails(\n token: AccessToken | undefined,\n tokenSlug: string,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async deleteTokenFamily(token: AccessToken | undefined, tokenSlug: string) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * Get the auth api against the current instance\n *\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token\n */\n getAuthenticationAPI(): URL {\n return new URL(`private/`, this.baseUrl);\n }\n}\n\nexport type TalerMerchantManagementResultByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = ResultByMethod<TalerMerchantManagementHttpClient, prop>;\nexport type TalerMerchantManagementErrorsByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = FailCasesByMethod<TalerMerchantManagementHttpClient, prop>;\n\nexport class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {\n readonly cacheManagementEvictor: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n // cacheManagementEvictor?: CacheEvictor<TalerMerchantManagementCacheEviction>,\n cacheEvictor?: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >,\n ) {\n super(baseUrl, httpClient, cacheEvictor);\n this.cacheManagementEvictor = cacheEvictor ?? nullEvictor;\n }\n\n getSubInstanceAPI(instanceId: string) {\n return new URL(`instances/${instanceId}/`, this.baseUrl);\n }\n\n //\n // Instance Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances\n */\n async createInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceConfigurationMessage,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.CREATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth\n */\n async updateInstanceAuthentication(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(\n `management/instances/${instanceId}/auth`,\n this.baseUrl,\n );\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE\n */\n async updateInstance(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.UPDATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances\n */\n async listInstances(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE\n *\n */\n async getInstanceDetails(token: AccessToken | undefined, instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE\n */\n async deleteInstance(\n token: AccessToken | undefined,\n instanceId: string,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.DELETE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc\n */\n async getIntanceKycStatus(\n token: AccessToken | undefined,\n instanceId: string,\n params: TalerMerchantApi.GetKycStatusRequestParams,\n ) {\n const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpRequestLibrary,\n makeBasicAuthHeader,\n readTalerErrorResponse,\n} from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n LongPollParams,\n PaginationParams,\n codecForRevenueConfig,\n codecForRevenueIncomingHistory,\n} from \"./types.js\";\nimport { addLongPollingParam, addPaginationParams } from \"./utils.js\";\n\nexport type TalerBankRevenueResultByMethod<\n prop extends keyof TalerRevenueHttpClient,\n> = ResultByMethod<TalerRevenueHttpClient, prop>;\nexport type TalerBankRevenueErrorsByMethod<\n prop extends keyof TalerRevenueHttpClient,\n> = FailCasesByMethod<TalerRevenueHttpClient, prop>;\n\ntype UsernameAndPassword = {\n username: string;\n password: string;\n};\n/**\n * The API is used by the merchant (or other parties) to query\n * for incoming transactions to their account.\n */\nexport class TalerRevenueHttpClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n }\n\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-revenue.html#get--config\n *\n */\n async getConfig(auth?: UsernameAndPassword) {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: auth\n ? makeBasicAuthHeader(auth.username, auth.password)\n : undefined,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForRevenueConfig());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-bank-revenue.html#get--history\n *\n * @returns\n */\n async getHistory(\n auth?: UsernameAndPassword,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`history`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: auth\n ? makeBasicAuthHeader(auth.username, auth.password)\n : undefined,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForRevenueIncomingHistory());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\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) 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 * IBAN validation.\n *\n * Currently only validates the checksum.\n *\n * It does not validate:\n * - Country-specific length\n * - Country-specific checksums\n *\n * The country list is also not complete.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\nexport type IbanValidationResult =\n | { type: \"invalid\" }\n | {\n type: \"valid\";\n normalizedIban: string;\n };\n\nexport interface IbanCountryInfo {\n name: string;\n isSepa?: boolean;\n length?: number;\n}\n\n/**\n * Incomplete list, see https://www.swift.com/resource/iban-registry-pdf\n */\nexport const ibanCountryInfoTable: Record<string, IbanCountryInfo> = {\n AE: { name: \"U.A.E.\" },\n AF: { name: \"Afghanistan\" },\n AL: { name: \"Albania\" },\n AM: { name: \"Armenia\" },\n AN: { name: \"Netherlands Antilles\" },\n AR: { name: \"Argentina\" },\n AT: { name: \"Austria\" },\n AU: { name: \"Australia\" },\n AZ: { name: \"Azerbaijan\" },\n BA: { name: \"Bosnia and Herzegovina\" },\n BD: { name: \"Bangladesh\" },\n BE: { name: \"Belgium\" },\n BG: { name: \"Bulgaria\" },\n BH: { name: \"Bahrain\" },\n BN: { name: \"Brunei Darussalam\" },\n BO: { name: \"Bolivia\" },\n BR: { name: \"Brazil\" },\n BT: { name: \"Bhutan\" },\n BY: { name: \"Belarus\" },\n BZ: { name: \"Belize\" },\n CA: { name: \"Canada\" },\n CG: { name: \"Congo\" },\n CH: { name: \"Switzerland\" },\n CI: { name: \"Cote d'Ivoire\" },\n CL: { name: \"Chile\" },\n CM: { name: \"Cameroon\" },\n CN: { name: \"People's Republic of China\" },\n CO: { name: \"Colombia\" },\n CR: { name: \"Costa Rica\" },\n CS: { name: \"Serbia and Montenegro\" },\n CZ: { name: \"Czech Republic\" },\n DE: { name: \"Germany\" },\n DK: { name: \"Denmark\" },\n DO: { name: \"Dominican Republic\" },\n DZ: { name: \"Algeria\" },\n EC: { name: \"Ecuador\" },\n EE: { name: \"Estonia\" },\n EG: { name: \"Egypt\" },\n ER: { name: \"Eritrea\" },\n ES: { name: \"Spain\" },\n ET: { name: \"Ethiopia\" },\n FI: { name: \"Finland\" },\n FO: { name: \"Faroe Islands\" },\n FR: { name: \"France\" },\n GB: { name: \"United Kingdom\" },\n GD: { name: \"Caribbean\" },\n GE: { name: \"Georgia\" },\n GL: { name: \"Greenland\" },\n GR: { name: \"Greece\" },\n GT: { name: \"Guatemala\" },\n HK: { name: \"Hong Kong S.A.R.\" },\n HN: { name: \"Honduras\" },\n HR: { name: \"Croatia\" },\n HT: { name: \"Haiti\" },\n HU: { name: \"Hungary\" },\n ID: { name: \"Indonesia\" },\n IE: { name: \"Ireland\" },\n IL: { name: \"Israel\" },\n IN: { name: \"India\" },\n IQ: { name: \"Iraq\" },\n IR: { name: \"Iran\" },\n IS: { name: \"Iceland\" },\n IT: { name: \"Italy\" },\n JM: { name: \"Jamaica\" },\n JO: { name: \"Jordan\" },\n JP: { name: \"Japan\" },\n KE: { name: \"Kenya\" },\n KG: { name: \"Kyrgyzstan\" },\n KH: { name: \"Cambodia\" },\n KR: { name: \"South Korea\" },\n KW: { name: \"Kuwait\" },\n KZ: { name: \"Kazakhstan\" },\n LA: { name: \"Laos\" },\n LB: { name: \"Lebanon\" },\n LI: { name: \"Liechtenstein\" },\n LK: { name: \"Sri Lanka\" },\n LT: { name: \"Lithuania\" },\n LU: { name: \"Luxembourg\" },\n LV: { name: \"Latvia\" },\n LY: { name: \"Libya\" },\n MA: { name: \"Morocco\" },\n MC: { name: \"Principality of Monaco\" },\n MD: { name: \"Moldava\" },\n ME: { name: \"Montenegro\" },\n MK: { name: \"Former Yugoslav Republic of Macedonia\" },\n ML: { name: \"Mali\" },\n MM: { name: \"Myanmar\" },\n MN: { name: \"Mongolia\" },\n MO: { name: \"Macau S.A.R.\" },\n MT: { name: \"Malta\" },\n MV: { name: \"Maldives\" },\n MX: { name: \"Mexico\" },\n MY: { name: \"Malaysia\" },\n NG: { name: \"Nigeria\" },\n NI: { name: \"Nicaragua\" },\n NL: { name: \"Netherlands\" },\n NO: { name: \"Norway\" },\n NP: { name: \"Nepal\" },\n NZ: { name: \"New Zealand\" },\n OM: { name: \"Oman\" },\n PA: { name: \"Panama\" },\n PE: { name: \"Peru\" },\n PH: { name: \"Philippines\" },\n PK: { name: \"Islamic Republic of Pakistan\" },\n PL: { name: \"Poland\" },\n PR: { name: \"Puerto Rico\" },\n PT: { name: \"Portugal\" },\n PY: { name: \"Paraguay\" },\n QA: { name: \"Qatar\" },\n RE: { name: \"Reunion\" },\n RO: { name: \"Romania\" },\n RS: { name: \"Serbia\" },\n RU: { name: \"Russia\" },\n RW: { name: \"Rwanda\" },\n SA: { name: \"Saudi Arabia\" },\n SE: { name: \"Sweden\" },\n SG: { name: \"Singapore\" },\n SI: { name: \"Slovenia\" },\n SK: { name: \"Slovak\" },\n SN: { name: \"Senegal\" },\n SO: { name: \"Somalia\" },\n SR: { name: \"Suriname\" },\n SV: { name: \"El Salvador\" },\n SY: { name: \"Syria\" },\n TH: { name: \"Thailand\" },\n TJ: { name: \"Tajikistan\" },\n TM: { name: \"Turkmenistan\" },\n TN: { name: \"Tunisia\" },\n TR: { name: \"Turkey\" },\n TT: { name: \"Trinidad and Tobago\" },\n TW: { name: \"Taiwan\" },\n TZ: { name: \"Tanzania\" },\n UA: { name: \"Ukraine\" },\n US: { name: \"United States\" },\n UY: { name: \"Uruguay\" },\n VA: { name: \"Vatican\" },\n VE: { name: \"Venezuela\" },\n VN: { name: \"Viet Nam\" },\n YE: { name: \"Yemen\" },\n ZA: { name: \"South Africa\" },\n ZW: { name: \"Zimbabwe\" },\n};\n\nlet ccZero = \"0\".charCodeAt(0);\nlet ccNine = \"9\".charCodeAt(0);\nlet ccA = \"A\".charCodeAt(0);\nlet ccZ = \"Z\".charCodeAt(0);\n\n/**\n * Append a IBAN digit(s) based on a char code.\n */\nfunction appendDigit(digits: number[], cc: number): boolean {\n if (cc >= ccZero && cc <= ccNine) {\n digits.push(cc - ccZero);\n } else if (cc >= ccA && cc <= ccZ) {\n const n = cc - ccA + 10;\n digits.push(Math.floor(n / 10) % 10);\n digits.push(n % 10);\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Compute MOD-97-10 as per ISO/IEC 7064:2003.\n */\nfunction mod97(digits: number[]): number {\n let i = 0;\n let modAccum = 0;\n while (i < digits.length) {\n let n = 0;\n while (n < 9 && i < digits.length) {\n modAccum = modAccum * 10 + digits[i];\n i++;\n n++;\n }\n modAccum = modAccum % 97;\n }\n return modAccum;\n}\n\nexport function validateIban(ibanString: string): IbanValidationResult {\n let myIban = ibanString.toLocaleUpperCase().replace(\" \", \"\");\n let countryCode = myIban.substring(0, 2);\n let countryInfo = ibanCountryInfoTable[countryCode];\n\n if (!countryInfo) {\n return {\n type: \"invalid\",\n };\n }\n\n let digits: number[] = [];\n\n for (let i = 4; i < myIban.length; i++) {\n const cc = myIban.charCodeAt(i);\n if (!appendDigit(digits, cc)) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n for (let i = 0; i < 4; i++) {\n if (!appendDigit(digits, ibanString.charCodeAt(i))) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n const rem = mod97(digits);\n if (rem === 1) {\n return {\n type: \"valid\",\n normalizedIban: myIban,\n };\n } else {\n return {\n type: \"invalid\",\n };\n }\n}\n\nexport function generateIban(countryCode: string, length: number): string {\n let ibanSuffix = \"\";\n let digits: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const cc = ccZero + (Math.floor(Math.random() * 100) % 10);\n appendDigit(digits, cc);\n ibanSuffix += String.fromCharCode(cc);\n }\n\n appendDigit(digits, countryCode.charCodeAt(0));\n appendDigit(digits, countryCode.charCodeAt(1));\n\n // Try using \"00\" as check digits\n appendDigit(digits, ccZero);\n appendDigit(digits, ccZero);\n\n const requiredChecksum = 98 - mod97(digits);\n\n const checkDigit1 = Math.floor(requiredChecksum / 10) % 10;\n const checkDigit2 = requiredChecksum % 10;\n\n return countryCode + checkDigit1 + checkDigit2 + ibanSuffix;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019-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 * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { AbsoluteTime } from \"./time.js\";\nimport { TransactionState } from \"./transactions-types.js\";\nimport { ExchangeEntryState, TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n BalanceChange = \"balance-change\",\n BackupOperationError = \"backup-error\",\n TransactionStateTransition = \"transaction-state-transition\",\n WithdrawalOperationTransition = \"withdrawal-operation-transition\",\n ExchangeStateTransition = \"exchange-state-transition\",\n TaskObservabilityEvent = \"task-observability-event\",\n RequestObservabilityEvent = \"request-observability-event\",\n}\n\nexport interface ErrorInfoSummary {\n code: number;\n hint?: string;\n message?: string;\n}\n\nexport interface TransactionStateTransitionNotification {\n type: NotificationType.TransactionStateTransition;\n transactionId: string;\n oldTxState: TransactionState;\n newTxState: TransactionState;\n errorInfo?: ErrorInfoSummary;\n\n /**\n * Additional \"user data\" that is dependent on the\n * state transition.\n *\n * Usage should be avoided.\n *\n * Currently used to notify the iOS app about\n * the KYC URL.\n */\n experimentalUserData?: any;\n}\n\nexport interface ExchangeStateTransitionNotification {\n type: NotificationType.ExchangeStateTransition;\n /**\n * Identification of the exchange entry that this\n * notification is about.\n */\n exchangeBaseUrl: string;\n\n /**\n * If missing, the notification means that\n * the exchange entry is newly created.\n */\n oldExchangeState?: ExchangeEntryState;\n\n /**\n * New state of the exchange.\n */\n newExchangeState: ExchangeEntryState;\n\n /**\n * Summary of the error that occurred when trying to update the exchange entry,\n * if applicable.\n */\n errorInfo?: ErrorInfoSummary;\n}\n\nexport interface BalanceChangeNotification {\n type: NotificationType.BalanceChange;\n\n /**\n * Transaction ID of the transaction that caused the balance update.\n *\n * Only used as a hint for debugging, should not be relied upon by clients.\n */\n hintTransactionId: string;\n}\n\nexport interface TaskProgressNotification {\n type: NotificationType.TaskObservabilityEvent;\n taskId: string;\n event: ObservabilityEvent;\n}\n\nexport interface RequestProgressNotification {\n type: NotificationType.RequestObservabilityEvent;\n requestId: string;\n operation: string;\n event: ObservabilityEvent;\n}\n\nexport enum ObservabilityEventType {\n HttpFetchStart = \"http-fetch-start\",\n HttpFetchFinishError = \"http-fetch-finish-error\",\n HttpFetchFinishSuccess = \"http-fetch-finish-success\",\n DbQueryStart = \"db-query-start\",\n DbQueryFinishSuccess = \"db-query-finish-success\",\n DbQueryFinishError = \"db-query-finish-error\",\n RequestStart = \"request-start\",\n RequestFinishSuccess = \"request-finish-success\",\n RequestFinishError = \"request-finish-error\",\n TaskStart = \"task-start\",\n TaskStop = \"task-stop\",\n TaskReset = \"task-reset\",\n ShepherdTaskResult = \"sheperd-task-result\",\n DeclareTaskDependency = \"declare-task-dependency\",\n CryptoStart = \"crypto-start\",\n CryptoFinishSuccess = \"crypto-finish-success\",\n CryptoFinishError = \"crypto-finish-error\",\n Message = \"message\",\n}\n\nexport type ObservabilityEvent =\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchStart;\n url: string;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishSuccess;\n url: string;\n status: number;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishError;\n url: string;\n error: TalerErrorDetail;\n }\n | {\n type: ObservabilityEventType.DbQueryStart;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishSuccess;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishError;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.RequestStart;\n }\n | {\n type: ObservabilityEventType.RequestFinishSuccess;\n durationMs: number;\n }\n | {\n type: ObservabilityEventType.RequestFinishError;\n }\n | {\n type: ObservabilityEventType.TaskStart;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskStop;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskReset;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.DeclareTaskDependency;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.CryptoStart;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishSuccess;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishError;\n operation: string;\n }\n | {\n type: ObservabilityEventType.ShepherdTaskResult;\n resultType: string;\n }\n | {\n type: ObservabilityEventType.Message;\n contents: string;\n };\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n/**\n * This notification is required to signal UI that\n * the withdrawal operation changed the state.\n *\n * https://bugs.gnunet.org/view.php?id=8099\n */\nexport interface WithdrawalOperationTransitionNotification {\n type: NotificationType.WithdrawalOperationTransition;\n uri: string;\n}\n\nexport type WalletNotification =\n | BalanceChangeNotification\n | WithdrawalOperationTransitionNotification\n | BackupOperationErrorNotification\n | ExchangeStateTransitionNotification\n | TransactionStateTransitionNotification\n | TaskProgressNotification\n | RequestProgressNotification;\n", "/*\n This file is part of GNU Taler\n (C) 2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n CancellationToken,\n ObservabilityEvent,\n} from \"./index.js\";\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http-common.js\";\nimport { ObservabilityEventType } from \"./notifications.js\";\nimport { getErrorDetailFromException } from \"./errors.js\";\n\n/**\n * Observability sink can be passed into various operations (HTTP requests, DB access)\n * to do structured logging within a particular context (task, request, ...).\n */\nexport interface ObservabilityContext {\n observe(evt: ObservabilityEvent): void;\n}\n\nlet seqId = 1000;\n\nexport class ObservableHttpClientLibrary implements HttpRequestLibrary {\n private readonly cancelatorById = new Map<string, CancellationToken.Source>();\n constructor(\n private impl: HttpRequestLibrary,\n private oc: ObservabilityContext,\n ) {}\n\n public cancelRequest(id: string): void {\n const cancelator = this.cancelatorById.get(id);\n if (!cancelator) return;\n cancelator.cancel();\n }\n\n async fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n const id = `req-${seqId}`;\n seqId = seqId + 1;\n\n const cancelator = CancellationToken.create();\n if (opt?.cancellationToken) {\n opt.cancellationToken.onCancelled(cancelator.cancel);\n }\n this.cancelatorById.set(id, cancelator);\n\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchStart,\n url: url,\n });\n\n const optsWithCancel = opt ?? {};\n optsWithCancel.cancellationToken = cancelator.token;\n try {\n const res = await this.impl.fetch(url, optsWithCancel);\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishSuccess,\n url,\n status: res.status,\n });\n return res;\n } catch (e) {\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishError,\n url,\n error: getErrorDetailFromException(e),\n });\n throw e;\n } finally {\n this.cancelatorById.delete(id);\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2024 Taler Systems SA\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { getRandomBytes } from \"./taler-crypto.js\";\n\nconst encTable = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\n/**\n * base32 RFC 3548\n */\nexport function encodeRfc3548Base32(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 isRfc3548Base32Charset(s: string): boolean {\n for (let idx = 0; idx < s.length; idx++) {\n const c = s.charAt(idx);\n if (encTable.indexOf(c) === -1) return false;\n }\n return true;\n}\n\nexport function randomRfc3548Base32Key(): string {\n const buf = getRandomBytes(20);\n return encodeRfc3548Base32(buf);\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 * Cross-platform timers.\n *\n * NodeJS and the browser use slightly different timer API,\n * this abstracts over these differences.\n */\n\n/**\n * Imports.\n */\nimport { Logger, Duration } from \"@gnu-taler/taler-util\";\n\nconst logger = new Logger(\"timer.ts\");\n\n/**\n * Cancelable timer.\n */\nexport interface TimerHandle {\n clear(): void;\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void;\n}\n\nclass IntervalHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearInterval(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\nclass TimeoutHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearTimeout(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\n/**\n * Get a performance counter in nanoseconds.\n */\nexport const performanceNow: () => bigint = (() => {\n // @ts-ignore\n if (typeof process !== \"undefined\" && process.hrtime) {\n return () => {\n return process.hrtime.bigint();\n };\n }\n\n // @ts-ignore\n if (typeof performance !== \"undefined\") {\n // @ts-ignore\n return () => BigInt(Math.floor(performance.now() * 1000)) * BigInt(1000);\n }\n\n return () => BigInt(new Date().getTime()) * BigInt(1000) * BigInt(1000);\n})();\n\nconst nullTimerHandle = {\n clear() {\n // do nothing\n return;\n },\n unref() {\n // do nothing\n return;\n },\n};\n\n/**\n * Group of timers that can be destroyed at once.\n */\nexport interface TimerAPI {\n after(delayMs: number, callback: () => void): TimerHandle;\n every(delayMs: number, callback: () => void): TimerHandle;\n}\n\nexport class SetTimeoutTimerAPI implements TimerAPI {\n /**\n * Call a function every time the delay given in milliseconds passes.\n */\n every(delayMs: number, callback: () => void): TimerHandle {\n return new IntervalHandle(setInterval(callback, delayMs));\n }\n\n /**\n * Call a function after the delay given in milliseconds passes.\n */\n after(delayMs: number, callback: () => void): TimerHandle {\n return new TimeoutHandle(setTimeout(callback, delayMs));\n }\n}\n\nexport const timer = new SetTimeoutTimerAPI();\n\n/**\n * Implementation of [[TimerGroup]] using setTimeout\n */\nexport class TimerGroup {\n private stopped = false;\n\n private readonly timerMap: { [index: number]: TimerHandle } = {};\n\n private idGen = 1;\n\n constructor(public readonly timerApi: TimerAPI) {}\n\n stopCurrentAndFutureTimers(): void {\n this.stopped = true;\n for (const x in this.timerMap) {\n if (!this.timerMap.hasOwnProperty(x)) {\n continue;\n }\n this.timerMap[x].clear();\n delete this.timerMap[x];\n }\n }\n\n resolveAfter(delayMs: Duration): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (delayMs.d_ms !== \"forever\") {\n this.after(delayMs.d_ms, () => {\n resolve();\n });\n }\n });\n }\n\n after(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.after(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\n }\n\n every(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.every(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\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\nimport {\n TransactionType,\n PaymentStatus,\n TransactionMajorState,\n} from \"./transactions-types.js\";\nimport { RefreshReason } from \"./wallet-types.js\";\n\n/**\n * Sample transaction list entries.\n */\nexport const sampleWalletCoreTransactions = [\n {\n type: TransactionType.Payment,\n txState: {\n major: TransactionMajorState.Done,\n },\n amountRaw: \"KUDOS:10\",\n amountEffective: \"KUDOS:10\",\n totalRefundRaw: \"KUDOS:0\",\n totalRefundEffective: \"KUDOS:0\",\n status: PaymentStatus.Paid,\n refundPending: undefined,\n posConfirmation: undefined,\n pending: false,\n refunds: [],\n timestamp: {\n t_s: 1677166045,\n },\n transactionId:\n \"txn:payment:NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n proposalId: \"NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n info: {\n merchant: {\n name: \"woocommerce\",\n website: \"woocommerce.demo.taler.net\",\n email: \"foo@example.com\",\n address: {},\n jurisdiction: {},\n },\n orderId: \"wc_order_KQCRldghIgDRB-100\",\n products: [\n {\n description: \"Using GCC\",\n quantity: 1,\n price: \"KUDOS:10\",\n product_id: \"28\",\n },\n ],\n summary: \"WooTalerShop #100\",\n contractTermsHash:\n \"A02E1M6ARWKBJ87K2TV4S6WQ4X5YH7BRVR6MYCHCTVAED8MBXTFD6PZ5Q50Y7Z5K18PYBTDA14NQ56XPC1VCQW1EVRWTSB7ZYT65B5G\",\n fulfillmentUrl:\n \"https://woocommerce.demo.taler.net/?wc-api=wc_gnutaler_gateway&order_id=wc_order_KQCRldghIgDRB-100\",\n },\n refundQueryActive: false,\n frozen: false,\n },\n {\n type: TransactionType.Refresh,\n txState: {\n major: TransactionMajorState.Pending,\n },\n refreshReason: RefreshReason.PayMerchant,\n amountEffective: \"KUDOS:0\",\n amountRaw: \"KUDOS:0\",\n refreshInputAmount: \"KUDOS:1.5\",\n refreshOutputAmount: \"KUDOS:1.4\",\n originatingTransactionId:\n \"txn:proposal:ZCGBZFE8KZ1CBYYGSC3ZC8E40KVJWV16VYCTHGC8FFSVZ5HD24BG\",\n pending: true,\n timestamp: {\n t_s: 1681376214,\n },\n transactionId:\n \"txn:refresh:QQSWHHXCRQ269G0E3RW14JMC6F7NFDYDW26NSFHRTXSKDS6CMCZ0\",\n frozen: false,\n error: {\n code: 7029,\n when: {\n t_ms: 1681376473665,\n },\n hint: \"Error (WALLET_REFRESH_GROUP_INCOMPLETE)\",\n numErrors: 1,\n errors: [\n {\n code: 7001,\n when: {\n t_ms: 1681376473189,\n },\n hint: \"unexpected exception (message: exchange wire fee signature invalid)\",\n stack:\n \" at validateWireInfo (../taler-wallet-core-qjs.mjs:23166)\\n\",\n },\n ],\n },\n },\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 { AbsoluteTime, Codec, codecForString } from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport {\n ObservableMap,\n browserStorageMap,\n localStorageMap,\n memoryMap,\n} from \"../utils/observable.js\";\n\ndeclare const opaque_StorageKey: unique symbol;\n\nexport type StorageKey<Key> = {\n id: string;\n [opaque_StorageKey]: true;\n codec: Codec<Key>;\n};\n\nexport function buildStorageKey<Key>(\n name: string,\n codec: Codec<Key>,\n): StorageKey<Key>;\nexport function buildStorageKey(name: string): StorageKey<string>;\nexport function buildStorageKey<Key = string>(\n name: string,\n codec?: Codec<Key>,\n): StorageKey<Key> {\n return {\n id: name,\n codec: codec ?? (codecForString() as Codec<Key>),\n } as StorageKey<Key>;\n}\n\nexport interface StorageState<Type = string> {\n value?: Type;\n update: (s: Type) => void;\n reset: () => void;\n}\n\nconst supportLocalStorage = typeof window !== \"undefined\";\nconst supportBrowserStorage =\n typeof chrome !== \"undefined\" && typeof chrome.storage !== \"undefined\";\n\n/**\n * Build setting storage\n */\nconst storage: ObservableMap<string, string> = (function buildStorage() {\n if (supportBrowserStorage) {\n //browser storage is like local storage but\n //with app sync.\n //Works for almost every browser\n if (supportLocalStorage) {\n return browserStorageMap(localStorageMap());\n } else {\n // service worker doesn't have local storage\n return browserStorageMap(memoryMap<string>());\n }\n } else if (supportLocalStorage) {\n // fallback if browser is too old\n return localStorageMap();\n } else {\n // new need to save settings somewhere\n return memoryMap<string>();\n }\n})();\n//with initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//without initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n): StorageState<Type>;\n// impl\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue?: Type,\n): StorageState<Type> {\n const current = convert(storage.get(key.id), key, defaultValue);\n\n const [_, setStoredValue] = useState(AbsoluteTime.now().t_ms);\n\n useEffect(() => {\n return storage.onUpdate(key.id, () => {\n // const newValue = storage.get(key.id);\n setStoredValue(AbsoluteTime.now().t_ms);\n });\n }, [key.id]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key.id);\n } else {\n storage.set(\n key.id,\n key.codec ? JSON.stringify(value) : (value as string),\n );\n }\n };\n\n return {\n value: current,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n\nfunction convert<Type>(updated: string | undefined, key: StorageKey<Type>, defaultValue?: Type): Type | undefined {\n if (updated === undefined) return defaultValue; //optional\n try {\n return key.codec.decode(JSON.parse(updated));\n } catch (e) {\n //decode error\n return defaultValue;\n }\n}\n", "import { isArrayBufferView } from \"util/types\";\n\nexport type ObservableMap<K, V> = Map<K, V> & {\n onAnyUpdate: (callback: () => void) => () => void;\n onUpdate: (key: string, callback: () => void) => () => void;\n};\n\n//FIXME: allow different type for different properties\nexport function memoryMap<T>(\n backend: Map<string, T> = new Map<string, T>(),\n): ObservableMap<string, T> {\n const obs = new EventTarget();\n const theMemoryMap: ObservableMap<string, T> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const result = backend.delete(key);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return result;\n },\n set: (key: string, value: T) => {\n backend.set(key, value);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theMemoryMap;\n },\n clear: () => {\n backend.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: backend.entries.bind(backend),\n forEach: backend.forEach.bind(backend),\n get: backend.get.bind(backend),\n has: backend.has.bind(backend),\n keys: backend.keys.bind(backend),\n size: backend.size,\n values: backend.values.bind(backend),\n [Symbol.iterator]: backend[Symbol.iterator],\n [Symbol.toStringTag]: \"theMemoryMap\",\n };\n return theMemoryMap;\n}\n\n//FIXME: change this implementation to match the\n// browser storage. instead of creating a sync implementation\n// of observable map it should reuse the memoryMap and\n// sync the state with local storage\nexport function localStorageMap(): ObservableMap<string, string> {\n const obs = new EventTarget();\n const theLocalStorageMap: ObservableMap<string, string> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n window.addEventListener(\"storage\", handler);\n return () => {\n window.removeEventListener(\"storage\", handler);\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n function handleStorageEvent(ev: StorageEvent) {\n if (ev.key === null || ev.key === key) {\n handler();\n }\n }\n window.addEventListener(\"storage\", handleStorageEvent);\n return () => {\n window.removeEventListener(\"storage\", handleStorageEvent);\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const exists = localStorage.getItem(key) !== null;\n localStorage.removeItem(key);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return exists;\n },\n set: (key: string, v: string) => {\n localStorage.setItem(key, v);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theLocalStorageMap;\n },\n clear: () => {\n localStorage.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: (): IterableIterator<[string, string]> => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: [key, item] };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n forEach: (cb) => {\n for (let index = 0; index < localStorage.length; index++) {\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n cb(key, item, theLocalStorageMap);\n }\n },\n get: (key: string) => {\n const item = localStorage.getItem(key);\n if (item === null) return undefined;\n return item;\n },\n has: (key: string) => {\n return localStorage.getItem(key) === null;\n },\n keys: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n index = index + 1;\n return { done: false, value: key };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n size: localStorage.length,\n values: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: item };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n [Symbol.iterator]: function (): IterableIterator<[string, string]> {\n return theLocalStorageMap.entries();\n },\n [Symbol.toStringTag]: \"theLocalStorageMap\",\n };\n return theLocalStorageMap;\n}\n\nconst isFirefox =\n typeof (window as any) !== \"undefined\" &&\n typeof (window as any)[\"InstallTrigger\"] !== \"undefined\";\n\nasync function getAllContent() {\n //Firefox and Chrome has different storage api\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.get();\n } else {\n return chrome.storage.local.get();\n }\n}\n\nasync function updateContent(obj: Record<string, any>) {\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.set(obj);\n } else {\n return chrome.storage.local.set(obj);\n }\n}\ntype Changes = { [key: string]: { oldValue?: any; newValue?: any } };\nfunction onBrowserStorageUpdate(cb: (changes: Changes) => void): void {\n if (isFirefox) {\n // @ts-ignore\n browser.storage.local.onChanged.addListener(cb);\n } else {\n chrome.storage.local.onChanged.addListener(cb);\n }\n}\n\nexport function browserStorageMap(\n backend: ObservableMap<string, string>,\n): ObservableMap<string, string> {\n getAllContent().then(content => {\n Object.entries(content ?? {}).forEach(([k, v]) => {\n backend.set(k, v as string);\n });\n })\n\n backend.onAnyUpdate(async () => {\n const result: Record<string, string> = {};\n for (const [key, value] of backend.entries()) {\n result[key] = value;\n }\n await updateContent(result);\n });\n\n onBrowserStorageUpdate((changes) => {\n //another chrome instance made the change\n const changedItems = Object.keys(changes);\n if (changedItems.length === 0) {\n backend.clear();\n } else {\n for (const key of changedItems) {\n if (!changes[key].newValue) {\n backend.delete(key);\n } else {\n if (changes[key].newValue !== changes[key].oldValue) {\n backend.set(key, changes[key].newValue);\n }\n }\n }\n }\n });\n\n return backend;\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 {\n StorageState,\n buildStorageKey,\n useLocalStorage,\n} from \"./useLocalStorage.js\";\n\nconst MIN_LANG_COVERAGE_THRESHOLD = 90;\n/**\n * choose the best from the browser config based on the completeness\n * on the translation\n */\nfunction getBrowserLang(completeness: Record<string, number>): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n\n if (window.navigator.language) {\n if (completeness[window.navigator.language] >= MIN_LANG_COVERAGE_THRESHOLD) {\n return window.navigator.language\n }\n }\n if (window.navigator.languages) {\n const match = Object.entries(completeness).filter(([code, value]) => {\n if (value < MIN_LANG_COVERAGE_THRESHOLD) return false; //do not consider langs below 90%\n return window.navigator.languages.findIndex(l => l.startsWith(code)) !== -1\n }).map(([code, value]) => ({ code, value }))\n\n if (match.length > 0) {\n let max = match[0]\n match.forEach(v => {\n if (v.value > max.value) {\n max = v\n }\n })\n return max.code\n }\n };\n\n return undefined;\n}\n\nconst langPreferenceKey = buildStorageKey(\"lang-preference\");\n\nexport function useLang(initial: string | undefined, completeness: Record<string, number>): Required<StorageState> {\n const defaultValue = (getBrowserLang(completeness) || initial || \"en\").substring(0, 2);\n return useLocalStorage(langPreferenceKey, defaultValue);\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ObservableMap, memoryMap } from \"../utils/observable.js\";\nimport { StorageKey, StorageState } from \"./useLocalStorage.js\";\n\nconst storage: ObservableMap<string, any> = memoryMap<any>();\n\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n): StorageState<Type>;\n// impl\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue?: Type,\n): StorageState<Type> {\n const [storedValue, setStoredValue] = useState<Type | undefined>(\n (): Type | undefined => {\n const prev = storage.get(key);\n return prev === undefined ? defaultValue : prev;\n },\n );\n\n useEffect(() => {\n return storage.onUpdate(key, () => {\n const newValue = storage.get(key);\n setStoredValue(newValue === undefined ? defaultValue : newValue);\n });\n }, [key]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key);\n } else {\n storage.set(key, value);\n }\n };\n\n return {\n value: storedValue,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n", "import {\n AbsoluteTime,\n Duration,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ButtonHandler } from \"../components/Button.js\";\nimport {\n InternationalizationAPI,\n memoryMap,\n useTranslationContext,\n} from \"../index.browser.js\";\n\nexport type NotificationMessage = ErrorNotification | InfoNotification;\n\nexport interface ErrorNotification {\n type: \"error\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n description?: TranslatedString;\n debug?: any;\n when: AbsoluteTime;\n}\nexport interface InfoNotification {\n type: \"info\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n when: AbsoluteTime;\n}\n\nconst storage = memoryMap<Map<string, NotificationMessage>>();\nconst NOTIFICATION_KEY = \"notification\";\n\nexport const GLOBAL_NOTIFICATION_TIMEOUT = Duration.fromSpec({\n seconds: 5,\n});\n\nfunction updateInStorage(n: NotificationMessage) {\n const h = hash(n);\n const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = new Map(mem);\n newState.set(h, n);\n storage.set(NOTIFICATION_KEY, newState);\n}\n\nexport function notify(notif: NotificationMessage): void {\n const currentState: Map<string, NotificationMessage> =\n storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = currentState.set(hash(notif), notif);\n\n if (GLOBAL_NOTIFICATION_TIMEOUT.d_ms !== \"forever\") {\n setTimeout(() => {\n notif.timeout = true;\n updateInStorage(notif);\n }, GLOBAL_NOTIFICATION_TIMEOUT.d_ms);\n }\n\n storage.set(NOTIFICATION_KEY, newState);\n}\nexport function notifyError(\n title: TranslatedString,\n description: TranslatedString | undefined,\n debug?: any,\n) {\n notify({\n type: \"error\" as const,\n title,\n description,\n debug,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyException(title: TranslatedString, ex: Error) {\n notify({\n type: \"error\" as const,\n title,\n description: ex.message as TranslatedString,\n debug: ex.stack,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyInfo(title: TranslatedString) {\n notify({\n type: \"info\" as const,\n title,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type Notification = {\n message: NotificationMessage;\n acknowledge: () => void;\n};\n\nexport function useNotifications(): Notification[] {\n const [, setLastUpdate] = useState<number>();\n const value = storage.get(NOTIFICATION_KEY) ?? new Map();\n\n useEffect(() => {\n return storage.onUpdate(NOTIFICATION_KEY, () => {\n setLastUpdate(Date.now())\n // const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n // setter(structuredClone(mem));\n });\n });\n\n return Array.from(value.values()).map((message, idx) => {\n return {\n message,\n acknowledge: () => {\n message.ack = true;\n updateInStorage(message);\n },\n };\n });\n}\n\nfunction hashCode(str: string): string {\n if (str.length === 0) return \"0\";\n let hash = 0;\n let chr;\n for (let i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash.toString(16);\n}\n\nfunction hash(msg: NotificationMessage): string {\n let str = (msg.type + \":\" + msg.title) as string;\n if (msg.type === \"error\") {\n if (msg.description) {\n str += \":\" + msg.description;\n }\n if (msg.debug) {\n str += \":\" + msg.debug;\n }\n }\n return hashCode(str);\n}\n\nfunction errorMap<T extends OperationFail<unknown>>(\n resp: T,\n map: (d: T[\"case\"]) => TranslatedString,\n): void {\n notify({\n type: \"error\",\n title: map(resp.case),\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type ErrorNotificationHandler = (\n cb: (notify: typeof errorMap) => Promise<void>,\n) => Promise<void>;\n\n/**\n * @deprecated use useLocalNotificationHandler\n *\n * @returns\n */\nexport function useLocalNotification(): [\n Notification | undefined,\n (n: NotificationMessage) => void,\n ErrorNotificationHandler,\n] {\n const { i18n } = useTranslationContext();\n\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n async function errorHandling(cb: (notify: typeof errorMap) => Promise<void>) {\n try {\n return await cb(errorMap);\n } catch (error: unknown) {\n if (error instanceof TalerError) {\n notify(buildUnifiedRequestErrorMessage(i18n, error));\n } else {\n notifyError(\n i18n.str`Operation failed, please report`,\n (error instanceof Error\n ? error.message\n : JSON.stringify(error)) as TranslatedString,\n );\n }\n }\n }\n return [notif, setter, errorHandling];\n}\n\ntype HandlerMaker = <T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:\n | ((result: T extends OperationOk<any> ? T : never) => void)\n | ((\n result: T extends OperationOk<any> ? T : never,\n ) => TranslatedString | undefined),\n onOperationFail: (\n d: T extends OperationFail<any> ? T : never,\n ) => TranslatedString,\n onOperationComplete?: () => void,\n) => ButtonHandler<T, A, B>;\n\nexport function useLocalNotificationHandler(): [\n Notification | undefined,\n HandlerMaker,\n (n: NotificationMessage) => void,\n] {\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n function makeHandler<T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:\n | ((result: T extends OperationOk<any> ? T : never) => void)\n | ((\n result: T extends OperationOk<any> ? T : never,\n ) => TranslatedString | undefined),\n onOperationFail: (\n d: T extends OperationFail<any> ? T : never,\n ) => TranslatedString,\n onOperationComplete?: () => void,\n ): ButtonHandler<T, A, B> {\n return {\n onClick,\n onNotification: setter,\n onOperationFail,\n onOperationSuccess,\n onOperationComplete,\n };\n }\n\n return [notif, makeHandler, setter];\n}\n\nexport function buildUnifiedRequestErrorMessage(\n i18n: InternationalizationAPI,\n cause: TalerError,\n): ErrorNotification {\n let result: ErrorNotification;\n switch (cause.errorDetail.code) {\n case TalerErrorCode.GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Request cancelled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n result = {\n type: \"error\",\n title: i18n.str`Request throttled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n result = {\n type: \"error\",\n title: i18n.str`Malformed response`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Network error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected request error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n default: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n }\n return result;\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport enum ErrorType {\n CLIENT,\n SERVER,\n UNREADABLE,\n TIMEOUT,\n UNEXPECTED,\n}\n\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 * @deprecated do not use it, it will be removed\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 secret-token:${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 || options.contentType === \"json\" ? \"application/json\" : \"text/plain\";\n\n if (options.talerAmlOfficerSignature) {\n requestHeaders[\"Taler-AML-Officer-Signature\"] =\n options.talerAmlOfficerSignature;\n }\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 const requestPreventCache = options.preventCache ?? false;\n const requestPreventCors = options.preventCors ?? false;\n\n const validURL = validateURL(baseUrl, endpoint);\n\n if (!validURL) {\n const error: HttpResponseUnexpectedError = {\n info: {\n url: `${baseUrl}${endpoint}`,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `invalid URL: \"${baseUrl}${endpoint}\"`,\n };\n throw new RequestError(error)\n }\n\n Object.entries(requestParams).forEach(([key, value]) => {\n validURL.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 const error: HttpResponseUnexpectedError = {\n info: {\n url: validURL.href,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `unsupported request body type: \"${typeof requestBody}\"`,\n };\n throw new RequestError(error)\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(validURL.href, {\n headers: requestHeaders,\n method: requestMethod,\n credentials: \"omit\",\n mode: requestPreventCors ? \"no-cors\" : \"cors\",\n cache: requestPreventCache ? \"no-cache\" : \"default\",\n body: payload,\n signal: controller.signal,\n });\n } catch (ex) {\n const info: RequestInfo = {\n payload,\n url: validURL.href,\n hasToken: !!options.token,\n status: 0,\n options,\n };\n\n if (ex instanceof Error) {\n if (ex.message === \"HTTP_REQUEST_TIMEOUT\") {\n const error: HttpRequestTimeoutError = {\n info,\n type: ErrorType.TIMEOUT,\n message: \"request timeout\",\n };\n throw new RequestError(error);\n }\n }\n\n const error: HttpResponseUnexpectedError = {\n info,\n type: ErrorType.UNEXPECTED,\n exception: ex,\n loading: false,\n message: (ex instanceof Error ? ex.message : \"\"),\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 validURL.href,\n payload,\n !!options.token,\n options,\n );\n return result;\n } else {\n const dataTxt = await response.text();\n const error = buildRequestFailed(\n validURL.href,\n dataTxt,\n response.status,\n payload,\n options,\n );\n throw new RequestError(error);\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponse<T, ErrorDetail> =\n | HttpResponseOk<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponsePaginated<T, ErrorDetail> =\n | HttpResponseOkPaginated<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestInfo {\n url: string;\n hasToken: boolean;\n payload: any;\n status: number;\n options: RequestOptions;\n}\n\ninterface HttpResponseLoading<T> {\n ok?: false;\n loading: true;\n clientError?: false;\n serverError?: false;\n\n data?: T;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface WithPagination {\n loadMore: () => void;\n loadMorePrev: () => void;\n isReachingEnd?: boolean;\n isReachingStart?: boolean;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpError<ErrorDetail> =\n | HttpRequestTimeoutError\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface HttpResponseServerError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.SERVER;\n payload: ErrorDetail;\n status: HttpStatusCode;\n message: string;\n info: RequestInfo;\n}\ninterface HttpRequestTimeoutError {\n ok?: false;\n loading?: false;\n type: ErrorType.TIMEOUT;\n\n info: RequestInfo;\n\n message: string;\n}\ninterface HttpResponseClientError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.CLIENT;\n\n info: RequestInfo;\n status: HttpStatusCode;\n payload: ErrorDetail;\n message: string;\n}\n\ninterface HttpResponseUnexpectedError {\n ok?: false;\n loading: false;\n type: ErrorType.UNEXPECTED;\n\n info: RequestInfo;\n status?: HttpStatusCode;\n exception: unknown;\n message: string;\n}\n\ninterface HttpResponseUnreadableError {\n ok?: false;\n loading: false;\n type: ErrorType.UNREADABLE;\n\n info: RequestInfo;\n status: HttpStatusCode;\n exception: unknown;\n body: string;\n message: string;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestOptions {\n method?: Methods;\n token?: string;\n basicAuth?: {\n username: string;\n password: string;\n };\n preventCache?: boolean;\n preventCors?: boolean;\n data?: any;\n params?: unknown;\n timeout?: number;\n contentType?: \"text\" | \"json\";\n talerAmlOfficerSignature?: string;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nasync function buildRequestOk<T>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n options: RequestOptions,\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 options,\n status: response.status,\n },\n };\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport function buildRequestFailed<ErrorDetail>(\n url: string,\n dataTxt: string,\n status: number,\n payload: any,\n maybeOptions?: RequestOptions,\n):\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError {\n const options = maybeOptions ?? {};\n const info: RequestInfo = {\n payload,\n url,\n hasToken: !!options.token,\n options,\n status: status || 0,\n };\n\n // const dataTxt = await response.text();\n try {\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n const errorCode = !data || !data.code ? \"\" : `(code: ${data.code})`;\n const errorHint =\n !data || !data.hint ? \"Not hint.\" : `${data.hint} ${errorCode}`;\n\n if (status && status >= 400 && status < 500) {\n const message =\n data === undefined\n ? `Client error (${status}) without data.`\n : errorHint;\n\n const error: HttpResponseClientError<ErrorDetail> = {\n type: ErrorType.CLIENT,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n if (status && status >= 500 && status < 600) {\n const message =\n data === undefined\n ? `Server error (${status}) without data.`\n : errorHint;\n const error: HttpResponseServerError<ErrorDetail> = {\n type: ErrorType.SERVER,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n return {\n info,\n loading: false,\n type: ErrorType.UNEXPECTED,\n status,\n exception: undefined,\n message: `http status code not handled: ${status}`,\n };\n } catch (ex) {\n const error: HttpResponseUnreadableError = {\n info,\n loading: false,\n status,\n type: ErrorType.UNREADABLE,\n exception: ex,\n body: dataTxt,\n message: \"Could not parse body as json\",\n };\n\n return error;\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nfunction validateURL(baseUrl: string, endpoint: string): URL | undefined {\n try {\n return new URL(`${baseUrl}${endpoint}`)\n } catch (ex) {\n return undefined\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 * Imports.\n */\nimport {\n Logger,\n RequestThrottler,\n TalerErrorCode,\n TalerError,\n Duration,\n} from \"@gnu-taler/taler-util\";\n\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n Headers,\n getDefaultHeaders,\n encodeBody,\n DEFAULT_REQUEST_TIMEOUT_MS,\n HttpLibArgs,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"browserHttpLib\");\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n * \n * @deprecated use BrowserFetchHttpLib\n */\nexport class BrowserHttpLibDepreacted implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n let myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n return new Promise<HttpResponse>((resolve, reject) => {\n const myRequest = new XMLHttpRequest();\n\n myRequest.onerror = (e) => {\n logger.error(\"http request error\");\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"Could not make request\",\n ),\n );\n };\n\n myRequest.open(requestMethod, requestUrl);\n\n let timeoutId: any | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n myRequest.abort();\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `request to ${requestUrl} timed out`,\n ),\n );\n }, requestTimeout.d_ms);\n }\n\n Object.keys(requestHeadersMap).forEach((headerName) => {\n myRequest.setRequestHeader(headerName, requestHeadersMap[headerName]);\n });\n\n myRequest.responseType = \"arraybuffer\";\n myRequest.send(myBody);\n\n myRequest.addEventListener(\"readystatechange\", (e) => {\n if (myRequest.readyState === XMLHttpRequest.DONE) {\n if (myRequest.status === 0) {\n const exc = TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"HTTP request failed (status 0, maybe URI scheme was wrong?)\",\n );\n reject(exc);\n return;\n }\n const makeText = async (): Promise<string> => {\n const td = new TextDecoder();\n return td.decode(myRequest.response);\n };\n let responseJson: unknown = undefined;\n const makeJson = async (): Promise<any> => {\n if (responseJson === undefined) {\n try {\n const td = new TextDecoder();\n const responseString = td.decode(myRequest.response);\n responseJson = JSON.parse(responseString);\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n return responseJson;\n };\n\n const headers = myRequest.getAllResponseHeaders();\n const arr = headers.trim().split(/[\\r\\n]+/);\n\n // Create a map of header names to values\n const headerMap: Headers = new Headers();\n arr.forEach(function (line) {\n const parts = line.split(\": \");\n const headerName = parts.shift();\n if (!headerName) {\n logger.warn(\"skipping invalid header\");\n return;\n }\n const value = parts.join(\": \");\n headerMap.set(headerName, value);\n });\n const resp: HttpResponse = {\n requestUrl: requestUrl,\n status: myRequest.status,\n headers: headerMap,\n requestMethod: requestMethod,\n json: makeJson,\n text: makeText,\n bytes: async () => myRequest.response,\n };\n resolve(resp);\n }\n });\n });\n }\n\n get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"GET\",\n ...opt,\n });\n }\n\n postJson(\n url: string,\n body: any,\n opt?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n ...opt,\n });\n }\n\n stop(): void {\n // Nothing to do\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 * Imports.\n */\nimport {\n Duration,\n RequestThrottler,\n TalerError,\n TalerErrorCode\n} from \"@gnu-taler/taler-util\";\n\nimport {\n DEFAULT_REQUEST_TIMEOUT_MS,\n Headers,\n HttpLibArgs,\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n encodeBody,\n getDefaultHeaders,\n} from \"@gnu-taler/taler-util/http\";\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n */\nexport class BrowserFetchHttpLib implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n public constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n async fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n const requestCancel = options?.cancellationToken;\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n const myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n controller.abort(TalerErrorCode.GENERIC_TIMEOUT);\n }, requestTimeout.d_ms);\n }\n if (requestCancel) {\n requestCancel.onCancelled(() => {\n controller.abort(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)\n });\n }\n\n try {\n const response = await fetch(requestUrl, {\n headers: requestHeadersMap,\n body: myBody,\n method: requestMethod,\n signal: controller.signal,\n });\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n const headerMap = new Headers();\n response.headers.forEach((value, key) => {\n headerMap.set(key, value);\n });\n return {\n headers: headerMap,\n status: response.status,\n requestMethod,\n requestUrl,\n json: makeJsonHandler(response, requestUrl, requestMethod),\n text: makeTextHandler(response, requestUrl, requestMethod),\n bytes: async () => (await response.blob()).arrayBuffer(),\n };\n } catch (e) {\n if (controller.signal) {\n throw TalerError.fromDetail(\n controller.signal.reason,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `HTTP request failed.`,\n );\n }\n throw e;\n }\n }\n\n}\n\nfunction makeTextHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n return async function getTextFromResponse(): Promise<any> {\n let respText;\n try {\n respText = await response.text();\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid text from HTTP response\",\n );\n }\n return respText;\n };\n}\n\nfunction makeJsonHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n let responseJson: unknown = undefined;\n return async function getJsonFromResponse(): Promise<any> {\n if (responseJson === undefined) {\n try {\n responseJson = await response.json();\n } catch (e) {\n const message = e instanceof Error ? `Invalid JSON from HTTP response: ${e.message}` : \"Invalid JSON from HTTP response\"\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n message,\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid JSON from HTTP response: null or not object\",\n );\n }\n return responseJson;\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\ndeclare const __location: unique symbol;\n/**\n * special string that defined a location in the application\n *\n * this help to prevent wrong path\n */\nexport type AppLocation = string & {\n [__location]: true;\n};\n\nexport type EmptyObject = Record<string, never>;\n\nexport function urlPattern<\n T extends Record<string, string | undefined> = EmptyObject,\n>(pattern: RegExp, reverse: (p: T) => string): RouteDefinition<T> {\n const url = reverse as (p: T) => AppLocation;\n return {\n pattern: new RegExp(pattern),\n url,\n };\n}\n\n/**\n * defines a location in the app\n *\n * pattern: how a string will trigger this location\n * url(): how a state serialize to a location\n */\n\nexport type ObjectOf<T> = Record<string, T> | EmptyObject;\n\nexport type RouteDefinition<\n T extends ObjectOf<string | undefined> = EmptyObject,\n> = {\n pattern: RegExp;\n url: (p: T) => AppLocation;\n};\n\nconst nullRountDef = {\n pattern: new RegExp(/.*/),\n url: () => \"\" as AppLocation,\n};\nexport function buildNullRoutDefinition<\n T extends ObjectOf<string>,\n>(): RouteDefinition<T> {\n return nullRountDef;\n}\n\n/**\n * Search path in the pageList\n * get the values from the path found\n * add params from searchParams\n *\n * @param path\n * @param params\n */\nexport function findMatch<T extends ObjectOf<RouteDefinition>>(\n pagesMap: T,\n pageList: Array<keyof T>,\n path: string,\n params: Record<string, string>,\n): Location<T> | undefined {\n for (let idx = 0; idx < pageList.length; idx++) {\n const name = pageList[idx];\n const found = pagesMap[name].pattern.exec(path);\n if (found !== null) {\n const values = {} as Record<string, unknown>;\n\n Object.entries(params).forEach(([key, value]) => {\n values[key] = value;\n });\n\n if (found.groups !== undefined) {\n Object.entries(found.groups).forEach(([key, value]) => {\n values[key] = value;\n });\n }\n\n // @ts-expect-error values is a map string which is equivalent to the RouteParamsType\n return { name, parent: pagesMap, values };\n }\n }\n return undefined;\n}\n\n/**\n * get the type of the params of a location\n *\n */\ntype RouteParamsType<\n RouteType,\n Key extends keyof RouteType,\n> = RouteType[Key] extends RouteDefinition<infer ParamType> ? ParamType : never;\n\n/**\n * Helps to create a map of a type with the key\n */\ntype MapKeyValue<Type> = {\n [Key in keyof Type]: Key extends string\n ? {\n parent: Type;\n name: Key;\n values: RouteParamsType<Type, Key>;\n }\n : never;\n};\n\n/**\n * create a enumeration of value of a mapped type\n */\ntype EnumerationOf<T> = T[keyof T];\n\nexport type Location<T> = EnumerationOf<MapKeyValue<T>>;\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 { TalerBankIntegrationHttpClient, TalerCoreBankHttpClient, TalerRevenueHttpClient, TalerWireGatewayHttpClient } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { defaultRequestHandler } from \"../utils/request.js\";\n\ninterface Type {\n /**\n * @deprecated this show not be used\n */\n request: typeof defaultRequestHandler;\n bankCore: TalerCoreBankHttpClient,\n bankIntegration: TalerBankIntegrationHttpClient,\n bankWire: TalerWireGatewayHttpClient,\n bankRevenue: TalerRevenueHttpClient,\n}\n\nconst Context = createContext<Type>({ request: defaultRequestHandler } as any);\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\";\nimport { Locale } from \"date-fns\";\nimport {\n es as esLocale,\n enGB as enLocale,\n fr as frLocale,\n de as deLocale\n} from \"date-fns/locale\"\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 dateLocale: Locale,\n completeness: { [id in keyof typeof supportedLang]: number }\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};\n\nconst initial: Type = {\n lang: \"en\",\n supportedLang,\n changeLanguage: () => {\n // do not change anything\n },\n i18n,\n dateLocale: enLocale,\n completeness: {\n de: 0,\n en: 0,\n es: 0,\n fr: 0,\n it: 0,\n sv: 0,\n }\n};\nconst Context = createContext<Type>(initial);\n\ninterface Props {\n initial?: string;\n children: ComponentChildren;\n forceLang?: string;\n source: Record<string, any>;\n completeness?: Record<string, number>;\n}\n\n// Outmost UI wrapper.\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\n source,\n completeness: completenessProp\n}: Props): VNode => {\n const completeness = {\n en: 100,\n de: !completenessProp || !completenessProp[\"de\"] ? 0 : completenessProp[\"de\"],\n es: !completenessProp || !completenessProp[\"es\"] ? 0 : completenessProp[\"es\"],\n fr: !completenessProp || !completenessProp[\"fr\"] ? 0 : completenessProp[\"fr\"],\n it: !completenessProp || !completenessProp[\"it\"] ? 0 : completenessProp[\"it\"],\n sv: !completenessProp || !completenessProp[\"sv\"] ? 0 : completenessProp[\"sv\"],\n }\n const { value: lang, update: changeLanguage } = useLang(initial, completeness);\n\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 const dateLocale = lang === \"es\" ? esLocale :\n lang === \"fr\" ? frLocale :\n lang === \"de\" ? deLocale :\n enLocale;\n\n return h(Context.Provider, {\n value: { lang, changeLanguage, supportedLang, i18n, dateLocale, completeness },\n children,\n });\n};\n\nexport const useTranslationContext = (): Type => useContext(Context);\n", "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}", "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}", "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}", "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}", "import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\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}", "/**\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;", "import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\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 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 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 requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n var _options$step;\n\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start 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 start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\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;", "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;", "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;", "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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\n\nexport default function getMinutes(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var minutes = date.getMinutes();\n return minutes;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\n\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\n\nexport default function getSeconds(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var seconds = date.getSeconds();\n return seconds;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\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\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n function Setter() {\n _classCallCheck(this, Setter);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n _createClass(Setter, [{\n key: \"validate\",\n value: function validate(_utcDate, _options) {\n return true;\n }\n }]);\n\n return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n _inherits(ValueSetter, _Setter);\n\n var _super = _createSuper(ValueSetter);\n\n function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n var _this;\n\n _classCallCheck(this, ValueSetter);\n\n _this = _super.call(this);\n _this.value = value;\n _this.validateValue = validateValue;\n _this.setValue = setValue;\n _this.priority = priority;\n\n if (subPriority) {\n _this.subPriority = subPriority;\n }\n\n return _this;\n }\n\n _createClass(ValueSetter, [{\n key: \"validate\",\n value: function validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n }, {\n key: \"set\",\n value: function set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n }]);\n\n return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n _inherits(DateToSystemTimezoneSetter, _Setter2);\n\n var _super2 = _createSuper(DateToSystemTimezoneSetter);\n\n function DateToSystemTimezoneSetter() {\n var _this2;\n\n _classCallCheck(this, DateToSystemTimezoneSetter);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n\n return _this2;\n }\n\n _createClass(DateToSystemTimezoneSetter, [{\n key: \"set\",\n value: function set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n }]);\n\n return DateToSystemTimezoneSetter;\n}(Setter);", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: \"run\",\n value: function run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n }, {\n key: \"validate\",\n value: function validate(_utcDate, _value, _options) {\n return true;\n }\n }]);\n\n return Parser;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n _inherits(EraParser, _Parser);\n\n var _super = _createSuper(EraParser);\n\n function EraParser() {\n var _this;\n\n _classCallCheck(this, EraParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n\n return _this;\n }\n\n _createClass(EraParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return EraParser;\n}(Parser);", "export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};", "import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\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 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n _inherits(YearParser, _Parser);\n\n var _super = _createSuper(YearParser);\n\n function YearParser() {\n var _this;\n\n _classCallCheck(this, YearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(YearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return YearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekYearParser, _Parser);\n\n var _super = _createSuper(LocalWeekYearParser);\n\n function LocalWeekYearParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n }]);\n\n return LocalWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekYearParser, _Parser);\n\n var _super = _createSuper(ISOWeekYearParser);\n\n function ISOWeekYearParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n }]);\n\n return ISOWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ExtendedYearParser, _Parser);\n\n var _super = _createSuper(ExtendedYearParser);\n\n function ExtendedYearParser() {\n var _this;\n\n _classCallCheck(this, ExtendedYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ExtendedYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ExtendedYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(QuarterParser, _Parser);\n\n var _super = _createSuper(QuarterParser);\n\n function QuarterParser() {\n var _this;\n\n _classCallCheck(this, QuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(QuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return QuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneQuarterParser, _Parser);\n\n var _super = _createSuper(StandAloneQuarterParser);\n\n function StandAloneQuarterParser() {\n var _this;\n\n _classCallCheck(this, StandAloneQuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneQuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneQuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(MonthParser, _Parser);\n\n var _super = _createSuper(MonthParser);\n\n function MonthParser() {\n var _this;\n\n _classCallCheck(this, MonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n return _this;\n }\n\n _createClass(MonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return MonthParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneMonthParser, _Parser);\n\n var _super = _createSuper(StandAloneMonthParser);\n\n function StandAloneMonthParser() {\n var _this;\n\n _classCallCheck(this, StandAloneMonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneMonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneMonthParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekParser, _Parser);\n\n var _super = _createSuper(LocalWeekParser);\n\n function LocalWeekParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n }]);\n\n return LocalWeekParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekParser, _Parser);\n\n var _super = _createSuper(ISOWeekParser);\n\n function ISOWeekParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n }]);\n\n return ISOWeekParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n _inherits(DateParser, _Parser);\n\n var _super = _createSuper(DateParser);\n\n function DateParser() {\n var _this;\n\n _classCallCheck(this, DateParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DateParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DateParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayOfYearParser, _Parser);\n\n var _super = _createSuper(DayOfYearParser);\n\n function DayOfYearParser() {\n var _this;\n\n _classCallCheck(this, DayOfYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayOfYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayOfYearParser;\n}(Parser);", "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 setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, 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 = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayParser, _Parser);\n\n var _super = _createSuper(DayParser);\n\n function DayParser() {\n var _this;\n\n _classCallCheck(this, DayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalDayParser, _Parser);\n\n var _super = _createSuper(LocalDayParser);\n\n function LocalDayParser() {\n var _this;\n\n _classCallCheck(this, LocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return LocalDayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneLocalDayParser, _Parser);\n\n var _super = _createSuper(StandAloneLocalDayParser);\n\n function StandAloneLocalDayParser() {\n var _this;\n\n _classCallCheck(this, StandAloneLocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneLocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneLocalDayParser;\n}(Parser);", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISODayParser, _Parser);\n\n var _super = _createSuper(ISODayParser);\n\n function ISODayParser() {\n var _this;\n\n _classCallCheck(this, ISODayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISODayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ISODayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMParser, _Parser);\n\n var _super = _createSuper(AMPMParser);\n\n function AMPMParser() {\n var _this;\n\n _classCallCheck(this, AMPMParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMMidnightParser, _Parser);\n\n var _super = _createSuper(AMPMMidnightParser);\n\n function AMPMMidnightParser() {\n var _this;\n\n _classCallCheck(this, AMPMMidnightParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMMidnightParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMMidnightParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayPeriodParser, _Parser);\n\n var _super = _createSuper(DayPeriodParser);\n\n function DayPeriodParser() {\n var _this;\n\n _classCallCheck(this, DayPeriodParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayPeriodParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return DayPeriodParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1to12Parser, _Parser);\n\n var _super = _createSuper(Hour1to12Parser);\n\n function Hour1to12Parser() {\n var _this;\n\n _classCallCheck(this, Hour1to12Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1to12Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour1to12Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0to23Parser, _Parser);\n\n var _super = _createSuper(Hour0to23Parser);\n\n function Hour0to23Parser() {\n var _this;\n\n _classCallCheck(this, Hour0to23Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0to23Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour0to23Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0To11Parser, _Parser);\n\n var _super = _createSuper(Hour0To11Parser);\n\n function Hour0To11Parser() {\n var _this;\n\n _classCallCheck(this, Hour0To11Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0To11Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour0To11Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1To24Parser, _Parser);\n\n var _super = _createSuper(Hour1To24Parser);\n\n function Hour1To24Parser() {\n var _this;\n\n _classCallCheck(this, Hour1To24Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1To24Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour1To24Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n _inherits(MinuteParser, _Parser);\n\n var _super = _createSuper(MinuteParser);\n\n function MinuteParser() {\n var _this;\n\n _classCallCheck(this, MinuteParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(MinuteParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n }]);\n\n return MinuteParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(SecondParser, _Parser);\n\n var _super = _createSuper(SecondParser);\n\n function SecondParser() {\n var _this;\n\n _classCallCheck(this, SecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(SecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n }]);\n\n return SecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(FractionOfSecondParser, _Parser);\n\n var _super = _createSuper(FractionOfSecondParser);\n\n function FractionOfSecondParser() {\n var _this;\n\n _classCallCheck(this, FractionOfSecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(FractionOfSecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n }]);\n\n return FractionOfSecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneWithZParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneWithZParser);\n\n function ISOTimezoneWithZParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneWithZParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneWithZParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneWithZParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneParser);\n\n function ISOTimezoneParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampSecondsParser, _Parser);\n\n var _super = _createSuper(TimestampSecondsParser);\n\n function TimestampSecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampSecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampSecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampSecondsParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampMillisecondsParser, _Parser);\n\n var _super = _createSuper(TimestampMillisecondsParser);\n\n function TimestampMillisecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampMillisecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampMillisecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampMillisecondsParser;\n}(Parser);", "import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\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 | | P | |\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 `parse` 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 */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\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\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/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 { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/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 notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\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 in the format string 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 *\n * Format of the format 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 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\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) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\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 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\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) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\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 | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | 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) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\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) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\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 | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | 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] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | 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) | 10 | 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 * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\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 * In `format` function, they will produce different result:\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 * `parse` will try to match both formatting and stand-alone units interchangably.\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:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. 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` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\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 [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. 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 * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `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 * 7. `D` and `DD` tokens represent days of the year but they are ofthen 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 * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\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 {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\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 {Date} the parsed date\n * @throws {TypeError} 3 arguments required\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} `options.locale` must contain `match` property\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 * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, 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(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\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\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\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 (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _iterator = _createForOfIteratorHelper(tokens),\n _step;\n\n try {\n var _loop = function _loop() {\n var token = _step.value;\n\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return {\n v: new Date(NaN)\n };\n }\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ret = _loop();\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var setter = _step2.value;\n\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}", "import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days 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 days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months 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 months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\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 subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from 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 subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(date, 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; // Subtract years and months\n\n var dateWithoutMonths = subMonths(date, months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}", "var formatDistanceLocale = {\n lessThanXSeconds: {\n standalone: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n },\n withPreposition: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n }\n },\n xSeconds: {\n standalone: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n },\n withPreposition: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n }\n },\n halfAMinute: {\n standalone: 'halbe Minute',\n withPreposition: 'halben Minute'\n },\n lessThanXMinutes: {\n standalone: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n },\n withPreposition: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n }\n },\n xMinutes: {\n standalone: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n },\n withPreposition: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n }\n },\n aboutXHours: {\n standalone: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n },\n withPreposition: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n }\n },\n xHours: {\n standalone: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n },\n withPreposition: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n }\n },\n xDays: {\n standalone: {\n one: '1 Tag',\n other: '{{count}} Tage'\n },\n withPreposition: {\n one: '1 Tag',\n other: '{{count}} Tagen'\n }\n },\n aboutXWeeks: {\n standalone: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n },\n withPreposition: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n }\n },\n xWeeks: {\n standalone: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n },\n withPreposition: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n }\n },\n aboutXMonths: {\n standalone: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monate'\n },\n withPreposition: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monaten'\n }\n },\n xMonths: {\n standalone: {\n one: '1 Monat',\n other: '{{count}} Monate'\n },\n withPreposition: {\n one: '1 Monat',\n other: '{{count}} Monaten'\n }\n },\n aboutXYears: {\n standalone: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahre'\n },\n withPreposition: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahren'\n }\n },\n xYears: {\n standalone: {\n one: '1 Jahr',\n other: '{{count}} Jahre'\n },\n withPreposition: {\n one: '1 Jahr',\n other: '{{count}} Jahren'\n }\n },\n overXYears: {\n standalone: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahre'\n },\n withPreposition: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahren'\n }\n },\n almostXYears: {\n standalone: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahre'\n },\n withPreposition: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahren'\n }\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\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}}', String(count));\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 'vor ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\n// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n full: 'EEEE, do MMMM y',\n // Montag, 7. Januar 2018\n long: 'do MMMM y',\n // 7. Januar 2018\n medium: 'do MMM y',\n // 7. Jan. 2018\n short: 'dd.MM.y' // 07.01.2018\n\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'um' {{time}}\",\n long: \"{{date}} 'um' {{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: \"'letzten' eeee 'um' p\",\n yesterday: \"'gestern um' p\",\n today: \"'heute um' p\",\n tomorrow: \"'morgen um' p\",\n nextWeek: \"eeee 'um' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['v.Chr.', 'n.Chr.'],\n abbreviated: ['v.Chr.', 'n.Chr.'],\n wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n}; // Note: in German, 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', 'M\u00E4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n wide: ['Januar', 'Februar', 'M\u00E4rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n}; // https://st.unicode.org/cldr-apps/v#/de/Gregorian/\n\nvar formattingMonthValues = {\n narrow: monthValues.narrow,\n abbreviated: ['Jan.', 'Feb.', 'M\u00E4rz', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n wide: monthValues.wide\n};\nvar dayValues = {\n narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n}; // https://www.unicode.org/cldr/charts/32/summary/de.html#1881\n\nvar dayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachm.',\n evening: 'Abend',\n night: 'Nacht'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachm.',\n evening: 'abends',\n night: 'nachts'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n var number = Number(dirtyNumber);\n return number + '.';\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 formattingValues: formattingMonthValues,\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;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i\n};\nvar parseEraPatterns = {\n any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(j[a\u00E4]n|feb|m\u00E4r[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\\.?/i,\n wide: /^(januar|februar|m\u00E4rz|april|mai|juni|juli|august|september|oktober|november|dezember)/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: [/^j[a\u00E4]/i, /^f/i, /^m\u00E4r/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smdmf]/i,\n short: /^(so|mo|di|mi|do|fr|sa)/i,\n abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\\.?/i,\n wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i\n};\nvar parseDayPatterns = {\n any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(vm\\.?|nm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n abbreviated: /^(vorm\\.?|nachm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^v/i,\n pm: /^n/i,\n midnight: /^Mitte/i,\n noon: /^Mitta/i,\n morning: /morgens/i,\n afternoon: /nachmittags/i,\n // will never be matched. Afternoon is matched by `pm`\n evening: /abends/i,\n night: /nachts/i // will never be matched. Night is matched by `pm`\n\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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: 'wide',\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 German locale.\n * @language German\n * @iso-639-2 deu\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Asia [@asia-t]{@link https://github.com/asia-t}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author RomanErnst [@pex]{@link https://github.com/pex}\n * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}\n */\nvar locale = {\n code: 'de',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, d MMMM yyyy',\n long: 'd MMMM yyyy',\n medium: 'd MMM yyyy',\n short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\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;", "import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\n\nvar locale = {\n code: 'en-GB',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'menos de un segundo',\n other: 'menos de {{count}} segundos'\n },\n xSeconds: {\n one: '1 segundo',\n other: '{{count}} segundos'\n },\n halfAMinute: 'medio minuto',\n lessThanXMinutes: {\n one: 'menos de un minuto',\n other: 'menos de {{count}} minutos'\n },\n xMinutes: {\n one: '1 minuto',\n other: '{{count}} minutos'\n },\n aboutXHours: {\n one: 'alrededor de 1 hora',\n other: 'alrededor de {{count}} horas'\n },\n xHours: {\n one: '1 hora',\n other: '{{count}} horas'\n },\n xDays: {\n one: '1 d\u00EDa',\n other: '{{count}} d\u00EDas'\n },\n aboutXWeeks: {\n one: 'alrededor de 1 semana',\n other: 'alrededor de {{count}} semanas'\n },\n xWeeks: {\n one: '1 semana',\n other: '{{count}} semanas'\n },\n aboutXMonths: {\n one: 'alrededor de 1 mes',\n other: 'alrededor de {{count}} meses'\n },\n xMonths: {\n one: '1 mes',\n other: '{{count}} meses'\n },\n aboutXYears: {\n one: 'alrededor de 1 a\u00F1o',\n other: 'alrededor de {{count}} a\u00F1os'\n },\n xYears: {\n one: '1 a\u00F1o',\n other: '{{count}} a\u00F1os'\n },\n overXYears: {\n one: 'm\u00E1s de 1 a\u00F1o',\n other: 'm\u00E1s de {{count}} a\u00F1os'\n },\n almostXYears: {\n one: 'casi 1 a\u00F1o',\n other: 'casi {{count}} a\u00F1os'\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 'en ' + result;\n } else {\n return 'hace ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'a las' {{time}}\",\n long: \"{{date}} 'a las' {{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: \"'el' eeee 'pasado a la' p\",\n yesterday: \"'ayer a la' p\",\n today: \"'hoy a la' p\",\n tomorrow: \"'ma\u00F1ana a la' p\",\n nextWeek: \"eeee 'a la' p\",\n other: 'P'\n};\nvar formatRelativeLocalePlural = {\n lastWeek: \"'el' eeee 'pasado a las' p\",\n yesterday: \"'ayer a las' p\",\n today: \"'hoy a las' p\",\n tomorrow: \"'ma\u00F1ana a las' p\",\n nextWeek: \"eeee 'a las' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n if (date.getUTCHours() !== 1) {\n return formatRelativeLocalePlural[token];\n } else {\n return formatRelativeLocale[token];\n }\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['AC', 'DC'],\n abbreviated: ['AC', 'DC'],\n wide: ['antes de cristo', 'despu\u00E9s de cristo']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['T1', 'T2', 'T3', 'T4'],\n wide: ['1\u00BA trimestre', '2\u00BA trimestre', '3\u00BA trimestre', '4\u00BA trimestre']\n};\nvar monthValues = {\n narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n abbreviated: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']\n};\nvar dayValues = {\n narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 's\u00E1'],\n abbreviated: ['dom', 'lun', 'mar', 'mi\u00E9', 'jue', 'vie', 's\u00E1b'],\n wide: ['domingo', 'lunes', 'martes', 'mi\u00E9rcoles', 'jueves', 'viernes', 's\u00E1bado']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n return number + '\u00BA';\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 Number(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;", "import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\u00BA)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|antes de la era com[u\u00FA]n|despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i\n};\nvar parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [/^(antes de cristo|antes de la era com[u\u00FA]n)/i, /^(despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](\u00BA)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[efmajsond]/i,\n abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^e/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: [/^en/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]\n};\nvar matchDayPatterns = {\n narrow: /^[dlmjvs]/i,\n short: /^(do|lu|ma|mi|ju|vi|s[\u00E1a])/i,\n abbreviated: /^(dom|lun|mar|mi[\u00E9e]|jue|vie|s[\u00E1a]b)/i,\n wide: /^(domingo|lunes|martes|mi[\u00E9e]rcoles|jueves|viernes|s[\u00E1a]bado)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(de la|a las) (ma\u00F1ana|tarde|noche))/i,\n any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (ma\u00F1ana|tarde|noche))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn/i,\n noon: /^md/i,\n morning: /ma\u00F1ana/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noche/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 Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Fernando Ag\u00FCero [@fjaguero]{@link https://github.com/fjaguero}\n * @author Gast\u00F3n Haro [@harogaston]{@link https://github.com/harogaston}\n * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n code: 'es',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'moins d\u2019une seconde',\n other: 'moins de {{count}} secondes'\n },\n xSeconds: {\n one: '1 seconde',\n other: '{{count}} secondes'\n },\n halfAMinute: '30 secondes',\n lessThanXMinutes: {\n one: 'moins d\u2019une minute',\n other: 'moins de {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'environ 1 heure',\n other: 'environ {{count}} heures'\n },\n xHours: {\n one: '1 heure',\n other: '{{count}} heures'\n },\n xDays: {\n one: '1 jour',\n other: '{{count}} jours'\n },\n aboutXWeeks: {\n one: 'environ 1 semaine',\n other: 'environ {{count}} semaines'\n },\n xWeeks: {\n one: '1 semaine',\n other: '{{count}} semaines'\n },\n aboutXMonths: {\n one: 'environ 1 mois',\n other: 'environ {{count}} mois'\n },\n xMonths: {\n one: '1 mois',\n other: '{{count}} mois'\n },\n aboutXYears: {\n one: 'environ 1 an',\n other: 'environ {{count}} ans'\n },\n xYears: {\n one: '1 an',\n other: '{{count}} ans'\n },\n overXYears: {\n one: 'plus d\u2019un an',\n other: 'plus de {{count}} ans'\n },\n almostXYears: {\n one: 'presqu\u2019un an',\n other: 'presque {{count}} ans'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var form = formatDistanceLocale[token];\n\n if (typeof form === 'string') {\n result = form;\n } else if (count === 1) {\n result = form.one;\n } else {\n result = form.other.replace('{{count}}', String(count));\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'dans ' + result;\n } else {\n return 'il y a ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE d MMMM y',\n long: 'd MMMM y',\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} '\u00E0' {{time}}\",\n long: \"{{date}} '\u00E0' {{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: \"eeee 'dernier \u00E0' p\",\n yesterday: \"'hier \u00E0' p\",\n today: \"'aujourd\u2019hui \u00E0' p\",\n tomorrow: \"'demain \u00E0' p'\",\n nextWeek: \"eeee 'prochain \u00E0' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['av. J.-C', 'ap. J.-C'],\n abbreviated: ['av. J.-C', 'ap. J.-C'],\n wide: ['avant J\u00E9sus-Christ', 'apr\u00E8s J\u00E9sus-Christ']\n};\nvar quarterValues = {\n narrow: ['T1', 'T2', 'T3', 'T4'],\n abbreviated: ['1er trim.', '2\u00E8me trim.', '3\u00E8me trim.', '4\u00E8me trim.'],\n wide: ['1er trimestre', '2\u00E8me trimestre', '3\u00E8me trimestre', '4\u00E8me trimestre']\n};\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['janv.', 'f\u00E9vr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'ao\u00FBt', 'sept.', 'oct.', 'nov.', 'd\u00E9c.'],\n wide: ['janvier', 'f\u00E9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\u00FBt', 'septembre', 'octobre', 'novembre', 'd\u00E9cembre']\n};\nvar dayValues = {\n narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\n short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\n abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n wide: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'mat.',\n afternoon: 'ap.m.',\n evening: 'soir',\n night: 'mat.'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'matin',\n afternoon: 'apr\u00E8s-midi',\n evening: 'soir',\n night: 'matin'\n },\n wide: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'du matin',\n afternoon: 'de l\u2019apr\u00E8s-midi',\n evening: 'du soir',\n night: 'du matin'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n var number = Number(dirtyNumber);\n var unit = options === null || options === void 0 ? void 0 : options.unit;\n if (number === 0) return '0';\n var feminineUnits = ['year', 'week', 'hour', 'minute', 'second'];\n var suffix;\n\n if (number === 1) {\n suffix = unit && feminineUnits.includes(unit) ? '\u00E8re' : 'er';\n } else {\n suffix = '\u00E8me';\n }\n\n return number + suffix;\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 })\n};\nexport default localize;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(i\u00E8me|\u00E8re|\u00E8me|er|e)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(av\\.J\\.C|ap\\.J\\.C|ap\\.J\\.-C)/i,\n abbreviated: /^(av\\.J\\.-C|av\\.J-C|apr\\.J\\.-C|apr\\.J-C|ap\\.J-C)/i,\n wide: /^(avant J\u00E9sus-Christ|apr\u00E8s J\u00E9sus-Christ)/i\n};\nvar parseEraPatterns = {\n any: [/^av/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^T?[1234]/i,\n abbreviated: /^[1234](er|\u00E8me|e)? trim\\.?/i,\n wide: /^[1234](er|\u00E8me|e)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(janv|f\u00E9vr|mars|avr|mai|juin|juill|juil|ao\u00FBt|sept|oct|nov|d\u00E9c)\\.?/i,\n wide: /^(janvier|f\u00E9vrier|mars|avril|mai|juin|juillet|ao\u00FBt|septembre|octobre|novembre|d\u00E9cembre)/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, /^av/i, /^ma/i, /^juin/i, /^juil/i, /^ao/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[lmjvsd]/i,\n short: /^(di|lu|ma|me|je|ve|sa)/i,\n abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\\.?/i,\n wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|minuit|midi|mat\\.?|ap\\.?m\\.?|soir|nuit)/i,\n any: /^([ap]\\.?\\s?m\\.?|du matin|de l'apr\u00E8s[-\\s]midi|du soir|de la nuit)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^min/i,\n noon: /^mid/i,\n morning: /mat/i,\n afternoon: /ap/i,\n evening: /soir/i,\n night: /nuit/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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 * @type {Locale}\n * @category Locales\n * @summary French locale.\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author Fran\u00E7ois B [@fbonzon]{@link https://github.com/fbonzon}\n */\n\nvar locale = {\n code: 'fr',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerBankConversionCacheEviction,\n TalerBankConversionHttpClient,\n TalerCoreBankCacheEviction,\n TalerCoreBankHttpClient,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { APIClient, ActiviyTracker, BankLib, Subscriber } from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type BankContextType = {\n url: URL;\n config: TalerCorebankApi.Config;\n lib: BankLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst BankContext = createContext<BankContextType>(undefined);\n\nexport const useBankCoreApiContext = (): BankContextType =>\n useContext(BankContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n conversion?: CacheEvictor<TalerBankConversionCacheEviction>;\n bank?: CacheEvictor<TalerCoreBankCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const BankApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerCorebankApi.Config>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildBankApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: BankContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildBankApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<BankLib, TalerCorebankApi.Config> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const bank = new TalerCoreBankHttpClient(url.href, httpLib, evictors.bank);\n const conversion = new TalerBankConversionHttpClient(\n bank.getConversionInfoAPI().href,\n httpLib,\n evictors.conversion,\n );\n const auth = (user: string) =>\n new TalerAuthenticationHttpClient(\n bank.getAuthenticationAPI(user).href,\n httpLib,\n );\n\n async function getRemoteConfig(): Promise<TalerCorebankApi.Config> {\n const resp = await bank.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: bank.PROTOCOL_VERSION,\n lib: {\n bank,\n conversion,\n auth,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const BankApiProviderTesting = ({\n children,\n value,\n}: {\n value: BankContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { ObservabilityEvent, TalerAuthenticationHttpClient, TalerBankConversionHttpClient, TalerCoreBankHttpClient, TalerMerchantInstanceHttpClient, TalerMerchantManagementHttpClient } from \"@gnu-taler/taler-util\";\n\ntype Listener<Event> = (e: Event) => void;\ntype Unsuscriber = () => void;\nexport type Subscriber<Event> = (fn: Listener<Event>) => Unsuscriber;\n\nexport class ActiviyTracker<Event> {\n private observers = new Array<Listener<Event>>();\n constructor() {\n this.notify = this.notify.bind(this)\n this.subscribe = this.subscribe.bind(this)\n }\n notify(data: Event) {\n this.observers.forEach((observer) => observer(data))\n }\n subscribe(func: Listener<Event>): Unsuscriber {\n this.observers.push(func);\n return () => {\n this.observers.forEach((observer, index) => {\n if (observer === func) {\n this.observers.splice(index, 1);\n }\n });\n };\n }\n}\n\n/**\n * build http client with cache breaker due to SWR\n * @param url\n * @returns\n */\nexport interface APIClient<T, C> {\n getRemoteConfig(): Promise<C>;\n VERSION: string;\n lib: T,\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest(id: string): void;\n}\n\nexport interface MerchantLib {\n instance: TalerMerchantManagementHttpClient;\n authenticate: TalerAuthenticationHttpClient;\n subInstanceApi: (instanceId: string) => MerchantLib;\n}\n\nexport interface BankLib {\n bank: TalerCoreBankHttpClient;\n conversion: TalerBankConversionHttpClient;\n auth: (user: string) => TalerAuthenticationHttpClient;\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerError,\n TalerMerchantApi,\n TalerMerchantInstanceCacheEviction,\n TalerMerchantManagementCacheEviction,\n TalerMerchantManagementHttpClient,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n MerchantLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type MerchantContextType = {\n url: URL;\n config: TalerMerchantApi.VersionResponse;\n lib: MerchantLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n changeBackend: (url: URL) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst MerchantContext = createContext<MerchantContextType>(undefined);\n\nexport const useMerchantApiContext = (): MerchantContextType =>\n useContext(MerchantContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n management?: CacheEvictor<TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\nexport type ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000\n\nexport const MerchantApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{\n state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;\n }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerMerchantApi.VersionResponse>>();\n\n const [merchantEndpoint, changeMerchantEndpoint] = useState(baseUrl);\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildMerchantApiClient(merchantEndpoint, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig(); \n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig()\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n }\n }, []);\n\n if (!checked || checked.type !== \"ok\") {\n return h(frameOnError, { state: checked }, []);\n }\n\n const value: MerchantContextType = {\n url: merchantEndpoint,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n changeBackend: changeMerchantEndpoint,\n hints: checked.hints,\n };\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildMerchantApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<MerchantLib, TalerMerchantApi.VersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const instance = new TalerMerchantManagementHttpClient(\n url.href,\n httpLib,\n evictors.management,\n );\n const authenticate = new TalerAuthenticationHttpClient(\n instance.getAuthenticationAPI().href,\n httpLib,\n );\n\n // const instance = (instanceId: string): TalerMerchantInstanceHttpClient => {\n // return new TalerMerchantInstanceHttpClient(\n // management.getSubInstanceAPI(instanceId).href,\n // httpLib,\n // evictors.instance ? evictors.instance(instanceId) : undefined,\n // );\n // }\n // const impersonate = (instanceId: string): TalerAuthenticationHttpClient => {\n // return new TalerAuthenticationHttpClient(\n // instance(instanceId).getAuthenticationAPI().href,\n // httpLib,\n // );\n // }\n const rootUrl = url;\n function getSubInstanceAPI(instanceId: string): MerchantLib {\n const newURL = new URL(`instance/${instanceId}/`, rootUrl);\n const api = buildMerchantApiClient(newURL, evictors);\n return api.lib;\n }\n\n async function getRemoteConfig(): Promise<TalerMerchantApi.VersionResponse> {\n const resp = await instance.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail)\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: instance.PROTOCOL_VERSION,\n lib: {\n instance,\n authenticate,\n subInstanceApi: getSubInstanceAPI,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const MerchantApiProviderTesting = ({\n children,\n value,\n}: {\n value: MerchantContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { AppLocation, ObjectOf, Location, findMatch, RouteDefinition } from \"../utils/route.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useCurrentLocation<T extends ObjectOf<RouteDefinition<any>>>(\n pagesMap: T,\n): Location<T> | undefined {\n const pageList = Object.keys(pagesMap as object) as Array<keyof T>;\n const { path, params } = useNavigationContext();\n\n return findMatch(pagesMap, pageList, path, params);\n}\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = {\n path: string;\n params: Record<string, string>;\n navigateTo: (path: AppLocation) => void;\n // addNavigationListener: (listener: (path: string, params: Record<string, string>) => void) => (() => void);\n};\n\n// @ts-expect-error should not be used without provider\nconst Context = createContext<Type>(undefined);\n\nexport const useNavigationContext = (): Type => useContext(Context);\n\nfunction getPathAndParamsFromWindow() {\n const path =\n typeof window !== \"undefined\" ? window.location.hash.substring(1) : \"/\";\n const params: Record<string, string> = {};\n if (typeof window !== \"undefined\") {\n for (const [key, value] of new URLSearchParams(window.location.search)) {\n params[key] = value;\n }\n }\n return { path, params };\n}\n\nconst { path: initialPath, params: initialParams } =\n getPathAndParamsFromWindow();\n\n// there is a possibility that if the browser does a redirection\n// (which doesn't go through navigatTo function) and that executed\n// too early (before addEventListener runs) it won't be taking\n// into account\nconst PopStateEventType = \"popstate\";\n\nexport const BrowserHashNavigationProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const [{ path, params }, setState] = useState({\n path: initialPath,\n params: initialParams,\n });\n if (typeof window === \"undefined\") {\n throw Error(\n \"Can't use BrowserHashNavigationProvider if there is no window object\",\n );\n }\n function navigateTo(path: string) {\n const { params } = getPathAndParamsFromWindow();\n setState({ path, params });\n window.location.href = path;\n }\n\n useEffect(() => {\n function eventListener() {\n setState(getPathAndParamsFromWindow());\n }\n window.addEventListener(PopStateEventType, eventListener);\n return () => {\n window.removeEventListener(PopStateEventType, eventListener);\n };\n }, []);\n return h(Context.Provider, {\n value: { path, params, navigateTo },\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { stringifyTalerUri, TalerUri } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\n/**\n * https://docs.taler.net/design-documents/039-taler-browser-integration.html\n *\n * @param uri\n */\nfunction createHeadMetaTag(uri: TalerUri, onNotFound?: () => void) {\n const meta = document.createElement(\"meta\");\n meta.setAttribute(\"name\", \"taler-uri\");\n meta.setAttribute(\"content\", stringifyTalerUri(uri));\n\n document.head.appendChild(meta);\n\n let walletFound = false;\n window.addEventListener(\"beforeunload\", () => {\n walletFound = true;\n });\n setTimeout(() => {\n if (!walletFound && onNotFound) {\n onNotFound();\n }\n }, 10); //very short timeout\n}\ninterface Type {\n /**\n * Tell the active wallet that an action is found\n *\n * @param uri\n * @returns\n */\n publishTalerAction: (uri: TalerUri, onNotFound?: () => void) => void;\n}\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst Context = createContext<Type>(undefined);\n\nexport const useTalerWalletIntegrationAPI = (): Type => useContext(Context);\n\nexport const TalerWalletIntegrationBrowserProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const value: Type = {\n publishTalerAction: createHeadMetaTag,\n };\n return h(Context.Provider, {\n value,\n children,\n });\n};\n\nexport const TalerWalletIntegrationTestingProvider = ({\n children,\n value,\n}: {\n children: ComponentChildren;\n value: Type;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\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\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\nexport function recursive<PType>(\n hook: (p: PType) => RecursiveState<VNode>,\n): (p: PType) => VNode {\n\n function withHook(stateHook: () => RecursiveState<VNode>): () => 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 return 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/**\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", "import { Duration, TranslatedString, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\n\ninterface Props {\n type?: \"info\" | \"success\" | \"warning\" | \"danger\" | \"low\",\n onClose?: () => void,\n title: TranslatedString,\n children?: ComponentChildren,\n timeout?: Duration,\n}\nexport function Attention({ type = \"info\", title, children, onClose, timeout = Duration.getForever() }: Props): VNode {\n\n return <div class={`group attention-${type} mt-2 shadow-lg`}>\n {timeout.d_ms === \"forever\" ? undefined : <style>{`\n .progress {\n animation: notificationTimeoutBar ${Math.round(timeout.d_ms / 1000)}s ease-in-out;\n animation-fill-mode:both; \n }\n\n @keyframes notificationTimeoutBar {\n 0% { width: 0; }\n 100% { width: 100%; }\n }\n `}</style>\n }\n\n <div data-timed={timeout.d_ms !== \"forever\"} class=\"rounded-md data-[timed=true]:rounded-b-none group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 p-4 shadow\">\n <div class=\"flex\">\n <div >\n {type === \"low\" ? undefined :\n <svg xmlns=\"http://www.w3.org/2000/svg\" stroke=\"none\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-8 h-8 group-[.attention-info]:text-blue-400 group-[.attention-warning]:text-yellow-400 group-[.attention-danger]:text-red-400 group-[.attention-success]:text-green-400\">\n {(() => {\n switch (type) {\n case \"info\":\n return <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\" />\n case \"warning\":\n return <path fill-rule=\"evenodd\" d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"danger\":\n return <path fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"success\":\n return <path fill-rule=\"evenodd\" d=\"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z\" />\n default:\n assertUnreachable(type)\n }\n })()}\n </svg>\n }\n </div>\n <div class=\"ml-3 w-full\">\n <h3 class=\"text-sm font-bold group-[.attention-info]:text-blue-800 group-[.attention-success]:text-green-800 group-[.attention-warning]:text-yellow-800 group-[.attention-danger]:text-red-800\">\n {title}\n </h3>\n <div class=\"mt-2 text-sm group-[.attention-info]:text-blue-700 group-[.attention-warning]:text-yellow-700 group-[.attention-danger]:text-red-700 group-[.attention-success]:text-green-700\">\n {children}\n </div>\n </div>\n {onClose &&\n <div>\n <button type=\"button\" class=\"font-semibold items-center rounded bg-transparent px-2 py-1 text-xs text-gray-900 hover:bg-gray-50\"\n onClick={(e) => {\n e.preventDefault();\n onClose();\n }}\n >\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n }\n </div>\n </div>\n {timeout.d_ms === \"forever\" ? undefined :\n <div class=\"meter group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 h-1 relative overflow-hidden -mt-1\">\n <span class=\"w-full h-full block\"><span class=\"h-full block progress group-[.attention-info]:bg-blue-600 group-[.attention-low]:bg-gray-600 group-[.attention-warning]:bg-yellow-600 group-[.attention-danger]:bg-red-600 group-[.attention-success]:bg-green-600\"></span></span>\n </div>\n }\n\n </div>\n}\n", "import { ComponentChildren, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nexport function CopyIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75\" />\n </svg>\n )\n};\n\nexport function CopiedIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n )\n};\n\nexport function CopyButton({ class: clazz, children, getContent }: { children?: ComponentChildren, class: string, getContent: () => string }): VNode {\n const [copied, setCopied] = useState(false);\n function copyText(): void {\n if (!navigator.clipboard && !window.isSecureContext) {\n alert('clipboard is not available on insecure context (http)')\n }\n if (navigator.clipboard) {\n navigator.clipboard.writeText(getContent() || \"\");\n setCopied(true);\n }\n }\n useEffect(() => {\n if (copied) {\n setTimeout(() => {\n setCopied(false);\n }, 1000);\n }\n }, [copied]);\n\n if (!copied) {\n return (\n <button class={clazz} onClick={e => {\n e.preventDefault()\n copyText()\n }} >\n <CopyIcon />\n {children}\n </button>\n );\n }\n return (\n <button class={clazz} disabled>\n <CopiedIcon />\n {children}\n </button>\n );\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\nimport { TalerError, TalerErrorCode, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function ErrorLoading({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {\n const { i18n } = useTranslationContext()\n switch (error.errorDetail.code) {\n //////////////////\n // Every error that can be produce in a Http Request\n //////////////////\n case TalerErrorCode.GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request was cancelled.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {\n const { requestMethod, requestUrl, throttleStats } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`A lot of request were made to the same server and this action was throttled`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {\n const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The response of the request is malformed.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {\n const { requestMethod, requestUrl } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Could not complete the request due to a network problem.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {\n const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Unexpected request error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n //////////////////\n // Every other error \n //////////////////\n // case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n // return <Attention type=\"danger\" title={i18n.str``}>\n // </Attention>\n // }\n //////////////////\n // Default message for unhandled case\n //////////////////\n default: return <Attention type=\"danger\" title={i18n.str`Unexpected error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify(error.errorDetail, undefined, 2)}\n </pre>\n }\n </Attention>\n }\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 */\n\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n// import { strings as messages } from \"../i18n/strings.js\";\nimport langIcon from \"../assets/lang.svg\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\ntype LangsNames = {\n [P: string]: 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): string {\n if (names[s]) return names[s];\n return String(s);\n}\n\nexport function LangSelector({ }: {}): VNode {\n const [updatingLang, setUpdatingLang] = useState(false);\n const { lang, changeLanguage, completeness, supportedLang } = useTranslationContext();\n const [hidden, setHidden] = useState(true);\n\n useEffect(() => {\n function bodyKeyPress(event: KeyboardEvent) {\n if (event.code === \"Escape\") setHidden(true);\n }\n function bodyOnClick(event: Event) {\n setHidden(true);\n }\n document.body.addEventListener(\"click\", bodyOnClick);\n document.body.addEventListener(\"keydown\", bodyKeyPress as any);\n return () => {\n document.body.removeEventListener(\"keydown\", bodyKeyPress as any);\n document.body.removeEventListener(\"click\", bodyOnClick);\n };\n }, []);\n return (\n <div>\n <div class=\"relative mt-2\">\n <button type=\"button\" class=\"relative w-full cursor-default rounded-md bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600 sm:text-sm sm:leading-6\" aria-haspopup=\"listbox\" aria-expanded=\"true\" aria-labelledby=\"listbox-label\"\n onClick={(e) => {\n setHidden(!hidden);\n e.stopPropagation()\n }}>\n <span class=\"flex items-center\">\n <img alt=\"language\" class=\"h-5 w-5 flex-shrink-0 rounded-full\" src={langIcon} />\n <span class=\"ml-3 block truncate\">{getLangName(lang)}</span>\n </span>\n <span class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <svg class=\"h-5 w-5 text-gray-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </button>\n\n {!hidden &&\n <ul class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\" tabIndex={-1} role=\"listbox\" aria-labelledby=\"listbox-label\" aria-activedescendant=\"listbox-option-3\">\n {Object.keys(supportedLang)\n .filter((l) => l !== lang)\n .map((lang) => (\n <li class=\"text-gray-900 hover:bg-indigo-600 hover:text-white cursor-pointer relative select-none py-2 pl-3 pr-9\" role=\"option\"\n onClick={() => {\n changeLanguage(lang);\n setUpdatingLang(false);\n setHidden(true)\n }}\n >\n <span class=\"font-normal truncate flex justify-between \">\n <span>{getLangName(lang)}</span>\n <span>{(completeness as any)[lang]}%</span>\n </span>\n\n <span class=\"text-indigo-600 absolute inset-y-0 right-0 flex items-center pr-4\">\n {/* <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clip-rule=\"evenodd\" />\n </svg> */}\n </span>\n </li>\n ))}\n\n </ul>\n }\n\n </div>\n </div>\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\nimport { h, VNode } from \"preact\";\n\nexport function Loading(): VNode {\n return (\n <div\n class=\"columns is-centered is-vcentered\"\n style={{\n width: \"100%\",\n height: \"200px\",\n display: \"flex\",\n margin: \"auto\",\n justifyContent: \"center\",\n }}\n >\n <Spinner />\n </div>\n );\n}\n\nfunction Spinner(): VNode {\n return (\n <div class=\"lds-ring\" style={{ margin: \"auto\" }}>\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n}\n", "import { useState } from \"preact/hooks\";\nimport { LangSelector, useNotifications, useTranslationContext } from \"../index.browser.js\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport logo from \"../assets/logo-2021.svg\";\n\ninterface Props {\n title: string;\n iconLinkURL: string;\n profileURL?: string;\n notificationURL?: string;\n children?: ComponentChildren;\n onLogout: (() => void) | undefined;\n sites: Array<Array<string>>;\n supportedLangs: string[]\n}\n\nexport function Header({ title, profileURL, notificationURL, iconLinkURL, sites, onLogout, children }: Props): VNode {\n const { i18n } = useTranslationContext();\n const [open, setOpen] = useState(false)\n const ns = useNotifications();\n\n return <Fragment>\n <header class=\"bg-indigo-600 w-full mx-auto px-2 border-b border-opacity-25 border-indigo-400\">\n <div class=\"flex flex-row h-16 items-center \">\n <div class=\"flex px-2 justify-start\">\n <div class=\"flex-shrink-0 bg-white rounded-lg\">\n <a href={iconLinkURL ?? \"#\"} name=\"logo\">\n <img\n class=\"h-8 w-auto\"\n src={logo}\n alt=\"GNU Taler\"\n style={{ height: \"1.5rem\", margin: \".5rem\" }}\n />\n </a>\n </div>\n <span class=\"flex items-center text-white text-lg font-bold ml-4\">\n {title}\n </span>\n </div>\n <div class=\"flex-1 ml-6 \">\n <div class=\"flex flex-1 space-x-4\">\n {sites.map((site) => {\n if (site.length !== 2) return;\n const [name, url] = site\n return <a href={url} name={`site header ${name}`} class=\"hidden sm:block text-white hover:bg-indigo-500 hover:bg-opacity-75 rounded-md py-2 px-3 text-sm font-medium\">{name}</a>\n })}\n </div>\n </div>\n <div class=\"flex justify-end\">\n {!notificationURL ? undefined :\n <a href={notificationURL} name=\"notifications\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Show notifications</i18n.Translate></span>\n {ns.length > 0 ?\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-10 h-10\">\n <path d=\"M5.85 3.5a.75.75 0 0 0-1.117-1 9.719 9.719 0 0 0-2.348 4.876.75.75 0 0 0 1.479.248A8.219 8.219 0 0 1 5.85 3.5ZM19.267 2.5a.75.75 0 1 0-1.118 1 8.22 8.22 0 0 1 1.987 4.124.75.75 0 0 0 1.48-.248A9.72 9.72 0 0 0 19.266 2.5Z\" />\n <path fill-rule=\"evenodd\" d=\"M12 2.25A6.75 6.75 0 0 0 5.25 9v.75a8.217 8.217 0 0 1-2.119 5.52.75.75 0 0 0 .298 1.206c1.544.57 3.16.99 4.831 1.243a3.75 3.75 0 1 0 7.48 0 24.583 24.583 0 0 0 4.83-1.244.75.75 0 0 0 .298-1.205 8.217 8.217 0 0 1-2.118-5.52V9A6.75 6.75 0 0 0 12 2.25ZM9.75 18c0-.034 0-.067.002-.1a25.05 25.05 0 0 0 4.496 0l.002.1a2.25 2.25 0 1 1-4.5 0Z\" clip-rule=\"evenodd\" />\n </svg>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\" />\n </svg>\n }\n </a>\n }\n {!profileURL ? undefined :\n <a href={profileURL} name=\"profile\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open profile</i18n.Translate></span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </svg>\n </a>\n }\n <button type=\"button\" name=\"toggle sidebar\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\"\n onClick={(e) => {\n setOpen(!open)\n }}>\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open settings</i18n.Translate></span>\n <svg class=\"block h-10 w-10\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n </svg>\n </button>\n </div>\n </div>\n </header>\n\n {\n open &&\n <div class=\"relative z-10\" name=\"sidebar overlay\" aria-labelledby=\"slide-over-title\" role=\"dialog\" aria-modal=\"true\"\n onClick={() => {\n setOpen(false)\n }}>\n <div class=\"fixed inset-0\"></div>\n\n <div class=\"fixed inset-0 overflow-hidden\">\n <div class=\"absolute inset-0 overflow-hidden\">\n <div class=\"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10\">\n <div class=\"pointer-events-auto w-screen max-w-md\" >\n <div class=\"flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl\" onClick={(e) => {\n //do not trigger close if clicking inside the sidebar\n e.stopPropagation();\n }}>\n <div class=\"px-4 sm:px-6\" >\n <div class=\"flex items-start justify-between\" >\n <h2 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"slide-over-title\">\n <i18n.Translate>Menu</i18n.Translate>\n </h2>\n <div class=\"ml-3 flex h-7 items-center\">\n <button type=\"button\" name=\"close sidebar\" class=\"relative rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2\"\n onClick={(e) => {\n setOpen(false)\n }}\n\n >\n <span class=\"absolute -inset-2.5\"></span>\n <span class=\"sr-only\">\n <i18n.Translate>Close panel</i18n.Translate>\n </span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"relative mt-6 flex-1 px-4 sm:px-6\">\n <nav class=\"flex flex-1 flex-col\" aria-label=\"Sidebar\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n {onLogout ?\n <li>\n <a href=\"#\"\n name=\"logout\"\n class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\"\n onClick={() => {\n onLogout();\n setOpen(false)\n }}\n >\n <svg class=\"h-6 w-6 shrink-0 text-indigo-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\" />\n </svg>\n <i18n.Translate>Log out</i18n.Translate>\n </a>\n </li>\n : undefined}\n <li>\n <LangSelector />\n </li>\n {/* CHILDREN */}\n {children}\n {/* /CHILDREN */}\n {sites.length > 0 ?\n <li class=\"block sm:hidden\">\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Sites</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-1\">\n {sites.map(([name, url]) => {\n return <li>\n <a href={url} name={`site ${name}`} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n <span class=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-lg border text-[0.625rem] font-medium bg-white text-gray-400 border-gray-200 group-hover:border-indigo-600 group-hover:text-indigo-600\">&gt;</span>\n <span class=\"truncate\">{name}</span>\n </a>\n </li>\n })}\n </ul>\n </li>\n : undefined\n }\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </Fragment >\n}\n", "import { useTranslationContext } from \"../index.browser.js\";\nimport { h } from \"preact\";\n\nexport function Footer({ testingUrlKey, VERSION, GIT_HASH }: { VERSION?: string, GIT_HASH?: string, testingUrlKey?: string }) {\n const { i18n } = useTranslationContext()\n\n const testingUrl = (testingUrlKey && typeof localStorage !== \"undefined\") && localStorage.getItem(testingUrlKey) ?\n localStorage.getItem(testingUrlKey) ?? undefined :\n undefined\n const versionText = VERSION\n ? GIT_HASH\n ? <a href={`https://git.taler.net/wallet-core.git/tree/?id=${GIT_HASH}`} target=\"_blank\" rel=\"noreferrer noopener\">\n Version {VERSION} ({GIT_HASH.substring(0, 8)})\n </a>\n : VERSION\n : \"\";\n return (\n <footer class=\"bottom-4 my-4 mx-8 bg-slate-200\">\n <div>\n <p class=\"text-xs leading-5 text-gray-400\">\n <i18n.Translate>\n Learn more about <a target=\"_blank\" rel=\"noreferrer noopener\" class=\"font-semibold text-gray-500 hover:text-gray-400\" href=\"https://taler.net\">GNU Taler</a>\n </i18n.Translate>\n </p>\n </div>\n <div style=\"flex-grow:1\" />\n <p class=\"text-xs leading-5 text-gray-400\">\n Copyright &copy; 2014&mdash;2023 Taler Systems SA. {versionText}{\" \"}\n </p>\n {testingUrlKey && testingUrl &&\n\n <p class=\"text-xs leading-5 text-gray-300\">\n Testing with {testingUrl}{\" \"}\n <a\n href=\"\"\n onClick={(e) => {\n e.preventDefault();\n localStorage.removeItem(testingUrlKey);\n window.location.reload();\n }}\n >\n stop testing\n </a>\n </p>\n }\n </footer>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, OperationFail, OperationOk, OperationResult, TalerError, TranslatedString } from \"@gnu-taler/taler-util\";\n// import { NotificationMessage, notifyInfo } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { HTMLAttributes, useEffect, useState, useTransition } from \"preact/compat\";\nimport { NotificationMessage, buildUnifiedRequestErrorMessage, notifyInfo, useTranslationContext } from \"../index.browser.js\";\n// import { useBankCoreApiContext } from \"../context/config.js\";\n\n// function errorMap<T extends OperationFail<unknown>>(resp: T, map: (d: T[\"case\"]) => TranslatedString): void {\n\nexport interface ButtonHandler<T extends OperationResult<A, B>, A, B> {\n onClick: () => Promise<T | undefined>,\n onNotification: (n: NotificationMessage) => void;\n onOperationSuccess: ((result: T extends OperationOk<any> ? T : never) => void) | ((result: T extends OperationOk<any> ? T : never) => TranslatedString | undefined),\n onOperationFail: (d: T extends OperationFail<any> ? T : never) => TranslatedString;\n onOperationComplete?: () => void;\n}\n\ninterface Props<T extends OperationResult<A, B>, A, B> extends HTMLAttributes<HTMLButtonElement> {\n handler: ButtonHandler<T, A, B> | undefined,\n}\n\n/**\n * This button accept an async function and report a notification\n * on error or success.\n * \n * When the async function is running the inner text will change into\n * a \"loading\" animation.\n * \n * @param param0 \n * @returns \n */\nexport function Button<T extends OperationResult<A, B>, A, B>({\n handler,\n children,\n disabled,\n onClick: clickEvent,\n ...rest\n}: Props<T, A, B>): VNode {\n const { i18n } = useTranslationContext();\n const [running, setRunning] = useState(false)\n return <button {...rest} disabled={disabled || running} onClick={(e) => {\n e.preventDefault();\n if (!handler) { return; }\n setRunning(true)\n handler.onClick().then((resp) => {\n if (resp) {\n if (resp.type === \"ok\") {\n const result: OperationOk<any> = resp\n // @ts-expect-error this is an operationOk\n const msg = handler.onOperationSuccess(result)\n if (msg) {\n notifyInfo(msg)\n }\n }\n if (resp.type === \"fail\") {\n // @ts-expect-error this is an operationFail\n const error: OperationFail<any> = resp;\n // @ts-expect-error this is an operationFail\n const title = handler.onOperationFail(error)\n handler.onNotification({\n title,\n type: \"error\",\n description: error.detail.hint as TranslatedString,\n debug: error.detail,\n when: AbsoluteTime.now(),\n })\n }\n }\n if (handler.onOperationComplete) {\n handler.onOperationComplete()\n }\n setRunning(false)\n }).catch(error => {\n console.error(error)\n\n if (error instanceof TalerError) {\n handler.onNotification(buildUnifiedRequestErrorMessage(i18n, error))\n } else {\n const description = (error instanceof Error ?\n error.message : String(error)) as TranslatedString\n\n handler.onNotification({\n title: i18n.str`Operation failed`,\n type: \"error\",\n description,\n when: AbsoluteTime.now(),\n })\n }\n\n if (handler.onOperationComplete) {\n handler.onOperationComplete()\n }\n setRunning(false)\n })\n }} >\n {running ? <Wait /> : children}\n </button>\n}\n\nfunction Wait(): VNode {\n return <Fragment>\n <style>{`\n #l1 { width: 120px;\n height: 20px;\n -webkit-mask: radial-gradient(circle closest-side, currentColor 90%, #0000) left/20% 100%;\n background: linear-gradient(currentColor 0 0) left/0% 100% no-repeat #ddd;\n animation: l17 2s infinite steps(6);\n }\n @keyframes l17 {\n 100% {background-size:120% 100%}\n`}\n </style>\n <div id=\"l1\" />\n </Fragment>\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 { Fragment, h, VNode } from \"preact\";\n\nexport function ShowInputErrorLabel({\n isDirty,\n message,\n}: {\n message: string | undefined;\n isDirty: boolean;\n}): VNode {\n if (message && isDirty)\n return <div class=\"text-base\" style={{ color: \"red\" }}>{message}</div>;\n return <div class=\"text-base\" style={{ }}> </div>;\n}\n", "import { h, Fragment, VNode } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { Notification } from \"../index.browser.js\";\n\nexport function LocalNotificationBanner({ notification, showDebug }: { notification?: Notification, showDebug?: boolean }): VNode {\n if (!notification) return <Fragment />\n switch (notification.message.type) {\n case \"error\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"danger\" title={notification.message.title} onClose={() => {\n notification.acknowledge()\n }}>\n {notification.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {notification.message.description}\n </div>\n }\n {showDebug && <pre class=\"whitespace-break-spaces \">\n {notification.message.debug}\n </pre>}\n </Attention>\n </div>\n </div>\n case \"info\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"success\" title={notification.message.title} onClose={() => {\n notification.acknowledge();\n }} /></div></div>\n }\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Fragment, VNode, h } from \"preact\"\nimport { Attention, GLOBAL_NOTIFICATION_TIMEOUT as GLOBAL_TOAST_TIMEOUT, Notification, useNotifications } from \"../index.browser.js\"\n\n/**\n * Toasts should be considered when displaying these types of information to the user:\n * \n * Low attention messages that do not require user action\n * Singular status updates\n * Confirmations\n * Information that does not need to be followed up\n * \n * Do not use toasts if the information contains the following:\n * \n * High attention and crtitical information\n * Time-sensitive information\n * Requires user action or input\n * Batch updates\n * \n * @returns \n */\nexport function ToastBanner(): VNode {\n const notifs = useNotifications()\n if (notifs.length === 0) return <Fragment />\n const show = notifs.filter(e => !e.message.ack && !e.message.timeout)\n if (show.length === 0) return <Fragment />\n return <AttentionByType msg={show[0]} />\n}\n\nfunction AttentionByType({ msg }: { msg: Notification }) {\n switch (msg.message.type) {\n case \"error\":\n return <Attention type=\"danger\" title={msg.message.title} onClose={() => {\n msg.acknowledge()\n }} timeout={GLOBAL_TOAST_TIMEOUT}>\n {msg.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {msg.message.description}\n </div>\n }\n </Attention>\n case \"info\":\n return <Attention type=\"success\" title={msg.message.title} onClose={() => {\n msg.acknowledge();\n }} timeout={GLOBAL_TOAST_TIMEOUT} />\n }\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { add as dateAdd, sub as dateSub, eachDayOfInterval, endOfMonth, endOfWeek, format, getMonth, getYear, isSameDay, isSameMonth, startOfDay, startOfMonth, startOfWeek } from \"date-fns\"\nimport { VNode, h } from \"preact\"\nimport { useState } from \"preact/hooks\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function Calendar({ value, onChange }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void }): VNode {\n const today = startOfDay(new Date())\n const selected = !value ? today : new Date(AbsoluteTime.toStampMs(value))\n const [showingDate, setShowingDate] = useState(selected)\n const month = getMonth(showingDate)\n const year = getYear(showingDate)\n\n const start = startOfWeek(startOfMonth(showingDate));\n const end = endOfWeek(endOfMonth(showingDate));\n const daysInMonth = eachDayOfInterval({ start, end });\n const { i18n } = useTranslationContext()\n const monthNames = [\n i18n.str`January`,\n i18n.str`February`,\n i18n.str`March`,\n i18n.str`April`,\n i18n.str`May`,\n i18n.str`June`,\n i18n.str`July`,\n i18n.str`August`,\n i18n.str`September`,\n i18n.str`October`,\n i18n.str`November`,\n i18n.str`December`,\n ]\n return <div class=\"text-center p-2\">\n <div class=\"flex items-center text-gray-900\">\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { years: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Previous year`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{year}</div>\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { years: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Next year`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <div class=\"mt-4 flex items-center text-gray-900\">\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { months: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Previous month`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{monthNames[month]}</div>\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 rounded-sm \"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { months: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Next month`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <div class=\"mt-6 grid grid-cols-7 text-xs leading-6 text-gray-500\">\n <div>M</div>\n <div>T</div>\n <div>W</div>\n <div>T</div>\n <div>F</div>\n <div>S</div>\n <div>S</div>\n </div>\n <div class=\"isolate mt-2\">\n <div class=\"grid grid-cols-7 gap-px rounded-lg bg-gray-200 text-sm shadow ring-1 ring-gray-200\">\n {daysInMonth.map(current => (\n <button type=\"button\"\n data-month={isSameMonth(current, showingDate)}\n data-today={isSameDay(current, today)}\n data-selected={isSameDay(current, selected)}\n onClick={() => {\n onChange(AbsoluteTime.fromStampMs(current.getTime()))\n }}\n class=\"text-gray-400 hover:bg-gray-700 focus:z-10 py-1.5 \n data-[month=false]:bg-gray-100 data-[month=true]:bg-white \n data-[today=true]:font-semibold \n data-[month=true]:text-gray-900\n data-[today=true]:bg-red-300 data-[today=true]:hover:bg-red-200\n data-[month=true]:hover:bg-gray-200\n data-[selected=true]:!bg-blue-400 data-[selected=true]:hover:!bg-blue-300 \">\n <time dateTime={format(current, \"yyyy-MM-dd\")}\n class=\"mx-auto flex h-7 w-7 py-4 px-5 sm:px-8 items-center justify-center rounded-full\">\n {format(current, \"dd\")}\n </time>\n </button>\n ))}\n </div>\n {daysInMonth.length < 40 ? <div class=\"w-7 h-7 m-1.5\" /> : undefined}\n </div>\n </div>\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport {\n LabelWithTooltipMaybeRequired\n} from \"./InputLine.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: VNode;\n after?: VNode;\n}\n\nexport function Caption({ before, after, label, tooltip, help }: Props): VNode {\n return (\n <div class=\"sm:col-span-6 flex\">\n {before !== undefined && (\n <span class=\"pointer-events-none flex items-center pr-2\">{before}</span>\n )}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && (\n <span class=\"pointer-events-none flex items-center pl-2\">{after}</span>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { useField } from \"./useField.js\";\n\n//@ts-ignore\nconst TooltipIcon = (\n <svg\n class=\"w-5 h-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n);\n\nexport function LabelWithTooltipMaybeRequired({\n label,\n required,\n tooltip,\n}: {\n label: TranslatedString;\n required?: boolean;\n tooltip?: TranslatedString;\n}): VNode {\n const Label = (\n <Fragment>\n <div class=\"flex justify-between\">\n <label\n htmlFor=\"email\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {label}\n </label>\n </div>\n </Fragment>\n );\n const WithTooltip = tooltip ? (\n <div class=\"relative flex flex-grow items-stretch focus-within:z-10\">\n {Label}\n <span class=\"relative flex items-center group pl-2\">\n {TooltipIcon}\n <div class=\"absolute bottom-0 -ml-10 hidden flex-col items-center mb-6 group-hover:flex w-28\">\n <div class=\"relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-black shadow-lg\">\n {tooltip}\n </div>\n <div class=\"w-3 h-3 -mt-2 rotate-45 bg-black\"></div>\n </div>\n </span>\n </div>\n ) : (\n Label\n );\n if (required) {\n return (\n <div class=\"flex justify-between\">\n {WithTooltip}\n <span class=\"text-sm leading-6 text-red-600\">*</span>\n </div>\n );\n }\n return WithTooltip;\n}\n\nfunction InputWrapper<T extends object, K extends keyof T>({\n children,\n label,\n tooltip,\n before,\n after,\n help,\n error,\n disabled,\n required,\n}: { error?: string; disabled: boolean, children: ComponentChildren } & UIFormProps<T, K>): VNode {\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <div class=\"relative mt-2 flex rounded-md shadow-sm\">\n {before &&\n (before.type === \"text\" ? (\n <span class=\"inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {before.text}\n </span>\n ) : before.type === \"icon\" ? (\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n {before.icon}\n </div>\n ) : before.type === \"button\" ? (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={before.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-l-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {before.children}\n </button>\n ) : undefined)}\n\n {children}\n\n {after &&\n (after.type === \"text\" ? (\n <span class=\"inline-flex items-center rounded-r-md border border-l-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {after.text}\n </span>\n ) : after.type === \"icon\" ? (\n <div class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n {after.icon}\n </div>\n ) : after.type === \"button\" ? (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={after.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-r-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {after.children}\n </button>\n ) : undefined)}\n </div>\n {error && (\n <p class=\"mt-2 text-sm text-red-600\" id=\"email-error\">\n {error}\n </p>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n\nfunction defaultToString(v: unknown) {\n return v === undefined ? \"\" : typeof v !== \"object\" ? String(v) : \"\";\n}\nfunction defaultFromString(v: string) {\n return v;\n}\n\ntype InputType = \"text\" | \"text-area\" | \"password\" | \"email\" | \"number\";\n\nexport function InputLine<T extends object, K extends keyof T>(\n props: { type: InputType } & UIFormProps<T, K>,\n): VNode {\n const { name, placeholder, before, after, converter, type } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n\n const [text, setText] = useState(\"\")\n const fromString: (s: string) => any =\n converter?.fromStringUI ?? defaultFromString;\n const toString: (s: any) => string = converter?.toStringUI ?? defaultToString;\n\n useEffect(() => {\n const newValue = toString(value)\n if (newValue) {\n setText(newValue)\n }\n }, [value])\n\n if (state.hidden) return <div />;\n\n let clazz =\n \"block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200\";\n if (before) {\n switch (before.type) {\n case \"icon\": {\n clazz += \" pl-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-r-md \";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-r-md rounded-none \";\n break;\n }\n }\n }\n if (after) {\n switch (after.type) {\n case \"icon\": {\n clazz += \" pr-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-l-md\";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-l-md rounded-none \";\n break;\n }\n }\n }\n const showError = isDirty && state.error;\n if (showError) {\n clazz +=\n \" text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500\";\n } else {\n clazz +=\n \" text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-indigo-600\";\n }\n\n if (type === \"text-area\") {\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? state.error : undefined}\n >\n <textarea\n rows={4}\n name={String(name)}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n }\n\n return (\n <InputWrapper<T, K> {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false} error={showError ? state.error : undefined}\n >\n <input\n name={String(name)}\n type={type}\n onChange={(e) => {\n setText(e.currentTarget.value)\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={text}\n onBlur={() => {\n onChange(fromString(text));\n }}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n}\n", "import { useContext, useState } from \"preact/compat\";\nimport { FieldUIOptions, FormContext } from \"./FormProvider.js\";\n\nexport interface InputFieldHandler<Type> {\n value: Type;\n onChange: (s: Type) => void;\n state: FieldUIOptions;\n isDirty: boolean;\n}\n\nexport function useField<T extends object, K extends keyof T>(\n name: K,\n): InputFieldHandler<T[K]> {\n const {\n value: formValue,\n computeFormState,\n onUpdate: notifyUpdate,\n readOnly: readOnlyForm,\n } = useContext(FormContext);\n\n type P = typeof name;\n type V = T[P];\n const formState = computeFormState ? computeFormState(formValue.current) : {};\n\n const fieldValue = readField(formValue.current, String(name)) as V;\n // console.log(\"USE FIELD\", String(name), formValue.current, fieldValue);\n const [currentValue, setCurrentValue] = useState<any | undefined>(fieldValue);\n const fieldState =\n readField<Partial<FieldUIOptions>>(formState, String(name)) ?? {};\n\n //compute default state\n const state = {\n disabled: readOnlyForm ? true : (fieldState.disabled ?? false),\n hidden: fieldState.hidden ?? false,\n error: fieldState.error,\n help: fieldState.help,\n elements: \"elements\" in fieldState ? fieldState.elements ?? [] : [],\n };\n\n function onChange(value: V): void {\n setCurrentValue(value);\n formValue.current = setValueDeeper(\n formValue.current,\n String(name).split(\".\"),\n value,\n );\n if (notifyUpdate) {\n notifyUpdate(formValue.current);\n }\n }\n\n return {\n value: fieldValue,\n onChange,\n isDirty: currentValue !== undefined,\n state,\n };\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 */\nfunction readField<T>(\n object: any,\n name: string,\n debug?: boolean,\n): T | undefined {\n return name.split(\".\").reduce((prev, current) => {\n if (debug) {\n console.log(\n \"READ\",\n name,\n prev,\n current,\n prev ? prev[current] : undefined,\n );\n }\n return prev ? prev[current] : undefined;\n }, object);\n}\n\nfunction setValueDeeper(object: any, names: string[], value: any): any {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n if (object === undefined) {\n return { [head]: setValueDeeper({}, rest, value) };\n }\n return { ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) };\n}\n", "import {\n AbsoluteTime,\n AmountJson,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, VNode, createContext, h } from \"preact\";\nimport {\n MutableRef,\n useState\n} from \"preact/hooks\";\n\nexport interface FormType<T extends object> {\n value: MutableRef<Partial<T>>;\n initial?: Partial<T>;\n readOnly?: boolean;\n onUpdate?: (v: Partial<T>) => void;\n computeFormState?: (v: Partial<T>) => FormState<T>;\n}\n\n//@ts-ignore\nexport const FormContext = createContext<FormType<any>>({});\n\n/**\n * Map of {[field]:FieldUIOptions}\n * for every field of type\n * - any native (string, number, etc...)\n * - absoluteTime\n * - amountJson\n * \n * except for: \n * - object => recurse into\n * - array => behavior result and element field\n */\nexport type FormState<T extends object | undefined> = {\n [field in keyof T]?: T[field] extends AbsoluteTime\n ? FieldUIOptions\n : T[field] extends AmountJson\n ? FieldUIOptions\n : T[field] extends Array<infer P extends object>\n ? InputArrayFieldState<P>\n : T[field] extends (object | undefined)\n ? FormState<T[field]>\n : FieldUIOptions;\n};\n\n/**\n * Properties that can be defined by design or by computing state\n */\nexport type FieldUIOptions = {\n /* text to be shown next to the field */\n error?: TranslatedString;\n /* instruction to be shown in the field */\n placeholder?: TranslatedString;\n /* long text help to be shown on demand */\n tooltip?: TranslatedString;\n /* short text to be shown next to the field*/\n\n help?: TranslatedString;\n /* should show as disabled and readonly */\n disabled?: boolean;\n /* should not show */\n hidden?: boolean;\n\n /* show a mark as required*/\n required?: boolean;\n}\n\n/**\n * properties only to be defined on design time\n */\nexport interface UIFormProps<T extends object, K extends keyof T> extends FieldUIOptions {\n\n // property name of the object\n name: K;\n\n // label if the field\n label: TranslatedString;\n before?: Addon;\n after?: Addon;\n\n // converter to string and back\n converter?: StringConverter<T[K]>;\n}\n\nexport interface IconAddon {\n type: \"icon\";\n icon: VNode;\n}\nexport interface ButtonAddon {\n type: \"button\";\n onClick: () => void;\n children: ComponentChildren;\n}\nexport interface TextAddon {\n type: \"text\";\n text: TranslatedString;\n}\nexport type Addon = IconAddon | ButtonAddon | TextAddon;\n\nexport interface StringConverter<T> {\n toStringUI: (v?: T) => string;\n fromStringUI: (v?: string) => T;\n}\n\nexport interface InputArrayFieldState<P extends object> extends FieldUIOptions {\n elements?: FormState<P>[];\n}\n\nexport type FormProviderProps<T extends object> = Omit<FormType<T>, \"value\"> & {\n onSubmit?: (v: Partial<T>, s: FormState<T> | undefined) => void;\n children?: ComponentChildren;\n}\n\nexport function FormProvider<T extends object>({\n children,\n initial,\n onUpdate: notify,\n onSubmit,\n computeFormState,\n readOnly,\n}: FormProviderProps<T>): VNode {\n\n const [state, setState] = useState<Partial<T>>(initial ?? {});\n const value = { current: state };\n const onUpdate = (v: typeof state) => {\n setState(v);\n if (notify) notify(v);\n };\n return (\n <FormContext.Provider\n value={{ initial, value, onUpdate, computeFormState, readOnly }}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n //@ts-ignore\n if (onSubmit)\n onSubmit(\n value.current,\n !computeFormState ? undefined : computeFormState(value.current),\n );\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n", "import { Fragment, h } from \"preact\";\nimport { FormProvider, FormProviderProps, FormState } from \"./FormProvider.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n\n/**\n * Flexible form uses a DoubleColumForm for design\n * and may have a dynamic properties defined by \n * behavior function.\n */\nexport interface FlexibleForm<T extends object> {\n design: DoubleColumnForm;\n behavior?: (form: Partial<T>) => FormState<T>;\n}\n\n/**\n * Double column form\n * \n * Form with sections, every sections have a title and may\n * have a description.\n * Every sections contain a set of fields.\n */\nexport type DoubleColumnForm = Array<DoubleColumnFormSection | undefined>;\n\nexport type DoubleColumnFormSection = {\n title: TranslatedString;\n description?: TranslatedString;\n fields: UIFormField[];\n};\n\n/**\n * Form Provider implementation that use FlexibleForm\n * to defined behavior and fields.\n */\nexport function DefaultForm<T extends object>({\n initial,\n onUpdate,\n form,\n onSubmit,\n children,\n readOnly,\n}: Omit<FormProviderProps<T>, \"computeFormState\"> & { form: FlexibleForm<T> }) {\n return (\n <FormProvider\n initial={initial}\n onUpdate={onUpdate}\n onSubmit={onSubmit}\n readOnly={readOnly}\n computeFormState={form.behavior}\n >\n <div class=\"space-y-10 divide-y -mt-5 divide-gray-900/10\">\n {form.design.map((section, i) => {\n if (!section) return <Fragment />;\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n {section.title}\n </h2>\n {section.description && (\n <p class=\"mt-1 text-sm leading-6 text-gray-600\">\n {section.description}\n </p>\n )}\n </div>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2\">\n <div class=\"p-3\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig\n key={i}\n fields={section.fields}\n />\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {children}\n </FormProvider>\n );\n}\n", "import { h as create, Fragment, VNode } from \"preact\";\nimport { Caption } from \"./Caption.js\";\nimport { FormProvider } from \"./FormProvider.js\";\nimport { Group } from \"./Group.js\";\nimport { InputAbsoluteTime } from \"./InputAbsoluteTime.js\";\nimport { InputAmount } from \"./InputAmount.js\";\nimport { InputArray } from \"./InputArray.js\";\nimport { InputChoiceHorizontal } from \"./InputChoiceHorizontal.js\";\nimport { InputChoiceStacked } from \"./InputChoiceStacked.js\";\nimport { InputFile } from \"./InputFile.js\";\nimport { InputInteger } from \"./InputInteger.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { InputSelectMultiple } from \"./InputSelectMultiple.js\";\nimport { InputSelectOne } from \"./InputSelectOne.js\";\nimport { InputText } from \"./InputText.js\";\nimport { InputTextArea } from \"./InputTextArea.js\";\nimport { InputToggle } from \"./InputToggle.js\";\n\n/**\n * Constrain the type with the ui props\n */\ntype FieldType<T extends object = any, K extends keyof T = any> = {\n group: Parameters<typeof Group>[0];\n caption: Parameters<typeof Caption>[0];\n array: Parameters<typeof InputArray<T, K>>[0];\n file: Parameters<typeof InputFile<T, K>>[0];\n selectOne: Parameters<typeof InputSelectOne<T, K>>[0];\n selectMultiple: Parameters<typeof InputSelectMultiple<T, K>>[0];\n text: Parameters<typeof InputText<T, K>>[0];\n textArea: Parameters<typeof InputTextArea<T, K>>[0];\n choiceStacked: Parameters<typeof InputChoiceStacked<T, K>>[0];\n choiceHorizontal: Parameters<typeof InputChoiceHorizontal<T, K>>[0];\n absoluteTime: Parameters<typeof InputAbsoluteTime<T, K>>[0];\n integer: Parameters<typeof InputInteger<T, K>>[0];\n toggle: Parameters<typeof InputToggle<T, K>>[0];\n amount: Parameters<typeof InputAmount<T, K>>[0];\n};\n\n/**\n * List all the form fields so typescript can type-check the form instance\n */\nexport type UIFormField =\n | { type: \"group\"; props: FieldType[\"group\"] }\n | { type: \"caption\"; props: FieldType[\"caption\"] }\n | { type: \"array\"; props: FieldType[\"array\"] }\n | { type: \"file\"; props: FieldType[\"file\"] }\n | { type: \"amount\"; props: FieldType[\"amount\"] }\n | { type: \"selectOne\"; props: FieldType[\"selectOne\"] }\n | { type: \"selectMultiple\"; props: FieldType[\"selectMultiple\"] }\n | { type: \"text\"; props: FieldType[\"text\"] }\n | { type: \"textArea\"; props: FieldType[\"textArea\"] }\n | { type: \"choiceStacked\"; props: FieldType[\"choiceStacked\"] }\n | { type: \"choiceHorizontal\"; props: FieldType[\"choiceHorizontal\"] }\n | { type: \"integer\"; props: FieldType[\"integer\"] }\n | { type: \"toggle\"; props: FieldType[\"toggle\"] }\n | { type: \"absoluteTime\"; props: FieldType[\"absoluteTime\"] };\n\ntype FieldComponentFunction<key extends keyof FieldType> = (\n props: FieldType[key],\n) => VNode;\n\ntype UIFormFieldMap = {\n [key in keyof FieldType]: FieldComponentFunction<key>;\n};\n\n/**\n * Maps input type with component implementation\n */\nconst UIFormConfiguration: UIFormFieldMap = {\n group: Group,\n caption: Caption,\n //@ts-ignore\n array: InputArray,\n text: InputText,\n //@ts-ignore\n file: InputFile,\n textArea: InputTextArea,\n //@ts-ignore\n absoluteTime: InputAbsoluteTime,\n //@ts-ignore\n choiceStacked: InputChoiceStacked,\n //@ts-ignore\n choiceHorizontal: InputChoiceHorizontal,\n integer: InputInteger,\n //@ts-ignore\n selectOne: InputSelectOne,\n //@ts-ignore\n selectMultiple: InputSelectMultiple,\n //@ts-ignore\n toggle: InputToggle,\n //@ts-ignore\n amount: InputAmount,\n};\n\nexport function RenderAllFieldsByUiConfig({\n fields,\n}: {\n fields: UIFormField[];\n}): VNode {\n return create(\n Fragment,\n {},\n fields.map((field, i) => {\n const Component = UIFormConfiguration[\n field.type\n ] as FieldComponentFunction<any>;\n return Component(field.props);\n }),\n );\n}\n\ntype FormSet<T extends object> = {\n Provider: typeof FormProvider<T>;\n InputLine: <K extends keyof T>() => typeof InputLine<T, K>;\n InputChoiceHorizontal: <K extends keyof T>() => typeof InputChoiceHorizontal<T, K>;\n};\n\n/**\n * Helper function that created a typed object.\n * \n * @returns \n */\nexport function createNewForm<T extends object>() {\n const res: FormSet<T> = {\n Provider: FormProvider,\n InputLine: () => InputLine,\n InputChoiceHorizontal: () => InputChoiceHorizontal,\n };\n return {\n Provider: res.Provider,\n InputLine: res.InputLine(),\n InputChoiceHorizontal: res.InputChoiceHorizontal(),\n };\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\n\ninterface Props {\n before?: TranslatedString;\n after?: TranslatedString;\n tooltipBefore?: TranslatedString;\n tooltipAfter?: TranslatedString;\n fields: UIFormField[];\n}\n\nexport function Group({\n before,\n after,\n tooltipAfter,\n tooltipBefore,\n fields,\n}: Props): VNode {\n return (\n <div class=\"sm:col-span-6 p-4 rounded-lg border-r-2 border-2 bg-gray-50\">\n <div class=\"pb-4\">\n {before && (\n <LabelWithTooltipMaybeRequired\n label={before}\n tooltip={tooltipBefore}\n />\n )}\n </div>\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-2 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n <div class=\"pt-4\">\n {after && (\n <LabelWithTooltipMaybeRequired label={after} tooltip={tooltipAfter} />\n )}\n </div>\n </div>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport { InputLine } from \"./InputLine.js\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { format, parse } from \"date-fns\";\nimport { Dialog } from \"./Dialog.js\";\nimport { Calendar } from \"./Calendar.js\";\nimport { useState } from \"preact/hooks\";\nimport { useField } from \"./useField.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { TimePicker } from \"./TimePicker.js\";\n\nexport function InputAbsoluteTime<T extends object, K extends keyof T>(\n props: { pattern?: string } & UIFormProps<T, K>,\n): VNode {\n const pattern = props.pattern ?? \"dd/MM/yyyy\";\n const [open, setOpen] = useState(false)\n const { value, onChange } = useField<T, K>(props.name);\n return (\n <Fragment>\n\n <InputLine<T, K>\n type=\"text\"\n after={{\n type: \"button\",\n onClick: () => {\n setOpen(true)\n },\n // icon: <CalendarIcon class=\"h-6 w-6\" />,\n children: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\" />\n </svg>)\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AbsoluteTime | undefined => {\n if (!v) return undefined;\n try {\n const t_ms = parse(v, pattern, Date.now()).getTime();\n return AbsoluteTime.fromMilliseconds(t_ms);\n } catch (e) {\n return undefined;\n }\n },\n //@ts-ignore\n toStringUI: (v: AbsoluteTime | undefined) => {\n return !v || !v.t_ms\n ? undefined\n : v.t_ms === \"never\"\n ? \"never\"\n : format(v.t_ms, pattern);\n },\n }}\n {...props}\n />\n {open &&\n <Dialog onClose={() => setOpen(false)}>\n <Calendar value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n setOpen(false)\n }} />\n </Dialog>\n }\n {/* {open &&\n <Dialog onClose={() => setOpen(false)} >\n <TimePicker value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n }}\n onConfirm={() => {\n setOpen(false)\n }} />\n </Dialog>} */}\n </Fragment>\n );\n}\n", "import { ComponentChildren, VNode, h } from \"preact\";\n\nexport function Dialog({ children, onClose }: { onClose?: () => void; children: ComponentChildren }): VNode {\n return <div class=\"relative z-10\" aria-labelledby=\"modal-title\" role=\"dialog\" aria-modal=\"true\" onClick={onClose}>\n <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n <div class=\"flex min-h-full items-center justify-center p-4 text-center \">\n <div class=\"relative transform overflow-hidden rounded-lg bg-white p-1 text-left shadow-xl transition-all\" onClick={(e) => e.stopPropagation()}>\n {children}\n </div>\n </div>\n </div>\n </div>\n}\n", "import { AmountJson, Amounts, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputAmount<T extends object, K extends keyof T>(\n props: { currency?: string } & UIFormProps<T, K>,\n): VNode {\n const { value } = useField<T, K>(props.name);\n const currency =\n !value || !(value as any).currency\n ? props.currency\n : (value as any).currency;\n return (\n <InputLine<T, K>\n type=\"text\"\n before={{\n type: \"text\",\n text: currency as TranslatedString,\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AmountJson => {\n\n return Amounts.parse(`${currency}:${v}`) ?? Amounts.zeroOfCurrency(currency);\n },\n //@ts-ignore\n toStringUI: (v: AmountJson) => {\n return v === undefined ? \"\" : Amounts.stringifyValue(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormProvider, UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { useField } from \"./useField.js\";\n\nfunction Option({\n label,\n disabled,\n isFirst,\n isLast,\n isSelected,\n onClick,\n}: {\n label: TranslatedString;\n isFirst?: boolean;\n isLast?: boolean;\n isSelected?: boolean;\n disabled?: boolean;\n onClick: () => void;\n}): VNode {\n let clazz = \"relative flex border p-4 focus:outline-none disabled:text-grey\";\n if (isFirst) {\n clazz += \" rounded-tl-md rounded-tr-md \";\n }\n if (isLast) {\n clazz += \" rounded-bl-md rounded-br-md \";\n }\n if (isSelected) {\n clazz += \" z-10 border-indigo-200 bg-indigo-50 \";\n } else {\n clazz += \" border-gray-200\";\n }\n if (disabled) {\n clazz +=\n \" cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray\";\n } else {\n clazz += \" cursor-pointer\";\n }\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"privacy-setting\"\n checked={isSelected}\n disabled={disabled}\n onClick={onClick}\n class=\"mt-0.5 h-4 w-4 shrink-0 text-indigo-600 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200 focus:ring-indigo-600\"\n aria-labelledby=\"privacy-setting-0-label\"\n aria-describedby=\"privacy-setting-0-description\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n id=\"privacy-setting-0-label\"\n disabled\n class=\"block text-sm font-medium\"\n >\n {label}\n </span>\n {/* <!-- Checked: \"text-indigo-700\", Not Checked: \"text-gray-500\" --> */}\n {/* <span\n id=\"privacy-setting-0-description\"\n class=\"block text-sm\"\n >\n This project would be available to anyone who has the link\n </span> */}\n </span>\n </label>\n );\n}\n\nexport function InputArray<T extends object, K extends keyof T>(\n props: {\n fields: UIFormField[];\n labelField: string;\n } & UIFormProps<T, K>,\n): VNode {\n const { fields, labelField, name, label, required, tooltip } = props;\n const { value, onChange, state } = useField<T, K>(name);\n const list = (value ?? []) as Array<Record<string, string | undefined>>;\n const [selectedIndex, setSelected] = useState<number | undefined>(undefined);\n const selected =\n selectedIndex === undefined ? undefined : list[selectedIndex];\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n\n <div class=\"-space-y-px rounded-md bg-white \">\n {list.map((v, idx) => {\n return (\n <Option\n label={v[labelField] as TranslatedString}\n isSelected={selectedIndex === idx}\n isLast={idx === list.length - 1}\n disabled={selectedIndex !== undefined && selectedIndex !== idx}\n isFirst={idx === 0}\n onClick={() => {\n setSelected(selectedIndex === idx ? undefined : idx);\n }}\n />\n );\n })}\n {!state.disabled &&\n <div class=\"pt-2\">\n <Option\n label={\"Add...\" as TranslatedString}\n isSelected={selectedIndex === list.length}\n isLast\n isFirst\n disabled={\n selectedIndex !== undefined && selectedIndex !== list.length\n }\n onClick={() => {\n setSelected(\n selectedIndex === list.length ? undefined : list.length,\n );\n }}\n />\n </div>\n }\n </div>\n {selectedIndex !== undefined && (\n /**\n * This form provider act as a substate of the parent form\n * Consider creating an InnerFormProvider since not every feature is expected\n */\n <FormProvider\n initial={selected}\n readOnly={state.disabled}\n computeFormState={(v) => {\n // current state is ignored\n // the state is defined by the parent form\n\n // elements should be present in the state object since this is expected to be an array\n //@ts-ignore\n return state.elements[selectedIndex];\n }}\n onSubmit={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as T[K]);\n setSelected(undefined);\n }}\n onUpdate={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as T[K]);\n }}\n >\n <div class=\"px-4 py-6\">\n <div class=\"grid grid-cols-1 gap-y-8 \">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n </div>\n </FormProvider>\n )}\n {selectedIndex !== undefined && (\n <div class=\"flex items-center pt-3\">\n <div class=\"flex-auto\">\n {selected !== undefined && (\n <button\n type=\"button\"\n onClick={() => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1);\n onChange(newValue as T[K]);\n setSelected(undefined);\n }}\n class=\"block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n Remove\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport interface ChoiceH<V> {\n label: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceHorizontal<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceH<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"isolate inline-flex rounded-md shadow-sm\">\n {choices.map((choice, idx) => {\n const isFirst = idx === 0;\n const isLast = idx === choices.length - 1;\n let clazz =\n \"relative inline-flex items-center px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 focus:z-10\";\n if (choice.value === value) {\n clazz +=\n \" text-white bg-indigo-600 hover:bg-indigo-500 ring-2 ring-indigo-600 hover:ring-indigo-500\";\n } else {\n clazz += \" hover:bg-gray-100 border-gray-300\";\n }\n if (isFirst) {\n clazz += \" rounded-l-md\";\n } else {\n clazz += \" -ml-px\";\n }\n if (isLast) {\n clazz += \" rounded-r-md\";\n }\n return (\n <button\n type=\"button\"\n disabled={state.disabled}\n label={choice.label}\n class={clazz}\n onClick={(e) => {\n onChange(\n (value === choice.value ? undefined : choice.value) as T[K],\n );\n }}\n >\n {choice.label}\n </button>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport interface ChoiceS<V> {\n label: TranslatedString;\n description?: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceStacked<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"space-y-4\">\n {choices.map((choice) => {\n // const currentValue = !converter\n // ? choice.value\n // : converter.fromStringUI(choice.value) ?? \"\";\n\n let clazz =\n \"border relative block cursor-pointer rounded-lg bg-white px-6 py-4 shadow-sm focus:outline-none sm:flex sm:justify-between\";\n if (choice.value === value) {\n clazz +=\n \" border-transparent border-indigo-600 ring-2 ring-indigo-600\";\n } else {\n clazz += \" border-gray-300\";\n }\n\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"server-size\"\n // defaultValue={choice.value}\n disabled={state.disabled}\n value={\n (!converter\n ? (choice.value as string)\n : converter?.toStringUI(choice.value)) ?? \"\"\n }\n onClick={(e) => {\n onChange(\n (value === choice.value\n ? undefined\n : choice.value) as T[K],\n );\n }}\n class=\"sr-only\"\n aria-labelledby=\"server-size-0-label\"\n aria-describedby=\"server-size-0-description-0 server-size-0-description-1\"\n />\n <span class=\"flex items-center\">\n <span class=\"flex flex-col text-sm\">\n <span\n id=\"server-size-0-label\"\n class=\"font-medium text-gray-900\"\n >\n {choice.label}\n </span>\n {choice.description !== undefined && (\n <span\n id=\"server-size-0-description-0\"\n class=\"text-gray-500\"\n >\n <span class=\"block sm:inline\">\n {choice.description}\n </span>\n </span>\n )}\n </span>\n </span>\n </label>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputFile<T extends object, K extends keyof T>(\n props: { maxBites: number; accept?: string } & UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n placeholder,\n tooltip,\n required,\n help: propsHelp,\n maxBites,\n accept,\n } = props;\n const { value, onChange, state } = useField<T, K>(name);\n const help = propsHelp ?? state.help\n if (state.hidden) {\n return <div />;\n }\n return (\n <div class=\"col-span-full\">\n <LabelWithTooltipMaybeRequired\n label={label}\n tooltip={tooltip}\n required={required}\n />\n {!value || !(value as string).startsWith(\"data:image/\") ? (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 py-1\">\n <div class=\"text-center\">\n <svg\n class=\"mx-auto h-12 w-12 text-gray-300\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.5 6a2.25 2.25 0 012.25-2.25h16.5A2.25 2.25 0 0122.5 6v12a2.25 2.25 0 01-2.25 2.25H3.75A2.25 2.25 0 011.5 18V6zM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0021 18v-1.94l-2.69-2.689a1.5 1.5 0 00-2.12 0l-.88.879.97.97a.75.75 0 11-1.06 1.06l-5.16-5.159a1.5 1.5 0 00-2.12 0L3 16.061zm10.125-7.81a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n {!state.disabled &&\n <div class=\"my-2 flex text-sm leading-6 text-gray-600\">\n <label\n for=\"file-upload\"\n class=\"relative cursor-pointer rounded-md bg-white font-semibold text-indigo-600 focus-within:outline-none focus-within:ring-2 focus-within:ring-indigo-600 focus-within:ring-offset-2 hover:text-indigo-500\"\n >\n <span>Upload a file</span>\n <input\n id=\"file-upload\"\n name=\"file-upload\"\n type=\"file\"\n class=\"sr-only\"\n accept={accept}\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 > maxBites) {\n return onChange(undefined!);\n }\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 </label>\n {/* <p class=\"pl-1\">or drag and drop</p> */}\n </div>\n }\n </div>\n </div>\n ) : (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 relative\">\n <img\n src={value as string}\n class=\" h-24 w-full object-cover relative\"\n />\n\n {!state.disabled &&\n <div\n class=\"opacity-0 hover:opacity-70 duration-300 absolute rounded-lg border inset-0 z-10 flex justify-center text-xl items-center bg-black text-white cursor-pointer \"\n onClick={() => {\n onChange(undefined!);\n }}\n >\n Clear\n </div>\n }\n </div>\n )}\n {help && <p class=\"text-xs leading-5 text-gray-600 mt-2\">{help}</p>}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputInteger<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return (\n <InputLine\n type=\"number\"\n converter={{\n //@ts-ignore\n fromStringUI: (v): number => {\n return !v ? 0 : Number.parseInt(v, 10);\n },\n //@ts-ignore\n toStringUI: (v?: number): string => {\n return v === undefined ? \"\" : String(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectMultiple<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n unique?: boolean;\n max?: number;\n } & UIFormProps<T, K>,\n): VNode {\n const { name, label, choices, placeholder, tooltip, required, unique, max } =\n props;\n const { value, onChange, state } = useField<T, K>(name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce((prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n }, {} as Record<string, string>);\n\n const list = (value ?? []) as string[];\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {list.map((v, idx) => {\n return (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 text-xs font-medium text-gray-600\">\n {choiceMap[v]}\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n const newValue = [...list];\n newValue.splice(idx, 1);\n onChange(newValue as T[K]);\n setFilter(undefined);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n );\n })}\n\n {!state.disabled && <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n if (unique && list.indexOf(v.value as string) !== -1) {\n return;\n }\n if (max !== undefined && list.length >= max) {\n return;\n }\n const newValue = [...list];\n newValue.splice(0, 0, v.value as string);\n onChange(newValue as T[K]);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectOne<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { name, label, choices, placeholder, tooltip, required } = props;\n const { value, onChange } = useField<T, K>(name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce((prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n }, {} as Record<string, string>);\n\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {value ? (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 font-medium text-gray-600\">\n {choiceMap[value as string]}\n <button\n type=\"button\"\n onClick={() => {\n onChange(undefined!);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n ) : (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n onChange(v.value as T[K]);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\n\nexport function InputText<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputTextArea<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text-area\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputToggle<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n\n const isOn = !!value\n return <div class=\"sm:col-span-6\">\n <div class=\"flex items-center justify-between\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <button type=\"button\" data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\" aria-checked=\"false\" aria-labelledby=\"availability-label\" aria-describedby=\"availability-description\"\n onClick={() => { onChange(!isOn as any); }}>\n <span aria-hidden=\"true\" data-enabled={isOn} class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"></span>\n </button>\n </div>\n </div>\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { getHours, getMinutes, getSeconds, setHours } from \"date-fns\"\nimport { Fragment, VNode, h } from \"preact\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function TimePicker({ value, onChange, onConfirm }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void, onConfirm: () => void }): VNode {\n const date = !value ? new Date() : new Date(AbsoluteTime.toStampMs(value))\n const hours = getHours(date) % 12\n const minutes = getMinutes(date)\n const seconds = getSeconds(date)\n\n const { i18n } = useTranslationContext()\n\n return <Fragment>\n <div class=\"flex flex-col bg-white rounded-t-sm justify-around\" >\n {/* time selection */}\n <div id=\"\" class=\"bg-[#3b71ca] dark:bg-zinc-700 h-24 rounded-t-lg p-12 flex flex-row items-center justify-center\">\n <div class=\"flex w-full justify-evenly\">\n <div class=\"\">\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \"\n style=\"pointer-events: none;\">\n {new String(hours).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(minutes).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(seconds).padStart(2, \"0\")}\n </button>\n </span>\n </div>\n <div class=\"flex flex-col justify-center text-[18px] text-[#ffffff8a] \">\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n AM\n </button>\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n PM\n </button>\n </div>\n </div>\n </div>\n {/* clock */}\n <div id=\"\" class=\"mt-2 min-w-[310px] max-w-[325px] min-h-[305px] overflow-x-hidden h-full flex justify-center mx-auto flex-col items-center dark:bg-zinc-500\" >\n <div class=\"relative rounded-[100%] w-[260px] h-[260px] cursor-default my-0 mx-auto bg-[#00000012] dark:bg-zinc-600/50 animate-[show-up-clock_350ms_linear]\" >\n\n <span class=\"top-1/2 left-1/2 w-[6px] h-[6px] -translate-y-1/2 -translate-x-1/2 rounded-[50%] bg-[#3b71ca] absolute\" ></span>\n <div class=\"bg-[#3b71ca] bottom-1/2 h-2/5 left-[calc(50%-1px)] rtl:!left-auto origin-[center_bottom_0] rtl:!origin-[50%_50%_0] w-[2px] absolute\" style={{ transform: \"rotateZ(60deg)\", height: \"calc(35% + 1px)\" }}>\n {/* <div class=\"-top-[21px] -left-[15px] w-[4px] border-[14px] border-solid border-[#3b71ca] h-[4px] box-content rounded-[100%] absolute\" style=\"background-color: rgb(25, 118, 210);\"></div> */}\n </div>\n\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 12).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 224px;\">\n <span>0</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 1).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 209.263px;\">\n <span >1</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 2).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" data-selected={true} style=\"left: 209.263px; bottom: 169px;\" >\n <span >2</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 3).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 224px; bottom: 114px;\">\n <span >3</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 4).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 209.263px; bottom: 59px;\">\n <span >4</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 5).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 18.7372px;\">\n <span >5</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 6).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 4px;\">\n <span >6</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 7).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 18.7372px;\">\n <span >7</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 8).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 59px;\">\n <span >8</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 9).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 4px; bottom: 114px;\">\n <span >9</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 10).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 169px;\">\n <span >10</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 11).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 209.263px;\">\n <span >11</span>\n </span>\n </div>\n </div>\n </div>\n <div id=\"\" class=\"rounded-b-lg flex justify-between items-center w-full h-[56px] px-[12px] bg-white dark:bg-zinc-500\">\n <div class=\"w-full flex justify-end\">\n <button\n type=\"submit\"\n onClick={onConfirm}\n class=\"rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </div>\n </Fragment>\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 {\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\";\nimport { ExampleItemSetup } from \"./tests/hook.js\";\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 contextProps: {},\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<Props extends object = {}> {\n name: string;\n examples: ExampleItem<Props>[];\n}\n\nexport interface ExampleItem<Props extends object = {}> {\n group: string;\n component: string;\n name: string;\n render: ExampleItemSetup<Props>;\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 url = new URL(window.location.href);\n const initialSelection = getSelectionFromLocationHash(\n url.hash,\n examplesInGroups,\n );\n\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 (url.hash) {\n const hash = url.hash.substring(1);\n const found = document.getElementById(hash);\n if (found) {\n setTimeout(() => {\n found.scrollIntoView({\n block: \"center\",\n });\n }, 50);\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", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { CacheEvictor, TalerMerchantApi, TalerMerchantInstanceCacheEviction, TalerMerchantManagementCacheEviction, assertUnreachable, canonicalizeBaseUrl } from \"@gnu-taler/taler-util\";\nimport {\n BrowserHashNavigationProvider,\n ConfigResultFail,\n MerchantApiProvider,\n TalerWalletIntegrationBrowserProvider,\n TranslationProvider,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { SWRConfig } from \"swr\";\nimport { Routing } from \"./Routing.js\";\nimport { Loading } from \"./components/exception/loading.js\";\nimport { NotificationCard } from \"./components/menu/index.js\";\nimport { SettingsProvider } from \"./context/settings.js\";\nimport { revalidateBankAccountDetails, revalidateInstanceBankAccounts } from \"./hooks/bank.js\";\nimport { revalidateBackendInstances, revalidateInstanceDetails, revalidateManagedInstanceDetails } from \"./hooks/instance.js\";\nimport { revalidateInstanceOtpDevices, revalidateOtpDeviceDetails } from \"./hooks/otp.js\";\nimport { revalidateInstanceProducts, revalidateProductDetails } from \"./hooks/product.js\";\nimport { revalidateInstanceTemplates, revalidateTemplateDetails } from \"./hooks/templates.js\";\nimport { revalidateInstanceTransfers } from \"./hooks/transfer.js\";\nimport { revalidateInstanceWebhooks, revalidateWebhookDetails } from \"./hooks/webhooks.js\";\nimport { strings } from \"./i18n/strings.js\";\nimport { MerchantUiSettings, buildDefaultBackendBaseURL, fetchSettings } from \"./settings.js\";\nimport { revalidateInstanceOrders, revalidateOrderDetails } from \"./hooks/order.js\";\nconst WITH_LOCAL_STORAGE_CACHE = false;\n\nexport function Application(): VNode {\n const [settings, setSettings] = useState<MerchantUiSettings>();\n useEffect(() => {\n fetchSettings(setSettings);\n }, []);\n if (!settings) return <Loading />;\n\n const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);\n return (\n <SettingsProvider value={settings}>\n <TranslationProvider\n source={strings}\n completeness={{\n es: strings[\"es\"].completeness,\n de: strings[\"de\"].completeness,\n }}\n >\n <MerchantApiProvider baseUrl={new URL(\"./\", baseUrl)} frameOnError={OnConfigError} evictors={{\n management: swrCacheEvictor\n }}>\n <SWRConfig\n value={{\n provider: WITH_LOCAL_STORAGE_CACHE\n ? localStorageProvider\n : undefined,\n // normally, do not revalidate\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n revalidateOnMount: undefined,\n focusThrottleInterval: undefined,\n\n // normally, do not refresh\n refreshInterval: undefined,\n dedupingInterval: 2000,\n refreshWhenHidden: false,\n refreshWhenOffline: false,\n\n // ignore errors\n shouldRetryOnError: false,\n errorRetryCount: 0,\n errorRetryInterval: undefined,\n\n // do not go to loading again if already has data\n keepPreviousData: true,\n }}\n >\n <TalerWalletIntegrationBrowserProvider>\n <BrowserHashNavigationProvider>\n <Routing />\n </BrowserHashNavigationProvider>\n </TalerWalletIntegrationBrowserProvider>\n </SWRConfig>\n </MerchantApiProvider>\n </TranslationProvider>\n </SettingsProvider>\n );\n}\n\nfunction getInitialBackendBaseURL(\n backendFromSettings: string | undefined,\n): string {\n /**\n * For testing purpose\n */\n const overrideUrl =\n typeof localStorage !== \"undefined\"\n ? localStorage.getItem(\"merchant-base-url\")\n : undefined;\n let result: string;\n\n if (overrideUrl) {\n // testing/development path\n result = overrideUrl;\n } else {\n // normal path\n if (!backendFromSettings) {\n console.error(\n \"ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'\",\n );\n result = buildDefaultBackendBaseURL();\n } else {\n result = backendFromSettings;\n }\n }\n try {\n return canonicalizeBaseUrl(result);\n } catch (e) {\n // fall back\n return canonicalizeBaseUrl(window.origin);\n }\n}\n\nfunction localStorageProvider(): Map<unknown, unknown> {\n const map = new Map(JSON.parse(localStorage.getItem(\"app-cache\") || \"[]\"));\n\n window.addEventListener(\"beforeunload\", () => {\n const appCache = JSON.stringify(Array.from(map.entries()));\n localStorage.setItem(\"app-cache\", appCache);\n });\n return map;\n}\n\nfunction OnConfigError({ state }: { state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined }): VNode {\n const { i18n } = useTranslationContext();\n if (!state) {\n return <i18n.Translate>checking compatibility with server...</i18n.Translate>\n }\n switch (state.type) {\n case \"error\": {\n return <NotificationCard\n notification={{\n message: i18n.str`Contacting the server failed`,\n description: state.error.message,\n details: JSON.stringify(state.error.errorDetail, undefined, 2),\n type: \"ERROR\",\n }}\n />\n }\n case \"incompatible\": {\n return <NotificationCard\n notification={{\n message: i18n.str`The server version is not supported`,\n description: i18n.str`Supported version \"${state.supported}\", server version \"${state.result.version}\".`,\n type: \"WARN\",\n }}\n />\n }\n default: assertUnreachable(state)\n }\n}\n\nconst swrCacheEvictor= new class implements CacheEvictor<TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction> {\n async notifySuccess(op: TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction) {\n switch(op) {\n case TalerMerchantManagementCacheEviction.CREATE_INSTANCE: {\n await Promise.all([\n revalidateBackendInstances()\n ])\n return\n }\n case TalerMerchantManagementCacheEviction.UPDATE_INSTANCE: {\n await Promise.all([\n revalidateManagedInstanceDetails()\n ])\n return\n }\n case TalerMerchantManagementCacheEviction.DELETE_INSTANCE:{\n await Promise.all([\n revalidateBackendInstances()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE:{\n await Promise.all([\n revalidateInstanceDetails()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE:{\n await Promise.all([\n revalidateInstanceDetails()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT:{\n await Promise.all([\n revalidateInstanceBankAccounts()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT:{\n await Promise.all([\n revalidateBankAccountDetails()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT:{\n await Promise.all([\n revalidateInstanceBankAccounts()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.CREATE_PRODUCT:{\n await Promise.all([\n revalidateInstanceProducts()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT:{\n await Promise.all([\n revalidateProductDetails()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.DELETE_PRODUCT:{\n await Promise.all([\n revalidateInstanceProducts()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.CREATE_TRANSFER:{\n await Promise.all([\n revalidateInstanceTransfers()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.DELETE_TRANSFER:{\n await Promise.all([\n revalidateInstanceTransfers()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.CREATE_DEVICE:{\n await Promise.all([\n revalidateInstanceOtpDevices()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_DEVICE:{\n await Promise.all([\n revalidateOtpDeviceDetails()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.DELETE_DEVICE:{\n await Promise.all([\n revalidateInstanceOtpDevices()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE:{\n await Promise.all([\n revalidateInstanceTemplates()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE:{\n await Promise.all([\n revalidateTemplateDetails()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE:{\n await Promise.all([\n revalidateInstanceTemplates()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK:{\n await Promise.all([\n revalidateInstanceWebhooks()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK:{\n await Promise.all([\n revalidateWebhookDetails()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK:{\n await Promise.all([\n revalidateInstanceWebhooks()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.CREATE_ORDER:{\n await Promise.all([\n revalidateInstanceOrders()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_ORDER: {\n await Promise.all([\n revalidateOrderDetails()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.DELETE_ORDER: {\n await Promise.all([\n revalidateInstanceOrders()\n ])\n return\n }\n case TalerMerchantInstanceCacheEviction.LAST:\n // case TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY:{\n // await Promise.all([\n // reva\n // ])\n // return\n // }\n // case TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY:{\n // await Promise.all([\n // ])\n // return\n // }\n // case TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY:{\n // await Promise.all([\n // ])\n // return\n // }\n }\n }\n\n}\n", "import 'client-only';\nimport ReactExports, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { serialize, OBJECT, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, createCacheHelper, isUndefined, getTimestamp, UNDEFINED, isFunction, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects } from 'swr/_internal';\nexport { mutate, preload, useSWRConfig } from 'swr/_internal';\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = ReactExports.use || ((promise)=>{\n if (promise.status === 'pending') {\n throw promise;\n } else if (promise.status === 'fulfilled') {\n return promise.value;\n } else if (promise.status === 'rejected') {\n throw promise.reason;\n } else {\n promise.status = 'pending';\n promise.then((v)=>{\n promise.status = 'fulfilled';\n promise.value = v;\n }, (e)=>{\n promise.status = 'rejected';\n promise.reason = e;\n });\n throw promise;\n }\n});\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n // `key` is the identifier of the SWR internal state,\n // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n // All of them are derived from `_key`.\n const [key, fnArg] = serialize(_key);\n // If it's the initial render of this hook.\n const 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 const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(prev[t], current[t])) {\n if (!isUndefined(prev[t])) {\n return false;\n }\n if (!compare(returnedData, current[t])) {\n return false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n return false;\n }\n }\n }\n return true;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n if (!isUndefined(revalidateIfStale)) return revalidateIfStale;\n return true;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n const cachedData = getCache();\n const initialData = getInitialCache();\n const clientSnapshot = getSelectedCache(cachedData);\n const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = clientSnapshot;\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n if (compareResult) {\n // Mentally, we should always return the `memorizedSnapshot` here\n // as there's no change between the new and old snapshots.\n // However, since the `isEqual` function only compares selected fields,\n // the values of the unselected fields might be changed. That's\n // simply because we didn't track them.\n // To support the case in https://github.com/vercel/swr/pull/2576,\n // we need to update these fields in the `memorizedSnapshot` too\n // with direct mutations to ensure the snapshot is always up-to-date\n // even for the unselected fields, but only trigger re-renders when\n // the selected fields are changed.\n memorizedSnapshot.data = newSnapshot.data;\n memorizedSnapshot.isLoading = newSnapshot.isLoading;\n memorizedSnapshot.isValidating = newSnapshot.isValidating;\n memorizedSnapshot.error = newSnapshot.error;\n return memorizedSnapshot;\n } else {\n memorizedSnapshot = newSnapshot;\n return newSnapshot;\n }\n },\n ()=>serverSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined(cachedData) ? fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;\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 const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) 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 mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n [newData, startAt] = FETCH[key];\n newData = await newData;\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 (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n const revalidators = EVENT_REVALIDATORS[key];\n if (revalidators && revalidators[0]) {\n revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n }\n }, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `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 [\n key,\n cache\n ]);\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 const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n let nextFocusRevalidatedAt = 0;\n const onRevalidate = (type, opts = {})=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n return revalidate(opts);\n }\n return;\n };\n const 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 // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation\n if (shouldDoInitialRevalidation) {\n if (isUndefined(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\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 ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n // We only start the 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 (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `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 // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any initial data. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using suspense in SSR.');\n }\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 const req = PRELOAD[key];\n if (!isUndefined(req)) {\n const promise = boundMutate(req);\n use(promise);\n }\n if (isUndefined(error)) {\n const promise = revalidate(WITH_DEDUPE);\n if (!isUndefined(returnedData)) {\n promise.status = 'fulfilled';\n promise.value = true;\n }\n use(promise);\n } else {\n throw error;\n }\n }\n return {\n mutate: boundMutate,\n get data () {\n stateDependencies.data = true;\n return returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n};\nconst SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error, isLoading } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (isLoading) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n", "import React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can 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\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst isPromiseLike = (x)=>isFunction(x.then);\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).\nconst table = new WeakMap();\n// counter of the key\nlet 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// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const constructor = arg && arg.constructor;\n const isDate = constructor == Date;\n let result;\n let 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) 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 const 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 } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n }\n ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the 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 workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || 'Deno' in window;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\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.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nconst FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\nconst ERROR_REVALIDATE_EVENT = 3;\n\nvar events = {\n __proto__: null,\n ERROR_REVALIDATE_EVENT: ERROR_REVALIDATE_EVENT,\n FOCUS_EVENT: FOCUS_EVENT,\n MUTATE_EVENT: MUTATE_EVENT,\n RECONNECT_EVENT: RECONNECT_EVENT\n};\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const revalidate = options.revalidate !== false;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for (const key of it){\n if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n const startRevalidate = ()=>{\n const revalidators = EVENT_REVALIDATORS[key];\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 delete PRELOAD[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](MUTATE_EVENT).then(()=>get().data);\n }\n }\n return get().data;\n };\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 startRevalidate();\n }\n let data = _data;\n let error;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isPromiseLike(data)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((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 if (beforeMutationTs !== MUTATION[key][0]) {\n if (error) throw error;\n return data;\n } else if (error && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data: committedData,\n _c: UNDEFINED\n });\n }\n }\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 const populateCachedData = populateCache(data, committedData);\n set({\n data: populateCachedData,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n } else {\n // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n set({\n data,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n }\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n Promise.resolve(startRevalidate()).then(()=>{\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n });\n // Throw error or return data\n if (error) {\n if (throwOnError) throw error;\n return;\n }\n return data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (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 is bound to\n // the cache.\n // The 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 const 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 const EVENT_REVALIDATORS = {};\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = {};\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for (const fn of subs){\n fn(value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n {},\n {},\n {},\n mutate,\n setter,\n subscribe\n ]);\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 be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\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 }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\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 [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = (currentData, newData)=>stableHash(currentData) == stableHash(newData);\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n 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,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1, fallback: f1 } = a;\n const { use: u2, fallback: f2 } = b;\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\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // initialize the cache only on first access.\n const cacheContextRef = useRef(UNDEFINED);\n if (provider && !cacheContextRef.current) {\n cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n }\n const cacheContext = cacheContextRef.current;\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(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\nconst INFINITE_PREFIX = '$inf$';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const [key, fnArg] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(fnArg);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const [key] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n if (key.startsWith(INFINITE_PREFIX)) {\n // we want the infinite fetcher to be called.\n // handling of the PRELOAD cache happens there.\n return fetcher_(...args);\n }\n const req = PRELOAD[key];\n if (isUndefined(req)) return fetcher_(...args);\n delete PRELOAD[key];\n return req;\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const 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\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { INFINITE_PREFIX, IS_REACT_LEGACY, IS_SERVER, OBJECT, SWRConfig, SWRGlobalState, UNDEFINED, cache, compare, createCacheHelper, defaultConfig, defaultConfigOptions, getTimestamp, hasRequestAnimationFrame, initCache, internalMutate, isDocumentDefined, isFunction, isPromiseLike, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, mutate, noop, normalize, preload, preset, rAF, events as revalidateEvents, serialize, slowConnection, stableHash, subscribeCallback, useIsomorphicLayoutEffect, useSWRConfig, withArgs, withMiddleware };\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';\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n TalerError,\n TranslatedString\n} from \"@gnu-taler/taler-util\";\nimport {\n urlPattern,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { createHashHistory } from \"history\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Route, Router, route } from \"preact-router\";\nimport { useEffect, useErrorBoundary, useState } from \"preact/hooks\";\nimport { Loading } from \"./components/exception/loading.js\";\nimport {\n Menu,\n NotConnectedAppMenu,\n NotificationCard,\n} from \"./components/menu/index.js\";\nimport { useSessionContext } from \"./context/session.js\";\nimport { useInstanceBankAccounts } from \"./hooks/bank.js\";\nimport { useInstanceKYCDetails } from \"./hooks/instance.js\";\nimport { usePreference } from \"./hooks/preference.js\";\nimport InstanceCreatePage from \"./paths/admin/create/index.js\";\nimport InstanceListPage from \"./paths/admin/list/index.js\";\nimport BankAccountCreatePage from \"./paths/instance/accounts/create/index.js\";\nimport BankAccountListPage from \"./paths/instance/accounts/list/index.js\";\nimport BankAccountUpdatePage from \"./paths/instance/accounts/update/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 ValidatorCreatePage from \"./paths/instance/otp_devices/create/index.js\";\nimport ValidatorListPage from \"./paths/instance/otp_devices/list/index.js\";\nimport ValidatorUpdatePage from \"./paths/instance/otp_devices/update/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 TemplateCreatePage from \"./paths/instance/templates/create/index.js\";\nimport TemplateListPage from \"./paths/instance/templates/list/index.js\";\nimport TemplateQrPage from \"./paths/instance/templates/qr/index.js\";\nimport TemplateUpdatePage from \"./paths/instance/templates/update/index.js\";\nimport TemplateUsePage from \"./paths/instance/templates/use/index.js\";\nimport TokenPage from \"./paths/instance/token/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 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 { LoginPage } from \"./paths/login/index.js\";\nimport { NotFoundPage } from \"./paths/notfound/index.js\";\nimport { Settings } from \"./paths/settings/index.js\";\nimport { Notification } from \"./utils/types.js\";\n\nexport enum InstancePaths {\n error = \"/error\",\n settings = \"/settings\",\n token = \"/token\",\n\n bank_list = \"/bank\",\n bank_update = \"/bank/:bid/update\",\n bank_new = \"/bank/new\",\n\n inventory_list = \"/inventory\",\n inventory_update = \"/inventory/:pid/update\",\n inventory_new = \"/inventory/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 otp_devices_list = \"/otp-devices\",\n otp_devices_update = \"/otp-devices/:vid/update\",\n otp_devices_new = \"/otp-devices/new\",\n\n interface = \"/interface\",\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\n// const 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\nexport const privatePages = {\n home: urlPattern(/\\/home/, () => \"#/home\"),\n go: urlPattern(/\\/home/, () => \"#/home\"),\n};\nexport const publicPages = {\n home: urlPattern(/\\/home/, () => \"#/home\"),\n go: urlPattern(/\\/home/, () => \"#/home\"),\n};\n\nconst history = createHashHistory();\nexport function Routing(_p: Props): VNode {\n // const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n\n type GlobalNotifState =\n | (Notification & { to: string | undefined })\n | undefined;\n const [globalNotification, setGlobalNotification] =\n useState<GlobalNotifState>(undefined);\n\n const [error] = useErrorBoundary();\n const [preference] = usePreference();\n\n const now = AbsoluteTime.now();\n\n const instance = useInstanceBankAccounts();\n const accounts =\n !instance || instance instanceof TalerError || instance.type === \"fail\"\n ? undefined\n : instance.body;\n const shouldWarnAboutMissingBankAccounts =\n !state.isAdmin &&\n accounts !== undefined &&\n accounts.accounts.length < 1 &&\n (AbsoluteTime.isNever(preference.hideMissingAccountUntil) ||\n AbsoluteTime.cmp(now, preference.hideMissingAccountUntil) > 1);\n\n const shouldLogin =\n state.status === \"loggedOut\" || state.status === \"expired\";\n\n // function ServerErrorRedirectTo(to: InstancePaths | AdminPaths) {\n // return function ServerErrorRedirectToImpl(\n // error: HttpError<TalerErrorDetail>,\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.type === ErrorType.CLIENT || error.type === ErrorType.SERVER\n // ? error.payload.hint\n // : undefined,\n // type: \"ERROR\",\n // to,\n // });\n // }\n // return <Redirect to={to} />;\n // };\n // }\n\n // const LoginPageAccessDeniend = onUnauthorized\n // const LoginPageAccessDenied = () => {\n // return (\n // <Fragment>\n // <NotificationCard\n // notification={{\n // message: i18n.str`Access denied`,\n // description: i18n.str`Session expired or password changed.`,\n // type: \"ERROR\",\n // }}\n // />\n // <LoginPage />\n // </Fragment>\n // );\n // };\n\n // function IfAdminCreateDefaultOr<T>(Next: FunctionComponent<unknown>) {\n // return function IfAdminCreateDefaultOrImpl(props?: T) {\n // if (state.isAdmin && state.instance === DEFAULT_ADMIN_USERNAME) {\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_ADMIN_USERNAME}\n // onConfirm={() => {\n // route(InstancePaths.bank_list);\n // }}\n // />\n // </Fragment>\n // );\n // }\n // if (props) {\n // return <Next {...props} />;\n // }\n // return <Next />;\n // };\n // }\n\n if (shouldLogin) {\n return (\n <Fragment>\n <NotConnectedAppMenu title=\"Welcome!\" />\n <LoginPage />\n </Fragment>\n );\n }\n\n if (shouldWarnAboutMissingBankAccounts) {\n return (\n <Fragment>\n <Menu />\n <BankAccountBanner />\n <BankAccountCreatePage\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n />\n </Fragment>\n );\n }\n\n return (\n <Fragment>\n <Menu />\n <KycBanner />\n <NotificationCard notification={globalNotification} />\n {error && (\n <NotificationCard\n notification={{\n message: \"Internal error, please repot\",\n type: \"ERROR\",\n description: (\n <pre>\n {\n (error instanceof Error\n ? error.stack\n : String(error)) as TranslatedString\n }\n </pre>\n ),\n }}\n />\n )}\n\n <Router\n history={history}\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 {state.isAdmin && (\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 />\n )}\n {state.isAdmin && (\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 {state.isAdmin && (\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 />\n )}\n {/**\n * Update instance page\n */}\n <Route\n path={InstancePaths.settings}\n component={InstanceUpdatePage}\n onBack={() => {\n route(`/`);\n }}\n onConfirm={() => {\n route(`/`);\n }}\n />\n {/**\n * Update instance page\n */}\n <Route\n path={InstancePaths.token}\n component={TokenPage}\n onChange={() => {\n route(`/`);\n }}\n onCancel={() => {\n route(InstancePaths.order_list);\n }}\n />\n {/**\n * Inventory pages\n */}\n <Route\n path={InstancePaths.inventory_list}\n component={ProductListPage}\n onCreate={() => {\n route(InstancePaths.inventory_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.inventory_update.replace(\":pid\", id));\n }}\n />\n <Route\n path={InstancePaths.inventory_update}\n component={ProductUpdatePage}\n onConfirm={() => {\n route(InstancePaths.inventory_list);\n }}\n onBack={() => {\n route(InstancePaths.inventory_list);\n }}\n />\n <Route\n path={InstancePaths.inventory_new}\n component={ProductCreatePage}\n onConfirm={() => {\n route(InstancePaths.inventory_list);\n }}\n onBack={() => {\n route(InstancePaths.inventory_list);\n }}\n />\n {/**\n * Bank pages\n */}\n <Route\n path={InstancePaths.bank_list}\n component={BankAccountListPage}\n onCreate={() => {\n route(InstancePaths.bank_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.bank_update.replace(\":bid\", id));\n }}\n />\n <Route\n path={InstancePaths.bank_update}\n component={BankAccountUpdatePage}\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n onBack={() => {\n route(InstancePaths.bank_list);\n }}\n />\n <Route\n path={InstancePaths.bank_new}\n component={BankAccountCreatePage}\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n onBack={() => {\n route(InstancePaths.bank_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 />\n <Route\n path={InstancePaths.order_details}\n component={OrderDetailsPage}\n onBack={() => {\n route(InstancePaths.order_list);\n }}\n />\n <Route\n path={InstancePaths.order_new}\n component={OrderCreatePage}\n onConfirm={(orderId: string) => {\n route(InstancePaths.order_details.replace(\":oid\", orderId));\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 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 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 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 * Validator pages\n */}\n <Route\n path={InstancePaths.otp_devices_list}\n component={ValidatorListPage}\n onCreate={() => {\n route(InstancePaths.otp_devices_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.otp_devices_update.replace(\":vid\", id));\n }}\n />\n <Route\n path={InstancePaths.otp_devices_update}\n component={ValidatorUpdatePage}\n onConfirm={() => {\n route(InstancePaths.otp_devices_list);\n }}\n onBack={() => {\n route(InstancePaths.otp_devices_list);\n }}\n />\n <Route\n path={InstancePaths.otp_devices_new}\n component={ValidatorCreatePage}\n onConfirm={() => {\n route(InstancePaths.otp_devices_list);\n }}\n onBack={() => {\n route(InstancePaths.otp_devices_list);\n }}\n />\n {/**\n * Templates pages\n */}\n <Route\n path={InstancePaths.templates_list}\n component={TemplateListPage}\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 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 onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n <Route\n path={InstancePaths.templates_qr}\n component={TemplateQrPage}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n\n <Route path={InstancePaths.kyc} component={ListKYCPage} />\n <Route path={InstancePaths.interface} component={Settings} />\n {/**\n * Example pages\n */}\n <Route path=\"/loading\" component={Loading} />\n <Route default component={NotFoundPage} />\n </Router>\n </Fragment>\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 { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <InstanceAdminUpdatePage\n {...rest}\n instanceId={id}\n // onLoadError={(error: HttpError<TalerErrorDetail>) => {\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.type === ErrorType.CLIENT ||\n // error.type === ErrorType.SERVER\n // ? error.payload.hint\n // : undefined,\n // type: \"ERROR\" as const,\n // };\n // return (\n // <Fragment>\n // <NotificationCard notification={notif} />\n // <LoginPage />\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 />\n // </Fragment>\n // );\n // }}\n />\n </Fragment>\n );\n}\n\nfunction BankAccountBanner(): VNode {\n const { i18n } = useTranslationContext();\n\n const [, updatePref] = usePreference();\n const now = AbsoluteTime.now();\n const oneDay = { d_ms: 1000 * 60 * 60 * 24 };\n const tomorrow = AbsoluteTime.addDuration(now, oneDay);\n\n return (\n <NotificationCard\n notification={{\n type: \"INFO\",\n message: i18n.str`You need to associate a bank account to receive revenue.`,\n description: (\n <div>\n <p>\n <i18n.Translate>\n Without this the merchant backend will refuse to create new\n orders.\n </i18n.Translate>\n </p>\n <div class=\"buttons is-right\">\n <button\n class=\"button\"\n onClick={() => updatePref(\"hideMissingAccountUntil\", tomorrow)}\n >\n <i18n.Translate>Hide for today</i18n.Translate>\n </button>\n </div>\n </div>\n ),\n }}\n />\n );\n}\n\nfunction KycBanner(): VNode {\n const kycStatus = useInstanceKYCDetails();\n const { i18n } = useTranslationContext();\n // const today = format(new Date(), dateFormatForSettings(settings));\n const [prefs, updatePref] = usePreference();\n\n const now = AbsoluteTime.now();\n\n const needsToBeShown =\n kycStatus !== undefined &&\n !(kycStatus instanceof TalerError) &&\n kycStatus.type === \"ok\" &&\n !!kycStatus.body;\n\n const hidden = AbsoluteTime.cmp(now, prefs.hideKycUntil) < 1;\n if (hidden || !needsToBeShown) return <Fragment />;\n\n const oneDay = { d_ms: 1000 * 60 * 60 * 24 };\n const tomorrow = AbsoluteTime.addDuration(now, oneDay);\n\n return (\n <NotificationCard\n notification={{\n type: \"WARN\",\n message: \"KYC verification needed\",\n description: (\n <div>\n <p>\n <i18n.Translate>\n Some transfer are on hold until a KYC process is completed. Go\n to the KYC section in the left panel for more information\n </i18n.Translate>\n </p>\n <div class=\"buttons is-right\">\n <button\n class=\"button\"\n onClick={() => updatePref(\"hideKycUntil\", tomorrow)}\n >\n <i18n.Translate>Hide for today</i18n.Translate>\n </button>\n </div>\n </div>\n ),\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", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 \"../../Routing.js\";\nimport { Notification } from \"../../utils/types.js\";\nimport { NavigationBar } from \"./NavigationBar.js\";\nimport { Sidebar } from \"./SideBar.js\";\nimport { useSessionContext } from \"../../context/session.js\";\nimport { useNavigationContext } from \"@gnu-taler/web-util/browser\";\n\nfunction getInstanceTitle(path: string, id: string): string {\n switch (path) {\n case InstancePaths.settings:\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.inventory_list:\n return `${id}: Inventory`;\n case InstancePaths.inventory_new:\n return `${id}: New product`;\n case InstancePaths.inventory_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.otp_devices_list:\n return `${id}: otp devices`;\n case InstancePaths.otp_devices_new:\n return `${id}: New otp devices`;\n case InstancePaths.otp_devices_update:\n return `${id}: Update otp devices`;\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 case InstancePaths.interface:\n return `${id}: Interface`;\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\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(_p: MenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n const { state, deImpersonate } = useSessionContext();\n const { path } = useNavigationContext();\n\n const titleWithSubtitle = !state.isAdmin\n ? getInstanceTitle(path, state.instance)\n : getAdminTitle(path, state.instance);\n\n const isLoggedIn =state.status === \"loggedIn\";\n\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 {isLoggedIn && (\n <Sidebar mobile={mobileOpen} />\n )}\n\n {state.status !== \"loggedOut\" && state.impersonate !== undefined && (\n <nav\n class=\"level\"\n style={{\n zIndex: 100,\n position: \"fixed\",\n width: \"50%\",\n marginLeft: \"20%\",\n }}\n >\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;{state.instance}&quot;</b>\n .{\" \"}\n <a\n href=\"#/instances\"\n onClick={(e) => {\n deImpersonate();\n e.preventDefault();\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 onShowSettings: () => void;\n onLogout?: () => void;\n isPasswordOk: boolean;\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\ninterface NotConnectedAppMenuProps {\n title: string;\n}\nexport function NotConnectedAppMenu({\n title,\n}: NotConnectedAppMenuProps): 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 </div>\n );\n}\n\nexport function NotYetReadyAppMenu({ title }: NotYetReadyAppMenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n const { state } = useSessionContext();\n\n useEffect(() => {\n document.title = `Taler Backoffice: ${title}`;\n }, [title]);\n \n const isLoggedIn = state.status === \"loggedIn\";\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 {isLoggedIn && <Sidebar mobile={mobileOpen} />}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { h, VNode } from \"preact\";\nimport { Router, route, Route } from \"preact-router\";\nimport InstanceCreatePage from \"./paths/admin/create/index.js\";\nimport InstanceListPage from \"./paths/admin/list/index.js\";\nimport { InstancePaths } from \"./Routing.js\";\n\nexport enum AdminPaths {\n list_instances = \"/instances\",\n new_instance = \"/instance/new\",\n}\n\nexport function AdminRoutes(): VNode {\n return (\n <Router>\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 />\n\n <Route\n path={AdminPaths.new_instance}\n component={InstanceCreatePage}\n onBack={() => route(AdminPaths.list_instances)}\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n\n />\n </Router>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n forceId?: string;\n}\nexport type Entity = TalerMerchantApi.InstanceConfigurationMessage;\n\nexport default function Create({ onBack, onConfirm, forceId }: Props): VNode {\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const { lib } = useMerchantApiContext();\n const { state, logIn } = useSessionContext();\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <CreatePage\n onBack={onBack}\n forceId={forceId}\n onCreate={async (\n d: TalerMerchantApi.InstanceConfigurationMessage,\n ) => {\n if (state.status !== \"loggedIn\") return;\n try {\n await lib.instance.createInstance(state.token, d);\n if (d.auth.token) {\n //if auth has been updated, request a new access token\n const result = await lib.authenticate.createAccessTokenBearer(\n d.auth.token,\n {\n scope: \"write\",\n duration: {\n d_us: \"forever\",\n },\n refreshable: true,\n },\n );\n if (result.type === \"ok\") {\n const { token } = result.body;\n logIn({ token });\n }\n }\n onConfirm();\n } catch (ex) {\n if (ex instanceof Error) {\n setNotif({\n message: i18n.str`Failed to create instance`,\n type: \"ERROR\",\n description: ex.message,\n });\n } else {\n console.error(ex);\n }\n }\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForBoolean,\n codecForConstString,\n codecForString,\n codecOptional,\n} from \"@gnu-taler/taler-util\";\nimport {\n buildStorageKey,\n useLocalStorage,\n useMerchantApiContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { mutate } from \"swr\";\n\n/**\n * Has the information to reach and\n * authenticate at the bank's backend.\n */\nexport type SessionState = LoggedIn | LoggedOut | Expired;\n\ninterface LoggedIn {\n status: \"loggedIn\";\n isAdmin: boolean;\n instance: string;\n token: AccessToken | undefined;\n impersonate: Impersonate | undefined;\n}\ninterface Impersonate {\n originalInstance: string;\n originalToken: AccessToken | undefined;\n originalBackendUrl: string;\n}\ninterface Expired {\n status: \"expired\";\n isAdmin: boolean;\n instance: string;\n token?: undefined;\n impersonate: Impersonate | undefined;\n}\ninterface LoggedOut {\n status: \"loggedOut\";\n instance: string;\n isAdmin: boolean;\n token?: undefined;\n}\n\nexport const codecForSessionStateLoggedIn = (): Codec<LoggedIn> =>\n buildCodecForObject<LoggedIn>()\n .property(\"status\", codecForConstString(\"loggedIn\"))\n .property(\"instance\", codecForString())\n .property(\"impersonate\", codecOptional(codecForImpresonate()))\n .property(\"token\", codecOptional(codecForString() as Codec<AccessToken>))\n .property(\"isAdmin\", codecForBoolean())\n .build(\"SessionState.LoggedIn\");\n\nexport const codecForSessionStateExpired = (): Codec<Expired> =>\n buildCodecForObject<Expired>()\n .property(\"status\", codecForConstString(\"expired\"))\n .property(\"instance\", codecForString())\n .property(\"impersonate\", codecOptional(codecForImpresonate()))\n .property(\"isAdmin\", codecForBoolean())\n .build(\"SessionState.Expired\");\n\nexport const codecForSessionStateLoggedOut = (): Codec<LoggedOut> =>\n buildCodecForObject<LoggedOut>()\n .property(\"status\", codecForConstString(\"loggedOut\"))\n .property(\"instance\", codecForString())\n .property(\"isAdmin\", codecForBoolean())\n .build(\"SessionState.LoggedOut\");\n\nexport const codecForImpresonate = (): Codec<Impersonate> =>\n buildCodecForObject<Impersonate>()\n .property(\"originalInstance\", codecForString())\n .property(\n \"originalToken\",\n codecOptional(codecForString() as Codec<AccessToken>),\n )\n .property(\"originalBackendUrl\", codecForString())\n .build(\"SessionState.Impersonate\");\n\nexport const codecForSessionState = (): Codec<SessionState> =>\n buildCodecForUnion<SessionState>()\n .discriminateOn(\"status\")\n .alternative(\"loggedIn\", codecForSessionStateLoggedIn())\n .alternative(\"loggedOut\", codecForSessionStateLoggedOut())\n .alternative(\"expired\", codecForSessionStateExpired())\n .build(\"SessionState\");\n\nfunction inferInstanceName(url: URL) {\n const match = INSTANCE_ID_LOOKUP.exec(url.href);\n return !match || !match[1] ? DEFAULT_ADMIN_USERNAME : match[1];\n}\n\nexport const defaultState = (url: URL): SessionState => {\n const instance = inferInstanceName(url);\n return {\n status: \"loggedIn\",\n instance,\n isAdmin: instance === DEFAULT_ADMIN_USERNAME,\n token: undefined,\n impersonate: undefined,\n };\n};\n\nexport interface SessionStateHandler {\n state: SessionState;\n /**\n * from every state to logout state\n */\n logOut(): void;\n /**\n * from impersonate to loggedIn\n */\n deImpersonate(): void;\n /**\n * from non-loggedOut state to expired\n */\n expired(): void;\n /**\n * from any to loggedIn\n * @param info\n */\n logIn(info: { token?: AccessToken }): void;\n /**\n * from loggedIn to impersonate\n * @param info\n */\n impersonate(info: { instance: string; baseUrl: URL, token?: AccessToken }): void;\n}\n\nconst SESSION_STATE_KEY = buildStorageKey(\n \"merchant-session\",\n codecForSessionState(),\n);\n\nexport const DEFAULT_ADMIN_USERNAME = \"default\";\n\nexport const INSTANCE_ID_LOOKUP = /\\/instances\\/([^/]*)\\/?$/;\n\n/**\n * Return getters and setters for\n * login credentials and backend's\n * base URL.\n */\nexport function useSessionContext(): SessionStateHandler {\n const { url: merchantUrl, changeBackend } = useMerchantApiContext();\n\n const { value: state, update } = useLocalStorage(\n SESSION_STATE_KEY,\n defaultState(merchantUrl),\n );\n\n return {\n state,\n logOut() {\n const instance = inferInstanceName(merchantUrl);\n const nextState: SessionState = {\n status: \"loggedOut\",\n instance,\n isAdmin: instance === DEFAULT_ADMIN_USERNAME,\n };\n update(nextState);\n },\n deImpersonate() {\n if (state.status === \"loggedOut\" || state.status === \"expired\") {\n // can't impersonate if not loggedin\n return;\n }\n if (state.impersonate === undefined) {\n return;\n }\n const newURL = new URL(`./`, state.impersonate.originalBackendUrl);\n changeBackend(newURL);\n const nextState: SessionState = {\n status: \"loggedIn\",\n isAdmin: state.impersonate.originalInstance === DEFAULT_ADMIN_USERNAME,\n instance: state.impersonate.originalInstance,\n token: state.impersonate.originalToken,\n impersonate: undefined,\n };\n update(nextState);\n },\n impersonate(info) {\n if (state.status === \"loggedOut\" || state.status === \"expired\") {\n // can't impersonate if not loggedin\n return;\n }\n changeBackend(info.baseUrl);\n const nextState: SessionState = {\n status: \"loggedIn\",\n isAdmin: info.instance === DEFAULT_ADMIN_USERNAME,\n instance: info.instance,\n // FIXME: bank and merchant should have consistent behavior\n token: info.token?.substring(\"secret-token:\".length) as AccessToken,\n impersonate: {\n originalBackendUrl: merchantUrl.href,\n originalToken: state.token,\n originalInstance: state.instance,\n },\n };\n update(nextState);\n },\n expired() {\n if (state.status === \"loggedOut\") return;\n\n const nextState: SessionState = {\n ...state,\n status: \"expired\",\n token: undefined,\n };\n update(nextState);\n },\n logIn(info) {\n // admin is defined by the username\n const nextState: SessionState = {\n impersonate: undefined,\n ...state,\n status: \"loggedIn\",\n // FIXME: bank and merchant should have consistent behavior\n token: info.token?.substring(\"secret-token:\".length) as AccessToken,\n // token: info.token,\n };\n update(nextState);\n cleanAllCache();\n },\n };\n}\n\nfunction cleanAllCache(): void {\n mutate(() => true, undefined, { revalidate: false });\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Duration, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/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 { INSTANCE_ID_REGEX } from \"../../../utils/constants.js\";\nimport { undefinedIfEmpty } from \"../../../utils/table.js\";\n\nexport type Entity = Omit<Omit<TalerMerchantApi.InstanceConfigurationMessage, \"default_pay_delay\">, \"default_wire_transfer_delay\"> & {\n auth_token?: string;\n default_pay_delay: Duration,\n default_wire_transfer_delay: Duration,\n};\n\ninterface Props {\n onCreate: (d: TalerMerchantApi.InstanceConfigurationMessage) => Promise<void>;\n onBack?: () => void;\n forceId?: string;\n}\n\nfunction with_defaults(id?: string): Partial<Entity> {\n return {\n id,\n // accounts: [],\n user_type: \"business\",\n use_stefan: true,\n default_pay_delay: { d_ms: 2 * 60 * 60 * 1000 }, // two hours\n default_wire_transfer_delay: { d_ms: 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\n user_type: !value.user_type\n ? i18n.str`required`\n : value.user_type !== \"business\" && value.user_type !== \"individual\"\n ? i18n.str`should be business or individual`\n : undefined,\n // accounts:\n // !value.accounts || !value.accounts.length\n // ? i18n.str`required`\n // : undefinedIfEmpty(\n // value.accounts.map((p) => {\n // return !PAYTO_REGEX.test(p.payto_uri)\n // ? i18n.str`is not valid`\n // : undefined;\n // }),\n // ),\n default_pay_delay: !value.default_pay_delay\n ? i18n.str`required`\n : !!value.default_wire_transfer_delay &&\n value.default_wire_transfer_delay.d_ms !== \"forever\" &&\n value.default_pay_delay.d_ms !== \"forever\" &&\n value.default_pay_delay.d_ms > value.default_wire_transfer_delay.d_ms ?\n i18n.str`pay delay can't be greater than wire transfer delay` : 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 newValue = structuredClone(value);\n\n const newToken = newValue.auth_token;\n newValue.auth_token = undefined;\n newValue.auth = newToken === null || newToken === undefined\n ? { method: \"external\" }\n : { method: \"token\", token: `secret-token:${newToken}` };\n if (!newValue.address) newValue.address = {};\n if (!newValue.jurisdiction) newValue.jurisdiction = {};\n // remove above use conversion\n // schema.validateSync(value, { abortEarly: false })\n newValue.default_pay_delay = Duration.toTalerProtocolDuration(newValue.default_pay_delay!) as any\n newValue.default_wire_transfer_delay = Duration.toTalerProtocolDuration(newValue.default_wire_transfer_delay!) as any\n // delete value.default_pay_delay;\n // delete value.default_wire_transfer_delay;\n\n return onCreate(newValue as any as TalerMerchantApi.InstanceConfigurationMessage);\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=\"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=\"level\">\n <div class=\"level-item has-text-centered\">\n <h1 class=\"title\">\n <button\n class={\n !isTokenSet\n ? \"button is-danger has-tooltip-bottom\"\n : !value.auth_token\n ? \"button has-tooltip-bottom\"\n : \"button is-info has-tooltip-bottom\"\n }\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 class=\"level\">\n <div class=\"level-item has-text-centered\">\n {!isTokenSet ? (\n <p class=\"is-size-6\">\n <i18n.Translate>\n Access token is not yet configured. This instance can't be\n created.\n </i18n.Translate>\n </p>\n ) : value.auth_token === undefined ? (\n <p class=\"is-size-6\">\n <i18n.Translate>\n No access token. Authorization must be handled externally.\n </i18n.Translate>\n </p>\n ) : (\n <p class=\"is-size-6\">\n <i18n.Translate>\n Access token is set. Authorization is handled by the\n merchant backend.\n </i18n.Translate>\n </p>\n )}\n </div>\n </div>\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={hasErrors || !isTokenSet}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\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\";\nimport { useSessionContext } from \"../../context/session.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 { state } = useSessionContext();\n\n const text = i18n.str`You are updating the access token from instance with id ${state.instance}`;\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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]{1,11}:[0-9][0-9,]*\\.?[0-9,]*$/;\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\nexport const PAGINATED_LIST_SIZE = 5;\n// when doing paginated request, ask for one more\n// and use it to know if there are more to request\nexport const PAGINATED_LIST_REQUEST = PAGINATED_LIST_SIZE + 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\n/**\n * FIXME:\n * USE MEMORY EVENTS INSTEAD OF CONTEXT\n * @deprecated\n */\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useState } from \"preact/hooks\";\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 const [isDirty, setDirty] = useState(false);\n const updateField =\n (field: P) =>\n (value: V): void => {\n setDirty(true);\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 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Entity } from \"../../paths/admin/create/CreatePage.js\";\nimport { Input } from \"../form/Input.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 { InputSelector } from \"../form/InputSelector.js\";\nimport { InputToggle } from \"../form/InputToggle.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 { url: backendUrl } = useMerchantApiContext();\n return (\n <Fragment>\n {showId && (\n <InputWithAddon<Entity>\n name=\"id\"\n addonBefore={new URL(\"instances/\", backendUrl.href).href}\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 <InputSelector<Entity>\n name=\"user_type\"\n label={i18n.str`Type`}\n tooltip={i18n.str`Different type of account can have different rules and requirements.`}\n values={[\"business\", \"individual\"]}\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 <InputToggle<Entity>\n name=\"use_stefan\"\n label={i18n.str`Pay transaction fee`}\n tooltip={i18n.str`Assume the cost of the transaction of let the user pay for it.`}\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", "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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}", "import assign from \"../assign/index.js\";\nexport default function cloneObject(object) {\n return assign({}, object);\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MINUTES_IN_DAY = 1440;\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520;\nvar MINUTES_IN_MONTH = 43200;\nvar MINUTES_IN_TWO_MONTHS = 86400;\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * const result = formatDistance(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0),\n * { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\n\nexport default function formatDistance(dirtyDate, dirtyBaseDate, options) {\n var _ref, _options$locale;\n\n requiredArgs(2, arguments);\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\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain formatDistance property');\n }\n\n var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value');\n }\n\n var localizeOptions = assign(cloneObject(options), {\n addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix),\n comparison: comparison\n });\n var dateLeft;\n var dateRight;\n\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate);\n dateRight = toDate(dirtyDate);\n } else {\n dateLeft = toDate(dirtyDate);\n dateRight = toDate(dirtyBaseDate);\n }\n\n var seconds = differenceInSeconds(dateRight, dateLeft);\n var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1000;\n var minutes = Math.round((seconds - offsetInSeconds) / 60);\n var months; // 0 up to 2 mins\n\n if (minutes < 2) {\n if (options !== null && options !== void 0 && options.includeSeconds) {\n if (seconds < 5) {\n return locale.formatDistance('lessThanXSeconds', 5, localizeOptions);\n } else if (seconds < 10) {\n return locale.formatDistance('lessThanXSeconds', 10, localizeOptions);\n } else if (seconds < 20) {\n return locale.formatDistance('lessThanXSeconds', 20, localizeOptions);\n } else if (seconds < 40) {\n return locale.formatDistance('halfAMinute', 0, localizeOptions);\n } else if (seconds < 60) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n } else {\n return locale.formatDistance('xMinutes', 1, localizeOptions);\n }\n } else {\n if (minutes === 0) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n } else {\n return locale.formatDistance('xMinutes', minutes, localizeOptions);\n }\n } // 2 mins up to 0.75 hrs\n\n } else if (minutes < 45) {\n return locale.formatDistance('xMinutes', minutes, localizeOptions); // 0.75 hrs up to 1.5 hrs\n } else if (minutes < 90) {\n return locale.formatDistance('aboutXHours', 1, localizeOptions); // 1.5 hrs up to 24 hrs\n } else if (minutes < MINUTES_IN_DAY) {\n var hours = Math.round(minutes / 60);\n return locale.formatDistance('aboutXHours', hours, localizeOptions); // 1 day up to 1.75 days\n } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n return locale.formatDistance('xDays', 1, localizeOptions); // 1.75 days up to 30 days\n } else if (minutes < MINUTES_IN_MONTH) {\n var days = Math.round(minutes / MINUTES_IN_DAY);\n return locale.formatDistance('xDays', days, localizeOptions); // 1 month up to 2 months\n } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n months = Math.round(minutes / MINUTES_IN_MONTH);\n return locale.formatDistance('aboutXMonths', months, localizeOptions);\n }\n\n months = differenceInMonths(dateRight, dateLeft); // 2 months up to 12 months\n\n if (months < 12) {\n var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH);\n return locale.formatDistance('xMonths', nearestMonth, localizeOptions); // 1 year up to max Date\n } else {\n var monthsSinceStartOfYear = months % 12;\n var years = Math.floor(months / 12); // N years up to 1 years 3 months\n\n if (monthsSinceStartOfYear < 3) {\n return locale.formatDistance('aboutXYears', years, localizeOptions); // N years 3 months up to N years 9 months\n } else if (monthsSinceStartOfYear < 9) {\n return locale.formatDistance('overXYears', years, localizeOptions); // N years 9 months up to N year 12 months\n } else {\n return locale.formatDistance('almostXYears', years + 1, localizeOptions);\n }\n }\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 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { formatDuration, intervalToDuration } from \"date-fns\";\nimport { ComponentChildren, 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\";\nimport { Duration } from \"@gnu-taler/taler-util\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n readonly?: boolean;\n withForever?: boolean;\n side?: ComponentChildren;\n withoutClear?: boolean;\n}\n\nexport function InputDuration<T>({\n name,\n expand,\n placeholder,\n tooltip,\n label,\n help,\n readonly,\n withForever,\n withoutClear,\n side,\n}: Props<keyof T>): VNode {\n const [opened, setOpened] = useState(false);\n const { i18n } = useTranslationContext();\n\n const { error, required, value: anyValue, onChange } = useField<T>(name);\n let strValue = \"\";\n const value: Duration = anyValue\n if (!value) {\n strValue = \"\";\n } else if (value.d_ms === \"forever\") {\n strValue = i18n.str`forever`;\n } else {\n if (value.d_ms === undefined) {\n throw Error(`assertion error: duration should have a d_ms but got '${JSON.stringify(value)}'`)\n }\n strValue = formatDuration(\n intervalToDuration({ start: 0, end: value.d_ms }),\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 is-flex-grow-3\">\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\n <div class=\"is-flex-grow-3\">\n <div class=\"field-body \">\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 </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_ms: \"forever\" } as any)}\n >\n <i18n.Translate>forever</i18n.Translate>\n </button>\n </span>\n )}\n {!readonly && !withoutClear && (\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 {side}\n </div>\n <span>\n {help}\n </span>\n </div>\n\n\n {opened && (\n <SimpleModal onCancel={() => setOpened(false)}>\n <DurationPicker\n days\n hours\n minutes\n value={!value || value.d_ms === \"forever\" ? 0 : value.d_ms}\n onChange={(v) => {\n onChange({ d_ms: v } as any);\n }}\n />\n </SimpleModal>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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;\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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: 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 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 has-icons-right\">\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 onChange(fromStr(e.currentTarget.value));\n }}\n >\n {placeholder && <option>{placeholder}</option>}\n {values.map((v, i) => {\n return (\n <option key={i} value={v} selected={value === v}>\n {toStr(v)}\n </option>\n );\n })}\n </select>\n\n {help}\n </p>\n {required && (\n <span class=\"icon has-text-danger is-right\" style={{height: \"2.5em\"}}>\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 InputToggle<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=\"toggle\" style={{ marginLeft: 4, marginTop: 0 }}>\n <input\n type=\"checkbox\"\n class={toBoolean(value) === undefined ? \"is-indeterminate\" : \"toggle-checkbox\"}\n checked={toBoolean(value)}\n placeholder={placeholder}\n readonly={readonly}\n name={String(name)}\n disabled={readonly}\n onChange={onCheckboxClick}\n />\n <div class={`toggle-switch ${readonly ? \"disabled\" : \"\"}`} style={{ cursor: readonly ? \"default\" : undefined }}></div>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 addonAfterAction?: () => void;\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 addonAfterAction,\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\" : \"\"}${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 {children}\n </p>\n {addonAfter && (\n <div class=\"control\" onClick={addonAfterAction} style={{ cursor: addonAfterAction ? \"pointer\" : undefined }}>\n <a class=\"button is-static\">{addonAfter}</a>\n </div>\n )}\n </div>\n {error && <p class=\"help is-danger\">{error}</p>}\n <span class=\"has-text-grey\">{help}</span>\n </div>\n {expand ? <div>{side}</div> : side}\n </div>\n\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 *\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 | undefined): 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { DeleteModal, PurgeModal } from \"../../../components/modal/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport { useBackendInstances } from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { View } from \"./View.js\";\nimport { LoginPage } from \"../../login/index.js\";\n\ninterface Props {\n onCreate: () => void;\n onUpdate: (id: string) => void;\n instances: TalerMerchantApi.Instance[];\n}\n\nexport default function Instances({\n onCreate,\n onUpdate,\n}: Props): VNode {\n const result = useBackendInstances();\n const [deleting, setDeleting] =\n useState<TalerMerchantApi.Instance | null>(null);\n const [purging, setPurging] =\n useState<TalerMerchantApi.Instance | null>(null);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result.case)\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <View\n instances={result.body.instances}\n onDelete={setDeleting}\n onCreate={onCreate}\n onPurge={setPurging}\n onUpdate={onUpdate}\n selected={!!deleting}\n />\n {deleting && (\n <DeleteModal\n element={deleting}\n onCancel={() => setDeleting(null)}\n onConfirm={async (): Promise<void> => {\n if (state.status !== \"loggedIn\") {\n return;\n }\n try {\n await lib.instance.deleteInstance(state.token, 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 if (state.status !== \"loggedIn\") {\n return;\n }\n try {\n await lib.instance.deleteInstance(state.token, purging.id, { purge: true });\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/*\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 { TalerError, TalerErrorCode, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { NotificationCard } from \"./menu/index.js\";\n\n/**\n * equivalent to ErrorLoading for merchant-backoffice which uses notification-card\n * @param param0 \n * @returns \n */\nexport function ErrorLoadingMerchant({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {\n const { i18n } = useTranslationContext()\n switch (error.errorDetail.code) {\n //////////////////\n // Every error that can be produce in a Http Request\n //////////////////\n case TalerErrorCode.GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`The request reached a timeout, check your connection.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`The request was cancelled.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`The request reached a timeout, check your connection.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {\n const { requestMethod, requestUrl, throttleStats } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`A lot of request were made to the same server and this action was throttled.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {\n const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`The response of the request is malformed.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {\n const { requestMethod, requestUrl } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`Could not complete the request due to a network problem.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {\n const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`Unexpected request error.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n //////////////////\n // Every other error \n //////////////////\n // case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n // return <Attention type=\"danger\" title={i18n.str``}>\n // </Attention>\n // }\n //////////////////\n // Default message for unhandled case\n //////////////////\n default: {\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`Unexpected error.`,\n description: error.message,\n details: JSON.stringify(error.errorDetail, undefined, 2)\n }} />\n }\n }\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\n\nexport function revalidateInstanceDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getCurrentInstanceDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceDetails() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([token]: [AccessToken]) {\n return await instance.getCurrentInstanceDetails(token);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getCurrentInstanceDetails\">,\n TalerHttpError\n >([session.token, \"getCurrentInstanceDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateInstanceKYCDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getCurrentIntanceKycStatus\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceKYCDetails() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([token]: [AccessToken]) {\n return await instance.getCurrentIntanceKycStatus(token, {});\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getCurrentIntanceKycStatus\">,\n TalerHttpError\n >([session.token, \"getCurrentIntanceKycStatus\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n\n\n}\n\nexport function revalidateManagedInstanceDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getInstanceDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useManagedInstanceDetails(instanceId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([token, instanceId]: [AccessToken, string]) {\n return await instance.getInstanceDetails(token, instanceId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getInstanceDetails\">,\n TalerHttpError\n >([session.token, instanceId, \"getInstanceDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateBackendInstances() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listInstances\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useBackendInstances() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([token]: [AccessToken]) {\n return await instance.listInstances(token);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listInstances\">,\n TalerHttpError\n >([session.token, \"listInstances\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { CardTable as CardTableActive } from \"./TableActive.js\";\n\ninterface Props {\n instances: TalerMerchantApi.Instance[];\n onCreate: () => void;\n onUpdate: (id: string) => void;\n onDelete: (id: TalerMerchantApi.Instance) => void;\n onPurge: (id: TalerMerchantApi.Instance) => void;\n selected?: boolean;\n}\n\nexport function View({\n instances,\n onCreate,\n onDelete,\n onPurge,\n onUpdate,\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 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { StateUpdater, useEffect, useState } from \"preact/hooks\";\n\ninterface Props {\n instances: TalerMerchantApi.Instance[];\n onUpdate: (id: string) => void;\n onDelete: (id: TalerMerchantApi.Instance) => void;\n onPurge: (id: TalerMerchantApi.Instance) => void;\n onCreate: () => void;\n selected?: boolean;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onUpdate,\n onPurge,\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 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: TalerMerchantApi.Instance[];\n onUpdate: (id: string) => void;\n onDelete: (id: TalerMerchantApi.Instance) => void;\n onPurge: (id: TalerMerchantApi.Instance) => void;\n rowSelectionHandler: StateUpdater<string[]>;\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 instances,\n onUpdate,\n onDelete,\n onPurge,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n // const { lib } = useMerchantApiContext();\n // const { impersonate } = useSessionContext();\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 {/* TODO uncommented to enable impersonate #8604 */}\n {/* <a\n href={`#/orders`}\n onClick={async (e) => {\n e.preventDefault();\n const newInstanceApi = lib.subInstanceApi(i.id);\n //not checking /config since this comes from instance list\n impersonate({\n instance: i.id,\n baseUrl: new URL(newInstanceApi.instance.baseUrl),\n token: undefined,\n });\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-magnify 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: TalerMerchantApi.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: TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../components/menu/index.js\";\nimport { useSessionContext } from \"../../context/session.js\";\nimport { Notification } from \"../../utils/types.js\";\n\ninterface Props {}\n\nconst tokenRequest = {\n scope: \"write\",\n duration: {\n d_us: \"forever\" as const,\n },\n refreshable: true,\n};\n\nexport function LoginPage(_p: Props): VNode {\n const [token, setToken] = useState(\"\");\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { state, logIn, impersonate } = useSessionContext();\n const { lib } = useMerchantApiContext();\n\n const { i18n } = useTranslationContext();\n\n async function doImpersonateImpl(instanceId: string) {\n const newInstanceApi = lib.subInstanceApi(instanceId);\n const cfg = await newInstanceApi.instance.getConfig();\n if (cfg.type !== \"ok\") {\n setNotif({\n message: \"Could not load the configuration of this instance.\",\n description: newInstanceApi.instance.baseUrl,\n type: \"ERROR\",\n });\n return;\n }\n const result = await newInstanceApi.authenticate.createAccessTokenBearer(\n token,\n tokenRequest,\n );\n \n if (result.type === \"ok\") {\n const { token } = result.body;\n impersonate({ instance: instanceId, baseUrl: new URL(newInstanceApi.instance.baseUrl), token });\n return;\n } else {\n switch (result.case) {\n case HttpStatusCode.Unauthorized: {\n setNotif({\n message: \"Your password is incorrect\",\n type: \"ERROR\",\n });\n return;\n }\n case HttpStatusCode.NotFound: {\n setNotif({\n message: \"Your instance not found\",\n type: \"ERROR\",\n });\n return;\n }\n }\n }\n }\n async function doLoginImpl() {\n const result = await lib.authenticate.createAccessTokenBearer(\n token,\n tokenRequest,\n );\n if (result.type === \"ok\") {\n const { token } = result.body;\n logIn({ token });\n return;\n } else {\n switch (result.case) {\n case HttpStatusCode.Unauthorized: {\n setNotif({\n message: \"Your password is incorrect\",\n type: \"ERROR\",\n });\n return;\n }\n case HttpStatusCode.NotFound: {\n setNotif({\n message: \"Your instance not found\",\n type: \"ERROR\",\n });\n return;\n }\n }\n }\n }\n\n if (state.status === \"loggedIn\" && state.impersonate !== undefined) {\n //the user is loggedin but trying to do an impersonation\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 <p>\n <i18n.Translate>\n Need the access token for the instance{\" \"}\n <b>\"{state.instance}\"</b>\n </i18n.Translate>\n </p>\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={\"current access token\"}\n name=\"token\"\n onKeyPress={(e) =>\n e.keyCode === 13\n ? doImpersonateImpl(state.instance)\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 <AsyncButton onClick={() => doImpersonateImpl(state.instance)}>\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </footer>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\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>\n Please enter your access token for <b>\"{state.instance}\"</b>.\n </i18n.Translate>\n\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={\"current access token\"}\n name=\"token\"\n onKeyPress={(e) =>\n e.keyCode === 13 ? doLoginImpl() : 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: \"space-between\",\n border: \"1px solid\",\n borderTop: 0,\n }}\n >\n <div />\n <AsyncButton type=\"is-info\" onClick={doLoginImpl}>\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </footer>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n\nfunction AsyncButton({\n onClick,\n disabled,\n type = \"\",\n children,\n}: {\n type?: string;\n disabled?: boolean;\n onClick: () => Promise<void>;\n children: ComponentChildren;\n}): VNode {\n const [running, setRunning] = useState(false);\n return (\n <button\n class={\"button \" + type}\n disabled={disabled || running}\n onClick={() => {\n setRunning(true);\n onClick()\n .then(() => {\n setRunning(false);\n })\n .catch(() => {\n setRunning(false);\n });\n }}\n >\n {children}\n </button>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 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 </div>\n </div>\n </div>\n </nav>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useSessionContext } from \"../../context/session.js\";\nimport { useInstanceKYCDetails } from \"../../hooks/instance.js\";\nimport { LangSelector } from \"./LangSelector.js\";\nimport { TalerError } from \"@gnu-taler/taler-util\";\n\n// const GIT_HASH = typeof __GIT_HASH__ !== \"undefined\" ? __GIT_HASH__ : undefined;\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : undefined;\n\ninterface Props {\n mobile?: boolean;\n}\n\nexport function Sidebar({ mobile }: Props): VNode {\n const { i18n } = useTranslationContext();\n const kycStatus = useInstanceKYCDetails();\n\n const needKYC =\n kycStatus !== undefined &&\n !(kycStatus instanceof TalerError) &&\n kycStatus.type === \"ok\" &&\n !!kycStatus.body;\n const { state, logOut } = useSessionContext();\n const isLoggedIn = state.status === \"loggedIn\";\n const hasToken = isLoggedIn && state.token !== undefined;\n const { config, url: backendURL } = useMerchantApiContext();\n\n return (\n <aside\n class=\"aside is-placed-left is-expanded\"\n style={{ overflowY: \"scroll\" }}\n >\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 {isLoggedIn ? (\n <Fragment>\n <ul class=\"menu-list\">\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={\"/inventory\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-shopping\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Inventory</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-arrow-left-right\" />\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 {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 <p class=\"menu-label\">\n <i18n.Translate>Configuration</i18n.Translate>\n </p>\n <ul class=\"menu-list\">\n <li>\n <a href={\"/bank\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-bank\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Bank account</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/otp-devices\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-lock\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>OTP Devices</i18n.Translate>\n </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 <li>\n <a href={\"/settings\"} 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={\"/token\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-security\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Access token</i18n.Translate>\n </span>\n </a>\n </li>\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 <a\n class=\"has-icon is-state-info is-hoverable\"\n href=\"/interface\"\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Interface</i18n.Translate>\n </span>\n </a>\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 {backendURL.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\">{state.instance}</span>\n </div>\n </li>\n {state.isAdmin && (\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 {hasToken ? (\n <li>\n <a\n class=\"has-icon is-state-info is-hoverable\"\n onClick={(e): void => {\n logOut();\n e.preventDefault();\n }}\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 ) : undefined}\n </ul>\n </div>\n </aside>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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/*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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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 \"Close\": [\n \"\"\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 acceso 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 \"acceder al token en uso actualmente\"\n ],\n \"New access token\": [\n \"Nuevo token de acceso\"\n ],\n \"next access token to be used\": [\n \"siguiente token de acceso a usar\"\n ],\n \"Repeat access token\": [\n \"Repetir token de acceso\"\n ],\n \"confirm the same access token\": [\n \"confirmar el mismo token de acceso\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"Limpiar el token de acceso significa acceso p\u00FAblico a la instancia\"\n ],\n \"cannot be the same as the old access token\": [\n \"no puede ser igual al anterior token de acceso\"\n ],\n \"You are setting the access token for the new instance\": [\n \"Est\u00E1 estableciendo el token de acceso para la nueva instancia\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"Con el m\u00E9todo de autorizaci\u00F3n externa no se har\u00E1 ninguna revisi\u00F3n por el backend del comerciante\"\n ],\n \"Set external authorization\": [\n \"Establecer autorizaci\u00F3n externa\"\n ],\n \"Set access token\": [\n \"Establecer token de acceso\"\n ],\n \"Operation in progress...\": [\n \"Operaci\u00F3n en progreso...\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"La operaci\u00F3n ser\u00E1 autom\u00E1ticamente cancelada luego de %1$s segundos\"\n ],\n \"Instances\": [\n \"Instancias\"\n ],\n \"Delete\": [\n \"Eliminar\"\n ],\n \"add new instance\": [\n \"agregar nueva instancia\"\n ],\n \"ID\": [\n \"ID\"\n ],\n \"Name\": [\n \"Nombre\"\n ],\n \"Edit\": [\n \"Editar\"\n ],\n \"Purge\": [\n \"Purgar\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"Todav\u00EDa no hay instancias, agregue m\u00E1s presionando el signo +\"\n ],\n \"Only show active instances\": [\n \"Solo mostrar instancias activas\"\n ],\n \"Active\": [\n \"Activo\"\n ],\n \"Only show deleted instances\": [\n \"Mostrar solo instancias eliminadas\"\n ],\n \"Deleted\": [\n \"Eliminado\"\n ],\n \"Show all instances\": [\n \"Mostrar todas las instancias\"\n ],\n \"All\": [\n \"Todo\"\n ],\n \"Instance \\\"%1$s\\\" (ID: %2$s) has been deleted\": [\n \"La instancia '%1$s' (ID: %2$s) fue eliminada\"\n ],\n \"Failed to delete instance\": [\n \"Fallo al eliminar instancia\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"Instance '%1$s' (ID: %2$s) ha sido deshabilitada\"\n ],\n \"Failed to purge instance\": [\n \"Fallo al purgar la instancia\"\n ],\n \"Pending KYC verification\": [\n \"Verificaci\u00F3n KYC pendiente\"\n ],\n \"Timed out\": [\n \"Expirado\"\n ],\n \"Exchange\": [\n \"Exchange\"\n ],\n \"Target account\": [\n \"Cuenta objetivo\"\n ],\n \"KYC URL\": [\n \"URL de KYC\"\n ],\n \"Code\": [\n \"C\u00F3digo\"\n ],\n \"Http Status\": [\n \"Estado http\"\n ],\n \"No pending kyc verification!\": [\n \"\u00A1No hay verificaci\u00F3n kyc pendiente!\"\n ],\n \"change value to unknown date\": [\n \"cambiar valor a fecha desconocida\"\n ],\n \"change value to empty\": [\n \"cambiar valor a vac\u00EDo\"\n ],\n \"clear\": [\n \"limpiar\"\n ],\n \"change value to never\": [\n \"cambiar valor a nunca\"\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 \"buscar productos por su descripci\u00F3n o ID\"\n ],\n \"no products found with that description\": [\n \"no se encontraron productos con esa descripci\u00F3n\"\n ],\n \"You must enter a valid product identifier.\": [\n \"Debe ingresar un identificador de producto v\u00E1lido.\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\u00A1Cantidad debe ser mayor que 0!\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"Esta cantidad excede las existencias restantes. Actualmente, solo quedan %1$s unidades sin reservar en las existencias.\"\n ],\n \"Quantity\": [\n \"Cantidad\"\n ],\n \"how many products will be added\": [\n \"cu\u00E1ntos productos ser\u00E1n agregados\"\n ],\n \"Add from inventory\": [\n \"Agregar del inventario\"\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 \"Ningun impuesto configurado para este producto.\"\n ],\n \"Amount\": [\n \"Monto\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"Impuestos pueden estar en divisas que difieren de la principal divisa usada por el comerciante.\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"Ingrese divisa y valor separado por dos puntos, e.g. &quot;USD:2.3&quot;.\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"Nombre legal del impuesto, e.g. IVA o arancel.\"\n ],\n \"add tax to the tax list\": [\n \"agregar impuesto a la lista de impuestos\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"describa y agregue un producto que no est\u00E1 en la lista de inventarios\"\n ],\n \"Add custom product\": [\n \"Agregue un producto personalizado\"\n ],\n \"Complete information of the product\": [\n \"Complete informaci\u00F3n del producto\"\n ],\n \"Image\": [\n \"Imagen\"\n ],\n \"photo of the product\": [\n \"foto del producto\"\n ],\n \"full product description\": [\n \"descripci\u00F3n completa del producto\"\n ],\n \"Unit\": [\n \"Unidad\"\n ],\n \"name of the product unit\": [\n \"nombre de la unidad del producto\"\n ],\n \"Price\": [\n \"Precio\"\n ],\n \"amount in the current currency\": [\n \"monto de la divisa actual\"\n ],\n \"Taxes\": [\n \"Impuestos\"\n ],\n \"image\": [\n \"imagen\"\n ],\n \"description\": [\n \"descripci\u00F3n\"\n ],\n \"quantity\": [\n \"cantidad\"\n ],\n \"unit price\": [\n \"precio unitario\"\n ],\n \"total price\": [\n \"precio total\"\n ],\n \"required\": [\n \"requerido\"\n ],\n \"not valid\": [\n \"no es un json v\u00E1lido\"\n ],\n \"must be greater than 0\": [\n \"debe ser mayor que 0\"\n ],\n \"not a valid json\": [\n \"no es un json v\u00E1lido\"\n ],\n \"should be in the future\": [\n \"deber\u00EDan ser en el futuro\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"plazo de reembolso no puede ser antes que el plazo de pago\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"el plazo de la transferencia bancaria no puede ser antes que el plazo de reembolso\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"el plazo de la transferencia bancaria no puede ser antes que el plazo de pago\"\n ],\n \"should have a refund deadline\": [\n \"deber\u00EDa tener un plazo de reembolso\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"reembolso autom\u00E1tico no puede ser despu\u00E9s qu el plazo de reembolso\"\n ],\n \"Manage products in order\": [\n \"Manejar productos en orden\"\n ],\n \"Manage list of products in the order.\": [\n \"Manejar lista de productos en la orden.\"\n ],\n \"Remove this product from the order.\": [\n \"Remover este producto de la orden.\"\n ],\n \"Total price\": [\n \"Precio total\"\n ],\n \"total product price added up\": [\n \"precio total de producto agregado\"\n ],\n \"Amount to be paid by the customer\": [\n \"Monto a ser pagado por el cliente\"\n ],\n \"Order price\": [\n \"Precio de la orden\"\n ],\n \"final order price\": [\n \"Precio final de la orden\"\n ],\n \"Summary\": [\n \"Resumen\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"T\u00EDtulo de la orden a ser mostrado al cliente\"\n ],\n \"Shipping and Fulfillment\": [\n \"Env\u00EDo y cumplimiento\"\n ],\n \"Delivery date\": [\n \"Fecha de entrega\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"Plazo para la entrega f\u00EDsica asegurado por el comerciante.\"\n ],\n \"Location\": [\n \"Ubicaci\u00F3n\"\n ],\n \"address where the products will be delivered\": [\n \"direcci\u00F3n a donde los productos ser\u00E1n entregados\"\n ],\n \"Fulfillment URL\": [\n \"URL de cumplimiento\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"URL al cual el usuario ser\u00E1 redirigido luego de pago exitoso.\"\n ],\n \"Taler payment options\": [\n \"Opciones de pago de Taler\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"Sobreescribir pagos por omisi\u00F3n de Taler para esta orden\"\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 \"Plazo l\u00EDmite para que el cliente pague por la oferta antes de que expire. Productos del inventario ser\u00E1n reservados hasta este plazo l\u00EDmite.\"\n ],\n \"Refund deadline\": [\n \"Plazo de reembolso\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"Tiempo hasta el cual la orden puede ser reembolsada por el comerciante.\"\n ],\n \"Wire transfer deadline\": [\n \"Plazo de la transferencia\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"Plazo para que el exchange haga la transferencia.\"\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 \"Tiempo hasta el cual la billetera ser\u00E1 autom\u00E1ticamente revisada por reembolsos win interaci\u00F3n por parte del usuario.\"\n ],\n \"Maximum deposit fee\": [\n \"M\u00E1xima tarifa de dep\u00F3sito\"\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 \"M\u00E1xima tarifa de dep\u00F3sito que el comerciante esta dispuesto a cubir para esta orden. Mayores tarifas de dep\u00F3sito deben ser cubiertas completamente por el consumidor.\"\n ],\n \"Maximum wire fee\": [\n \"M\u00E1xima tarifa de transferencia\"\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 \"d\u00EDas\"\n ],\n \"hours\": [\n \"horas\"\n ],\n \"minutes\": [\n \"minutos\"\n ],\n \"seconds\": [\n \"segundos\"\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 \"\u00A1No se encontraron \u00F3rdenes que emparejen su b\u00FAsqueda!\"\n ],\n \"duplicated\": [\n \"duplicado\"\n ],\n \"invalid format\": [\n \"formato inv\u00E1lido\"\n ],\n \"this value exceed the refundable amount\": [\n \"este monto excede el monto reembolsable\"\n ],\n \"date\": [\n \"fecha\"\n ],\n \"amount\": [\n \"monto\"\n ],\n \"reason\": [\n \"raz\u00F3n\"\n ],\n \"amount to be refunded\": [\n \"monto a ser reembolsado\"\n ],\n \"Max refundable:\": [\n \"M\u00E1ximo reembolzable:\"\n ],\n \"Reason\": [\n \"Raz\u00F3n\"\n ],\n \"Choose one...\": [\n \"Elija uno...\"\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 \"por qu\u00E9 esta orden est\u00E1 siendo reembolsada\"\n ],\n \"more information to give context\": [\n \"m\u00E1s informaci\u00F3n para dar contexto\"\n ],\n \"Contract Terms\": [\n \"T\u00E9rminos de contrato\"\n ],\n \"human-readable description of the whole purchase\": [\n \"descripci\u00F3n legible de toda la compra\"\n ],\n \"total price for the transaction\": [\n \"precio total de la transacci\u00F3n\"\n ],\n \"URL for this purchase\": [\n \"URL para esta compra\"\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 en\"\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 \"Gratis\"\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 \"Siguiente\"\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 \"V\u00E1lido hasta\"\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 \"Asunto\"\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"Estado de orden\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"precio unitario\"\n ],\n \"If specified, this template will create order with the same price\": [\n \"\"\n ],\n \"Minimum age\": [\n \"Edad m\u00EDnima\"\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\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 \"New order for template\": [\n \"cargar viejas transferencias\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"Estado de orden\"\n ],\n \"could not create order from template\": [\n \"No se pudo create el reembolso\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"Monto reembolzado\"\n ],\n \"Default amount\": [\n \"Monto reembolzado\"\n ],\n \"Default summary\": [\n \"Estado de orden\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"cargar nuevas transferencias\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"create qr code for the template\": [\n \"No se pudo create el reembolso\"\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 \"URL\"\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 \"eliminar transferencia seleccionada de la base de datos\"\n ],\n \"load more transfer after the last one\": [\n \"cargue m\u00E1s transferencia luego de la \u00FAltima\"\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 \"debe ser 1 o mayor\"\n ],\n \"max 7 lines\": [\n \"m\u00E1ximo 7 l\u00EDneas\"\n ],\n \"change authorization configuration\": [\n \"cambiar configuraci\u00F3n de autorizaci\u00F3n\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"Necesita completar campos marcados y escoger un m\u00E9todo de autorizaci\u00F3n\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"Esta no es una direcci\u00F3n de bitcoin v\u00E1lida.\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"Esta no es una direcci\u00F3n de Ethereum v\u00E1lida.\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"N\u00FAmeros IBAN usualmente tienen m\u00E1s de 4 d\u00EDgitos\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"N\u00FAmero IBAN usualmente tienen menos de 34 d\u00EDgitos\"\n ],\n \"IBAN country code not found\": [\n \"C\u00F3digo IBAN de pa\u00EDs no encontrado\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"N\u00FAmero IBAN no es v\u00E1lido, la suma de verificaci\u00F3n es incorrecta\"\n ],\n \"Target type\": [\n \"Tipo objetivo\"\n ],\n \"Method to use for wire transfer\": [\n \"M\u00E9todo a usar para la transferencia\"\n ],\n \"Routing\": [\n \"Enrutamiento\"\n ],\n \"Routing number.\": [\n \"N\u00FAmero de enrutamiento.\"\n ],\n \"Account\": [\n \"Cuenta\"\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 \"Interfaz de pago unificado.\"\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 \"URL de sitio web\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"Cuenta bancaria\"\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 \"Jurisdicci\u00F3n para disputas legales con el comerciante.\"\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 \"ID de instancia\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"Limpiar el token de autorizaci\u00F3n significa acceso p\u00FAblico a la instancia\"\n ],\n \"Manage access token\": [\n \"Administrar token de acceso\"\n ],\n \"Failed to create instance\": [\n \"Fallo al 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 \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"Recibimos el mensaje %1$s desde %2$s\"\n ],\n \"Response from server is unreadable, http status: %1$s\": [\n \"\"\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 \"agregar elemento a la lista\"\n ],\n \"add\": [\n \"Agregar\"\n ],\n \"Deleting\": [\n \"Borrando\"\n ],\n \"Changing\": [\n \"Cambiando\"\n ],\n \"Order ID\": [\n \"ID de pedido\"\n ],\n \"Payment URL\": [\n \"URL 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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\nimport { useState } from \"preact/hooks\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface InstanceBankAccountFilter {\n}\n\nexport function revalidateInstanceBankAccounts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listBankAccounts\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceBankAccounts() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n // const [offset, setOffset] = useState<string | undefined>();\n\n async function fetcher([token, bid]: [AccessToken, string]) {\n return await instance.listBankAccounts(token, {\n // limit: PAGINATED_LIST_REQUEST,\n // offset: bid,\n // order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listBankAccounts\">,\n TalerHttpError\n >([session.token, \"offset\", \"listBankAccounts\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n // return buildPaginatedResult(data.body.accounts, offset, setOffset, (d) => d.h_wire)\n return data;\n}\n\nexport function revalidateBankAccountDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getBankAccountDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useBankAccountDetails(h_wire: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([token, wireId]: [AccessToken, string]) {\n return await instance.getBankAccountDetails(token, wireId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getBankAccountDetails\">,\n TalerHttpError\n >([session.token, h_wire, \"getBankAccountDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Codec,\n buildCodecForObject,\n codecForAbsoluteTime,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n} from \"@gnu-taler/taler-util\";\nimport { buildStorageKey, useLocalStorage } from \"@gnu-taler/web-util/browser\";\n\nexport interface Preferences {\n advanceOrderMode: boolean;\n hideKycUntil: AbsoluteTime;\n hideMissingAccountUntil: AbsoluteTime;\n dateFormat: \"ymd\" | \"dmy\" | \"mdy\";\n}\n\nconst defaultSettings: Preferences = {\n advanceOrderMode: false,\n hideKycUntil: AbsoluteTime.never(),\n hideMissingAccountUntil: AbsoluteTime.never(),\n dateFormat: \"ymd\",\n};\n\nexport const codecForPreferences = (): Codec<Preferences> =>\n buildCodecForObject<Preferences>()\n .property(\"advanceOrderMode\", codecForBoolean())\n .property(\"hideKycUntil\", codecForAbsoluteTime)\n .property(\"hideMissingAccountUntil\", codecForAbsoluteTime)\n .property(\n \"dateFormat\",\n codecForEither(\n codecForConstString(\"ymd\"),\n codecForConstString(\"dmy\"),\n codecForConstString(\"mdy\"),\n ),\n )\n .build(\"Preferences\");\n\nconst PREFERENCES_KEY = buildStorageKey(\n \"merchant-preferences\",\n codecForPreferences(),\n);\n\nexport function usePreference(): [\n Readonly<Preferences>,\n <T extends keyof Preferences>(key: T, value: Preferences[T]) => void,\n (s: Preferences) => void,\n] {\n const { value, update } = useLocalStorage(PREFERENCES_KEY, defaultSettings);\n function updateField<T extends keyof Preferences>(k: T, v: Preferences[T]) {\n const newValue = { ...value, [k]: v };\n update(newValue);\n }\n\n return [value, updateField, update];\n}\n\nexport function dateFormatForSettings(s: Preferences): string {\n switch (s.dateFormat) {\n case \"ymd\":\n return \"yyyy/MM/dd\";\n case \"dmy\":\n return \"dd/MM/yyyy\";\n case \"mdy\":\n return \"MM/dd/yyyy\";\n }\n}\n\nexport function datetimeFormatForSettings(s: Preferences): string {\n return dateFormatForSettings(s) + \" HH:mm:ss\";\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 FacadeCredentials,\n HttpStatusCode,\n OperationFail,\n OperationOk,\n TalerError,\n TalerMerchantApi,\n TalerRevenueHttpClient,\n assertUnreachable,\n opFixedSuccess,\n} from \"@gnu-taler/taler-util\";\nimport {\n BrowserFetchHttpLib,\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\nexport type Entity = TalerMerchantApi.AccountAddDetails;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateValidator({ onConfirm, onBack }: Props): VNode {\n const { lib: api } = useMerchantApiContext();\n const { state } = useSessionContext();\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={async (request: Entity) => {\n const revenueAPI = !request.credit_facade_url\n ? undefined\n : new URL(\"./\", request.credit_facade_url);\n\n if (revenueAPI) {\n const resp = await testRevenueAPI(\n revenueAPI,\n request.credit_facade_credentials,\n );\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case TestRevenueErrorType.NO_CONFIG: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`,\n });\n return;\n }\n case TestRevenueErrorType.CLIENT_BAD_REQUEST: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Server replied with \"bad request\".`,\n });\n return;\n }\n case TestRevenueErrorType.UNAUTHORIZED: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Unauthorized, try with another credentials.`,\n });\n return;\n }\n case TestRevenueErrorType.NOT_FOUND: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Check facade URL, server replied with \"not found\".`,\n });\n return;\n }\n case TestRevenueErrorType.GENERIC_ERROR: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: resp.detail.hint,\n });\n return;\n }\n default: {\n assertUnreachable(resp.case);\n }\n }\n }\n }\n\n return api.instance\n .addBankAccount(state.token, request)\n .then(() => {\n onConfirm();\n })\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create account`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n\nexport enum TestRevenueErrorType {\n NO_CONFIG,\n CLIENT_BAD_REQUEST,\n UNAUTHORIZED,\n NOT_FOUND,\n GENERIC_ERROR,\n}\n\nexport async function testRevenueAPI(\n revenueAPI: URL,\n creds: FacadeCredentials | undefined,\n): Promise<OperationOk<void> | OperationFail<TestRevenueErrorType>> {\n const api = new TalerRevenueHttpClient(\n revenueAPI.href,\n new BrowserFetchHttpLib(),\n );\n const auth =\n creds === undefined\n ? undefined\n : creds.type === \"none\"\n ? undefined\n : creds.type === \"basic\"\n ? {\n username: creds.username,\n password: creds.password,\n }\n : undefined;\n\n try {\n const config = await api.getConfig(auth);\n\n if (config.type === \"fail\") {\n switch (config.case) {\n case HttpStatusCode.Unauthorized: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.UNAUTHORIZED,\n detail: {\n code: 1,\n },\n };\n }\n case HttpStatusCode.NotFound: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.NO_CONFIG,\n detail: {\n code: 1,\n },\n };\n }\n }\n }\n\n const history = await api.getHistory(auth);\n\n if (history.type === \"fail\") {\n switch (history.case) {\n case HttpStatusCode.BadRequest: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.CLIENT_BAD_REQUEST,\n detail: {\n code: 1,\n },\n };\n }\n case HttpStatusCode.Unauthorized: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.UNAUTHORIZED,\n detail: {\n code: 1,\n },\n };\n }\n case HttpStatusCode.NotFound: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.NOT_FOUND,\n detail: {\n code: 1,\n },\n };\n }\n }\n }\n } catch (err) {\n if (err instanceof TalerError) {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.GENERIC_ERROR,\n detail: err.errorDetail,\n };\n }\n }\n\n return opFixedSuccess(undefined);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, 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 { InputPaytoForm } from \"../../../../components/form/InputPaytoForm.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\nimport { safeConvertURL } from \"../update/UpdatePage.js\";\n\ntype Entity = TalerMerchantApi.AccountAddDetails & { repeatPassword: string };\n\ninterface Props {\n onCreate: (d: TalerMerchantApi.AccountAddDetails) => Promise<void>;\n onBack?: () => void;\n}\n\nconst accountAuthType = [\"none\", \"basic\"];\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>({});\n const facadeURL = safeConvertURL(state.credit_facade_url);\n const errors: FormErrors<Entity> = {\n payto_uri: !state.payto_uri ? i18n.str`required` : undefined,\n\n credit_facade_credentials: !state.credit_facade_credentials\n ? undefined\n : undefinedIfEmpty({\n username:\n state.credit_facade_credentials.type === \"basic\" &&\n !state.credit_facade_credentials.username\n ? i18n.str`required`\n : undefined,\n password:\n state.credit_facade_credentials.type === \"basic\" &&\n !state.credit_facade_credentials.password\n ? i18n.str`required`\n : undefined,\n }),\n credit_facade_url: !state.credit_facade_url\n ? undefined\n : !facadeURL\n ? i18n.str`Invalid url`\n : !facadeURL.href.endsWith(\"/\")\n ? i18n.str`URL should end with a '/'`\n : facadeURL.searchParams.size > 0\n ? i18n.str`URL should not contain params`\n : facadeURL.hash\n ? i18n.str`URL should not hash param`\n : undefined,\n repeatPassword: !state.credit_facade_credentials\n ? undefined\n : state.credit_facade_credentials.type === \"basic\" &&\n (!state.credit_facade_credentials.password ||\n state.credit_facade_credentials.password !== state.repeatPassword)\n ? i18n.str`is not the same`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as Record<string, unknown>)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n const credit_facade_url = !state.credit_facade_url\n ? undefined\n : facadeURL?.href;\n const credit_facade_credentials:\n | TalerMerchantApi.FacadeCredentials\n | undefined =\n credit_facade_url == undefined\n ? undefined\n : state.credit_facade_credentials?.type === \"basic\"\n ? {\n type: \"basic\",\n password: state.credit_facade_credentials.password,\n username: state.credit_facade_credentials.username,\n }\n : {\n type: \"none\",\n };\n\n return onCreate({\n payto_uri: state.payto_uri!,\n credit_facade_credentials,\n credit_facade_url,\n });\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 <InputPaytoForm<Entity>\n name=\"payto_uri\"\n label={i18n.str`Account`}\n />\n <Input<Entity>\n name=\"credit_facade_url\"\n label={i18n.str`Account info URL`}\n help=\"https://bank.com\"\n expand\n tooltip={i18n.str`From where the merchant can download information about incoming wire transfers to this account`}\n />\n <InputSelector\n name=\"credit_facade_credentials.type\"\n label={i18n.str`Auth type`}\n tooltip={i18n.str`Choose the authentication type for the account info URL`}\n values={accountAuthType}\n toStr={(str) => {\n if (str === \"none\") return \"Without authentication\";\n return \"Username and password\";\n }}\n />\n {state.credit_facade_credentials?.type === \"basic\" ? (\n <Fragment>\n <Input\n name=\"credit_facade_credentials.username\"\n label={i18n.str`Username`}\n tooltip={i18n.str`Username to access the account information.`}\n />\n <Input\n name=\"credit_facade_credentials.password\"\n inputType=\"password\"\n label={i18n.str`Password`}\n tooltip={i18n.str`Password to access the account information.`}\n />\n <Input\n name=\"repeatPassword\"\n inputType=\"password\"\n label={i18n.str`Repeat password`}\n />\n </Fragment>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { parsePaytoUri, PaytoUriGeneric, stringifyPaytoUri } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\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\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nexport interface Props<T> extends InputProps<T> {\n isValid?: (e: any) => boolean;\n}\n\n// type Entity = PaytoUriGeneric\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 // params of the payto uri\n params: {\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: Entity = {\n target: noTargetValue,\n params: {},\n};\n\nexport function InputPaytoForm<T>({\n name,\n readonly,\n label,\n tooltip,\n}: Props<keyof T>): VNode {\n const { value: initialValueStr, onChange } = useField<T>(name);\n\n const initialPayto = parsePaytoUri(initialValueStr ?? \"\")\n const paths = !initialPayto ? [] : initialPayto.targetPath.split(\"/\")\n const initialPath1 = paths.length >= 1 ? paths[0] : undefined;\n const initialPath2 = paths.length >= 2 ? paths[1] : undefined;\n const initial: Entity = initialPayto === undefined ? defaultTarget : {\n target: initialPayto.targetType,\n params: initialPayto.params,\n path1: initialPath1,\n path2: initialPath2,\n }\n const [value, setValue] = useState<Partial<Entity>>(initial)\n\n const { i18n } = useTranslationContext();\n\n const errors: FormErrors<Entity> = {\n target:\n value.target === noTargetValue\n ? i18n.str`required`\n : 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 params: undefinedIfEmpty({\n \"receiver-name\": !value.params?.[\"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 const str = hasErrors || !value.target ? undefined : stringifyPaytoUri({\n targetType: value.target,\n targetPath: value.path2 ? `${value.path1}/${value.path2}` : (value.path1 ?? \"\"),\n params: value.params ?? {} as any,\n isKnown: false,\n })\n useEffect(() => {\n onChange(str as any)\n }, [str])\n\n // const submit = useCallback((): void => {\n // // const accounts: TalerMerchantApi.AccountAddDetails[] = paytos;\n // // const alreadyExists =\n // // accounts.findIndex((x) => x.payto_uri === paytoURL) !== -1;\n // // if (!alreadyExists) {\n // const newValue: TalerMerchantApi.AccountAddDetails = {\n // payto_uri: paytoURL,\n // };\n // if (value.auth) {\n // if (value.auth.url) {\n // newValue.credit_facade_url = value.auth.url;\n // }\n // if (value.auth.type === \"none\") {\n // newValue.credit_facade_credentials = {\n // type: \"none\",\n // };\n // }\n // if (value.auth.type === \"basic\") {\n // newValue.credit_facade_credentials = {\n // type: \"basic\",\n // username: value.auth.username ?? \"\",\n // password: value.auth.password ?? \"\",\n // };\n // }\n // }\n // onChange(newValue 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={setValue}\n >\n <InputSelector<Entity>\n name=\"target\"\n label={i18n.str`Account type`}\n tooltip={i18n.str`Method to use for wire transfer`}\n values={targets}\n readonly={readonly}\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 readonly={readonly}\n tooltip={i18n.str`Routing number.`}\n />\n <Input<Entity>\n name=\"path2\"\n label={i18n.str`Account`}\n readonly={readonly}\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 readonly={readonly}\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`IBAN`}\n tooltip={i18n.str`International Bank Account Number.`}\n readonly={readonly}\n placeholder=\"DE1231231231\"\n inputExtra={{ style: { textTransform: \"uppercase\" } }}\n />\n </Fragment>\n )}\n {value.target === \"upi\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n readonly={readonly}\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 readonly={readonly}\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 readonly={readonly}\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 readonly={readonly}\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 readonly={readonly}\n label={i18n.str`Host`}\n tooltip={i18n.str`Bank host.`}\n />\n <Input<Entity>\n name=\"path2\"\n readonly={readonly}\n label={i18n.str`Account`}\n tooltip={i18n.str`Bank account.`}\n />\n </Fragment>\n )}\n\n {/**\n * Show additional fields apart from the payto\n */}\n {value.target !== noTargetValue && (\n <Fragment>\n <Input\n name=\"params.receiver-name\"\n readonly={readonly}\n label={i18n.str`Owner's name`}\n tooltip={i18n.str`Legal name of the person holding the account.`}\n />\n </Fragment>\n )}\n\n </FormProvider>\n </InputGroup>\n );\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, 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 { InputPaytoForm } from \"../../../../components/form/InputPaytoForm.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ntype Entity = TalerMerchantApi.BankAccountEntry & WithId;\n\nconst accountAuthType = [\"unedit\", \"none\", \"basic\"];\ninterface Props {\n onUpdate: (d: TalerMerchantApi.AccountPatchDetails) => Promise<void>;\n onBack?: () => void;\n account: Entity;\n}\n\nexport function UpdatePage({ account, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] =\n useState<Partial<TalerMerchantApi.AccountPatchDetails>>(account);\n\n // @ts-expect-error \"unedit\" is fine since is part of the accountAuthType values\n if (state.credit_facade_credentials?.type === \"unedit\") {\n // we use this to set creds to undefined but server don't get this type\n state.credit_facade_credentials = undefined;\n }\n\n const facadeURL = safeConvertURL(state.credit_facade_url);\n\n const errors: FormErrors<TalerMerchantApi.AccountPatchDetails> = {\n credit_facade_url: !state.credit_facade_url\n ? undefined\n : !facadeURL\n ? i18n.str`Invalid url`\n : !facadeURL.href.endsWith(\"/\")\n ? i18n.str`URL should end with a '/'`\n : facadeURL.searchParams.size > 0\n ? i18n.str`URL should not contain params`\n : facadeURL.hash\n ? i18n.str`URL should not hash param`\n : undefined,\n credit_facade_credentials: undefinedIfEmpty({\n username:\n state.credit_facade_credentials?.type !== \"basic\"\n ? undefined\n : !state.credit_facade_credentials.username\n ? i18n.str`required`\n : undefined,\n\n password:\n state.credit_facade_credentials?.type !== \"basic\"\n ? undefined\n : !state.credit_facade_credentials.password\n ? i18n.str`required`\n : undefined,\n\n repeatPassword:\n state.credit_facade_credentials?.type !== \"basic\"\n ? undefined\n : !(state.credit_facade_credentials as any).repeatPassword\n ? i18n.str`required`\n : (state.credit_facade_credentials as any).repeatPassword !==\n state.credit_facade_credentials.password\n ? i18n.str`doesn't match`\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 const credit_facade_url = !state.credit_facade_url\n ? undefined\n : facadeURL?.href;\n\n const credit_facade_credentials:\n | TalerMerchantApi.FacadeCredentials\n | undefined =\n credit_facade_url == undefined ||\n state.credit_facade_credentials === undefined\n ? undefined\n : state.credit_facade_credentials.type === \"basic\"\n ? {\n type: \"basic\",\n password: state.credit_facade_credentials.password,\n username: state.credit_facade_credentials.username,\n }\n : {\n type: \"none\",\n };\n\n return onUpdate({ credit_facade_credentials, credit_facade_url });\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 Account: <b>{account.id.substring(0, 8)}...</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 <InputPaytoForm<Entity>\n name=\"payto_uri\"\n label={i18n.str`Account`}\n readonly\n />\n <Input<Entity>\n name=\"credit_facade_url\"\n label={i18n.str`Account info URL`}\n help=\"https://bank.com\"\n expand\n tooltip={i18n.str`From where the merchant can download information about incoming wire transfers to this account`}\n />\n <InputSelector\n name=\"credit_facade_credentials.type\"\n label={i18n.str`Auth type`}\n tooltip={i18n.str`Choose the authentication type for the account info URL`}\n values={accountAuthType}\n toStr={(str) => {\n if (str === \"none\") return \"Without authentication\";\n if (str === \"basic\") return \"With authentication\";\n return \"Do not change\";\n }}\n />\n {state.credit_facade_credentials?.type === \"basic\" ? (\n <Fragment>\n <Input\n name=\"credit_facade_credentials.username\"\n label={i18n.str`Username`}\n tooltip={i18n.str`Username to access the account information.`}\n />\n <Input\n name=\"credit_facade_credentials.password\"\n inputType=\"password\"\n label={i18n.str`Password`}\n tooltip={i18n.str`Password to access the account information.`}\n />\n <Input\n name=\"credit_facade_credentials.repeatPassword\"\n inputType=\"password\"\n label={i18n.str`Repeat password`}\n />\n </Fragment>\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//TODO: move to utils\nexport function safeConvertURL(s?: string): URL | undefined {\n if (!s) return 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceBankAccounts } from \"../../../../hooks/bank.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\ninterface Props {\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\n\nexport default function ListOtpDevices({\n onCreate,\n onSelect,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib: api } = useMerchantApiContext();\n const { state } = useSessionContext();\n const result = useInstanceBankAccounts();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n {result.body.accounts.length < 1 &&\n <NotificationCard notification={{\n type: \"WARN\",\n message: i18n.str`You need to associate a bank account to receive revenue.`,\n description: i18n.str`Without this the merchant backend will refuse to create new orders.`\n }} />\n }\n <ListPage\n devices={result.body.accounts}\n // onLoadMoreBefore={\n // result.isFirstPage ? undefined: result.loadFirst\n // }\n // onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.h_wire);\n }}\n onDelete={(e: TalerMerchantApi.BankAccountSummaryEntry) => {\n return api.instance.deleteBankAccount(state.token, e.h_wire)\n .then(() =>\n setNotif({\n message: i18n.str`bank account delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the bank account`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n }\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { Link, route } from \"preact-router\";\nimport { NotificationCard } from \"../../components/menu/index.js\";\nimport {\n DEFAULT_ADMIN_USERNAME,\n useSessionContext,\n} from \"../../context/session.js\";\nimport InstanceCreatePage from \"../../paths/admin/create/index.js\";\nimport { InstancePaths } from \"../../Routing.js\";\n\nexport function NotFoundPage(): VNode {\n return (\n <div>\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\nexport function NotFoundPageOrAdminCreate(): VNode {\n const { state } = useSessionContext();\n const { i18n } = useTranslationContext();\n if (state.isAdmin && state.instance === DEFAULT_ADMIN_USERNAME) {\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_ADMIN_USERNAME}\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n />\n </Fragment>\n );\n }\n\n return <NotFoundPage />\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n devices: TalerMerchantApi.BankAccountSummaryEntry[];\n // onLoadMoreBefore?: () => void;\n // onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: TalerMerchantApi.BankAccountSummaryEntry) => void;\n onSelect: (e: TalerMerchantApi.BankAccountSummaryEntry) => void;\n}\n\nexport function ListPage({\n devices,\n onCreate,\n onDelete,\n onSelect,\n // onLoadMoreBefore,\n // onLoadMoreAfter,\n}: Props): VNode {\n\n return (\n <section class=\"section is-main-section\">\n <CardTable\n accounts={devices.map((o) => ({\n ...o,\n id: String(o.h_wire),\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { parsePaytoUri, PaytoType, PaytoUri, PaytoUriBitcoin, PaytoUriIBAN, PaytoUriTalerBank, PaytoUriUnknown, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\n\ntype Entity = TalerMerchantApi.BankAccountSummaryEntry;\n\ninterface Props {\n accounts: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onCreate: () => void;\n}\n\nexport function CardTable({\n accounts,\n onCreate,\n onDelete,\n onSelect,\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>Bank accounts</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 accounts`}\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 {accounts.length > 0 ? (\n <Table\n accounts={accounts}\n onDelete={onDelete}\n onSelect={onSelect}\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 accounts: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n}\n\nfunction Table({\n accounts,\n onDelete,\n onSelect,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const emptyList: Record<PaytoType | \"unknown\", { parsed: PaytoUri, acc: Entity }[]> = { \"bitcoin\": [], \"x-taler-bank\": [], \"iban\": [], \"unknown\": [], }\n const accountsByType = accounts.reduce((prev, acc) => {\n const parsed = parsePaytoUri(acc.payto_uri)\n if (!parsed) return prev //skip\n if (parsed.targetType !== \"bitcoin\" && parsed.targetType !== \"x-taler-bank\" && parsed.targetType !== \"iban\") {\n prev[\"unknown\"].push({ parsed, acc })\n } else {\n prev[parsed.targetType].push({ parsed, acc })\n }\n return prev\n }, emptyList)\n\n const bitcoinAccounts = accountsByType[\"bitcoin\"]\n const talerbankAccounts = accountsByType[\"x-taler-bank\"]\n const ibanAccounts = accountsByType[\"iban\"]\n const unkownAccounts = accountsByType[\"unknown\"]\n\n\n return (\n <Fragment>\n\n {bitcoinAccounts.length > 0 && <div class=\"table-container\">\n <p class=\"card-header-title\"><i18n.Translate>Bitcoin type accounts</i18n.Translate></p>\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Address</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sewgit 1</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sewgit 2</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {bitcoinAccounts.map(({ parsed, acc }, idx) => {\n const ac = parsed as PaytoUriBitcoin\n return (\n <tr key={idx}>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.targetPath}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.segwitAddrs[0]}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.segwitAddrs[1]}\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 accounts from the database`}\n onClick={() => onDelete(acc)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>}\n\n\n\n {talerbankAccounts.length > 0 && <div class=\"table-container\">\n <p class=\"card-header-title\"><i18n.Translate>Taler type accounts</i18n.Translate></p>\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Host</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Account name</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {talerbankAccounts.map(({ parsed, acc }, idx) => {\n const ac = parsed as PaytoUriTalerBank\n return (\n <tr key={idx}>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.host}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.account}\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 accounts from the database`}\n onClick={() => onDelete(acc)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>}\n\n {ibanAccounts.length > 0 && <div class=\"table-container\">\n <p class=\"card-header-title\"><i18n.Translate>IBAN type accounts</i18n.Translate></p>\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Account name</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>IBAN</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>BIC</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {ibanAccounts.map(({ parsed, acc }, idx) => {\n const ac = parsed as PaytoUriIBAN\n return (\n <tr key={idx}>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.params[\"receiver-name\"]}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.iban}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.bic ?? \"\"}\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 accounts from the database`}\n onClick={() => onDelete(acc)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>}\n\n {unkownAccounts.length > 0 && <div class=\"table-container\">\n <p class=\"card-header-title\"><i18n.Translate>Other type accounts</i18n.Translate></p>\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Type</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Path</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {unkownAccounts.map(({ parsed, acc }, idx) => {\n const ac = parsed as PaytoUriUnknown\n return (\n <tr key={idx}>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.targetType}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.targetPath}\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 accounts from the database`}\n onClick={() => onDelete(acc)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>}\n </Fragment>\n\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-magnify mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no accounts 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useBankAccountDetails } from \"../../../../hooks/bank.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\nimport { TestRevenueErrorType, testRevenueAPI } from \"../create/index.js\";\n\nexport type Entity = TalerMerchantApi.AccountPatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n bid: string;\n}\nexport default function UpdateValidator({\n bid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const { lib: api } = useMerchantApiContext();\n const { state } = useSessionContext();\n const result = useBankAccountDetails(bid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n account={{ ...result.body, id: bid }}\n onBack={onBack}\n onUpdate={async (request) => {\n const revenueAPI = !request.credit_facade_url\n ? undefined\n : new URL(\"./\", request.credit_facade_url);\n\n if (revenueAPI) {\n const resp = await testRevenueAPI(\n revenueAPI,\n request.credit_facade_credentials,\n );\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case TestRevenueErrorType.NO_CONFIG: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`,\n });\n return;\n }\n case TestRevenueErrorType.CLIENT_BAD_REQUEST: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Server replied with \"bad request\".`,\n });\n return;\n }\n case TestRevenueErrorType.UNAUTHORIZED: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Unauthorized, try with another credentials.`,\n });\n return;\n }\n case TestRevenueErrorType.NOT_FOUND: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Check facade URL, server replied with \"not found\".`,\n });\n return;\n }\n case TestRevenueErrorType.GENERIC_ERROR: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: resp.detail.hint,\n });\n return;\n }\n default: {\n assertUnreachable(resp.case)\n }\n }\n }\n }\n return api.instance.updateBankAccount(state.token, bid, request)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: i18n.str`could not update account`,\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { useInstanceKYCDetails } from \"../../../../hooks/instance.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n}\n\nexport default function ListKYC(_p: Props): VNode {\n const result = useInstanceKYCDetails();\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n /**\n * This component just render known kyc requirements.\n * If query fail then is safe to hide errors.\n */\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.GatewayTimeout: {\n return <div />\n }\n case HttpStatusCode.BadGateway: {\n const status = result.body;\n\n if (!status) {\n return <div>no kyc required</div>;\n }\n return <ListPage status={status} />;\n\n }\n case HttpStatusCode.ServiceUnavailable: {\n return <div />\n }\n case HttpStatusCode.Unauthorized: {\n return <div />\n }\n case HttpStatusCode.NotFound: {\n return <div />;\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n const status = result.body;\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\n\nexport interface Props {\n status: TalerMerchantApi.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: TalerMerchantApi.MerchantAccountKycRedirect[];\n}\n\ninterface TimedOutTableProps {\n entries: TalerMerchantApi.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>Reason</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {entries.map((e, i) => {\n if (e.kyc_url === undefined) {\n // blocked by AML\n return (\n <tr key={i}>\n <td>{e.exchange_url}</td>\n <td>{e.payto_uri}</td>\n <td>\n {e.aml_status === 1 ? (\n <i18n.Translate>\n There is an anti-money laundering process pending to\n complete.\n </i18n.Translate>\n ) : (\n <i18n.Translate>\n The account is frozen due to the anti-money laundering\n rules. Contact the exchange service provider for further\n instructions.\n </i18n.Translate>\n )}\n </td>\n </tr>\n );\n } else {\n // blocked by KYC\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 <i18n.Translate>\n Pending KYC process, click here to complete\n </i18n.Translate>\n </a>\n </td>\n </tr>\n );\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { useMerchantApiContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceDetails } from \"../../../../hooks/instance.js\";\nimport { useInstanceProducts } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport type Entity = {\n request: TalerMerchantApi.PostOrderRequest;\n response: TalerMerchantApi.PostOrderResponse;\n};\ninterface Props {\n onBack?: () => void;\n onConfirm: (id: string) => void;\n}\nexport default function OrderCreate({\n onConfirm,\n onBack,\n}: Props): VNode {\n const { lib } = useMerchantApiContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { state } = useSessionContext();\n const detailsResult = useInstanceDetails();\n const inventoryResult = useInstanceProducts();\n\n if (!detailsResult) return <Loading />\n if (detailsResult instanceof TalerError) {\n return <ErrorLoadingMerchant error={detailsResult} />\n }\n if (detailsResult.type === \"fail\") {\n switch (detailsResult.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n default: {\n assertUnreachable(detailsResult);\n }\n }\n }\n if (!inventoryResult) return <Loading />\n if (inventoryResult instanceof TalerError) {\n return <ErrorLoadingMerchant error={inventoryResult} />\n }\n if (inventoryResult.type === \"fail\") {\n switch (inventoryResult.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(inventoryResult);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <CreatePage\n onBack={onBack}\n onCreate={(request: TalerMerchantApi.PostOrderRequest) => {\n lib.instance.createOrder(state.token, request)\n .then((r) => {\n if (r.type === \"ok\") {\n return onConfirm(r.body.order_id)\n } else {\n setNotif({\n message: \"could not create order\",\n type: \"ERROR\",\n });\n }\n })\n .catch((error) => {\n setNotif({\n message: \"could not create order\",\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n instanceConfig={detailsResult.body}\n instanceInventory={inventoryResult.body}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, OperationOk, TalerHttpError, TalerMerchantApi, TalerMerchantManagementErrorsByMethod, TalerMerchantManagementResultByMethod, opFixedSuccess } from \"@gnu-taler/taler-util\";\nimport { useState } from \"preact/hooks\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\ntype ProductWithId = TalerMerchantApi.ProductDetail & { id: string, serial: number };\nfunction notUndefined(c: ProductWithId | undefined): c is ProductWithId {\n return c !== undefined;\n}\n\nexport function revalidateInstanceProducts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listProductsWithId\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceProducts() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n const [offset, setOffset] = useState<number | undefined>();\n\n async function fetcher([token, bid]: [AccessToken, number]) {\n const list = await instance.listProducts(token, {\n limit: PAGINATED_LIST_REQUEST,\n offset: bid === undefined ? undefined: String(bid),\n order: \"dec\",\n });\n if (list.type !== \"ok\") {\n return list;\n }\n const all: Array<ProductWithId | undefined> = await Promise.all(\n list.body.products.map(async (c) => {\n const r = await instance.getProductDetails(token, c.product_id);\n if (r.type === \"fail\") {\n return undefined;\n }\n return { ...r.body, id: c.product_id, serial: c.product_serial };\n }),\n );\n const products = all.filter(notUndefined);\n\n return opFixedSuccess({ products });\n }\n\n const { data, error } = useSWR<\n OperationOk<{ products: ProductWithId[] }> |\n TalerMerchantManagementErrorsByMethod<\"listProducts\">,\n TalerHttpError\n >([session.token, offset, \"listProductsWithId\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.products, offset, setOffset, (d) => d.serial)\n}\n\nexport function revalidateProductDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getProductDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useProductDetails(productId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([pid, token]: [string, AccessToken]) {\n return await instance.getProductDetails(token, pid);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getProductDetails\">,\n TalerHttpError\n >([productId, session.token, \"getProductDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\nimport { useState } from \"preact/hooks\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, OperationOk, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface InstanceWebhookFilter {\n}\n\nexport function revalidateInstanceWebhooks() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listWebhooks\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceWebhooks() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n // const [offset, setOffset] = useState<string | undefined>();\n\n async function fetcher([token, bid]: [AccessToken, string]) {\n return await instance.listWebhooks(token, {\n // limit: PAGINATED_LIST_REQUEST,\n // offset: bid,\n // order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listWebhooks\">,\n TalerHttpError\n >([session.token, \"offset\", \"listWebhooks\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n // return buildPaginatedResult(data.body.webhooks, offset, setOffset, (d) => d.webhook_id)\n return data;\n}\n\ntype PaginatedResult<T> = OperationOk<T> & {\n isLastPage: boolean;\n isFirstPage: boolean;\n loadNext(): void;\n loadFirst(): void;\n}\n\n//TODO: consider sending this to web-util\nexport function buildPaginatedResult<R, OffId>(data: R[], offset: OffId | undefined, setOffset: (o: OffId | undefined) => void, getId: (r: R) => OffId): PaginatedResult<R[]> {\n\n const isLastPage = data.length < PAGINATED_LIST_REQUEST;\n const isFirstPage = offset === undefined;\n\n const result = structuredClone(data);\n if (result.length == PAGINATED_LIST_REQUEST) {\n result.pop();\n }\n return {\n type: \"ok\",\n body: result,\n isLastPage,\n isFirstPage,\n loadNext: () => {\n if (!result.length) return;\n const id = getId(result[result.length - 1])\n setOffset(id);\n },\n loadFirst: () => {\n setOffset(undefined);\n },\n };\n}\n\n\nexport function revalidateWebhookDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getWebhookDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useWebhookDetails(webhookId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([hookId, token]: [string, AccessToken]) {\n return await instance.getWebhookDetails(token, hookId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getWebhookDetails\">,\n TalerHttpError\n >([webhookId, session.token, \"getWebhookDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountString,\n Amounts,\n Duration,\n TalerMerchantApi,\n TalerProtocolDuration,\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format, isFuture } from \"date-fns\";\nimport { Fragment, VNode, h } 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 { 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 { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { InputToggle } from \"../../../../components/form/InputToggle.js\";\nimport { InventoryProductForm } from \"../../../../components/product/InventoryProductForm.js\";\nimport { NonInventoryProductFrom } from \"../../../../components/product/NonInventoryProductForm.js\";\nimport { ProductList } from \"../../../../components/product/ProductList.js\";\nimport { usePreference } from \"../../../../hooks/preference.js\";\nimport { rate } from \"../../../../utils/amount.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ninterface Props {\n onCreate: (d: TalerMerchantApi.PostOrderRequest) => void;\n onBack?: () => void;\n instanceConfig: InstanceConfig;\n instanceInventory: (TalerMerchantApi.ProductDetail & WithId)[];\n}\ninterface InstanceConfig {\n use_stefan: boolean;\n default_pay_delay: TalerProtocolDuration;\n default_wire_transfer_delay: TalerProtocolDuration;\n}\n\nfunction with_defaults(\n config: InstanceConfig,\n _currency: string,\n): Partial<Entity> {\n const defaultPayDeadline = Duration.fromTalerProtocolDuration(\n config.default_pay_delay,\n );\n const defaultWireDeadline = Duration.fromTalerProtocolDuration(\n config.default_wire_transfer_delay,\n );\n\n return {\n inventoryProducts: {},\n products: [],\n pricing: {},\n payments: {\n max_fee: undefined,\n createToken: true,\n pay_deadline: defaultPayDeadline,\n refund_deadline: defaultPayDeadline,\n wire_transfer_deadline: defaultWireDeadline,\n },\n shipping: {},\n extra: {},\n };\n}\n\ninterface ProductAndQuantity {\n product: TalerMerchantApi.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?: TalerMerchantApi.Location;\n fullfilment_url?: string;\n}\ninterface Payments {\n refund_deadline: Duration;\n pay_deadline: Duration;\n wire_transfer_deadline: Duration;\n auto_refund_deadline: Duration;\n max_fee?: string;\n createToken: boolean;\n minimum_age?: number;\n}\ninterface Entity {\n inventoryProducts: ProductMap;\n products: TalerMerchantApi.Product[];\n pricing: Partial<Pricing>;\n payments: Partial<Payments>;\n shipping: Partial<Shipping>;\n extra: Record<string, string>;\n}\n\nexport function CreatePage({\n onCreate,\n onBack,\n instanceConfig,\n instanceInventory,\n}: Props): VNode {\n const { config } = useMerchantApiContext();\n const instance_default = with_defaults(instanceConfig, config.currency);\n const [value, valueHandler] = useState(instance_default);\n const zero = Amounts.zeroOfCurrency(config.currency);\n const [settings, updateSettings] = usePreference();\n const inventoryList = Object.values(value.inventoryProducts || {});\n const productList = Object.values(value.products || {});\n\n const { i18n } = useTranslationContext();\n\n const parsedPrice = !value.pricing?.order_price\n ? undefined\n : Amounts.parse(value.pricing.order_price);\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 : !parsedPrice\n ? i18n.str`not valid`\n : Amounts.isZero(parsedPrice)\n ? i18n.str`must be greater than 0`\n : undefined,\n }),\n payments: undefinedIfEmpty({\n refund_deadline: !value.payments?.refund_deadline\n ? undefined\n : value.payments.pay_deadline &&\n Duration.cmp(\n value.payments.refund_deadline,\n value.payments.pay_deadline,\n ) === -1\n ? i18n.str`refund deadline cannot be before pay deadline`\n : value.payments.wire_transfer_deadline &&\n Duration.cmp(\n value.payments.wire_transfer_deadline,\n value.payments.refund_deadline,\n ) === -1\n ? i18n.str`wire transfer deadline cannot be before refund deadline`\n : undefined,\n pay_deadline: !value.payments?.pay_deadline\n ? i18n.str`required`\n : value.payments.wire_transfer_deadline &&\n Duration.cmp(\n value.payments.wire_transfer_deadline,\n value.payments.pay_deadline,\n ) === -1\n ? i18n.str`wire transfer deadline cannot be before pay deadline`\n : undefined,\n wire_transfer_deadline: !value.payments?.wire_transfer_deadline\n ? i18n.str`required`\n : undefined,\n auto_refund_deadline: !value.payments?.auto_refund_deadline\n ? undefined\n : !value.payments?.refund_deadline\n ? i18n.str`should have a refund deadline`\n : Duration.cmp(\n value.payments.refund_deadline,\n value.payments.auto_refund_deadline,\n ) == -1\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 = value as any; //schema.cast(value);\n if (!value.payments) return;\n if (!value.shipping) return;\n\n const request: TalerMerchantApi.PostOrderRequest = {\n order: {\n amount: order.pricing.order_price,\n summary: order.pricing.summary,\n products: productList,\n extra: undefinedIfEmpty(value.extra),\n pay_deadline: AbsoluteTime.toProtocolTimestamp(\n AbsoluteTime.addDuration(\n AbsoluteTime.now(),\n value.payments.pay_deadline!,\n ),\n ),\n wire_transfer_deadline: AbsoluteTime.toProtocolTimestamp(\n AbsoluteTime.addDuration(\n AbsoluteTime.now(),\n value.payments.wire_transfer_deadline!,\n ),\n ),\n refund_deadline: AbsoluteTime.toProtocolTimestamp(\n AbsoluteTime.addDuration(\n AbsoluteTime.now(),\n value.payments.refund_deadline!,\n ),\n ),\n auto_refund: value.payments.auto_refund_deadline\n ? Duration.toTalerProtocolDuration(\n value.payments.auto_refund_deadline,\n )\n : undefined,\n max_fee: value.payments.max_fee as AmountString,\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: TalerMerchantApi.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: TalerMerchantApi.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 TalerMerchantApi.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 ?? 0).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 const [newField, setNewField] = useState(\"\");\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 parsedPrice ?? Amounts.zeroOfCurrency(config.currency),\n totalPrice.amount,\n );\n\n const minAgeByProducts = inventoryList.reduce(\n (cur, prev) =>\n !prev.product.minimum_age || cur > prev.product.minimum_age ? cur : prev.product.minimum_age,\n 0,\n );\n\n // if there is no default pay deadline\n const noDefault_payDeadline =\n !instance_default.payments || !instance_default.payments.pay_deadline;\n // and there is no default wire deadline\n const noDefault_wireDeadline =\n !instance_default.payments ||\n !instance_default.payments.wire_transfer_deadline;\n // user required to set the taler options\n const requiresSomeTalerOptions =\n noDefault_payDeadline || noDefault_wireDeadline;\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"tabs is-toggle is-fullwidth is-small\">\n <ul>\n <li\n class={!settings.advanceOrderMode ? \"is-active\" : \"\"}\n onClick={() => {\n updateSettings(\"advanceOrderMode\", false);\n }}\n >\n <a>\n <span>\n <i18n.Translate>Simple</i18n.Translate>\n </span>\n </a>\n </li>\n <li\n class={settings.advanceOrderMode ? \"is-active\" : \"\"}\n onClick={() => {\n updateSettings(\"advanceOrderMode\", true);\n }}\n >\n <a>\n <span>\n <i18n.Translate>Advanced</i18n.Translate>\n </span>\n </a>\n </li>\n </ul>\n </div>\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 {settings.advanceOrderMode && (\n <NonInventoryProductFrom\n productToEdit={editingProduct}\n onAddProduct={(p) => {\n setEditingProduct(undefined);\n return addNewProduct(p);\n }}\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 {settings.advanceOrderMode && (\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\n {(settings.advanceOrderMode || requiresSomeTalerOptions) && (\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 {(settings.advanceOrderMode || noDefault_payDeadline) && (\n <InputDuration\n name=\"payments.pay_deadline\"\n label={i18n.str`Payment time`}\n help={\n <DeadlineHelp duration={value.payments?.pay_deadline} />\n }\n withForever\n withoutClear\n tooltip={i18n.str`Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.`}\n side={\n <span>\n <button\n class=\"button\"\n onClick={() => {\n const c = {\n ...value,\n payments: {\n ...(value.payments ?? {}),\n pay_deadline:\n instance_default.payments?.pay_deadline,\n },\n };\n valueHandler(c);\n }}\n >\n <i18n.Translate>default</i18n.Translate>\n </button>\n </span>\n }\n />\n )}\n {settings.advanceOrderMode && (\n <InputDuration\n name=\"payments.refund_deadline\"\n label={i18n.str`Refund time`}\n help={\n <DeadlineHelp\n duration={value.payments?.refund_deadline}\n />\n }\n withForever\n withoutClear\n tooltip={i18n.str`Time while the order can be refunded by the merchant. Time starts after the order is created.`}\n side={\n <span>\n <button\n class=\"button\"\n onClick={() => {\n valueHandler({\n ...value,\n payments: {\n ...(value.payments ?? {}),\n refund_deadline:\n instance_default.payments?.refund_deadline,\n },\n });\n }}\n >\n <i18n.Translate>default</i18n.Translate>\n </button>\n </span>\n }\n />\n )}\n {(settings.advanceOrderMode || noDefault_wireDeadline) && (\n <InputDuration\n name=\"payments.wire_transfer_deadline\"\n label={i18n.str`Wire transfer time`}\n help={\n <DeadlineHelp\n duration={value.payments?.wire_transfer_deadline}\n />\n }\n withoutClear\n withForever\n tooltip={i18n.str`Time for the exchange to make the wire transfer. Time starts after the order is created.`}\n side={\n <span>\n <button\n class=\"button\"\n onClick={() => {\n valueHandler({\n ...value,\n payments: {\n ...(value.payments ?? {}),\n wire_transfer_deadline:\n instance_default.payments\n ?.wire_transfer_deadline,\n },\n });\n }}\n >\n <i18n.Translate>default</i18n.Translate>\n </button>\n </span>\n }\n />\n )}\n {settings.advanceOrderMode && (\n <InputDuration\n name=\"payments.auto_refund_deadline\"\n label={i18n.str`Auto-refund time`}\n help={\n <DeadlineHelp\n duration={value.payments?.auto_refund_deadline}\n />\n }\n tooltip={i18n.str`Time until which the wallet will automatically check for refunds without user interaction.`}\n withForever\n />\n )}\n\n {settings.advanceOrderMode && (\n <InputCurrency\n name=\"payments.max_fee\"\n label={i18n.str`Maximum fee`}\n tooltip={i18n.str`Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.`}\n />\n )}\n {settings.advanceOrderMode && (\n <InputToggle\n name=\"payments.createToken\"\n label={i18n.str`Create token`}\n tooltip={i18n.str`If the order ID is easy to guess the token will prevent user to steal orders from others.`}\n />\n )}\n {settings.advanceOrderMode && (\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 : i18n.str`No product with age restriction in this order`\n }\n />\n )}\n </InputGroup>\n )}\n\n {settings.advanceOrderMode && (\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 {Object.keys(value.extra ?? {}).map((key, idx) => {\n return (\n <Input\n name={`extra.${key}`}\n key={String(idx)}\n inputType=\"multiline\"\n label={key}\n tooltip={i18n.str`You must enter a value in JavaScript Object Notation (JSON).`}\n side={\n <button\n class=\"button\"\n onClick={(e) => {\n if (\n value.extra &&\n value.extra[key] !== undefined\n ) {\n console.log(value.extra);\n delete value.extra[key];\n }\n valueHandler({\n ...value,\n });\n e.preventDefault();\n }}\n >\n remove\n </button>\n }\n />\n );\n })}\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n <i18n.Translate>Custom field name</i18n.Translate>\n <span\n class=\"icon has-tooltip-right\"\n data-tooltip={\"new extra field\"}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </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 value={newField}\n onChange={(e) => setNewField(e.currentTarget.value)}\n />\n </p>\n </div>\n </div>\n <button\n class=\"button\"\n onClick={(e) => {\n setNewField(\"\");\n valueHandler({\n ...value,\n extra: {\n ...(value.extra ?? {}),\n [newField]: \"\",\n },\n });\n e.preventDefault();\n }}\n >\n add\n </button>\n </div>\n </InputGroup>\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-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): TalerMerchantApi.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 };\n}\n\nfunction DeadlineHelp({ duration }: { duration?: Duration }): VNode {\n const { i18n } = useTranslationContext();\n const [now, setNow] = useState(AbsoluteTime.now());\n useEffect(() => {\n const iid = setInterval(() => {\n setNow(AbsoluteTime.now());\n }, 60 * 1000);\n return () => {\n clearInterval(iid);\n };\n });\n if (!duration) return <i18n.Translate>Disabled</i18n.Translate>;\n const when = AbsoluteTime.addDuration(now, duration);\n if (when.t_ms === \"never\")\n return <i18n.Translate>No deadline</i18n.Translate>;\n return (\n <i18n.Translate>\n Deadline at {format(when.t_ms, \"dd/MM/yy HH:mm\")}\n </i18n.Translate>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useMerchantApiContext } from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\nimport { InputProps } from \"./useField.js\";\nimport { AmountString } from \"@gnu-taler/taler-util\";\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 } = useMerchantApiContext();\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?: AmountString) => v?.split(\":\")[1] || \"\"}\n fromStr={(v: string) => (!v ? undefined : `${config.currency}:${v}`)}\n inputExtra={{ min: 0 }}\n >\n {children}\n </InputWithAddon>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { format } from \"date-fns\";\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DatePicker } from \"../picker/DatePicker.js\";\nimport { InputProps, useField } from \"./useField.js\";\nimport { dateFormatForSettings, usePreference } from \"../../hooks/preference.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 side?: ComponentChildren;\n}\n\nexport function InputDate<T>({\n name,\n readonly,\n label,\n placeholder,\n help,\n tooltip,\n expand,\n withTimestampSupport,\n side,\n}: Props<keyof T>): VNode {\n const [opened, setOpened] = useState(false);\n const { i18n } = useTranslationContext();\n const [settings] = usePreference()\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, dateFormatForSettings(settings));\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), dateFormatForSettings(settings));\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 {side}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Component, h } 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ProductMap } from \"../../paths/instance/orders/create/CreatePage.js\";\nimport { FormErrors, FormProvider } from \"../form/FormProvider.js\";\nimport { InputNumber } from \"../form/InputNumber.js\";\nimport { InputSearchOnList } from \"../form/InputSearchOnList.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\ntype Form = {\n product: TalerMerchantApi.ProductDetail & WithId;\n quantity: number;\n};\n\ninterface Props {\n currentProducts: ProductMap;\n onAddProduct: (\n product: TalerMerchantApi.ProductDetail & WithId,\n quantity: number,\n ) => void;\n inventory: (TalerMerchantApi.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 <InputSearchOnList\n label={i18n.str`Search product`}\n selected={state.product}\n onChange={(p) => setState((v) => ({ ...v, product: p }))}\n list={inventory}\n withImage\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", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport emptyImage from \"../../assets/empty.png\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n\ntype Entity = {\n id: string,\n description: string;\n image?: string;\n extra?: string;\n};\n\nexport interface Props<T extends Entity> {\n selected?: T;\n onChange: (p?: T) => void;\n label: TranslatedString;\n list: T[];\n withImage?: boolean;\n}\n\ninterface Search {\n name: string;\n}\n\nexport function InputSearchOnList<T extends Entity>({\n selected,\n onChange,\n label,\n list,\n withImage,\n}: Props<T>): VNode {\n const [nameForm, setNameForm] = useState<Partial<Search>>({\n name: \"\",\n });\n\n const errors: FormErrors<Search> = {\n name: undefined,\n };\n const { i18n } = useTranslationContext();\n\n if (selected) {\n return (\n <article class=\"media\">\n {withImage &&\n <figure class=\"media-left\">\n <p class=\"image is-128x128\">\n <img src={selected.image ? selected.image : emptyImage} />\n </p>\n </figure>\n }\n <div class=\"media-content\">\n <div class=\"content\">\n <p class=\"media-meta\">\n <i18n.Translate>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<Search>\n errors={errors}\n object={nameForm}\n valueHandler={setNameForm}\n >\n <InputWithAddon<Search>\n name=\"name\"\n label={label}\n tooltip={i18n.str`enter description or id`}\n addonAfter={\n <span class=\"icon\">\n <i class=\"mdi mdi-magnify\" />\n </span>\n }\n >\n <div>\n <DropdownList\n name={nameForm.name}\n list={list}\n onSelect={(p) => {\n setNameForm({ name: \"\" });\n onChange(p);\n }}\n withImage={!!withImage}\n />\n </div>\n </InputWithAddon>\n </FormProvider>\n );\n}\n\ninterface DropdownListProps<T extends Entity> {\n name?: string;\n onSelect: (p: T) => void;\n list: T[];\n withImage: boolean;\n}\n\nfunction DropdownList<T extends Entity>({ name, onSelect, list, withImage }: DropdownListProps<T>) {\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 match found with that description or id\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 {withImage &&\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 }\n <div class=\"media-content\">\n <div class=\"content\">\n <p>\n <strong>{p.id}</strong> {p.extra !== undefined ? <small>{p.extra}</small> : undefined}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountString, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\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 = TalerMerchantApi.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<TalerMerchantApi.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 || \"\") as AmountString,\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: TalerMerchantApi.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<NonInventoryProduct> = {};\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 TalerMerchantApi.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", "// 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { isAfter, isFuture } from \"date-fns\";\nimport * as yup from \"yup\";\nimport { 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 && Amounts.parse(value) !== undefined;\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 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.object().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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { h, VNode } from \"preact\";\nimport { useCallback, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\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\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\nexport interface Props<T> extends InputProps<T> {\n isValid?: (e: any) => boolean;\n}\n\ntype Entity = TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport emptyImage from \"../../assets/empty.png\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\n\ninterface Props {\n list: TalerMerchantApi.Product[];\n actions?: {\n name: string;\n tooltip: string;\n handler: (d: TalerMerchantApi.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 ?? 0\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 TalerMerchantApi,\n} from \"@gnu-taler/taler-util\";\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: TalerMerchantApi.RefundDetails[],\n cur: TalerMerchantApi.RefundDetails,\n): TalerMerchantApi.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 function rate(a: AmountJson, b: AmountJson): number {\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useOrderDetails } from \"../../../../hooks/order.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { DetailPage } from \"./DetailPage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport interface Props {\n oid: string;\n onBack: () => void;\n}\n\nexport default function Update({ oid, onBack }: Props): VNode {\n const result = useOrderDetails(oid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib: api } = useMerchantApiContext();\n const { state } = useSessionContext();\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.BadGateway: {\n return <div>Failed to obtain a response from the exchange</div>;\n }\n case HttpStatusCode.GatewayTimeout: {\n return (\n <div>The merchant's interaction with the exchange took too long</div>\n );\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <DetailPage\n onBack={onBack}\n id={oid}\n onRefund={(id, value) => {\n if (state.status !== \"loggedIn\") {\n return;\n }\n api.instance\n .addRefund(state.token, 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.body}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AbsoluteTime, AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\n\n\nexport function revalidateOrderDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getOrderDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useOrderDetails(oderId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([dId, token]: [string, AccessToken]) {\n return await instance.getOrderDetails(token, dId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getOrderDetails\">,\n TalerHttpError\n >([oderId, session.token, \"getOrderDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport interface InstanceOrderFilter {\n paid?: boolean;\n refunded?: boolean;\n wired?: boolean;\n date?: AbsoluteTime;\n position?: string;\n}\n\nexport function revalidateInstanceOrders() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listOrders\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceOrders(\n args?: InstanceOrderFilter,\n updatePosition: (d: string | undefined) => void = () => { },\n) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n // const [offset, setOffset] = useState<string | undefined>(args?.position);\n\n async function fetcher([token, o, p, r, w, d]: [AccessToken, string, boolean, boolean, boolean, AbsoluteTime]) {\n return await instance.listOrders(token, {\n limit: PAGINATED_LIST_REQUEST,\n offset: o,\n order: \"dec\",\n paid: p,\n refunded: r,\n wired: w,\n date: d,\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listOrders\">,\n TalerHttpError\n >([session.token, args?.position, args?.paid, args?.refunded, args?.wired, args?.date, \"listOrders\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.orders, args?.position, updatePosition, (d) => String(d.row_id))\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AmountJson,\n Amounts,\n TalerMerchantApi,\n stringifyRefundUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format, formatDistance } from \"date-fns\";\nimport { Fragment, VNode, h } 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 {\n datetimeFormatForSettings,\n usePreference,\n} from \"../../../../hooks/preference.js\";\nimport { mergeRefunds } from \"../../../../utils/amount.js\";\nimport { RefundModal } from \"../list/Table.js\";\nimport { Event, Timeline } from \"./Timeline.js\";\n\ntype Entity = TalerMerchantApi.MerchantOrderStatusResponse;\ntype CT = TalerMerchantApi.ContractTerms;\n\ninterface Props {\n onBack: () => void;\n selected: Entity;\n id: string;\n onRefund: (id: string, value: TalerMerchantApi.RefundRequest) => void;\n}\n\ntype Paid = TalerMerchantApi.CheckPaymentPaidResponse & {\n refund_taken: string;\n};\ntype Unpaid = TalerMerchantApi.CheckPaymentUnpaidResponse;\ntype Claimed = TalerMerchantApi.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 <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: TalerMerchantApi.CheckPaymentClaimedResponse;\n}) {\n const now = new Date();\n const refundable =\n order.contract_terms.refund_deadline.t_s !== \"never\" &&\n now.getTime() < order.contract_terms.refund_deadline.t_s * 1000;\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\" && refundable) {\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 const [settings] = usePreference();\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\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 {order.contract_terms.timestamp.t_s === \"never\"\n ? \"never\"\n : format(\n new Date(\n order.contract_terms.timestamp.t_s * 1000,\n ),\n datetimeFormatForSettings(settings),\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: TalerMerchantApi.CheckPaymentPaidResponse;\n onRefund: (id: string) => void;\n}) {\n const now = new Date();\n const refundable =\n order.contract_terms.refund_deadline.t_s !== \"never\" &&\n now.getTime() < order.contract_terms.refund_deadline.t_s * 1000;\n\n const events: Event[] = [];\n if (order.contract_terms.refund_deadline.t_s !== \"never\" && refundable) {\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 const ra = !order.refunded ? undefined : Amounts.parse(order.refund_amount);\n const am = Amounts.parseOrThrow(order.contract_terms.amount);\n if (ra && Amounts.cmp(ra, am) === 1) {\n if (order.wire_details && order.wire_details.length) {\n if (order.wire_details.length > 1) {\n let last: TalerMerchantApi.TransactionWireTransfer | null = null;\n let first: TalerMerchantApi.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 (\n first === null ||\n first.execution_time.t_s > w.execution_time.t_s\n ) {\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\n const nextEvent = events.find((e) => {\n return e.when.getTime() > now.getTime();\n });\n\n const [value, valueHandler] = useState<Partial<Paid>>(order);\n const { url: backendUrl } = useMerchantApiContext();\n\n const refundurl = stringifyRefundUri({\n merchantBaseUrl: backendUrl.href,\n orderId: order.contract_terms.order_id,\n });\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 }}\n >\n {nextEvent && (\n <p>\n <i18n.Translate>Next event in </i18n.Translate>{\" \"}\n {formatDistance(\n nextEvent.when,\n new Date(),\n // \"yyyy/MM/dd HH:mm:ss\",\n )}\n </p>\n )}\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: TalerMerchantApi.CheckPaymentUnpaidResponse;\n}) {\n const [value, valueHandler] = useState<Partial<Unpaid>>(order);\n const { i18n } = useTranslationContext();\n const [settings] = usePreference();\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 datetimeFormatForSettings(settings),\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", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { VNode, h } 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 {\n datetimeFormatForSettings,\n usePreference,\n} from \"../../../../hooks/preference.js\";\nimport { mergeRefunds } from \"../../../../utils/amount.js\";\n\ntype Entity = TalerMerchantApi.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 onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n orders,\n onCreate,\n onRefund,\n onCopyURL,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\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 />\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 onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onSelect,\n onRefund,\n onCopyURL,\n onLoadMoreAfter,\n onLoadMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreference();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button class=\"button is-fullwidth\" onClick={onLoadMoreBefore}>\n <i18n.Translate>load first page</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 datetimeFormatForSettings(settings),\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 class=\"button is-fullwidth\" \n data-tooltip={i18n.str`load more orders after the last one`}\n onClick={onLoadMoreAfter}>\n <i18n.Translate>load next page</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-magnify 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: TalerMerchantApi.RefundRequest) => void;\n order: TalerMerchantApi.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 [settings] = usePreference();\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 } = useMerchantApiContext();\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 Record<string, unknown>)[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 datetimeFormatForSettings(settings),\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)}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\";\nimport { datetimeFormatForSettings, usePreference } from \"../../../../hooks/preference.js\";\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 const [settings] = usePreference();\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\">\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 {e.description !== \"now\" && <p class=\"heading\">{format(e.when, datetimeFormatForSettings(settings))}</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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerError,\n TalerMerchantApi,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { JumpToElementById } from \"../../../../components/form/JumpToElementById.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n InstanceOrderFilter,\n useInstanceOrders,\n useOrderDetails,\n} from \"../../../../hooks/order.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { RefundModal } from \"./Table.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\ninterface Props {\n onSelect: (id: string) => void;\n onCreate: () => void;\n}\n\nexport default function OrderList({ onCreate, onSelect }: Props): VNode {\n const [filter, setFilter] = useState<InstanceOrderFilter>({ paid: false });\n const [orderToBeRefunded, setOrderToBeRefunded] = useState<\n TalerMerchantApi.OrderHistoryEntry | undefined\n >(undefined);\n\n const setNewDate = (date?: AbsoluteTime): void =>\n setFilter((prev) => ({ ...prev, date }));\n\n const result = useInstanceOrders(filter, (d) =>\n setFilter({ ...filter, position: d }),\n );\n const { lib } = useMerchantApiContext();\n\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n const isNotPaidActive = filter.paid === false ? \"is-active\" : \"\";\n const isPaidActive =\n filter.paid === true && filter.wired === undefined ? \"is-active\" : \"\";\n const isRefundedActive = filter.refunded === true ? \"is-active\" : \"\";\n const isNotWiredActive =\n filter.wired === false && filter.paid === true ? \"is-active\" : \"\";\n const isWiredActive = filter.wired === true ? \"is-active\" : \"\";\n const isAllActive =\n filter.paid === undefined &&\n filter.refunded === undefined &&\n filter.wired === undefined\n ? \"is-active\"\n : \"\";\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n <JumpToElementById\n testIfExist={async (order) => {\n const resp = await lib.instance.getOrderDetails(state.token, order);\n return resp.type === \"ok\";\n }}\n onSelect={onSelect}\n description={i18n.str`jump to order with the given product ID`}\n placeholder={i18n.str`order id`}\n />\n\n <ListPage\n orders={result.body.map((o) => ({ ...o, id: o.order_id }))}\n onLoadMoreBefore={result.isFirstPage ? undefined : result.loadFirst}\n onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\n onSelectOrder={(order) => onSelect(order.id)}\n onRefundOrder={(value) => setOrderToBeRefunded(value)}\n isAllActive={isAllActive}\n isNotWiredActive={isNotWiredActive}\n isWiredActive={isWiredActive}\n isPaidActive={isPaidActive}\n isNotPaidActive={isNotPaidActive}\n isRefundedActive={isRefundedActive}\n jumpToDate={filter.date}\n onSelectDate={setNewDate}\n onCopyURL={async (id) => {\n const resp = await lib.instance.getOrderDetails(state.token, id);\n if (resp.type === \"ok\") {\n if (resp.body.order_status === \"unpaid\") {\n copyToClipboard(resp.body.taler_pay_uri);\n } else {\n if (resp.body.contract_terms.fulfillment_url) {\n copyToClipboard(resp.body.contract_terms.fulfillment_url);\n }\n }\n copyToClipboard(resp.body.order_status);\n }\n }}\n onCreate={onCreate}\n onShowAll={() => setFilter({})}\n onShowNotPaid={() => setFilter({ paid: false })}\n onShowPaid={() => setFilter({ paid: true })}\n onShowRefunded={() => setFilter({ refunded: true })}\n onShowNotWired={() => setFilter({ wired: false, paid: true })}\n onShowWired={() => setFilter({ wired: true })}\n />\n\n {orderToBeRefunded && (\n <RefundModalForTable\n id={orderToBeRefunded.order_id}\n onCancel={() => setOrderToBeRefunded(undefined)}\n onConfirm={(value) => {\n lib.instance\n .addRefund(state.token, 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 />\n )}\n </section>\n );\n}\n\ninterface RefundProps {\n id: string;\n onCancel: () => void;\n onConfirm: (m: TalerMerchantApi.RefundRequest) => void;\n}\n\nfunction RefundModalForTable({ id, onConfirm, onCancel }: RefundProps): VNode {\n const result = useOrderDetails(id);\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.BadGateway: {\n return <div>Failed to obtain a response from the exchange</div>;\n }\n case HttpStatusCode.GatewayTimeout: {\n return (\n <div>The merchant's interaction with the exchange took too long</div>\n );\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <RefundModal\n order={result.body}\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", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\n\nexport function JumpToElementById({ testIfExist, onSelect, placeholder, description }: { placeholder: TranslatedString, description: TranslatedString, testIfExist: (id: string) => Promise<boolean>, onSelect: (id: string) => void }): VNode {\n const { i18n } = useTranslationContext()\n\n const [error, setError] = useState<string | undefined>(\n undefined,\n );\n\n const [id, setId] = useState<string>()\n async function check(currentId: string | undefined): Promise<void> {\n if (!currentId) {\n setError(i18n.str`missing id`);\n return;\n }\n try {\n const exi = await testIfExist(currentId);\n if (exi) {\n onSelect(currentId);\n setError(undefined);\n } else {\n setError(i18n.str`not found`);\n }\n } catch {\n setError(i18n.str`not found`);\n }\n }\n\n return <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={error ? \"input is-danger\" : \"input\"}\n type=\"text\"\n value={id ?? \"\"}\n onChange={(e) => setId(e.currentTarget.value)}\n placeholder={placeholder}\n />\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n <span\n class=\"has-tooltip-bottom\"\n data-tooltip={description}\n >\n <button\n class=\"button\"\n onClick={(e) => check(id)}\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}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DatePicker } from \"../../../../components/picker/DatePicker.js\";\nimport { dateFormatForSettings, usePreference } from \"../../../../hooks/preference.js\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface ListPageProps {\n onShowAll: () => void;\n onShowNotPaid: () => void;\n onShowPaid: () => void;\n onShowRefunded: () => void;\n onShowNotWired: () => void;\n onShowWired: () => void;\n onCopyURL: (id: string) => void;\n isAllActive: string;\n isPaidActive: string;\n isNotPaidActive: string;\n isRefundedActive: string;\n isNotWiredActive: string;\n isWiredActive: string;\n\n jumpToDate?: AbsoluteTime;\n onSelectDate: (date?: AbsoluteTime) => void;\n\n orders: (TalerMerchantApi.OrderHistoryEntry & WithId)[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n\n onSelectOrder: (o: TalerMerchantApi.OrderHistoryEntry & WithId) => void;\n onRefundOrder: (o: TalerMerchantApi.OrderHistoryEntry & WithId) => void;\n onCreate: () => void;\n}\n\nexport function ListPage({\n onLoadMoreAfter,\n onLoadMoreBefore,\n orders,\n isAllActive,\n onSelectOrder,\n onRefundOrder,\n jumpToDate,\n onCopyURL,\n onShowAll,\n onShowPaid,\n onShowNotPaid,\n onShowRefunded,\n onShowNotWired,\n onShowWired,\n onSelectDate,\n isPaidActive,\n isRefundedActive,\n isNotWiredActive,\n onCreate,\n isNotPaidActive,\n isWiredActive,\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 [settings] = usePreference();\n\n return (\n <Fragment>\n <div class=\"columns\">\n <div class=\"column is-two-thirds\">\n <div class=\"tabs\" style={{ overflow: \"inherit\" }}>\n <ul>\n <li class={isNotPaidActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show paid orders`}\n >\n <a onClick={onShowNotPaid}>\n <i18n.Translate>New</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 <li class={isWiredActive}>\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={onShowWired}>\n <i18n.Translate>Completed</i18n.Translate>\n </a>\n </div>\n </li>\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 </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 is-fullwidth\" 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 || jumpToDate.t_ms === \"never\" ? \"\" : format(jumpToDate.t_ms, dateFormatForSettings(settings))}\n placeholder={i18n.str`date (${dateFormatForSettings(settings)})`}\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 is-fullwidth\"\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={(d) => {\n onSelectDate(AbsoluteTime.fromMilliseconds(d.getTime()))\n }}\n />\n\n <CardTable\n orders={orders}\n onCreate={onCreate}\n onCopyURL={onCopyURL}\n onSelect={onSelectOrder}\n onRefund={onRefundOrder}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useMerchantApiContext, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatedSuccessfully } from \"./CreatedSuccessfully.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\nexport type Entity = TalerMerchantApi.OtpDeviceAddDetails;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateValidator({ onConfirm, onBack }: Props): VNode {\n const { lib: api } = useMerchantApiContext();\n const { state } = useSessionContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [created, setCreated] = useState<TalerMerchantApi.OtpDeviceAddDetails | null>(null)\n\n if (created) {\n return <CreatedSuccessfully entity={created} onConfirm={onConfirm} />\n }\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: Entity) => {\n return api.instance.addOtpDevice(state.token, request)\n .then((d) => {\n setCreated(request)\n })\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create device`,\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useMerchantApiContext, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport { CreatedSuccessfully as Template } from \"../../../../components/notifications/CreatedSuccessfully.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\ntype Entity = TalerMerchantApi.OtpDeviceAddDetails;\n\ninterface Props {\n entity: Entity;\n onConfirm: () => void;\n}\n\nexport function CreatedSuccessfully({\n entity,\n onConfirm,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const { url: backendUrl } = useMerchantApiContext();\n const { state } = useSessionContext();\n const issuer = backendUrl.href;\n const qrText = `otpauth://totp/${state.instance}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key}`;\n const qrTextSafe = `otpauth://totp/${state.instance}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key.substring(0, 6)}...`;\n\n return (\n <Template onConfirm={onConfirm} >\n <p class=\"is-size-5\">\n <i18n.Translate>\n You can scan the next QR code with your device or save the key before continuing.\n </i18n.Translate>\n </p>\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\n readonly\n class=\"input\"\n value={entity.otp_device_id}\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\"><i18n.Translate>Description</i18n.Translate></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.otp_device_description}\n />\n </p>\n </div>\n </div>\n </div>\n <QR\n text={qrText}\n />\n <div\n style={{\n color: \"grey\",\n fontSize: \"small\",\n width: 200,\n textAlign: \"center\",\n margin: \"auto\",\n wordBreak: \"break-all\",\n }}\n >\n {qrTextSafe}\n </div>\n </Template>\n );\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 TalerMerchantApi,\n isRfc3548Base32Charset,\n randomRfc3548Base32Key,\n} from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } 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 { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\n\ntype Entity = TalerMerchantApi.OtpDeviceAddDetails;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nconst algorithms = [0, 1, 2];\nconst algorithmsNames = [\"off\", \"30s 8d TOTP-SHA1\", \"30s 8d eTOTP-SHA1\"];\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>({});\n\n const [showKey, setShowKey] = useState(false);\n\n const errors: FormErrors<Entity> = {\n otp_device_id: !state.otp_device_id\n ? i18n.str`required`\n : !/[a-zA-Z0-9]*/.test(state.otp_device_id)\n ? i18n.str`no valid. only characters and numbers`\n : undefined,\n otp_algorithm: !state.otp_algorithm ? i18n.str`required` : undefined,\n otp_key: !state.otp_key\n ? i18n.str`required`\n : !isRfc3548Base32Charset(state.otp_key)\n ? i18n.str`just letters and numbers from 2 to 7`\n : state.otp_key.length !== 32\n ? i18n.str`size of the key should be 32`\n : undefined,\n otp_device_description: !state.otp_device_description\n ? i18n.str`required`\n : !/[a-zA-Z0-9]*/.test(state.otp_device_description)\n ? i18n.str`no valid. only characters and numbers`\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 <Input<Entity>\n name=\"otp_device_id\"\n label={i18n.str`ID`}\n tooltip={i18n.str`Internal id on the system`}\n />\n <Input<Entity>\n name=\"otp_device_description\"\n label={i18n.str`Descripiton`}\n tooltip={i18n.str`Useful to identify the device physically`}\n />\n <InputSelector<Entity>\n name=\"otp_algorithm\"\n label={i18n.str`Verification algorithm`}\n tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}\n values={algorithms}\n toStr={(v) => algorithmsNames[v]}\n fromStr={(v) => Number(v)}\n />\n {state.otp_algorithm ? (\n <Fragment>\n <InputWithAddon<Entity>\n expand\n name=\"otp_key\"\n label={i18n.str`Device key`}\n inputType={showKey ? \"text\" : \"password\"}\n help=\"Be sure to be very hard to guess or use the random generator\"\n tooltip={i18n.str`Your device need to have exactly the same value`}\n fromStr={(v) => v.toUpperCase()}\n addonAfterAction={() => {\n setShowKey(!showKey);\n }}\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 <button\n data-tooltip={i18n.str`generate random secret key`}\n class=\"button is-info mr-3\"\n onClick={(e) => {\n setState((s) => ({\n ...s,\n otp_key: randomRfc3548Base32Key(),\n }));\n e.preventDefault();\n }}\n >\n <i18n.Translate>random</i18n.Translate>\n </button>\n }\n />\n </Fragment>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n TalerMerchantApi,\n assertUnreachable\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceOtpDevices } from \"../../../../hooks/otp.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\ninterface Props {\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\n\nexport default function ListOtpDevices({ onCreate, onSelect }: Props): VNode {\n // const [position, setPosition] = useState<string | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n const result = useInstanceOtpDevices();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n devices={result.body.otp_devices}\n onLoadMoreBefore={undefined} //result.isFirstPage ? undefined : result.loadFirst}\n onLoadMoreAfter={undefined} //result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.otp_device_id);\n }}\n onDelete={(e: TalerMerchantApi.OtpDeviceEntry) => {\n return lib.instance\n .deleteOtpDevice(state.token, e.otp_device_id)\n .then(() =>\n setNotif({\n message: i18n.str`validator delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the validator`,\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function revalidateInstanceOtpDevices() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listOtpDevices\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceOtpDevices() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n // const [offset, setOffset] = useState<string | undefined>();\n\n async function fetcher([token, bid]: [AccessToken, string]) {\n return await instance.listOtpDevices(token, {\n // limit: PAGINATED_LIST_REQUEST,\n // offset: bid,\n // order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listOtpDevices\">,\n TalerHttpError\n >([session.token, \"offset\", \"listOtpDevices\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n // return buildPaginatedResult(data.body.otp_devices, offset, setOffset, (d) => d.otp_device_id)\n return data;\n}\n\nexport function revalidateOtpDeviceDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getOtpDeviceDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useOtpDeviceDetails(deviceId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([dId, token]: [string, AccessToken]) {\n return await instance.getOtpDeviceDetails(token, dId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getOtpDeviceDetails\">,\n TalerHttpError\n >([deviceId, session.token, \"getOtpDeviceDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n devices: TalerMerchantApi.OtpDeviceEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: TalerMerchantApi.OtpDeviceEntry) => void;\n onSelect: (e: TalerMerchantApi.OtpDeviceEntry) => void;\n}\n\nexport function ListPage({\n devices,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreBefore,\n onLoadMoreAfter,\n}: Props): VNode {\n\n return (\n <section class=\"section is-main-section\">\n <CardTable\n devices={devices.map((o) => ({\n ...o,\n id: String(o.otp_device_id),\n }))}\n onCreate={onCreate}\n onDelete={onDelete}\n onSelect={onSelect}\n onLoadMoreBefore={onLoadMoreBefore}\n onLoadMoreAfter={onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\n\ntype Entity = TalerMerchantApi.OtpDeviceEntry;\n\ninterface Props {\n devices: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onCreate: () => void;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n devices,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\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>OTP Devices</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 devices`}\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 {devices.length > 0 ? (\n <Table\n instances={devices}\n onDelete={onDelete}\n onSelect={onSelect}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\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 onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onSelect,\n onLoadMoreBefore,\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 devices before the first one`}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load first page</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.otp_device_id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.otp_device_id}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.device_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 devices from the database`}\n onClick={() => onDelete(i)}\n >\n Delete\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 devices after the last one`}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load next page</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-magnify mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no devices 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n TalerMerchantApi,\n assertUnreachable\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useOtpDeviceDetails } from \"../../../../hooks/otp.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { CreatedSuccessfully } from \"../create/CreatedSuccessfully.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport type Entity = TalerMerchantApi.OtpDevicePatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n vid: string;\n}\nexport default function UpdateValidator({\n vid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const result = useOtpDeviceDetails(vid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const [keyUpdated, setKeyUpdated] =\n useState<TalerMerchantApi.OtpDeviceAddDetails | null>(null);\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n if (keyUpdated) {\n return <CreatedSuccessfully entity={keyUpdated} onConfirm={onConfirm} />;\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n device={{\n id: vid,\n otp_algorithm: result.body.otp_algorithm,\n otp_device_description: result.body.device_description,\n otp_key: \"\",\n otp_ctr: result.body.otp_ctr,\n }}\n onBack={onBack}\n onUpdate={async (newInfo) => {\n return lib.instance\n .updateOtpDevice(state.token, vid, newInfo)\n .then((d) => {\n if (d.type === \"ok\") {\n if (newInfo.otp_key) {\n setKeyUpdated({\n otp_algorithm: newInfo.otp_algorithm,\n otp_device_description: newInfo.otp_device_description,\n otp_device_id: newInfo.id,\n otp_key: newInfo.otp_key,\n otp_ctr: newInfo.otp_ctr,\n });\n } else {\n onConfirm();\n }\n } else {\n switch(d.case) {\n case HttpStatusCode.NotFound: {\n setNotif({\n message: i18n.str`Could not update template`,\n type: \"ERROR\",\n description: i18n.str`Template id is unknown`,\n });\n break;\n }\n case HttpStatusCode.Conflict: {\n setNotif({\n message: i18n.str`Could not update template`,\n type: \"ERROR\",\n description: i18n.str`The provided information is inconsistent with the current state of the template`,\n });\n break;\n }\n }\n }\n })\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { randomRfc3548Base32Key, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, 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 { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\n\ntype Entity = TalerMerchantApi.OtpDevicePatchDetails & WithId;\n\ninterface Props {\n onUpdate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n device: Entity;\n}\nconst algorithms = [0, 1, 2];\nconst algorithmsNames = [\"off\", \"30s 8d TOTP-SHA1\", \"30s 8d eTOTP-SHA1\"];\nexport function UpdatePage({ device, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>(device);\n const [showKey, setShowKey] = useState(false);\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 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 Device: <b>{device.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=\"otp_device_description\"\n label={i18n.str`Description`}\n tooltip={i18n.str`Useful to identify the device physically`}\n />\n <InputSelector<Entity>\n name=\"otp_algorithm\"\n label={i18n.str`Verification algorithm`}\n tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}\n values={algorithms}\n toStr={(v) => algorithmsNames[v]}\n fromStr={(v) => Number(v)}\n />\n {state.otp_algorithm && state.otp_algorithm > 0 ? (\n <Fragment>\n <InputWithAddon<Entity>\n name=\"otp_key\"\n label={i18n.str`Device key`}\n readonly={state.otp_key === undefined}\n inputType={showKey ? \"text\" : \"password\"}\n help={\n state.otp_key === undefined\n ? \"Not modified\"\n : \"Be sure to be very hard to guess or use the random generator\"\n }\n tooltip={i18n.str`Your device need to have exactly the same value`}\n fromStr={(v) => v.toUpperCase()}\n addonAfterAction={() => {\n setShowKey(!showKey);\n }}\n addonAfter={\n <span\n class=\"icon\"\n onClick={() => {\n setShowKey(!showKey);\n }}\n >\n {showKey ? (\n <i class=\"mdi mdi-eye\" />\n ) : (\n <i class=\"mdi mdi-eye-off\" />\n )}\n </span>\n }\n side={\n state.otp_key === undefined ? (\n <button\n onClick={(e) => {\n setState((s) => ({ ...s, otp_key: \"\" }));\n }}\n class=\"button\"\n >\n change key\n </button>\n ) : (\n <button\n data-tooltip={i18n.str`generate random secret key`}\n class=\"button is-info mr-3\"\n onClick={(e) => {\n setState((s) => ({\n ...s,\n otp_key: randomRfc3548Base32Key(),\n }));\n }}\n >\n <i18n.Translate>random</i18n.Translate>\n </button>\n )\n }\n />\n </Fragment>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useMerchantApiContext, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\nexport type Entity = TalerMerchantApi.ProductAddDetail;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\nexport default function CreateProduct({ onConfirm, onBack }: Props): VNode {\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\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: TalerMerchantApi.ProductAddDetail) => {\n return lib.instance.addProduct(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { ProductForm } from \"../../../../components/product/ProductForm.js\";\nimport { useListener } from \"../../../../hooks/listener.js\";\n\ntype Entity = TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountString, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { h } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\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 = TalerMerchantApi.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\" as AmountString,\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 Record<string, unknown>)[k] !== undefined,\n );\n\n const submit = useCallback((): Entity | undefined => {\n const stock = (value).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.stock;\n\n if (typeof value.minimum_age !== \"undefined\" && value.minimum_age < 1) {\n delete value.minimum_age;\n }\n\n return value as TalerMerchantApi.ProductDetail & {\n product_id: string;\n };\n }, [value]);\n\n useEffect(() => {\n onSubscribe(hasErrors ? undefined : submit);\n }, [submit, hasErrors]);\n\n const { url: backendUrl } = useMerchantApiContext();\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={new URL(\"product/\", backendUrl.href).href}\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 restriction`}\n tooltip={i18n.str`is this product restricted for customer below certain age?`}\n help={i18n.str`minimum age of the buyer`}\n />\n <Input<Entity>\n name=\"unit\"\n label={i18n.str`Unit name`}\n tooltip={i18n.str`unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers`}\n help={i18n.str`exajmple: kg, items or liters`}\n />\n <InputCurrency<Entity>\n name=\"price\"\n label={i18n.str`Price per unit`}\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`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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi, TalerProtocolTimestamp } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h } from \"preact\";\nimport { useLayoutEffect, useState } from \"preact/hooks\";\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?: TalerMerchantApi.Location;\n nextRestock?: TalerProtocolTimestamp;\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 ${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> name=\"address\" label={i18n.str`Warehouse address`}>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { JumpToElementById } from \"../../../../components/form/JumpToElementById.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { ConfirmModal } from \"../../../../components/modal/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n useInstanceProducts\n} from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { CardTable } from \"./Table.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\ninterface Props {\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\nexport default function ProductList({\n onCreate,\n onSelect,\n}: Props): VNode {\n const result = useInstanceProducts();\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n const [deleting, setDeleting] =\n useState<TalerMerchantApi.ProductDetail & WithId | null>(null);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n <JumpToElementById\n testIfExist={async (id) => {\n const resp = await lib.instance.getProductDetails(state.token, id);\n return resp.type === \"ok\";\n }}\n onSelect={onSelect}\n description={i18n.str`jump to product with the given product ID`}\n placeholder={i18n.str`product id`}\n />\n\n <CardTable\n instances={result.body}\n onLoadMoreBefore={result.isFirstPage ? undefined : result.loadFirst}\n onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onUpdate={async (id, prod) => {\n try {\n await lib.instance.updateProduct(state.token, id, prod);\n setNotif({\n message: i18n.str`product updated successfully`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`could not update the product`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n }\n return\n }}\n onSelect={(product) => onSelect(product.id)}\n onDelete={(prod: TalerMerchantApi.ProductDetail & WithId) =>\n setDeleting(prod)\n }\n />\n\n {deleting && (\n <ConfirmModal\n label={`Delete product`}\n description={`Delete the product \"${deleting.description}\"`}\n danger\n active\n onCancel={() => setDeleting(null)}\n onConfirm={async (): Promise<void> => {\n try {\n await lib.instance.deleteProduct(state.token, deleting.id);\n setNotif({\n message: i18n.str`Product \"${deleting.description}\" (ID: ${deleting.id}) has been deleted`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`Failed to delete product`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n }\n setDeleting(null);\n }}\n >\n <p>\n If you delete the product named <b>&quot;{deleting.description}&quot;</b> (ID:{\" \"}\n <b>{deleting.id}</b>), the stock and related information will be lost\n </p>\n <p class=\"warning\">\n Deleting an product <b>cannot be undone</b>.\n </p>\n </ConfirmModal>\n )}\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountString, Amounts, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { ComponentChildren, Fragment, VNode, h } 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 { dateFormatForSettings, usePreference } from \"../../../../hooks/preference.js\";\n\ntype Entity = TalerMerchantApi.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: TalerMerchantApi.ProductPatchDetail,\n ) => Promise<void>;\n onCreate: () => void;\n selected?: boolean;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onSelect,\n onUpdate,\n onDelete,\n onLoadMoreAfter,\n onLoadMoreBefore\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>Inventory</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 onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\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: TalerMerchantApi.ProductPatchDetail,\n ) => Promise<void>;\n onDelete: (id: Entity) => void;\n rowSelectionHandler: StateUpdater<string | undefined>;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n rowSelection,\n rowSelectionHandler,\n instances,\n onSelect,\n onUpdate,\n onDelete,\n onLoadMoreAfter,\n onLoadMoreBefore\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreference();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button class=\"button is-fullwidth\" onClick={onLoadMoreBefore}>\n <i18n.Translate>load first page</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>Image</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Description</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Price per unit</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Taxes</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sales</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 dateFormatForSettings(settings),\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 maxHeight: \"2em\",\n width: \"auto\",\n height: \"auto\",\n }}\n />\n </td>\n <td\n class=\"has-tooltip-right\"\n data-tooltip={i.description}\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {i.description.length > 30 ? i.description.substring(0, 30) + \"...\" : 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 <span style={{ \"whiteSpace\": \"nowrap\" }}>\n\n {i.total_sold} {i.unit}\n </span>\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(() =>\n rowSelectionHandler(undefined),\n )\n }\n onCancel={() => rowSelectionHandler(undefined)}\n />\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button class=\"button is-fullwidth\" \n data-tooltip={i18n.str`load more products after the last one`}\n onClick={onLoadMoreAfter}>\n <i18n.Translate>load next page</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\ninterface FastProductUpdateFormProps {\n product: Entity;\n onUpdate: (\n data: TalerMerchantApi.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-expanded\">\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 as AmountString,\n })\n }\n >\n <i18n.Translate>Confirm update</i18n.Translate>\n </button>\n </span>\n </div>\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 ${currentStock + value.incoming\n })`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as Record<string,unknown>)[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 as AmountString,\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-magnify 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: TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useProductDetails } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport type Entity = TalerMerchantApi.ProductAddDetail;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n pid: string;\n}\nexport default function UpdateProduct({\n pid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const result = useProductDetails(pid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n product={{ ...result.body, product_id: pid }}\n onBack={onBack}\n onUpdate={(data) => {\n return lib.instance.updateProduct(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { ProductForm } from \"../../../../components/product/ProductForm.js\";\nimport { useListener } from \"../../../../hooks/listener.js\";\n\ntype Entity = TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useMerchantApiContext, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = TalerMerchantApi.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateTransfer({ onConfirm, onBack }: Props): VNode {\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\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: TalerMerchantApi.TemplateAddDetails) => {\n return lib.instance.addTemplate(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AmountString,\n Amounts,\n Duration,\n TalerError,\n TalerMerchantApi,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } 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 { InputToggle } from \"../../../../components/form/InputToggle.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\nimport { TextField } from \"../../../../components/form/TextField.js\";\nimport { useInstanceOtpDevices } from \"../../../../hooks/otp.js\";\n\n// type Entity = TalerMerchantApi.TemplateAddDetails & { type: Steps };\ntype Entity = {\n id?: string;\n description?: string;\n otpId?: string;\n summary?: string;\n amount?: AmountString;\n minimum_age?: number;\n pay_duration?: Duration;\n summary_editable?: boolean;\n amount_editable?: boolean;\n currency_editable?: boolean;\n};\n\ninterface Props {\n onCreate: (d: TalerMerchantApi.TemplateAddDetails) => Promise<void>;\n onBack?: () => void;\n}\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { url: backendUrl, config } = useMerchantApiContext();\n const devices = useInstanceOtpDevices();\n\n const [state, setState] = useState<Partial<Entity>>({\n minimum_age: 0,\n pay_duration: {\n d_ms: 1000 * 60 * 30, //30 min\n },\n });\n\n function updateState(up: (s: Partial<Entity>) => Partial<Entity>) {\n setState((old) => {\n const newState = up(old);\n if (!newState.amount_editable) {\n newState.currency_editable = false;\n }\n return newState;\n });\n }\n\n const parsedPrice = !state.amount ? undefined : Amounts.parse(state.amount);\n\n const errors: FormErrors<Entity> = {\n id: !state.id\n ? i18n.str`should not be empty`\n : !/[a-zA-Z0-9]*/.test(state.id)\n ? i18n.str`no valid. only characters and numbers`\n : undefined,\n description: !state.description ? i18n.str`should not be empty` : undefined,\n amount: !state.amount\n ? undefined\n : !parsedPrice\n ? i18n.str`not valid`\n : Amounts.isZero(parsedPrice)\n ? i18n.str`must be greater than 0`\n : undefined,\n minimum_age:\n state.minimum_age && state.minimum_age < 0\n ? i18n.str`should be greater that 0`\n : undefined,\n pay_duration: !state.pay_duration\n ? i18n.str`can't be empty`\n : state.pay_duration.d_ms === \"forever\"\n ? undefined\n : state.pay_duration.d_ms < 1000 //less than one second\n ? i18n.str`to short`\n : undefined,\n };\n\n const cList = Object.values(config.currencies).map((d) => d.name);\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as Record<string, unknown>)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onCreate({\n template_id: state.id!,\n template_description: state.description!,\n template_contract: {\n minimum_age: state.minimum_age!,\n pay_duration: Duration.toTalerProtocolDuration(state.pay_duration!),\n amount: state.amount_editable ? undefined : state.amount,\n summary: state.summary_editable ? undefined : state.summary,\n currency:\n cList.length > 1 && state.currency_editable\n ? undefined\n : config.currency,\n },\n editable_defaults: {\n amount: !state.amount_editable ? undefined : state.amount,\n summary: !state.summary_editable ? undefined : state.summary,\n currency:\n cList.length === 1 || !state.currency_editable\n ? undefined\n : config.currency,\n },\n otp_id: state.otpId!,\n });\n };\n const deviceList =\n !devices || devices instanceof TalerError || devices.type === \"fail\"\n ? []\n : devices.body.otp_devices;\n const deviceMap = deviceList.reduce(\n (prev, cur) => {\n prev[cur.otp_device_id] = cur.device_description as TranslatedString;\n return prev;\n },\n {} as Record<string, TranslatedString>,\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={updateState}\n errors={errors}\n >\n <InputWithAddon<Entity>\n name=\"id\"\n help={\n new URL(`templates/${state.id ?? \"\"}`, backendUrl.href).href\n }\n label={i18n.str`Identifier`}\n tooltip={i18n.str`Name of the template in URLs.`}\n />\n <Input<Entity>\n name=\"description\"\n label={i18n.str`Description`}\n help=\"\"\n tooltip={i18n.str`Describe what this template stands for`}\n />\n\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`If specified, this template will create order with the same summary`}\n />\n <InputToggle<Entity>\n name=\"summary_editable\"\n label={i18n.str`Summary is editable`}\n tooltip={i18n.str`Allow the user to change the summary.`}\n />\n\n <InputCurrency<Entity>\n name=\"amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`If specified, this template will create order with the same price`}\n />\n <InputToggle<Entity>\n name=\"amount_editable\"\n label={i18n.str`Amount is editable`}\n tooltip={i18n.str`Allow the user to select the amount to pay.`}\n />\n {cList.length > 1 && (\n <Fragment>\n <InputToggle<Entity>\n name=\"currency_editable\"\n readonly={!state.amount_editable}\n label={i18n.str`Currency is editable`}\n tooltip={i18n.str`Allow the user to change currency.`}\n />\n <TextField name=\"sc\" label={i18n.str`Supported currencies`}>\n <i18n.Translate>supported currencies: {cList.join(\", \")}</i18n.Translate>\n </TextField>\n </Fragment>\n )}\n <InputNumber<Entity>\n name=\"minimum_age\"\n label={i18n.str`Minimum age`}\n help=\"\"\n tooltip={i18n.str`Is this contract restricted to some age?`}\n />\n <InputDuration<Entity>\n name=\"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 {!deviceList.length ? (\n <TextField\n name=\"otpId\"\n label={i18n.str`OTP device`}\n tooltip={i18n.str`Use to verify transaction while offline.`}\n >\n <i18n.Translate>No OTP device.</i18n.Translate>&nbsp;\n <a href=\"/otp-devices/new\">\n <i18n.Translate>Add one first</i18n.Translate>\n </a>\n </TextField>\n ) : (\n <InputSelector<Entity>\n name=\"otpId\"\n label={i18n.str`OTP device`}\n values={[\n undefined,\n ...deviceList.map((e) => e.otp_device_id),\n ]}\n toStr={(v?: string) => {\n if (!v) {\n return i18n.str`No device`;\n }\n return deviceMap[v];\n }}\n tooltip={i18n.str`Use to verify transaction in offline mode.`}\n />\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { JumpToElementById } from \"../../../../components/form/JumpToElementById.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { ConfirmModal } from \"../../../../components/modal/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n useInstanceTemplates\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\ninterface Props {\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 onCreate,\n onQR,\n onSelect,\n onNewOrder,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib } = useMerchantApiContext();\n const result = useInstanceTemplates();\n const [deleting, setDeleting] =\n useState<TalerMerchantApi.TemplateEntry | null>(null);\n const { state } = useSessionContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n <JumpToElementById\n testIfExist={async (id) => {\n const resp = await lib.instance.getTemplateDetails(state.token, id)\n return resp.type === \"ok\"\n }}\n onSelect={onSelect}\n description={i18n.str`jump to template with the given template ID`}\n placeholder={i18n.str`template id`}\n />\n\n <ListPage\n templates={result.body}\n onLoadMoreBefore={\n result.isFirstPage ? undefined: result.loadFirst\n }\n onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\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: TalerMerchantApi.TemplateEntry) => {\n setDeleting(e)\n }\n }\n />\n\n {deleting && (\n <ConfirmModal\n label={`Delete template`}\n description={`Delete the template \"${deleting.template_description}\"`}\n danger\n active\n onCancel={() => setDeleting(null)}\n onConfirm={async (): Promise<void> => {\n try {\n await lib.instance.deleteTemplate(state.token, deleting.template_id);\n setNotif({\n message: i18n.str`Template \"${deleting.template_description}\" (ID: ${deleting.template_id}) has been deleted`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`Failed to delete template`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n }\n setDeleting(null);\n }}\n >\n <p>\n If you delete the template <b>&quot;{deleting.template_description}&quot;</b> (ID:{\" \"}\n <b>{deleting.template_id}</b>) you may loose information\n </p>\n <p class=\"warning\">\n Deleting an template <b>cannot be undone</b>.\n </p>\n </ConfirmModal>\n )}\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\nimport { useState } from \"preact/hooks\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\n\nexport interface InstanceTemplateFilter {\n}\n\nexport function revalidateInstanceTemplates() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listTemplates\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceTemplates() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n const [offset, setOffset] = useState<string | undefined>();\n\n async function fetcher([token, bid]: [AccessToken, string]) {\n return await instance.listTemplates(token, {\n limit: PAGINATED_LIST_REQUEST,\n offset: bid,\n order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listTemplates\">,\n TalerHttpError\n >([session.token, offset, \"listTemplates\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.templates, offset, setOffset, (d) => d.template_id)\n\n}\n\nexport function revalidateTemplateDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getTemplateDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useTemplateDetails(templateId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n async function fetcher([tid, token]: [string, AccessToken]) {\n return await instance.getTemplateDetails(token, tid);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getTemplateDetails\">,\n TalerHttpError\n >([templateId, session.token, \"getTemplateDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n templates: TalerMerchantApi.TemplateEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: TalerMerchantApi.TemplateEntry) => void;\n onSelect: (e: TalerMerchantApi.TemplateEntry) => void;\n onNewOrder: (e: TalerMerchantApi.TemplateEntry) => void;\n onQR: (e: TalerMerchantApi.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\n return (\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 onLoadMoreAfter={onLoadMoreAfter}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\n\ntype Entity = TalerMerchantApi.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 onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n templates,\n onCreate,\n onDelete,\n onSelect,\n onQR,\n onNewOrder,\n onLoadMoreAfter,\n onLoadMoreBefore,\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 />\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 onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onNewOrder,\n onQR,\n onSelect,\n onLoadMoreBefore,\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 onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load first page</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 Use template\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 onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load next page</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-magnify 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport {\n useTemplateDetails\n} from \"../../../../hooks/templates.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { QrPage } from \"./QrPage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport type Entity = TalerMerchantApi.TransferInformation;\ninterface Props {\n onBack?: () => void;\n tid: string;\n}\n\nexport default function TemplateQrPage({\n tid,\n onBack,\n}: Props): VNode {\n const result = useTemplateDetails(tid);\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n\n return (\n <QrPage contract={result.body.template_contract} id={tid} onBack={onBack} />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi, stringifyPayTemplateUri } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\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\";\n\ntype Entity = TalerMerchantApi.UsingTemplateDetails;\n\ninterface Props {\n contract: TalerMerchantApi.TemplateContractDetails;\n id: string;\n onBack?: () => void;\n}\n\nexport function QrPage({ contract, id: templateId, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { config, url: backendUrl } = useMerchantApiContext();\n\n // const [state, setState] = useState<Partial<Entity>>({\n // amount: contract.amount,\n // summary: contract.summary,\n // });\n\n // const errors: FormErrors<Entity> = {};\n\n // const fixedAmount = !!contract.amount;\n // const fixedSummary = !!contract.summary;\n\n // const templateParams: Record<string, string> = {};\n // if (!fixedAmount) {\n // if (state.amount) {\n // templateParams.amount = state.amount;\n // } else {\n // templateParams.amount = config.currency;\n // }\n // }\n\n // if (!fixedSummary) {\n // templateParams.summary = state.summary ?? \"\";\n // }\n\n const merchantBaseUrl = backendUrl.href;\n\n const payTemplateUri = stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams: {},\n });\n\n return (\n <div>\n <section id=\"printThis\">\n <QR text={payTemplateUri} />\n <pre style={{ textAlign: \"center\" }}>\n <a href={payTemplateUri}>{payTemplateUri}</a>\n </pre>\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 {/* <p class=\"is-size-5 mt-5 mb-5\">\n <i18n.Translate>\n Here you can specify a default value for fields that are not\n fixed. Default values can be edited by the customer before the\n payment.\n </i18n.Translate>\n </p> */}\n\n <p></p>\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\n tooltip={i18n.str`Amount of the order`}\n />\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n readonly\n label={i18n.str`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 </div>\n </div>\n <div class=\"column\" />\n </div>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n useTemplateDetails,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport type Entity = TalerMerchantApi.TemplatePatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n tid: string;\n}\nexport default function UpdateTemplate({\n tid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n template={{...result.body, id: tid}}\n onBack={onBack}\n onUpdate={(data) => {\n return lib.instance.updateTemplate(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AmountString,\n Amounts,\n Duration,\n TalerError,\n TalerMerchantApi,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } 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 { InputToggle } from \"../../../../components/form/InputToggle.js\";\nimport { TextField } from \"../../../../components/form/TextField.js\";\nimport { useInstanceOtpDevices } from \"../../../../hooks/otp.js\";\n\ntype Entity = {\n description?: string;\n otpId?: string | null;\n summary?: string;\n amount?: AmountString;\n minimum_age?: number;\n pay_duration?: Duration;\n summary_editable?: boolean;\n amount_editable?: boolean;\n currency_editable?: boolean;\n};\n\ninterface Props {\n onUpdate: (d: TalerMerchantApi.TemplatePatchDetails) => Promise<void>;\n onBack?: () => void;\n template: TalerMerchantApi.TemplateDetails & WithId;\n}\n\nexport function UpdatePage({ template, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { url: backendUrl, config } = useMerchantApiContext();\n\n const [state, setState] = useState<Partial<Entity>>({\n description: template.template_description,\n minimum_age: template.template_contract.minimum_age,\n otpId: template.otp_id,\n pay_duration: template.template_contract.pay_duration\n ? Duration.fromTalerProtocolDuration(\n template.template_contract.pay_duration,\n )\n : undefined,\n summary:\n template.editable_defaults?.summary ?? template.template_contract.summary,\n amount:\n template.editable_defaults?.amount ??\n (template.template_contract.amount as AmountString | undefined),\n currency_editable: !!template.editable_defaults?.currency,\n summary_editable: !!template.editable_defaults?.summary,\n amount_editable: !!template.editable_defaults?.amount,\n });\n\n function updateState(up: (s: Partial<Entity>) => Partial<Entity>) {\n setState((old) => {\n const newState = up(old);\n if (!newState.amount_editable) {\n newState.currency_editable = false;\n }\n return newState;\n });\n }\n\n const devices = useInstanceOtpDevices();\n const deviceList =\n !devices || devices instanceof TalerError || devices.type === \"fail\"\n ? []\n : devices.body.otp_devices;\n const deviceMap = deviceList.reduce(\n (prev, cur) => {\n prev[cur.otp_device_id] = cur.device_description as TranslatedString;\n return prev;\n },\n {} as Record<string, TranslatedString>,\n );\n\n const parsedPrice = !state.amount ? undefined : Amounts.parse(state.amount);\n\n const errors: FormErrors<Entity> = {\n description: !state.description ? i18n.str`should not be empty` : undefined,\n amount: !state.amount\n ? undefined\n : !parsedPrice\n ? i18n.str`not valid`\n : Amounts.isZero(parsedPrice)\n ? i18n.str`must be greater than 0`\n : undefined,\n minimum_age:\n state.minimum_age && state.minimum_age < 0\n ? i18n.str`should be greater that 0`\n : undefined,\n pay_duration: !state.pay_duration\n ? i18n.str`can't be empty`\n : state.pay_duration.d_ms === \"forever\"\n ? undefined\n : state.pay_duration.d_ms < 1000 // less than one second\n ? i18n.str`to short`\n : undefined,\n };\n\n const cList = Object.values(config.currencies).map((d) => d.name);\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as Record<string, unknown>)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onUpdate({\n template_description: state.description!,\n template_contract: {\n minimum_age: state.minimum_age!,\n pay_duration: Duration.toTalerProtocolDuration(state.pay_duration!),\n amount: state.amount_editable ? undefined : state.amount,\n summary: state.summary_editable ? undefined : state.summary,\n currency:\n cList.length > 1 && state.currency_editable\n ? undefined\n : config.currency,\n },\n editable_defaults: {\n amount: !state.amount_editable ? undefined : state.amount,\n summary: !state.summary_editable ? undefined : state.summary,\n currency:\n cList.length === 1 || !state.currency_editable\n ? undefined\n : config.currency,\n },\n otp_id: state.otpId!,\n });\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 {new URL(`templates/${template.id}`, backendUrl.href).href}\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={updateState}\n errors={errors}\n >\n <Input<Entity>\n name=\"description\"\n label={i18n.str`Description`}\n help=\"\"\n tooltip={i18n.str`Describe what this template stands for`}\n />\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`If specified, this template will create order with the same summary`}\n />\n <InputToggle<Entity>\n name=\"summary_editable\"\n label={i18n.str`Summary is editable`}\n tooltip={i18n.str`Allow the user to change the summary.`}\n />\n <InputCurrency<Entity>\n name=\"amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`If specified, this template will create order with the same price`}\n />\n <InputToggle<Entity>\n name=\"amount_editable\"\n label={i18n.str`Amount is editable`}\n tooltip={i18n.str`Allow the user to select the amount to pay.`}\n />\n {cList.length > 1 && (\n <Fragment>\n <InputToggle<Entity>\n name=\"currency_editable\"\n readonly={!state.amount_editable}\n label={i18n.str`Currency is editable`}\n tooltip={i18n.str`Allow the user to change currency.`}\n />\n <TextField name=\"sc\" label={i18n.str`Supported currencies`}>\n <i18n.Translate>\n supported currencies: {cList.join(\", \")}\n </i18n.Translate>\n </TextField>\n </Fragment>\n )}\n <InputNumber<Entity>\n name=\"minimum_age\"\n label={i18n.str`Minimum age`}\n help=\"\"\n tooltip={i18n.str`Is this contract restricted to some age?`}\n />\n <InputDuration<Entity>\n name=\"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 {!deviceList.length ? (\n <TextField\n name=\"otpId\"\n label={i18n.str`OTP device`}\n tooltip={i18n.str`Use to verify transaction while offline.`}\n >\n <i18n.Translate>No OTP device.</i18n.Translate>&nbsp;\n <a href=\"/otp-devices/new\">\n <i18n.Translate>Add one first</i18n.Translate>\n </a>\n </TextField>\n ) : (\n <InputSelector<Entity>\n name=\"otpId\"\n label={i18n.str`OTP device`}\n values={[\n undefined,\n ...deviceList.map((e) => e.otp_device_id),\n ]}\n toStr={(v?: string) => {\n if (!v) {\n return i18n.str`No device`;\n }\n return deviceMap[v];\n }}\n tooltip={i18n.str`Use to verify transaction in offline mode.`}\n />\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport {\n useTemplateDetails\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UsePage } from \"./UsePage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport type Entity = TalerMerchantApi.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onOrderCreated: (id: string) => void;\n tid: string;\n}\n\nexport default function TemplateUsePage({\n tid,\n onOrderCreated,\n onBack,\n}: Props): VNode {\n const { lib } = useMerchantApiContext();\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <>\n <NotificationCard notification={notif} />\n <UsePage\n template={result.body}\n id={tid}\n onBack={onBack}\n onCreateOrder={(\n request: TalerMerchantApi.UsingTemplateDetails,\n ) => {\n\n return lib.instance.useTemplateCreateOrder(tid, request)\n .then((res) => {\n if (res.type === \"ok\") {\n onOrderCreated(res.body.order_id)\n } else {\n setNotif({\n message: i18n.str`could not create order from template`,\n type: \"ERROR\",\n });\n }\n })\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/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\";\n\ntype Entity = TalerMerchantApi.TemplateContractDetails;\n\ninterface Props {\n id: string;\n template: TalerMerchantApi.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 currency: template.editable_defaults?.currency ?? template.template_contract.currency,\n amount: template.editable_defaults?.amount ?? template.template_contract.amount,\n summary: template.editable_defaults?.summary ?? template.template_contract.summary,\n });\n\n const errors: FormErrors<Entity> = {\n amount:\n !state.amount\n ? i18n.str`Amount is required`\n : undefined,\n summary:\n !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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { useMerchantApiContext, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport { useInstanceDetails } from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { LoginPage } from \"../../login/index.js\";\nimport { DetailPage } from \"./DetailPage.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../notfound/index.js\";\n\ninterface Props {\n onChange: () => void;\n onCancel: () => void;\n}\n\nexport default function Token({\n onChange,\n onCancel,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const { lib } = useMerchantApiContext();\n const { logIn } = useSessionContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const result = useInstanceDetails()\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n const hasToken = result.body.auth.method === \"token\"\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <DetailPage\n onBack={onCancel}\n hasToken={hasToken}\n onClearToken={async (currentToken): Promise<void> => {\n try {\n await lib.instance.updateCurrentInstanceAuthentication(currentToken, {\n method: \"external\",\n })\n onChange();\n } catch (error) {\n if (error instanceof Error) {\n setNotif({\n message: i18n.str`Failed to clear token`,\n type: \"ERROR\",\n description: error.message,\n });\n }\n }\n }}\n onNewToken={async (currentToken, newToken): Promise<void> => {\n try {\n await lib.instance.updateCurrentInstanceAuthentication(currentToken, {\n token: newToken,\n method: \"token\"\n })\n const resp = await lib.authenticate.createAccessTokenBearer(newToken, {\n scope: \"write\",\n duration: {\n d_us: \"forever\"\n },\n refreshable: true,\n })\n if (resp.type === \"ok\") {\n logIn({ token: resp.body.token })\n onChange();\n } else {\n setNotif({\n message: i18n.str`Failed to set new token`,\n type: \"ERROR\",\n });\n }\n } catch (error) {\n if (error instanceof Error) {\n setNotif({\n message: i18n.str`Failed to set new token`,\n type: \"ERROR\",\n description: error.message,\n });\n }\n }\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/exception/AsyncButton.js\";\nimport { FormProvider } from \"../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../components/form/Input.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport { AccessToken } from \"@gnu-taler/taler-util\";\n\ninterface Props {\n hasToken: boolean | undefined;\n onClearToken: (c: AccessToken | undefined) => void;\n onNewToken: (c: AccessToken | undefined, s: AccessToken) => void;\n onBack?: () => void;\n}\n\nexport function DetailPage({\n hasToken,\n onBack,\n onNewToken,\n onClearToken,\n}: Props): 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 errors = {\n old_token:\n hasToken && !form.old_token\n ? i18n.str`you need your access token to perform the operation`\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 { state } = useSessionContext();\n\n const text = i18n.str`You are updating the access token from instance with id \"${state.instance}\"`;\n\n async function submitForm() {\n if (hasErrors) return;\n const oldToken = hasToken\n ? (form.old_token as AccessToken)\n : undefined;\n const newToken = form.new_token as AccessToken;\n onNewToken(oldToken, `secret-token:${newToken}` as AccessToken);\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\">{text}</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n <hr />\n\n {!hasToken && (\n <NotificationCard\n notification={{\n message: i18n.str`This instance doesn't have authentication token.`,\n description: i18n.str`You can leave it empty if there is another layer of security.`,\n type: \"WARN\",\n }}\n />\n )}\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 <Fragment>\n {hasToken && (\n <Fragment>\n <Input<State>\n name=\"old_token\"\n label={i18n.str`Current access token`}\n tooltip={i18n.str`access token currently in use`}\n inputType=\"password\"\n />\n <p>\n <i18n.Translate>\n Clearing the access token will mean public access to the\n instance.\n </i18n.Translate>\n </p>\n <div class=\"buttons is-right mt-5\">\n <button\n class=\"button\"\n onClick={() => {\n if (hasToken) {\n const oldToken = form.old_token as AccessToken;\n onClearToken(oldToken);\n } else {\n onClearToken(undefined);\n }\n }}\n >\n <i18n.Translate>Clear token</i18n.Translate>\n </button>\n </div>\n </Fragment>\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 </Fragment>\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <a class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n )}\n <AsyncButton\n type=\"submit\"\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 change</i18n.Translate>\n </AsyncButton>\n </div>\n </FormProvider>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useInstanceBankAccounts } from \"../../../../hooks/bank.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\nexport type Entity = TalerMerchantApi.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateTransfer({ onConfirm, onBack }: Props): VNode {\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const instance = useInstanceBankAccounts();\n const accounts =\n !instance || instance instanceof TalerError || instance.type === \"fail\"\n ? []\n : instance.body.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: TalerMerchantApi.TransferInformation) => {\n return lib.instance\n .informWireTransfer(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountString, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } 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 {\n CROCKFORD_BASE32_REGEX,\n URL_REGEX,\n} from \"../../../../utils/constants.js\";\n\ntype Entity = TalerMerchantApi.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\n const [state, setState] = useState<Partial<Entity>>({\n wtid: \"\",\n // payto_uri: ,\n // exchange_url: 'http://exchange.taler:8081/',\n credit_amount: `` as AmountString,\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { useInstanceBankAccounts } from \"../../../../hooks/bank.js\";\nimport { useInstanceTransfers } from \"../../../../hooks/transfer.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\n\ninterface Props {\n onCreate: () => void;\n}\ninterface Form {\n verified?: boolean;\n payto_uri?: string;\n}\n\nexport default function ListTransfer({\n onCreate,\n}: Props): VNode {\n const setFilter = (s?: boolean) => setForm({ ...form, verified: s });\n\n const [position, setPosition] = useState<string | undefined>(undefined);\n\n const instance = useInstanceBankAccounts();\n const accounts = !instance || (instance instanceof TalerError) || instance.type === \"fail\"\n ? []\n : instance.body.accounts.map((a) => a.payto_uri);\n const [form, setForm] = useState<Form>({ payto_uri: \"\" });\n\n const shoulUseDefaultAccount = accounts.length === 1\n useEffect(() => {\n if (shoulUseDefaultAccount) {\n setForm({...form, payto_uri: accounts[0]})\n }\n }, [shoulUseDefaultAccount])\n\n const isVerifiedTransfers = form.verified === true;\n const isNonVerifiedTransfers = form.verified === false;\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) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <ListPage\n accounts={accounts}\n transfers={result.body}\n onLoadMoreBefore={result.isFirstPage ? undefined: result.loadFirst }\n onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onDelete={() => {\n null;\n }}\n onShowAll={() => setFilter(undefined)}\n onShowUnverified={() => setFilter(false)}\n onShowVerified={() => setFilter(true)}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface InstanceTransferFilter {\n payto_uri?: string;\n verified?: boolean;\n position?: string;\n}\n\nexport function revalidateInstanceTransfers() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listWireTransfers\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceTransfers(\n args?: InstanceTransferFilter,\n updatePosition: (id: string | undefined) => void = (() => { }),\n) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useMerchantApiContext();\n\n // const [offset, setOffset] = useState<string | undefined>(args?.position);\n\n async function fetcher([token, o, p, v]: [AccessToken, string, string, boolean]) {\n return await instance.listWireTransfers(token, {\n paytoURI: p,\n verified: v,\n limit: PAGINATED_LIST_REQUEST,\n offset: o,\n order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listWireTransfers\">,\n TalerHttpError\n >([session.token, args?.position, args?.payto_uri, args?.verified, \"listWireTransfers\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.transfers, args?.position, updatePosition, (d) => String(d.transfer_serial_id))\n\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { h, VNode } from \"preact\";\nimport { FormProvider } from \"../../../../components/form/FormProvider.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { CardTable } from \"./Table.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\nexport interface Props {\n transfers: TalerMerchantApi.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`Account URI`}\n values={accounts}\n fromStr={(d) => {\n const idx = accounts.indexOf(d)\n if (idx === -1) return undefined;\n return d\n }}\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 onLoadMoreAfter={onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport { datetimeFormatForSettings, usePreference } from \"../../../../hooks/preference.js\";\n\ntype Entity = TalerMerchantApi.TransferDetails & WithId;\n\ninterface Props {\n transfers: Entity[];\n onDelete: (id: Entity) => void;\n onCreate: () => void;\n accounts: string[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n transfers,\n onCreate,\n onDelete,\n onLoadMoreAfter,\n onLoadMoreBefore,\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-arrow-left-right\" />\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 />\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 onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onLoadMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreference();\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 onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load first page</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 datetimeFormatForSettings(settings),\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 transfers after the last one`}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load next page</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-magnify 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, TalerMerchantInstanceHttpClient, TalerMerchantManagementResultByMethod, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport {\n useInstanceDetails,\n useManagedInstanceDetails,\n} from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { LoginPage } from \"../../login/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../notfound/index.js\";\n\nexport interface Props {\n onBack: () => void;\n onConfirm: () => void;\n\n // onUnauthorized: () => VNode;\n // onNotFound: () => VNode;\n // onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;\n // onUpdateError: (e: HttpError<TalerErrorDetail>) => void;\n}\n\nexport default function Update(props: Props): VNode {\n const { lib } = useMerchantApiContext();\n const updateInstance = lib.instance.updateCurrentInstance.bind(lib.instance)\n const result = useInstanceDetails();\n return CommonUpdate(props, result, updateInstance,);\n}\n\nexport function AdminUpdate(props: Props & { instanceId: string }): VNode {\n const { lib } = useMerchantApiContext();\n const t = lib.subInstanceApi(props.instanceId).instance;\n const updateInstance = t.updateCurrentInstance.bind(t)\n const result = useManagedInstanceDetails(props.instanceId);\n return CommonUpdate(props, result, updateInstance,);\n}\n\n\nfunction CommonUpdate(\n {\n onBack,\n onConfirm,\n }: Props,\n result: TalerMerchantManagementResultByMethod<\"getInstanceDetails\"> | TalerError | undefined,\n updateInstance: typeof TalerMerchantInstanceHttpClient.prototype.updateCurrentInstance,\n): VNode {\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n onBack={onBack}\n isLoading={false}\n selected={result.body}\n onUpdate={(\n d: TalerMerchantApi.InstanceReconfigurationMessage,\n ): Promise<void> => {\n if (state.status !== \"loggedIn\") {\n return Promise.resolve();\n }\n return updateInstance(state.token, d)\n .then(onConfirm)\n .catch((error: Error) =>\n setNotif({\n message: i18n.str`Failed to update 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Duration, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } 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 { useSessionContext } from \"../../../context/session.js\";\nimport { undefinedIfEmpty } from \"../../../utils/table.js\";\n\nexport type Entity = Omit<Omit<TalerMerchantApi.InstanceReconfigurationMessage, \"default_pay_delay\">, \"default_wire_transfer_delay\"> & {\n default_pay_delay: Duration,\n default_wire_transfer_delay: Duration,\n};\n\n//TalerMerchantApi.InstanceAuthConfigurationMessage\ninterface Props {\n onUpdate: (d: TalerMerchantApi.InstanceReconfigurationMessage) => void;\n selected: TalerMerchantApi.QueryInstancesResponse;\n isLoading: boolean;\n onBack: () => void;\n}\n\nfunction convert(\n from: TalerMerchantApi.QueryInstancesResponse,\n): Entity {\n const { default_pay_delay, default_wire_transfer_delay, ...rest } = from;\n\n const defaults = {\n use_stefan: false,\n default_pay_delay: Duration.fromTalerProtocolDuration(default_pay_delay),\n default_wire_transfer_delay: Duration.fromTalerProtocolDuration(default_wire_transfer_delay),\n };\n return { ...defaults, ...rest };\n}\n\nexport function UpdatePage({\n onUpdate,\n selected,\n onBack,\n}: Props): VNode {\n const { state } = useSessionContext();\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 user_type: !value.user_type\n ? i18n.str`required`\n : value.user_type !== \"business\" && value.user_type !== \"individual\"\n ? i18n.str`should be business or individual`\n : undefined,\n default_pay_delay: !value.default_pay_delay\n ? i18n.str`required`\n : !!value.default_wire_transfer_delay &&\n value.default_wire_transfer_delay.d_ms !== \"forever\" &&\n value.default_pay_delay.d_ms !== \"forever\" &&\n value.default_pay_delay.d_ms > value.default_wire_transfer_delay.d_ms ?\n i18n.str`pay delay can't be greater than wire transfer delay` : 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 = async (): Promise<void> => {\n const { default_pay_delay, default_wire_transfer_delay, ...rest } = value as Required<Entity>;\n const result: TalerMerchantApi.InstanceReconfigurationMessage = {\n default_pay_delay: Duration.toTalerProtocolDuration(default_pay_delay),\n default_wire_transfer_delay: Duration.toTalerProtocolDuration(default_wire_transfer_delay),\n ...rest,\n }\n await onUpdate(result);\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>{state.instance}</b>\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useMerchantApiContext, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\nexport type Entity = TalerMerchantApi.WebhookAddDetails;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateWebhook({ onConfirm, onBack }: Props): VNode {\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: TalerMerchantApi.WebhookAddDetails) => {\n return lib.instance.addWebhook(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, 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 { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\ntype Entity = TalerMerchantApi.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`\n : state.event_type !== \"pay\" && state.event_type !== \"refund\" ? i18n.str`it should be \"pay\" or \"refund\"`\n : 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 <InputSelector\n name=\"event_type\"\n label={i18n.str`Event`}\n values={[\n i18n.str`Choose one...`,\n i18n.str`pay`,\n i18n.str`refund`,\n ]}\n tooltip={i18n.str`The event of the webhook: why the webhook is used`}\n />\n <InputSelector\n name=\"http_method\"\n label={i18n.str`Method`}\n values={[\n i18n.str`Choose one...`,\n i18n.str`GET`,\n i18n.str`POST`,\n i18n.str`PUT`,\n i18n.str`PATCH`,\n i18n.str`HEAD`,\n ]}\n tooltip={i18n.str`Method used by the webhook`}\n />\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\n <p>\n The text below support <a target=\"_blank\" rel=\"noreferrer\" href=\"https://mustache.github.io/mustache.5.html\">mustache</a> template engine. Any string\n between <pre style={{ display: \"inline\", padding: 0 }}>&#123;&#123;</pre> and <pre style={{ display: \"inline\", padding: 0 }}>&#125;&#125;</pre> will\n be replaced with replaced with the value of the corresponding variable.\n </p>\n <p>\n For example <pre style={{ display: \"inline\", padding: 0 }}>&#123;&#123;contract_terms.amount&#125;&#125;</pre> will be replaced\n with the the order's price\n </p>\n <p>\n The short list of variables are:\n </p>\n <div class=\"menu\">\n\n <ul class=\"menu-list\" style={{ listStyleType: \"disc\", marginLeft: 20 }}>\n <li><b>contract_terms.summary:</b> order's description </li>\n <li><b>contract_terms.amount:</b> order's price </li>\n <li><b>order_id:</b> order's unique identification </li>\n {state.event_type === \"refund\" && <Fragment>\n <li><b>refund_amout:</b> the amount that was being refunded</li>\n <li><b>reason:</b> the reason entered by the merchant staff for granting the refund</li>\n <li><b>timestamp:</b> time of the refund in nanoseconds since 1970</li>\n </Fragment>}\n </ul>\n </div>\n {/* <Input<Entity>\n name=\"header_template\"\n label={i18n.str`Http 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`Http 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n TalerMerchantApi,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceWebhooks } from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\ninterface Props {\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\n\nexport default function ListWebhooks({ onCreate, onSelect }: Props): VNode {\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n const result = useInstanceWebhooks();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n webhooks={result.body.webhooks}\n onLoadMoreBefore={undefined} //result.isFirstPage ? undefined : result.loadFirst}\n onLoadMoreAfter={undefined} //result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.webhook_id);\n }}\n onDelete={(e: TalerMerchantApi.WebhookEntry) => {\n return lib.instance\n .deleteWebhook(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { CardTable } from \"./Table.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\nexport interface Props {\n webhooks: TalerMerchantApi.WebhookEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: TalerMerchantApi.WebhookEntry) => void;\n onSelect: (e: TalerMerchantApi.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 onLoadMoreAfter={onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\n\ntype Entity = TalerMerchantApi.WebhookEntry;\n\ninterface Props {\n webhooks: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onCreate: () => void;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n webhooks,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\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 rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\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 onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onSelect,\n onLoadMoreBefore,\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 onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load first page</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 onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load next page</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-magnify 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useMerchantApiContext,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n useWebhookDetails,\n} from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport type Entity = TalerMerchantApi.WebhookPatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n tid: string;\n}\nexport default function UpdateWebhook({\n tid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const { lib } = useMerchantApiContext();\n const { state } = useSessionContext();\n const result = useWebhookDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n webhook={{ ...result.body, id: tid }}\n onBack={onBack}\n onUpdate={(data) => {\n return lib.instance.updateWebhook(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\ntype Entity = TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useLang, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../components/form/FormProvider.js\";\nimport { InputSelector } from \"../../components/form/InputSelector.js\";\nimport { InputToggle } from \"../../components/form/InputToggle.js\";\nimport { LangSelector } from \"../../components/menu/LangSelector.js\";\nimport { Preferences, usePreference } from \"../../hooks/preference.js\";\nimport { AbsoluteTime } from \"@gnu-taler/taler-util\";\n\nfunction getBrowserLang(): string | undefined {\n if (typeof window === \"undefined\") return 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 Settings({ onClose }: { onClose?: () => void }): VNode {\n const { i18n } = useTranslationContext();\n const borwserLang = getBrowserLang();\n const { update } = useLang(undefined, {});\n\n const [value, , updateValue] = usePreference();\n const errors: FormErrors<Preferences> = {};\n\n function valueHandler(s: (d: Partial<Preferences>) => Partial<Preferences>): void {\n const next = s(value);\n const v: Preferences = {\n advanceOrderMode: next.advanceOrderMode ?? false,\n hideMissingAccountUntil: next.hideMissingAccountUntil ?? AbsoluteTime.never(),\n hideKycUntil: next.hideKycUntil ?? AbsoluteTime.never(),\n dateFormat: next.dateFormat ?? \"ymd\",\n };\n updateValue(v);\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 <div>\n <FormProvider<Preferences>\n name=\"settings\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n <i18n.Translate>Language</i18n.Translate>\n <span\n class=\"icon has-tooltip-right\"\n data-tooltip={\n \"Force language setting instance of taking the browser\"\n }\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </label>\n </div>\n <div class=\"field field-body has-addons is-flex-grow-3\">\n <LangSelector />\n &nbsp;\n {borwserLang !== undefined && (\n <button\n data-tooltip={i18n.str`generate random secret key`}\n class=\"button is-info mr-2\"\n onClick={(e) => {\n update(borwserLang.substring(0, 2));\n e.preventDefault()\n }}\n >\n <i18n.Translate>Set default</i18n.Translate>\n </button>\n )}\n </div>\n </div>\n <InputToggle<Preferences>\n label={i18n.str`Advance order creation`}\n tooltip={i18n.str`Shows more options in the order creation form`}\n name=\"advanceOrderMode\"\n />\n <InputSelector<Preferences>\n name=\"dateFormat\"\n label={i18n.str`Date format`}\n expand={true}\n help={\n value.dateFormat === \"dmy\"\n ? \"31/12/2001\"\n : value.dateFormat === \"mdy\"\n ? \"12/31/2001\"\n : value.dateFormat === \"ymd\"\n ? \"2001/12/31\"\n : \"\"\n }\n toStr={(e) => {\n if (e === \"ymd\") return \"year month day\";\n if (e === \"mdy\") return \"month day year\";\n if (e === \"dmy\") return \"day month year\";\n return \"choose one\";\n }}\n values={[\"ymd\", \"mdy\", \"dmy\"]}\n tooltip={i18n.str`how the date is going to be displayed`}\n />\n </FormProvider>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n {onClose && (\n <section class=\"section is-main-section\">\n <button class=\"button\" onClick={onClose}>\n <i18n.Translate>Close</i18n.Translate>\n </button>\n </section>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { MerchantUiSettings } from \"../settings.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = MerchantUiSettings;\n\nconst initial: MerchantUiSettings = {};\nconst Context = createContext<Type>(initial);\n\nexport const useSettingsContext = (): Type => useContext(Context);\n\nexport const SettingsProvider = ({\n children,\n value,\n}: {\n value: MerchantUiSettings;\n children: ComponentChildren;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Codec,\n buildCodecForObject,\n canonicalizeBaseUrl,\n codecForString,\n codecOptional\n} from \"@gnu-taler/taler-util\";\n\nexport interface MerchantUiSettings {\n // Where merchant backend is localted\n // default: window.origin without \"webui/\"\n backendBaseURL?: string;\n}\n\n/**\n * Global settings for the bank UI.\n */\nconst defaultSettings: MerchantUiSettings = {\n backendBaseURL: buildDefaultBackendBaseURL(),\n};\n\nconst codecForBankUISettings = (): Codec<MerchantUiSettings> =>\n buildCodecForObject<MerchantUiSettings>()\n .property(\"backendBaseURL\", codecOptional(codecForString()))\n .build(\"MerchantUiSettings\");\n\nfunction removeUndefineField<T extends object>(obj: T): T {\n const keys = Object.keys(obj) as Array<keyof T>;\n return keys.reduce((prev, cur) => {\n if (typeof prev[cur] === \"undefined\") {\n delete prev[cur];\n }\n return prev;\n }, obj);\n}\n\nexport function fetchSettings(listener: (s: MerchantUiSettings) => void): void {\n fetch(\"./settings.json\")\n .then((resp) => resp.json())\n .then((json) => codecForBankUISettings().decode(json))\n .then((result) =>\n listener({\n ...defaultSettings,\n ...removeUndefineField(result),\n }),\n )\n .catch((e) => {\n console.log(\"failed to fetch settings\", e);\n listener(defaultSettings);\n });\n}\n\nexport function buildDefaultBackendBaseURL(): string {\n if (typeof window !== \"undefined\") {\n const currentLocation = new URL(\n window.location.pathname,\n window.location.origin,\n ).href;\n /**\n * By default, merchant backend serves the html content\n * from the /webui root. This should cover most of the \n * cases and the rootPath will be the merchant backend\n * URL where the instances are\n */\n return canonicalizeBaseUrl(currentLocation.replace(\"/webui\", \"\"));\n }\n throw Error(\"No default URL\")\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\nif (app) {\n render(<Application />, app);\n} else {\n console.error(\"HTML element with id 'app' not found.\");\n}\n"],
- "mappings": "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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,GAAE,EAAE,GAAE,IAAG,CAAC,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AAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAC1B,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACtF,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACtF,UAAU;AAAA,MAAM,UAAU;AAAA,MAC1B,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAC1B,UAAU;AAAA,MAAM,UAAU;AAAA,MAC1B,UAAU;AAAA,MAAM,UAAU;AAAA,IAC5B;AAUA,QAAI,eAAe,eAAe,eAAe;AAEjD,WAAO,UAAU;AAAA;AAAA;;;ACtEjB;AAAA;AAAA,QAAI,eAAe;AAAnB,QACIC,YAAW;AAGf,QAAI,UAAU;AAGd,QAAI,oBAAoB;AAAxB,QACI,wBAAwB;AAD5B,QAEI,sBAAsB;AAF1B,QAGI,eAAe,oBAAoB,wBAAwB;AAG/D,QAAI,UAAU,MAAM,eAAe;AAMnC,QAAI,cAAc,OAAO,SAAS,GAAG;AAoBrC,aAAS,OAAOC,SAAQ;AACtB,MAAAA,UAASD,UAASC,OAAM;AACxB,aAAOA,WAAUA,QAAO,QAAQ,SAAS,YAAY,EAAE,QAAQ,aAAa,EAAE;AAAA,IAChF;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC5CjB;AAAA;AACA,QAAI,cAAc;AASlB,aAAS,WAAWC,SAAQ;AAC1B,aAAOA,QAAO,MAAM,WAAW,KAAK,CAAC;AAAA,IACvC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA;AACA,QAAI,mBAAmB;AASvB,aAAS,eAAeC,SAAQ;AAC9B,aAAO,iBAAiB,KAAKA,OAAM;AAAA,IACrC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA;AACA,QAAI,gBAAgB;AAApB,QACI,oBAAoB;AADxB,QAEI,wBAAwB;AAF5B,QAGI,sBAAsB;AAH1B,QAII,eAAe,oBAAoB,wBAAwB;AAJ/D,QAKI,iBAAiB;AALrB,QAMI,eAAe;AANnB,QAOI,gBAAgB;AAPpB,QAQI,iBAAiB;AARrB,QASI,qBAAqB;AATzB,QAUI,eAAe;AAVnB,QAWI,eAAe;AAXnB,QAYI,aAAa;AAZjB,QAaI,eAAe,gBAAgB,iBAAiB,qBAAqB;AAGzE,QAAI,SAAS;AAAb,QACI,UAAU,MAAM,eAAe;AADnC,QAEI,UAAU,MAAM,eAAe;AAFnC,QAGI,WAAW;AAHf,QAII,YAAY,MAAM,iBAAiB;AAJvC,QAKI,UAAU,MAAM,eAAe;AALnC,QAMI,SAAS,OAAO,gBAAgB,eAAe,WAAW,iBAAiB,eAAe,eAAe;AAN7G,QAOI,SAAS;AAPb,QAQI,aAAa,QAAQ,UAAU,MAAM,SAAS;AARlD,QASI,cAAc,OAAO,gBAAgB;AATzC,QAUI,aAAa;AAVjB,QAWI,aAAa;AAXjB,QAYI,UAAU,MAAM,eAAe;AAZnC,QAaI,QAAQ;AAGZ,QAAI,cAAc,QAAQ,UAAU,MAAM,SAAS;AAAnD,QACI,cAAc,QAAQ,UAAU,MAAM,SAAS;AADnD,QAEI,kBAAkB,QAAQ,SAAS;AAFvC,QAGI,kBAAkB,QAAQ,SAAS;AAHvC,QAII,WAAW,aAAa;AAJ5B,QAKI,WAAW,MAAM,aAAa;AALlC,QAMI,YAAY,QAAQ,QAAQ,QAAQ,CAAC,aAAa,YAAY,UAAU,EAAE,KAAK,GAAG,IAAI,MAAM,WAAW,WAAW;AANtH,QAOI,aAAa;AAPjB,QAQI,aAAa;AARjB,QASI,QAAQ,WAAW,WAAW;AATlC,QAUI,UAAU,QAAQ,CAAC,WAAW,YAAY,UAAU,EAAE,KAAK,GAAG,IAAI,MAAM;AAG5E,QAAI,gBAAgB,OAAO;AAAA,MACzB,UAAU,MAAM,UAAU,MAAM,kBAAkB,QAAQ,CAAC,SAAS,SAAS,GAAG,EAAE,KAAK,GAAG,IAAI;AAAA,MAC9F,cAAc,MAAM,kBAAkB,QAAQ,CAAC,SAAS,UAAU,aAAa,GAAG,EAAE,KAAK,GAAG,IAAI;AAAA,MAChG,UAAU,MAAM,cAAc,MAAM;AAAA,MACpC,UAAU,MAAM;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,GAAG,GAAG,GAAG;AAShB,aAAS,aAAaC,SAAQ;AAC5B,aAAOA,QAAO,MAAM,aAAa,KAAK,CAAC;AAAA,IACzC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpEjB;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,iBAAiB;AADrB,QAEIC,YAAW;AAFf,QAGI,eAAe;AAqBnB,aAAS,MAAMC,SAAQ,SAAS,OAAO;AACrC,MAAAA,UAASD,UAASC,OAAM;AACxB,gBAAU,QAAQ,SAAY;AAE9B,UAAI,YAAY,QAAW;AACzB,eAAO,eAAeA,OAAM,IAAI,aAAaA,OAAM,IAAI,WAAWA,OAAM;AAAA,MAC1E;AACA,aAAOA,QAAO,MAAM,OAAO,KAAK,CAAC;AAAA,IACnC;AAEA,WAAO,UAAU;AAAA;AAAA;;;AClCjB;AAAA;AAAA,QAAI,cAAc;AAAlB,QACI,SAAS;AADb,QAEI,QAAQ;AAGZ,QAAI,SAAS;AAGb,QAAI,SAAS,OAAO,QAAQ,GAAG;AAS/B,aAAS,iBAAiB,UAAU;AAClC,aAAO,SAASC,SAAQ;AACtB,eAAO,YAAY,MAAM,OAAOA,OAAM,EAAE,QAAQ,QAAQ,EAAE,CAAC,GAAG,UAAU,EAAE;AAAA,MAC5E;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACvBjB;AAAA;AAAA,QAAI,mBAAmB;AAuBvB,QAAIC,aAAY,iBAAiB,SAAS,QAAQ,MAAM,OAAO;AAC7D,aAAO,UAAU,QAAQ,MAAM,MAAM,KAAK,YAAY;AAAA,IACxD,CAAC;AAED,WAAO,UAAUA;AAAA;AAAA;;;AC3BjB;AAAA;AASA,aAAS,UAAUC,QAAO,OAAO,KAAK;AACpC,UAAI,QAAQ,IACR,SAASA,OAAM;AAEnB,UAAI,QAAQ,GAAG;AACb,gBAAQ,CAAC,QAAQ,SAAS,IAAK,SAAS;AAAA,MAC1C;AACA,YAAM,MAAM,SAAS,SAAS;AAC9B,UAAI,MAAM,GAAG;AACX,eAAO;AAAA,MACT;AACA,eAAS,QAAQ,MAAM,IAAM,MAAM,UAAW;AAC9C,iBAAW;AAEX,UAAI,SAAS,MAAM,MAAM;AACzB,aAAO,EAAE,QAAQ,QAAQ;AACvB,eAAO,KAAK,IAAIA,OAAM,QAAQ,KAAK;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC9BjB;AAAA;AAAA,QAAI,YAAY;AAWhB,aAAS,UAAUC,QAAO,OAAO,KAAK;AACpC,UAAI,SAASA,OAAM;AACnB,YAAM,QAAQ,SAAY,SAAS;AACnC,aAAQ,CAAC,SAAS,OAAO,SAAUA,SAAQ,UAAUA,QAAO,OAAO,GAAG;AAAA,IACxE;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AACA,QAAI,gBAAgB;AAApB,QACI,oBAAoB;AADxB,QAEI,wBAAwB;AAF5B,QAGI,sBAAsB;AAH1B,QAII,eAAe,oBAAoB,wBAAwB;AAJ/D,QAKI,aAAa;AAGjB,QAAI,QAAQ;AAGZ,QAAI,eAAe,OAAO,MAAM,QAAQ,gBAAiB,eAAe,aAAa,GAAG;AASxF,aAAS,WAAWC,SAAQ;AAC1B,aAAO,aAAa,KAAKA,OAAM;AAAA,IACjC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA;AAOA,aAAS,aAAaC,SAAQ;AAC5B,aAAOA,QAAO,MAAM,EAAE;AAAA,IACxB;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACXjB;AAAA;AACA,QAAI,gBAAgB;AAApB,QACI,oBAAoB;AADxB,QAEI,wBAAwB;AAF5B,QAGI,sBAAsB;AAH1B,QAII,eAAe,oBAAoB,wBAAwB;AAJ/D,QAKI,aAAa;AAGjB,QAAI,WAAW,MAAM,gBAAgB;AAArC,QACI,UAAU,MAAM,eAAe;AADnC,QAEI,SAAS;AAFb,QAGI,aAAa,QAAQ,UAAU,MAAM,SAAS;AAHlD,QAII,cAAc,OAAO,gBAAgB;AAJzC,QAKI,aAAa;AALjB,QAMI,aAAa;AANjB,QAOI,QAAQ;AAGZ,QAAI,WAAW,aAAa;AAA5B,QACI,WAAW,MAAM,aAAa;AADlC,QAEI,YAAY,QAAQ,QAAQ,QAAQ,CAAC,aAAa,YAAY,UAAU,EAAE,KAAK,GAAG,IAAI,MAAM,WAAW,WAAW;AAFtH,QAGI,QAAQ,WAAW,WAAW;AAHlC,QAII,WAAW,QAAQ,CAAC,cAAc,UAAU,KAAK,SAAS,YAAY,YAAY,QAAQ,EAAE,KAAK,GAAG,IAAI;AAG5G,QAAI,YAAY,OAAO,SAAS,QAAQ,SAAS,OAAO,WAAW,OAAO,GAAG;AAS7E,aAAS,eAAeC,SAAQ;AAC9B,aAAOA,QAAO,MAAM,SAAS,KAAK,CAAC;AAAA,IACrC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACvCjB;AAAA;AAAA,QAAI,eAAe;AAAnB,QACI,aAAa;AADjB,QAEI,iBAAiB;AASrB,aAAS,cAAcC,SAAQ;AAC7B,aAAO,WAAWA,OAAM,IACpB,eAAeA,OAAM,IACrB,aAAaA,OAAM;AAAA,IACzB;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,aAAa;AADjB,QAEI,gBAAgB;AAFpB,QAGIC,YAAW;AASf,aAAS,gBAAgB,YAAY;AACnC,aAAO,SAASC,SAAQ;AACtB,QAAAA,UAASD,UAASC,OAAM;AAExB,YAAI,aAAa,WAAWA,OAAM,IAC9B,cAAcA,OAAM,IACpB;AAEJ,YAAI,MAAM,aACN,WAAW,CAAC,IACZA,QAAO,OAAO,CAAC;AAEnB,YAAI,WAAW,aACX,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,IAChCA,QAAO,MAAM,CAAC;AAElB,eAAO,IAAI,UAAU,EAAE,IAAI;AAAA,MAC7B;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;AChCjB;AAAA;AAAA,QAAI,kBAAkB;AAmBtB,QAAI,aAAa,gBAAgB,aAAa;AAE9C,WAAO,UAAU;AAAA;AAAA;;;ACrBjB;AAAA;AAAA,QAAIC,YAAW;AAAf,QACI,aAAa;AAiBjB,aAAS,WAAWC,SAAQ;AAC1B,aAAO,WAAWD,UAASC,OAAM,EAAE,YAAY,CAAC;AAAA,IAClD;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,mBAAmB;AAsBvB,QAAIC,aAAY,iBAAiB,SAAS,QAAQ,MAAM,OAAO;AAC7D,aAAO,KAAK,YAAY;AACxB,aAAO,UAAU,QAAQ,WAAW,IAAI,IAAI;AAAA,IAC9C,CAAC;AAED,WAAO,UAAUA;AAAA;AAAA;;;AC5BjB;AAAA;AAAA,QAAI,kBAAkB;AAAtB,QACI,aAAa;AADjB,QAEI,eAAe;AAuBnB,aAASC,SAAQC,SAAQ,UAAU;AACjC,UAAI,SAAS,CAAC;AACd,iBAAW,aAAa,UAAU,CAAC;AAEnC,iBAAWA,SAAQ,SAAS,OAAO,KAAKA,SAAQ;AAC9C,wBAAgB,QAAQ,SAAS,OAAO,KAAKA,OAAM,GAAG,KAAK;AAAA,MAC7D,CAAC;AACD,aAAO;AAAA,IACT;AAEA,WAAO,UAAUD;AAAA;AAAA;;;ACnCjB;AAAA;AAQA,WAAO,UAAU,SAAS,OAAO;AAC/B,aAAOE,UAAS,YAAY,KAAK,GAAG,KAAK;AAAA,IAC3C;AAEA,WAAO,QAAQ,QAAQA;AAEvB,aAASA,UAAS,OAAO,OAAO;AAC9B,UAAI,SAAS,MAAM,QACf,SAAS,IAAI,MAAM,MAAM,GACzB,UAAU,CAAC,GACXC,KAAI,QAEJ,gBAAgB,kBAAkB,KAAK,GACvC,YAAY,cAAc,KAAK;AAGnC,YAAM,QAAQ,SAAS,MAAM;AAC3B,YAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,GAAG;AACtD,gBAAM,IAAI,MAAM,+DAA+D;AAAA,QACjF;AAAA,MACF,CAAC;AAED,aAAOA,MAAK;AACV,YAAI,CAAC,QAAQA,EAAC;AAAG,gBAAM,MAAMA,EAAC,GAAGA,IAAG,oBAAI,IAAI,CAAC;AAAA,MAC/C;AAEA,aAAO;AAEP,eAAS,MAAM,MAAMA,IAAG,cAAc;AACpC,YAAG,aAAa,IAAI,IAAI,GAAG;AACzB,cAAI;AACJ,cAAI;AACF,sBAAU,gBAAgB,KAAK,UAAU,IAAI;AAAA,UAC/C,SAAQC,IAAG;AACT,sBAAU;AAAA,UACZ;AACA,gBAAM,IAAI,MAAM,sBAAsB,OAAO;AAAA,QAC/C;AAEA,YAAI,CAAC,UAAU,IAAI,IAAI,GAAG;AACxB,gBAAM,IAAI,MAAM,iFAA+E,KAAK,UAAU,IAAI,CAAC;AAAA,QACrH;AAEA,YAAI,QAAQD,EAAC;AAAG;AAChB,gBAAQA,EAAC,IAAI;AAEb,YAAI,WAAW,cAAc,IAAI,IAAI,KAAK,oBAAI,IAAI;AAClD,mBAAW,MAAM,KAAK,QAAQ;AAE9B,YAAIA,KAAI,SAAS,QAAQ;AACvB,uBAAa,IAAI,IAAI;AACrB,aAAG;AACD,gBAAI,QAAQ,SAAS,EAAEA,EAAC;AACxB,kBAAM,OAAO,UAAU,IAAI,KAAK,GAAG,YAAY;AAAA,UACjD,SAASA;AACT,uBAAa,OAAO,IAAI;AAAA,QAC1B;AAEA,eAAO,EAAE,MAAM,IAAI;AAAA,MACrB;AAAA,IACF;AAEA,aAAS,YAAY,KAAI;AACvB,UAAI,MAAM,oBAAI,IAAI;AAClB,eAASA,KAAI,GAAG,MAAM,IAAI,QAAQA,KAAI,KAAKA,MAAK;AAC9C,YAAI,OAAO,IAAIA,EAAC;AAChB,YAAI,IAAI,KAAK,CAAC,CAAC;AACf,YAAI,IAAI,KAAK,CAAC,CAAC;AAAA,MACjB;AACA,aAAO,MAAM,KAAK,GAAG;AAAA,IACvB;AAEA,aAAS,kBAAkB,KAAI;AAC7B,UAAI,QAAQ,oBAAI,IAAI;AACpB,eAASA,KAAI,GAAG,MAAM,IAAI,QAAQA,KAAI,KAAKA,MAAK;AAC9C,YAAI,OAAO,IAAIA,EAAC;AAChB,YAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;AAAG,gBAAM,IAAI,KAAK,CAAC,GAAG,oBAAI,IAAI,CAAC;AACrD,YAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;AAAG,gBAAM,IAAI,KAAK,CAAC,GAAG,oBAAI,IAAI,CAAC;AACrD,cAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC;AAAA,MAChC;AACA,aAAO;AAAA,IACT;AAEA,aAAS,cAAc,KAAI;AACzB,UAAI,MAAM,oBAAI,IAAI;AAClB,eAASA,KAAI,GAAG,MAAM,IAAI,QAAQA,KAAI,KAAKA,MAAK;AAC9C,YAAI,IAAI,IAAIA,EAAC,GAAGA,EAAC;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACjGA;AAAA;AAiBA,QAAIE,UAAS,WAAW;AAWtB,UAAIA,UAAS,SAAS,YAAY,sBAAsB;AAEtD,YAAI,OAAO;AACX,YAAI,OAAO;AAEX,YAAI,cAAc;AAClB,YAAI,wBAAwB,uBAAuB,oBAAoB;AACvE,YAAI,WAAW;AACf,YAAI,eAAe;AACnB,YAAI,aAAa;AACjB,YAAI,YAAY,CAAC;AAEjB,YAAI,QAAQ,CAAC;AAEb,YAAI,WAAW,SAAS,MAAM,aAAa;AAEzC,yBAAe,cAAc,IAAI;AACjC,qBAAW,SAAS,aAAa;AAC/B,gBAAI,UAAU,IAAI,MAAM,WAAW;AACnC,qBAAS,MAAM,GAAG,MAAM,aAAa,OAAO,GAAG;AAC7C,sBAAQ,GAAG,IAAI,IAAI,MAAM,WAAW;AACpC,uBAAS,MAAM,GAAG,MAAM,aAAa,OAAO,GAAG;AAC7C,wBAAQ,GAAG,EAAE,GAAG,IAAI;AAAA,cACtB;AAAA,YACF;AACA,mBAAO;AAAA,UACT,EAAE,YAAY;AAEd,oCAA0B,GAAG,CAAC;AAC9B,oCAA0B,eAAe,GAAG,CAAC;AAC7C,oCAA0B,GAAG,eAAe,CAAC;AAC7C,qCAA2B;AAC3B,6BAAmB;AACnB,wBAAc,MAAM,WAAW;AAE/B,cAAI,eAAe,GAAG;AACpB,4BAAgB,IAAI;AAAA,UACtB;AAEA,cAAI,cAAc,MAAM;AACtB,yBAAa,WAAW,aAAa,uBAAuB,SAAS;AAAA,UACvE;AAEA,kBAAQ,YAAY,WAAW;AAAA,QACjC;AAEA,YAAI,4BAA4B,SAAS,KAAK,KAAK;AAEjD,mBAASC,KAAI,IAAIA,MAAK,GAAGA,MAAK,GAAG;AAE/B,gBAAI,MAAMA,MAAK,MAAM,gBAAgB,MAAMA;AAAG;AAE9C,qBAASC,KAAI,IAAIA,MAAK,GAAGA,MAAK,GAAG;AAE/B,kBAAI,MAAMA,MAAK,MAAM,gBAAgB,MAAMA;AAAG;AAE9C,kBAAM,KAAKD,MAAKA,MAAK,MAAMC,MAAK,KAAKA,MAAK,MAClC,KAAKA,MAAKA,MAAK,MAAMD,MAAK,KAAKA,MAAK,MACpC,KAAKA,MAAKA,MAAK,KAAK,KAAKC,MAAKA,MAAK,GAAK;AAC9C,yBAAS,MAAMD,EAAC,EAAE,MAAMC,EAAC,IAAI;AAAA,cAC/B,OAAO;AACL,yBAAS,MAAMD,EAAC,EAAE,MAAMC,EAAC,IAAI;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,qBAAqB,WAAW;AAElC,cAAI,eAAe;AACnB,cAAI,UAAU;AAEd,mBAASC,KAAI,GAAGA,KAAI,GAAGA,MAAK,GAAG;AAE7B,qBAAS,MAAMA,EAAC;AAEhB,gBAAI,YAAY,OAAO,aAAa,KAAK;AAEzC,gBAAIA,MAAK,KAAK,eAAe,WAAW;AACtC,6BAAe;AACf,wBAAUA;AAAA,YACZ;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAEA,YAAI,qBAAqB,WAAW;AAElC,mBAASF,KAAI,GAAGA,KAAI,eAAe,GAAGA,MAAK,GAAG;AAC5C,gBAAI,SAASA,EAAC,EAAE,CAAC,KAAK,MAAM;AAC1B;AAAA,YACF;AACA,qBAASA,EAAC,EAAE,CAAC,IAAKA,KAAI,KAAK;AAAA,UAC7B;AAEA,mBAASC,KAAI,GAAGA,KAAI,eAAe,GAAGA,MAAK,GAAG;AAC5C,gBAAI,SAAS,CAAC,EAAEA,EAAC,KAAK,MAAM;AAC1B;AAAA,YACF;AACA,qBAAS,CAAC,EAAEA,EAAC,IAAKA,KAAI,KAAK;AAAA,UAC7B;AAAA,QACF;AAEA,YAAI,6BAA6B,WAAW;AAE1C,cAAI,MAAM,OAAO,mBAAmB,WAAW;AAE/C,mBAASC,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK,GAAG;AAEtC,qBAASC,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK,GAAG;AAEtC,kBAAI,MAAM,IAAID,EAAC;AACf,kBAAI,MAAM,IAAIC,EAAC;AAEf,kBAAI,SAAS,GAAG,EAAE,GAAG,KAAK,MAAM;AAC9B;AAAA,cACF;AAEA,uBAASH,KAAI,IAAIA,MAAK,GAAGA,MAAK,GAAG;AAE/B,yBAASC,KAAI,IAAIA,MAAK,GAAGA,MAAK,GAAG;AAE/B,sBAAID,MAAK,MAAMA,MAAK,KAAKC,MAAK,MAAMA,MAAK,KACjCD,MAAK,KAAKC,MAAK,GAAK;AAC1B,6BAAS,MAAMD,EAAC,EAAE,MAAMC,EAAC,IAAI;AAAA,kBAC/B,OAAO;AACL,6BAAS,MAAMD,EAAC,EAAE,MAAMC,EAAC,IAAI;AAAA,kBAC/B;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,kBAAkB,SAAS,MAAM;AAEnC,cAAI,OAAO,OAAO,iBAAiB,WAAW;AAE9C,mBAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK,GAAG;AAC9B,gBAAI,MAAO,CAAC,SAAW,QAAQA,KAAK,MAAM;AAC1C,qBAAS,KAAK,MAAMA,KAAI,CAAC,CAAC,EAAEA,KAAI,IAAI,eAAe,IAAI,CAAC,IAAI;AAAA,UAC9D;AAEA,mBAASA,KAAI,GAAGA,KAAI,IAAIA,MAAK,GAAG;AAC9B,gBAAI,MAAO,CAAC,SAAW,QAAQA,KAAK,MAAM;AAC1C,qBAASA,KAAI,IAAI,eAAe,IAAI,CAAC,EAAE,KAAK,MAAMA,KAAI,CAAC,CAAC,IAAI;AAAA,UAC9D;AAAA,QACF;AAEA,YAAI,gBAAgB,SAAS,MAAM,aAAa;AAE9C,cAAI,OAAQ,yBAAyB,IAAK;AAC1C,cAAI,OAAO,OAAO,eAAe,IAAI;AAGrC,mBAASA,KAAI,GAAGA,KAAI,IAAIA,MAAK,GAAG;AAE9B,gBAAI,MAAO,CAAC,SAAW,QAAQA,KAAK,MAAM;AAE1C,gBAAIA,KAAI,GAAG;AACT,uBAASA,EAAC,EAAE,CAAC,IAAI;AAAA,YACnB,WAAWA,KAAI,GAAG;AAChB,uBAASA,KAAI,CAAC,EAAE,CAAC,IAAI;AAAA,YACvB,OAAO;AACL,uBAAS,eAAe,KAAKA,EAAC,EAAE,CAAC,IAAI;AAAA,YACvC;AAAA,UACF;AAGA,mBAASA,KAAI,GAAGA,KAAI,IAAIA,MAAK,GAAG;AAE9B,gBAAI,MAAO,CAAC,SAAW,QAAQA,KAAK,MAAM;AAE1C,gBAAIA,KAAI,GAAG;AACT,uBAAS,CAAC,EAAE,eAAeA,KAAI,CAAC,IAAI;AAAA,YACtC,WAAWA,KAAI,GAAG;AAChB,uBAAS,CAAC,EAAE,KAAKA,KAAI,IAAI,CAAC,IAAI;AAAA,YAChC,OAAO;AACL,uBAAS,CAAC,EAAE,KAAKA,KAAI,CAAC,IAAI;AAAA,YAC5B;AAAA,UACF;AAGA,mBAAS,eAAe,CAAC,EAAE,CAAC,IAAK,CAAC;AAAA,QACpC;AAEA,YAAI,UAAU,SAAS,MAAM,aAAa;AAExC,cAAI,MAAM;AACV,cAAI,MAAM,eAAe;AACzB,cAAI,WAAW;AACf,cAAI,YAAY;AAChB,cAAI,WAAW,OAAO,gBAAgB,WAAW;AAEjD,mBAAS,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG;AAElD,gBAAI,OAAO;AAAG,qBAAO;AAErB,mBAAO,MAAM;AAEX,uBAASD,KAAI,GAAGA,KAAI,GAAGA,MAAK,GAAG;AAE7B,oBAAI,SAAS,GAAG,EAAE,MAAMA,EAAC,KAAK,MAAM;AAElC,sBAAI,OAAO;AAEX,sBAAI,YAAY,KAAK,QAAQ;AAC3B,4BAAY,KAAK,SAAS,MAAM,WAAY,MAAM;AAAA,kBACpD;AAEA,sBAAI,OAAO,SAAS,KAAK,MAAMA,EAAC;AAEhC,sBAAI,MAAM;AACR,2BAAO,CAAC;AAAA,kBACV;AAEA,2BAAS,GAAG,EAAE,MAAMA,EAAC,IAAI;AACzB,8BAAY;AAEZ,sBAAI,YAAY,IAAI;AAClB,iCAAa;AACb,+BAAW;AAAA,kBACb;AAAA,gBACF;AAAA,cACF;AAEA,qBAAO;AAEP,kBAAI,MAAM,KAAK,gBAAgB,KAAK;AAClC,uBAAO;AACP,sBAAM,CAAC;AACP;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,cAAc,SAAS,QAAQ,UAAU;AAE3C,cAAI,SAAS;AAEb,cAAI,aAAa;AACjB,cAAI,aAAa;AAEjB,cAAI,SAAS,IAAI,MAAM,SAAS,MAAM;AACtC,cAAI,SAAS,IAAI,MAAM,SAAS,MAAM;AAEtC,mBAASD,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK,GAAG;AAE3C,gBAAI,UAAU,SAASA,EAAC,EAAE;AAC1B,gBAAI,UAAU,SAASA,EAAC,EAAE,aAAa;AAEvC,yBAAa,KAAK,IAAI,YAAY,OAAO;AACzC,yBAAa,KAAK,IAAI,YAAY,OAAO;AAEzC,mBAAOA,EAAC,IAAI,IAAI,MAAM,OAAO;AAE7B,qBAASE,KAAI,GAAGA,KAAI,OAAOF,EAAC,EAAE,QAAQE,MAAK,GAAG;AAC5C,qBAAOF,EAAC,EAAEE,EAAC,IAAI,MAAO,OAAO,UAAU,EAAEA,KAAI,MAAM;AAAA,YACrD;AACA,sBAAU;AAEV,gBAAI,SAAS,OAAO,0BAA0B,OAAO;AACrD,gBAAI,UAAU,aAAa,OAAOF,EAAC,GAAG,OAAO,UAAU,IAAI,CAAC;AAE5D,gBAAI,UAAU,QAAQ,IAAI,MAAM;AAChC,mBAAOA,EAAC,IAAI,IAAI,MAAM,OAAO,UAAU,IAAI,CAAC;AAC5C,qBAASE,KAAI,GAAGA,KAAI,OAAOF,EAAC,EAAE,QAAQE,MAAK,GAAG;AAC5C,kBAAI,WAAWA,KAAI,QAAQ,UAAU,IAAI,OAAOF,EAAC,EAAE;AACnD,qBAAOA,EAAC,EAAEE,EAAC,IAAK,YAAY,IAAI,QAAQ,MAAM,QAAQ,IAAI;AAAA,YAC5D;AAAA,UACF;AAEA,cAAI,iBAAiB;AACrB,mBAASA,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK,GAAG;AAC3C,8BAAkB,SAASA,EAAC,EAAE;AAAA,UAChC;AAEA,cAAI,OAAO,IAAI,MAAM,cAAc;AACnC,cAAI,QAAQ;AAEZ,mBAASA,KAAI,GAAGA,KAAI,YAAYA,MAAK,GAAG;AACtC,qBAASF,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK,GAAG;AAC3C,kBAAIE,KAAI,OAAOF,EAAC,EAAE,QAAQ;AACxB,qBAAK,KAAK,IAAI,OAAOA,EAAC,EAAEE,EAAC;AACzB,yBAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAEA,mBAASA,KAAI,GAAGA,KAAI,YAAYA,MAAK,GAAG;AACtC,qBAASF,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK,GAAG;AAC3C,kBAAIE,KAAI,OAAOF,EAAC,EAAE,QAAQ;AACxB,qBAAK,KAAK,IAAI,OAAOA,EAAC,EAAEE,EAAC;AACzB,yBAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAEA,YAAI,aAAa,SAASE,aAAYC,uBAAsB,UAAU;AAEpE,cAAI,WAAW,UAAU,YAAYD,aAAYC,qBAAoB;AAErE,cAAI,SAAS,YAAY;AAEzB,mBAASH,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK,GAAG;AAC3C,gBAAI,OAAO,SAASA,EAAC;AACrB,mBAAO,IAAI,KAAK,QAAQ,GAAG,CAAC;AAC5B,mBAAO,IAAI,KAAK,UAAU,GAAG,OAAO,gBAAgB,KAAK,QAAQ,GAAGE,WAAU,CAAE;AAChF,iBAAK,MAAM,MAAM;AAAA,UACnB;AAGA,cAAI,iBAAiB;AACrB,mBAASF,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK,GAAG;AAC3C,8BAAkB,SAASA,EAAC,EAAE;AAAA,UAChC;AAEA,cAAI,OAAO,gBAAgB,IAAI,iBAAiB,GAAG;AACjD,kBAAM,4BACF,OAAO,gBAAgB,IACvB,MACA,iBAAiB,IACjB;AAAA,UACN;AAGA,cAAI,OAAO,gBAAgB,IAAI,KAAK,iBAAiB,GAAG;AACtD,mBAAO,IAAI,GAAG,CAAC;AAAA,UACjB;AAGA,iBAAO,OAAO,gBAAgB,IAAI,KAAK,GAAG;AACxC,mBAAO,OAAO,KAAK;AAAA,UACrB;AAGA,iBAAO,MAAM;AAEX,gBAAI,OAAO,gBAAgB,KAAK,iBAAiB,GAAG;AAClD;AAAA,YACF;AACA,mBAAO,IAAI,MAAM,CAAC;AAElB,gBAAI,OAAO,gBAAgB,KAAK,iBAAiB,GAAG;AAClD;AAAA,YACF;AACA,mBAAO,IAAI,MAAM,CAAC;AAAA,UACpB;AAEA,iBAAO,YAAY,QAAQ,QAAQ;AAAA,QACrC;AAEA,cAAM,UAAU,SAAS,MAAM,MAAM;AAEnC,iBAAO,QAAQ;AAEf,cAAI,UAAU;AAEd,kBAAO,MAAM;AAAA,YACb,KAAK;AACH,wBAAU,SAAS,IAAI;AACvB;AAAA,YACF,KAAK;AACH,wBAAU,WAAW,IAAI;AACzB;AAAA,YACF,KAAK;AACH,wBAAU,WAAW,IAAI;AACzB;AAAA,YACF,KAAK;AACH,wBAAU,QAAQ,IAAI;AACtB;AAAA,YACF;AACE,oBAAM,UAAU;AAAA,UAClB;AAEA,oBAAU,KAAK,OAAO;AACtB,uBAAa;AAAA,QACf;AAEA,cAAM,SAAS,SAAS,KAAK,KAAK;AAChC,cAAI,MAAM,KAAK,gBAAgB,OAAO,MAAM,KAAK,gBAAgB,KAAK;AACpE,kBAAM,MAAM,MAAM;AAAA,UACpB;AACA,iBAAO,SAAS,GAAG,EAAE,GAAG;AAAA,QAC1B;AAEA,cAAM,iBAAiB,WAAW;AAChC,iBAAO;AAAA,QACT;AAEA,cAAM,OAAO,WAAW;AACtB,cAAI,cAAc,GAAG;AACnB,gBAAIE,cAAa;AAEjB,mBAAOA,cAAa,IAAIA,eAAc;AACpC,kBAAI,WAAW,UAAU,YAAYA,aAAY,qBAAqB;AACtE,kBAAI,SAAS,YAAY;AAEzB,uBAASF,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACzC,oBAAI,OAAO,UAAUA,EAAC;AACtB,uBAAO,IAAI,KAAK,QAAQ,GAAG,CAAC;AAC5B,uBAAO,IAAI,KAAK,UAAU,GAAG,OAAO,gBAAgB,KAAK,QAAQ,GAAGE,WAAU,CAAE;AAChF,qBAAK,MAAM,MAAM;AAAA,cACnB;AAEA,kBAAI,iBAAiB;AACrB,uBAASF,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK;AACxC,kCAAkB,SAASA,EAAC,EAAE;AAAA,cAChC;AAEA,kBAAI,OAAO,gBAAgB,KAAK,iBAAiB,GAAG;AAClD;AAAA,cACF;AAAA,YACF;AAEA,0BAAcE;AAAA,UAChB;AAEA,mBAAS,OAAO,mBAAmB,CAAE;AAAA,QACvC;AAEA,cAAM,iBAAiB,SAAS,UAAU,QAAQ;AAEhD,qBAAW,YAAY;AACvB,mBAAU,OAAO,UAAU,cAAc,WAAW,IAAI;AAExD,cAAI,SAAS;AAEb,oBAAU;AACV,oBAAU;AACV,oBAAU;AACV,oBAAU,4BAA4B,SAAS;AAC/C,oBAAU;AACV,oBAAU;AAEV,mBAASJ,KAAI,GAAGA,KAAI,MAAM,eAAe,GAAGA,MAAK,GAAG;AAElD,sBAAU;AAEV,qBAASC,KAAI,GAAGA,KAAI,MAAM,eAAe,GAAGA,MAAK,GAAG;AAClD,wBAAU;AACV,wBAAU;AACV,wBAAU;AACV,wBAAU;AACV,wBAAU,aAAa,WAAW;AAClC,wBAAU,cAAc,WAAW;AACnC,wBAAU;AACV,wBAAU,MAAM,OAAOD,IAAGC,EAAC,IAAG,YAAY;AAC1C,wBAAU;AACV,wBAAU;AAAA,YACZ;AAEA,sBAAU;AAAA,UACZ;AAEA,oBAAU;AACV,oBAAU;AAEV,iBAAO;AAAA,QACT;AAEA,cAAM,eAAe,SAAS,UAAU,QAAQ,KAAK,OAAO;AAE1D,cAAI,OAAO,CAAC;AACZ,cAAI,OAAO,UAAU,CAAC,KAAK,UAAU;AAEnC,mBAAO,UAAU,CAAC;AAElB,uBAAW,KAAK;AAChB,qBAAS,KAAK;AACd,kBAAM,KAAK;AACX,oBAAQ,KAAK;AAAA,UACf;AAEA,qBAAW,YAAY;AACvB,mBAAU,OAAO,UAAU,cAAc,WAAW,IAAI;AAGxD,gBAAO,OAAO,QAAQ,WAAY,EAAC,MAAM,IAAG,IAAI,OAAO,CAAC;AACxD,cAAI,OAAO,IAAI,QAAQ;AACvB,cAAI,KAAM,IAAI,OAAQ,IAAI,MAAM,uBAAuB;AAGvD,kBAAS,OAAO,UAAU,WAAY,EAAC,MAAM,MAAK,IAAI,SAAS,CAAC;AAChE,gBAAM,OAAO,MAAM,QAAQ;AAC3B,gBAAM,KAAM,MAAM,OAAQ,MAAM,MAAM,iBAAiB;AAEvD,cAAI,OAAO,MAAM,eAAe,IAAI,WAAW,SAAS;AACxD,cAAIA,IAAG,IAAID,IAAG,IAAI,QAAM,IAAI;AAE5B,iBAAO,MAAM,WAAW,UAAU,WAChC,OAAO,WAAW,WAAW,WAAW;AAE1C,mBAAS;AACT,mBAAS,CAAC,KAAK,WAAW,aAAa,OAAO,iBAAiB,OAAO,QAAQ;AAC9E,mBAAS,mBAAmB,OAAO,MAAM,OAAO;AAChD,mBAAS;AACT,mBAAU,MAAM,QAAQ,IAAI,OAAQ,kCAChC,UAAU,CAAC,MAAM,IAAI,IAAI,EAAE,EAAE,KAAK,GAAG,EAAE,KAAK,CAAE,IAAI,MAAM;AAC5D,mBAAS;AACT,mBAAU,MAAM,OAAQ,gBAAgB,UAAU,MAAM,EAAE,IAAI,OAC1D,UAAU,MAAM,IAAI,IAAI,aAAa;AACzC,mBAAU,IAAI,OAAQ,sBAAsB,UAAU,IAAI,EAAE,IAAI,OAC5D,UAAU,IAAI,IAAI,IAAI,mBAAmB;AAC7C,mBAAS;AACT,mBAAS;AAET,eAAKA,KAAI,GAAGA,KAAI,MAAM,eAAe,GAAGA,MAAK,GAAG;AAC9C,iBAAKA,KAAI,WAAW;AACpB,iBAAKC,KAAI,GAAGA,KAAI,MAAM,eAAe,GAAGA,MAAK,GAAG;AAC9C,kBAAI,MAAM,OAAOD,IAAGC,EAAC,GAAI;AACvB,qBAAKA,KAAE,WAAS;AAChB,yBAAS,MAAM,KAAK,MAAM,KAAK;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AAEA,mBAAS;AACT,mBAAS;AAET,iBAAO;AAAA,QACT;AAEA,cAAM,gBAAgB,SAAS,UAAU,QAAQ;AAE/C,qBAAW,YAAY;AACvB,mBAAU,OAAO,UAAU,cAAc,WAAW,IAAI;AAExD,cAAI,OAAO,MAAM,eAAe,IAAI,WAAW,SAAS;AACxD,cAAI,MAAM;AACV,cAAI,MAAM,OAAO;AAEjB,iBAAO,cAAc,MAAM,MAAM,SAASK,IAAGC,IAAG;AAC9C,gBAAI,OAAOD,MAAKA,KAAI,OAAO,OAAOC,MAAKA,KAAI,KAAK;AAC9C,kBAAIN,KAAI,KAAK,OAAQK,KAAI,OAAO,QAAQ;AACxC,kBAAIN,KAAI,KAAK,OAAQO,KAAI,OAAO,QAAQ;AACxC,qBAAO,MAAM,OAAOP,IAAGC,EAAC,IAAG,IAAI;AAAA,YACjC,OAAO;AACL,qBAAO;AAAA,YACT;AAAA,UACF,CAAE;AAAA,QACJ;AAEA,cAAM,eAAe,SAAS,UAAU,QAAQ,KAAK;AAEnD,qBAAW,YAAY;AACvB,mBAAU,OAAO,UAAU,cAAc,WAAW,IAAI;AAExD,cAAI,OAAO,MAAM,eAAe,IAAI,WAAW,SAAS;AAExD,cAAI,MAAM;AACV,iBAAO;AACP,iBAAO;AACP,iBAAO,MAAM,cAAc,UAAU,MAAM;AAC3C,iBAAO;AACP,iBAAO;AACP,iBAAO;AACP,iBAAO;AACP,iBAAO;AACP,iBAAO;AACP,iBAAO;AACP,cAAI,KAAK;AACP,mBAAO;AACP,mBAAO,UAAU,GAAG;AACpB,mBAAO;AAAA,UACT;AACA,iBAAO;AAEP,iBAAO;AAAA,QACT;AAEA,YAAI,YAAY,SAASO,IAAG;AAC1B,cAAI,UAAU;AACd,mBAASN,KAAI,GAAGA,KAAIM,GAAE,QAAQN,MAAK,GAAG;AACpC,gBAAID,KAAIO,GAAE,OAAON,EAAC;AAClB,oBAAOD,IAAG;AAAA,cACV,KAAK;AAAK,2BAAW;AAAQ;AAAA,cAC7B,KAAK;AAAK,2BAAW;AAAQ;AAAA,cAC7B,KAAK;AAAK,2BAAW;AAAS;AAAA,cAC9B,KAAK;AAAK,2BAAW;AAAU;AAAA,cAC/B;AAAU,2BAAWA;AAAG;AAAA,YACxB;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAEA,YAAI,mBAAmB,SAAS,QAAQ;AACtC,cAAI,WAAW;AACf,mBAAU,OAAO,UAAU,cAAc,WAAW,IAAI;AAExD,cAAI,OAAO,MAAM,eAAe,IAAI,WAAW,SAAS;AACxD,cAAI,MAAM;AACV,cAAI,MAAM,OAAO;AAEjB,cAAIM,IAAGD,IAAG,IAAIG,KAAIC;AAElB,cAAI,SAAS;AAAA,YACX,gBAAM;AAAA,YACN,WAAM;AAAA,YACN,WAAM;AAAA,YACN,MAAM;AAAA,UACR;AAEA,cAAI,yBAAyB;AAAA,YAC3B,gBAAM;AAAA,YACN,WAAM;AAAA,YACN,WAAM;AAAA,YACN,MAAM;AAAA,UACR;AAEA,cAAI,QAAQ;AACZ,eAAKH,KAAI,GAAGA,KAAI,MAAMA,MAAK,GAAG;AAC5B,iBAAK,KAAK,OAAOA,KAAI,OAAO,QAAQ;AACpC,YAAAE,MAAK,KAAK,OAAOF,KAAI,IAAI,OAAO,QAAQ;AACxC,iBAAKD,KAAI,GAAGA,KAAI,MAAMA,MAAK,GAAG;AAC5B,cAAAI,KAAI;AAEJ,kBAAI,OAAOJ,MAAKA,KAAI,OAAO,OAAOC,MAAKA,KAAI,OAAO,MAAM,OAAO,IAAI,KAAK,OAAOD,KAAI,OAAO,QAAQ,CAAC,GAAG;AACpG,gBAAAI,KAAI;AAAA,cACN;AAEA,kBAAI,OAAOJ,MAAKA,KAAI,OAAO,OAAOC,KAAE,KAAKA,KAAE,IAAI,OAAO,MAAM,OAAOE,KAAI,KAAK,OAAOH,KAAI,OAAO,QAAQ,CAAC,GAAG;AACxG,gBAAAI,MAAK;AAAA,cACP,OACK;AACH,gBAAAA,MAAK;AAAA,cACP;AAGA,uBAAU,SAAS,KAAKH,KAAE,KAAK,MAAO,uBAAuBG,EAAC,IAAI,OAAOA,EAAC;AAAA,YAC5E;AAEA,qBAAS;AAAA,UACX;AAEA,cAAI,OAAO,KAAK,SAAS,GAAG;AAC1B,mBAAO,MAAM,UAAU,GAAG,MAAM,SAAS,OAAO,CAAC,IAAI,MAAM,OAAK,CAAC,EAAE,KAAK,QAAG;AAAA,UAC7E;AAEA,iBAAO,MAAM,UAAU,GAAG,MAAM,SAAO,CAAC;AAAA,QAC1C;AAEA,cAAM,cAAc,SAAS,UAAU,QAAQ;AAC7C,qBAAW,YAAY;AAEvB,cAAI,WAAW,GAAG;AAChB,mBAAO,iBAAiB,MAAM;AAAA,UAChC;AAEA,sBAAY;AACZ,mBAAU,OAAO,UAAU,cAAc,WAAW,IAAI;AAExD,cAAI,OAAO,MAAM,eAAe,IAAI,WAAW,SAAS;AACxD,cAAI,MAAM;AACV,cAAI,MAAM,OAAO;AAEjB,cAAIH,IAAGD,IAAGN,IAAGU;AAEb,cAAI,QAAQ,MAAM,WAAS,CAAC,EAAE,KAAK,cAAI;AACvC,cAAI,QAAQ,MAAM,WAAS,CAAC,EAAE,KAAK,IAAI;AAEvC,cAAI,QAAQ;AACZ,cAAI,OAAO;AACX,eAAKH,KAAI,GAAGA,KAAI,MAAMA,MAAK,GAAG;AAC5B,YAAAP,KAAI,KAAK,OAAQO,KAAI,OAAO,QAAQ;AACpC,mBAAO;AACP,iBAAKD,KAAI,GAAGA,KAAI,MAAMA,MAAK,GAAG;AAC5B,cAAAI,KAAI;AAEJ,kBAAI,OAAOJ,MAAKA,KAAI,OAAO,OAAOC,MAAKA,KAAI,OAAO,MAAM,OAAOP,IAAG,KAAK,OAAOM,KAAI,OAAO,QAAQ,CAAC,GAAG;AACnG,gBAAAI,KAAI;AAAA,cACN;AAGA,sBAAQA,KAAI,QAAQ;AAAA,YACtB;AAEA,iBAAKV,KAAI,GAAGA,KAAI,UAAUA,MAAK,GAAG;AAChC,uBAAS,OAAO;AAAA,YAClB;AAAA,UACF;AAEA,iBAAO,MAAM,UAAU,GAAG,MAAM,SAAO,CAAC;AAAA,QAC1C;AAEA,cAAM,oBAAoB,SAAS,SAAS,UAAU;AACpD,qBAAW,YAAY;AACvB,cAAI,SAAS,MAAM,eAAe;AAClC,mBAAS,MAAM,GAAG,MAAM,QAAQ,OAAO;AACrC,qBAAS,MAAM,GAAG,MAAM,QAAQ,OAAO;AACrC,sBAAQ,YAAY,MAAM,OAAO,KAAK,GAAG,IAAI,UAAU;AACvD,sBAAQ,SAAS,MAAM,UAAU,MAAM,UAAU,UAAU,QAAQ;AAAA,YACrE;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAMA,MAAAD,QAAO,qBAAqB;AAAA,QAC1B,WAAY,SAASS,IAAG;AACtB,cAAI,QAAQ,CAAC;AACb,mBAASN,KAAI,GAAGA,KAAIM,GAAE,QAAQN,MAAK,GAAG;AACpC,gBAAID,KAAIO,GAAE,WAAWN,EAAC;AACtB,kBAAM,KAAKD,KAAI,GAAI;AAAA,UACrB;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,MAAAF,QAAO,gBAAgBA,QAAO,mBAAmB,SAAS;AAW1D,MAAAA,QAAO,sBAAsB,SAAS,aAAa,UAAU;AAI3D,YAAI,aAAa,WAAW;AAE1B,cAAI,MAAM,wBAAwB,WAAW;AAC7C,cAAI,OAAO,WAAW;AACpB,gBAAIY,KAAI,IAAI,KAAK;AACjB,gBAAIA,MAAK;AAAI,oBAAM;AACnB,mBAAOA;AAAA,UACT;AAEA,cAAI,QAAQ;AACZ,cAAIC,cAAa,CAAC;AAClB,iBAAO,MAAM;AACX,gBAAI,KAAK,IAAI,KAAK;AAClB,gBAAI,MAAM;AAAI;AACd,gBAAI,KAAK,KAAK;AACd,gBAAIC,MAAK,KAAK;AACd,gBAAIC,MAAK,KAAK;AACd,gBAAIC,KAAI,OAAO,aAAe,MAAM,IAAK,EAAE;AAC3C,gBAAIC,KAAKH,OAAM,IAAKC;AACpB,YAAAF,YAAWG,EAAC,IAAIC;AAChB,qBAAS;AAAA,UACX;AACA,cAAI,SAAS,UAAU;AACrB,kBAAM,QAAQ,SAAS;AAAA,UACzB;AAEA,iBAAOJ;AAAA,QACT,EAAE;AAEF,YAAI,cAAc,IAAI,WAAW,CAAC;AAElC,eAAO,SAASJ,IAAG;AACjB,cAAI,QAAQ,CAAC;AACb,mBAASN,KAAI,GAAGA,KAAIM,GAAE,QAAQN,MAAK,GAAG;AACpC,gBAAID,KAAIO,GAAE,WAAWN,EAAC;AACtB,gBAAID,KAAI,KAAK;AACX,oBAAM,KAAKA,EAAC;AAAA,YACd,OAAO;AACL,kBAAIU,KAAI,WAAWH,GAAE,OAAON,EAAC,CAAC;AAC9B,kBAAI,OAAOS,MAAK,UAAU;AACxB,qBAAMA,KAAI,QAASA,IAAG;AAEpB,wBAAM,KAAKA,EAAC;AAAA,gBACd,OAAO;AAEL,wBAAM,KAAKA,OAAM,CAAC;AAClB,wBAAM,KAAKA,KAAI,GAAI;AAAA,gBACrB;AAAA,cACF,OAAO;AACL,sBAAM,KAAK,WAAW;AAAA,cACxB;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAMA,UAAI,SAAS;AAAA,QACX,aAAiB,KAAK;AAAA,QACtB,gBAAiB,KAAK;AAAA,QACtB,gBAAiB,KAAK;AAAA,QACtB,YAAiB,KAAK;AAAA,MACxB;AAMA,UAAI,yBAAyB;AAAA,QAC3B,GAAI;AAAA,QACJ,GAAI;AAAA,QACJ,GAAI;AAAA,QACJ,GAAI;AAAA,MACN;AAMA,UAAI,gBAAgB;AAAA,QAClB,YAAa;AAAA,QACb,YAAa;AAAA,QACb,YAAa;AAAA,QACb,YAAa;AAAA,QACb,YAAa;AAAA,QACb,YAAa;AAAA,QACb,YAAa;AAAA,QACb,YAAa;AAAA,MACf;AAMA,UAAI,SAAS,WAAW;AAEtB,YAAI,yBAAyB;AAAA,UAC3B,CAAC;AAAA,UACD,CAAC,GAAG,EAAE;AAAA,UACN,CAAC,GAAG,EAAE;AAAA,UACN,CAAC,GAAG,EAAE;AAAA,UACN,CAAC,GAAG,EAAE;AAAA,UACN,CAAC,GAAG,EAAE;AAAA,UACN,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,UACd,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,UACd,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,UACd,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,UACd,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,UACd,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,UACd,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,UACd,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,UAClB,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,UAClB,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG;AAAA,UACnB,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG;AAAA,UACnB,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG;AAAA,UACnB,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG;AAAA,UACnB,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG;AAAA,UACnB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG;AAAA,UACvB,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG;AAAA,UACxB,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG;AAAA,UACxB,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG;AAAA,UACxB,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG;AAAA,UACxB,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG;AAAA,UACxB,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG;AAAA,UACxB,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG;AAAA,UAC7B,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG;AAAA,UAC7B,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG;AAAA,UAC7B,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG;AAAA,UAC7B,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG;AAAA,UAC7B,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG;AAAA,QAC/B;AACA,YAAI,MAAO,KAAK,KAAO,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK;AACnF,YAAI,MAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK;AAChG,YAAI,WAAY,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,IAAM,KAAK;AAEpE,YAAI,QAAQ,CAAC;AAEb,YAAI,cAAc,SAAS,MAAM;AAC/B,cAAI,QAAQ;AACZ,iBAAO,QAAQ,GAAG;AAChB,qBAAS;AACT,sBAAU;AAAA,UACZ;AACA,iBAAO;AAAA,QACT;AAEA,cAAM,iBAAiB,SAAS,MAAM;AACpC,cAAIM,KAAI,QAAQ;AAChB,iBAAO,YAAYA,EAAC,IAAI,YAAY,GAAG,KAAK,GAAG;AAC7C,YAAAA,MAAM,OAAQ,YAAYA,EAAC,IAAI,YAAY,GAAG;AAAA,UAChD;AACA,kBAAU,QAAQ,KAAMA,MAAK;AAAA,QAC/B;AAEA,cAAM,mBAAmB,SAAS,MAAM;AACtC,cAAIA,KAAI,QAAQ;AAChB,iBAAO,YAAYA,EAAC,IAAI,YAAY,GAAG,KAAK,GAAG;AAC7C,YAAAA,MAAM,OAAQ,YAAYA,EAAC,IAAI,YAAY,GAAG;AAAA,UAChD;AACA,iBAAQ,QAAQ,KAAMA;AAAA,QACxB;AAEA,cAAM,qBAAqB,SAAS,YAAY;AAC9C,iBAAO,uBAAuB,aAAa,CAAC;AAAA,QAC9C;AAEA,cAAM,kBAAkB,SAAS,aAAa;AAE5C,kBAAQ,aAAa;AAAA,YAErB,KAAK,cAAc;AACjB,qBAAO,SAASf,IAAGC,IAAG;AAAE,wBAAQD,KAAIC,MAAK,KAAK;AAAA,cAAG;AAAA,YACnD,KAAK,cAAc;AACjB,qBAAO,SAASD,IAAGC,IAAG;AAAE,uBAAOD,KAAI,KAAK;AAAA,cAAG;AAAA,YAC7C,KAAK,cAAc;AACjB,qBAAO,SAASA,IAAGC,IAAG;AAAE,uBAAOA,KAAI,KAAK;AAAA,cAAG;AAAA,YAC7C,KAAK,cAAc;AACjB,qBAAO,SAASD,IAAGC,IAAG;AAAE,wBAAQD,KAAIC,MAAK,KAAK;AAAA,cAAG;AAAA,YACnD,KAAK,cAAc;AACjB,qBAAO,SAASD,IAAGC,IAAG;AAAE,wBAAQ,KAAK,MAAMD,KAAI,CAAC,IAAI,KAAK,MAAMC,KAAI,CAAC,KAAM,KAAK;AAAA,cAAG;AAAA,YACpF,KAAK,cAAc;AACjB,qBAAO,SAASD,IAAGC,IAAG;AAAE,uBAAQD,KAAIC,KAAK,IAAKD,KAAIC,KAAK,KAAK;AAAA,cAAG;AAAA,YACjE,KAAK,cAAc;AACjB,qBAAO,SAASD,IAAGC,IAAG;AAAE,wBAAUD,KAAIC,KAAK,IAAKD,KAAIC,KAAK,KAAK,KAAK;AAAA,cAAG;AAAA,YACxE,KAAK,cAAc;AACjB,qBAAO,SAASD,IAAGC,IAAG;AAAE,wBAAUD,KAAIC,KAAK,KAAKD,KAAIC,MAAK,KAAK,KAAK;AAAA,cAAG;AAAA,YAExE;AACE,oBAAM,qBAAqB;AAAA,UAC7B;AAAA,QACF;AAEA,cAAM,4BAA4B,SAAS,oBAAoB;AAC7D,cAAIe,KAAI,aAAa,CAAC,CAAC,GAAG,CAAC;AAC3B,mBAAShB,KAAI,GAAGA,KAAI,oBAAoBA,MAAK,GAAG;AAC9C,YAAAgB,KAAIA,GAAE,SAAS,aAAa,CAAC,GAAG,OAAO,KAAKhB,EAAC,CAAC,GAAG,CAAC,CAAE;AAAA,UACtD;AACA,iBAAOgB;AAAA,QACT;AAEA,cAAM,kBAAkB,SAAS,MAAM,MAAM;AAE3C,cAAI,KAAK,QAAQ,OAAO,IAAI;AAI1B,oBAAO,MAAM;AAAA,cACb,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC;AACE,sBAAM,UAAU;AAAA,YAClB;AAAA,UAEF,WAAW,OAAO,IAAI;AAIpB,oBAAO,MAAM;AAAA,cACb,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC;AACE,sBAAM,UAAU;AAAA,YAClB;AAAA,UAEF,WAAW,OAAO,IAAI;AAIpB,oBAAO,MAAM;AAAA,cACb,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC,KAAK,OAAO;AAAiB,uBAAO;AAAA,cACpC;AACE,sBAAM,UAAU;AAAA,YAClB;AAAA,UAEF,OAAO;AACL,kBAAM,UAAU;AAAA,UAClB;AAAA,QACF;AAEA,cAAM,eAAe,SAASnB,SAAQ;AAEpC,cAAI,cAAcA,QAAO,eAAe;AAExC,cAAI,YAAY;AAIhB,mBAAS,MAAM,GAAG,MAAM,aAAa,OAAO,GAAG;AAC7C,qBAAS,MAAM,GAAG,MAAM,aAAa,OAAO,GAAG;AAE7C,kBAAI,YAAY;AAChB,kBAAI,OAAOA,QAAO,OAAO,KAAK,GAAG;AAEjC,uBAASC,KAAI,IAAIA,MAAK,GAAGA,MAAK,GAAG;AAE/B,oBAAI,MAAMA,KAAI,KAAK,eAAe,MAAMA,IAAG;AACzC;AAAA,gBACF;AAEA,yBAASC,KAAI,IAAIA,MAAK,GAAGA,MAAK,GAAG;AAE/B,sBAAI,MAAMA,KAAI,KAAK,eAAe,MAAMA,IAAG;AACzC;AAAA,kBACF;AAEA,sBAAID,MAAK,KAAKC,MAAK,GAAG;AACpB;AAAA,kBACF;AAEA,sBAAI,QAAQF,QAAO,OAAO,MAAMC,IAAG,MAAMC,EAAC,GAAI;AAC5C,iCAAa;AAAA,kBACf;AAAA,gBACF;AAAA,cACF;AAEA,kBAAI,YAAY,GAAG;AACjB,6BAAc,IAAI,YAAY;AAAA,cAChC;AAAA,YACF;AAAA,UACF;AAAC;AAID,mBAAS,MAAM,GAAG,MAAM,cAAc,GAAG,OAAO,GAAG;AACjD,qBAAS,MAAM,GAAG,MAAM,cAAc,GAAG,OAAO,GAAG;AACjD,kBAAI,QAAQ;AACZ,kBAAIF,QAAO,OAAO,KAAK,GAAG;AAAI,yBAAS;AACvC,kBAAIA,QAAO,OAAO,MAAM,GAAG,GAAG;AAAI,yBAAS;AAC3C,kBAAIA,QAAO,OAAO,KAAK,MAAM,CAAC;AAAI,yBAAS;AAC3C,kBAAIA,QAAO,OAAO,MAAM,GAAG,MAAM,CAAC;AAAI,yBAAS;AAC/C,kBAAI,SAAS,KAAK,SAAS,GAAG;AAC5B,6BAAa;AAAA,cACf;AAAA,YACF;AAAA,UACF;AAIA,mBAAS,MAAM,GAAG,MAAM,aAAa,OAAO,GAAG;AAC7C,qBAAS,MAAM,GAAG,MAAM,cAAc,GAAG,OAAO,GAAG;AACjD,kBAAIA,QAAO,OAAO,KAAK,GAAG,KACnB,CAACA,QAAO,OAAO,KAAK,MAAM,CAAC,KAC1BA,QAAO,OAAO,KAAK,MAAM,CAAC,KAC1BA,QAAO,OAAO,KAAK,MAAM,CAAC,KAC1BA,QAAO,OAAO,KAAK,MAAM,CAAC,KAC3B,CAACA,QAAO,OAAO,KAAK,MAAM,CAAC,KAC1BA,QAAO,OAAO,KAAK,MAAM,CAAC,GAAI;AACpC,6BAAa;AAAA,cACf;AAAA,YACF;AAAA,UACF;AAEA,mBAAS,MAAM,GAAG,MAAM,aAAa,OAAO,GAAG;AAC7C,qBAAS,MAAM,GAAG,MAAM,cAAc,GAAG,OAAO,GAAG;AACjD,kBAAIA,QAAO,OAAO,KAAK,GAAG,KACnB,CAACA,QAAO,OAAO,MAAM,GAAG,GAAG,KAC1BA,QAAO,OAAO,MAAM,GAAG,GAAG,KAC1BA,QAAO,OAAO,MAAM,GAAG,GAAG,KAC1BA,QAAO,OAAO,MAAM,GAAG,GAAG,KAC3B,CAACA,QAAO,OAAO,MAAM,GAAG,GAAG,KAC1BA,QAAO,OAAO,MAAM,GAAG,GAAG,GAAI;AACpC,6BAAa;AAAA,cACf;AAAA,YACF;AAAA,UACF;AAIA,cAAI,YAAY;AAEhB,mBAAS,MAAM,GAAG,MAAM,aAAa,OAAO,GAAG;AAC7C,qBAAS,MAAM,GAAG,MAAM,aAAa,OAAO,GAAG;AAC7C,kBAAIA,QAAO,OAAO,KAAK,GAAG,GAAI;AAC5B,6BAAa;AAAA,cACf;AAAA,YACF;AAAA,UACF;AAEA,cAAI,QAAQ,KAAK,IAAI,MAAM,YAAY,cAAc,cAAc,EAAE,IAAI;AACzE,uBAAa,QAAQ;AAErB,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT,EAAE;AAMF,UAAI,SAAS,WAAW;AAEtB,YAAI,YAAY,IAAI,MAAM,GAAG;AAC7B,YAAI,YAAY,IAAI,MAAM,GAAG;AAG7B,iBAASG,KAAI,GAAGA,KAAI,GAAGA,MAAK,GAAG;AAC7B,oBAAUA,EAAC,IAAI,KAAKA;AAAA,QACtB;AACA,iBAASA,KAAI,GAAGA,KAAI,KAAKA,MAAK,GAAG;AAC/B,oBAAUA,EAAC,IAAI,UAAUA,KAAI,CAAC,IAC1B,UAAUA,KAAI,CAAC,IACf,UAAUA,KAAI,CAAC,IACf,UAAUA,KAAI,CAAC;AAAA,QACrB;AACA,iBAASA,KAAI,GAAGA,KAAI,KAAKA,MAAK,GAAG;AAC/B,oBAAU,UAAUA,EAAC,CAAE,IAAIA;AAAA,QAC7B;AAEA,YAAI,QAAQ,CAAC;AAEb,cAAM,OAAO,SAASiB,IAAG;AAEvB,cAAIA,KAAI,GAAG;AACT,kBAAM,UAAUA,KAAI;AAAA,UACtB;AAEA,iBAAO,UAAUA,EAAC;AAAA,QACpB;AAEA,cAAM,OAAO,SAASA,IAAG;AAEvB,iBAAOA,KAAI,GAAG;AACZ,YAAAA,MAAK;AAAA,UACP;AAEA,iBAAOA,MAAK,KAAK;AACf,YAAAA,MAAK;AAAA,UACP;AAEA,iBAAO,UAAUA,EAAC;AAAA,QACpB;AAEA,eAAO;AAAA,MACT,EAAE;AAMF,eAAS,aAAa,KAAK,OAAO;AAEhC,YAAI,OAAO,IAAI,UAAU,aAAa;AACpC,gBAAM,IAAI,SAAS,MAAM;AAAA,QAC3B;AAEA,YAAI,OAAO,WAAW;AACpB,cAAI,SAAS;AACb,iBAAO,SAAS,IAAI,UAAU,IAAI,MAAM,KAAK,GAAG;AAC9C,sBAAU;AAAA,UACZ;AACA,cAAIC,QAAO,IAAI,MAAM,IAAI,SAAS,SAAS,KAAK;AAChD,mBAASlB,KAAI,GAAGA,KAAI,IAAI,SAAS,QAAQA,MAAK,GAAG;AAC/C,YAAAkB,MAAKlB,EAAC,IAAI,IAAIA,KAAI,MAAM;AAAA,UAC1B;AACA,iBAAOkB;AAAA,QACT,EAAE;AAEF,YAAI,QAAQ,CAAC;AAEb,cAAM,QAAQ,SAAS,OAAO;AAC5B,iBAAO,KAAK,KAAK;AAAA,QACnB;AAEA,cAAM,YAAY,WAAW;AAC3B,iBAAO,KAAK;AAAA,QACd;AAEA,cAAM,WAAW,SAASC,IAAG;AAE3B,cAAIC,OAAM,IAAI,MAAM,MAAM,UAAU,IAAID,GAAE,UAAU,IAAI,CAAC;AAEzD,mBAASnB,KAAI,GAAGA,KAAI,MAAM,UAAU,GAAGA,MAAK,GAAG;AAC7C,qBAASC,KAAI,GAAGA,KAAIkB,GAAE,UAAU,GAAGlB,MAAK,GAAG;AACzC,cAAAmB,KAAIpB,KAAIC,EAAC,KAAK,OAAO,KAAK,OAAO,KAAK,MAAM,MAAMD,EAAC,CAAE,IAAI,OAAO,KAAKmB,GAAE,MAAMlB,EAAC,CAAE,CAAE;AAAA,YACpF;AAAA,UACF;AAEA,iBAAO,aAAamB,MAAK,CAAC;AAAA,QAC5B;AAEA,cAAM,MAAM,SAASD,IAAG;AAEtB,cAAI,MAAM,UAAU,IAAIA,GAAE,UAAU,IAAI,GAAG;AACzC,mBAAO;AAAA,UACT;AAEA,cAAI,QAAQ,OAAO,KAAK,MAAM,MAAM,CAAC,CAAE,IAAI,OAAO,KAAKA,GAAE,MAAM,CAAC,CAAE;AAElE,cAAIC,OAAM,IAAI,MAAM,MAAM,UAAU,CAAE;AACtC,mBAASpB,KAAI,GAAGA,KAAI,MAAM,UAAU,GAAGA,MAAK,GAAG;AAC7C,YAAAoB,KAAIpB,EAAC,IAAI,MAAM,MAAMA,EAAC;AAAA,UACxB;AAEA,mBAASA,KAAI,GAAGA,KAAImB,GAAE,UAAU,GAAGnB,MAAK,GAAG;AACzC,YAAAoB,KAAIpB,EAAC,KAAK,OAAO,KAAK,OAAO,KAAKmB,GAAE,MAAMnB,EAAC,CAAE,IAAI,KAAK;AAAA,UACxD;AAGA,iBAAO,aAAaoB,MAAK,CAAC,EAAE,IAAID,EAAC;AAAA,QACnC;AAEA,eAAO;AAAA,MACT;AAAC;AAMD,UAAI,YAAY,WAAW;AAEzB,YAAI,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQnB,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,CAAC;AAAA;AAAA,UAGT,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA;AAAA,UAGV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA;AAAA,UAGV,CAAC,GAAG,KAAK,EAAE;AAAA,UACX,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,CAAC;AAAA;AAAA,UAGT,CAAC,GAAG,KAAK,GAAG;AAAA,UACZ,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGrB,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA;AAAA,UAGV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,EAAE;AAAA,UACV,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGrB,CAAC,GAAG,KAAK,EAAE;AAAA,UACX,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGrB,CAAC,GAAG,KAAK,GAAG;AAAA,UACZ,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGrB,CAAC,GAAG,KAAK,EAAE;AAAA,UACX,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGrB,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,EAAE;AAAA,UACvB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGrB,CAAC,GAAG,KAAK,GAAG;AAAA,UACZ,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,EAAE;AAAA,UACvB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,EAAE;AAAA,UACvB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACrB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,IAAI,IAAI,EAAE;AAAA,UACX,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,IAAI,IAAI,EAAE;AAAA,UACX,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,EAAE;AAAA;AAAA,UAGX,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG;AAAA,UAC1B,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UACzB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UAC1B,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,IAAI,KAAK,GAAG;AAAA,UACb,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG;AAAA,UAC1B,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGtB,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,UACtB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,UAGvB,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,UAC1B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACvB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,QACzB;AAEA,YAAI,YAAY,SAAS,YAAY,WAAW;AAC9C,cAAIE,SAAQ,CAAC;AACb,UAAAA,OAAM,aAAa;AACnB,UAAAA,OAAM,YAAY;AAClB,iBAAOA;AAAA,QACT;AAEA,YAAI,QAAQ,CAAC;AAEb,YAAI,kBAAkB,SAAS,YAAY,sBAAsB;AAE/D,kBAAO,sBAAsB;AAAA,YAC7B,KAAK,uBAAuB;AAC1B,qBAAO,gBAAgB,aAAa,KAAK,IAAI,CAAC;AAAA,YAChD,KAAK,uBAAuB;AAC1B,qBAAO,gBAAgB,aAAa,KAAK,IAAI,CAAC;AAAA,YAChD,KAAK,uBAAuB;AAC1B,qBAAO,gBAAgB,aAAa,KAAK,IAAI,CAAC;AAAA,YAChD,KAAK,uBAAuB;AAC1B,qBAAO,gBAAgB,aAAa,KAAK,IAAI,CAAC;AAAA,YAChD;AACE,qBAAO;AAAA,UACT;AAAA,QACF;AAEA,cAAM,cAAc,SAAS,YAAY,sBAAsB;AAE7D,cAAI,UAAU,gBAAgB,YAAY,oBAAoB;AAE9D,cAAI,OAAO,WAAW,aAAa;AACjC,kBAAM,+BAA+B,aACjC,2BAA2B;AAAA,UACjC;AAEA,cAAI,SAAS,QAAQ,SAAS;AAE9B,cAAI,OAAO,CAAC;AAEZ,mBAASrB,KAAI,GAAGA,KAAI,QAAQA,MAAK,GAAG;AAElC,gBAAI,QAAQ,QAAQA,KAAI,IAAI,CAAC;AAC7B,gBAAI,aAAa,QAAQA,KAAI,IAAI,CAAC;AAClC,gBAAI,YAAY,QAAQA,KAAI,IAAI,CAAC;AAEjC,qBAASC,KAAI,GAAGA,KAAI,OAAOA,MAAK,GAAG;AACjC,mBAAK,KAAK,UAAU,YAAY,SAAS,CAAE;AAAA,YAC7C;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT,EAAE;AAMF,UAAI,cAAc,WAAW;AAE3B,YAAI,UAAU,CAAC;AACf,YAAI,UAAU;AAEd,YAAI,QAAQ,CAAC;AAEb,cAAM,YAAY,WAAW;AAC3B,iBAAO;AAAA,QACT;AAEA,cAAM,QAAQ,SAAS,OAAO;AAC5B,cAAI,WAAW,KAAK,MAAM,QAAQ,CAAC;AACnC,kBAAU,QAAQ,QAAQ,MAAO,IAAI,QAAQ,IAAO,MAAM;AAAA,QAC5D;AAEA,cAAM,MAAM,SAAS,KAAK,QAAQ;AAChC,mBAASD,KAAI,GAAGA,KAAI,QAAQA,MAAK,GAAG;AAClC,kBAAM,QAAW,QAAS,SAASA,KAAI,IAAO,MAAM,CAAC;AAAA,UACvD;AAAA,QACF;AAEA,cAAM,kBAAkB,WAAW;AACjC,iBAAO;AAAA,QACT;AAEA,cAAM,SAAS,SAAS,KAAK;AAE3B,cAAI,WAAW,KAAK,MAAM,UAAU,CAAC;AACrC,cAAI,QAAQ,UAAU,UAAU;AAC9B,oBAAQ,KAAK,CAAC;AAAA,UAChB;AAEA,cAAI,KAAK;AACP,oBAAQ,QAAQ,KAAM,QAAU,UAAU;AAAA,UAC5C;AAEA,qBAAW;AAAA,QACb;AAEA,eAAO;AAAA,MACT;AAMA,UAAI,WAAW,SAAS,MAAM;AAE5B,YAAI,QAAQ,OAAO;AACnB,YAAI,QAAQ;AAEZ,YAAI,QAAQ,CAAC;AAEb,cAAM,UAAU,WAAW;AACzB,iBAAO;AAAA,QACT;AAEA,cAAM,YAAY,SAAS,QAAQ;AACjC,iBAAO,MAAM;AAAA,QACf;AAEA,cAAM,QAAQ,SAAS,QAAQ;AAE7B,cAAIsB,QAAO;AAEX,cAAItB,KAAI;AAER,iBAAOA,KAAI,IAAIsB,MAAK,QAAQ;AAC1B,mBAAO,IAAI,SAASA,MAAK,UAAUtB,IAAGA,KAAI,CAAC,CAAE,GAAG,EAAE;AAClD,YAAAA,MAAK;AAAA,UACP;AAEA,cAAIA,KAAIsB,MAAK,QAAQ;AACnB,gBAAIA,MAAK,SAAStB,MAAK,GAAG;AACxB,qBAAO,IAAI,SAASsB,MAAK,UAAUtB,IAAGA,KAAI,CAAC,CAAE,GAAG,CAAC;AAAA,YACnD,WAAWsB,MAAK,SAAStB,MAAK,GAAG;AAC/B,qBAAO,IAAI,SAASsB,MAAK,UAAUtB,IAAGA,KAAI,CAAC,CAAE,GAAG,CAAC;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAEA,YAAI,WAAW,SAASM,IAAG;AACzB,cAAI,MAAM;AACV,mBAASN,KAAI,GAAGA,KAAIM,GAAE,QAAQN,MAAK,GAAG;AACpC,kBAAM,MAAM,KAAK,UAAUM,GAAE,OAAON,EAAC,CAAE;AAAA,UACzC;AACA,iBAAO;AAAA,QACT;AAEA,YAAI,YAAY,SAASD,IAAG;AAC1B,cAAI,OAAOA,MAAKA,MAAK,KAAK;AACxB,mBAAOA,GAAE,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC;AAAA,UAC3C;AACA,gBAAM,mBAAmBA;AAAA,QAC3B;AAEA,eAAO;AAAA,MACT;AAMA,UAAI,aAAa,SAAS,MAAM;AAE9B,YAAI,QAAQ,OAAO;AACnB,YAAI,QAAQ;AAEZ,YAAI,QAAQ,CAAC;AAEb,cAAM,UAAU,WAAW;AACzB,iBAAO;AAAA,QACT;AAEA,cAAM,YAAY,SAAS,QAAQ;AACjC,iBAAO,MAAM;AAAA,QACf;AAEA,cAAM,QAAQ,SAAS,QAAQ;AAE7B,cAAIO,KAAI;AAER,cAAIN,KAAI;AAER,iBAAOA,KAAI,IAAIM,GAAE,QAAQ;AACvB,mBAAO;AAAA,cACL,QAAQA,GAAE,OAAON,EAAC,CAAE,IAAI,KACxB,QAAQM,GAAE,OAAON,KAAI,CAAC,CAAE;AAAA,cAAG;AAAA,YAAE;AAC/B,YAAAA,MAAK;AAAA,UACP;AAEA,cAAIA,KAAIM,GAAE,QAAQ;AAChB,mBAAO,IAAI,QAAQA,GAAE,OAAON,EAAC,CAAE,GAAG,CAAC;AAAA,UACrC;AAAA,QACF;AAEA,YAAI,UAAU,SAASD,IAAG;AAExB,cAAI,OAAOA,MAAKA,MAAK,KAAK;AACxB,mBAAOA,GAAE,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC;AAAA,UAC3C,WAAW,OAAOA,MAAKA,MAAK,KAAK;AAC/B,mBAAOA,GAAE,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI;AAAA,UAC/C,OAAO;AACL,oBAAQA,IAAG;AAAA,cACX,KAAK;AAAM,uBAAO;AAAA,cAClB,KAAK;AAAM,uBAAO;AAAA,cAClB,KAAK;AAAM,uBAAO;AAAA,cAClB,KAAK;AAAM,uBAAO;AAAA,cAClB,KAAK;AAAM,uBAAO;AAAA,cAClB,KAAK;AAAM,uBAAO;AAAA,cAClB,KAAK;AAAM,uBAAO;AAAA,cAClB,KAAK;AAAM,uBAAO;AAAA,cAClB,KAAK;AAAM,uBAAO;AAAA,cAClB;AACE,sBAAM,mBAAmBA;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAMA,UAAI,aAAa,SAAS,MAAM;AAE9B,YAAI,QAAQ,OAAO;AACnB,YAAI,QAAQ;AACZ,YAAI,SAASF,QAAO,cAAc,IAAI;AAEtC,YAAI,QAAQ,CAAC;AAEb,cAAM,UAAU,WAAW;AACzB,iBAAO;AAAA,QACT;AAEA,cAAM,YAAY,SAAS,QAAQ;AACjC,iBAAO,OAAO;AAAA,QAChB;AAEA,cAAM,QAAQ,SAAS,QAAQ;AAC7B,mBAASG,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK,GAAG;AACzC,mBAAO,IAAI,OAAOA,EAAC,GAAG,CAAC;AAAA,UACzB;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAMA,UAAI,UAAU,SAAS,MAAM;AAE3B,YAAI,QAAQ,OAAO;AACnB,YAAI,QAAQ;AAEZ,YAAIuB,iBAAgB1B,QAAO,mBAAmB,MAAM;AACpD,YAAI,CAAC0B,gBAAe;AAClB,gBAAM;AAAA,QACR;AACA,SAAC,SAASxB,IAAG,MAAM;AAEjB,cAAI,OAAOwB,eAAcxB,EAAC;AAC1B,cAAI,KAAK,UAAU,MAAQ,KAAK,CAAC,KAAK,IAAK,KAAK,CAAC,MAAM,MAAM;AAC3D,kBAAM;AAAA,UACR;AAAA,QACF,EAAE,UAAU,KAAM;AAElB,YAAI,SAASwB,eAAc,IAAI;AAE/B,YAAI,QAAQ,CAAC;AAEb,cAAM,UAAU,WAAW;AACzB,iBAAO;AAAA,QACT;AAEA,cAAM,YAAY,SAAS,QAAQ;AACjC,iBAAO,CAAC,EAAE,OAAO,SAAS;AAAA,QAC5B;AAEA,cAAM,QAAQ,SAAS,QAAQ;AAE7B,cAAID,QAAO;AAEX,cAAItB,KAAI;AAER,iBAAOA,KAAI,IAAIsB,MAAK,QAAQ;AAE1B,gBAAIvB,MAAO,MAAOuB,MAAKtB,EAAC,MAAM,IAAM,MAAOsB,MAAKtB,KAAI,CAAC;AAErD,gBAAI,SAAUD,MAAKA,MAAK,OAAQ;AAC9B,cAAAA,MAAK;AAAA,YACP,WAAW,SAAUA,MAAKA,MAAK,OAAQ;AACrC,cAAAA,MAAK;AAAA,YACP,OAAO;AACL,oBAAM,sBAAsBC,KAAI,KAAK,MAAMD;AAAA,YAC7C;AAEA,YAAAA,MAAOA,OAAM,IAAK,OAAQ,OAAQA,KAAI;AAEtC,mBAAO,IAAIA,IAAG,EAAE;AAEhB,YAAAC,MAAK;AAAA,UACP;AAEA,cAAIA,KAAIsB,MAAK,QAAQ;AACnB,kBAAM,sBAAsBtB,KAAI;AAAA,UAClC;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAUA,UAAI,wBAAwB,WAAW;AAErC,YAAI,SAAS,CAAC;AAEd,YAAI,QAAQ,CAAC;AAEb,cAAM,YAAY,SAASS,IAAG;AAC5B,iBAAO,KAAKA,KAAI,GAAI;AAAA,QACtB;AAEA,cAAM,aAAa,SAAST,IAAG;AAC7B,gBAAM,UAAUA,EAAC;AACjB,gBAAM,UAAUA,OAAM,CAAC;AAAA,QACzB;AAEA,cAAM,aAAa,SAASS,IAAG,KAAK,KAAK;AACvC,gBAAM,OAAO;AACb,gBAAM,OAAOA,GAAE;AACf,mBAAST,KAAI,GAAGA,KAAI,KAAKA,MAAK,GAAG;AAC/B,kBAAM,UAAUS,GAAET,KAAI,GAAG,CAAC;AAAA,UAC5B;AAAA,QACF;AAEA,cAAM,cAAc,SAASM,IAAG;AAC9B,mBAASN,KAAI,GAAGA,KAAIM,GAAE,QAAQN,MAAK,GAAG;AACpC,kBAAM,UAAUM,GAAE,WAAWN,EAAC,CAAE;AAAA,UAClC;AAAA,QACF;AAEA,cAAM,cAAc,WAAW;AAC7B,iBAAO;AAAA,QACT;AAEA,cAAM,WAAW,WAAW;AAC1B,cAAIM,KAAI;AACR,UAAAA,MAAK;AACL,mBAASN,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK,GAAG;AACzC,gBAAIA,KAAI,GAAG;AACT,cAAAM,MAAK;AAAA,YACP;AACA,YAAAA,MAAK,OAAON,EAAC;AAAA,UACf;AACA,UAAAM,MAAK;AACL,iBAAOA;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAMA,UAAI,2BAA2B,WAAW;AAExC,YAAI,UAAU;AACd,YAAI,UAAU;AACd,YAAI,UAAU;AACd,YAAI,UAAU;AAEd,YAAI,QAAQ,CAAC;AAEb,YAAI,eAAe,SAASG,IAAG;AAC7B,qBAAW,OAAO,aAAae,QAAOf,KAAI,EAAI,CAAE;AAAA,QAClD;AAEA,YAAIe,UAAS,SAASP,IAAG;AACvB,cAAIA,KAAI,GAAG;AAAA,UAEX,WAAWA,KAAI,IAAI;AACjB,mBAAO,KAAOA;AAAA,UAChB,WAAWA,KAAI,IAAI;AACjB,mBAAO,MAAQA,KAAI;AAAA,UACrB,WAAWA,KAAI,IAAI;AACjB,mBAAO,MAAQA,KAAI;AAAA,UACrB,WAAWA,MAAK,IAAI;AAClB,mBAAO;AAAA,UACT,WAAWA,MAAK,IAAI;AAClB,mBAAO;AAAA,UACT;AACA,gBAAM,OAAOA;AAAA,QACf;AAEA,cAAM,YAAY,SAASA,IAAG;AAE5B,oBAAW,WAAW,IAAMA,KAAI;AAChC,qBAAW;AACX,qBAAW;AAEX,iBAAO,WAAW,GAAG;AACnB,yBAAa,YAAa,UAAU,CAAG;AACvC,uBAAW;AAAA,UACb;AAAA,QACF;AAEA,cAAM,QAAQ,WAAW;AAEvB,cAAI,UAAU,GAAG;AACf,yBAAa,WAAY,IAAI,OAAS;AACtC,sBAAU;AACV,sBAAU;AAAA,UACZ;AAEA,cAAI,UAAU,KAAK,GAAG;AAEpB,gBAAI,SAAS,IAAI,UAAU;AAC3B,qBAASjB,KAAI,GAAGA,KAAI,QAAQA,MAAK,GAAG;AAClC,yBAAW;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAEA,cAAM,WAAW,WAAW;AAC1B,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAMA,UAAI,0BAA0B,SAAS,KAAK;AAE1C,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,UAAU;AACd,YAAI,UAAU;AAEd,YAAI,QAAQ,CAAC;AAEb,cAAM,OAAO,WAAW;AAEtB,iBAAO,UAAU,GAAG;AAElB,gBAAI,QAAQ,KAAK,QAAQ;AACvB,kBAAI,WAAW,GAAG;AAChB,uBAAO;AAAA,cACT;AACA,oBAAM,6BAA6B;AAAA,YACrC;AAEA,gBAAID,KAAI,KAAK,OAAO,IAAI;AACxB,oBAAQ;AAER,gBAAIA,MAAK,KAAK;AACZ,wBAAU;AACV,qBAAO;AAAA,YACT,WAAWA,GAAE,MAAM,MAAM,GAAI;AAE3B;AAAA,YACF;AAEA,sBAAW,WAAW,IAAK0B,QAAO1B,GAAE,WAAW,CAAC,CAAE;AAClD,uBAAW;AAAA,UACb;AAEA,cAAIkB,KAAK,YAAa,UAAU,IAAO;AACvC,qBAAW;AACX,iBAAOA;AAAA,QACT;AAEA,YAAIQ,UAAS,SAAS1B,IAAG;AACvB,cAAI,MAAQA,MAAKA,MAAK,IAAM;AAC1B,mBAAOA,KAAI;AAAA,UACb,WAAW,MAAQA,MAAKA,MAAK,KAAM;AACjC,mBAAOA,KAAI,KAAO;AAAA,UACpB,WAAW,MAAQA,MAAKA,MAAK,IAAM;AACjC,mBAAOA,KAAI,KAAO;AAAA,UACpB,WAAWA,MAAK,IAAM;AACpB,mBAAO;AAAA,UACT,WAAWA,MAAK,IAAM;AACpB,mBAAO;AAAA,UACT,OAAO;AACL,kBAAM,OAAOA;AAAA,UACf;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAMA,UAAI,WAAW,SAAS,OAAO,QAAQ;AAErC,YAAI,SAAS;AACb,YAAI,UAAU;AACd,YAAI,QAAQ,IAAI,MAAM,QAAQ,MAAM;AAEpC,YAAI,QAAQ,CAAC;AAEb,cAAM,WAAW,SAASK,IAAGC,IAAG,OAAO;AACrC,gBAAMA,KAAI,SAASD,EAAC,IAAI;AAAA,QAC1B;AAEA,cAAM,QAAQ,SAAS,KAAK;AAK1B,cAAI,YAAY,QAAQ;AAKxB,cAAI,WAAW,MAAM;AACrB,cAAI,WAAW,OAAO;AAEtB,cAAI,UAAU,GAAI;AAClB,cAAI,UAAU,CAAC;AACf,cAAI,UAAU,CAAC;AAMf,cAAI,UAAU,CAAI;AAClB,cAAI,UAAU,CAAI;AAClB,cAAI,UAAU,CAAI;AAGlB,cAAI,UAAU,GAAI;AAClB,cAAI,UAAU,GAAI;AAClB,cAAI,UAAU,GAAI;AAKlB,cAAI,YAAY,GAAG;AACnB,cAAI,WAAW,CAAC;AAChB,cAAI,WAAW,CAAC;AAChB,cAAI,WAAW,MAAM;AACrB,cAAI,WAAW,OAAO;AACtB,cAAI,UAAU,CAAC;AAQf,cAAI,iBAAiB;AACrB,cAAI,SAAS,aAAa,cAAc;AAExC,cAAI,UAAU,cAAc;AAE5B,cAAI,SAAS;AAEb,iBAAO,OAAO,SAAS,SAAS,KAAK;AACnC,gBAAI,UAAU,GAAG;AACjB,gBAAI,WAAW,QAAQ,QAAQ,GAAG;AAClC,sBAAU;AAAA,UACZ;AAEA,cAAI,UAAU,OAAO,SAAS,MAAM;AACpC,cAAI,WAAW,QAAQ,QAAQ,OAAO,SAAS,MAAM;AACrD,cAAI,UAAU,CAAI;AAIlB,cAAI,YAAY,GAAG;AAAA,QACrB;AAEA,YAAI,kBAAkB,SAAS,KAAK;AAElC,cAAI,OAAO;AACX,cAAI,aAAa;AACjB,cAAI,aAAa;AAEjB,cAAIiB,SAAQ,CAAC;AAEb,UAAAA,OAAM,QAAQ,SAAS,MAAM,QAAQ;AAEnC,gBAAM,SAAS,UAAW,GAAG;AAC3B,oBAAM;AAAA,YACR;AAEA,mBAAO,aAAa,UAAU,GAAG;AAC/B,mBAAK,UAAU,OAAU,QAAQ,aAAc,WAAY;AAC3D,wBAAW,IAAI;AACf,wBAAW,IAAI;AACf,2BAAa;AACb,2BAAa;AAAA,YACf;AAEA,yBAAc,QAAQ,aAAc;AACpC,yBAAa,aAAa;AAAA,UAC5B;AAEA,UAAAA,OAAM,QAAQ,WAAW;AACvB,gBAAI,aAAa,GAAG;AAClB,mBAAK,UAAU,UAAU;AAAA,YAC3B;AAAA,UACF;AAEA,iBAAOA;AAAA,QACT;AAEA,YAAI,eAAe,SAAS,gBAAgB;AAE1C,cAAI,YAAY,KAAK;AACrB,cAAI,WAAW,KAAK,kBAAkB;AACtC,cAAI,YAAY,iBAAiB;AAGjC,cAAIK,SAAQ,SAAS;AAErB,mBAAS1B,KAAI,GAAGA,KAAI,WAAWA,MAAK,GAAG;AACrC,YAAA0B,OAAM,IAAI,OAAO,aAAa1B,EAAC,CAAE;AAAA,UACnC;AACA,UAAA0B,OAAM,IAAI,OAAO,aAAa,SAAS,CAAE;AACzC,UAAAA,OAAM,IAAI,OAAO,aAAa,OAAO,CAAE;AAEvC,cAAI,UAAU,sBAAsB;AACpC,cAAI,SAAS,gBAAgB,OAAO;AAGpC,iBAAO,MAAM,WAAW,SAAS;AAEjC,cAAI,YAAY;AAEhB,cAAIpB,KAAI,OAAO,aAAa,MAAM,SAAS,CAAC;AAC5C,uBAAa;AAEb,iBAAO,YAAY,MAAM,QAAQ;AAE/B,gBAAIP,KAAI,OAAO,aAAa,MAAM,SAAS,CAAC;AAC5C,yBAAa;AAEb,gBAAI2B,OAAM,SAASpB,KAAIP,EAAC,GAAI;AAE1B,cAAAO,KAAIA,KAAIP;AAAA,YAEV,OAAO;AAEL,qBAAO,MAAM2B,OAAM,QAAQpB,EAAC,GAAG,SAAS;AAExC,kBAAIoB,OAAM,KAAK,IAAI,MAAO;AAExB,oBAAIA,OAAM,KAAK,KAAM,KAAK,WAAa;AACrC,+BAAa;AAAA,gBACf;AAEA,gBAAAA,OAAM,IAAIpB,KAAIP,EAAC;AAAA,cACjB;AAEA,cAAAO,KAAIP;AAAA,YACN;AAAA,UACF;AAEA,iBAAO,MAAM2B,OAAM,QAAQpB,EAAC,GAAG,SAAS;AAGxC,iBAAO,MAAM,SAAS,SAAS;AAE/B,iBAAO,MAAM;AAEb,iBAAO,QAAQ,YAAY;AAAA,QAC7B;AAEA,YAAI,WAAW,WAAW;AAExB,cAAI,OAAO,CAAC;AACZ,cAAI,QAAQ;AAEZ,cAAIe,SAAQ,CAAC;AAEb,UAAAA,OAAM,MAAM,SAAS,KAAK;AACxB,gBAAIA,OAAM,SAAS,GAAG,GAAI;AACxB,oBAAM,aAAa;AAAA,YACrB;AACA,iBAAK,GAAG,IAAI;AACZ,qBAAS;AAAA,UACX;AAEA,UAAAA,OAAM,OAAO,WAAW;AACtB,mBAAO;AAAA,UACT;AAEA,UAAAA,OAAM,UAAU,SAAS,KAAK;AAC5B,mBAAO,KAAK,GAAG;AAAA,UACjB;AAEA,UAAAA,OAAM,WAAW,SAAS,KAAK;AAC7B,mBAAO,OAAO,KAAK,GAAG,KAAK;AAAA,UAC7B;AAEA,iBAAOA;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAEA,UAAI,gBAAgB,SAAS,OAAO,QAAQ,UAAU;AACpD,YAAI,MAAM,SAAS,OAAO,MAAM;AAChC,iBAAShB,KAAI,GAAGA,KAAI,QAAQA,MAAK,GAAG;AAClC,mBAASD,KAAI,GAAGA,KAAI,OAAOA,MAAK,GAAG;AACjC,gBAAI,SAASA,IAAGC,IAAG,SAASD,IAAGC,EAAC,CAAE;AAAA,UACpC;AAAA,QACF;AAEA,YAAII,KAAI,sBAAsB;AAC9B,YAAI,MAAMA,EAAC;AAEX,YAAI,SAAS,yBAAyB;AACtC,YAAI,QAAQA,GAAE,YAAY;AAC1B,iBAAST,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK,GAAG;AACxC,iBAAO,UAAU,MAAMA,EAAC,CAAC;AAAA,QAC3B;AACA,eAAO,MAAM;AAEb,eAAO,2BAA2B;AAAA,MACpC;AAKA,aAAOH;AAAA,IACT,EAAE;AAGF,KAAC,WAAW;AAEV,MAAAA,QAAO,mBAAmB,OAAO,IAAI,SAASS,IAAG;AAE/C,iBAAS,YAAY,KAAK;AACxB,cAAI,OAAO,CAAC;AACZ,mBAASN,KAAE,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACjC,gBAAI,WAAW,IAAI,WAAWA,EAAC;AAC/B,gBAAI,WAAW;AAAM,mBAAK,KAAK,QAAQ;AAAA,qBAC9B,WAAW,MAAO;AACzB,mBAAK;AAAA,gBAAK,MAAQ,YAAY;AAAA,gBAC1B,MAAQ,WAAW;AAAA,cAAK;AAAA,YAC9B,WACS,WAAW,SAAU,YAAY,OAAQ;AAChD,mBAAK;AAAA,gBAAK,MAAQ,YAAY;AAAA,gBAC1B,MAAS,YAAU,IAAK;AAAA,gBACxB,MAAQ,WAAW;AAAA,cAAK;AAAA,YAC9B,OAEK;AACH,cAAAA;AAIA,yBAAW,UAAa,WAAW,SAAQ,KACtC,IAAI,WAAWA,EAAC,IAAI;AACzB,mBAAK;AAAA,gBAAK,MAAQ,YAAW;AAAA,gBACzB,MAAS,YAAU,KAAM;AAAA,gBACzB,MAAS,YAAU,IAAK;AAAA,gBACxB,MAAQ,WAAW;AAAA,cAAK;AAAA,YAC9B;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,eAAO,YAAYM,EAAC;AAAA,MACtB;AAAA,IAEF,EAAE;AAEF,KAAC,SAAU,SAAS;AAClB,UAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAC5C,eAAO,CAAC,GAAG,OAAO;AAAA,MACtB,WAAW,OAAO,YAAY,UAAU;AACpC,eAAO,UAAU,QAAQ;AAAA,MAC7B;AAAA,IACF,GAAE,WAAY;AACV,aAAOT;AAAA,IACX,CAAC;AAAA;AAAA;;;ACjvED,IAAM,KAAK,SAAU,OAAiB,CAAA,GAAE;AACtC,QAAM8B,KAAI,IAAI,aAAa,EAAE;AAC7B,MAAI;AAAM,aAASC,KAAI,GAAGA,KAAI,KAAK,QAAQA;AAAK,MAAAD,GAAEC,EAAC,IAAI,KAAKA,EAAC;AAC7D,SAAOD;AACT;AAGA,IAAI,cAAc,SAAUE,IAAeC,IAAS;AAClD,QAAM,IAAI,MAAM,SAAS;AAC3B;AAEA,IAAM,KAAK,IAAI,WAAW,EAAE;AAC5B,GAAG,CAAC,IAAI;AAGR,IAAM,MAAM,GAAE;AACd,IAAM,MAAM,GAAG,CAAC,CAAC,CAAC;AAClB,IAAM,UAAU,GAAG,CAAC,OAAQ,CAAC,CAAC;AAC9B,IAAM,IAAI,GAAG;EACX;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAChE;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;CACjD;AACD,IAAM,KAAK,GAAG;EACZ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAChE;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;CACjD;AACD,IAAM,IAAI,GAAG;EACX;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAChE;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;CACjD;AACD,IAAM,IAAI,GAAG;EACX;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAChE;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;CACjD;AACD,IAAM,IAAI,GAAG;EACX;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAChE;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;EAAQ;CACjD;AAED,SAAS,KAAKD,IAAeD,IAAWG,IAAWC,IAAS;AAC1D,EAAAH,GAAED,EAAC,IAAKG,MAAK,KAAM;AACnB,EAAAF,GAAED,KAAI,CAAC,IAAKG,MAAK,KAAM;AACvB,EAAAF,GAAED,KAAI,CAAC,IAAKG,MAAK,IAAK;AACtB,EAAAF,GAAED,KAAI,CAAC,IAAIG,KAAI;AACf,EAAAF,GAAED,KAAI,CAAC,IAAKI,MAAK,KAAM;AACvB,EAAAH,GAAED,KAAI,CAAC,IAAKI,MAAK,KAAM;AACvB,EAAAH,GAAED,KAAI,CAAC,IAAKI,MAAK,IAAK;AACtB,EAAAH,GAAED,KAAI,CAAC,IAAII,KAAI;AACjB;AAEA,SAAS,GACPH,IACA,IACAI,IACA,IACAH,IAAS;AAET,MAAIF,IACFM,KAAI;AACN,OAAKN,KAAI,GAAGA,KAAIE,IAAGF;AAAK,IAAAM,MAAKL,GAAE,KAAKD,EAAC,IAAIK,GAAE,KAAKL,EAAC;AACjD,UAAQ,IAAMM,KAAI,MAAO,KAAM;AACjC;AAWA,SAAS,iBACPC,IACA,IACAC,IACA,IAAU;AAEV,SAAO,GAAGD,IAAG,IAAIC,IAAG,IAAI,EAAE;AAC5B;AAkfA,IAAI,QAAQ,IAAI,WAAW;EACzB;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;CACrE;AAqiBD,SAAS,SAASC,IAAiBC,IAAe;AAChD,MAAIC;AACJ,OAAKA,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAF,GAAEE,EAAC,IAAID,GAAEC,EAAC,IAAI;AACzC;AAEA,SAAS,SAASC,IAAe;AAC/B,MAAID,IACFE,IACAC,KAAI;AACN,OAAKH,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,IAAAE,KAAID,GAAED,EAAC,IAAIG,KAAI;AACf,IAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,IAAAD,GAAED,EAAC,IAAIE,KAAIC,KAAI;EACjB;AACA,EAAAF,GAAE,CAAC,KAAKE,KAAI,IAAI,MAAMA,KAAI;AAC5B;AAEA,SAAS,SAASC,IAAiBC,IAAiBC,IAAS;AAC3D,MAAIC;AACJ,QAAMJ,KAAI,EAAEG,KAAI;AAChB,WAASN,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,IAAAO,KAAIJ,MAAKC,GAAEJ,EAAC,IAAIK,GAAEL,EAAC;AACnB,IAAAI,GAAEJ,EAAC,KAAKO;AACR,IAAAF,GAAEL,EAAC,KAAKO;EACV;AACF;AAEA,SAAS,UAAUN,IAAeO,IAAe;AAC/C,MAAIR,IAAGS,IAAGH;AACV,QAAMI,KAAI,GAAE,GACVH,KAAI,GAAE;AACR,OAAKP,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAO,GAAEP,EAAC,IAAIQ,GAAER,EAAC;AACnC,WAASO,EAAC;AACV,WAASA,EAAC;AACV,WAASA,EAAC;AACV,OAAKE,KAAI,GAAGA,KAAI,GAAGA,MAAK;AACtB,IAAAC,GAAE,CAAC,IAAIH,GAAE,CAAC,IAAI;AACd,SAAKP,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,MAAAU,GAAEV,EAAC,IAAIO,GAAEP,EAAC,IAAI,SAAWU,GAAEV,KAAI,CAAC,KAAK,KAAM;AAC3C,MAAAU,GAAEV,KAAI,CAAC,KAAK;IACd;AACA,IAAAU,GAAE,EAAE,IAAIH,GAAE,EAAE,IAAI,SAAWG,GAAE,EAAE,KAAK,KAAM;AAC1C,IAAAJ,KAAKI,GAAE,EAAE,KAAK,KAAM;AACpB,IAAAA,GAAE,EAAE,KAAK;AACT,aAASH,IAAGG,IAAG,IAAIJ,EAAC;EACtB;AACA,OAAKN,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,IAAAC,GAAE,IAAID,EAAC,IAAIO,GAAEP,EAAC,IAAI;AAClB,IAAAC,GAAE,IAAID,KAAI,CAAC,IAAIO,GAAEP,EAAC,KAAK;EACzB;AACF;AAEA,SAAS,SAASD,IAAiBO,IAAe;AAChD,QAAMH,KAAI,IAAI,WAAW,EAAE,GACzBQ,KAAI,IAAI,WAAW,EAAE;AACvB,YAAUR,IAAGJ,EAAC;AACd,YAAUY,IAAGL,EAAC;AACd,SAAO,iBAAiBH,IAAG,GAAGQ,IAAG,CAAC;AACpC;AAEA,SAAS,SAASZ,IAAe;AAC/B,QAAMY,KAAI,IAAI,WAAW,EAAE;AAC3B,YAAUA,IAAGZ,EAAC;AACd,SAAOY,GAAE,CAAC,IAAI;AAChB;AAEA,SAAS,YAAYV,IAAiBO,IAAa;AACjD,MAAIR;AACJ,OAAKA,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAC,GAAED,EAAC,IAAIQ,GAAE,IAAIR,EAAC,KAAKQ,GAAE,IAAIR,KAAI,CAAC,KAAK;AAC5D,EAAAC,GAAE,EAAE,KAAK;AACX;AAEA,SAAS,EAAEA,IAAiBF,IAAiBO,IAAe;AAC1D,WAASN,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAC,GAAED,EAAC,IAAID,GAAEC,EAAC,IAAIM,GAAEN,EAAC;AAChD;AAEA,SAAS,EAAEC,IAAiBF,IAAiBO,IAAe;AAC1D,WAASN,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAC,GAAED,EAAC,IAAID,GAAEC,EAAC,IAAIM,GAAEN,EAAC;AAChD;AAEA,SAAS,EAAEC,IAAiBF,IAAiBO,IAAe;AAC1D,MAAIJ,IACFC,IACA,KAAK,GACL,KAAK,GACLS,MAAK,GACLC,MAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACNC,OAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM;AACR,QAAM,KAAKR,GAAE,CAAC,GACZ,KAAKA,GAAE,CAAC,GACRS,MAAKT,GAAE,CAAC,GACRU,MAAKV,GAAE,CAAC,GACRW,MAAKX,GAAE,CAAC,GACR,KAAKA,GAAE,CAAC,GACR,KAAKA,GAAE,CAAC,GACR,KAAKA,GAAE,CAAC,GACR,KAAKA,GAAE,CAAC,GACR,KAAKA,GAAE,CAAC,GACR,MAAMA,GAAE,EAAE,GACV,MAAMA,GAAE,EAAE,GACV,MAAMA,GAAE,EAAE,GACV,MAAMA,GAAE,EAAE,GACV,MAAMA,GAAE,EAAE,GACV,MAAMA,GAAE,EAAE;AAEZ,EAAAJ,KAAIH,GAAE,CAAC;AACP,QAAMG,KAAI;AACV,QAAMA,KAAI;AACV,EAAAU,OAAMV,KAAIa;AACV,EAAAF,OAAMX,KAAIc;AACV,QAAMd,KAAIe;AACV,QAAMf,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAI;AACV,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,QAAMG,KAAI;AACV,EAAAU,OAAMV,KAAI;AACV,EAAAW,OAAMX,KAAIa;AACV,QAAMb,KAAIc;AACV,QAAMd,KAAIe;AACV,QAAMf,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAI;AACV,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,EAAAa,OAAMV,KAAI;AACV,EAAAW,OAAMX,KAAI;AACV,QAAMA,KAAIa;AACV,QAAMb,KAAIc;AACV,QAAMd,KAAIe;AACV,QAAMf,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAI;AACV,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,EAAAc,OAAMX,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAIa;AACV,QAAMb,KAAIc;AACV,QAAMd,KAAIe;AACV,QAAMf,KAAI;AACV,QAAMA,KAAI;AACV,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,QAAMG,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAIa;AACV,QAAMb,KAAIc;AACV,QAAMd,KAAIe;AACV,QAAMf,KAAI;AACV,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,QAAMG,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAIa;AACV,QAAMb,KAAIc;AACV,QAAMd,KAAIe;AACV,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,QAAMG,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAIa;AACV,QAAMb,KAAIc;AACV,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,QAAMG,KAAI;AACV,QAAMA,KAAI;AACV,QAAMA,KAAIa;AACV,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,QAAMG,KAAI;AACV,QAAMA,KAAI;AACV,SAAOA,KAAIa;AACX,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,CAAC;AACP,QAAMG,KAAI;AACV,SAAOA,KAAI;AACX,SAAOA,KAAIa;AACX,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,EAAE;AACR,SAAOG,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAIa;AACX,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,EAAE;AACR,SAAOG,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAIa;AACX,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,EAAE;AACR,SAAOG,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAIa;AACX,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,EAAE;AACR,SAAOG,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAIa;AACX,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,EAAE;AACR,SAAOG,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAIa;AACX,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,EAAAA,KAAIH,GAAE,EAAE;AACR,SAAOG,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAIa;AACX,SAAOb,KAAIc;AACX,SAAOd,KAAIe;AACX,SAAOf,KAAI;AACX,SAAOA,KAAI;AACX,EAAAY,QAAOZ,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AACX,SAAOA,KAAI;AAEX,QAAM,KAAK;AACX,QAAM,KAAK;AACX,EAAAU,OAAM,KAAK;AACX,EAAAC,OAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,KAAKC;AACX,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,KAAK;AACX,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AAIZ,EAAAX,KAAI;AACJ,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAIU,MAAKT,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,EAAAU,MAAKV,KAAIC,KAAI;AACb,EAAAD,KAAIW,MAAKV,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,EAAAW,MAAKX,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,QAAMA,KAAI,IAAI,MAAMA,KAAI;AAGxB,EAAAA,KAAI;AACJ,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAIU,MAAKT,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,EAAAU,MAAKV,KAAIC,KAAI;AACb,EAAAD,KAAIW,MAAKV,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,EAAAW,MAAKX,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,KAAKC,KAAI;AACb,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,OAAKA,KAAIC,KAAI;AACb,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,EAAAD,KAAI,MAAMC,KAAI;AACd,EAAAA,KAAI,KAAK,MAAMD,KAAI,KAAK;AACxB,QAAMA,KAAIC,KAAI;AACd,QAAMA,KAAI,IAAI,MAAMA,KAAI;AAExB,EAAAF,GAAE,CAAC,IAAI;AACP,EAAAA,GAAE,CAAC,IAAI;AACP,EAAAA,GAAE,CAAC,IAAIW;AACP,EAAAX,GAAE,CAAC,IAAIY;AACP,EAAAZ,GAAE,CAAC,IAAI;AACP,EAAAA,GAAE,CAAC,IAAI;AACP,EAAAA,GAAE,CAAC,IAAI;AACP,EAAAA,GAAE,CAAC,IAAI;AACP,EAAAA,GAAE,CAAC,IAAI;AACP,EAAAA,GAAE,CAAC,IAAI;AACP,EAAAA,GAAE,EAAE,IAAI;AACR,EAAAA,GAAE,EAAE,IAAI;AACR,EAAAA,GAAE,EAAE,IAAI;AACR,EAAAA,GAAE,EAAE,IAAI;AACR,EAAAA,GAAE,EAAE,IAAI;AACR,EAAAA,GAAE,EAAE,IAAI;AACV;AAEA,SAAS,EAAEA,IAAiBF,IAAe;AACzC,IAAEE,IAAGF,IAAGA,EAAC;AACX;AAEA,SAAS,SAASE,IAAiBD,IAAe;AAChD,QAAMG,KAAI,GAAE;AACZ,MAAIJ;AACJ,OAAKA,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAI,GAAEJ,EAAC,IAAIC,GAAED,EAAC;AACnC,OAAKA,KAAI,KAAKA,MAAK,GAAGA,MAAK;AACzB,MAAEI,IAAGA,EAAC;AACN,QAAIJ,OAAM,KAAKA,OAAM;AAAG,QAAEI,IAAGA,IAAGH,EAAC;EACnC;AACA,OAAKD,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAE,GAAEF,EAAC,IAAII,GAAEJ,EAAC;AACrC;AAEA,SAAS,QAAQE,IAAiBD,IAAe;AAC/C,QAAMG,KAAI,GAAE;AACZ,MAAIJ;AACJ,OAAKA,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAI,GAAEJ,EAAC,IAAIC,GAAED,EAAC;AACnC,OAAKA,KAAI,KAAKA,MAAK,GAAGA,MAAK;AACzB,MAAEI,IAAGA,EAAC;AACN,QAAIJ,OAAM;AAAG,QAAEI,IAAGA,IAAGH,EAAC;EACxB;AACA,OAAKD,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAE,GAAEF,EAAC,IAAII,GAAEJ,EAAC;AACrC;AA0IA,IAAM,IAAI;EACR;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;EACpC;EAAY;EAAY;EAAY;;AAGtC,SAAS,qBACP,IACA,IACAmB,IACAC,IAAS;AAET,QAAM,KAAK,IAAI,WAAW,EAAE,GAC1B,KAAK,IAAI,WAAW,EAAE;AACxB,MAAI,KACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC;AAEF,MAAI,MAAM,GAAG,CAAC,GACZ,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC;AAEZ,MAAI,MAAM;AACV,SAAOR,MAAK,KAAK;AACf,SAAKC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,MAAAC,KAAI,IAAID,KAAI;AACZ,SAAGA,EAAC,IAAKF,GAAEG,KAAI,CAAC,KAAK,KAAOH,GAAEG,KAAI,CAAC,KAAK,KAAOH,GAAEG,KAAI,CAAC,KAAK,IAAKH,GAAEG,KAAI,CAAC;AACvE,SAAGD,EAAC,IAAKF,GAAEG,KAAI,CAAC,KAAK,KAAOH,GAAEG,KAAI,CAAC,KAAK,KAAOH,GAAEG,KAAI,CAAC,KAAK,IAAKH,GAAEG,KAAI,CAAC;IACzE;AACA,SAAKD,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AAEN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AAGN,MAAAE,KAAI;AACJ,MAAAC,KAAI;AAEJ,MAAAC,KAAID,KAAI;AACR,MAAAE,KAAIF,OAAM;AACV,MAAAG,KAAIJ,KAAI;AACR,MAAAK,KAAIL,OAAM;AAGV,MAAAA,MACI,QAAQ,KAAO,OAAQ,KAAK,OAC5B,QAAQ,KAAO,OAAQ,KAAK,OAC5B,QAAS,KAAK,KAAQ,OAAQ,MAAM,KAAK;AAC7C,MAAAC,MACI,QAAQ,KAAO,OAAQ,KAAK,OAC5B,QAAQ,KAAO,OAAQ,KAAK,OAC5B,QAAS,KAAK,KAAQ,OAAQ,MAAM,KAAK;AAE7C,MAAAC,MAAKD,KAAI;AACT,MAAAE,MAAKF,OAAM;AACX,MAAAG,MAAKJ,KAAI;AACT,MAAAK,MAAKL,OAAM;AAGX,MAAAA,KAAK,MAAM,MAAQ,CAAC,MAAM;AAC1B,MAAAC,KAAK,MAAM,MAAQ,CAAC,MAAM;AAE1B,MAAAC,MAAKD,KAAI;AACT,MAAAE,MAAKF,OAAM;AACX,MAAAG,MAAKJ,KAAI;AACT,MAAAK,MAAKL,OAAM;AAGX,MAAAA,KAAI,EAAEF,KAAI,CAAC;AACX,MAAAG,KAAI,EAAEH,KAAI,IAAI,CAAC;AAEf,MAAAI,MAAKD,KAAI;AACT,MAAAE,MAAKF,OAAM;AACX,MAAAG,MAAKJ,KAAI;AACT,MAAAK,MAAKL,OAAM;AAGX,MAAAA,KAAI,GAAGF,KAAI,EAAE;AACb,MAAAG,KAAI,GAAGH,KAAI,EAAE;AAEb,MAAAI,MAAKD,KAAI;AACT,MAAAE,MAAKF,OAAM;AACX,MAAAG,MAAKJ,KAAI;AACT,MAAAK,MAAKL,OAAM;AAEX,MAAAG,MAAKD,OAAM;AACX,MAAAE,MAAKD,OAAM;AACX,MAAAE,MAAKD,OAAM;AAEX,WAAMA,KAAI,QAAWC,MAAK;AAC1B,WAAMH,KAAI,QAAWC,MAAK;AAG1B,MAAAH,KAAI;AACJ,MAAAC,KAAI;AAEJ,MAAAC,KAAID,KAAI;AACR,MAAAE,KAAIF,OAAM;AACV,MAAAG,KAAIJ,KAAI;AACR,MAAAK,KAAIL,OAAM;AAGV,MAAAA,MACI,QAAQ,KAAO,OAAQ,KAAK,OAC5B,QAAS,KAAK,KAAQ,OAAQ,MAAM,KAAK,QACzC,QAAS,KAAK,KAAQ,OAAQ,MAAM,KAAK;AAC7C,MAAAC,MACI,QAAQ,KAAO,OAAQ,KAAK,OAC5B,QAAS,KAAK,KAAQ,OAAQ,MAAM,KAAK,QACzC,QAAS,KAAK,KAAQ,OAAQ,MAAM,KAAK;AAE7C,MAAAC,MAAKD,KAAI;AACT,MAAAE,MAAKF,OAAM;AACX,MAAAG,MAAKJ,KAAI;AACT,MAAAK,MAAKL,OAAM;AAGX,MAAAA,KAAK,MAAM,MAAQ,MAAM,MAAQ,MAAM;AACvC,MAAAC,KAAK,MAAM,MAAQ,MAAM,MAAQ,MAAM;AAEvC,MAAAC,MAAKD,KAAI;AACT,MAAAE,MAAKF,OAAM;AACX,MAAAG,MAAKJ,KAAI;AACT,MAAAK,MAAKL,OAAM;AAEX,MAAAG,MAAKD,OAAM;AACX,MAAAE,MAAKD,OAAM;AACX,MAAAE,MAAKD,OAAM;AAEX,YAAOA,KAAI,QAAWC,MAAK;AAC3B,YAAOH,KAAI,QAAWC,MAAK;AAG3B,MAAAH,KAAI;AACJ,MAAAC,KAAI;AAEJ,MAAAC,KAAID,KAAI;AACR,MAAAE,KAAIF,OAAM;AACV,MAAAG,KAAIJ,KAAI;AACR,MAAAK,KAAIL,OAAM;AAEV,MAAAA,KAAI;AACJ,MAAAC,KAAI;AAEJ,MAAAC,MAAKD,KAAI;AACT,MAAAE,MAAKF,OAAM;AACX,MAAAG,MAAKJ,KAAI;AACT,MAAAK,MAAKL,OAAM;AAEX,MAAAG,MAAKD,OAAM;AACX,MAAAE,MAAKD,OAAM;AACX,MAAAE,MAAKD,OAAM;AAEX,YAAOA,KAAI,QAAWC,MAAK;AAC3B,YAAOH,KAAI,QAAWC,MAAK;AAE3B,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AAEN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AAEN,UAAIL,KAAI,OAAO,IAAI;AACjB,aAAKC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAEvB,UAAAC,KAAI,GAAGD,EAAC;AACR,UAAAE,KAAI,GAAGF,EAAC;AAER,UAAAG,KAAID,KAAI;AACR,UAAAE,KAAIF,OAAM;AACV,UAAAG,KAAIJ,KAAI;AACR,UAAAK,KAAIL,OAAM;AAEV,UAAAA,KAAI,IAAID,KAAI,KAAK,EAAE;AACnB,UAAAE,KAAI,IAAIF,KAAI,KAAK,EAAE;AAEnB,UAAAG,MAAKD,KAAI;AACT,UAAAE,MAAKF,OAAM;AACX,UAAAG,MAAKJ,KAAI;AACT,UAAAK,MAAKL,OAAM;AAGX,eAAK,IAAID,KAAI,KAAK,EAAE;AACpB,eAAK,IAAIA,KAAI,KAAK,EAAE;AACpB,UAAAC,MACI,OAAO,IAAM,MAAO,KAAK,MACzB,OAAO,IAAM,MAAO,KAAK,KAC1B,OAAO;AACV,UAAAC,MACI,OAAO,IAAM,MAAO,KAAK,MACzB,OAAO,IAAM,MAAO,KAAK,MACzB,OAAO,IAAM,MAAO,KAAK;AAE7B,UAAAC,MAAKD,KAAI;AACT,UAAAE,MAAKF,OAAM;AACX,UAAAG,MAAKJ,KAAI;AACT,UAAAK,MAAKL,OAAM;AAGX,eAAK,IAAID,KAAI,MAAM,EAAE;AACrB,eAAK,IAAIA,KAAI,MAAM,EAAE;AACrB,UAAAC,MACI,OAAO,KAAO,MAAO,KAAK,OAC1B,OAAQ,KAAK,KAAQ,MAAO,MAAM,KAAK,OACxC,OAAO;AACV,UAAAC,MACI,OAAO,KAAO,MAAO,KAAK,OAC1B,OAAQ,KAAK,KAAQ,MAAO,MAAM,KAAK,QACvC,OAAO,IAAM,MAAO,KAAK;AAE7B,UAAAC,MAAKD,KAAI;AACT,UAAAE,MAAKF,OAAM;AACX,UAAAG,MAAKJ,KAAI;AACT,UAAAK,MAAKL,OAAM;AAEX,UAAAG,MAAKD,OAAM;AACX,UAAAE,MAAKD,OAAM;AACX,UAAAE,MAAKD,OAAM;AAEX,aAAGL,EAAC,IAAKK,KAAI,QAAWC,MAAK;AAC7B,aAAGN,EAAC,IAAKG,KAAI,QAAWC,MAAK;QAC/B;MACF;IACF;AAGA,IAAAH,KAAI;AACJ,IAAAC,KAAI;AAEJ,IAAAC,KAAID,KAAI;AACR,IAAAE,KAAIF,OAAM;AACV,IAAAG,KAAIJ,KAAI;AACR,IAAAK,KAAIL,OAAM;AAEV,IAAAA,KAAI,GAAG,CAAC;AACR,IAAAC,KAAI,GAAG,CAAC;AAER,IAAAC,MAAKD,KAAI;AACT,IAAAE,MAAKF,OAAM;AACX,IAAAG,MAAKJ,KAAI;AACT,IAAAK,MAAKL,OAAM;AAEX,IAAAG,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AAEX,OAAG,CAAC,IAAI,MAAOA,KAAI,QAAWC,MAAK;AACnC,OAAG,CAAC,IAAI,MAAOH,KAAI,QAAWC,MAAK;AAEnC,IAAAH,KAAI;AACJ,IAAAC,KAAI;AAEJ,IAAAC,KAAID,KAAI;AACR,IAAAE,KAAIF,OAAM;AACV,IAAAG,KAAIJ,KAAI;AACR,IAAAK,KAAIL,OAAM;AAEV,IAAAA,KAAI,GAAG,CAAC;AACR,IAAAC,KAAI,GAAG,CAAC;AAER,IAAAC,MAAKD,KAAI;AACT,IAAAE,MAAKF,OAAM;AACX,IAAAG,MAAKJ,KAAI;AACT,IAAAK,MAAKL,OAAM;AAEX,IAAAG,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AAEX,OAAG,CAAC,IAAI,MAAOA,KAAI,QAAWC,MAAK;AACnC,OAAG,CAAC,IAAI,MAAOH,KAAI,QAAWC,MAAK;AAEnC,IAAAH,KAAI;AACJ,IAAAC,KAAI;AAEJ,IAAAC,KAAID,KAAI;AACR,IAAAE,KAAIF,OAAM;AACV,IAAAG,KAAIJ,KAAI;AACR,IAAAK,KAAIL,OAAM;AAEV,IAAAA,KAAI,GAAG,CAAC;AACR,IAAAC,KAAI,GAAG,CAAC;AAER,IAAAC,MAAKD,KAAI;AACT,IAAAE,MAAKF,OAAM;AACX,IAAAG,MAAKJ,KAAI;AACT,IAAAK,MAAKL,OAAM;AAEX,IAAAG,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AAEX,OAAG,CAAC,IAAI,MAAOA,KAAI,QAAWC,MAAK;AACnC,OAAG,CAAC,IAAI,MAAOH,KAAI,QAAWC,MAAK;AAEnC,IAAAH,KAAI;AACJ,IAAAC,KAAI;AAEJ,IAAAC,KAAID,KAAI;AACR,IAAAE,KAAIF,OAAM;AACV,IAAAG,KAAIJ,KAAI;AACR,IAAAK,KAAIL,OAAM;AAEV,IAAAA,KAAI,GAAG,CAAC;AACR,IAAAC,KAAI,GAAG,CAAC;AAER,IAAAC,MAAKD,KAAI;AACT,IAAAE,MAAKF,OAAM;AACX,IAAAG,MAAKJ,KAAI;AACT,IAAAK,MAAKL,OAAM;AAEX,IAAAG,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AAEX,OAAG,CAAC,IAAI,MAAOA,KAAI,QAAWC,MAAK;AACnC,OAAG,CAAC,IAAI,MAAOH,KAAI,QAAWC,MAAK;AAEnC,IAAAH,KAAI;AACJ,IAAAC,KAAI;AAEJ,IAAAC,KAAID,KAAI;AACR,IAAAE,KAAIF,OAAM;AACV,IAAAG,KAAIJ,KAAI;AACR,IAAAK,KAAIL,OAAM;AAEV,IAAAA,KAAI,GAAG,CAAC;AACR,IAAAC,KAAI,GAAG,CAAC;AAER,IAAAC,MAAKD,KAAI;AACT,IAAAE,MAAKF,OAAM;AACX,IAAAG,MAAKJ,KAAI;AACT,IAAAK,MAAKL,OAAM;AAEX,IAAAG,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AAEX,OAAG,CAAC,IAAI,MAAOA,KAAI,QAAWC,MAAK;AACnC,OAAG,CAAC,IAAI,MAAOH,KAAI,QAAWC,MAAK;AAEnC,IAAAH,KAAI;AACJ,IAAAC,KAAI;AAEJ,IAAAC,KAAID,KAAI;AACR,IAAAE,KAAIF,OAAM;AACV,IAAAG,KAAIJ,KAAI;AACR,IAAAK,KAAIL,OAAM;AAEV,IAAAA,KAAI,GAAG,CAAC;AACR,IAAAC,KAAI,GAAG,CAAC;AAER,IAAAC,MAAKD,KAAI;AACT,IAAAE,MAAKF,OAAM;AACX,IAAAG,MAAKJ,KAAI;AACT,IAAAK,MAAKL,OAAM;AAEX,IAAAG,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AAEX,OAAG,CAAC,IAAI,MAAOA,KAAI,QAAWC,MAAK;AACnC,OAAG,CAAC,IAAI,MAAOH,KAAI,QAAWC,MAAK;AAEnC,IAAAH,KAAI;AACJ,IAAAC,KAAI;AAEJ,IAAAC,KAAID,KAAI;AACR,IAAAE,KAAIF,OAAM;AACV,IAAAG,KAAIJ,KAAI;AACR,IAAAK,KAAIL,OAAM;AAEV,IAAAA,KAAI,GAAG,CAAC;AACR,IAAAC,KAAI,GAAG,CAAC;AAER,IAAAC,MAAKD,KAAI;AACT,IAAAE,MAAKF,OAAM;AACX,IAAAG,MAAKJ,KAAI;AACT,IAAAK,MAAKL,OAAM;AAEX,IAAAG,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AAEX,OAAG,CAAC,IAAI,MAAOA,KAAI,QAAWC,MAAK;AACnC,OAAG,CAAC,IAAI,MAAOH,KAAI,QAAWC,MAAK;AAEnC,IAAAH,KAAI;AACJ,IAAAC,KAAI;AAEJ,IAAAC,KAAID,KAAI;AACR,IAAAE,KAAIF,OAAM;AACV,IAAAG,KAAIJ,KAAI;AACR,IAAAK,KAAIL,OAAM;AAEV,IAAAA,KAAI,GAAG,CAAC;AACR,IAAAC,KAAI,GAAG,CAAC;AAER,IAAAC,MAAKD,KAAI;AACT,IAAAE,MAAKF,OAAM;AACX,IAAAG,MAAKJ,KAAI;AACT,IAAAK,MAAKL,OAAM;AAEX,IAAAG,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AACX,IAAAE,MAAKD,OAAM;AAEX,OAAG,CAAC,IAAI,MAAOA,KAAI,QAAWC,MAAK;AACnC,OAAG,CAAC,IAAI,MAAOH,KAAI,QAAWC,MAAK;AAEnC,WAAO;AACP,IAAAN,MAAK;EACP;AAEA,SAAOA;AACT;AAEA,SAAS,YAAY,KAAiBD,IAAeC,IAAS;AAC5D,QAAM,KAAK,IAAI,WAAW,CAAC;AAC3B,QAAM,KAAK,IAAI,WAAW,CAAC;AAC3B,QAAMS,KAAI,IAAI,WAAW,GAAG;AAC5B,QAAMH,KAAIN;AAEV,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AAER,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AACR,KAAG,CAAC,IAAI;AAER,uBAAqB,IAAI,IAAID,IAAGC,EAAC;AACjC,EAAAA,MAAK;AAEL,WAASC,KAAI,GAAGA,KAAID,IAAGC;AAAK,IAAAQ,GAAER,EAAC,IAAIF,GAAEO,KAAIN,KAAIC,EAAC;AAC9C,EAAAQ,GAAET,EAAC,IAAI;AAEP,EAAAA,KAAI,MAAM,OAAOA,KAAI,MAAM,IAAI;AAC/B,EAAAS,GAAET,KAAI,CAAC,IAAI;AACX,OAAKS,IAAGT,KAAI,GAAIM,KAAI,YAAc,GAAGA,MAAK,CAAC;AAC3C,uBAAqB,IAAI,IAAIG,IAAGT,EAAC;AAEjC,WAASC,KAAI,GAAGA,KAAI,GAAGA;AAAK,SAAK,KAAK,IAAIA,IAAG,GAAGA,EAAC,GAAG,GAAGA,EAAC,CAAC;AAEzD,SAAO;AACT;AAKM,IAAO,YAAP,MAAgB;EAQpB,cAAA;AAPQ,SAAA,KAAK,IAAI,WAAW,CAAC;AACrB,SAAA,KAAK,IAAI,WAAW,CAAC;AAErB,SAAA,OAAO,IAAI,WAAW,GAAG;AACzB,SAAA,IAAI;AACJ,SAAA,QAAQ;AAGd,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AAEb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;AACb,SAAK,GAAG,CAAC,IAAI;EACf;EAEA,OAAO,MAAgB;AACrB,SAAK,SAAS,KAAK;AACnB,QAAIA,KAAI;AACR,WAAOA,KAAI,KAAK,QAAQ;AACtB,YAAMS,KAAI,MAAM,KAAK;AACrB,UAAIA,KAAI,KAAK,SAAST,IAAG;AACvB,iBAASC,KAAI,GAAGD,KAAIC,KAAI,KAAK,QAAQA,MAAK;AACxC,eAAK,KAAK,KAAK,IAAIA,EAAC,IAAI,KAAKD,KAAIC,EAAC;QACpC;AACA,aAAK,KAAK,KAAK,SAASD;AACxB;MACF,OAAO;AACL,iBAASC,KAAI,GAAG,KAAK,IAAIA,KAAI,KAAKA,MAAK;AACrC,eAAK,KAAK,KAAK,IAAIA,EAAC,IAAI,KAAKD,KAAIC,EAAC;QACpC;AACA,6BAAqB,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,GAAG;AACrD,QAAAD,MAAK,MAAM,KAAK;AAChB,aAAK,IAAI;MACX;IACF;AACA,WAAO;EACT;EAEA,SAAM;AACJ,UAAM,MAAM,IAAI,WAAW,EAAE;AAC7B,QAAID,KAAI,KAAK;AACb,UAAMS,KAAI,IAAI,WAAW,GAAG;AAC5B,UAAMH,KAAI,KAAK;AACf,aAASL,KAAI,GAAGA,KAAID,IAAGC;AAAK,MAAAQ,GAAER,EAAC,IAAI,KAAK,KAAKA,EAAC;AAC9C,IAAAQ,GAAET,EAAC,IAAI;AAEP,IAAAA,KAAI,MAAM,OAAOA,KAAI,MAAM,IAAI;AAC/B,IAAAS,GAAET,KAAI,CAAC,IAAI;AACX,SAAKS,IAAGT,KAAI,GAAIM,KAAI,YAAc,GAAGA,MAAK,CAAC;AAC3C,yBAAqB,KAAK,IAAI,KAAK,IAAIG,IAAGT,EAAC;AAE3C,aAASC,KAAI,GAAGA,KAAI,GAAGA;AAAK,WAAK,KAAK,IAAIA,IAAG,KAAK,GAAGA,EAAC,GAAG,KAAK,GAAGA,EAAC,CAAC;AACnE,WAAO;EACT;;AAGF,SAAS,IAAIU,IAAmBC,IAAiB;AAC/C,QAAMP,KAAI,GAAE,GACVC,KAAI,GAAE,GACNC,KAAI,GAAE,GACNC,KAAI,GAAE,GACNK,KAAI,GAAE,GACNC,KAAI,GAAE,GACNC,KAAI,GAAE,GACNZ,KAAI,GAAE,GACNa,KAAI,GAAE;AAER,IAAEX,IAAGM,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACf,IAAEK,IAAGJ,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACf,IAAEP,IAAGA,IAAGW,EAAC;AACT,IAAEV,IAAGK,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACf,IAAEK,IAAGJ,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AACf,IAAEN,IAAGA,IAAGU,EAAC;AACT,IAAET,IAAGI,GAAE,CAAC,GAAGC,GAAE,CAAC,CAAC;AACf,IAAEL,IAAGA,IAAG,EAAE;AACV,IAAEC,IAAGG,GAAE,CAAC,GAAGC,GAAE,CAAC,CAAC;AACf,IAAEJ,IAAGA,IAAGA,EAAC;AACT,IAAEK,IAAGP,IAAGD,EAAC;AACT,IAAES,IAAGN,IAAGD,EAAC;AACT,IAAEQ,IAAGP,IAAGD,EAAC;AACT,IAAEJ,IAAGG,IAAGD,EAAC;AAET,IAAEM,GAAE,CAAC,GAAGE,IAAGC,EAAC;AACZ,IAAEH,GAAE,CAAC,GAAGR,IAAGY,EAAC;AACZ,IAAEJ,GAAE,CAAC,GAAGI,IAAGD,EAAC;AACZ,IAAEH,GAAE,CAAC,GAAGE,IAAGV,EAAC;AACd;AAEA,SAAS,MAAMQ,IAAmBC,IAAmBN,IAAS;AAC5D,MAAIL;AACJ,OAAKA,KAAI,GAAGA,KAAI,GAAGA,MAAK;AACtB,aAASU,GAAEV,EAAC,GAAGW,GAAEX,EAAC,GAAGK,EAAC;EACxB;AACF;AAEA,SAAS,KAAKI,IAAeC,IAAiB;AAC5C,QAAM,KAAK,GAAE,GACX,KAAK,GAAE,GACP,KAAK,GAAE;AACT,WAAS,IAAIA,GAAE,CAAC,CAAC;AACjB,IAAE,IAAIA,GAAE,CAAC,GAAG,EAAE;AACd,IAAE,IAAIA,GAAE,CAAC,GAAG,EAAE;AACd,YAAUD,IAAG,EAAE;AACf,EAAAA,GAAE,EAAE,KAAK,SAAS,EAAE,KAAK;AAC3B;AAKA,SAAS,WAAWC,IAAmBC,IAAmBK,IAAa;AACrE,MAAIX,IAAGL;AACP,WAASU,GAAE,CAAC,GAAG,GAAG;AAClB,WAASA,GAAE,CAAC,GAAG,GAAG;AAClB,WAASA,GAAE,CAAC,GAAG,GAAG;AAClB,WAASA,GAAE,CAAC,GAAG,GAAG;AAClB,OAAKV,KAAI,KAAKA,MAAK,GAAG,EAAEA,IAAG;AACzB,IAAAK,KAAKW,GAAGhB,KAAI,IAAK,CAAC,MAAMA,KAAI,KAAM;AAClC,UAAMU,IAAGC,IAAGN,EAAC;AACb,QAAIM,IAAGD,EAAC;AACR,QAAIA,IAAGA,EAAC;AACR,UAAMA,IAAGC,IAAGN,EAAC;EACf;AACF;AAEA,SAAS,WAAWK,IAAmBM,IAAa;AAClD,QAAML,KAAI,CAAC,GAAE,GAAI,GAAE,GAAI,GAAE,GAAI,GAAE,CAAE;AACjC,WAASA,GAAE,CAAC,GAAG,CAAC;AAChB,WAASA,GAAE,CAAC,GAAG,CAAC;AAChB,WAASA,GAAE,CAAC,GAAG,GAAG;AAClB,IAAEA,GAAE,CAAC,GAAG,GAAG,CAAC;AACZ,aAAWD,IAAGC,IAAGK,EAAC;AACpB;AAuBO,IAAM,IAAI,IAAI,aAAa;EAChC;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EACxE;EAAM;EAAM;EAAM;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAChE;AAED,SAAS,KAAKC,IAAeC,IAAe;AAC1C,MAAI,OAAOC,IAAGC,IAAGC;AACjB,OAAKF,KAAI,IAAIA,MAAK,IAAI,EAAEA,IAAG;AACzB,YAAQ;AACR,SAAKC,KAAID,KAAI,IAAIE,KAAIF,KAAI,IAAIC,KAAIC,IAAG,EAAED,IAAG;AACvC,MAAAF,GAAEE,EAAC,KAAK,QAAQ,KAAKF,GAAEC,EAAC,IAAI,EAAEC,MAAKD,KAAI,GAAG;AAC1C,cAAQ,KAAK,OAAOD,GAAEE,EAAC,IAAI,OAAO,GAAG;AACrC,MAAAF,GAAEE,EAAC,KAAK,QAAQ;IAClB;AACA,IAAAF,GAAEE,EAAC,KAAK;AACR,IAAAF,GAAEC,EAAC,IAAI;EACT;AACA,UAAQ;AACR,OAAKC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,IAAAF,GAAEE,EAAC,KAAK,SAASF,GAAE,EAAE,KAAK,KAAK,EAAEE,EAAC;AAClC,YAAQF,GAAEE,EAAC,KAAK;AAChB,IAAAF,GAAEE,EAAC,KAAK;EACV;AACA,OAAKA,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAF,GAAEE,EAAC,KAAK,QAAQ,EAAEA,EAAC;AAC5C,OAAKD,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,IAAAD,GAAEC,KAAI,CAAC,KAAKD,GAAEC,EAAC,KAAK;AACpB,IAAAF,GAAEE,EAAC,IAAID,GAAEC,EAAC,IAAI;EAChB;AACF;AAEA,SAAS,OAAOF,IAAa;AAC3B,QAAMC,KAAI,IAAI,aAAa,EAAE;AAC7B,WAASC,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAD,GAAEC,EAAC,IAAIF,GAAEE,EAAC;AACvC,WAASA,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAF,GAAEE,EAAC,IAAI;AACpC,OAAKF,IAAGC,EAAC;AACX;AA8CA,SAAS,UAAUI,IAAmBC,IAAa;AAEjD,QAAMC,KAAI,CAAC,GAAE,GAAI,GAAE,GAAI,GAAE,GAAI,GAAE,CAAE;AACjC,MAAI,UAAUA,IAAGD,EAAC;AAAG,WAAO;AAC5B,QAAM,UAAU,IAAI,WAAW,EAAE;AACjC,QAAM,UAAU,IAAI,WAAW,EAAE;AACjC,UAAQ,CAAC,IAAI;AACb,QAAM,aAAa,+BAA+B,SAAS,OAAO;AAClE,aAAWD,IAAGE,IAAG,UAAU;AAC3B,SAAO;AACT;AAEA,SAAS,UAAUF,IAAmBC,IAAa;AACjD,QAAME,KAAI,GAAE;AACZ,QAAM,MAAM,GAAE;AACd,QAAM,MAAM,GAAE;AACd,QAAM,MAAM,GAAE;AACd,QAAM,OAAO,GAAE;AACf,QAAM,OAAO,GAAE;AACf,QAAM,OAAO,GAAE;AAEf,WAASH,GAAE,CAAC,GAAG,GAAG;AAClB,cAAYA,GAAE,CAAC,GAAGC,EAAC;AACnB,IAAE,KAAKD,GAAE,CAAC,CAAC;AACX,IAAE,KAAK,KAAK,CAAC;AACb,IAAE,KAAK,KAAKA,GAAE,CAAC,CAAC;AAChB,IAAE,KAAKA,GAAE,CAAC,GAAG,GAAG;AAEhB,IAAE,MAAM,GAAG;AACX,IAAE,MAAM,IAAI;AACZ,IAAE,MAAM,MAAM,IAAI;AAClB,IAAEG,IAAG,MAAM,GAAG;AACd,IAAEA,IAAGA,IAAG,GAAG;AAEX,UAAQA,IAAGA,EAAC;AACZ,IAAEA,IAAGA,IAAG,GAAG;AACX,IAAEA,IAAGA,IAAG,GAAG;AACX,IAAEA,IAAGA,IAAG,GAAG;AACX,IAAEH,GAAE,CAAC,GAAGG,IAAG,GAAG;AAEd,IAAE,KAAKH,GAAE,CAAC,CAAC;AACX,IAAE,KAAK,KAAK,GAAG;AACf,MAAI,SAAS,KAAK,GAAG;AAAG,MAAEA,GAAE,CAAC,GAAGA,GAAE,CAAC,GAAG,CAAC;AAEvC,IAAE,KAAKA,GAAE,CAAC,CAAC;AACX,IAAE,KAAK,KAAK,GAAG;AACf,MAAI,SAAS,KAAK,GAAG;AAAG,WAAO;AAE/B,MAAI,SAASA,GAAE,CAAC,CAAC,MAAMC,GAAE,EAAE,KAAK;AAAG,MAAED,GAAE,CAAC,GAAG,KAAKA,GAAE,CAAC,CAAC;AAEpD,IAAEA,GAAE,CAAC,GAAGA,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AAClB,SAAO;AACT;AAEM,SAAU,uCACdI,IAAa;AAEb,QAAMJ,KAAI,IAAI,WAAW,EAAE;AAC3B,QAAMC,KAAI,CAAC,GAAE,GAAI,GAAE,GAAI,GAAE,GAAI,GAAE,CAAE;AAEjC,aAAWA,IAAGG,EAAC;AACf,OAAKJ,IAAGC,EAAC;AACT,SAAOD;AACT;AAEM,SAAU,kCACdI,IACAF,IAAa;AAEb,QAAMF,KAAI,IAAI,WAAW,EAAE;AAC3B,QAAMC,KAAI,CAAC,GAAE,GAAI,GAAE,GAAI,GAAE,GAAI,GAAE,CAAE;AACjC,QAAM,KAAK,CAAC,GAAE,GAAI,GAAE,GAAI,GAAE,GAAI,GAAE,CAAE;AAElC,MAAI,UAAU,IAAIC,EAAC;AAAG,UAAM,IAAI,MAAK;AACrC,aAAWD,IAAG,IAAIG,EAAC;AACnB,OAAKJ,IAAGC,EAAC;AACT,SAAOD;AACT;AAgBA,SAAS,iBACPK,IACA,IACAC,IACA,IAAc;AAEd,MAAIC,IAAG;AACP,QAAMC,KAAI,IAAI,WAAW,EAAE,GACzBC,KAAI,IAAI,WAAW,EAAE;AACvB,QAAMC,KAAI,CAAC,GAAE,GAAI,GAAE,GAAI,GAAE,GAAI,GAAE,CAAE,GAC/BC,KAAI,CAAC,GAAE,GAAI,GAAE,GAAI,GAAE,GAAI,GAAE,CAAE;AAE7B,SAAO;AACP,MAAIL,KAAI;AAAI,WAAO;AAEnB,MAAI,UAAUK,IAAG,EAAE;AAAG,WAAO;AAE7B,OAAKJ,KAAI,GAAGA,KAAID,IAAGC;AAAK,IAAAF,GAAEE,EAAC,IAAI,GAAGA,EAAC;AACnC,OAAKA,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAF,GAAEE,KAAI,EAAE,IAAI,GAAGA,EAAC;AACzC,cAAYE,IAAGJ,IAAGC,EAAC;AACnB,SAAOG,EAAC;AACR,aAAWC,IAAGC,IAAGF,EAAC;AAElB,aAAWE,IAAG,GAAG,SAAS,EAAE,CAAC;AAC7B,MAAID,IAAGC,EAAC;AACR,OAAKH,IAAGE,EAAC;AAET,EAAAJ,MAAK;AACL,MAAI,iBAAiB,IAAI,GAAGE,IAAG,CAAC,GAAG;AACjC,SAAKD,KAAI,GAAGA,KAAID,IAAGC;AAAK,MAAAF,GAAEE,EAAC,IAAI;AAC/B,WAAO;EACT;AAEA,OAAKA,KAAI,GAAGA,KAAID,IAAGC;AAAK,IAAAF,GAAEE,EAAC,IAAI,GAAGA,KAAI,EAAE;AACxC,SAAOD;AACP,SAAO;AACT;AAQA,IAAM,oBAAoB;AAC1B,IAAM,6BAA6B;AAGnC,IAAM,oBAAoB;AAU1B,SAAS,mBAAmB,MAAkB;AAC5C,WAASM,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AACpC,QAAI,EAAE,KAAKA,EAAC,aAAa;AACvB,YAAM,IAAI,UAAU,iCAAiC;EACzD;AACF;AAEM,SAAU,YAAYC,IAAS;AACnC,QAAMC,KAAI,IAAI,WAAWD,EAAC;AAC1B,cAAYC,IAAGD,EAAC;AAChB,SAAOC;AACT;AAwIM,SAAU,KAAK,KAAe;AAClC,kBAAgB,GAAG;AACnB,QAAMC,KAAI,IAAI,WAAW,iBAAiB;AAC1C,cAAYA,IAAG,KAAK,IAAI,MAAM;AAC9B,SAAOA;AACT;AAYM,SAAU,QAAQC,KAAsC;AAC5D,gBAAcA;AAChB;AA0EM,SAAU,kCAAkCC,IAAa;AAC7D,QAAM,MAAMA,GAAE;AACd,QAAMC,KAAI,IAAI,aAAa,EAAE;AAC7B,WAASC,KAAI,GAAGA,KAAI,KAAKA;AAAK,IAAAD,GAAEC,EAAC,IAAIF,GAAEE,EAAC;AACxC,QAAMC,KAAI,IAAI,WAAW,EAAE;AAC3B,OAAKA,IAAGF,EAAC;AACT,SAAOE;AACT;AAEM,SAAU,+BACdH,IACAI,IAAa;AAEb,QAAMH,KAAI,IAAI,aAAa,EAAE;AAC7B,WAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,IAAAD,GAAEC,EAAC,IAAIF,GAAEE,EAAC,IAAIE,GAAEF,EAAC;EACnB;AACA,QAAMC,KAAI,IAAI,WAAW,EAAE;AAC3B,OAAKA,IAAGF,EAAC;AACT,SAAOE;AACT;AAEM,SAAU,qCAAkC;AAChD,QAAM,OAAO,IAAI,WAAW,EAAE;AAC9B,cAAY,MAAM,EAAE;AACpB,SAAO,6CAA6C,IAAI;AAC1D;AAEM,SAAU,6CACd,MAAgB;AAEhB,QAAM,KAAK,KAAK,IAAI;AACpB,KAAG,CAAC,KAAK;AACT,KAAG,EAAE,KAAK;AACV,KAAG,EAAE,KAAK;AACV,SAAO;AACT;AAEM,SAAU,2BAA2B,MAAgB;AACzD,SAAO,uCAAuC,KAAK,SAAS,GAAG,EAAE,CAAC;AACpE;AAEM,SAAU,8BACdE,IACA,KACA,KAAe;AAEf,QAAMC,KAAYD,GAAE;AACpB,QAAME,KAAI,IAAI,WAAW,EAAE;AAC3B,QAAMC,KAAI,IAAI,WAAW,EAAE;AAC3B,MAAIN,IAAGO;AACP,QAAMT,KAAI,IAAI,aAAa,EAAE;AAC7B,QAAMU,KAAI,CAAC,GAAE,GAAI,GAAE,GAAI,GAAE,GAAI,GAAE,CAAE;AAEjC,QAAM,KAAK,IAAI,WAAWJ,KAAI,EAAE;AAEhC,OAAKJ,KAAI,GAAGA,KAAII,IAAGJ;AAAK,OAAG,KAAKA,EAAC,IAAIG,GAAEH,EAAC;AACxC,OAAKA,KAAI,GAAGA,KAAI,IAAIA;AAAK,OAAG,KAAKA,EAAC,IAAI,IAAI,KAAKA,EAAC;AAEhD,cAAYM,IAAG,GAAG,SAAS,EAAE,GAAGF,KAAI,EAAE;AACtC,SAAOE,EAAC;AACR,aAAWE,IAAGF,EAAC;AACf,OAAK,IAAIE,EAAC;AAEV,OAAKR,KAAI,IAAIA,KAAI,IAAIA;AAAK,OAAGA,EAAC,IAAI,IAAIA,KAAI,EAAE;AAC5C,cAAYK,IAAG,IAAID,KAAI,EAAE;AACzB,SAAOC,EAAC;AAER,OAAKL,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAF,GAAEE,EAAC,IAAI;AAChC,OAAKA,KAAI,GAAGA,KAAI,IAAIA;AAAK,IAAAF,GAAEE,EAAC,IAAIM,GAAEN,EAAC;AACnC,OAAKA,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,SAAKO,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,MAAAT,GAAEE,KAAIO,EAAC,KAAKF,GAAEL,EAAC,IAAI,IAAIO,EAAC;IAC1B;EACF;AAEA,OAAK,GAAG,SAAS,EAAE,GAAGT,EAAC;AACvB,SAAO,GAAG,SAAS,GAAG,EAAE;AAC1B;AAEM,SAAU,qCACd,KACA,KACA,WAAqB;AAErB,kBAAgB,KAAK,KAAK,SAAS;AACnC,MAAI,IAAI,WAAW;AAAmB,UAAM,IAAI,MAAM,oBAAoB;AAC1E,MAAI,UAAU,WAAW;AACvB,UAAM,IAAI,MAAM,qBAAqB;AACvC,QAAM,KAAK,IAAI,WAAW,oBAAoB,IAAI,MAAM;AACxD,QAAMK,KAAI,IAAI,WAAW,oBAAoB,IAAI,MAAM;AACvD,MAAIH;AACJ,OAAKA,KAAI,GAAGA,KAAI,mBAAmBA;AAAK,OAAGA,EAAC,IAAI,IAAIA,EAAC;AACrD,OAAKA,KAAI,GAAGA,KAAI,IAAI,QAAQA;AAAK,OAAGA,KAAI,iBAAiB,IAAI,IAAIA,EAAC;AAClE,SAAO,iBAAiBG,IAAG,IAAI,GAAG,QAAQ,SAAS,KAAK;AAC1D;;;AC3jGM,SAAU,kBAAe;AAI7B,QAAM,KAAK,OAAO,SAAS,cAAc,KAAK,UAAU,KAAK,WAAW;AAExE,QAAM,QAAQ;AACd,UAAQ,SAAUM,IAAeC,IAAS;AACxC,QAAIC;AACJ,UAAMC,KAAI,IAAI,WAAWF,EAAC;AAC1B,SAAKC,KAAI,GAAGA,KAAID,IAAGC,MAAK,OAAO;AAC7B,SAAG,gBAAgBC,GAAE,SAASD,IAAGA,KAAI,KAAK,IAAID,KAAIC,IAAG,KAAK,CAAC,CAAC;IAC9D;AACA,SAAKA,KAAI,GAAGA,KAAID,IAAGC;AAAK,MAAAF,GAAEE,EAAC,IAAIC,GAAED,EAAC;AAClC,SAAKA,KAAI,GAAGA,KAAIC,GAAE,QAAQD;AAAK,MAAAC,GAAED,EAAC,IAAI;EACxC,CAAC;AACH;;;ACKA,IAAY;CAAZ,SAAYE,iBAAc;AAQxB,EAAAA,gBAAAA,gBAAA,MAAA,IAAA,CAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,SAAA,IAAA,CAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,CAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,EAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kEAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yEAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4EAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gEAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gEAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yEAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2EAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wEAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0DAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,oCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,2CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,kCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,iCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,gCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,qCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sDAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,uCAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,0CAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,8BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,wBAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,IAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,KAAA,IAAA,IAAA,IAAA;AAGF,GA3gJY,mBAAA,iBAAc,CAAA,EAAA;;;ACC1B,IAAM,OAAO,MAAK;AAAE;AAMpB,IAAM,oBAAN,MAAM,mBAAiB;;;;EAuBrB,IAAW,cAAW;AACpB,WAAO,KAAK;EACd;;;;EAKA,IAAW,iBAAc;AACvB,WAAO,KAAK;EACd;;;;EAKA,IAAW,SAAM;AACf,QAAI,KAAK,aAAa;AACpB,aAAO,KAAK;IACd,OAAO;AACL,YAAM,IAAI,MAAM,8BAA8B;IAChD;EACF;;;;;EAMO,YAAe,gBAA0B;AAC9C,QAAI,CAAC,KAAK,gBAAgB;AACxB,aAAO;IACT;AACA,WAAO,IAAI,QAAW,CAAC,SAAS,WAAU;AAExC,YAAM,aAAa,KAAK,YAAY,CAAC,WACnC,OAAO,IAAI,mBAAkB,kBAAkB,MAAM,CAAC,CAAC;AAEzD,qBAAe,KACb,CAAC,UAAS;AACR,gBAAQ,KAAK;AACb,mBAAU;MACZ,GACA,CAAC,QAAO;AACN,eAAO,GAAG;AACV,mBAAU;MACZ,CAAC;IAEL,CAAC;EACH;;;;EAKO,mBAAgB;AACrB,QAAI,KAAK,cAAc;AACrB,YAAM,IAAI,mBAAkB,kBAAkB,KAAK,OAAO;IAC5D;EACF;;;;;;EAOO,YAAY,IAA0B;AAC3C,QAAI,CAAC,KAAK,gBAAgB;AACxB,aAAO;IACT;AACA,QAAI,KAAK,aAAa;AACpB,SAAG,KAAK,MAAM;AACd,aAAO;IACT;AAGA,SAAK,YAAY,IAAI,EAAE;AACvB,WAAO,MAAM,KAAK,YAAY,OAAO,EAAE;EACzC;EAEA,YAIU,cAIA,iBAAwB;AAJxB,SAAA,eAAA;AAIA,SAAA,kBAAA;AAzGF,SAAA,aAA2C,oBAAI,IAAG;EA0GvD;;;;EAKI,OAAO,SAAM;AAClB,UAAM,QAAQ,IAAI,mBAAkB,OAAO,IAAI;AAE/C,UAAM,SAAS,CAAC,WAAgB;AAC9B,UAAI,MAAM;AAAc;AACxB,YAAM,eAAe;AACrB,YAAM,UAAU;AAChB,YAAM,YAAY,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC;AAC5C,cAAO;IACT;AAEA,UAAM,UAAU,MAAK;AACnB,YAAM,kBAAkB,MAAM;AAC9B,aAAO,MAAM;IACf;AAEA,WAAO,EAAE,OAAO,QAAQ,QAAO;EACjC;;;;;EAMO,OAAO,QAAQ,IAAU;AAC9B,UAAM,EACJ,OACA,QAAQ,gBACR,SAAS,gBAAe,IACtB,mBAAkB,OAAM;AAE5B,QAAIC;AACJ,IAAAA,SAAQ,WAAW,MAAM,eAAe,mBAAkB,OAAO,GAAG,EAAE;AACtE,UAAM,eAAe,MAAK;AACxB,UAAIA,UAAS;AAAM;AACnB,mBAAaA,MAAK;AAClB,MAAAA,SAAQ;IACV;AAEA,UAAM,SAAS,CAAC,WAAgB;AAC9B,mBAAY;AACZ,qBAAe,MAAM;IACvB;AAGA,UAAM,UAAU,MAAK;AACnB,mBAAY;AACZ,sBAAe;IACjB;AAEA,WAAO,EAAE,OAAO,QAAQ,QAAO;EACjC;;;;;;EAOO,OAAO,OAAO,QAA2B;AAE9C,QAAI,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,cAAc,GAAG;AACjD,aAAO,mBAAkB;IAC3B;AAEA,UAAM,WAAW,mBAAkB,OAAM;AACzC,QAAI,YAAY,OAAO;AACvB,UAAM,2BAA2B,MAAK;AACpC,UAAI,EAAE,cAAc,GAAG;AACrB,cAAM,UAAU,OAAO,IAAI,CAAC,UAAU,MAAM,OAAO;AACnD,iBAAS,OAAO,OAAO;MACzB;IACF;AACA,WAAO,QAAQ,CAAC,UAAU,MAAM,YAAY,wBAAwB,CAAC;AACrE,WAAO,SAAS;EAClB;;;;;;EAOO,OAAO,QAAQ,QAA2B;AAE/C,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,cAAc;AACtB,eAAO;MACT;IACF;AAEA,UAAM,WAAW,mBAAkB,OAAM;AACzC,QAAI;AACJ,UAAM,0BAA0B,CAAC,WAAgB;AAC/C,sBAAgB,QAAQ,CAAC,eAAe,WAAU,CAAE;AACpD,eAAS,OAAO,MAAM;IACxB;AACA,sBAAkB,OAAO,IAAI,CAAC,UAC5B,MAAM,YAAY,uBAAuB,CAAC;AAE5C,WAAO,SAAS;EAClB;;AA5MuB,kBAAA,YAA+B,IAAI,kBACxD,MACA,IAAI;AAMiB,kBAAA,WAA8B,IAAI,kBACvD,OACA,KAAK;CAsMT,SAAUC,oBAAiB;EA0BzB,MAAa,0BAA0B,MAAK;IAC1C,YAIkB,QAAW;AAE3B,YAAM,qBAAqB;AAFX,WAAA,SAAA;AAGhB,aAAO,eAAe,MAAM,kBAAkB,SAAS;IACzD;;AATW,EAAAA,mBAAA,oBAAiB;AAWhC,GArCU,sBAAA,oBAAiB,CAAA,EAAA;;;AC/MpB,IAAM,uBAAuB;AAO7B,IAAM,yBAAyB;AAK/B,IAAM,iBAAiB,KAAK;AAK5B,IAAM,iBAAiB;AA0BxB,IAAO,SAAP,MAAO,QAAM;EACjB,OAAO,KAAKC,IAAa;AACvB,WAAO,IAAI,QAAO,QAAQ,aAAaA,EAAC,GAAG,CAAC;EAC9C;EAEA,OAAO,eAAe,UAAgB;AACpC,WAAO,IAAI,QAAO,QAAQ,eAAe,QAAQ,GAAG,CAAC;EACvD;EAEA,OAAOA,IAAe;AACpB,QAAI,KAAK,WAAW;AAClB,aAAO;IACT;AACA,UAAMC,KAAI,QAAQ,IAAI,KAAK,KAAK,GAAGD,EAAC;AACpC,WAAO,IAAI,QAAOC,GAAE,QAAQA,GAAE,YAAY,IAAI,CAAC;EACjD;EAEA,KAAKC,IAAS;AACZ,QAAI,KAAK,WAAW;AAClB,aAAO;IACT;AACA,UAAMD,KAAI,QAAQ,KAAK,MAAMC,EAAC;AAC9B,WAAO,IAAI,QAAOD,GAAE,QAAQA,GAAE,YAAY,IAAI,CAAC;EACjD;EAEA,SAAM;AACJ,WAAO,EAAE,GAAG,KAAK,IAAG;EACtB;EAEA,WAAQ;AACN,WAAO,QAAQ,UAAU,KAAK,GAAG;EACnC;EAEA,YACU,KACA,WAAiB;AADjB,SAAA,MAAA;AACA,SAAA,YAAA;EACP;;AAUC,SAAU,uBAAoB;AAClC,SAAO;IACL,OAAOE,IAAQC,IAAW;AACxB,UAAI,OAAOD,OAAM,UAAU;AACzB,cAAM,IAAI,cACR,sBAAsB,cAAcC,EAAC,CAAC,YAAY,OAAOD,EAAC,EAAE;MAEhE;AACA,UAAI,QAAQ,MAAMA,EAAC,MAAM,QAAW;AAClC,cAAM,IAAI,cACR,qBAAqB,cAAcC,EAAC,CAAC,SAASD,EAAC,GAAG;MAEtD;AACA,aAAOA;IACT;;AAEJ;AA6BM,IAAO,UAAP,MAAO,SAAO;EAClB,cAAA;AACE,UAAM,MAAM,kBAAkB;EAChC;EAEA,OAAO,WAAW,QAAkB;AAClC,UAAM,MAAM,SAAQ,aAAa,MAAM;AACvC,WAAO,IAAI;EACb;EAEA,OAAO,aAAa,QAAkB;AACpC,UAAM,MAAM,SAAQ,aAAa,MAAM;AACvC,WAAO;MACL,UAAU,IAAI;MACd,UAAU;MACV,OAAO;;EAEX;;;;EAKA,OAAO,eAAe,UAAgB;AACpC,WAAO;MACL;MACA,UAAU;MACV,OAAO;;EAEX;EAEA,OAAO,cAAc,KAAe;AAClC,QAAI,OAAO,QAAQ,UAAU;AAC3B,aAAO,SAAQ,aAAa,GAAG;IACjC;AACA,QAAI,eAAe,QAAQ;AACzB,aAAO,IAAI,OAAM;IACnB;AACA,WAAO;EACT;EAEA,OAAO,OAAO,IAAgBE,KAAc;AAC1C,UAAM,MAAM,SAAQ,cAAc,EAAE;AACpC,UAAM,MAAM,SAAQ,cAAcA,GAAE;AACpC,QAAI,IAAI,YAAY,IAAI,UAAU;AAChC,YAAM,MAAM,0BAA0B,IAAI,QAAQ,MAAM,IAAI,QAAQ,GAAG;IACzE;AAEA,UAAM,KACJ,OAAO,IAAI,KAAK,IAAI,OAAO,oBAAoB,IAAI,OAAO,IAAI,QAAQ;AACxE,UAAMC,MACJ,OAAO,IAAI,KAAK,IAAI,OAAO,oBAAoB,IAAI,OAAO,IAAI,QAAQ;AAExE,UAAM,WAAW,KAAKA;AACtB,UAAM,kBAAkB,KAAKA;AAE7B,WAAO;MACL,UAAU,OAAO,QAAQ;MACzB,WAAW;QACT,UAAU,IAAI;QACd,OAAO,OAAO,kBAAkB,OAAO,oBAAoB,CAAC;QAC5D,UAAU,OAAO,kBAAkB,OAAO,oBAAoB,CAAC;;;EAGrE;EAEA,OAAO,IAAI,SAAqB;AAC9B,QAAI,QAAQ,UAAU,GAAG;AACvB,YAAM,MAAM,wBAAwB;IACtC;AACA,UAAM,cAAc,QAAQ,IAAI,CAACH,OAAM,SAAQ,cAAcA,EAAC,CAAC;AAC/D,WAAO,SAAQ,IAAI,YAAY,CAAC,GAAG,GAAG,YAAY,MAAM,CAAC,CAAC;EAC5D;EAEA,OAAO,UAAU,UAAkB,SAAqB;AACtD,QAAI,QAAQ,UAAU,GAAG;AACvB,aAAO;QACL,QAAQ,SAAQ,eAAe,QAAQ;QACvC,WAAW;;IAEf;AACA,UAAM,cAAc,QAAQ,IAAI,CAACA,OAAM,SAAQ,cAAcA,EAAC,CAAC;AAC/D,WAAO,SAAQ,IAAI,YAAY,CAAC,GAAG,GAAG,YAAY,MAAM,CAAC,CAAC;EAC5D;;;;;;;;EASA,OAAO,IAAI,UAAsB,MAAkB;AACjD,UAAM,SAAS,SAAQ,cAAc,KAAK;AAC1C,UAAM,WAAW,OAAO;AACxB,QAAI,QACF,OAAO,QAAQ,KAAK,MAAM,OAAO,WAAW,oBAAoB;AAClE,QAAI,QAAQ,gBAAgB;AAC1B,aAAO;QACL,QAAQ;UACN;UACA,OAAO;UACP,UAAU,uBAAuB;;QAEnC,WAAW;;IAEf;AACA,QAAI,WAAW,OAAO,WAAW;AACjC,eAAWA,MAAK,MAAM;AACpB,YAAM,KAAK,SAAQ,cAAcA,EAAC;AAClC,UAAI,GAAG,SAAS,YAAW,MAAO,SAAS,YAAW,GAAI;AACxD,cAAM,MAAM,wBAAwB,GAAG,QAAQ,QAAQ,QAAQ,EAAE;MACnE;AAEA,cACE,QACA,GAAG,QACH,KAAK,OAAO,WAAW,GAAG,YAAY,oBAAoB;AAC5D,iBAAW,KAAK,OAAO,WAAW,GAAG,YAAY,oBAAoB;AACrE,UAAI,QAAQ,gBAAgB;AAC1B,eAAO;UACL,QAAQ;YACN;YACA,OAAO;YACP,UAAU,uBAAuB;;UAEnC,WAAW;;MAEf;IACF;AACA,WAAO,EAAE,QAAQ,EAAE,UAAU,OAAO,SAAQ,GAAI,WAAW,MAAK;EAClE;;;;;;;;EASA,OAAO,IAAII,OAAkB,MAAkB;AAC7C,UAAM,KAAK,SAAQ,cAAcA,EAAC;AAClC,UAAM,WAAW,GAAG;AACpB,QAAI,QAAQ,GAAG;AACf,QAAI,WAAW,GAAG;AAElB,eAAWC,MAAK,MAAM;AACpB,YAAM,KAAK,SAAQ,cAAcA,EAAC;AAClC,UAAI,GAAG,SAAS,YAAW,MAAO,GAAG,SAAS,YAAW,GAAI;AAC3D,cAAM,MAAM,wBAAwB,GAAG,QAAQ,QAAQ,QAAQ,EAAE;MACnE;AACA,UAAI,WAAW,GAAG,UAAU;AAC1B,YAAI,QAAQ,GAAG;AACb,iBAAO;YACL,QAAQ,EAAE,UAAU,OAAO,GAAG,UAAU,EAAC;YACzC,WAAW;;QAEf;AACA;AACA,oBAAY;MACd;AACA,cAAQ,OAAO,YAAY,GAAG,QAAQ;AACtC,kBAAY,GAAG;AACf,UAAI,QAAQ,GAAG,OAAO;AACpB,eAAO,EAAE,QAAQ,EAAE,UAAU,OAAO,GAAG,UAAU,EAAC,GAAI,WAAW,KAAI;MACvE;AACA,eAAS,GAAG;IACd;AAEA,WAAO,EAAE,QAAQ,EAAE,UAAU,OAAO,SAAQ,GAAI,WAAW,MAAK;EAClE;;;;;EAMA,OAAO,IAAID,IAAeC,IAAa;AACrC,IAAAD,KAAI,SAAQ,cAAcA,EAAC;AAC3B,IAAAC,KAAI,SAAQ,cAAcA,EAAC;AAC3B,QAAID,GAAE,aAAaC,GAAE,UAAU;AAC7B,YAAM,MAAM,wBAAwBD,GAAE,QAAQ,QAAQC,GAAE,QAAQ,EAAE;IACpE;AACA,UAAM,KAAKD,GAAE,QAAQ,KAAK,MAAMA,GAAE,WAAW,oBAAoB;AACjE,UAAM,KAAKA,GAAE,WAAW;AACxB,UAAM,KAAKC,GAAE,QAAQ,KAAK,MAAMA,GAAE,WAAW,oBAAoB;AACjE,UAAM,KAAKA,GAAE,WAAW;AACxB,YAAQ,MAAM;MACZ,KAAK,KAAK;AACR,eAAO;MACT,KAAK,KAAK;AACR,eAAO;MACT,KAAK,KAAK;AACR,eAAO;MACT,KAAK,KAAK;AACR,eAAO;MACT,KAAK,OAAO;AACV,eAAO;MACT;AACE,cAAM,MAAM,kBAAkB;IAClC;EACF;;;;EAKA,OAAO,KAAKD,IAAa;AACvB,WAAO;MACL,UAAUA,GAAE;MACZ,UAAUA,GAAE;MACZ,OAAOA,GAAE;;EAEb;;;;EAKA,OAAO,OAAOA,IAAeE,IAAS;AACpC,QAAIA,OAAM,GAAG;AACX,YAAM,MAAM,eAAe;IAC7B;AACA,QAAIA,OAAM,GAAG;AACX,aAAO,EAAE,OAAOF,GAAE,OAAO,UAAUA,GAAE,UAAU,UAAUA,GAAE,SAAQ;IACrE;AACA,UAAMG,KAAIH,GAAE,QAAQE;AACpB,WAAO;MACL,UAAUF,GAAE;MACZ,UAAU,KAAK,OAAOG,KAAI,uBAAuBH,GAAE,YAAYE,EAAC;MAChE,OAAO,KAAK,MAAMF,GAAE,QAAQE,EAAC;;EAEjC;;;;EAKA,OAAO,UAAUF,IAAa;AAC5B,IAAAA,KAAI,SAAQ,cAAcA,EAAC;AAC3B,WAAOA,GAAE,QAAQ,KAAKA,GAAE,WAAW;EACrC;EAEA,OAAO,OAAOA,IAAa;AACzB,IAAAA,KAAI,SAAQ,cAAcA,EAAC;AAC3B,WAAOA,GAAE,UAAU,KAAKA,GAAE,aAAa;EACzC;;;;EAKA,OAAO,WAAWI,IAAS;AACzB,WAAO,mBAAmB,KAAKA,EAAC;EAClC;;;;;;;EAQA,OAAO,MAAMA,IAAS;AACpB,UAAM,MAAMA,GAAE,MAAM,6CAA6C;AACjE,QAAI,CAAC,KAAK;AACR,aAAO;IACT;AACA,UAAM,OAAO,IAAI,CAAC,KAAK,iBAAiB;AACxC,QAAI,KAAK,SAAS,yBAAyB,GAAG;AAC5C,aAAO;IACT;AACA,UAAM,QAAQ,OAAO,SAAS,IAAI,CAAC,CAAC;AACpC,QAAI,QAAQ,gBAAgB;AAC1B,aAAO;IACT;AACA,WAAO;MACL,UAAU,IAAI,CAAC,EAAE,YAAW;MAC5B,UAAU,KAAK,MAAM,uBAAuB,OAAO,WAAW,IAAI,CAAC;MACnE;;EAEJ;;;;;EAMA,OAAO,aAAaA,IAAa;AAC/B,QAAIA,cAAa,QAAQ;AACvB,aAAOA,GAAE,OAAM;IACjB;AACA,QAAI,OAAOA,OAAM,UAAU;AACzB,UAAI,OAAOA,GAAE,aAAa,UAAU;AAClC,cAAM,MAAM,uBAAuB;MACrC;AACA,UAAI,OAAOA,GAAE,UAAU,UAAU;AAC/B,cAAM,MAAM,uBAAuB;MACrC;AACA,UAAI,OAAOA,GAAE,aAAa,UAAU;AAClC,cAAM,MAAM,uBAAuB;MACrC;AACA,aAAO,EAAE,UAAUA,GAAE,UAAU,OAAOA,GAAE,OAAO,UAAUA,GAAE,SAAQ;IACrE,WAAW,OAAOA,OAAM,UAAU;AAChC,YAAM,MAAM,SAAQ,MAAMA,EAAC;AAC3B,UAAI,CAAC,KAAK;AACR,cAAM,MAAM,wBAAwBA,EAAC,GAAG;MAC1C;AACA,aAAO;IACT,OAAO;AACL,YAAM,MAAM,+BAA+B;IAC7C;EACF;EAEA,OAAO,IAAIJ,IAAeC,IAAa;AACrC,UAAM,KAAK,SAAQ,IAAID,IAAGC,EAAC;AAC3B,QAAI,MAAM,GAAG;AACX,aAAO,SAAQ,cAAcA,EAAC;IAChC,OAAO;AACL,aAAO,SAAQ,cAAcD,EAAC;IAChC;EACF;EAEA,OAAO,IAAIA,IAAeC,IAAa;AACrC,UAAM,KAAK,SAAQ,IAAID,IAAGC,EAAC;AAC3B,QAAI,MAAM,GAAG;AACX,aAAO,SAAQ,cAAcD,EAAC;IAChC,OAAO;AACL,aAAO,SAAQ,cAAcC,EAAC;IAChC;EACF;EAEA,OAAO,KAAKD,IAAeE,IAAS;AAClC,IAAAF,KAAI,KAAK,cAAcA,EAAC;AACxB,QAAI,CAAC,OAAO,UAAUE,EAAC,GAAG;AACxB,YAAM,MAAM,6CAA6C;IAC3D;AACA,QAAIA,KAAI,GAAG;AACT,YAAM,MAAM,qDAAqD;IACnE;AACA,QAAIA,MAAK,GAAG;AACV,aAAO;QACL,QAAQ,SAAQ,eAAeF,GAAE,QAAQ;QACzC,WAAW;;IAEf;AACA,QAAIJ,KAAII;AACR,QAAI,MAAM,SAAQ,eAAeA,GAAE,QAAQ;AAC3C,WAAOE,KAAI,GAAG;AACZ,UAAIA,KAAI,KAAK,GAAG;AACd,QAAAA,KAAIA,KAAI;MACV,OAAO;AACL,QAAAA,MAAKA,KAAI,KAAK;AACd,cAAMG,MAAK,SAAQ,IAAI,KAAKT,EAAC;AAC7B,YAAIS,IAAG,WAAW;AAChB,iBAAOA;QACT;AACA,cAAMA,IAAG;MACX;AACA,YAAMA,MAAK,SAAQ,IAAIT,IAAGA,EAAC;AAC3B,UAAIS,IAAG,WAAW;AAChB,eAAOA;MACT;AACA,MAAAT,KAAIS,IAAG;IACT;AACA,WAAO,SAAQ,IAAI,KAAKT,EAAC;EAC3B;;;;EAKA,OAAO,MAAMI,IAAM;AACjB,QAAI,OAAOA,OAAM,UAAU;AACzB,aAAO;IACT;AACA,QAAI;AACF,YAAM,eAAe,SAAQ,MAAMA,EAAC;AACpC,aAAO,CAAC,CAAC;IACX,QAAQ;AACN,aAAO;IACT;EACF;;;;;EAMA,OAAO,UAAUA,IAAa;AAC5B,IAAAA,KAAI,SAAQ,cAAcA,EAAC;AAC3B,UAAMI,KAAI,KAAK,eAAeJ,EAAC;AAE/B,WAAO,GAAGA,GAAE,QAAQ,IAAII,EAAC;EAC3B;EAEA,OAAO,sBAAsB,IAAgBN,KAAc;AACzD,UAAM,KAAK,KAAK,cAAc,EAAE;AAChC,UAAMC,MAAK,KAAK,cAAcD,GAAE;AAChC,WAAO,GAAG,SAAS,YAAW,MAAOC,IAAG,SAAS,YAAW;EAC9D;EAEA,OAAO,eAAe,OAAe,OAAa;AAChD,WAAO,MAAM,YAAW,MAAO,MAAM,YAAW;EAClD;EAEA,OAAO,eAAeC,IAAe,gBAAgB,GAAC;AACpD,UAAM,KAAK,SAAQ,cAAcA,EAAC;AAClC,UAAM,KAAK,GAAG,QAAQ,KAAK,MAAM,GAAG,WAAW,oBAAoB;AACnE,UAAM,KAAK,GAAG,WAAW;AACzB,QAAII,KAAI,GAAG,SAAQ;AAEnB,QAAI,MAAM,eAAe;AACvB,MAAAA,KAAIA,KAAI;AACR,UAAIF,KAAI;AACR,eAASI,KAAI,GAAGA,KAAI,wBAAwBA,MAAK;AAC/C,YAAI,CAACJ,MAAKI,MAAK,eAAe;AAC5B;QACF;AACA,QAAAF,KAAIA,KAAI,KAAK,MAAOF,KAAI,uBAAwB,EAAE,EAAE,SAAQ;AAC5D,QAAAA,KAAKA,KAAI,KAAM;MACjB;IACF;AAEA,WAAOE;EACT;;;;;;EAOA,OAAO,oBAAoBJ,IAAa;AACtC,QAAIA,GAAE,aAAa;AAAG,aAAO;AAC7B,QAAIA,GAAE,WAAW,GAAG;AAClB,cAAQ,MAAM,uCAAuCA,EAAC;AACtD,aAAO;IACT;AACA,QAAIM,KAAI;AACR,QAAI,QAAQ;AACZ,QAAI,OAAON,GAAE;AACb,WAAO,OAAO,KAAK,OAAO;AACxB,cAAQ,OAAO,OAAO;AACtB,aAAO,OAAO;AACd,MAAAM;IACF;AACA,WAAO,yBAAyBA,KAAI;EACtC;EAEA,OAAO,uBACL,OACA,MAA2B;AAE3B,UAAM,WAAW,SAAQ,eAAe,KAAK;AAC7C,UAAM,MAAM,SAAS,QAAQ,cAAc;AAC3C,UAAM,mBAAmB,MAAM,IAAI,SAAS,SAAS;AAErD,QAAI,WAAW,MAAM;AACrB,UAAMC,SAAQ,OAAO,KAAK,KAAK,cAAc;AAC7C,QAAI,wBAAwB;AAG5B,QAAIA,OAAM,SAAS,GAAG;AACpB,UAAI,YAAoB;AACxB,MAAAA,OAAM,QAAQ,CAAC,UAAS;AACtB,cAAMD,KAAI,OAAO,SAAS,OAAO,EAAE;AACnC,YAAI,OAAO,MAAMA,EAAC;AAAG;AACrB,YAAI,mBAAmBA,MAAK;AAAG;AAC/B,YAAI,mBAAmBA,KAAI,uBAAuB;AAChD,kCAAwB,mBAAmBA;AAC3C,sBAAY;QACd;MACF,CAAC;AACD,iBAAW,KAAK,eAAe,SAAS;IAC1C;AAEA,QAAI,qBAAqB,uBAAuB;AAC9C,YAAM,EAAE,QAAAE,SAAQ,OAAAC,OAAK,IAAK,oBACxB,UACA,kBACA,IAAI;AAEN,aAAO,EAAE,UAAU,QAAAD,SAAQ,OAAAC,OAAK;IAClC;AAEA,UAAM,UAAU,SAAS,UAAU,GAAG,gBAAgB;AACtD,UAAM,WAAW,SAAS,UAAU,mBAAmB,CAAC;AAExD,UAAM,WACJ,QAAQ,UAAU,GAAG,qBAAqB,IAC1C,iBACA,QAAQ,UAAU,qBAAqB,IACvC;AACF,UAAM,EAAE,QAAQ,MAAK,IAAK,oBACxB,UACA,uBACA,IAAI;AAEN,WAAO,EAAE,UAAU,QAAQ,MAAK;EAClC;;AAGF,SAAS,oBACP,SACA,oBACA,MAA2B;AAE3B,MAAI;AACJ,MAAI;AACJ,MACE,QAAQ,SAAS,qBAAqB,IACtC,KAAK,8BACL;AACA,UAAM,QAAQ,qBAAqB,KAAK,+BAA+B;AACvE,aAAS,QAAQ,UAAU,GAAG,KAAK;AACnC,YAAQ,QAAQ,UAAU,KAAK;EACjC,OAAO;AACL,aAAS;AACT,YAAQ;EACV;AACA,SAAO,EAAE,QAAQ,MAAK;AACxB;;;AClpBA,IAAM,SAAS;AAGf,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,cAAc;AACpB,IAAM,WAAW;AACjB,IAAM,YAAY;AAGlB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AAGxB,IAAM,SAAS;EACb,UAAU;EACV,aAAa;EACb,iBAAiB;;AAInB,IAAM,gBAAgB,OAAO;AAC7B,IAAM,QAAQ,KAAK;AACnB,IAAM,qBAAqB,OAAO;AAUlC,SAAS,MAAM,MAAY;AACzB,QAAM,IAAI,WAAW,OAAO,IAAI,CAAC;AACnC;AAUA,SAAS,IAAIC,QAAcC,KAAsB;AAC/C,QAAM,SAAS,CAAA;AACf,MAAI,SAASD,OAAM;AACnB,SAAO,UAAU;AACf,WAAO,MAAM,IAAIC,IAAGD,OAAM,MAAM,CAAC;EACnC;AACA,SAAO;AACT;AAYA,SAAS,UACPE,SACAD,KAAgE;AAEhE,QAAM,QAAQC,QAAO,MAAM,GAAG;AAC9B,MAAI,SAAS;AACb,MAAI,MAAM,SAAS,GAAG;AAGpB,aAAS,MAAM,CAAC,IAAI;AACpB,IAAAA,UAAS,MAAM,CAAC;EAClB;AAEA,EAAAA,UAASA,QAAO,QAAQ,iBAAiB,GAAM;AAC/C,QAAM,SAASA,QAAO,MAAM,GAAG;AAC/B,QAAM,UAAU,IAAI,QAAQD,GAAE,EAAE,KAAK,GAAG;AACxC,SAAO,SAAS;AAClB;AAeA,SAAS,WAAWC,SAAc;AAChC,QAAM,SAAS,CAAA;AACf,MAAIC,WAAU;AACd,QAAM,SAASD,QAAO;AACtB,SAAOC,WAAU,QAAQ;AACvB,UAAM,QAAQD,QAAO,WAAWC,UAAS;AACzC,QAAI,SAAS,SAAU,SAAS,SAAUA,WAAU,QAAQ;AAE1D,YAAM,QAAQD,QAAO,WAAWC,UAAS;AACzC,WAAK,QAAQ,UAAW,OAAQ;AAE9B,eAAO,OAAO,QAAQ,SAAU,OAAO,QAAQ,QAAS,KAAO;MACjE,OAAO;AAGL,eAAO,KAAK,KAAK;AACjB,QAAAA;MACF;IACF,OAAO;AACL,aAAO,KAAK,KAAK;IACnB;EACF;AACA,SAAO;AACT;AAUA,IAAM,aAAa,CAACH,WAAuB,OAAO,cAAc,GAAGA,MAAK;AAWxE,IAAM,eAAe,SAAU,WAAiB;AAC9C,MAAI,YAAY,KAAO,IAAM;AAC3B,WAAO,YAAY;EACrB;AACA,MAAI,YAAY,KAAO,IAAM;AAC3B,WAAO,YAAY;EACrB;AACA,MAAI,YAAY,KAAO,IAAM;AAC3B,WAAO,YAAY;EACrB;AACA,SAAO;AACT;AAaA,IAAM,eAAe,SAAU,OAAe,MAAY;AAGxD,SAAO,QAAQ,KAAK,KAAK,OAAO,QAAQ,EAAE,KAAK,OAAO,QAAQ,CAAC,KAAK;AACtE;AAOA,IAAM,QAAQ,SAAU,OAAe,WAAmB,WAAkB;AAC1E,MAAII,KAAI;AACR,UAAQ,YAAY,MAAM,QAAQ,IAAI,IAAI,SAAS;AACnD,WAAS,MAAM,QAAQ,SAAS;AAChC;;;IAE0B,QAAS,gBAAgB,QAAS;IAC1DA,MAAK;IACL;AACA,YAAQ,MAAM,QAAQ,aAAa;EACrC;AACA,SAAO,MAAMA,MAAM,gBAAgB,KAAK,SAAU,QAAQ,KAAK;AACjE;AASA,IAAM,SAAS,SAAU,OAAa;AAEpC,QAAM,SAAS,CAAA;AACf,QAAM,cAAc,MAAM;AAC1B,MAAIC,KAAI;AACR,MAAIC,KAAI;AACR,MAAI,OAAO;AAMX,MAAI,QAAQ,MAAM,YAAY,SAAS;AACvC,MAAI,QAAQ,GAAG;AACb,YAAQ;EACV;AAEA,WAASC,KAAI,GAAGA,KAAI,OAAO,EAAEA,IAAG;AAE9B,QAAI,MAAM,WAAWA,EAAC,KAAK,KAAM;AAC/B,YAAM,WAAW;IACnB;AACA,WAAO,KAAK,MAAM,WAAWA,EAAC,CAAC;EACjC;AAKA,WACM,QAAQ,QAAQ,IAAI,QAAQ,IAAI,GACpC,QAAQ,eAER;AAMA,QAAI,OAAOF;AACX,aAASG,KAAI,GAAGJ,KAAI,QAA2BA,MAAK,MAAM;AACxD,UAAI,SAAS,aAAa;AACxB,cAAM,eAAe;MACvB;AAEA,YAAM,QAAQ,aAAa,MAAM,WAAW,OAAO,CAAC;AAEpD,UAAI,SAAS,QAAQ,QAAQ,OAAO,SAASC,MAAKG,EAAC,GAAG;AACpD,cAAM,UAAU;MAClB;AAEA,MAAAH,MAAK,QAAQG;AACb,YAAMC,KAAIL,MAAK,OAAO,OAAOA,MAAK,OAAO,OAAO,OAAOA,KAAI;AAE3D,UAAI,QAAQK,IAAG;AACb;MACF;AAEA,YAAM,aAAa,OAAOA;AAC1B,UAAID,KAAI,MAAM,SAAS,UAAU,GAAG;AAClC,cAAM,UAAU;MAClB;AAEA,MAAAA,MAAK;IACP;AAEA,UAAM,MAAM,OAAO,SAAS;AAC5B,WAAO,MAAMH,KAAI,MAAM,KAAK,QAAQ,CAAC;AAIrC,QAAI,MAAMA,KAAI,GAAG,IAAI,SAASC,IAAG;AAC/B,YAAM,UAAU;IAClB;AAEA,IAAAA,MAAK,MAAMD,KAAI,GAAG;AAClB,IAAAA,MAAK;AAGL,WAAO,OAAOA,MAAK,GAAGC,EAAC;EACzB;AAEA,SAAO,OAAO,cAAc,GAAG,MAAM;AACvC;AASA,IAAM,SAAS,SAAU,UAAgB;AACvC,QAAM,SAAS,CAAA;AAGf,MAAI,QAAQ,WAAW,QAAQ;AAG/B,MAAI,cAAc,MAAM;AAGxB,MAAIA,KAAI;AACR,MAAI,QAAQ;AACZ,MAAI,OAAO;AAGX,aAAW,gBAAgB,OAAO;AAChC,QAAI,eAAe,KAAM;AACvB,aAAO,KAAK,mBAAmB,YAAY,CAAC;IAC9C;EACF;AAEA,MAAI,cAAc,OAAO;AACzB,MAAI,iBAAiB;AAMrB,MAAI,aAAa;AACf,WAAO,KAAK,SAAS;EACvB;AAGA,SAAO,iBAAiB,aAAa;AAGnC,QAAII,KAAI;AACR,eAAW,gBAAgB,OAAO;AAChC,UAAI,gBAAgBJ,MAAK,eAAeI,IAAG;AACzC,QAAAA,KAAI;MACN;IACF;AAIA,UAAM,wBAAwB,iBAAiB;AAC/C,QAAIA,KAAIJ,KAAI,OAAO,SAAS,SAAS,qBAAqB,GAAG;AAC3D,YAAM,UAAU;IAClB;AAEA,cAAUI,KAAIJ,MAAK;AACnB,IAAAA,KAAII;AAEJ,eAAW,gBAAgB,OAAO;AAChC,UAAI,eAAeJ,MAAK,EAAE,QAAQ,QAAQ;AACxC,cAAM,UAAU;MAClB;AACA,UAAI,gBAAgBA,IAAG;AAErB,YAAIK,KAAI;AACR,iBAASP,KAAI,QAA2BA,MAAK,MAAM;AACjD,gBAAMK,KAAIL,MAAK,OAAO,OAAOA,MAAK,OAAO,OAAO,OAAOA,KAAI;AAC3D,cAAIO,KAAIF,IAAG;AACT;UACF;AACA,gBAAM,UAAUE,KAAIF;AACpB,gBAAM,aAAa,OAAOA;AAC1B,iBAAO,KACL,mBAAmB,aAAaA,KAAK,UAAU,YAAa,CAAC,CAAC,CAAC;AAEjE,UAAAE,KAAI,MAAM,UAAU,UAAU;QAChC;AAEA,eAAO,KAAK,mBAAmB,aAAaA,IAAG,CAAC,CAAC,CAAC;AAClD,eAAO,MACL,OACA,uBACA,kBAAkB,WAAW;AAE/B,gBAAQ;AACR,UAAE;MACJ;IACF;AAEA,MAAE;AACF,MAAEL;EACJ;AACA,SAAO,OAAO,KAAK,EAAE;AACvB;AAaA,IAAM,YAAY,SAAU,OAAa;AACvC,SAAO,UAAU,OAAO,SAAUJ,SAAM;AACtC,WAAO,cAAc,KAAKA,OAAM,IAC5B,OAAOA,QAAO,MAAM,CAAC,EAAE,YAAW,CAAE,IACpCA;EACN,CAAC;AACH;AAaA,IAAM,UAAU,SAAU,OAAa;AACrC,SAAO,UAAU,OAAO,SAAUA,SAAM;AACtC,WAAO,cAAc,KAAKA,OAAM,IAAI,SAAS,OAAOA,OAAM,IAAIA;EAChE,CAAC;AACH;AAKO,IAAM,WAAW;;;;;;EAMtB,SAAS;;;;;;;;EAQT,MAAM;IACJ,QAAQ;IACR,QAAQ;;EAEV;EACA;EACA;EACA;;;;ACvbF,IAAM,cAAc,IAAI,YAAW;AACnC,IAAM,cAAc,IAAI,YAAY,SAAS,EAAE,WAAW,KAAI,CAAE;AAEhE,SAAS,WAAWU,SAA0B;AAC5C,SAAO,YAAY,OAAOA,OAAM;AAClC;AAEA,SAAS,qBACP,OAAgD;AAEhD,SAAO,YAAY,OAAO,KAAK;AACjC;AAGA,SAAS,gBAAgB,OAAiB;AACxC,QAAM,YAAY,0BAA0B,OAAO,EAAE,GAAG,CAAC;AACzD,QAAM,SAAS,CAAA;AACf,aAAW,SAAS,WAAW;AAC7B,QAAI,MAAM,WAAW,GAAG;AACtB;IACF;AAEA,QAAI,MAAM;AACV,UAAM,eAAe,MAAM,QAAQ,EAAE,GAAG,CAAE;AAE1C,QAAI,gBAAgB,GAAG;AACrB,aAAO,MAAM,MAAM,GAAG,YAAY;AAClC,cAAQ,MAAM,MAAM,eAAe,CAAC;IACtC,OAAO;AACL,aAAO;AACP,cAAQ,IAAI,WAAW,CAAC;IAC1B;AAEA,WAAO,0BAA0B,MAAM,IAAM,EAAI;AACjD,YAAQ,0BAA0B,OAAO,IAAM,EAAI;AAEnD,UAAM,aAAa,qBAAqB,mBAAmB,IAAI,CAAC;AAChE,UAAM,cAAc,qBAAqB,mBAAmB,KAAK,CAAC;AAElE,WAAO,KAAK,CAAC,YAAY,WAAW,CAAC;EACvC;AACA,SAAO;AACT;AAGA,SAAS,sBAAsB,OAAyB;AACtD,SAAO,gBAAgB,WAAW,KAAK,CAAC;AAC1C;AAGA,SAAS,oBAAoB,QAAe,mBAAmB,QAAS;AACtE,MAAI,WAAW;AACf,MAAI,qBAAqB,QAAW;AAElC,eAAW;EACb;AAEA,MAAI,SAAS;AACb,aAAW,CAACC,IAAG,KAAK,KAAK,OAAO,QAAO,GAAI;AAGzC,UAAM,OAAO,wBACX,MAAM,CAAC,GACP,2BACA,IAAI;AAGN,QAAI,QAAQ,MAAM,CAAC;AACnB,QAAI,MAAM,SAAS,KAAK,MAAM,CAAC,MAAM,QAAW;AAC9C,UAAI,MAAM,CAAC,MAAM,YAAY,SAAS,aAAa;AACjD,gBAAQ;MACV,WAAW,MAAM,CAAC,MAAM,QAAQ;AAE9B,gBAAQ,MAAM;MAChB;IACF;AAEA,YAAQ,wBAAwB,OAAO,2BAA2B,IAAI;AAEtE,QAAIA,OAAM,GAAG;AACX,gBAAU;IACZ;AACA,cAAU,GAAG,IAAI,IAAI,KAAK;EAC5B;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,KAAiB,IAAO;AACzD,QAAM,OAAO,CAAA;AACb,MAAI,OAAO;AACX,MAAIA,KAAI,IAAI,QAAQ,EAAE;AACtB,SAAOA,MAAK,GAAG;AACb,SAAK,KAAK,IAAI,MAAM,MAAMA,EAAC,CAAC;AAC5B,WAAOA,KAAI;AACX,IAAAA,KAAI,IAAI,QAAQ,IAAI,IAAI;EAC1B;AACA,MAAI,SAAS,IAAI,QAAQ;AACvB,SAAK,KAAK,IAAI,MAAM,IAAI,CAAC;EAC3B;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,KAAiB,MAAc,IAAU;AAC1E,MAAIA,KAAI,IAAI,QAAQ,IAAI;AACxB,SAAOA,MAAK,GAAG;AACb,QAAIA,EAAC,IAAI;AACT,IAAAA,KAAI,IAAI,QAAQ,MAAMA,KAAI,CAAC;EAC7B;AACA,SAAO;AACT;AAEA,SAAS,EAAE,MAAY;AACrB,SAAO,KAAK,YAAY,CAAC;AAC3B;AAGA,SAAS,cAAcC,IAAS;AAC9B,MAAI,MAAMA,GAAE,SAAS,EAAE,EAAE,YAAW;AACpC,MAAI,IAAI,WAAW,GAAG;AACpB,UAAM,IAAI,GAAG;EACf;AAEA,SAAO,IAAI,GAAG;AAChB;AAGA,SAAS,mBAAmB,OAAiB;AAC3C,QAAM,SAAS,IAAI,WAAW,MAAM,UAAU;AAC9C,MAAI,cAAc;AAClB,WAASD,KAAI,GAAGA,KAAI,MAAM,YAAY,EAAEA,IAAG;AACzC,UAAM,OAAO,MAAMA,EAAC;AACpB,QAAI,SAAS,IAAM;AACjB,aAAO,aAAa,IAAI;IAC1B,WACE,SAAS,OACR,CAAC,WAAW,MAAMA,KAAI,CAAC,CAAC,KAAK,CAAC,WAAW,MAAMA,KAAI,CAAC,CAAC,IACtD;AACA,aAAO,aAAa,IAAI;IAC1B,OAAO;AACL,YAAM,YAAY,SAChB,OAAO,cAAc,MAAMA,KAAI,CAAC,GAAG,MAAMA,KAAI,CAAC,CAAC,GAC/C,EAAE;AAEJ,aAAO,aAAa,IAAI;AACxB,MAAAA,MAAK;IACP;EACF;AAEA,SAAO,OAAO,MAAM,GAAG,WAAW;AACpC;AAGA,SAAS,oBAAoB,OAAa;AACxC,QAAM,QAAQ,WAAW,KAAK;AAC9B,SAAO,mBAAmB,KAAK;AACjC;AAGA,SAAS,yBAAyBC,IAAS;AACzC,SAAOA,MAAK,MAAQA,KAAI;AAC1B;AAGA,IAAM,gCAAgC,oBAAI,IAAI;EAC5C,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;CACN;AAED,SAAS,wBAAwBA,IAAS;AACxC,SAAO,yBAAyBA,EAAC,KAAK,8BAA8B,IAAIA,EAAC;AAC3E;AAGA,IAAM,6BAA6B,oBAAI,IAAI;EACzC,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;CACN;AAED,SAAS,qBAAqBA,IAAS;AACrC,SAAO,yBAAyBA,EAAC,KAAK,2BAA2B,IAAIA,EAAC;AACxE;AAGA,SAAS,4BAA4BA,IAAS;AAC5C,SAAO,qBAAqBA,EAAC,KAAKA,OAAM,EAAE,GAAG;AAC/C;AAGA,IAAM,4BAA4B,oBAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1E,SAAS,oBAAoBA,IAAS;AACpC,SAAO,qBAAqBA,EAAC,KAAK,0BAA0B,IAAIA,EAAC;AACnE;AAGA,IAAM,gCAAgC,oBAAI,IAAI;EAC5C,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,IAAI;EACN,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;CACN;AACD,SAAS,wBAAwBA,IAAS;AACxC,SAAO,oBAAoBA,EAAC,KAAK,8BAA8B,IAAIA,EAAC;AACtE;AAGA,IAAM,iCAAiC,oBAAI,IAAI;EAC7C,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;CACN;AACD,SAAS,yBAAyBA,IAAS;AACzC,SAAO,wBAAwBA,EAAC,KAAK,+BAA+B,IAAIA,EAAC;AAC3E;AAGA,IAAM,kCAAkC,oBAAI,IAAI;EAC9C,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;EACL,EAAE,GAAG;CACN;AAED,SAAS,0BAA0BA,IAAS;AAC1C,SAAO,yBAAyBA,EAAC,KAAK,gCAAgC,IAAIA,EAAC;AAC7E;AAOA,SAAS,mCACP,WACA,wBAA6C;AAE7C,QAAM,QAAQ,WAAW,SAAS;AAClC,MAAI,SAAS;AACb,aAAW,QAAQ,OAAO;AAExB,QAAI,CAAC,uBAAuB,IAAI,GAAG;AACjC,gBAAU,OAAO,aAAa,IAAI;IACpC,OAAO;AACL,gBAAU,cAAc,IAAI;IAC9B;EACF;AAEA,SAAO;AACT;AAEA,SAAS,2BACP,WACA,wBAA6C;AAE7C,SAAO,mCACL,OAAO,cAAc,SAAS,GAC9B,sBAAsB;AAE1B;AAIA,SAAS,wBACP,OACA,wBAKA,cAAc,OAAK;AAEnB,MAAI,SAAS;AACb,aAAW,aAAa,OAAO;AAC7B,QAAI,eAAe,cAAc,KAAK;AACpC,gBAAU;IACZ,OAAO;AACL,gBAAU,mCACR,WACA,sBAAsB;IAE1B;EACF;AACA,SAAO;AACT;AAIA,SAAS,aAAaA,IAAS;AAC7B,SAAOA,MAAK,MAAQA,MAAK;AAC3B;AAEA,SAAS,aAAaA,IAAS;AAC7B,SAAQA,MAAK,MAAQA,MAAK,MAAUA,MAAK,MAAQA,MAAK;AACxD;AAEA,SAAS,oBAAoBA,IAAS;AACpC,SAAO,aAAaA,EAAC,KAAK,aAAaA,EAAC;AAC1C;AAEA,SAAS,WAAWA,IAAS;AAC3B,SACE,aAAaA,EAAC,KAAMA,MAAK,MAAQA,MAAK,MAAUA,MAAK,MAAQA,MAAK;AAEtE;AAEM,IAAO,sBAAP,MAA0B;EAG9B,YAAY,MAAW,EAAE,kBAAkB,MAAK,IAAU,CAAA,GAAE;AAC1D,SAAK,QAAQ,CAAA;AACb,SAAK,OAAO;AAEZ,QAAI,CAAC,mBAAmB,OAAO,SAAS,YAAY,KAAK,CAAC,MAAM,KAAK;AACnE,aAAO,KAAK,MAAM,CAAC;IACrB;AAEA,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,iBAAW,QAAQ,MAAM;AACvB,YAAI,KAAK,WAAW,GAAG;AACrB,gBAAM,IAAI,UACR,8GACiC;QAErC;AACA,aAAK,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;MACpC;IACF,WACE,OAAO,SAAS,YAChB,OAAO,eAAe,IAAI,MAAM,MAChC;AACA,iBAAW,QAAQ,OAAO,KAAK,IAAI,GAAG;AACpC,cAAM,QAAQ,KAAK,IAAI;AACvB,aAAK,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC;MAC/B;IACF,OAAO;AACL,WAAK,QAAQ,sBAAsB,IAAI;IACzC;EACF;EAEA,eAAY;AACV,QAAI,KAAK,SAAS,MAAM;AACtB,UAAI,QAAuB,oBAAoB,KAAK,KAAK;AACzD,UAAI,UAAU,IAAI;AAChB,gBAAQ;MACV;AACA,WAAK,KAAK,KAAK,QAAQ;IACzB;EACF;EAEA,OAAO,MAAc,OAAa;AAChC,SAAK,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC;AAC7B,SAAK,aAAY;EACnB;EAEA,OAAO,MAAY;AACjB,QAAID,KAAI;AACR,WAAOA,KAAI,KAAK,MAAM,QAAQ;AAC5B,UAAI,KAAK,MAAMA,EAAC,EAAE,CAAC,MAAM,MAAM;AAC7B,aAAK,MAAM,OAAOA,IAAG,CAAC;MACxB,OAAO;AACL,QAAAA;MACF;IACF;AACA,SAAK,aAAY;EACnB;EAEA,IAAI,MAAY;AACd,eAAW,SAAS,KAAK,OAAO;AAC9B,UAAI,MAAM,CAAC,MAAM,MAAM;AACrB,eAAO,MAAM,CAAC;MAChB;IACF;AACA,WAAO;EACT;EAEA,OAAO,MAAY;AACjB,UAAM,SAAS,CAAA;AACf,eAAW,SAAS,KAAK,OAAO;AAC9B,UAAI,MAAM,CAAC,MAAM,MAAM;AACrB,eAAO,KAAK,MAAM,CAAC,CAAC;MACtB;IACF;AACA,WAAO;EACT;EAEA,QACE,YAKA,SAAa;AAEb,eAAW,SAAS,KAAK,OAAO;AAC9B,iBAAW,KAAK,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI;IACnD;EACF;EAEA,IAAI,MAAY;AACd,eAAW,SAAS,KAAK,OAAO;AAC9B,UAAI,MAAM,CAAC,MAAM,MAAM;AACrB,eAAO;MACT;IACF;AACA,WAAO;EACT;EAEA,IAAI,MAAc,OAAa;AAC7B,QAAI,QAAQ;AACZ,QAAIA,KAAI;AACR,WAAOA,KAAI,KAAK,MAAM,QAAQ;AAC5B,UAAI,KAAK,MAAMA,EAAC,EAAE,CAAC,MAAM,MAAM;AAC7B,YAAI,OAAO;AACT,eAAK,MAAM,OAAOA,IAAG,CAAC;QACxB,OAAO;AACL,kBAAQ;AACR,eAAK,MAAMA,EAAC,EAAE,CAAC,IAAI;AACnB,UAAAA;QACF;MACF,OAAO;AACL,QAAAA;MACF;IACF;AACA,QAAI,CAAC,OAAO;AACV,WAAK,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC;IAC/B;AACA,SAAK,aAAY;EACnB;EAEA,OAAI;AACF,SAAK,MAAM,KAAK,CAACE,IAAGC,OAAK;AACvB,UAAID,GAAE,CAAC,IAAIC,GAAE,CAAC,GAAG;AACf,eAAO;MACT;AACA,UAAID,GAAE,CAAC,IAAIC,GAAE,CAAC,GAAG;AACf,eAAO;MACT;AACA,aAAO;IACT,CAAC;AAED,SAAK,aAAY;EACnB;EAEA,CAAC,OAAO,QAAQ,IAAC;AACf,WAAO,KAAK,MAAM,OAAO,QAAQ,EAAC;EACpC;EAEA,WAAQ;AACN,WAAO,oBAAoB,KAAK,KAAK;EACvC;;AAGF,IAAM,iBAAiB;EACrB,KAAK;EACL,MAAM;EACN,MAAM;EACN,OAAO;EACP,IAAI;EACJ,KAAK;;AAGP,IAAM,UAAU,OAAO,SAAS;AAEhC,SAAS,aAAa,KAAQ;AAC5B,SAAO,CAAC,GAAG,GAAG,EAAE;AAClB;AAEA,SAAS,GAAG,OAAY,KAAQ;AAC9B,QAAMF,KAAI,MAAM,GAAG;AACnB,SAAO,MAAMA,EAAC,IAAI,SAAY,OAAO,cAAcA,EAAC;AACtD;AAEA,SAAS,YAAY,QAAc;AACjC,SAAO,WAAW,OAAO,OAAO,YAAW,MAAO;AACpD;AAEA,SAAS,YAAY,QAAc;AACjC,WAAS,OAAO,YAAW;AAC3B,SACE,WAAW,QACX,WAAW,UACX,WAAW,UACX,WAAW;AAEf;AAEA,SAAS,+BAA+B,KAAa,KAAW;AAC9D,SAAO,aAAa,GAAG,MAAM,QAAQ,EAAE,GAAG,KAAK,QAAQ,EAAE,GAAG;AAC9D;AAEA,SAAS,2BAA2BF,SAAc;AAChD,SACEA,QAAO,WAAW,KAClB,aAAaA,QAAO,YAAY,CAAC,CAAE,MAClCA,QAAO,CAAC,MAAM,OAAOA,QAAO,CAAC,MAAM;AAExC;AAEA,SAAS,qCAAqCA,SAAc;AAC1D,SACEA,QAAO,WAAW,KAClB,aAAaA,QAAO,YAAY,CAAC,CAAE,KACnCA,QAAO,CAAC,MAAM;AAElB;AAEA,SAAS,+BAA+BA,SAAc;AACpD,SACEA,QAAO,OACL,oEAAoE,MAChE;AAEV;AAEA,SAAS,iCAAiCA,SAAc;AACtD,SACE,+BAA+BA,OAAM,KACrCA,QAAO,OAAO,2BAA2B,MAAM;AAEnD;AAEA,SAAS,gBAAgB,QAAc;AACrC,SAAO,eAAe,MAAM,MAAM;AACpC;AAEA,SAAS,UAAU,KAAQ;AACzB,SAAO,gBAAgB,IAAI,MAAM;AACnC;AAEA,SAAS,aAAa,KAAW;AAC/B,SAAO,CAAC,gBAAgB,IAAI,MAAM;AACpC;AAEA,SAAS,YAAY,QAAc;AACjC,SAAO,eAAe,MAAM;AAC9B;AAEA,SAAS,gBAAgB,OAAa;AACpC,MAAI,UAAU,IAAI;AAChB,WAAO;EACT;AAEA,MAAIK,KAAI;AAER,MACE,MAAM,UAAU,KAChB,MAAM,OAAO,CAAC,MAAM,OACpB,MAAM,OAAO,CAAC,EAAE,YAAW,MAAO,KAClC;AACA,YAAQ,MAAM,UAAU,CAAC;AACzB,IAAAA,KAAI;EACN,WAAW,MAAM,UAAU,KAAK,MAAM,OAAO,CAAC,MAAM,KAAK;AACvD,YAAQ,MAAM,UAAU,CAAC;AACzB,IAAAA,KAAI;EACN;AAEA,MAAI,UAAU,IAAI;AAChB,WAAO;EACT;AAEA,MAAI,QAAQ;AACZ,MAAIA,OAAM,IAAI;AACZ,YAAQ;EACV;AACA,MAAIA,OAAM,IAAI;AACZ,YAAQ;EACV;AAEA,MAAI,MAAM,KAAK,KAAK,GAAG;AACrB,WAAO;EACT;AAEA,SAAO,SAAS,OAAOA,EAAC;AAC1B;AAEA,SAAS,UAAU,OAAa;AAC9B,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,MAAM,SAAS,CAAC,MAAM,IAAI;AAClC,QAAI,MAAM,SAAS,GAAG;AACpB,YAAM,IAAG;IACX;EACF;AAEA,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AAEA,QAAM,UAAU,CAAA;AAChB,aAAW,QAAQ,OAAO;AACxB,UAAMC,KAAI,gBAAgB,IAAI;AAC9B,QAAIA,OAAM,SAAS;AACjB,aAAO;IACT;AAEA,YAAQ,KAAKA,EAAC;EAChB;AAEA,WAASL,KAAI,GAAGA,KAAI,QAAQ,SAAS,GAAG,EAAEA,IAAG;AAC3C,QAAI,QAAQA,EAAC,IAAI,KAAK;AACpB,aAAO;IACT;EACF;AACA,MAAI,QAAQ,QAAQ,SAAS,CAAC,KAAK,QAAQ,IAAI,QAAQ,SAAS;AAC9D,WAAO;EACT;AAEA,MAAI,OAAO,QAAQ,IAAG;AACtB,MAAIM,WAAU;AAEd,aAAWD,MAAK,SAAS;AACvB,YAASA,KAAI,QAAQ,IAAIC;AACzB,MAAEA;EACJ;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,SAAe;AACpC,MAAI,SAAS;AACb,MAAID,KAAI;AAER,WAASL,KAAI,GAAGA,MAAK,GAAG,EAAEA,IAAG;AAC3B,aAAS,OAAOK,KAAI,GAAG,IAAI;AAC3B,QAAIL,OAAM,GAAG;AACX,eAAS,IAAI,MAAM;IACrB;AACA,IAAAK,KAAI,KAAK,MAAMA,KAAI,GAAG;EACxB;AAEA,SAAO;AACT;AAEA,SAAS,UAAU,UAAgB;AACjC,QAAM,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACvC,MAAI,aAAa;AACjB,MAAI,WAAW;AACf,MAAI,UAAU;AAEd,QAAM,QAAQ,MAAM,KAAK,UAAU,CAACJ,OAAMA,GAAE,YAAY,CAAC,CAAC;AAE1D,MAAI,MAAM,OAAO,MAAM,EAAE,GAAG,GAAG;AAC7B,QAAI,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG;AACjC,aAAO;IACT;AAEA,eAAW;AACX,MAAE;AACF,eAAW;EACb;AAEA,SAAO,UAAU,MAAM,QAAQ;AAC7B,QAAI,eAAe,GAAG;AACpB,aAAO;IACT;AAEA,QAAI,MAAM,OAAO,MAAM,EAAE,GAAG,GAAG;AAC7B,UAAI,aAAa,MAAM;AACrB,eAAO;MACT;AACA,QAAE;AACF,QAAE;AACF,iBAAW;AACX;IACF;AAEA,QAAI,QAAQ;AACZ,QAAI,SAAS;AAEb,WAAO,SAAS,KAAK,WAAW,MAAM,OAAO,CAAE,GAAG;AAChD,cAAQ,QAAQ,KAAO,SAAS,GAAG,OAAO,OAAO,GAAI,EAAE;AACvD,QAAE;AACF,QAAE;IACJ;AAEA,QAAI,MAAM,OAAO,MAAM,EAAE,GAAG,GAAG;AAC7B,UAAI,WAAW,GAAG;AAChB,eAAO;MACT;AAEA,iBAAW;AAEX,UAAI,aAAa,GAAG;AAClB,eAAO;MACT;AAEA,UAAI,cAAc;AAElB,aAAO,MAAM,OAAO,MAAM,QAAW;AACnC,YAAI,YAAY;AAEhB,YAAI,cAAc,GAAG;AACnB,cAAI,MAAM,OAAO,MAAM,EAAE,GAAG,KAAK,cAAc,GAAG;AAChD,cAAE;UACJ,OAAO;AACL,mBAAO;UACT;QACF;AAEA,YAAI,CAAC,aAAa,MAAM,OAAO,CAAE,GAAG;AAClC,iBAAO;QACT;AAEA,eAAO,aAAa,MAAM,OAAO,CAAE,GAAG;AACpC,gBAAMM,UAAS,SAAS,GAAG,OAAO,OAAO,CAAE;AAC3C,cAAI,cAAc,MAAM;AACtB,wBAAYA;UACd,WAAW,cAAc,GAAG;AAC1B,mBAAO;UACT,OAAO;AACL,wBAAY,YAAY,KAAKA;UAC/B;AACA,cAAI,YAAY,KAAK;AACnB,mBAAO;UACT;AACA,YAAE;QACJ;AAEA,gBAAQ,UAAU,IAAI,QAAQ,UAAU,IAAI,MAAQ;AAEpD,UAAE;AAEF,YAAI,gBAAgB,KAAK,gBAAgB,GAAG;AAC1C,YAAE;QACJ;MACF;AAEA,UAAI,gBAAgB,GAAG;AACrB,eAAO;MACT;AAEA;IACF,WAAW,MAAM,OAAO,MAAM,EAAE,GAAG,GAAG;AACpC,QAAE;AACF,UAAI,MAAM,OAAO,MAAM,QAAW;AAChC,eAAO;MACT;IACF,WAAW,MAAM,OAAO,MAAM,QAAW;AACvC,aAAO;IACT;AAEA,YAAQ,UAAU,IAAI;AACtB,MAAE;EACJ;AAEA,MAAI,aAAa,MAAM;AACrB,QAAI,QAAQ,aAAa;AACzB,iBAAa;AACb,WAAO,eAAe,KAAK,QAAQ,GAAG;AACpC,YAAM,OAAO,QAAQ,WAAW,QAAQ,CAAC;AACzC,cAAQ,WAAW,QAAQ,CAAC,IAAI,QAAQ,UAAU;AAClD,cAAQ,UAAU,IAAI;AACtB,QAAE;AACF,QAAE;IACJ;EACF,WAAW,aAAa,QAAQ,eAAe,GAAG;AAChD,WAAO;EACT;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,SAAc;AACnC,MAAI,SAAS;AACb,QAAM,WAAW,wBAAwB,OAAO;AAChD,MAAI,UAAU;AAEd,WAAS,aAAa,GAAG,cAAc,GAAG,EAAE,YAAY;AACtD,QAAI,WAAW,QAAQ,UAAU,MAAM,GAAG;AACxC;IACF,WAAW,SAAS;AAClB,gBAAU;IACZ;AAEA,QAAI,aAAa,YAAY;AAC3B,YAAM,YAAY,eAAe,IAAI,OAAO;AAC5C,gBAAU;AACV,gBAAU;AACV;IACF;AAEA,cAAU,QAAQ,UAAU,EAAE,SAAS,EAAE;AAEzC,QAAI,eAAe,GAAG;AACpB,gBAAU;IACZ;EACF;AAEA,SAAO;AACT;AAEA,SAAS,UAAU,OAAe,kBAAkB,OAAK;AACvD,MAAI,MAAM,CAAC,MAAM,KAAK;AACpB,QAAI,MAAM,MAAM,SAAS,CAAC,MAAM,KAAK;AACnC,aAAO;IACT;AAEA,WAAO,UAAU,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,CAAC;EACvD;AAEA,MAAI,iBAAiB;AACnB,WAAO,gBAAgB,KAAK;EAC9B;AAEA,QAAM,SAAS,qBAAqB,oBAAoB,KAAK,CAAC;AAC9D,QAAM,cAAc,cAAc,MAAM;AACxC,MAAI,gBAAgB,SAAS;AAC3B,WAAO;EACT;AAEA,MAAI,iCAAiC,WAAW,GAAG;AACjD,WAAO;EACT;AAEA,MAAI,cAAc,WAAW,GAAG;AAC9B,WAAO,UAAU,WAAW;EAC9B;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,OAAa;AAClC,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,MAAM,SAAS,CAAC,MAAM,IAAI;AAClC,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO;IACT;AACA,UAAM,IAAG;EACX;AAEA,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,MAAI,gBAAgB,IAAI,MAAM,SAAS;AACrC,WAAO;EACT;AAEA,MAAI,YAAY,KAAK,IAAI,GAAG;AAC1B,WAAO;EACT;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAa;AACpC,MAAI,+BAA+B,KAAK,GAAG;AACzC,WAAO;EACT;AAEA,SAAO,wBAAwB,OAAO,wBAAwB;AAChE;AAEA,SAAS,wBAAwB,KAAa;AAC5C,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,MAAI,UAAU;AAEd,WAASP,KAAI,GAAGA,KAAI,IAAI,QAAQ,EAAEA,IAAG;AACnC,QAAI,IAAIA,EAAC,MAAM,GAAG;AAChB,UAAI,UAAU,QAAQ;AACpB,iBAAS;AACT,iBAAS;MACX;AAEA,kBAAY;AACZ,gBAAU;IACZ,OAAO;AACL,UAAI,cAAc,MAAM;AACtB,oBAAYA;MACd;AACA,QAAE;IACJ;EACF;AAGA,MAAI,UAAU,QAAQ;AACpB,WAAO;EACT;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,MAAgC;AACrD,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,cAAc,IAAI;EAC3B;AAGA,MAAI,gBAAgB,OAAO;AACzB,WAAO,IAAI,cAAc,IAAI,CAAC;EAChC;AAEA,SAAO;AACT;AAIA,SAAS,cAAc,QAAgB,WAAW,OAAK;AAQrD,MAAI;AACJ,MAAI;AACF,aAAS,SAAS,QAAQ,MAAM;EAClC,SAASQ,IAAG;AACV,WAAO;EACT;AACA,MAAI,WAAW,QAAQ,WAAW,IAAI;AACpC,WAAO;EACT;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,KAAW;AACnC,SAAO,IAAI,QAAQ,qDAAqD,EAAE;AAC5E;AAEA,SAAS,kBAAkB,KAAW;AACpC,SAAO,IAAI,QAAQ,0BAA0B,EAAE;AACjD;AAEA,SAAS,YAAY,KAAW;AAC9B,QAAM,EAAE,KAAI,IAAK;AACjB,MAAI,KAAK,WAAW,GAAG;AACrB;EACF;AACA,MACE,IAAI,WAAW,UACf,KAAK,WAAW,KAChB,+BAA+B,KAAK,CAAC,CAAC,GACtC;AACA;EACF;AAEA,OAAK,IAAG;AACV;AAEA,SAAS,oBAAoB,KAAW;AACtC,SAAO,IAAI,aAAa,MAAM,IAAI,aAAa;AACjD;AAEA,SAAS,gCAAgC,KAAW;AAClD,SAAO,IAAI,SAAS,QAAQ,IAAI,SAAS,MAAM,IAAI,WAAW;AAChE;AAEA,SAAS,gBAAgB,KAAW;AAClC,SAAO,OAAO,IAAI,SAAS;AAC7B;AAEA,SAAS,+BAA+BT,SAAc;AACpD,SAAO,eAAe,KAAKA,OAAM;AACnC;AAaA,IAAM,kBAAN,MAAqB;EAenB,YACE,OACAU,OACA,kBACA,KACA,eAAqB;AA0DvB,SAAA,QAAQ;MACN,sBAAsB,KAAK;MAC3B,gBAAgB,KAAK;MACrB,mBAAmB,KAAK;MACxB,uCAAuC,KAAK;MAC5C,2BAA2B,KAAK;MAChC,kBAAkB,KAAK;MACvB,wBAAwB,KAAK;MAC7B,mCAAmC,KAAK;MACxC,0CACE,KAAK;MACP,mBAAmB,KAAK;MACxB,cAAc,KAAK;MACnB,kBAAkB,KAAK;MACvB,cAAc,KAAK;MACnB,cAAc,KAAK;MACnB,oBAAoB,KAAK;MACzB,mBAAmB,KAAK;MACxB,oBAAoB,KAAK;MACzB,cAAc,KAAK;MACnB,qBAAqB,KAAK;MAC1B,eAAe,KAAK;MACpB,kBAAkB,KAAK;;AA9EvB,SAAK,UAAU;AACf,SAAK,OAAOA,SAAQ;AACpB,SAAK,mBAAmB,oBAAoB;AAC5C,SAAK,MAAM;AACX,SAAK,UAAU;AACf,SAAK,aAAa;AAElB,QAAI,CAAC,KAAK,KAAK;AACb,WAAK,MAAM;QACT,QAAQ;QACR,UAAU;QACV,UAAU;QACV,MAAM;QACN,MAAM;QACN,MAAM,CAAA;QACN,OAAO;QACP,UAAU;;AAGZ,YAAMC,OAAM,iBAAiB,KAAK;AAClC,UAAIA,SAAQ,OAAO;AACjB,aAAK,aAAa;MACpB;AACA,cAAQA;IACV;AAEA,UAAM,MAAM,kBAAkB,KAAK;AACnC,QAAI,QAAQ,OAAO;AACjB,WAAK,aAAa;IACpB;AACA,YAAQ;AAER,SAAK,QAAQ,iBAAiB;AAE9B,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,wBAAwB;AAE7B,SAAK,QAAQ,MAAM,KAAK,OAAO,CAACT,OAAMA,GAAE,YAAY,CAAC,CAAE;AAEvD,WAAO,KAAK,WAAW,KAAK,MAAM,QAAQ,EAAE,KAAK,SAAS;AACxD,YAAMA,KAAI,KAAK,MAAM,KAAK,OAAO;AACjC,YAAM,OAAO,MAAMA,EAAC,IAAI,SAAY,OAAO,cAAcA,EAAC;AAG1D,YAAM,MAAM,KAAK,MAAM,SAAS,KAAK,KAAK,EAAE,EAAE,KAAK,MAAMA,IAAG,IAAK;AACjE,UAAI,CAAC,KAAK;AACR;MACF,WAAW,QAAQ,SAAS;AAC1B,aAAK,UAAU;AACf;MACF;IACF;EACF;EA2BA,iBAAiBA,IAAW,MAAY;AACtC,QAAI,aAAaA,EAAC,GAAG;AACnB,WAAK,UAAU,KAAK,YAAW;AAC/B,WAAK,QAAQ;IACf,WAAW,CAAC,KAAK,eAAe;AAC9B,WAAK,QAAQ;AACb,QAAE,KAAK;IACT,OAAO;AACL,WAAK,aAAa;AAClB,aAAO;IACT;AAEA,WAAO;EACT;EAEA,YAAYA,IAAW,MAAY;AACjC,QACE,oBAAoBA,EAAC,KACrBA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,GACX;AACA,WAAK,UAAU,KAAK,YAAW;IACjC,WAAWA,OAAM,EAAE,GAAG,GAAG;AACvB,UAAI,KAAK,eAAe;AACtB,YAAI,UAAU,KAAK,GAAG,KAAK,CAAC,gBAAgB,KAAK,MAAM,GAAG;AACxD,iBAAO;QACT;AAEA,YAAI,CAAC,UAAU,KAAK,GAAG,KAAK,gBAAgB,KAAK,MAAM,GAAG;AACxD,iBAAO;QACT;AAEA,aACG,oBAAoB,KAAK,GAAG,KAAK,KAAK,IAAI,SAAS,SACpD,KAAK,WAAW,QAChB;AACA,iBAAO;QACT;AAEA,YAAI,KAAK,IAAI,WAAW,UAAU,KAAK,IAAI,SAAS,IAAI;AACtD,iBAAO;QACT;MACF;AACA,WAAK,IAAI,SAAS,KAAK;AACvB,UAAI,KAAK,eAAe;AACtB,YAAI,KAAK,IAAI,SAAS,YAAY,KAAK,IAAI,MAAM,GAAG;AAClD,eAAK,IAAI,OAAO;QAClB;AACA,eAAO;MACT;AACA,WAAK,SAAS;AACd,UAAI,KAAK,IAAI,WAAW,QAAQ;AAC9B,YACE,KAAK,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,GAAG,KACtC,KAAK,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,GAAG,GACtC;AACA,eAAK,aAAa;QACpB;AACA,aAAK,QAAQ;MACf,WACE,UAAU,KAAK,GAAG,KAClB,KAAK,SAAS,QACd,KAAK,KAAK,WAAW,KAAK,IAAI,QAC9B;AACA,aAAK,QAAQ;MACf,WAAW,UAAU,KAAK,GAAG,GAAG;AAC9B,aAAK,QAAQ;MACf,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG;AAClD,aAAK,QAAQ;AACb,UAAE,KAAK;MACT,OAAO;AACL,aAAK,IAAI,OAAO,CAAC,EAAE;AACnB,aAAK,QAAQ;MACf;IACF,WAAW,CAAC,KAAK,eAAe;AAC9B,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,WAAK,UAAU;IACjB,OAAO;AACL,WAAK,aAAa;AAClB,aAAO;IACT;AAEA,WAAO;EACT;EAEA,cAAcA,IAAS;AACrB,QAAI,KAAK,SAAS,QAAS,gBAAgB,KAAK,IAAI,KAAKA,OAAM,EAAE,GAAG,GAAI;AACtE,aAAO;IACT,WAAW,gBAAgB,KAAK,IAAI,KAAKA,OAAM,EAAE,GAAG,GAAG;AACrD,WAAK,IAAI,SAAS,KAAK,KAAK;AAC5B,WAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,WAAK,IAAI,QAAQ,KAAK,KAAK;AAC3B,WAAK,IAAI,WAAW;AACpB,WAAK,QAAQ;IACf,WAAW,KAAK,KAAK,WAAW,QAAQ;AACtC,WAAK,QAAQ;AACb,QAAE,KAAK;IACT,OAAO;AACL,WAAK,QAAQ;AACb,QAAE,KAAK;IACT;AAEA,WAAO;EACT;EAEA,gCAAgCA,IAAS;AACvC,QAAIA,OAAM,EAAE,GAAG,KAAK,KAAK,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG;AAC3D,WAAK,QAAQ;AACb,QAAE,KAAK;IACT,OAAO;AACL,WAAK,aAAa;AAClB,WAAK,QAAQ;AACb,QAAE,KAAK;IACT;AAEA,WAAO;EACT;EAEA,qBAAqBA,IAAS;AAC5B,QAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,WAAK,QAAQ;IACf,OAAO;AACL,WAAK,QAAQ;AACb,QAAE,KAAK;IACT;AAEA,WAAO;EACT;EAEA,cAAcA,IAAS;AACrB,SAAK,IAAI,SAAS,KAAK,KAAK;AAC5B,QAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,WAAK,QAAQ;IACf,WAAW,UAAU,KAAK,GAAG,KAAKA,OAAM,EAAE,IAAI,GAAG;AAC/C,WAAK,aAAa;AAClB,WAAK,QAAQ;IACf,OAAO;AACL,WAAK,IAAI,WAAW,KAAK,KAAK;AAC9B,WAAK,IAAI,WAAW,KAAK,KAAK;AAC9B,WAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,WAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,WAAK,IAAI,OAAO,KAAK,KAAK,KAAK,MAAK;AACpC,WAAK,IAAI,QAAQ,KAAK,KAAK;AAC3B,UAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,aAAK,IAAI,QAAQ;AACjB,aAAK,QAAQ;MACf,WAAWA,OAAM,EAAE,GAAG,GAAG;AACvB,aAAK,IAAI,WAAW;AACpB,aAAK,QAAQ;MACf,WAAW,CAAC,MAAMA,EAAC,GAAG;AACpB,aAAK,IAAI,QAAQ;AACjB,aAAK,IAAI,KAAK,IAAG;AACjB,aAAK,QAAQ;AACb,UAAE,KAAK;MACT;IACF;AAEA,WAAO;EACT;EAEA,mBAAmBA,IAAS;AAC1B,QAAI,UAAU,KAAK,GAAG,MAAMA,OAAM,EAAE,GAAG,KAAKA,OAAM,EAAE,IAAI,IAAI;AAC1D,UAAIA,OAAM,EAAE,IAAI,GAAG;AACjB,aAAK,aAAa;MACpB;AACA,WAAK,QAAQ;IACf,WAAWA,OAAM,EAAE,GAAG,GAAG;AACvB,WAAK,QAAQ;IACf,OAAO;AACL,WAAK,IAAI,WAAW,KAAK,KAAK;AAC9B,WAAK,IAAI,WAAW,KAAK,KAAK;AAC9B,WAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,WAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,WAAK,QAAQ;AACb,QAAE,KAAK;IACT;AAEA,WAAO;EACT;EAEA,6BAA6BA,IAAS;AACpC,QAAIA,OAAM,EAAE,GAAG,KAAK,KAAK,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG;AAC3D,WAAK,QAAQ;AACb,QAAE,KAAK;IACT,OAAO;AACL,WAAK,aAAa;AAClB,WAAK,QAAQ;AACb,QAAE,KAAK;IACT;AAEA,WAAO;EACT;EAEA,mCAAmCA,IAAS;AAC1C,QAAIA,OAAM,EAAE,GAAG,KAAKA,OAAM,EAAE,IAAI,GAAG;AACjC,WAAK,QAAQ;AACb,QAAE,KAAK;IACT,OAAO;AACL,WAAK,aAAa;IACpB;AAEA,WAAO;EACT;EAEA,eAAeA,IAAW,MAAY;AACpC,QAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,WAAK,aAAa;AAClB,UAAI,KAAK,QAAQ;AACf,aAAK,SAAS,MAAM,KAAK,MAAM;MACjC;AACA,WAAK,SAAS;AAGd,YAAM,MAAM,aAAa,KAAK,MAAM;AACpC,eAAS,UAAU,GAAG,UAAU,KAAK,EAAE,SAAS;AAC9C,cAAM,YAAY,KAAK,OAAO,YAAY,OAAO;AAEjD,YAAI,cAAc,EAAE,GAAG,KAAK,CAAC,KAAK,uBAAuB;AACvD,eAAK,wBAAwB;AAC7B;QACF;AACA,cAAM,oBAAoB,2BACxB,WACA,uBAAuB;AAEzB,YAAI,KAAK,uBAAuB;AAC9B,eAAK,IAAI,YAAY;QACvB,OAAO;AACL,eAAK,IAAI,YAAY;QACvB;MACF;AACA,WAAK,SAAS;IAChB,WACE,MAAMA,EAAC,KACPA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,KACV,UAAU,KAAK,GAAG,KAAKA,OAAM,EAAE,IAAI,GACpC;AACA,UAAI,KAAK,UAAU,KAAK,WAAW,IAAI;AACrC,aAAK,aAAa;AAClB,eAAO;MACT;AACA,WAAK,WAAW,aAAa,KAAK,MAAM,IAAI;AAC5C,WAAK,SAAS;AACd,WAAK,QAAQ;IACf,OAAO;AACL,WAAK,UAAU;IACjB;AAEA,WAAO;EACT;EAEA,cAAcA,IAAW,MAAY;AACnC,QAAI,KAAK,iBAAiB,KAAK,IAAI,WAAW,QAAQ;AACpD,QAAE,KAAK;AACP,WAAK,QAAQ;IACf,WAAWA,OAAM,EAAE,GAAG,KAAK,CAAC,KAAK,SAAS;AACxC,UAAI,KAAK,WAAW,IAAI;AACtB,aAAK,aAAa;AAClB,eAAO;MACT;AAEA,UAAI,KAAK,kBAAkB,YAAY;AACrC,eAAO;MACT;AAEA,YAAM,OAAO,UAAU,KAAK,QAAQ,aAAa,KAAK,GAAG,CAAC;AAC1D,UAAI,SAAS,SAAS;AACpB,eAAO;MACT;AAEA,WAAK,IAAI,OAAO;AAChB,WAAK,SAAS;AACd,WAAK,QAAQ;IACf,WACE,MAAMA,EAAC,KACPA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,KACV,UAAU,KAAK,GAAG,KAAKA,OAAM,EAAE,IAAI,GACpC;AACA,QAAE,KAAK;AACP,UAAI,UAAU,KAAK,GAAG,KAAK,KAAK,WAAW,IAAI;AAC7C,aAAK,aAAa;AAClB,eAAO;MACT,WACE,KAAK,iBACL,KAAK,WAAW,OACf,oBAAoB,KAAK,GAAG,KAAK,KAAK,IAAI,SAAS,OACpD;AACA,aAAK,aAAa;AAClB,eAAO;MACT;AAEA,YAAM,OAAO,UAAU,KAAK,QAAQ,aAAa,KAAK,GAAG,CAAC;AAC1D,UAAI,SAAS,SAAS;AACpB,eAAO;MACT;AAEA,WAAK,IAAI,OAAO;AAChB,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,UAAI,KAAK,eAAe;AACtB,eAAO;MACT;IACF,OAAO;AACL,UAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,aAAK,UAAU;MACjB,WAAWA,OAAM,EAAE,GAAG,GAAG;AACvB,aAAK,UAAU;MACjB;AACA,WAAK,UAAU;IACjB;AAEA,WAAO;EACT;EAEA,UAAUA,IAAW,MAAS;AAC5B,QAAI,aAAaA,EAAC,GAAG;AACnB,WAAK,UAAU;IACjB,WACE,MAAMA,EAAC,KACPA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,KACV,UAAU,KAAK,GAAG,KAAKA,OAAM,EAAE,IAAI,KACpC,KAAK,eACL;AACA,UAAI,KAAK,WAAW,IAAI;AACtB,cAAM,OAAO,SAAS,KAAK,MAAM;AACjC,YAAI,OAAO,KAAK,KAAK,GAAG;AACtB,eAAK,aAAa;AAClB,iBAAO;QACT;AACA,aAAK,IAAI,OAAO,SAAS,YAAY,KAAK,IAAI,MAAM,IAAI,OAAO;AAC/D,aAAK,SAAS;MAChB;AACA,UAAI,KAAK,eAAe;AACtB,eAAO;MACT;AACA,WAAK,QAAQ;AACb,QAAE,KAAK;IACT,OAAO;AACL,WAAK,aAAa;AAClB,aAAO;IACT;AAEA,WAAO;EACT;EAEA,UAAUA,IAAS;AACjB,SAAK,IAAI,SAAS;AAClB,SAAK,IAAI,OAAO;AAEhB,QAAIA,OAAM,EAAE,GAAG,KAAKA,OAAM,EAAE,IAAI,GAAG;AACjC,UAAIA,OAAM,EAAE,IAAI,GAAG;AACjB,aAAK,aAAa;MACpB;AACA,WAAK,QAAQ;IACf,WAAW,KAAK,SAAS,QAAQ,KAAK,KAAK,WAAW,QAAQ;AAC5D,WAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,WAAK,IAAI,OAAO,KAAK,KAAK,KAAK,MAAK;AACpC,WAAK,IAAI,QAAQ,KAAK,KAAK;AAC3B,UAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,aAAK,IAAI,QAAQ;AACjB,aAAK,QAAQ;MACf,WAAWA,OAAM,EAAE,GAAG,GAAG;AACvB,aAAK,IAAI,WAAW;AACpB,aAAK,QAAQ;MACf,WAAW,CAAC,MAAMA,EAAC,GAAG;AACpB,aAAK,IAAI,QAAQ;AACjB,YAAI,CAAC,6BAA6B,KAAK,OAAO,KAAK,OAAO,GAAG;AAC3D,sBAAY,KAAK,GAAG;QACtB,OAAO;AACL,eAAK,aAAa;AAClB,eAAK,IAAI,OAAO,CAAA;QAClB;AAEA,aAAK,QAAQ;AACb,UAAE,KAAK;MACT;IACF,OAAO;AACL,WAAK,QAAQ;AACb,QAAE,KAAK;IACT;AAEA,WAAO;EACT;EAEA,eAAeA,IAAS;AACtB,QAAIA,OAAM,EAAE,GAAG,KAAKA,OAAM,EAAE,IAAI,GAAG;AACjC,UAAIA,OAAM,EAAE,IAAI,GAAG;AACjB,aAAK,aAAa;MACpB;AACA,WAAK,QAAQ;IACf,OAAO;AACL,UAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,WAAW,QAAQ;AACrD,YACE,CAAC,6BAA6B,KAAK,OAAO,KAAK,OAAO,KACtD,qCAAqC,KAAK,KAAK,KAAK,CAAC,CAAC,GACtD;AACA,eAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC;QACtC;AACA,aAAK,IAAI,OAAO,KAAK,KAAK;MAC5B;AACA,WAAK,QAAQ;AACb,QAAE,KAAK;IACT;AAEA,WAAO;EACT;EAEA,cAAcA,IAAW,MAAY;AACnC,QACE,MAAMA,EAAC,KACPA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,IAAI,KACZA,OAAM,EAAE,GAAG,KACXA,OAAM,EAAE,GAAG,GACX;AACA,QAAE,KAAK;AACP,UAAI,CAAC,KAAK,iBAAiB,2BAA2B,KAAK,MAAM,GAAG;AAClE,aAAK,aAAa;AAClB,aAAK,QAAQ;MACf,WAAW,KAAK,WAAW,IAAI;AAC7B,aAAK,IAAI,OAAO;AAChB,YAAI,KAAK,eAAe;AACtB,iBAAO;QACT;AACA,aAAK,QAAQ;MACf,OAAO;AACL,YAAI,OAAO,UAAU,KAAK,QAAQ,aAAa,KAAK,GAAG,CAAC;AACxD,YAAI,SAAS,SAAS;AACpB,iBAAO;QACT;AACA,YAAI,SAAS,aAAa;AACxB,iBAAO;QACT;AACA,aAAK,IAAI,OAAO;AAEhB,YAAI,KAAK,eAAe;AACtB,iBAAO;QACT;AAEA,aAAK,SAAS;AACd,aAAK,QAAQ;MACf;IACF,OAAO;AACL,WAAK,UAAU;IACjB;AAEA,WAAO;EACT;EAEA,eAAeA,IAAS;AACtB,QAAI,UAAU,KAAK,GAAG,GAAG;AACvB,UAAIA,OAAM,EAAE,IAAI,GAAG;AACjB,aAAK,aAAa;MACpB;AACA,WAAK,QAAQ;AAEb,UAAIA,OAAM,EAAE,GAAG,KAAKA,OAAM,EAAE,IAAI,GAAG;AACjC,UAAE,KAAK;MACT;IACF,WAAW,CAAC,KAAK,iBAAiBA,OAAM,EAAE,GAAG,GAAG;AAC9C,WAAK,IAAI,QAAQ;AACjB,WAAK,QAAQ;IACf,WAAW,CAAC,KAAK,iBAAiBA,OAAM,EAAE,GAAG,GAAG;AAC9C,WAAK,IAAI,WAAW;AACpB,WAAK,QAAQ;IACf,WAAWA,OAAM,QAAW;AAC1B,WAAK,QAAQ;AACb,UAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,UAAE,KAAK;MACT;IACF,WAAW,KAAK,iBAAiB,KAAK,IAAI,SAAS,MAAM;AACvD,WAAK,IAAI,KAAK,KAAK,EAAE;IACvB;AAEA,WAAO;EACT;EAEA,UAAUA,IAAS;AACjB,QACE,MAAMA,EAAC,KACPA,OAAM,EAAE,GAAG,KACV,UAAU,KAAK,GAAG,KAAKA,OAAM,EAAE,IAAI,KACnC,CAAC,KAAK,kBAAkBA,OAAM,EAAE,GAAG,KAAKA,OAAM,EAAE,GAAG,IACpD;AACA,UAAI,UAAU,KAAK,GAAG,KAAKA,OAAM,EAAE,IAAI,GAAG;AACxC,aAAK,aAAa;MACpB;AAEA,UAAI,YAAY,KAAK,MAAM,GAAG;AAC5B,oBAAY,KAAK,GAAG;AACpB,YAAIA,OAAM,EAAE,GAAG,KAAK,EAAE,UAAU,KAAK,GAAG,KAAKA,OAAM,EAAE,IAAI,IAAI;AAC3D,eAAK,IAAI,KAAK,KAAK,EAAE;QACvB;MACF,WACE,YAAY,KAAK,MAAM,KACvBA,OAAM,EAAE,GAAG,KACX,EAAE,UAAU,KAAK,GAAG,KAAKA,OAAM,EAAE,IAAI,IACrC;AACA,aAAK,IAAI,KAAK,KAAK,EAAE;MACvB,WAAW,CAAC,YAAY,KAAK,MAAM,GAAG;AACpC,YACE,KAAK,IAAI,WAAW,UACpB,KAAK,IAAI,KAAK,WAAW,KACzB,2BAA2B,KAAK,MAAM,GACtC;AACA,eAAK,SAAS,GAAG,KAAK,OAAO,CAAC,CAAC;QACjC;AACA,aAAK,IAAI,KAAK,KAAK,KAAK,MAAM;MAChC;AACA,WAAK,SAAS;AACd,UAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,aAAK,IAAI,QAAQ;AACjB,aAAK,QAAQ;MACf;AACA,UAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,aAAK,IAAI,WAAW;AACpB,aAAK,QAAQ;MACf;IACF,OAAO;AAGL,UACEA,OAAM,EAAE,GAAG,MACV,CAAC,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,KACvC,CAAC,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,IAC1C;AACA,aAAK,aAAa;MACpB;AAEA,WAAK,UAAU,2BAA2BA,IAAG,mBAAmB;IAClE;AAEA,WAAO;EACT;EAEA,gBAAgBA,IAAS;AACvB,QAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,WAAK,IAAI,QAAQ;AACjB,WAAK,QAAQ;IACf,WAAWA,OAAM,EAAE,GAAG,GAAG;AACvB,WAAK,IAAI,WAAW;AACpB,WAAK,QAAQ;IACf,OAAO;AAEL,UAAI,CAAC,MAAMA,EAAC,KAAKA,OAAM,EAAE,GAAG,GAAG;AAC7B,aAAK,aAAa;MACpB;AAEA,UACEA,OAAM,EAAE,GAAG,MACV,CAAC,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,KACvC,CAAC,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,IAC1C;AACA,aAAK,aAAa;MACpB;AAEA,UAAI,CAAC,MAAMA,EAAC,GAAG;AAEb,aAAK,IAAI,QAAQ,2BACfA,IACA,wBAAwB;MAE5B;IACF;AAEA,WAAO;EACT;EAEA,WAAWA,IAAW,MAAY;AAChC,QACE,CAAC,UAAU,KAAK,GAAG,KACnB,KAAK,IAAI,WAAW,QACpB,KAAK,IAAI,WAAW,OACpB;AACA,WAAK,mBAAmB;IAC1B;AAEA,QAAK,CAAC,KAAK,iBAAiBA,OAAM,EAAE,GAAG,KAAM,MAAMA,EAAC,GAAG;AACrD,YAAM,8BAA8B,UAAU,KAAK,GAAG,IAClD,8BACA;AACJ,WAAK,IAAI,SAAS,wBAChB,KAAK,QACL,2BAA2B;AAG7B,WAAK,SAAS;AAEd,UAAIA,OAAM,EAAE,GAAG,GAAG;AAChB,aAAK,IAAI,WAAW;AACpB,aAAK,QAAQ;MACf;IACF,WAAW,CAAC,MAAMA,EAAC,GAAG;AAGpB,UACEA,OAAM,EAAE,GAAG,MACV,CAAC,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,KACvC,CAAC,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,IAC1C;AACA,aAAK,aAAa;MACpB;AAEA,WAAK,UAAU;IACjB;AAEA,WAAO;EACT;EAEA,cAAcA,IAAS;AACrB,QAAI,CAAC,MAAMA,EAAC,GAAG;AAEb,UACEA,OAAM,EAAE,GAAG,MACV,CAAC,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,KACvC,CAAC,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,IAC1C;AACA,aAAK,aAAa;MACpB;AAEA,WAAK,IAAI,YAAY,2BACnBA,IACA,uBAAuB;IAE3B;AAEA,WAAO;EACT;;AAGF,IAAM,0BAA0B,oBAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;AAEzE,SAAS,6BAA6B,OAAiB,SAAe;AACpE,QAAM,SAAS,MAAM,SAAS;AAC9B,SACE,UAAU,KACV,+BAA+B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,CAAC,MAChE,WAAW,KAAK,wBAAwB,IAAI,MAAM,UAAU,CAAC,CAAC;AAEnE;AAEA,SAAS,aAAa,KAAU,iBAAyB;AACvD,MAAI,SAAS,GAAG,IAAI,MAAM;AAC1B,MAAI,IAAI,SAAS,MAAM;AACrB,cAAU;AAEV,QAAI,IAAI,aAAa,MAAM,IAAI,aAAa,IAAI;AAC9C,gBAAU,IAAI;AACd,UAAI,IAAI,aAAa,IAAI;AACvB,kBAAU,IAAI,IAAI,QAAQ;MAC5B;AACA,gBAAU;IACZ;AAEA,cAAU,cAAc,IAAI,IAAI;AAEhC,QAAI,IAAI,SAAS,MAAM;AACrB,gBAAU,IAAI,IAAI,IAAI;IACxB;EACF;AAEA,MACE,IAAI,SAAS,QACb,CAAC,gBAAgB,GAAG,KACpB,IAAI,KAAK,SAAS,KAClB,IAAI,KAAK,CAAC,MAAM,IAChB;AACA,cAAU;EACZ;AACA,YAAU,cAAc,GAAG;AAE3B,MAAI,IAAI,UAAU,MAAM;AACtB,cAAU,IAAI,IAAI,KAAK;EACzB;AAEA,MAAI,CAAC,mBAAmB,IAAI,aAAa,MAAM;AAC7C,cAAU,IAAI,IAAI,QAAQ;EAC5B;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAIxB;AACC,MAAI,SAAS,GAAG,MAAM,MAAM;AAC5B,YAAU,cAAc,MAAM,IAAI;AAElC,MAAI,MAAM,SAAS,MAAM;AACvB,cAAU,IAAI,MAAM,IAAI;EAC1B;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,KAAW;AAChC,MAAI,OAAO,IAAI,SAAS,UAAU;AAChC,WAAO,IAAI;EACb;AAEA,MAAI,SAAS;AACb,aAAW,WAAW,IAAI,MAAM;AAC9B,cAAU,IAAI,OAAO;EACvB;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,KAAQ;AAElC,UAAQ,IAAI,QAAQ;IAClB,KAAK;AACH,UAAI;AACF,eAAO,mBAAmB,SAAS,cAAc,GAAG,CAAC,CAAC;MACxD,SAASO,IAAG;AAEV,eAAO;MACT;IACF,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;AACH,aAAO,gBAAgB;QACrB,QAAQ,IAAI;QACZ,MAAM,IAAI;QACV,MAAM,IAAI;OACX;IACH,KAAK;AAQH,aAAO;IACT;AAEE,aAAO;EACX;AACF;AAEM,SAAU,cAAc,OAAe,SAAa;AACxD,MAAI,YAAY,QAAW;AACzB,cAAU,CAAA;EACZ;AAEA,QAAM,MAAM,IAAI,gBACd,OACA,QAAQ,SACR,QAAQ,kBACR,QAAQ,KACR,QAAQ,aAAa;AAGvB,MAAI,IAAI,SAAS;AACf,WAAO;EACT;AAEA,SAAO,IAAI;AACb;AAEA,SAAS,eAAe,KAAa,UAAgB;AACnD,MAAI,WAAW,wBAAwB,UAAU,uBAAuB;AAC1E;AAEA,SAAS,eAAe,KAAa,UAAgB;AACnD,MAAI,WAAW,wBAAwB,UAAU,uBAAuB;AAC1E;AAEA,SAAS,iBAAiB,SAAe;AACvC,SAAO,OAAO,OAAO;AACvB;AAEA,SAAS,SACP,OACA,SAAmD;AAEnD,MAAI,YAAY,QAAW;AACzB,cAAU,CAAA;EACZ;AAGA,SAAO,cAAc,OAAO;IAC1B,SAAS,QAAQ;IACjB,kBAAkB,QAAQ;GAC3B;AACH;AAEM,IAAO,UAAP,MAAc;;EAElB,YAAY,KAAmBC,OAAmB;AAChD,QAAI,aAAa;AACjB,QAAIA,UAAS,QAAW;AACtB,UAAIA,iBAAgB,KAAK;AACvB,QAAAA,QAAOA,MAAK;MACd;AACA,mBAAa,cAAcA,KAAI;AAC/B,UAAI,eAAe,MAAM;AACvB,cAAM,IAAI,UAAU,qBAAqBA,KAAI,EAAE;MACjD;IACF;AAEA,QAAI,eAAe,KAAK;AACtB,YAAM,IAAI;IACZ;AACA,UAAM,YAAY,cAAc,KAAK,EAAE,SAAS,WAAU,CAAE;AAC5D,QAAI,cAAc,MAAM;AACtB,YAAM,IAAI,UAAU,gBAAgB,GAAG,EAAE;IAC3C;AAEA,UAAM,QAAQ,UAAU,UAAU,OAAO,UAAU,QAAQ;AAE3D,SAAK,OAAO;AAIZ,SAAK,SAAS,IAAI,oBAAoB,OAAO;MAC3C,iBAAiB;KAClB;AACD,SAAK,OAAO,OAAO;EACrB;EAEA,IAAI,OAAI;AACN,WAAO,aAAa,KAAK,IAAI;EAC/B;EAEA,IAAI,KAAKE,IAAC;AACR,UAAM,YAAY,cAAcA,EAAC;AACjC,QAAI,cAAc,MAAM;AACtB,YAAM,IAAI,UAAU,gBAAgBA,EAAC,EAAE;IACzC;AAEA,SAAK,OAAO;AAEZ,SAAK,OAAO,MAAM,OAAO,CAAC;AAC1B,UAAM,EAAE,MAAK,IAAK;AAClB,QAAI,UAAU,MAAM;AAClB,WAAK,OAAO,QAAQ,sBAAsB,KAAK;IACjD;EACF;EAEA,IAAI,SAAM;AACR,WAAO,mBAAmB,KAAK,IAAI;EACrC;EAEA,IAAI,WAAQ;AACV,WAAO,GAAG,KAAK,KAAK,MAAM;EAC5B;EAEA,IAAI,SAASA,IAAC;AACZ,kBAAc,GAAGA,EAAC,KAAK;MACrB,KAAK,KAAK;MACV,eAAe;KAChB;EACH;EAEA,IAAI,WAAQ;AACV,WAAO,KAAK,KAAK;EACnB;EAEA,IAAI,SAASA,IAAC;AACZ,QAAI,gCAAgC,KAAK,IAAI,GAAG;AAC9C;IACF;AAEA,mBAAe,KAAK,MAAMA,EAAC;EAC7B;EAEA,IAAI,WAAQ;AACV,WAAO,KAAK,KAAK;EACnB;EAEA,IAAI,SAASA,IAAC;AACZ,QAAI,gCAAgC,KAAK,IAAI,GAAG;AAC9C;IACF;AAEA,mBAAe,KAAK,MAAMA,EAAC;EAC7B;EAEA,IAAI,OAAI;AACN,UAAM,MAAM,KAAK;AAEjB,QAAI,IAAI,SAAS,MAAM;AACrB,aAAO;IACT;AAEA,QAAI,IAAI,SAAS,MAAM;AACrB,aAAO,cAAc,IAAI,IAAI;IAC/B;AAEA,WAAO,GAAG,cAAc,IAAI,IAAI,CAAC,IAAI,iBAAiB,IAAI,IAAI,CAAC;EACjE;EAEA,IAAI,KAAKA,IAAC;AACR,QAAI,gBAAgB,KAAK,IAAI,GAAG;AAC9B;IACF;AAEA,kBAAcA,IAAG,EAAE,KAAK,KAAK,MAAM,eAAe,OAAM,CAAE;EAC5D;EAEA,IAAI,WAAQ;AACV,QAAI,KAAK,KAAK,SAAS,MAAM;AAC3B,aAAO;IACT;AAEA,WAAO,cAAc,KAAK,KAAK,IAAI;EACrC;EAEA,IAAI,SAASA,IAAC;AACZ,QAAI,gBAAgB,KAAK,IAAI,GAAG;AAC9B;IACF;AAEA,kBAAcA,IAAG,EAAE,KAAK,KAAK,MAAM,eAAe,WAAU,CAAE;EAChE;EAEA,IAAI,OAAI;AACN,QAAI,KAAK,KAAK,SAAS,MAAM;AAC3B,aAAO;IACT;AAEA,WAAO,iBAAiB,KAAK,KAAK,IAAI;EACxC;EAEA,IAAI,KAAKA,IAAC;AACR,QAAI,gCAAgC,KAAK,IAAI,GAAG;AAC9C;IACF;AAEA,QAAIA,OAAM,IAAI;AACZ,WAAK,KAAK,OAAO;IACnB,OAAO;AACL,oBAAcA,IAAG,EAAE,KAAK,KAAK,MAAM,eAAe,OAAM,CAAE;IAC5D;EACF;EAEA,IAAI,WAAQ;AACV,WAAO,cAAc,KAAK,IAAI;EAChC;EAEA,IAAI,SAASA,IAAS;AACpB,QAAI,gBAAgB,KAAK,IAAI,GAAG;AAC9B;IACF;AAEA,SAAK,KAAK,OAAO,CAAA;AACjB,kBAAcA,IAAG,EAAE,KAAK,KAAK,MAAM,eAAe,aAAY,CAAE;EAClE;EAEA,IAAI,SAAM;AACR,QAAI,KAAK,KAAK,UAAU,QAAQ,KAAK,KAAK,UAAU,IAAI;AACtD,aAAO;IACT;AAEA,WAAO,IAAI,KAAK,KAAK,KAAK;EAC5B;EAEA,IAAI,OAAOA,IAAC;AACV,UAAM,MAAM,KAAK;AAEjB,QAAIA,OAAM,IAAI;AACZ,UAAI,QAAQ;AACZ,WAAK,OAAO,QAAQ,CAAA;AACpB;IACF;AAEA,UAAM,QAAQA,GAAE,CAAC,MAAM,MAAMA,GAAE,UAAU,CAAC,IAAIA;AAC9C,QAAI,QAAQ;AACZ,kBAAc,OAAO,EAAE,KAAK,eAAe,QAAO,CAAE;AACpD,SAAK,OAAO,QAAQ,sBAAsB,KAAK;EACjD;EAEA,IAAI,eAAY;AACd,WAAO,KAAK;EACd;EAEA,IAAI,OAAI;AACN,QAAI,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,IAAI;AAC5D,aAAO;IACT;AAEA,WAAO,IAAI,KAAK,KAAK,QAAQ;EAC/B;EAEA,IAAI,KAAKA,IAAC;AACR,QAAIA,OAAM,IAAI;AACZ,WAAK,KAAK,WAAW;AACrB;IACF;AAEA,UAAM,QAAQA,GAAE,CAAC,MAAM,MAAMA,GAAE,UAAU,CAAC,IAAIA;AAC9C,SAAK,KAAK,WAAW;AACrB,kBAAc,OAAO,EAAE,KAAK,KAAK,MAAM,eAAe,WAAU,CAAE;EACpE;EAEA,SAAM;AACJ,WAAO,KAAK;EACd;;;;CClgED,WAAA;AACC,MAAI,OAAO,eAAe;AAAU;AACpC,SAAO,eAAe,OAAO,WAAW,aAAa;IACnD,KAAK,WAAA;AACH,aAAO;IACT;IACA,cAAc;;GACf;AAED,YAAU,aAAa;AAEvB,SAAO,OAAO,UAAU;AAC1B,GAAE;AAGF,IAAM,eAAe;AAGrB,IAAI,OAAO,WAAW;AACtB,IAAI,gBAAgB,CAAC,MAAM;AAEzB,aAAW,MAAM,OAAO;AAExB,SAAO;AACT;AAEO,IAAMC,OAAe;AAG5B,IAAI,mBAAmB,WAAW;AAElC,IAAI,gBAAgB,CAAC,kBAAkB;AAErC,aAAW,kBAAkB;AAE7B,qBAAmB;AACrB;AAEO,IAAMC,mBAAuC;;;AClE9C,SAAU,oBAAoB,KAAW;AAC7C,MAAI,CAAC,IAAI,WAAW,MAAM,KAAK,CAAC,IAAI,WAAW,OAAO,GAAG;AACvD,UAAM,aAAa;EACrB;AACA,QAAMC,KAAI,IAAIC,KAAI,GAAG;AACrB,MAAI,CAACD,GAAE,SAAS,SAAS,GAAG,GAAG;AAC7B,IAAAA,GAAE,WAAWA,GAAE,WAAW;EAC5B;AACA,EAAAA,GAAE,SAAS;AACX,EAAAA,GAAE,OAAO;AACT,SAAOA,GAAE;AACX;AAQM,SAAU,cAAc,KAAQ;AAEpC,QAAM,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AACpC,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,KAAK,UAAU,GAAG;EAC3B;AACA,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,aAAa,QAAQ,MAAM;AACvE,WAAO,KAAK,UAAU,GAAG;EAC3B;AACA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,UAAM,OAAiB,IAAI,IAAI,CAACE,OAAM,cAAcA,EAAC,CAAC;AACtD,WAAO,IAAI,KAAK,KAAK,GAAG,CAAC;EAC3B;AACA,QAAM,OAAiB,CAAA;AACvB,aAAW,OAAO,KAAK;AACrB,SAAK,KAAK,GAAG;EACf;AACA,OAAK,KAAI;AACT,MAAIC,KAAI;AACR,WAASC,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AACpC,UAAM,MAAM,KAAKA,EAAC;AAClB,IAAAD,MAAK,KAAK,UAAU,GAAG,IAAI,MAAM,cAAc,IAAI,GAAG,CAAC;AACvD,QAAIC,OAAM,KAAK,SAAS,GAAG;AACzB,MAAAD,MAAK;IACP;EACF;AACA,SAAOA,KAAI;AACb;AAKM,SAAU,OAAO,IAAYE,KAAU;AAC3C,MAAI,KAAKA,KAAI;AACX,WAAO;EACT;AACA,MAAI,KAAKA,KAAI;AACX,WAAO;EACT;AACA,SAAO;AACT;AAKM,SAAU,IAAIL,IAAM;AACxB,SAAO,KAAK,UAAUA,IAAG,QAAW,CAAC;AACvC;;;ACxFA,IAAM,SACJ,OAAO,YAAY,eACnB,OAAO,QAAQ,YAAY,eAC3B,QAAQ,QAAQ,SAAS;AAE3B,IAAY;CAAZ,SAAYM,WAAQ;AAClB,EAAAA,UAAA,OAAA,IAAA;AACA,EAAAA,UAAA,SAAA,IAAA;AACA,EAAAA,UAAA,MAAA,IAAA;AACA,EAAAA,UAAA,MAAA,IAAA;AACA,EAAAA,UAAA,OAAA,IAAA;AACA,EAAAA,UAAA,MAAA,IAAA;AACF,GAPY,aAAA,WAAQ,CAAA,EAAA;AASpB,IAAI,iBAAiB,SAAS;AAC9B,IAAM,gBAA0C,CAAA;AAEhD,IAAI,gBAAyB;AAG7B,MAAM,UAAU,WAAW,WAAA;AACzB,MACE,SAAS,QACR,OAAO,SAAS,YAAY,OAAO,SAAS,YAC7C;AACA,UAAM,IAAI,UAAS;EACrB;AACA,MAAI,OAAO,KAAK;AAChB,SAAO,SAAS,SAAY,UAAU,GAAG,IAAI;AAC7C,MAAI,MAAM,KAAK;AACf,QAAM,QAAQ,SAAY,KAAK,GAAG,GAAG;AAErC,MAAI,QAAQ;AACZ,MAAI,WAAW,MAAM;AACnB,YAAQ;cAAiB,KAAK,KAAK;EACrC;AACA,SAAO,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK;AAChC;AAyCA,SAAS,eACP,SACA,KACA,OACA,MAAW;AAEX,QAAM,QAAS,WAAmB;AAClC,MAAI,OAAO;AACT,QAAIC;AACJ,QAAI,KAAK,UAAU,GAAG;AACpB,MAAAA,KAAI;IACN,OAAO;AACL,MAAAA,KAAI,UAAU,MAAM,KAAK,SAAQ;IACnC;AACA,UAAM,OAAO,KAAK,OAAO;EAC3B;AACF;AAEA,SAAS,aACP,SACA,KACA,OACA,MAAW;AAEX,MAAI;AACF,QAAI,MAAM,IAAG,oBAAI,KAAI,GAAG,YAAW,CAAE,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO;AAChE,QAAI,KAAK,UAAU,GAAG;AACpB,aAAO,IAAI,KAAK,UAAU,MAAM,QAAW,CAAC,CAAC;;IAC/C,OAAO;AACL,aAAO;;IACT;AACA,YAAQ,OAAO,MAAM,GAAG;EAC1B,SAASC,IAAG;AAGV,QAAI,MAAM,IAAG,oBAAI,KAAI,GAAG,YAAW,CAAE;AACrC,QAAIA,cAAa,OAAO;AACtB,aAAO,wBAAwBA,GAAE,OAAO;;IAC1C,OAAO;AACL,aAAO;IACT;AACA,YAAQ,OAAO,MAAM,GAAG;EAC1B;AACF;AAMM,IAAO,SAAP,MAAa;EACjB,YAAoB,KAAW;AAAX,SAAA,MAAA;EAAc;EAElC,iBAAc;AACZ,UAAM,QAAQ,cAAc,KAAK,GAAG,KAAK;AACzC,YAAQ,OAAO;MACb,KAAK,SAAS;AACZ,eAAO;MACT,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;AACZ,eAAO;IACX;EACF;EAEA,gBAAa;AACX,UAAM,QAAQ,cAAc,KAAK,GAAG,KAAK;AACzC,YAAQ,OAAO;MACb,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;AACZ,eAAO;MACT,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;AACZ,eAAO;IACX;EACF;EAEA,gBAAa;AACX,UAAM,QAAQ,cAAc,KAAK,GAAG,KAAK;AACzC,YAAQ,OAAO;MACb,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;AACZ,eAAO;MACT,KAAK,SAAS;MACd,KAAK,SAAS;AACZ,eAAO;IACX;EACF;EAEA,iBAAc;AACZ,UAAM,QAAQ,cAAc,KAAK,GAAG,KAAK;AACzC,YAAQ,OAAO;MACb,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;MACd,KAAK,SAAS;AACZ,eAAO;MACT,KAAK,SAAS;AACZ,eAAO;IACX;EACF;EAEA,KAAK,YAAoB,MAAW;AAClC,QAAI,CAAC,KAAK,cAAa,GAAI;AACzB;IACF;AACA,QAAI,eAAe;AACjB,qBAAe,SAAS,KAAK,KAAK,GAAG,IAAI;AACzC;IACF;AACA,QAAI,QAAQ;AACV,mBAAa,SAAS,KAAK,KAAK,QAAQ,IAAI;IAC9C,OAAO;AACL,cAAQ,KACN,IAAG,oBAAI,KAAI,GAAG,YAAW,CAAE,IAAI,KAAK,GAAG,WAAW,SAClD,GAAG,IAAI;IAEX;EACF;EAEA,KAAK,YAAoB,MAAW;AAClC,QAAI,CAAC,KAAK,cAAa,GAAI;AACzB;IACF;AACA,QAAI,eAAe;AACjB,qBAAe,SAAS,KAAK,KAAK,GAAG,IAAI;AACzC;IACF;AACA,QAAI,QAAQ;AACV,mBAAa,SAAS,KAAK,KAAK,QAAQ,IAAI;IAC9C,OAAO;AACL,cAAQ,KACN,IAAG,oBAAI,KAAI,GAAG,YAAW,CAAE,IAAI,KAAK,GAAG,WAAW,SAClD,GAAG,IAAI;IAEX;EACF;EAEA,MAAM,YAAoB,MAAW;AACnC,QAAI,CAAC,KAAK,eAAc,GAAI;AAC1B;IACF;AACA,QAAI,eAAe;AACjB,qBAAe,SAAS,KAAK,KAAK,GAAG,IAAI;AACzC;IACF;AACA,QAAI,QAAQ;AACV,mBAAa,SAAS,KAAK,KAAK,SAAS,IAAI;IAC/C,OAAO;AACL,cAAQ,KACN,IAAG,oBAAI,KAAI,GAAG,YAAW,CAAE,IAAI,KAAK,GAAG,YAAY,SACnD,GAAG,IAAI;IAEX;EACF;EAEA,MAAM,YAAoB,MAAW;AACnC,QAAI,CAAC,KAAK,eAAc,GAAI;AAC1B;IACF;AACA,QAAI,eAAe;AACjB,qBAAe,SAAS,KAAK,KAAK,GAAG,IAAI;AACzC;IACF;AACA,QAAI,QAAQ;AACV,mBAAa,SAAS,KAAK,KAAK,SAAS,IAAI;IAC/C,OAAO;AACL,cAAQ,KACN,IAAG,oBAAI,KAAI,GAAG,YAAW,CAAE,IAAI,KAAK,GAAG,YAAY,SACnD,GAAG,IAAI;IAEX;EACF;EAEA,cAAW;AACT,QAAI,CAAC,KAAK,eAAc,GAAI;AAC1B;IACF;AACA,UAAMC,YAAW,IAAI,MAAM,mBAAmB;AAC9C,SAAK,MAAM,qBAAqBA,UAAS,KAAK,EAAE;EAClD;;;;ACnQF,IAAM,SAAS,IAAI,OAAO,UAAU;AAK9B,IAAO,gBAAP,MAAO,uBAAsB,MAAK;EACtC,YAAY,SAAe;AACzB,UAAM,OAAO;AACb,WAAO,eAAe,MAAM,eAAc,SAAS;AACnD,SAAK,OAAO;EACd;;AAUI,SAAU,cAAcC,IAAW;AACvC,QAAMC,KAAID,IAAG;AACb,MAAIC,IAAG;AACL,WAAOA,GAAE,KAAK,GAAG;EACnB,OAAO;AACL,WAAO;EACT;AACF;AAEA,SAAS,YAAYD,IAAwB,MAAY;AACvD,QAAM,OAAOA,IAAG,QAAQ,CAAA;AACxB,SAAO;IACL,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;;AAE5B;AAwBA,IAAM,qBAAN,MAAwB;EAAxB,cAAA;AACU,SAAA,WAAmB,CAAA;EAmD7B;;;;EA9CE,SACEE,IACA,OAAe;AAEf,QAAI,CAAC,OAAO;AACV,YAAM,MAAM,6BAA6B;IAC3C;AACA,SAAK,SAAS,KAAK,EAAE,MAAMA,IAAG,MAAY,CAAE;AAC5C,WAAO;EACT;;;;;;;EAQA,MAAM,mBAAyB;AAC7B,UAAM,WAAW,KAAK;AACtB,WAAO;MACL,OAAOA,IAAQF,IAAW;AACxB,YAAI,CAACA,IAAG;AACN,UAAAA,KAAI;YACF,MAAM,CAAC,IAAI,iBAAiB,GAAG;;QAEnC;AACA,YAAI,OAAOE,OAAM,UAAU;AACzB,gBAAM,IAAI,cACR,uBAAuB,iBAAiB,OAAO,cAC7CF,EAAC,CACF,YAAY,OAAOE,EAAC,EAAE;QAE3B;AACA,cAAM,MAAW,CAAA;AACjB,mBAAW,QAAQ,UAAU;AAC3B,gBAAM,aAAaA,GAAE,KAAK,IAAI;AAC9B,gBAAM,UAAU,KAAK,MAAM,OACzB,YACA,YAAYF,IAAG,KAAK,IAAI,CAAC;AAE3B,cAAI,KAAK,IAAI,IAAI;QACnB;AACA,eAAO;MACT;;EAEJ;;AAGF,IAAM,oBAAN,MAAuB;EAQrB,YACU,eACA,WAAiC;AADjC,SAAA,gBAAA;AACA,SAAA,YAAA;AAJF,SAAA,eAAe,oBAAI,IAAG;EAK3B;;;;EAKH,YACE,UACA,OAAe;AAOf,QAAI,CAAC,OAAO;AACV,YAAM,MAAM,6BAA6B;IAC3C;AACA,SAAK,aAAa,IAAI,UAAU,EAAE,OAAO,SAAQ,CAAE;AACnD,WAAO;EACT;;;;;;;EAQA,MACE,mBAAyB;AAEzB,UAAM,eAAe,KAAK;AAC1B,UAAM,gBAAgB,KAAK;AAC3B,UAAM,YAAY,KAAK;AACvB,WAAO;MACL,OAAOE,IAAQF,IAAW;AACxB,YAAI,CAACA,IAAG;AACN,UAAAA,KAAI;YACF,MAAM,CAAC,IAAI,iBAAiB,GAAG;;QAEnC;AACA,cAAMG,KAAID,GAAE,aAAa;AACzB,YAAIC,OAAM,QAAW;AACnB,gBAAM,IAAI,cACR,oBAAoB,iBAAiB,OAAO,cAC1CH,EAAC,CACF,IAAI,OAAO,aAAa,CAAC,EAAE;QAEhC;AACA,cAAM,MAAM,aAAa,IAAIG,EAAC;AAC9B,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,cACR,mBAAmB,iBAAiB,IAAIA,EAAC,OAAO,cAC9CH,EAAC,CACF,IAAI,OAAO,aAAa,CAAC,EAAE;QAEhC;AACA,cAAM,aAAa,IAAI,MAAM,OAAOE,EAAC;AACrC,YAAI,WAAW;AACb,gBAAM,cAAc,UAAU,OAAOA,IAAGF,EAAC;AACzC,iBAAO,EAAE,GAAG,aAAa,GAAG,WAAU;QACxC,OAAO;AACL,iBAAO;QACT;MACF;;EAEJ;;AAGI,IAAO,uBAAP,MAA2B;EAC/B,eACE,eACA,WAAoB;AAEpB,WAAO,IAAI,kBAAkC,eAAe,SAAS;EACvE;;AAMI,SAAU,sBAAmB;AACjC,SAAO,IAAI,mBAAkB;AAC/B;AAEM,SAAU,qBAAkB;AAChC,SAAO,IAAI,qBAAoB;AACjC;AAKM,SAAU,YACd,YAAoB;AAEpB,MAAI,CAAC,YAAY;AACf,UAAM,MAAM,6BAA6B;EAC3C;AACA,SAAO;IACL,OAAOE,IAAQF,IAAW;AACxB,YAAMI,OAA0B,CAAA;AAChC,UAAI,OAAOF,OAAM,UAAU;AACzB,cAAM,IAAI,cAAc,sBAAsB,cAAcF,EAAC,CAAC,EAAE;MAClE;AACA,iBAAWK,MAAKH,IAAG;AACjB,QAAAE,KAAIC,EAAC,IAAI,WAAW,OAAOH,GAAEG,EAAC,GAAG,YAAYL,IAAG,IAAIK,EAAC,GAAG,CAAC;MAC3D;AACA,aAAOD;IACT;;AAEJ;AAKM,SAAU,aAAgB,YAAoB;AAClD,MAAI,CAAC,YAAY;AACf,UAAM,MAAM,6BAA6B;EAC3C;AACA,SAAO;IACL,OAAOF,IAAQF,IAAW;AACxB,YAAM,MAAW,CAAA;AACjB,UAAI,CAAC,MAAM,QAAQE,EAAC,GAAG;AACrB,cAAM,IAAI,cAAc,qBAAqB,cAAcF,EAAC,CAAC,EAAE;MACjE;AACA,iBAAWK,MAAKH,IAAG;AACjB,YAAI,KAAK,WAAW,OAAOA,GAAEG,EAAC,GAAG,YAAYL,IAAG,IAAIK,EAAC,GAAG,CAAC,CAAC;MAC5D;AACA,aAAO;IACT;;AAEJ;AAKM,SAAU,iBAAc;AAC5B,SAAO;IACL,OAAOH,IAAQF,IAAW;AACxB,UAAI,OAAOE,OAAM,UAAU;AACzB,eAAOA;MACT;AACA,YAAM,IAAI,cACR,sBAAsB,cAAcF,EAAC,CAAC,YAAY,OAAOE,EAAC,EAAE;IAEhE;;AAEJ;AAKM,SAAU,kBAAe;AAC7B,SAAO;IACL,OAAOA,IAAQF,IAAW;AACxB,UAAI,OAAOE,OAAM,WAAW;AAC1B,eAAOA;MACT;AACA,YAAM,IAAI,cACR,uBAAuB,cAAcF,EAAC,CAAC,YAAY,OAAOE,EAAC,EAAE;IAEjE;;AAEJ;AAKM,SAAU,iBAAc;AAC5B,SAAO;IACL,OAAOA,IAAQF,IAAW;AACxB,UAAI,OAAOE,OAAM,UAAU;AACzB,eAAOA;MACT;AACA,YAAM,IAAI,cACR,sBAAsB,cAAcF,EAAC,CAAC,YAAY,OAAOE,EAAC,EAAE;IAEhE;;AAEJ;AAuCM,SAAU,cAAW;AACzB,SAAO;IACL,OAAOI,IAAQC,IAAW;AACxB,aAAOD;IACT;;AAEJ;AAKM,SAAU,oBAAsCE,IAAI;AACxD,SAAO;IACL,OAAOF,IAAQC,IAAW;AACxB,UAAID,OAAME,IAAG;AACX,eAAOF;MACT;AACA,UAAI,OAAOA,OAAM,UAAU;AACzB,cAAM,IAAI,cACR,6BAA6BE,EAAC,QAAQ,cACpCD,EAAC,CACF,YAAY,OAAOD,EAAC,EAAE;MAE3B;AACA,YAAM,IAAI,cACR,6BAA6BE,EAAC,QAAQ,cACpCD,EAAC,CACF,0BAA0BD,EAAC,GAAG;IAEnC;;AAEJ;AAqCM,SAAU,oBAAsCG,IAAI;AACxD,SAAO;IACL,OAAOC,IAAQC,IAAW;AACxB,UAAID,OAAMD,IAAG;AACX,eAAOC;MACT;AACA,YAAM,IAAI,cACR,6BAA6BD,EAAC,QAAQ,cACpCE,EAAC,CACF,aAAa,OAAOD,EAAC,EAAE;IAE5B;;AAEJ;AAEM,SAAU,cAAiB,YAAoB;AACnD,SAAO;IACL,OAAOA,IAAQC,IAAW;AACxB,UAAID,OAAM,UAAaA,OAAM,MAAM;AACjC,eAAO;MACT;AACA,aAAO,WAAW,OAAOA,IAAGC,EAAC;IAC/B;;AAEJ;AAIM,SAAU,kBACX,MAAY;AAEf,SAAO;IACL,OAAOD,IAAQC,IAAW;AACxB,iBAAW,OAAO,MAAM;AACtB,YAAI;AACF,iBAAO,IAAI,OAAOD,IAAGC,EAAC;QACxB,SAASC,IAAG;AACV;QACF;MACF;AACA,UAAI,OAAO,eAAc,GAAI;AAC3B,eAAO,MAAM,oBAAoB,IAAIF,EAAC,CAAC,EAAE;MAC3C;AACA,YAAM,IAAI,cACR,gCAAgC,cAAcC,EAAC,CAAC,EAAE;IAEtD;;AAEJ;AAEA,IAAM,IAAI,eAAe,eAAc,GAAI,eAAc,CAAE;;;ACtdpD,IAAM,eAAe;AACrB,IAAM,YAAY;AAGzB,IAAME,KAAI,IAAI,YAAY;EACxB;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;EAAY;EAAY;EAC5D;EAAY;EAAY;EAAY;CACrC;AAED,SAAS,WACPC,IACAC,IACAC,IACA,KACA,KAAW;AAEX,MAAIC,IACFC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACA,IACAC;AACF,SAAO,OAAO,IAAI;AAChB,IAAAX,KAAIF,GAAE,CAAC;AACP,IAAAG,KAAIH,GAAE,CAAC;AACP,IAAAI,KAAIJ,GAAE,CAAC;AACP,IAAAK,KAAIL,GAAE,CAAC;AACP,IAAAM,KAAIN,GAAE,CAAC;AACP,IAAAO,KAAIP,GAAE,CAAC;AACP,IAAAQ,KAAIR,GAAE,CAAC;AACP,IAAAS,KAAIT,GAAE,CAAC;AAEP,SAAKW,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,MAAAC,KAAI,MAAMD,KAAI;AACd,MAAAZ,GAAEY,EAAC,KACCV,GAAEW,EAAC,IAAI,QAAS,MAChBX,GAAEW,KAAI,CAAC,IAAI,QAAS,MACpBX,GAAEW,KAAI,CAAC,IAAI,QAAS,IACrBX,GAAEW,KAAI,CAAC,IAAI;IAChB;AAEA,SAAKD,KAAI,IAAIA,KAAI,IAAIA,MAAK;AACxB,MAAAD,KAAIX,GAAEY,KAAI,CAAC;AACX,YACID,OAAM,KAAOA,MAAM,KAAK,OACxBA,OAAM,KAAOA,MAAM,KAAK,MACzBA,OAAM;AAET,MAAAA,KAAIX,GAAEY,KAAI,EAAE;AACZ,MAAAE,OACIH,OAAM,IAAMA,MAAM,KAAK,MACvBA,OAAM,KAAOA,MAAM,KAAK,MACzBA,OAAM;AAET,MAAAX,GAAEY,EAAC,KAAM,KAAKZ,GAAEY,KAAI,CAAC,IAAK,MAAOE,MAAKd,GAAEY,KAAI,EAAE,IAAK;IACrD;AAEA,SAAKA,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACvB,cACQL,OAAM,IAAMA,MAAM,KAAK,MACzBA,OAAM,KAAOA,MAAM,KAAK,OACxBA,OAAM,KAAOA,MAAM,KAAK,QACxBA,KAAIC,KAAM,CAACD,KAAIE,MACjB,MACEC,MAAMX,GAAEa,EAAC,IAAIZ,GAAEY,EAAC,IAAK,KAAM,KAC/B;AAEF,MAAAE,QACMX,OAAM,IAAMA,MAAM,KAAK,MACvBA,OAAM,KAAOA,MAAM,KAAK,OACxBA,OAAM,KAAOA,MAAM,KAAK,QACxBA,KAAIC,KAAMD,KAAIE,KAAMD,KAAIC,MAC5B;AAEF,MAAAK,KAAID;AACJ,MAAAA,KAAID;AACJ,MAAAA,KAAID;AACJ,MAAAA,KAAKD,KAAI,KAAM;AACf,MAAAA,KAAID;AACJ,MAAAA,KAAID;AACJ,MAAAA,KAAID;AACJ,MAAAA,KAAK,KAAKW,MAAM;IAClB;AAEA,IAAAb,GAAE,CAAC,KAAKE;AACR,IAAAF,GAAE,CAAC,KAAKG;AACR,IAAAH,GAAE,CAAC,KAAKI;AACR,IAAAJ,GAAE,CAAC,KAAKK;AACR,IAAAL,GAAE,CAAC,KAAKM;AACR,IAAAN,GAAE,CAAC,KAAKO;AACR,IAAAP,GAAE,CAAC,KAAKQ;AACR,IAAAR,GAAE,CAAC,KAAKS;AAER,WAAO;AACP,WAAO;EACT;AACA,SAAO;AACT;AAGM,IAAO,aAAP,MAAiB;EAarB,cAAA;AAZA,SAAA,eAAuB;AACvB,SAAA,YAAoB;AAGZ,SAAA,QAAoB,IAAI,WAAW,CAAC;AACpC,SAAA,OAAmB,IAAI,WAAW,EAAE;AACpC,SAAA,SAAqB,IAAI,WAAW,GAAG;AACvC,SAAA,eAAe;AACf,SAAA,cAAc;AAEtB,SAAA,WAAW;AAGT,SAAK,MAAK;EACZ;;;EAIA,QAAK;AACH,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,eAAe;AACpB,SAAK,cAAc;AACnB,SAAK,WAAW;AAChB,WAAO;EACT;;EAGA,QAAK;AACH,aAASE,KAAI,GAAGA,KAAI,KAAK,OAAO,QAAQA,MAAK;AAC3C,WAAK,OAAOA,EAAC,IAAI;IACnB;AACA,aAASA,KAAI,GAAGA,KAAI,KAAK,KAAK,QAAQA,MAAK;AACzC,WAAK,KAAKA,EAAC,IAAI;IACjB;AACA,SAAK,MAAK;EACZ;;;;;;;;EASA,OAAO,MAAkB,aAAqB,KAAK,QAAM;AACvD,QAAI,KAAK,UAAU;AACjB,YAAM,IAAI,MAAM,iDAAiD;IACnE;AACA,QAAI,UAAU;AACd,SAAK,eAAe;AACpB,QAAI,KAAK,eAAe,GAAG;AACzB,aAAO,KAAK,eAAe,MAAM,aAAa,GAAG;AAC/C,aAAK,OAAO,KAAK,cAAc,IAAI,KAAK,SAAS;AACjD;MACF;AACA,UAAI,KAAK,iBAAiB,IAAI;AAC5B,mBAAW,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,EAAE;AACpD,aAAK,eAAe;MACtB;IACF;AACA,QAAI,cAAc,IAAI;AACpB,gBAAU,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,SAAS,UAAU;AACrE,oBAAc;IAChB;AACA,WAAO,aAAa,GAAG;AACrB,WAAK,OAAO,KAAK,cAAc,IAAI,KAAK,SAAS;AACjD;IACF;AACA,WAAO;EACT;;;;EAKA,OAAO,KAAe;AACpB,QAAI,CAAC,KAAK,UAAU;AAClB,YAAM,cAAc,KAAK;AACzB,YAAM,OAAO,KAAK;AAClB,YAAM,WAAY,cAAc,YAAc;AAC9C,YAAM,WAAW,eAAe;AAChC,YAAM,YAAY,cAAc,KAAK,KAAK,KAAK;AAE/C,WAAK,OAAO,IAAI,IAAI;AACpB,eAASA,KAAI,OAAO,GAAGA,KAAI,YAAY,GAAGA,MAAK;AAC7C,aAAK,OAAOA,EAAC,IAAI;MACnB;AACA,WAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,WAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,WAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,WAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,WAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,WAAK,OAAO,YAAY,CAAC,IAAK,aAAa,KAAM;AACjD,WAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAChD,WAAK,OAAO,YAAY,CAAC,IAAK,aAAa,IAAK;AAEhD,iBAAW,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,SAAS;AAE3D,WAAK,WAAW;IAClB;AAEA,aAASA,KAAI,GAAGA,KAAI,GAAGA,MAAK;AAC1B,UAAIA,KAAI,IAAI,CAAC,IAAK,KAAK,MAAMA,EAAC,MAAM,KAAM;AAC1C,UAAIA,KAAI,IAAI,CAAC,IAAK,KAAK,MAAMA,EAAC,MAAM,KAAM;AAC1C,UAAIA,KAAI,IAAI,CAAC,IAAK,KAAK,MAAMA,EAAC,MAAM,IAAK;AACzC,UAAIA,KAAI,IAAI,CAAC,IAAK,KAAK,MAAMA,EAAC,MAAM,IAAK;IAC3C;AAEA,WAAO;EACT;;EAGA,SAAM;AACJ,UAAM,MAAM,IAAI,WAAW,KAAK,YAAY;AAC5C,SAAK,OAAO,GAAG;AACf,WAAO;EACT;;EAGA,WAAW,KAAgB;AACzB,aAASA,KAAI,GAAGA,KAAI,KAAK,MAAM,QAAQA,MAAK;AAC1C,UAAIA,EAAC,IAAI,KAAK,MAAMA,EAAC;IACvB;EACF;;EAGA,cAAc,MAAmB,aAAmB;AAClD,aAASA,KAAI,GAAGA,KAAI,KAAK,MAAM,QAAQA,MAAK;AAC1C,WAAK,MAAMA,EAAC,IAAI,KAAKA,EAAC;IACxB;AACA,SAAK,cAAc;AACnB,SAAK,WAAW;AAChB,SAAK,eAAe;EACtB;;AA0FI,SAAU,OAAO,MAAgB;AACrC,QAAMG,KAAI,IAAI,WAAU,EAAG,OAAO,IAAI;AACtC,QAAM,SAASA,GAAE,OAAM;AACvB,EAAAA,GAAE,MAAK;AACP,SAAO;AACT;;;ACzVM,SAAU,OAAO,MAAgB;AACrC,SAAY,KAAK,IAAI;AACvB;AAEM,SAAU,KACd,QACAC,YACA,KACA,SAAmB;AAEnB,MAAI,IAAI,aAAaA,YAAW;AAC9B,UAAM,OAAO,GAAG;EAClB;AACA,MAAI,IAAI,aAAaA,YAAW;AAC9B,UAAMC,KAAI;AACV,UAAM,IAAI,WAAWD,UAAS;AAC9B,QAAI,IAAIC,IAAG,CAAC;EACd;AACA,QAAM,MAAM,IAAI,WAAWD,UAAS;AACpC,QAAM,MAAM,IAAI,WAAWA,UAAS;AACpC,WAASE,KAAI,GAAGA,KAAIF,YAAWE,MAAK;AAClC,QAAIA,EAAC,IAAI,IAAIA,EAAC,IAAI;AAClB,QAAIA,EAAC,IAAI,IAAIA,EAAC,IAAI;EACpB;AACA,QAAM,KAAK,IAAI,WAAWF,aAAY,QAAQ,UAAU;AACxD,KAAG,IAAI,KAAK,CAAC;AACb,KAAG,IAAI,SAASA,UAAS;AACzB,QAAM,KAAK,OAAO,EAAE;AACpB,QAAMG,MAAK,IAAI,WAAWH,aAAY,GAAG,MAAM;AAC/C,EAAAG,IAAG,IAAI,KAAK,CAAC;AACb,EAAAA,IAAG,IAAI,IAAIH,UAAS;AACpB,SAAO,OAAOG,GAAE;AAClB;AAEM,SAAU,WAAW,KAAiB,SAAmB;AAC7D,SAAO,KAAK,QAAQ,KAAK,KAAK,OAAO;AACvC;AAEM,SAAU,WAAW,KAAiB,SAAmB;AAC7D,SAAO,KAAK,QAAQ,IAAI,KAAK,OAAO;AACtC;;;AClCA,yBAAmB;;;ACInB,IAAM,sBAAqC,OAAO,qBAAqB;AA2CjE,IAAW;CAAjB,SAAiBC,wBAAqB;AACpC,WAAgBC,OAAG;AACjB,UAAM,SAAS,aAAa,IAAG;AAC/B,WAAO,aAAa,mBAAmB,MAAM;EAC/C;AAHgB,EAAAD,uBAAA,MAAGC;AAKnB,WAAgB,MAAMC,IAAwB;AAC5C,WAAO;MACL,KAAKA,GAAE;;EAEX;AAJgB,EAAAF,uBAAA,QAAK;AAMrB,WAAgB,YAAYG,IAAS;AACnC,WAAO;MACL,KAAK,KAAK,MAAMA,EAAC;MACjB,QAAQ,KAAK,OAAOA,KAAI,KAAK,MAAMA,EAAC,KAAK,MAAO,GAAI;;EAExD;AALgB,EAAAH,uBAAA,cAAW;AAO3B,WAAgB,iBAAiB,IAAU;AACzC,WAAO;MACL,KAAK,KAAK,MAAM,KAAK,GAAI;MACzB,QAAQ,KAAK,OAAO,KAAK,KAAK,MAAM,KAAK,GAAI,IAAI,OAAQ,GAAI;;EAEjE;AALgB,EAAAA,uBAAA,mBAAgB;AAMlC,GAzBiB,0BAAA,wBAAqB,CAAA,EAAA;AA2BhC,IAAW;CAAjB,SAAiBI,yBAAsB;AACrC,WAAgBH,OAAG;AACjB,WAAO,aAAa,oBAAoB,aAAa,IAAG,CAAE;EAC5D;AAFgB,EAAAG,wBAAA,MAAGH;AAInB,WAAgB,OAAI;AAClB,WAAO;MACL,KAAK;;EAET;AAJgB,EAAAG,wBAAA,OAAI;AAMpB,WAAgB,QAAK;AACnB,WAAO;MACL,KAAK;;EAET;AAJgB,EAAAA,wBAAA,QAAK;AAMrB,WAAgB,QAAQF,IAAyB;AAC/C,WAAOA,GAAE,QAAQ;EACnB;AAFgB,EAAAE,wBAAA,UAAO;AAIvB,WAAgB,YAAYD,IAAS;AACnC,WAAO;MACL,KAAKA;;EAET;AAJgB,EAAAC,wBAAA,cAAW;AAM3B,WAAgB,IACd,IACAC,KAA0B;AAE1B,QAAI,GAAG,QAAQ,SAAS;AACtB,aAAO,EAAE,KAAKA,IAAG,IAAG;IACtB;AACA,QAAIA,IAAG,QAAQ,SAAS;AACtB,aAAO,EAAE,KAAK,GAAG,IAAG;IACtB;AACA,WAAO,EAAE,KAAK,KAAK,IAAI,GAAG,KAAKA,IAAG,GAAG,EAAC;EACxC;AAXgB,EAAAD,wBAAA,MAAG;AAYnB,WAAgB,IACd,IACAC,KAA0B;AAE1B,QAAI,GAAG,QAAQ,WAAWA,IAAG,QAAQ,SAAS;AAC5C,aAAO,EAAE,KAAK,QAAO;IACvB;AACA,WAAO,EAAE,KAAK,KAAK,IAAI,GAAG,KAAKA,IAAG,GAAG,EAAC;EACxC;AARgB,EAAAD,wBAAA,MAAG;AASrB,GAhDiB,2BAAA,yBAAsB,CAAA,EAAA;AAgEvC,IAAI,YAAY;AAWV,IAAW;CAAjB,SAAiBE,WAAQ;AACvB,WAAgB,eAAeC,IAAW;AACxC,QAAIA,GAAE,SAAS,WAAW;AACxB,aAAO,OAAO;IAChB;AACA,WAAOA,GAAE;EACX;AALgB,EAAAD,UAAA,iBAAc;AAM9B,WAAgB,aACd,UACAE,OAAM,aAAa,IAAG,GAAE;AAExB,QAAI,SAAS,SAAS,SAAS;AAC7B,aAAO,EAAE,MAAM,UAAS;IAC1B;AACA,QAAIA,KAAI,SAAS,SAAS;AACxB,YAAM,MAAM,4BAA4B;IAC1C;AACA,QAAI,SAAS,OAAOA,KAAI,MAAM;AAC5B,aAAO,EAAE,MAAM,EAAC;IAClB;AACA,WAAO,EAAE,MAAM,SAAS,OAAOA,KAAI,KAAI;EACzC;AAdgB,EAAAF,UAAA,eAAY;AAgB5B,WAAgB,iBAAiBG,IAAS;AACxC,QAAI,MAAM;AACV,QAAI,aAAa;AACjB,QAAI,aAAa;AACjB,aAASC,KAAI,GAAGA,KAAID,GAAE,QAAQC,MAAK;AACjC,YAAM,KAAKD,GAAE,WAAWC,EAAC;AACzB,UAAI,MAAM,IAAI,WAAW,CAAC,KAAK,MAAM,IAAI,WAAW,CAAC,GAAG;AACtD,YAAI,CAAC,YAAY;AACf,gBAAM,MAAM,qCAAqC;QACnD;AACA,sBAAcD,GAAEC,EAAC;AACjB;MACF;AACA,UAAID,GAAEC,EAAC,KAAK,KAAK;AACf,YAAI,cAAc,IAAI;AACpB,uBAAa;QACf;AACA;MACF;AAEA,UAAI,cAAc,IAAI;AACpB,cAAM,MAAM,kCAAkC;MAChD;AAEA,UAAID,GAAEC,EAAC,MAAM,KAAK;AAChB,eAAO,MAAO,OAAO,SAAS,YAAY,EAAE;MAC9C,WAAWD,GAAEC,EAAC,MAAM,KAAK;AACvB,eAAO,KAAK,MAAO,OAAO,SAAS,YAAY,EAAE;MACnD,WAAWD,GAAEC,EAAC,MAAM,KAAK;AACvB,eAAO,KAAK,KAAK,MAAO,OAAO,SAAS,YAAY,EAAE;MACxD,WAAWD,GAAEC,EAAC,MAAM,KAAK;AACvB,eAAO,KAAK,KAAK,KAAK,MAAO,OAAO,SAAS,YAAY,EAAE;MAC7D,OAAO;AACL,cAAM,MAAM,oCAAoC;MAClD;AACA,mBAAa;AACb,mBAAa;IACf;AACA,WAAO;MACL,MAAM;;EAEV;AAzCgB,EAAAJ,UAAA,mBAAgB;AA+ChC,WAAgB,IAAI,IAAcK,KAAY;AAC5C,QAAI,GAAG,SAAS,WAAW;AACzB,UAAIA,IAAG,SAAS,WAAW;AACzB,eAAO;MACT;AACA,aAAO;IACT;AACA,QAAIA,IAAG,SAAS,WAAW;AACzB,aAAO;IACT;AACA,QAAI,GAAG,QAAQA,IAAG,MAAM;AACtB,aAAO;IACT;AACA,QAAI,GAAG,OAAOA,IAAG,MAAM;AACrB,aAAO;IACT;AACA,WAAO;EACT;AAjBgB,EAAAL,UAAA,MAAG;AAmBnB,WAAgB,IAAI,IAAcK,KAAY;AAC5C,WAAO,YAAY,IAAIA,GAAE;EAC3B;AAFgB,EAAAL,UAAA,MAAG;AAInB,WAAgB,IAAI,IAAcK,KAAY;AAC5C,WAAO,YAAY,IAAIA,GAAE;EAC3B;AAFgB,EAAAL,UAAA,MAAG;AAInB,WAAgB,SAAS,IAAcM,IAAS;AAC9C,WAAO,YAAY,IAAIA,EAAC;EAC1B;AAFgB,EAAAN,UAAA,WAAQ;AAIxB,WAAgB,eAAeC,IAAW;AACxC,QAAI,OAAOA,GAAE,SAAS,UAAU;AAC9B,YAAM,MAAM,mBAAmB;IACjC;AACA,WAAO,KAAK,KAAKA,GAAE,OAAO,MAAO,KAAK,KAAK,KAAK,GAAG;EACrD;AALgB,EAAAD,UAAA,iBAAc;AAO9B,WAAgB,SAAS,MAOxB;AACC,QAAI,OAAO;AACX,aAAS,KAAK,WAAW,KAAK;AAC9B,aAAS,KAAK,WAAW,KAAK;AAC9B,aAAS,KAAK,SAAS,KAAK;AAC5B,aAAS,KAAK,QAAQ,KAAK;AAC3B,aAAS,KAAK,UAAU,KAAK;AAC7B,aAAS,KAAK,SAAS,KAAK;AAC5B,WAAO,EAAE,KAAI;EACf;AAhBgB,EAAAA,UAAA,WAAQ;AAkBxB,WAAgB,aAAU;AACxB,WAAO,EAAE,MAAM,UAAS;EAC1B;AAFgB,EAAAA,UAAA,aAAU;AAI1B,WAAgB,UAAO;AACrB,WAAO,EAAE,MAAM,EAAC;EAClB;AAFgB,EAAAA,UAAA,UAAO;AAIvB,WAAgB,0BACdC,IAAwB;AAExB,QAAIA,GAAE,SAAS,WAAW;AACxB,aAAO;QACL,MAAM;;IAEV;AACA,WAAO;MACL,MAAM,KAAK,MAAMA,GAAE,OAAO,GAAI;;EAElC;AAXgB,EAAAD,UAAA,4BAAyB;AAazC,WAAgB,wBAAwBC,IAAW;AACjD,QAAIA,GAAE,SAAS,WAAW;AACxB,aAAO;QACL,MAAM;;IAEV;AACA,WAAO;MACL,MAAMA,GAAE,OAAO;;EAEnB;AATgB,EAAAD,UAAA,0BAAuB;AAWvC,WAAgB,iBAAiB,IAAU;AACzC,WAAO;MACL,MAAM;;EAEV;AAJgB,EAAAA,UAAA,mBAAgB;AAMhC,WAAgB,MAAM,MAIrB;AACC,WAAO,YAAY,YAAY,KAAK,OAAO,KAAK,KAAK,GAAG,KAAK,KAAK;EACpE;AANgB,EAAAA,UAAA,QAAK;AAOvB,GA3KiB,aAAA,WAAQ,CAAA,EAAA;AA6KnB,IAAW;CAAjB,SAAiBO,eAAY;AAC3B,WAAgB,gBAAa;AAC3B,YAAO,oBAAI,KAAI,GAAG,QAAO;EAC3B;AAFgB,EAAAA,cAAA,gBAAa;AAI7B,WAAgB,kBAAe;AAC7B,WAAO,OAAO;EAChB;AAFgB,EAAAA,cAAA,kBAAe;AAI/B,WAAgBL,OAAG;AACjB,WAAO;MACL,OAAM,oBAAI,KAAI,GAAG,QAAO,IAAK;MAC7B,CAAC,mBAAmB,GAAG;;EAE3B;AALgB,EAAAK,cAAA,MAAGL;AAOnB,WAAgB,QAAK;AACnB,WAAO;MACL,MAAM;MACN,CAAC,mBAAmB,GAAG;;EAE3B;AALgB,EAAAK,cAAA,QAAK;AAOrB,WAAgB,iBAAiB,IAAU;AACzC,WAAO;MACL,MAAM;MACN,CAAC,mBAAmB,GAAG;;EAE3B;AALgB,EAAAA,cAAA,mBAAgB;AAOhC,WAAgB,IAAI,IAAkBC,KAAgB;AACpD,QAAI,GAAG,SAAS,SAAS;AACvB,UAAIA,IAAG,SAAS,SAAS;AACvB,eAAO;MACT;AACA,aAAO;IACT;AACA,QAAIA,IAAG,SAAS,SAAS;AACvB,aAAO;IACT;AACA,QAAI,GAAG,QAAQA,IAAG,MAAM;AACtB,aAAO;IACT;AACA,QAAI,GAAG,OAAOA,IAAG,MAAM;AACrB,aAAO;IACT;AACA,WAAO;EACT;AAjBgB,EAAAD,cAAA,MAAG;AAmBnB,WAAgB,IAAI,IAAkBC,KAAgB;AACpD,QAAI,GAAG,SAAS,SAAS;AACvB,aAAO,EAAE,MAAMA,IAAG,MAAM,CAAC,mBAAmB,GAAG,KAAI;IACrD;AACA,QAAIA,IAAG,SAAS,SAAS;AACvB,aAAO,EAAE,MAAMA,IAAG,MAAM,CAAC,mBAAmB,GAAG,KAAI;IACrD;AACA,WAAO,EAAE,MAAM,KAAK,IAAI,GAAG,MAAMA,IAAG,IAAI,GAAG,CAAC,mBAAmB,GAAG,KAAI;EACxE;AARgB,EAAAD,cAAA,MAAG;AAUnB,WAAgB,IAAI,IAAkBC,KAAgB;AACpD,QAAI,GAAG,SAAS,SAAS;AACvB,aAAO,EAAE,MAAM,SAAS,CAAC,mBAAmB,GAAG,KAAI;IACrD;AACA,QAAIA,IAAG,SAAS,SAAS;AACvB,aAAO,EAAE,MAAM,SAAS,CAAC,mBAAmB,GAAG,KAAI;IACrD;AACA,WAAO,EAAE,MAAM,KAAK,IAAI,GAAG,MAAMA,IAAG,IAAI,GAAG,CAAC,mBAAmB,GAAG,KAAI;EACxE;AARgB,EAAAD,cAAA,MAAG;AAUnB,WAAgBE,YAAW,IAAkBD,KAAgB;AAC3D,QAAI,GAAG,SAAS,SAAS;AACvB,aAAO,EAAE,MAAM,UAAS;IAC1B;AACA,QAAIA,IAAG,SAAS,SAAS;AACvB,aAAO,EAAE,MAAM,UAAS;IAC1B;AACA,WAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAOA,IAAG,IAAI,EAAC;EAC5C;AARgB,EAAAD,cAAA,aAAUE;AAU1B,WAAgB,UAAUC,IAAe;AACvC,WAAO,IAAIA,IAAGR,KAAG,CAAE,KAAK;EAC1B;AAFgB,EAAAK,cAAA,YAAS;AAIzB,WAAgB,QAAQG,IAAe;AACrC,WAAOA,GAAE,SAAS;EACpB;AAFgB,EAAAH,cAAA,UAAO;AAIvB,WAAgB,sBACdG,IAAyB;AAEzB,QAAIA,GAAE,QAAQ,SAAS;AACrB,aAAO,EAAE,MAAM,SAAS,CAAC,mBAAmB,GAAG,KAAI;IACrD;AACA,WAAO;MACL,MAAMA,GAAE,MAAM;MACd,CAAC,mBAAmB,GAAG;;EAE3B;AAVgB,EAAAH,cAAA,wBAAqB;AAYrC,WAAgB,YAAY,SAAe;AACzC,WAAO;MACL,MAAM;MACN,CAAC,mBAAmB,GAAG;;EAE3B;AALgB,EAAAA,cAAA,cAAW;AAO3B,WAAgB,qBAAqBG,IAAwB;AAC3D,QAAIA,GAAE,QAAQ,SAAS;AACrB,aAAO,EAAE,MAAM,SAAS,CAAC,mBAAmB,GAAG,KAAI;IACrD;AACA,UAAM,WAAWA,GAAE,UAAU;AAC7B,WAAO;MACL,MAAMA,GAAE,MAAM,MAAO,KAAK,MAAM,WAAW,GAAI;MAC/C,CAAC,mBAAmB,GAAG;;EAE3B;AATgB,EAAAH,cAAA,uBAAoB;AAWpC,WAAgB,UAAUI,KAAgB;AACxC,QAAIA,IAAG,SAAS,SAAS;AACvB,aAAO,OAAO;IAChB;AACA,WAAOA,IAAG;EACZ;AALgB,EAAAJ,cAAA,YAAS;AAOzB,WAAgB,mBAAmBI,KAAgB;AACjD,QAAIA,IAAG,QAAQ,SAAS;AACtB,aAAO;QACL,KAAK;;IAET;AACA,UAAM,MAAM,KAAK,MAAMA,IAAG,OAAO,GAAI;AACrC,UAAM,SAAS,KAAK,MAAM,OAAQA,IAAG,OAAO,MAAM,IAAK;AACvD,WAAO;MACL;MACA;;EAEJ;AAZgB,EAAAJ,cAAA,qBAAkB;AAclC,WAAgB,oBACdI,KAAgB;AAEhB,QAAIA,IAAG,SAAS,SAAS;AACvB,aAAO,EAAE,KAAK,QAAO;IACvB;AACA,WAAO;MACL,KAAK,KAAK,MAAMA,IAAG,OAAO,GAAI;;EAElC;AATgB,EAAAJ,cAAA,sBAAmB;AAWnC,WAAgB,UACdG,IACA,OACA,KAAiB;AAEjB,QAAI,IAAIA,IAAG,KAAK,IAAI,GAAG;AACrB,aAAO;IACT;AACA,QAAI,IAAIA,IAAG,GAAG,IAAI,GAAG;AACnB,aAAO;IACT;AACA,WAAO;EACT;AAZgB,EAAAH,cAAA,YAAS;AAczB,WAAgB,YAAYG,IAAe;AACzC,QAAIA,GAAE,SAAS,SAAS;AACtB,aAAO;IACT,OAAO;AACL,aAAO,IAAI,KAAKA,GAAE,IAAI,EAAE,YAAW;IACrC;EACF;AANgB,EAAAH,cAAA,cAAW;AAQ3B,WAAgB,YAAY,IAAkBN,IAAW;AACvD,QAAI,GAAG,SAAS,WAAWA,GAAE,SAAS,WAAW;AAC/C,aAAO,EAAE,MAAM,SAAS,CAAC,mBAAmB,GAAG,KAAI;IACrD;AACA,WAAO,EAAE,MAAM,GAAG,OAAOA,GAAE,MAAM,CAAC,mBAAmB,GAAG,KAAI;EAC9D;AALgB,EAAAM,cAAA,cAAW;AAa3B,WAAgB,UAAU,IAAgB;AACxC,QAAI,GAAG,SAAS,SAAS;AACvB,aAAO,SAAS,WAAU;IAC5B;AACA,UAAM,WAAWL,KAAG;AACpB,QAAI,SAAS,SAAS,SAAS;AAC7B,YAAM,MAAM,oBAAoB;IAClC;AACA,WAAO,SAAS,iBAAiB,KAAK,IAAI,GAAG,GAAG,OAAO,SAAS,IAAI,CAAC;EACvE;AATgB,EAAAK,cAAA,YAAS;AAWzB,WAAgB,kBACd,IACAN,IAAW;AAEX,QAAI,GAAG,SAAS,SAAS;AACvB,aAAO,EAAE,MAAM,SAAS,CAAC,mBAAmB,GAAG,KAAI;IACrD;AACA,QAAIA,GAAE,SAAS,WAAW;AACxB,aAAO,EAAE,MAAM,GAAG,CAAC,mBAAmB,GAAG,KAAI;IAC/C;AACA,WAAO,EAAE,MAAM,KAAK,IAAI,GAAG,GAAG,OAAOA,GAAE,IAAI,GAAG,CAAC,mBAAmB,GAAG,KAAI;EAC3E;AAXgB,EAAAM,cAAA,oBAAiB;AAajC,WAAgB,UAAUG,IAAe;AACvC,QAAIA,GAAE,SAAS,SAAS;AACtB,aAAO;IACT;AACA,WAAO,IAAI,KAAKA,GAAE,IAAI,EAAE,YAAW;EACrC;AALgB,EAAAH,cAAA,YAAS;AAM3B,GAtNiB,iBAAA,eAAY,CAAA,EAAA;AAwN7B,IAAM,UAAU;AAChB,IAAM,UAAU,UAAU;AAC1B,IAAM,QAAQ,UAAU;AACxB,IAAM,OAAO,QAAQ;AACrB,IAAM,SAAS,OAAO;AACtB,IAAM,QAAQ,OAAO;AAEf,SAAU,YAAY,IAAcF,KAAY;AACpD,MAAI,GAAG,SAAS,WAAW;AACzB,WAAO,EAAE,MAAMA,IAAG,KAAI;EACxB;AACA,MAAIA,IAAG,SAAS,WAAW;AACzB,WAAO,EAAE,MAAM,GAAG,KAAI;EACxB;AACA,SAAO,EAAE,MAAM,KAAK,IAAI,GAAG,MAAMA,IAAG,IAAI,EAAC;AAC3C;AAEM,SAAU,YAAY,IAAcA,KAAY;AACpD,MAAI,GAAG,SAAS,WAAW;AACzB,WAAO,EAAE,MAAM,UAAS;EAC1B;AACA,MAAIA,IAAG,SAAS,WAAW;AACzB,WAAO,EAAE,MAAM,UAAS;EAC1B;AACA,SAAO,EAAE,MAAM,KAAK,IAAI,GAAG,MAAMA,IAAG,IAAI,EAAC;AAC3C;AAEM,SAAU,YAAYJ,IAAaK,IAAS;AAChD,MAAIL,GAAE,SAAS,WAAW;AACxB,WAAO,EAAE,MAAM,UAAS;EAC1B;AACA,SAAO,EAAE,MAAM,KAAK,MAAMA,GAAE,OAAOK,EAAC,EAAC;AACvC;AASO,IAAM,uBAA4C;EACvD,OAAOM,IAAQC,IAAW;AACxB,QAAID,OAAM,QAAW;AACnB,YAAM,MAAM,+CAA+C,cAAcC,EAAC,CAAC,EAAE;IAC/E;AACA,UAAM,OAAOD,GAAE;AACf,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,SAAS,SAAS;AACpB,eAAO,EAAE,MAAM,SAAS,CAAC,mBAAmB,GAAG,KAAI;MACrD;IACF,WAAW,OAAO,SAAS,UAAU;AACnC,aAAO,EAAE,MAAM,CAAC,mBAAmB,GAAG,KAAI;IAC5C;AACA,UAAM,MAAM,yBAAyB,cAAcC,EAAC,CAAC,EAAE;EACzD;;AAGK,IAAM,oBAAmD;EAC9D,OAAOD,IAAQC,IAAW;AAExB,QAAID,OAAM,QAAW;AACnB,YAAM,MAAM,2CAA2C,cAAcC,EAAC,CAAC,EAAE;IAC3E;AACA,UAAM,OAAOD,GAAE;AACf,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,SAAS,SAAS;AACpB,eAAO,EAAE,KAAK,QAAO;MACvB;IACF,WAAW,OAAO,SAAS,UAAU;AACnC,aAAO,EAAE,KAAK,KAAK,MAAM,OAAO,GAAI,EAAC;IACvC;AACA,UAAM,MAAMA,GAAE;AACd,QAAI,OAAO,QAAQ,UAAU;AAC3B,UAAI,QAAQ,SAAS;AACnB,eAAO,EAAE,KAAK,QAAO;MACvB;AACA,YAAM,MAAM,yBAAyB,cAAcC,EAAC,CAAC,EAAE;IACzD;AACA,QAAI,OAAO,QAAQ,UAAU;AAC3B,aAAO,EAAE,IAAG;IACd;AACA,UAAM,MAAM,kCAAkC,cAAcA,EAAC,CAAC,EAAE;EAClE;;AAiBK,IAAM,mBAAiD;EAC5D,OAAOC,IAAQC,IAAW;AACxB,UAAM,OAAOD,GAAE;AACf,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,SAAS,WAAW;AACtB,eAAO,EAAE,MAAM,UAAS;MAC1B;AACA,YAAM,MAAM,wBAAwB,cAAcC,EAAC,CAAC,EAAE;IACxD;AACA,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,EAAE,KAAI;IACf;AACA,UAAM,MAAM,wBAAwB,cAAcA,EAAC,CAAC,EAAE;EACxD;;;;ACwUF,IAAY;CAAZ,SAAYC,eAAY;AACtB,EAAAA,cAAA,KAAA,IAAA;AACA,EAAAA,cAAA,eAAA,IAAA;AACF,GAHY,iBAAA,eAAY,CAAA,EAAA;CAKxB,SAAiBA,eAAY;AAC3B,WAAgB,SAASC,IAAe;AACtC,YAAQA,IAAG;MACT,KAAKD,cAAa;AAChB,eAAO;MACT,KAAKA,cAAa;AAChB,eAAO;IACX;EACF;AAPgB,EAAAA,cAAA,WAAQ;AAQ1B,GATiB,iBAAA,eAAY,CAAA,EAAA;AA0QvB,IAAW;CAAjB,SAAiBE,qBAAkB;AACjC,WAAgB,IACd,IACAC,KAAsB;AAEtB,QAAI,GAAG,SAASA,IAAG,QAAQ;AACzB,aAAO;IACT,WAAW,GAAG,SAASA,IAAG,QAAQ;AAChC,aAAO;IACT,WACE,GAAG,WAAW,aAAa,OAC3BA,IAAG,WAAW,aAAa,KAC3B;AACA,WAAK,GAAG,YAAY,MAAMA,IAAG,YAAY,IAAI;AAC3C,eAAO;MACT,YAAY,GAAG,YAAY,MAAMA,IAAG,YAAY,IAAI;AAClD,eAAO;MACT;AACA,aAAO,OAAO,GAAG,gBAAgBA,IAAG,cAAc;IACpD,WACE,GAAG,WAAW,aAAa,iBAC3BA,IAAG,WAAW,aAAa,eAC3B;AACA,WAAK,GAAG,YAAY,MAAMA,IAAG,YAAY,IAAI;AAC3C,eAAO;MACT,YAAY,GAAG,YAAY,MAAMA,IAAG,YAAY,IAAI;AAClD,eAAO;MACT;AACA,aAAO,OAAO,GAAG,eAAeA,IAAG,aAAa;IAClD,OAAO;AACL,YAAM,MAAM,oBAAoB;IAClC;EACF;AA/BgB,EAAAD,oBAAA,MAAG;AAgCrB,GAjCiB,uBAAA,qBAAkB,CAAA,EAAA;AAyG5B,IAAM,mBAAmB,MAC9B,oBAAmB,EAChB,SAAS,WAAW,cAAc,eAAc,CAAE,CAAC,EACnD,SAAS,uBAAuB,cAAc,eAAc,CAAE,CAAC,EAC/D,SAAS,iBAAiB,cAAc,eAAc,CAAE,CAAC,EACzD,SAAS,mBAAmB,cAAc,eAAc,CAAE,CAAC,EAC3D,SAAS,YAAY,cAAc,eAAc,CAAE,CAAC,EACpD,SAAS,UAAU,cAAc,eAAc,CAAE,CAAC,EAClD,SAAS,aAAa,cAAc,eAAc,CAAE,CAAC,EACrD,SAAS,QAAQ,cAAc,eAAc,CAAE,CAAC,EAChD,SAAS,iBAAiB,cAAc,eAAc,CAAE,CAAC,EACzD,SAAS,iBAAiB,cAAc,aAAa,eAAc,CAAE,CAAC,CAAC,EACvE,MAAM,UAAU;AASd,IAAM,kCACX,MAAsC,YAAY,eAAc,CAAE;AA6F7D,IAAM,0BAA6C,YAAW;AAgPrE,IAAY;CAAZ,SAAYE,0BAAuB;AAIjC,EAAAA,yBAAAA,yBAAA,KAAA,IAAA,EAAA,IAAA;AACF,GALY,4BAAA,0BAAuB,CAAA,EAAA;AAOnC,IAAY;CAAZ,SAAYC,0BAAuB;AAIjC,EAAAA,yBAAAA,yBAAA,IAAA,IAAA,CAAA,IAAA;AACF,GALY,4BAAA,0BAAuB,CAAA,EAAA;;;AF5pD7B,SAAU,eAAeC,IAAS;AACtC,SAAY,YAAYA,EAAC;AAC3B;AAQO,IAAM,YAAY;AA4CzB,IAAI;AAEJ,IAAI,WAAW;AAEb,SAAO,WAAW;AACpB;AAEA,IAAM,WAAW;AAEjB,IAAM,gBAAN,MAAM,uBAAsB,MAAK;EAC/B,cAAA;AACE,UAAM,gBAAgB;AACtB,WAAO,eAAe,MAAM,eAAc,SAAS;EACrD;;AAGF,SAAS,SAAS,KAAW;AAC3B,MAAIC,KAAI;AACR,UAAQ,KAAK;IACX,KAAK;IACL,KAAK;AACH,MAAAA,KAAI;AACJ;IACF,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;AACH,MAAAA,KAAI;AACJ;IACF,KAAK;IACL,KAAK;AACH,MAAAA,KAAI;EACR;AAEA,MAAIA,MAAK,OAAOA,MAAK,KAAK;AACxB,WAAOA,GAAE,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC;EAC3C;AAEA,MAAIA,MAAK,OAAOA,MAAK;AAAK,IAAAA,KAAIA,GAAE,YAAW;AAC3C,MAAI,MAAM;AACV,MAAIA,MAAK,OAAOA,MAAK,KAAK;AACxB,QAAI,MAAMA;AAAG;AACb,QAAI,MAAMA;AAAG;AACb,QAAI,MAAMA;AAAG;AACb,QAAI,MAAMA;AAAG;AACb,WAAOA,GAAE,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK;EACpD;AACA,QAAM,IAAI,cAAa;AACzB;AAEM,SAAU,YAAY,MAAiB;AAC3C,MAAI,MAAM;AACR,WAAO,KAAK,YAAY,IAAI;EAC9B;AACA,QAAM,YAAY,IAAI,WAAW,IAAI;AACrC,MAAI,KAAK;AACT,QAAM,OAAO,KAAK;AAClB,MAAI,SAAS;AACb,MAAI,UAAU;AACd,MAAI,MAAM;AACV,SAAO,MAAM,QAAQ,UAAU,GAAG;AAChC,QAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,YAAMC,KAAI,UAAU,KAAK;AACzB,eAAU,UAAU,IAAKA;AACzB,iBAAW;IACb;AACA,QAAI,UAAU,GAAG;AAEf,eAAS,UAAW,IAAI;AACxB,gBAAU;IACZ;AACA,UAAMC,KAAK,WAAY,UAAU,IAAM;AACvC,UAAM,SAASA,EAAC;AAChB,eAAW;EACb;AACA,SAAO;AACT;AAEM,SAAU,IACd,cACA,KACA,MACA,MAAiB;AAEjB,MAAI,MAAM;AACR,WAAO,KAAK,IAAI,cAAc,KAAK,MAAM,IAAI;EAC/C;AACA,SAAO,QAAQ,IAAI,WAAW,EAAE;AAEhC,QAAM,MAAM,WAAW,MAAM,GAAG;AAEhC,SAAO,QAAQ,IAAI,WAAW,CAAC;AAG/B,QAAMC,KAAI,KAAK,KAAK,eAAe,EAAE;AACrC,QAAM,SAAS,IAAI,WAAWA,KAAI,EAAE;AACpC,WAASC,KAAI,GAAGA,KAAID,IAAGC,MAAK;AAC1B,QAAI;AACJ,QAAIA,MAAK,GAAG;AACV,YAAM,IAAI,WAAW,KAAK,aAAa,CAAC;AACxC,UAAI,IAAI,MAAM,CAAC;IACjB,OAAO;AACL,YAAM,IAAI,WAAW,KAAK,aAAa,IAAI,EAAE;AAC7C,eAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,YAAIA,EAAC,IAAI,QAAQD,KAAI,KAAK,KAAKC,EAAC;MAClC;AACA,UAAI,IAAI,MAAM,EAAE;IAClB;AACA,QAAI,IAAI,SAAS,CAAC,IAAID,KAAI;AAC1B,UAAM,QAAQ,WAAW,KAAK,GAAG;AACjC,WAAO,IAAI,OAAOA,KAAI,EAAE;EAC1B;AAEA,SAAO,OAAO,MAAM,GAAG,YAAY;AACrC;AAKM,SAAU,MAAM,MAKrB;AACC,SAAO,IAAI,KAAK,cAAc,KAAK,KAAK,KAAK,MAAM,KAAK,IAAI;AAC9D;AAEM,SAAU,YAAY,SAAe;AACzC,MAAI,MAAM;AACR,WAAO,KAAK,YAAY,OAAO;EACjC;AACA,QAAM,OAAO,QAAQ;AACrB,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,eAAe;AACnB,QAAM,SAAS,KAAK,MAAO,OAAO,IAAK,CAAC;AACxC,QAAM,MAAM,IAAI,WAAW,MAAM;AACjC,MAAI,SAAS;AAEb,SAAO,eAAe,QAAQ,SAAS,GAAG;AACxC,QAAI,eAAe,MAAM;AACvB,YAAMF,KAAI,SAAS,QAAQ,cAAc,CAAC;AAC1C,eAAU,UAAU,IAAKA;AACzB,gBAAU;IACZ;AACA,WAAO,UAAU,GAAG;AAClB,YAAMD,KAAK,WAAY,SAAS,IAAM;AACtC,UAAI,QAAQ,IAAIA;AAChB,gBAAU;IACZ;AACA,QAAI,gBAAgB,QAAQ,SAAS,GAAG;AACtC,eAAU,UAAW,IAAI,SAAW;AACpC,eAAS,UAAU,IAAI,IAAI;IAC7B;EACF;AACA,SAAO;AACT;AAwIA,IAAI;AAGE,SAAU,cAAcK,IAAS;AACrC,MAAI,CAAC,SAAS;AACZ,cAAU,IAAI,YAAW;EAC3B;AACA,SAAO,QAAQ,OAAOA,EAAC;AACzB;AA4IM,SAAU,iBAAiB,QAAoB;AACnD,MAAI,aAAa;AACjB,aAAWC,MAAK,QAAQ;AACtB,kBAAcA,GAAE;EAClB;AACA,QAAM,MAAM,IAAI,YAAY,UAAU;AACtC,QAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,MAAIC,KAAI;AACR,aAAWD,MAAK,QAAQ;AACtB,UAAM,IAAIA,IAAGC,EAAC;AACd,IAAAA,MAAKD,GAAE;EACT;AACA,SAAO;AACT;AA+MM,SAAUE,MAAKC,IAAa;AAChC,MAAI,MAAM;AACR,WAAO,KAAK,KAAKA,EAAC;EACpB;AACA,SAAY,KAAKA,EAAC;AACpB;AAqBA,IAAMC,UAAS,IAAI,OAAO,gBAAgB;AA0GpC,SAAU,gBAAgBC,IAAS;AACvC,QAAM,SAAS,IAAI,YAAY,CAAC;AAChC,QAAM,MAAM,IAAI,WAAW,MAAM;AACjC,QAAM,KAAK,IAAI,SAAS,MAAM;AAC9B,KAAG,UAAU,GAAGA,EAAC;AACjB,SAAO;AACT;AAsEA,IAAY;CAAZ,SAAYC,wBAAqB;AAC/B,EAAAA,uBAAAA,uBAAA,4BAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,yBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,qBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,aAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,kCAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,kBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,qBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,kBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,MAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,qBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,mBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,iBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,oBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,kBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,4BAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,wBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,qBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,sBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,oBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,sBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,wBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,qBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,qBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,yBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,iCAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,8BAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,2BAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,gCAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,yBAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,2BAAA,IAAA,IAAA,IAAA;AACA,EAAAA,uBAAAA,uBAAA,oBAAA,IAAA,IAAA,IAAA;AACF,GAhCY,0BAAA,wBAAqB,CAAA,EAAA;AAkCjC,IAAY;CAAZ,SAAYC,0BAAuB;AAIjC,EAAAA,yBAAAA,yBAAA,MAAA,IAAA,CAAA,IAAA;AAKA,EAAAA,yBAAAA,yBAAA,qBAAA,IAAA,CAAA,IAAA;AAEA,EAAAA,yBAAAA,yBAAA,sBAAA,IAAA,CAAA,IAAA;AAEA,EAAAA,yBAAAA,yBAAA,oBAAA,IAAA,CAAA,IAAA;AACF,GAdY,4BAAA,0BAAuB,CAAA,EAAA;AAgB7B,IAAO,0BAAP,MAA8B;EAGlC,YAAoB,YAAkB;AAAlB,SAAA,aAAA;AAFZ,SAAA,SAAuB,CAAA;EAEU;EAEzC,IAAI,OAAiB;AACnB,SAAK,OAAO,KAAK,WAAW,KAAK,KAAK,CAAC;AACvC,WAAO;EACT;EAEA,QAAK;AACH,QAAI,aAAa;AACjB,eAAWC,MAAK,KAAK,QAAQ;AAC3B,oBAAcA,GAAE;IAClB;AACA,UAAM,MAAM,IAAI,YAAY,IAAI,IAAI,UAAU;AAC9C,UAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,QAAIC,KAAI;AACR,eAAWD,MAAK,KAAK,QAAQ;AAC3B,YAAM,IAAIA,IAAGC,EAAC;AACd,MAAAA,MAAKD,GAAE;IACT;AACA,UAAM,QAAQ,IAAI,SAAS,GAAG;AAC9B,UAAM,UAAU,GAAG,aAAa,IAAI,CAAC;AACrC,UAAM,UAAU,GAAG,KAAK,UAAU;AAClC,WAAO;EACT;;AAGI,SAAU,WAAW,YAAkB;AAC3C,SAAO,IAAI,wBAAwB,UAAU;AAC/C;AAiBM,SAAU,gBACdE,IACA,MAAY;AAEZ,QAAM,UAAU,IAAI,WAAW,IAAI;AACnC,QAAM,MAAMA,GAAE,QAAQ,GAAG,EAAE,MAAM,QAAO;AACxC,UAAQ,IAAI,KAAK,CAAC;AAClB,SAAO;AACT;AAEM,SAAU,kBAAkB,KAAe;AAC/C,MAAI,MAAM,IAAI,WAAW,GAAG;AAC5B,QAAM,IAAI,QAAO;AACjB,SAAO,mBAAAC,QAAO,UAAU,MAAM,KAAK,GAAG,GAAG,KAAK,KAAK;AACrD;AAEM,IAAW;CAAjB,SAAiBC,WAAQ;AACvB,QAAM,OAAO;IACX;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAClE;IAAM;IAAM;IAAM;IAAM;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;;AAGvE,QAAMC,KAAI,mBAAAF,QAAO,UAAU,KAAK,QAAO,GAAI,KAAK,KAAK;AAE9C,iBAAe,kBACpB,MAAgB;AAEhB,WAAY,6CAA6C,IAAI;EAC/D;AAJsB,EAAAC,UAAA,oBAAiB;AAMhC,iBAAe,YAAS;AAC7B,WAAY,mCAAkC;EAChD;AAFsB,EAAAA,UAAA,YAAS;AAIxB,iBAAe,UACpB,MAAwB;AAExB,WAAY,2BAA2B,IAAI;EAC7C;AAJsB,EAAAA,UAAA,YAAS;AAM/B,WAAgB,KACd,KACA,KAAuB;AAEvB,UAAM,MAAM,iBAAiB;EAC/B;AALgB,EAAAA,UAAA,OAAI;AAOpB,iBAAe,aACb,KACA,MAAgB;AAEhB,UAAM,MAAM,MAAM;MAChB,cAAc;MACd,MAAM;MACN,KAAK;MACL,MAAM,cAAc,qBAAqB;KAC1C;AAED,WAAO;EACT;AAEO,iBAAe,iBACpB,MACA,MAAgB;AAEhB,UAAM,MAAM,MAAM,UAAU,IAAI;AAChC,UAAM,UAAU;AAChB,UAAME,KAAI,kBAAkB,QAAQ,SAAS,GAAG,EAAE,CAAC;AACnD,UAAM,YAAY,MAAM,aAAa,KAAK,IAAI;AAC9C,UAAM,aAAa,kBAAkB,SAAS,EAAE,IAAID,EAAC;AAErD,UAAM,SAASC,GAAE,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,IAAID,EAAC,EAAE,SAAS,CAAC,EAAE,IAAIA,EAAC;AACxE,UAAM,SACH,KAAK,iBAAiB,CAAC,QAAQ,SAAS,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,EAC5D,SAAS,GAAG,EAAE;AAEjB,UAAM,UAAU,iBAAiB,CAAC,gBAAgB,QAAQ,EAAE,GAAG,MAAM,CAAC;AAEtE,WAAO;EACT;AAlBsB,EAAAD,UAAA,mBAAgB;AAoB/B,iBAAe,gBACpB,KACA,MAAgB;AAEhB,UAAM,YAAY,MAAM,aAAa,KAAK,IAAI;AAC9C,UAAM,gBAAqB,kCAAkC,SAAS;AACtE,UAAM,MAAW,kCAAkC,eAAe,GAAG;AACrE,WAAO;EACT;AARsB,EAAAA,UAAA,kBAAe;AASvC,GA1EiB,aAAA,WAAQ,CAAA,EAAA;AAkGzB,SAAS,UAAU,MAAa;AAC9B,MAAI,CAAC,MAAM;AACT,UAAM,MAAM,kBAAkB;EAChC;AACF;AAEM,IAAW;CAAjB,SAAiBG,iBAAc;AAIhB,EAAAA,gBAAA,mBAAmB;AAEhC,WAAgB,eAAe,IAAiB;AAC9C,UAAM,KAAK,IAAS,UAAS;AAC7B,eAAW,OAAO,GAAG,YAAY;AAC/B,SAAG,OAAO,YAAY,GAAG,CAAC;IAC5B;AACA,WAAO,YAAY,GAAG,OAAM,EAAG,SAAS,GAAG,EAAE,CAAC;EAChD;AANgB,EAAAA,gBAAA,iBAAc;AAQ9B,WAAgB,eAAe,MAAY;AACzC,QAAI,QAAQ;AACZ,QAAIC,KAAI;AACR,WAAOA,KAAI,GAAG;AACZ,eAASA,KAAI;AACb,MAAAA,KAAIA,MAAK;IACX;AACA,WAAO;EACT;AARgB,EAAAD,gBAAA,iBAAc;AAa9B,WAAgB,qBAAqB,MAAY;AAC/C,UAAM,SAAmB,CAAA;AACzB,QAAI,MAAM;AACV,QAAIC,KAAI,QAAQ;AAChB,WAAOA,KAAI,GAAG;AACZ,UAAIA,KAAI,GAAG;AACT,eAAO,KAAK,GAAG;MACjB;AACA,MAAAA,KAAIA,MAAK;AACT;IACF;AACA,WAAO;EACT;AAZgB,EAAAD,gBAAA,uBAAoB;AAcpC,WAAgB,iBAAiB,MAAc,KAAW;AACxD,eAAW,OAAO,OAAO,CAAC;AAC1B,QAAIE,KAAI;AACR,QAAID,KAAI;AACR,QAAIF,KAAI;AACR,WAAOE,KAAI,GAAG;AACZ,UAAIF,MAAK,GAAG;AACV;MACF;AACA,MAAAE,KAAIA,MAAK;AACT,MAAAC,MAAKD,KAAI;AACT,MAAAF;IACF;AACA,WAAOG;EACT;AAdgB,EAAAF,gBAAA,mBAAgB;AAgBhC,WAAgB,mBAAmB,cAAoB;AACrD,UAAM,MAAM,iBAAiB;EAC/B;AAFgB,EAAAA,gBAAA,qBAAkB;AAI3B,iBAAe,kBACpB,SACA,KAAW;AAEX,eAAW,UAAU,OAAO,CAAC;AAC7B,UAAM,UAAU,eAAe,OAAO,IAAI;AAC1C,UAAM,WAAW,iBAAiB,SAAS,GAAG;AAE9C,UAAM,OAA4B,CAAA;AAClC,UAAM,QAA8B,CAAA;AAEpC,aAASE,KAAI,GAAGA,KAAI,SAASA,MAAK;AAChC,YAAM,OAAO,MAAM,SAAS,UAAS;AACrC,YAAM,MAAM,MAAM,SAAS,UAAU,IAAI;AACzC,WAAK,KAAK,GAAG;AACb,UAAIA,KAAI,UAAU;AAChB,cAAM,KAAK,IAAI;MACjB;IACF;AAEA,WAAO;MACL,YAAY;QACV,MAAM;QACN,YAAY,KAAK,IAAI,CAACP,OAAM,YAAYA,EAAC,CAAC;;MAE5C,OAAO;QACL,aAAa,MAAM,IAAI,CAACA,OAAM,YAAYA,EAAC,CAAC;;;EAGlD;AA7BsB,EAAAK,gBAAA,oBAAiB;AA+BvC,QAAM,iCAAoD,YACxD,sDAAsD;AAGjD,iBAAe,wBACpB,SACA,KACA,MAAgB;AAEhB,eAAW,UAAU,OAAO,CAAC;AAC7B,UAAM,UAAU,eAAe,OAAO,IAAI;AAC1C,UAAM,WAAW,iBAAiB,SAAS,GAAG;AAE9C,UAAM,OAA4B,CAAA;AAClC,UAAM,QAA8B,CAAA;AAEpC,aAASE,KAAI,GAAGA,KAAI,UAAUA,MAAK;AACjC,YAAM,WAAW,MAAM,MAAM;QAC3B,cAAc;QACd,KAAK;QACL,MAAM,cAAc,gBAAgB;QACpC,MAAM,gBAAgBA,EAAC;OACxB;AAED,YAAM,OAAO,MAAM,SAAS,kBAAkB,QAAQ;AACtD,YAAM,MAAM,MAAM,SAAS,UAAU,IAAI;AACzC,WAAK,KAAK,GAAG;AACb,YAAM,KAAK,IAAI;IACjB;AAEA,aAASA,KAAI,UAAUA,KAAI,SAASA,MAAK;AACvC,YAAM,aAAa,MAAM,MAAM;QAC7B,cAAc;QACd,KAAK;QACL,MAAM,cAAc,YAAY;QAChC,MAAM,gBAAgBA,EAAC;OACxB;AACD,YAAM,MAAM,MAAM,SAAS,gBACzB,gCACA,UAAU;AAEZ,WAAK,KAAK,GAAG;IACf;AAEA,WAAO;MACL,YAAY;QACV,MAAM;QACN,YAAY,KAAK,IAAI,CAACP,OAAM,YAAYA,EAAC,CAAC;;MAE5C,OAAO;QACL,aAAa,MAAM,IAAI,CAACA,OAAM,YAAYA,EAAC,CAAC;;;EAGlD;AAjDsB,EAAAK,gBAAA,0BAAuB;AAsDtC,iBAAe,cACpB,IACAG,KACA,MAAgB;AAEhB,QAAI,GAAG,WAAW,UAAUA,IAAG,WAAW,QAAQ;AAChD,aAAO;IACT;AACA,aAASD,KAAI,GAAGA,KAAI,GAAG,WAAW,QAAQA,MAAK;AAC7C,YAAM,KAAK,YAAY,GAAG,WAAWA,EAAC,CAAC;AACvC,YAAME,MAAK,MAAM,SAAS,gBACxB,YAAYD,IAAG,WAAWD,EAAC,CAAC,GAC5B,IAAI;AAEN,UAAI,MAAME,KAAI;AACZ,eAAO;MACT;IACF;AACA,WAAO;EACT;AAnBsB,EAAAJ,gBAAA,gBAAa;AAqB5B,iBAAe,iBACpB,iBACA,MAAgB;AAEhB,UAAM,WAAiC,CAAA;AACvC,UAAM,UAA+B,CAAA;AAErC,eAAW,UAAU,gBAAgB,WAAW,YAAY;AAC1D,cAAQ,KAAK,MAAM,SAAS,gBAAgB,YAAY,MAAM,GAAG,IAAI,CAAC;IACxE;AAEA,eAAW,WAAW,gBAAgB,MAAM,aAAa;AACvD,eAAS,KACP,MAAM,SAAS,iBAAiB,YAAY,OAAO,GAAG,IAAI,CAAC;IAE/D;AAEA,WAAO;MACL,YAAY;QACV,MAAM,gBAAgB,WAAW;QACjC,YAAY,QAAQ,IAAI,CAACL,OAAM,YAAYA,EAAC,CAAC;;MAE/C,OAAO;QACL,aAAa,SAAS,IAAI,CAACA,OAAM,YAAYA,EAAC,CAAC;;;EAGrD;AA1BsB,EAAAK,gBAAA,mBAAgB;AA4BtC,WAAgB,iBACd,iBACA,KAAW;AAEX,UAAMK,KAAI,WAAW,sBAAsB,sBAAsB,EAC9D,IAAI,gBAAgB,gBAAgB,WAAW,IAAI,CAAC,EACpD,IAAI,gBAAgB,GAAG,CAAC,EACxB,MAAK;AACR,UAAM,QAAQ,iBAAiB,gBAAgB,WAAW,MAAM,GAAG;AACnE,QAAI,UAAU,GAAG;AAEf,aAAO,IAAI,WAAW,EAAE;IAC1B;AACA,UAAM,OAAO,gBAAgB,MAAM,YAAY,QAAQ,CAAC;AACxD,UAAM,MAAM,gBAAgB,WAAW,WAAW,QAAQ,CAAC;AAC3D,UAAM,MAAW,8BACfA,IACA,YAAY,IAAI,GAChB,YAAY,GAAG,CAAC;AAElB,WAAO;EACT;AArBgB,EAAAL,gBAAA,mBAAgB;AAuBhC,WAAgB,iBACd,YACA,KACA,KAAW;AAEX,UAAMK,KAAI,WAAW,sBAAsB,sBAAsB,EAC9D,IAAI,gBAAgB,WAAW,IAAI,CAAC,EACpC,IAAI,gBAAgB,GAAG,CAAC,EACxB,MAAK;AACR,UAAM,QAAQ,iBAAiB,WAAW,MAAM,GAAG;AACnD,QAAI,UAAU,GAAG;AAEf,aAAO;IACT;AACA,UAAM,MAAM,WAAW,WAAW,QAAQ,CAAC;AAC3C,WAAY,qCACVA,IACA,YAAY,GAAG,GACf,YAAY,GAAG,CAAC;EAEpB;AApBgB,EAAAL,gBAAA,mBAAgB;AAqBlC,GAnPiB,mBAAA,iBAAc,CAAA,EAAA;AAkS/B,IAAK;CAAL,SAAKM,oBAAiB;AACpB,EAAAA,mBAAAA,mBAAA,cAAA,IAAA,CAAA,IAAA;AACA,EAAAA,mBAAAA,mBAAA,gBAAA,IAAA,CAAA,IAAA;AACF,GAHK,sBAAA,oBAAiB,CAAA,EAAA;;;AGr7CtB,IAAI,UAAU;AACd,IAAI,YAAY,CAAC,WAAY,WAAY,WAAY,YAAY,SAAU;AAE3E,IAAM,YAAiB;EACrB,QAAQ;EACR,SAAS;;AAGX,IAAA,iBAAe;EACb,QAAQC;EACR,QAAQC;EACR;;AAGF,SAAS,iBAAiB,KAAQ;AAChC,MAAI,OAAO,UAAU,QAAQ;AAC3B,WAAO;EACT,WAAW,OAAO,UAAU,SAAS;AACnC,WAAO;EACT,OAAO;AACL,UAAM,IAAI,MAAM,kBAAkB;EACpC;AACF;AAEA,SAAS,QAAQ,QAAW;AAC1B,MAAI,MAAM;AACV,WAASC,KAAI,GAAGA,KAAI,OAAO,QAAQ,EAAEA,IAAG;AACtC,QAAI,MAAM,OAAO;AACjB,WAAQ,MAAM,aAAc,IAAK,OAAOA,EAAC;AACzC,aAASC,KAAI,GAAGA,KAAI,GAAG,EAAEA,IAAG;AAC1B,UAAK,OAAOA,KAAK,GAAG;AAClB,eAAO,UAAUA,EAAC;MACpB;IACF;EACF;AACA,SAAO;AACT;AAEA,SAAS,UAAU,KAAQ;AACzB,MAAI,MAAM,CAAA;AACV,MAAID;AACJ,OAAKA,KAAI,GAAGA,KAAI,IAAI,QAAQ,EAAEA,IAAG;AAC/B,QAAI,KAAK,IAAI,WAAWA,EAAC,KAAK,CAAC;EACjC;AACA,MAAI,KAAK,CAAC;AACV,OAAKA,KAAI,GAAGA,KAAI,IAAI,QAAQ,EAAEA,IAAG;AAC/B,QAAI,KAAK,IAAI,WAAWA,EAAC,IAAI,EAAE;EACjC;AACA,SAAO;AACT;AAEA,SAAS,eAAe,KAAU,MAAW,KAAQ;AACnD,SAAO,QAAQ,UAAU,GAAG,EAAE,OAAO,IAAI,CAAC,MAAM,iBAAiB,GAAG;AACtE;AAEA,SAAS,eAAe,KAAU,MAAW,KAAQ;AACnD,MAAI,SAAS,UAAU,GAAG,EAAE,OAAO,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAClE,MAAI,MAAM,QAAQ,MAAM,IAAI,iBAAiB,GAAG;AAChD,MAAI,MAAM,CAAA;AACV,WAASA,KAAI,GAAGA,KAAI,GAAG,EAAEA,IAAG;AAC1B,QAAI,KAAM,OAAQ,KAAK,IAAIA,MAAO,EAAE;EACtC;AACA,SAAO;AACT;AAEA,SAASD,QAAO,KAAU,MAAW,KAAQ;AAC3C,MAAI,WAAW,KAAK,OAAO,eAAe,KAAK,MAAM,GAAG,CAAC;AACzD,MAAI,MAAM,MAAM;AAChB,WAASC,KAAI,GAAGA,KAAI,SAAS,QAAQ,EAAEA,IAAG;AACxC,WAAO,QAAQ,OAAO,SAASA,EAAC,CAAC;EACnC;AACA,SAAO;AACT;AAEA,SAASF,QAAO,YAAiB,KAAQ;AACvC,MAAIE;AACJ,MAAI,YAAY;AAChB,MAAI,YAAY;AAChB,OAAKA,KAAI,GAAGA,KAAI,WAAW,QAAQ,EAAEA,IAAG;AACtC,QAAI,WAAW,WAAWA,EAAC,IAAI,MAAM,WAAW,WAAWA,EAAC,IAAI,KAAK;AACnE,aAAO;IACT;AACA,QAAI,WAAW,WAAWA,EAAC,KAAK,MAAM,WAAW,WAAWA,EAAC,KAAK,KAAK;AACrE,kBAAY;IACd;AACA,QAAI,WAAW,WAAWA,EAAC,KAAK,MAAM,WAAW,WAAWA,EAAC,KAAK,IAAI;AACpE,kBAAY;IACd;EACF;AACA,MAAI,aAAa,WAAW;AAC1B,WAAO;EACT;AACA,eAAa,WAAW,YAAW;AACnC,MAAI,MAAM,WAAW,YAAY,GAAG;AACpC,MAAI,MAAM,KAAK,MAAM,IAAI,WAAW,UAAU,WAAW,SAAS,IAAI;AACpE,WAAO;EACT;AACA,MAAI,MAAM,WAAW,UAAU,GAAG,GAAG;AACrC,MAAI,OAAO,CAAA;AACX,OAAKA,KAAI,MAAM,GAAGA,KAAI,WAAW,QAAQ,EAAEA,IAAG;AAC5C,QAAIE,KAAI,QAAQ,QAAQ,WAAW,OAAOF,EAAC,CAAC;AAC5C,QAAIE,OAAM,IAAI;AACZ,aAAO;IACT;AACA,SAAK,KAAKA,EAAC;EACb;AACA,MAAI,CAAC,eAAe,KAAK,MAAM,GAAG,GAAG;AACnC,WAAO;EACT;AACA,SAAO,EAAE,KAAU,MAAM,KAAK,MAAM,GAAG,KAAK,SAAS,CAAC,EAAC;AACzD;;;AC5GA,IAAA,sBAAe;EACb,QAAQC;EACR,QAAQC;;AAGV,SAAS,YACP,MACA,UACA,QACA,KAAY;AAEZ,MAAI,MAAM;AACV,MAAI,OAAO;AACX,MAAI,MAAM,CAAA;AACV,MAAI,QAAQ,KAAK,UAAU;AAC3B,WAASC,KAAI,GAAGA,KAAI,KAAK,QAAQ,EAAEA,IAAG;AACpC,QAAI,QAAQ,KAAKA,EAAC;AAClB,QAAI,QAAQ,KAAK,SAAS,aAAa,GAAG;AACxC,aAAO,CAAA;IACT;AACA,UAAO,OAAO,WAAY;AAC1B,YAAQ;AACR,WAAO,QAAQ,QAAQ;AACrB,cAAQ;AACR,UAAI,KAAM,OAAO,OAAQ,IAAI;IAC/B;EACF;AACA,MAAI,KAAK;AACP,QAAI,OAAO,GAAG;AACZ,UAAI,KAAM,OAAQ,SAAS,OAAS,IAAI;IAC1C;EACF,WAAW,QAAQ,YAAa,OAAQ,SAAS,OAAS,MAAM;AAC9D,WAAO,CAAA;EACT;AACA,SAAO;AACT;AAEA,SAASD,QAAO,KAAU,MAAY;AACpC,MAAI,UAAU;AACd,MAAI,MAAM,eAAO,OAAO,MAAM,eAAO,UAAU,MAAM;AACrD,MAAI,QAAQ,MAAM;AAChB,UAAM,eAAO,OAAO,MAAM,eAAO,UAAU,OAAO;AAClD,cAAU;EACZ;AACA,MACE,QAAQ,QACR,IAAI,QAAQ,OACZ,IAAI,KAAK,SAAS,KAClB,IAAI,KAAK,CAAC,IAAI,IACd;AACA,WAAO;EACT;AACA,MAAI,MAAM,YAAY,IAAI,KAAK,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK;AACpD,MAAI,QAAQ,QAAQ,IAAI,SAAS,KAAK,IAAI,SAAS,IAAI;AACrD,WAAO;EACT;AACA,MAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,WAAW,MAAM,IAAI,WAAW,IAAI;AAC/D,WAAO;EACT;AACA,MAAI,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;AAChC,WAAO;EACT;AACA,MAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,SAAS;AACjC,WAAO;EACT;AACA,SAAO,EAAE,SAAS,IAAI,KAAK,CAAC,GAAG,SAAS,IAAG;AAC7C;AAEA,SAASD,QAAO,KAAU,SAAiB,SAAY;AACrD,MAAI,MAAM,eAAO,UAAU;AAC3B,MAAI,UAAU,GAAG;AACf,UAAM,eAAO,UAAU;EACzB;AACA,MAAI,MAAM,eAAO,OACf,KACA,CAAC,OAAO,EAAE,OAAO,YAAY,SAAS,GAAG,GAAG,IAAI,CAAC,GACjD,GAAG;AAEL,MAAIC;IAAO;IAAK;;EAAa,MAAM,MAAM;AACvC,WAAO;EACT;AACA,SAAO;AACT;;;AClEM,SAAU,0BACd,YACA,MAAY;AAEZ,MAAI,CAAC;AAAY,WAAO,CAAA;AACxB,MAAI;AACJ,MAAI;AACF,UAAM,YAAY,UAAU;EAC9B,QAAQ;EAER;AACA,MAAI,CAAC,OAAO,IAAI,WAAW;AAAI,WAAO,CAAA;AAEtC,QAAM,YAAY,IAAI,WAAW,CAAC;AAClC,YAAU,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;AAChC,QAAM,aAAa,IAAI,WAAW,CAAC;AACnC,aAAW,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;AAEjC,YAAU,CAAC,IAAI,UAAU,CAAC,IAAI;AAC9B,aAAW,CAAC,IAAI,WAAW,CAAC,IAAI;AAEhC,QAAM,aAAa,IAAI,WAAW,UAAU,SAAS,IAAI,SAAS,CAAC;AACnE,aAAW,IAAI,WAAW,CAAC;AAC3B,aAAW,IAAI,IAAI,SAAS,GAAG,EAAE,GAAG,CAAC;AAErC,QAAM,cAAc,IAAI,WAAW,UAAU,SAAS,IAAI,SAAS,CAAC;AACpE,cAAY,IAAI,YAAY,CAAC;AAC7B,cAAY,IAAI,IAAI,SAAS,IAAI,EAAE,GAAG,CAAC;AAEvC,QAAME,UACJ,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,KAAK,MAC1B,OACA,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,KAAK,MACjE,SACA,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,KAAK,MAC5B,OACA;AACV,MAAIA,YAAW;AAAW,UAAM,IAAI,MAAM,qBAAqB;AAE/D,QAAM,QAAe,oBAAQ,OAAOA,SAAQ,GAAG,UAAU;AACzD,QAAM,QAAe,oBAAQ,OAAOA,SAAQ,GAAG,WAAW;AAE1D,SAAO,CAAC,OAAO,KAAK;AACtB;;;ACpDM,SAAU,sBAAmB;AACjC,SAAO;IACL,OAAOC,IAAQC,IAAW;AACxB,UAAI,OAAOD,OAAM,UAAU;AACzB,cAAM,IAAI,cACR,sBAAsB,cAAcC,EAAC,CAAC,YAAY,OAAOD,EAAC,EAAE;MAEhE;AACA,UAAI,CAACA,GAAE,WAAW,QAAQ,GAAG;AAC3B,cAAM,IAAI,cACR,gCAAgC,cAAcC,EAAC,CAAC,aAAaD,EAAC,GAAG;MAErE;AACA,aAAOA;IACT;;AAEJ;AAiCA,IAAM,WAAW;AA4FX,SAAU,kBAAkBE,IAAW;AAC3C,QAAM,MAAM,IAAI,IAAI,GAAG,QAAQ,GAAGA,GAAE,UAAU,IAAIA,GAAE,UAAU,EAAE;AAChE,QAAM,YAAY,CAACA,GAAE,SAAS,CAAA,IAAK,OAAO,QAAQA,GAAE,MAAM;AAC1D,YAAU,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAK;AACjC,QAAI,aAAa,IAAI,KAAK,KAAK;EACjC,CAAC;AACD,SAAO,IAAI;AACb;AASM,SAAU,cAAcC,IAAS;AACrC,MAAI,CAACA,GAAE,WAAW,QAAQ,GAAG;AAC3B,WAAO;EACT;AAEA,QAAM,CAAC,MAAM,MAAM,IAAIA,GAAE,MAAM,SAAS,MAAM,EAAE,MAAM,GAAG;AAEzD,QAAM,gBAAgB,KAAK,QAAQ,GAAG;AAEtC,MAAI,kBAAkB,IAAI;AACxB,WAAO;EACT;AAEA,QAAM,aAAa,KAAK,MAAM,GAAG,aAAa;AAC9C,QAAM,aAAa,KAAK,MAAM,gBAAgB,CAAC;AAE/C,QAAM,SAAkC,CAAA;AAExC,QAAM,eAAe,IAAIC,iBAAgB,UAAU,EAAE;AAErD,eAAa,QAAQ,CAACC,IAAGC,OAAK;AAC5B,WAAOA,EAAC,IAAID;EACd,CAAC;AAED,MAAI,eAAe,gBAAgB;AACjC,UAAM,QAAQ,WAAW,MAAM,GAAG;AAClC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,UAAU,MAAM,CAAC;AACvB,WAAO;MACL;MACA;MACA;MACA,SAAS;MACT;MACA;;EAEJ;AACA,MAAI,eAAe,QAAQ;AACzB,UAAM,QAAQ,WAAW,MAAM,GAAG;AAClC,QAAI,OAA2B;AAC/B,QAAI,MAA0B;AAC9B,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,MAAM,CAAC,EAAE,YAAW;IAC7B;AACA,QAAI,MAAM,WAAW,GAAG;AACtB,YAAM,MAAM,CAAC;AACb,aAAO,MAAM,CAAC,EAAE,YAAW;IAC7B,OAAO;AACL,aAAO,WAAW,YAAW;IAC/B;AACA,WAAO;MACL,SAAS;MACT;MACA;MACA;MACA;MACA;;EAEJ;AACA,MAAI,eAAe,WAAW;AAC5B,UAAM,MAAM,qBAAqB,KAAK,OAAO,SAAS,CAAC;AACvD,UAAM,UAAU,CAAC,MAAM,OAAO,SAAS,IAAI,IAAI,CAAC;AAChD,UAAM,cAAc,CAAC,UACjB,CAAA,IACA,0BAA0B,SAAS,UAAU;AAEjD,UAAM,aAAa,WAAW,YAAW;AACzC,UAAM,SAA0B;MAC9B,SAAS;MACT;MACA;MACA,SAAS;MACT;MACA;;AAGF,WAAO;EACT;AACA,SAAO;IACL;IACA;IACA;IACA,SAAS;;AAEb;;;AC9OA,IAAM,cAAc,IAAI,YAAW;AAEnC,IAAME,UAAS,IAAI,OAAO,SAAS;AAe5B,IAAM,6BAA6B;AA6BpC,IAAOC,WAAP,MAAc;EAApB,cAAA;AACU,SAAA,YAAY,oBAAI,IAAG;EAyB7B;EAvBE,IAAI,MAAY;AACd,UAAMC,KAAI,KAAK,UAAU,IAAI,KAAK,YAAW,CAAE;AAC/C,QAAIA,IAAG;AACL,aAAOA;IACT;AACA,WAAO;EACT;EAEA,IAAI,MAAc,OAAa;AAC7B,UAAM,iBAAiB,KAAK,YAAW;AACvC,UAAM,WAAW,KAAK,UAAU,IAAI,cAAc;AAClD,QAAI,aAAa,QAAW;AAC1B,WAAK,UAAU,IAAI,gBAAgB,WAAW,MAAM,KAAK;IAC3D,OAAO;AACL,WAAK,UAAU,IAAI,gBAAgB,KAAK;IAC1C;EACF;EAEA,SAAM;AACJ,UAAMC,KAA4B,CAAA;AAClC,SAAK,UAAU,QAAQ,CAACC,IAAGC,OAAOF,GAAEE,EAAC,IAAID,EAAE;AAC3C,WAAOD;EACT;;AA2BF,eAAsB,uBACpB,cAA0B;AAE1B,QAAM,cAAc,aAAa,QAAQ,IAAI,cAAc;AAC3D,MAAI,gBAAgB,oBAAoB;AACtC,UAAM,WAAW,WACf,eAAe,oCACf;MACE,YAAY,aAAa;MACzB,eAAe,aAAa;MAC5B,gBAAgB,aAAa;MAC7B,aAAa,eAAe;OAE9B,+GAA+G;EAEnH;AACA,MAAI;AACJ,MAAI;AACF,cAAU,MAAM,aAAa,KAAI;EACnC,SAASG,IAAQ;AACf,UAAM,WAAW,WACf,eAAe,oCACf;MACE,YAAY,aAAa;MACzB,eAAe,aAAa;MAC5B,gBAAgB,aAAa;MAC7B,iBAAiBA,GAAE,SAAQ;OAE7B,gDAAgD;EAEpD;AAEA,QAAM,iBAAiB,QAAQ;AAC/B,MAAI,OAAO,mBAAmB,UAAU;AACtC,IAAAN,QAAO,KACL,oCAAoC,aAAa,MAAM,MAAM,IAC3D,OAAO,CACR,EAAE;AAEL,UAAM,WAAW,WACf,eAAe,oCACf;MACE,YAAY,aAAa;MACzB,eAAe,aAAa;MAC5B,gBAAgB,aAAa;OAE/B,2CAA2C;EAE/C;AACA,SAAO;AACT;AA4CA,eAAsB,mCACpB,cACA,OAAe;AAEf,MAAI,EAAE,aAAa,UAAU,OAAO,aAAa,SAAS,MAAM;AAC9D,WAAO;MACL,SAAS;MACT,oBAAoB,MAAM,uBAAuB,YAAY;;EAEjE;AACA,MAAI;AACJ,MAAI;AACF,eAAW,MAAM,aAAa,KAAI;EACpC,SAASO,IAAQ;AACf,UAAM,WAAW,WACf,eAAe,oCACf;MACE,YAAY,aAAa;MACzB,eAAe,aAAa;MAC5B,gBAAgB,aAAa;MAC7B,iBAAiBA,GAAE,SAAQ;OAE7B,0CAA0C;EAE9C;AACA,MAAI;AACJ,MAAI;AACF,qBAAiB,MAAM,OAAO,QAAQ;EACxC,SAASA,IAAQ;AACf,UAAM,WAAW,WACf,eAAe,oCACf;MACE,YAAY,aAAa;MACzB,eAAe,aAAa;MAC5B,gBAAgB,aAAa;MAC7B,iBAAiBA,GAAE,SAAQ;OAE7B,kBAAkB;EAEtB;AACA,SAAO;IACL,SAAS;IACT,UAAU;;AAEd;AAkBM,SAAU,4BACd,cACA,oBAAsC;AAEtC,QAAM,WAAW,WACf,eAAe,iCACf;IACE,YAAY,aAAa;IACzB,eAAe,aAAa;IAC5B,gBAAgB,aAAa;IAC7B,eAAe;KAEjB,0BAA0B,aAAa,MAAM,cAAc;AAE/D;AAEA,eAAsB,+BACpB,cACA,OAAe;AAEf,QAAMC,KAAI,MAAM,mCAAmC,cAAc,KAAK;AACtE,MAAI,CAACA,GAAE,SAAS;AACd,WAAOA,GAAE;EACX;AACA,8BAA4B,cAAcA,GAAE,kBAAkB;AAChE;AAsIM,SAAU,WAAW,MAAS;AAClC,MAAI,QAAQ,MAAM;AAChB,WAAO,IAAI,YAAY,CAAC;EAC1B;AACA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,YAAY,OAAO,IAAI,EAAE;EAClC,WAAW,YAAY,OAAO,IAAI,GAAG;AACnC,WAAO,KAAK;EACd,WAAW,gBAAgB,aAAa;AACtC,WAAO;EACT,WAAW,OAAO,SAAS,UAAU;AACnC,WAAO,YAAY,OAAO,KAAK,UAAU,IAAI,CAAC,EAAE;EAClD;AACA,QAAM,IAAI,UAAU,+BAA+B;AACrD;AAEM,SAAU,kBAAkB,QAAc;AAC9C,QAAM,UAAkC,CAAA;AAExC,MAAI,WAAW,UAAU,WAAW,SAAS,WAAW,SAAS;AAE/D,YAAQ,cAAc,IAAI;EAC5B;AAEA,UAAQ,QAAQ,IAAI;AAEpB,SAAO;AACT;AAKM,SAAU,oBACd,UACA,UAAgB;AAEhB,QAAM,OAAO,GAAG,QAAQ,IAAI,QAAQ;AACpC,QAAM,cAAsB,sBAAsB,cAAc,IAAI,CAAC;AACrE,SAAO,SAAS,WAAW;AAC7B;;;ACpYA,eAAsB,kBACpB,MACA,OAAe;AAEf,QAAM,OAAO,MAAM,+BAA+B,MAAM,KAAK;AAC7D,SAAO,EAAE,MAAM,MAAe,KAAI;AACpC;AAMM,SAAU,eAAkB,MAAO;AACvC,SAAO,EAAE,MAAM,MAAe,KAAI;AACpC;AAEM,SAAU,eAAe,MAAkB;AAC/C,SAAO,EAAE,MAAM,MAAe,MAAM,OAAM;AAC5C;AASA,eAAsB,0BACpB,MACAC,IACA,OAAe;AAEf,QAAM,OAAO,MAAM,+BAA+B,MAAM,KAAK;AAC7D,SAAO,EAAE,MAAM,QAAQ,MAAMA,IAAG,KAAI;AACtC;AAEA,eAAsB,mBACpBA,IACA,MAAkB;AAElB,QAAM,SAAS,MAAM,uBAAuB,IAAI;AAChD,SAAO,EAAE,MAAM,QAAQ,MAAMA,IAAG,OAAM;AACxC;AAEM,SAAU,oBACdA,IACA,QAAwB;AAExB,SAAO,EAAE,MAAM,QAAQ,MAAMA,IAAG,OAAM;AACxC;AAEM,SAAU,iBAAiB,MAAoBC,QAAuB;AAC1E,QAAM,WAAW,WACf,eAAe,iCACf;IACE,YAAY,KAAK;IACjB,eAAe,KAAK;IACpB,gBAAgB,KAAK;IACrB,eAAeA;KAEjB,0BAA0B,KAAK,MAAM,cAAc;AAEvD;;;AC7GM,SAAU,yBAAsB;AACpC,SAAO;IACL,OAAOC,IAAQC,IAAW;AACxB,UAAI,OAAOD,OAAM,UAAU;AACzB,cAAM,IAAI,cACR,sBAAsB,cAAcC,EAAC,CAAC,YAAY,OAAOD,EAAC,EAAE;MAEhE;AACA,UAAI,cAAcA,EAAC,MAAM,QAAW;AAClC,cAAM,IAAI,cACR,wBAAwB,cAAcC,EAAC,CAAC,aAAaD,EAAC,GAAG;MAE7D;AACA,aAAOA;IACT;;AAEJ;AA0EM,SAAU,0BAA0BE,IAAS;AACjD,QAAM,KAAK,wBAAwBA,IAAG,UAAU;AAChD,MAAI,GAAG,SAAS,QAAQ;AACtB,WAAO;EACT;AACA,QAAM,QAAQ,GAAG,KAAK,KAAK,MAAM,GAAG;AAEpC,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO,oBAAoB,eAAe,4BAA4B;MACpE,MAAM,eAAe;KACtB;EACH;AAEA,QAAM,OAAO,MAAM,CAAC,EAAE,YAAW;AACjC,QAAM,eAAe,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AAQpD,QAAM,aAAa,MAAM,MAAM,SAAS,CAAC;AACzC,QAAMC,KAAI,CAAC,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG;AAE1C,QAAM,SAA4B;IAChC,MAAM,eAAe;IACrB,2BAA2B,oBACzB,GAAG,GAAG,KAAK,UAAU,MAAMA,EAAC,GAAG;IAEjC,uBAAuB;;AAEzB,SAAO,eAAe,MAAM;AAC9B;AAMM,SAAU,iBAAiBD,IAAS;AACxC,QAAME,KAAI,0BAA0BF,EAAC;AACrC,MAAIE,GAAE,SAAS;AAAQ,WAAO;AAC9B,SAAOA,GAAE;AACX;AAMM,SAAU,6BAA6BF,IAAS;AACpD,QAAM,KAAK,wBAAwBA,IAAG,cAAc;AACpD,MAAI,GAAG,SAAS,QAAQ;AACtB,WAAO;EACT;AACA,QAAM,QAAQ,GAAG,KAAK,KAAK,MAAM,GAAG;AAEpC,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO,oBAAoB,eAAe,4BAA4B;MACpE,MAAM,eAAe;KACtB;EACH;AAEA,QAAM,OAAO,MAAM,CAAC,EAAE,YAAW;AACjC,QAAM,eAAe,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AAQpD,QAAMC,KAAI,CAAC,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG;AAE1C,QAAM,SAAyB;IAC7B,MAAM,eAAe;IACrB,iBAAiB,oBACf,GAAG,GAAG,KAAK,UAAU,MAAMA,EAAC,GAAG;;AAGnC,SAAO,eAAe,MAAM;AAC9B;AAMM,SAAU,oBAAoBD,IAAS;AAC3C,QAAME,KAAI,6BAA6BF,EAAC;AACxC,MAAIE,GAAE,SAAS;AAAQ,WAAO;AAC9B,SAAOA,GAAE;AACX;AAKA,IAAY;CAAZ,SAAYC,eAAY;AACtB,EAAAA,cAAA,UAAA,IAAA;AACA,EAAAA,cAAA,eAAA,IAAA;AACA,EAAAA,cAAA,kBAAA,IAAA;AACA,EAAAA,cAAA,eAAA,IAAA;AACA,EAAAA,cAAA,UAAA,IAAA;AACA,EAAAA,cAAA,aAAA,IAAA;AACA,EAAAA,cAAA,cAAA,IAAA;AACA,EAAAA,cAAA,cAAA,IAAA;AACA,EAAAA,cAAA,eAAA,IAAA;AACA,EAAAA,cAAA,oBAAA,IAAA;AACA,EAAAA,cAAA,SAAA,IAAA;AACF,GAZY,iBAAA,eAAY,CAAA,EAAA;AAcxB,IAAY;CAAZ,SAAYC,iBAAc;AACxB,EAAAA,gBAAA,KAAA,IAAA;AACA,EAAAA,gBAAA,UAAA,IAAA;AACA,EAAAA,gBAAA,QAAA,IAAA;AACA,EAAAA,gBAAA,SAAA,IAAA;AACA,EAAAA,gBAAA,SAAA,IAAA;AACA,EAAAA,gBAAA,aAAA,IAAA;AACA,EAAAA,gBAAA,SAAA,IAAA;AACA,EAAAA,gBAAA,eAAA,IAAA;AACA,EAAAA,gBAAA,kBAAA,IAAA;AACA,EAAAA,gBAAA,aAAA,IAAA;AACF,GAXY,mBAAA,iBAAc,CAAA,EAAA;AAkB1B,SAAS,eACPJ,IACA,QAAc;AAEd,QAAM,WAAW,WAAW,MAAM;AAClC,QAAM,UAAU,gBAAgB,MAAM;AACtC,MAAIA,GAAE,YAAW,EAAG,WAAW,QAAQ,GAAG;AACxC,WAAO;MACL,YAAY;MACZ,MAAMA,GAAE,UAAU,SAAS,MAAM;;EAErC,WAAWA,GAAE,YAAW,EAAG,WAAW,OAAO,GAAG;AAC9C,WAAO;MACL,YAAY;MACZ,MAAMA,GAAE,UAAU,QAAQ,MAAM;;EAEpC,OAAO;AACL,WAAO;EACT;AACF;AAEA,SAAS,wBAAwBA,IAAW,QAAc;AACxD,MACE,CAACA,GAAE,YAAW,EAAG,WAAW,UAAU,KACtC,CAACA,GAAE,YAAW,EAAG,WAAW,eAAe,GAC3C;AACA,WAAO,oBAAoB,eAAe,4BAA4B;MACpE,MAAM,eAAe;KACtB;EACH;AACA,QAAM,WAAW,WAAW,MAAM;AAClC,QAAM,UAAU,gBAAgB,MAAM;AACtC,MAAIA,GAAE,YAAW,EAAG,WAAW,QAAQ,GAAG;AACxC,WAAO,eAAe;MACpB,YAAY;MACZ,MAAMA,GAAE,UAAU,SAAS,MAAM;KAClC;EACH,WAAWA,GAAE,YAAW,EAAG,WAAW,OAAO,GAAG;AAC9C,WAAO,eAAe;MACpB,YAAY;MACZ,MAAMA,GAAE,UAAU,QAAQ,MAAM;KACjC;EACH,OAAO;AACL,WAAO,oBAAoB,eAAe,4BAA4B;MACpE,MAAM,eAAe;KACtB;EACH;AACF;AAGA,IAAM,UAA6C;EACjD,CAAC,eAAe,GAAG,GAAG;EACtB,CAAC,eAAe,OAAO,GAAG;EAC1B,CAAC,eAAe,OAAO,GAAG;EAC1B,CAAC,eAAe,WAAW,GAAG;EAC9B,CAAC,eAAe,OAAO,GAAG;EAC1B,CAAC,eAAe,MAAM,GAAG;EACzB,CAAC,eAAe,QAAQ,GAAG;EAC3B,CAAC,eAAe,aAAa,GAAG;EAChC,CAAC,eAAe,gBAAgB,GAAG;EACnC,CAAC,eAAe,WAAW,GAAG;;AAG1B,SAAU,cAAcK,SAAc;AAC1C,QAAM,QAAQA,QAAO,WAAW,UAAU;AAC1C,QAAM,OAAOA,QAAO,WAAW,eAAe;AAC9C,MAAI,CAAC,SAAS,CAAC;AAAM,WAAO;AAC5B,QAAM,cAAc,QAAQ,IAAI;AAChC,QAAM,YAAYA,QAAO,QAAQ,KAAK,cAAc,CAAC;AACrD,QAAM,SAASA,QAAO,UAAU,aAAa,SAAS;AACtD,QAAM,QAAQ,OAAO,OAAO,cAAc,EAAE,KAAK,CAACP,OAAMA,OAAM,MAAM;AACpE,MAAI,CAAC;AAAO,WAAO;AACnB,SAAO,QAAQ,KAAK,EAAEO,OAAM;AAC9B;AAEM,SAAU,kBAAkB,KAAa;AAC7C,UAAQ,IAAI,MAAM;IAChB,KAAK,eAAe,eAAe;AACjC,aAAO,0BAA0B,GAAG;IACtC;IACA,KAAK,eAAe,KAAK;AACvB,aAAO,gBAAgB,GAAG;IAC5B;IACA,KAAK,eAAe,SAAS;AAC3B,aAAO,oBAAoB,GAAG;IAChC;IACA,KAAK,eAAe,SAAS;AAC3B,aAAO,oBAAoB,GAAG;IAChC;IACA,KAAK,eAAe,aAAa;AAC/B,aAAO,wBAAwB,GAAG;IACpC;IACA,KAAK,eAAe,SAAS;AAC3B,aAAO,oBAAoB,GAAG;IAChC;IACA,KAAK,eAAe,QAAQ;AAC1B,aAAO,mBAAmB,GAAG;IAC/B;IACA,KAAK,eAAe,UAAU;AAC5B,aAAO,qBAAqB,GAAG;IACjC;IACA,KAAK,eAAe,kBAAkB;AACpC,aAAO,0BAA0B,GAAG;IACtC;IACA,KAAK,eAAe,aAAa;AAC/B,aAAO,qBAAqB,GAAG;IACjC;EACF;AACF;AAMM,SAAU,YAAYL,IAAS;AACnC,QAAM,KAAK,eAAeA,IAAG,KAAK;AAClC,MAAI,CAAC,IAAI;AACP,WAAO;EACT;AACA,QAAMD,KAAI,IAAI,KAAK,MAAM,GAAG;AAC5B,QAAMO,KAAI,IAAIC,iBAAgBR,GAAE,CAAC,KAAK,EAAE;AACxC,QAAM,aAAaO,GAAE,IAAI,GAAG,KAAK;AACjC,QAAM,YAAYA,GAAE,IAAI,GAAG,KAAK;AAChC,QAAM,QAAQP,GAAE,CAAC,EAAE,MAAM,GAAG;AAC5B,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AACA,QAAM,OAAO,MAAM,CAAC,EAAE,YAAW;AACjC,QAAM,YAAY,MAAM,MAAM,SAAS,CAAC;AACxC,QAAM,UAAU,MAAM,MAAM,SAAS,CAAC;AACtC,QAAM,eAAe,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AACpD,QAAME,KAAI,CAAC,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG;AAC1C,QAAM,kBAAkB,oBAAoB,GAAG,GAAG,UAAU,MAAMA,EAAC,GAAG;AAEtE,SAAO;IACL,MAAM,eAAe;IACrB;IACA;IACA;IACA;IACA;;AAEJ;AAEM,SAAU,oBACd,WAAiB;AAEjB,QAAM,KAAK,eAAe,WAAW,eAAe,WAAW;AAC/D,MAAI,CAAC,IAAI;AACP,WAAO;EACT;AACA,QAAMF,KAAI,GAAG,KAAK,MAAM,GAAG;AAE3B,QAAM,QAAQA,GAAE,CAAC,EAAE,MAAM,GAAG;AAC5B,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AAEA,QAAMO,KAAI,IAAIC,iBAAgBR,GAAE,CAAC,KAAK,EAAE;AACxC,QAAM,SAAiC,CAAA;AACvC,EAAAO,GAAE,QAAQ,CAACE,IAAGC,OAAK;AACjB,WAAOA,EAAC,IAAID;EACd,CAAC;AAED,QAAM,OAAO,MAAM,CAAC,EAAE,YAAW;AACjC,QAAM,aAAa,MAAM,MAAM,SAAS,CAAC;AACzC,QAAM,eAAe,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AACpD,QAAM,kBAAkB,CAAC,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG;AACxD,QAAM,kBAAkB,oBACtB,GAAG,GAAG,UAAU,MAAM,eAAe,GAAG;AAG1C,SAAO;IACL,MAAM,eAAe;IACrB;IACA;IACA,gBAAgB;;AAEpB;AAEM,SAAU,gBAAgBR,IAAS;AACvC,QAAM,KAAK,eAAeA,IAAG,eAAe,OAAO;AACnD,MAAI,CAAC,IAAI;AACP,WAAO;EACT;AACA,QAAMD,KAAI,IAAI,KAAK,MAAM,GAAG;AAC5B,QAAM,QAAQA,GAAE,CAAC,EAAE,MAAM,GAAG;AAC5B,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AACA,QAAM,OAAO,MAAM,CAAC,EAAE,YAAW;AACjC,QAAM,eAAe,MAAM,MAAM,SAAS,CAAC;AAC3C,QAAM,eAAe,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AACpD,QAAM,kBAAkB,CAAC,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG;AACxD,QAAM,kBAAkB,oBACtB,GAAG,GAAG,UAAU,MAAM,eAAe,GAAG;AAG1C,SAAO;IACL,MAAM,eAAe;IACrB;IACA;;AAEJ;AAEM,SAAU,gBAAgBC,IAAS;AACvC,QAAM,KAAK,eAAeA,IAAG,eAAe,OAAO;AACnD,MAAI,CAAC,IAAI;AACP,WAAO;EACT;AACA,QAAMD,KAAI,IAAI,KAAK,MAAM,GAAG;AAC5B,QAAM,QAAQA,GAAE,CAAC,EAAE,MAAM,GAAG;AAC5B,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AACA,QAAM,OAAO,MAAM,CAAC,EAAE,YAAW;AACjC,QAAM,eAAe,MAAM,MAAM,SAAS,CAAC;AAC3C,QAAM,eAAe,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AACpD,QAAM,kBAAkB,CAAC,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG;AACxD,QAAM,kBAAkB,oBACtB,GAAG,GAAG,UAAU,MAAM,eAAe,GAAG;AAG1C,SAAO;IACL,MAAM,eAAe;IACrB;IACA;;AAEJ;AAEM,SAAU,yBACdC,IAAS;AAET,QAAM,KAAK,eAAeA,IAAG,mBAAmB;AAChD,MAAI,CAAC,IAAI;AACP,WAAO;EACT;AACA,QAAMD,KAAI,IAAI,KAAK,MAAM,GAAG;AAC5B,QAAM,QAAQA,GAAE,CAAC,EAAE,MAAM,GAAG;AAC5B,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AACA,QAAM,OAAO,MAAM,CAAC,EAAE,YAAW;AACjC,QAAM,cAAc,MAAM,SAAS,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI;AACjE,QAAM,eAAe,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AACpD,QAAM,kBAAkB,CAAC,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG;AACxD,QAAM,kBAAkB,oBACtB,GAAG,GAAG,UAAU,MAAM,eAAe,GAAG;AAE1C,QAAMO,KAAI,IAAIC,iBAAgBR,GAAE,CAAC,KAAK,EAAE;AACxC,QAAM,SAAUO,GAAE,IAAI,GAAG,KAAK;AAE9B,SAAO;IACL,MAAM,eAAe;IACrB;IACA,aAAa,eAAe,KAAK,cAAc;IAC/C;;AAEJ;AAMM,SAAU,eAAeN,IAAS;AACtC,QAAM,KAAK,eAAeA,IAAG,QAAQ;AACrC,MAAI,CAAC,IAAI;AACP,WAAO;EACT;AACA,QAAMD,KAAI,IAAI,KAAK,MAAM,GAAG;AAC5B,QAAM,QAAQA,GAAE,CAAC,EAAE,MAAM,GAAG;AAC5B,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AACA,QAAM,OAAO,MAAM,CAAC,EAAE,YAAW;AACjC,QAAM,YAAY,MAAM,MAAM,SAAS,CAAC;AACxC,QAAM,UAAU,MAAM,MAAM,SAAS,CAAC;AACtC,QAAM,eAAe,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AACpD,QAAM,kBAAkB,CAAC,MAAM,GAAG,YAAY,EAAE,KAAK,GAAG;AACxD,QAAM,kBAAkB,oBACtB,GAAG,GAAG,UAAU,MAAM,eAAe,GAAG;AAG1C,SAAO;IACL,MAAM,eAAe;IACrB;IACA;;AAEJ;AAEM,SAAU,sBAAsBC,IAAS;AAC7C,QAAM,KAAK,eAAeA,IAAG,gBAAgB;AAC7C,QAAMD,KAAI,IAAI,KAAK,MAAM,GAAG;AAC5B,MAAI,CAACA,IAAG;AACN,WAAO;EACT;AACA,QAAM,QAAQA,GAAE,CAAC,EAAE,MAAM,GAAG;AAC5B,SAAO;IACL,MAAM,eAAe;IACrB,iBAAiB,MAAM,CAAC;;AAE5B;AAEM,SAAU,gBAAgB,KAAW;AACzC,QAAM,KAAK,eAAe,KAAK,SAAS;AACxC,MAAI,CAAC,IAAI;AACP,WAAO;EACT;AACA,QAAMA,KAAI,GAAG,KAAK,MAAM,GAAG;AAC3B,QAAM,QAAQA,GAAE,CAAC,EAAE,MAAM,GAAG;AAC5B,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AAEA,QAAM,iBAAiB,MAAM,CAAC;AAC9B,MAAI,CAAC;AAAgB,WAAO;AAC5B,QAAM,YAAY,IAAI,MAAK;AAC3B,QAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,SAAQ;AAC/B,UAAM,MAAM,oBACV,GAAG,GAAG,UAAU,MAAM,mBAAmB,IAAI,CAAC,GAAG;AAEnD,cAAU,KAAK,GAAG;EACpB,CAAC;AACD,SAAO;IACL,MAAM,eAAe;IACrB;IACA;;AAEJ;AAMM,SAAU,gBAAgB,EAC9B,iBACA,SACA,WACA,YACA,UAAS,GACkB;AAC3B,QAAM,EAAE,OAAO,MAAM,MAAK,IAAK,WAAW,iBAAiB;IACzD,GAAG;IACH,GAAG;GACJ;AACD,SAAO,GAAG,KAAK,UAAU,IAAI,GAAG,OAAO,IAAI,SAAS,GAAG,KAAK;AAC9D;AAEM,SAAU,oBAAoB,EAClC,cACA,gBAAe,GACgB;AAC/B,QAAM,EAAE,OAAO,KAAI,IAAK,WAAW,eAAe;AAClD,SAAO,GAAG,KAAK,eAAe,IAAI,GAAG,YAAY;AACnD;AAEM,SAAU,oBAAoB,EAClC,cACA,gBAAe,GACgB;AAC/B,QAAM,EAAE,OAAO,KAAI,IAAK,WAAW,eAAe;AAElD,SAAO,GAAG,KAAK,eAAe,IAAI,GAAG,YAAY;AACnD;AAEM,SAAU,oBAAoB,EAClC,WACA,eAAc,GACiB;AAC/B,QAAM,OAAO,UACV,IAAI,CAAC,QAAQ,GAAG,mBAAmB,IAAIW,KAAI,GAAG,EAAE,IAAI,CAAC,EAAE,EACvD,KAAK,GAAG;AACX,SAAO,mBAAmB,cAAc,IAAI,IAAI;AAClD;AAEM,SAAU,0BAA0B,EACxC,iBACA,aACA,OAAM,GAC4B;AAClC,QAAM,EAAE,OAAO,MAAM,MAAK,IAAK,WAAW,iBAAiB;IACzD,GAAG;GACJ;AACD,SAAO,GAAG,KAAK,wBAAwB,IAAI,GAAG,eAAe,EAAE,GAAG,KAAK;AACzE;AAEM,SAAU,qBAAqB,EACnC,gBAAe,GACc;AAC7B,QAAM,EAAE,OAAO,KAAI,IAAK,WAAW,eAAe;AAClD,SAAO,GAAG,KAAK,mBAAmB,IAAI;AACxC;AAEM,SAAU,0BAA0B,EACxC,gBAAe,GACgB;AAC/B,SAAO,0BAA0B,eAAe;AAClD;AAEM,SAAU,wBAAwB,EACtC,iBACA,YACA,eAAc,GACqB;AACnC,QAAM,EAAE,OAAO,MAAM,MAAK,IAAK,WAAW,iBAAiB,cAAc;AACzE,SAAO,GAAG,KAAK,mBAAmB,IAAI,GAAG,UAAU,GAAG,KAAK;AAC7D;AAEM,SAAU,mBAAmB,EACjC,iBACA,QAAO,GACuB;AAC9B,QAAM,EAAE,OAAO,KAAI,IAAK,WAAW,eAAe;AAClD,SAAO,GAAG,KAAK,aAAa,IAAI,GAAG,OAAO;AAC5C;AAEM,SAAU,qBAAqB,EACnC,2BACA,sBAAqB,GACW;AAChC,QAAM,EAAE,OAAO,KAAI,IAAK,WAAW,yBAAyB;AAC5D,SAAO,GAAG,KAAK,eAAe,IAAI,GAAG,qBAAqB;AAC5D;AAOA,SAAS,WACP,SACA,SAA6C,CAAA,GAAE;AAE/C,QAAM,MAAM,IAAIA,KAAI,OAAO;AAC3B,MAAI;AACJ,MAAI,IAAI,aAAa,UAAU;AAC7B,YAAQ;EACV,WAAW,IAAI,aAAa,SAAS;AACnC,YAAQ;EACV,OAAO;AACL,UAAM,MAAM,+BAA+B,OAAO,EAAE;EACtD;AACA,MAAI,OAAO,IAAI;AACf,MAAI,IAAI,MAAM;AACZ,WAAO,OAAO,MAAM,IAAI;EAC1B;AACA,MAAI,IAAI,UAAU;AAChB,WAAO,OAAO,IAAI;EACpB;AACA,MAAI,CAAC,KAAK,SAAS,GAAG,GAAG;AACvB,WAAO,OAAO;EAChB;AAEA,QAAM,KAAK,IAAIH,iBAAe;AAC9B,MAAI,aAAa;AACjB,SAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAK;AAC/C,QAAI,UAAU,QAAW;AACvB,mBAAa;AACb,SAAG,OAAO,MAAM,KAAK;IACvB;EACF,CAAC;AACD,QAAM,QAAQ,aAAa,MAAM,GAAG,SAAQ,IAAK;AAEjD,SAAO,EAAE,OAAO,MAAM,MAAK;AAC7B;;;ACxdO,IAAM,sBAAsB;AAC5B,IAAM,+BACX,MACE,oBAAmB,EAChB,SAAS,gBAAgB,oBAAmB,CAAE,EAC9C,SAAS,cAAc,iBAAiB,EACxC,MAAM,0CAA0C;AAEhD,IAAM,uCACX,MACE,oBAAmB,EAChB,SAAS,SAAS,oBAAmB,CAAE,EACvC,SAAS,cAAc,iBAAiB,EACxC,MAAM,kDAAkD;AAExD,IAAM,iCACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,+BAA+B,eAAc,CAAE,EACxD,SAAS,gCAAgC,eAAc,CAAE,EACzD,SAAS,uCAAuC,eAAc,CAAE,EAChE,SAAS,kBAAkB,YAAY,eAAc,CAAE,CAAC,EACxD,MAAM,uBAAuB;AAuC7B,IAAM,6BACX,MACE,oBAAmB,EAChB,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,cAAc,eAAc,CAAE,EACvC,MAAM,qCAAqC;AAE3C,IAAM,yBACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,oBAAoB,gBAAgB,CAAC,EACtD,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,WAAW,eAAc,CAAE,EACpC,SAAS,cAAc,YAAY,+BAA8B,CAAE,CAAC,EACpE,SAAS,aAAa,aAAa,2BAA0B,CAAE,CAAC,EAChE,MAAM,kCAAkC;AAExC,IAAM,wBACX,MACE,oBAAmB,EAChB,SAAS,kBAAkB,sBAAqB,CAAE,EAClD,SAAS,OAAO,eAAc,CAAE,EAChC,MAAM,gCAAgC;AAEtC,IAAM,0BACX,MACE,oBAAmB,EAChB,SAAS,oBAAoB,cAAc,eAAc,CAAE,CAAC,EAC5D,SAAS,OAAO,eAAc,CAAE,EAChC,MAAM,kCAAkC;AAExC,IAAM,qBAAqB,MAChC,oBAAmB,EAChB,SAAS,iBAAiB,qBAAoB,CAAE,EAChD,SAAS,kBAAkB,gBAAe,CAAE,EAC5C,SAAS,gBAAgB,qBAAoB,CAAE,EAC/C,SAAS,YAAY,gBAAe,CAAE,EACtC,SAAS,QAAQ,oBAAoB,MAAM,CAAC,EAC5C,MAAM,6BAA6B;AAEjC,IAAM,qBACX,MACE,oBAAmB,EAChB,SAAS,sBAAsB,YAAW,CAAE,EAC5C,SAAS,QAAQ,oBAAoB,MAAM,CAAC,EAC5C,MAAM,qCAAqC;AAE3C,IAAM,6BACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,oBAAoB,QAAQ,CAAC,EAC9C,SAAS,yBAAyB,cAAc,eAAc,CAAE,CAAC,EACjE,SAAS,mBAAmB,cAAc,eAAc,CAAE,CAAC,EAC3D,SAAS,iBAAiB,uBAAsB,CAAE,EAClD,MAAM,kCAAkC;AAExC,IAAM,mCACX,MACE,oBAAmB,EAChB,SAAS,oBAAoB,cAAc,eAAc,CAAE,CAAC,EAC5D,SAAS,YAAY,gBAAe,CAAE,EACtC,MAAM,2CAA2C;AAEjD,IAAM,8CACX,MACE,oBAAmB,EAChB,SAAS,gBAAgB,eAAc,CAAE,EACzC,SAAS,gBAAgB,eAAc,CAAE,EACzC,SAAS,mBAAmB,oBAAoB,GAAG,CAAC,EACpD,SAAS,QAAQ,oBAAoB,SAAS,CAAC,EAC/C,MAAM,sDAAsD;AAE5D,IAAM,8CACX,MACE,oBAAmB,EAChB,SAAS,iBAAiB,eAAc,CAAE,EAC1C,SAAS,kBAAkB,YAAW,CAAE,EACxC,SAAS,mBAAmB,eAAc,CAAE,EAC5C,SAAS,QAAQ,oBAAoB,SAAS,CAAC,EAC/C,MAAM,sDAAsD;AAE5D,IAAM,uCACX,MACE,mBAAkB,EACf,eAAe,MAAM,EACrB,YAAY,WAAW,4CAA2C,CAAE,EACpE,YAAY,WAAW,4CAA2C,CAAE,EACpE,MAAM,+CAA+C;AAErD,IAAM,wBACX,MACE,oBAAmB,EAChB,SAAS,WAAW,aAAa,qCAAoC,CAAE,CAAC,EACxE,MAAM,gCAAgC;AAEtC,IAAM,+BACX,MACE,oBAAmB,EAChB,SAAS,gBAAgB,eAAc,CAAE,EACzC,SAAS,iBAAiB,qBAAoB,CAAE,EAChD,SAAS,WAAW,aAAa,iCAAgC,CAAE,CAAC,EACpE,MAAM,gCAAgC;AAEtC,IAAM,0CACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,oBAAoB,SAAS,CAAC,EAC/C,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,mBAAmB,oBAAoB,GAAG,CAAC,EACpD,SAAS,gBAAgB,eAAc,CAAE,EACzC,SAAS,mBAAmB,eAAc,CAAE,EAC5C,SAAS,iBAAiB,qBAAoB,CAAE,EAChD,SAAS,gBAAgB,eAAc,CAAE,EACzC,SAAS,kBAAkB,iBAAiB,EAC5C,MAAM,kDAAkD;AAExD,IAAM,0CACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,oBAAoB,SAAS,CAAC,EAC/C,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,mBAAmB,eAAc,CAAE,EAC5C,SAAS,mBAAmB,eAAc,CAAE,EAC5C,SAAS,iBAAiB,qBAAoB,CAAE,EAChD,SAAS,iBAAiB,cAAc,eAAc,CAAE,CAAC,EACzD,SAAS,kBAAkB,cAAc,YAAW,CAAE,CAAC,EACvD,SAAS,kBAAkB,iBAAiB,EAC5C,MAAM,kDAAkD;AAExD,IAAM,mCACX,MACE,mBAAkB,EACf,eAAe,MAAM,EACrB,YAAY,WAAW,wCAAuC,CAAE,EAChE,YAAY,WAAW,wCAAuC,CAAE,EAChE,MAAM,2CAA2C;AAEjD,IAAM,iCACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,aAAa,eAAc,CAAE,EACtC,SAAS,SAAS,cAAc,eAAc,CAAE,CAAC,EACjD,SAAS,WAAW,cAAc,eAAc,CAAE,CAAC,EACnD,SAAS,QAAQ,cAAc,eAAc,CAAE,CAAC,EAChD,SAAS,gBAAgB,eAAc,CAAE,EACzC,SAAS,WAAW,iBAAgB,CAAE,EACtC,SAAS,gBAAgB,iBAAgB,CAAE,EAC3C,SAAS,cAAc,gBAAe,CAAE,EACxC,SAAS,+BAA+B,gBAAgB,EACxD,SAAS,qBAAqB,gBAAgB,EAC9C,SACC,QACA,oBAAmB,EAGhB,SACC,UACA,eACE,oBAAoB,OAAO,GAC3B,oBAAoB,UAAU,CAAC,CAChC,EAEF,MAAM,8CAA8C,CAAC,EAEzD,MAAM,yCAAyC;AAE/C,IAAM,8BACX,MACE,oBAAmB,EAChB,SACC,gBACA,aAAa,mCAAkC,CAAE,CAAC,EAEnD,SAAS,gBAAgB,aAAa,2BAA0B,CAAE,CAAC,EAEnE,MAAM,sCAAsC;AAE5C,IAAM,qCACX,MACE,oBAAmB,EAChB,SAAS,WAAW,YAAW,CAAE,EACjC,SAAS,cAAc,eAAc,CAAE,EACvC,SAAS,gBAAgB,YAAW,CAAE,EACtC,SAAS,aAAa,oBAAmB,CAAE,EAC3C,MAAM,6CAA6C;AAEnD,IAAM,6BACX,MACE,oBAAmB,EAChB,SAAS,gBAAgB,YAAW,CAAE,EACtC,SAAS,iBAAiB,eAAc,CAAE,EAC1C,SAAS,wBAAwB,eAAc,CAAE,EACjD,MAAM,qCAAqC;AAE3C,IAAM,6BACX,MACE,oBAAmB,EAChB,SAAS,UAAU,eAAc,CAAE,EACnC,SAAS,QAAQ,eAAc,CAAE,EACjC,MAAM,qCAAqC;AAE3C,IAAM,kCACX,MACE,oBAAmB,EAChB,SAAS,YAAY,aAAa,gCAA+B,CAAE,CAAC,EACpE,MAAM,0CAA0C;AAEhD,IAAM,kCACX,MACE,oBAAmB,EAChB,SAAS,aAAa,oBAAmB,CAAE,EAC3C,SAAS,UAAU,eAAc,CAAE,EACnC,MAAM,0CAA0C;AAEhD,IAAM,2BACX,MACE,oBAAmB,EAChB,SAAS,aAAa,oBAAmB,CAAE,EAC3C,SAAS,UAAU,eAAc,CAAE,EACnC,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,qBAAqB,cAAc,YAAW,CAAE,CAAC,EAC1D,SAAS,UAAU,cAAc,gBAAe,CAAE,CAAC,EACnD,MAAM,mCAAmC;AAEzC,IAAM,mCACX,MACE,oBAAmB,EAChB,SAAS,YAAY,aAAa,uBAAsB,CAAE,CAAC,EAC3D,MAAM,2CAA2C;AAEjD,IAAM,yBACX,MACE,oBAAmB,EAChB,SAAS,cAAc,eAAc,CAAE,EACvC,SAAS,kBAAkB,eAAc,CAAE,EAC3C,MAAM,iCAAiC;AAEvC,IAAM,wBACX,MACE,oBAAmB,EAChB,SAAS,eAAe,eAAc,CAAE,EACxC,SAAS,oBAAoB,gCAA+B,CAAE,EAC9D,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,SAAS,qBAAoB,CAAE,EACxC,SAAS,SAAS,eAAc,CAAE,EAClC,SAAS,SAAS,aAAa,YAAW,CAAE,CAAC,EAC7C,SAAS,WAAW,iBAAgB,CAAE,EACtC,SAAS,gBAAgB,iBAAiB,EAC1C,SAAS,eAAe,eAAc,CAAE,EACxC,SAAS,cAAc,eAAc,CAAE,EACvC,SAAS,cAAc,eAAc,CAAE,EACvC,SAAS,eAAe,cAAc,eAAc,CAAE,CAAC,EACvD,MAAM,gCAAgC;AAEtC,IAAM,cAAc,MACzB,oBAAmB,EAChB,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,OAAO,qBAAoB,CAAE,EACtC,MAAM,sBAAsB;AAE1B,IAAM,4BACX,MACE,oBAAmB,EAChB,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,SAAS,cAAc,eAAc,CAAE,CAAC,EACjD,MAAM,oCAAoC;AAE1C,IAAM,6BACX,MACE,oBAAmB,EAChB,SAAS,cAAc,eAAc,CAAE,EACvC,SAAS,sBAAsB,eAAc,CAAE,EAC/C,SAAS,sBAAsB,eAAc,CAAE,EAC/C,SAAS,oBAAoB,iBAAiB,EAC9C,MAAM,qCAAqC;AAE3C,IAAM,uBAAuB,MAClC,oBAAmB,EAChB,SAAS,UAAU,aAAa,0BAAyB,CAAE,CAAC,EAC5D,MAAM,+BAA+B;AAEnC,IAAM,4BACX,MACE,oBAAmB,EAChB,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,UAAU,eAAc,CAAE,EACnC,SAAS,aAAa,iBAAiB,EACvC,SAAS,UAAU,qBAAoB,CAAE,EACzC,SAAS,WAAW,eAAc,CAAE,EACpC,SAAS,cAAc,gBAAe,CAAE,EACxC,SAAS,QAAQ,gBAAe,CAAE,EAClC,MAAM,oCAAoC;AAE1C,IAAM,mBAAmB,MAC9B,oBAAmB,EAChB,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,SAAS,cAAc,eAAc,CAAE,CAAC,EACjD,SAAS,QAAQ,cAAc,eAAc,CAAE,CAAC,EAChD,SAAS,WAAW,cAAc,eAAc,CAAE,CAAC,EACnD,SAAS,WAAW,cAAc,iBAAgB,CAAE,CAAC,EACrD,SAAS,gBAAgB,cAAc,iBAAgB,CAAE,CAAC,EAC1D,MAAM,+BAA+B;AAEnC,IAAM,mBAAmB,MAC9B,oBAAmB,EAChB,SAAS,cAAc,eAAc,CAAE,EACvC,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,OAAO,eAAc,CAAE,EAChC,MAAM,2BAA2B;AAE/B,IAAM,wBACX,MACE,oBAAmB,EAChB,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,mBAAmB,cAAc,eAAc,CAAE,CAAC,EAC3D,SAAS,uBAAuB,cAAc,eAAc,CAAE,CAAC,EAC/D,SACC,4BACA,cAAc,gCAA+B,CAAE,CAAC,EAEjD,SAAS,qBAAqB,eAAc,CAAE,EAC9C,SAAS,UAAU,eAAc,CAAE,EACnC,SAAS,eAAe,cAAc,gBAAgB,CAAC,EACvD,SAAS,eAAe,eAAc,CAAE,EACxC,SAAS,WAAW,eAAc,CAAE,EACpC,SACC,gBACA,cAAc,gCAA+B,CAAE,CAAC,EAEjD,SAAS,SAAS,eAAc,CAAE,EAClC,SAAS,UAAU,qBAAoB,CAAE,EACzC,SAAS,gBAAgB,iBAAiB,EAC1C,SAAS,mBAAmB,iBAAiB,EAC7C,SAAS,0BAA0B,iBAAiB,EACpD,SAAS,aAAa,iBAAiB,EACvC,SAAS,qBAAqB,cAAc,iBAAgB,CAAE,CAAC,EAC/D,SAAS,iBAAiB,cAAc,iBAAiB,CAAC,EAC1D,SAAS,WAAW,qBAAoB,CAAE,EAC1C,SAAS,YAAY,iBAAgB,CAAE,EACvC,SAAS,gBAAgB,eAAc,CAAE,EACzC,SAAS,aAAa,aAAa,iBAAgB,CAAE,CAAC,EACtD,SAAS,YAAY,aAAa,gBAAe,CAAE,CAAC,EACpD,SAAS,SAAS,YAAW,CAAE,EAC/B,MAAM,gCAAgC;AAEtC,IAAM,kBAAkB,MAC7B,oBAAmB,EAChB,SAAS,cAAc,cAAc,eAAc,CAAE,CAAC,EACtD,SAAS,eAAe,eAAc,CAAE,EACxC,SACC,oBACA,cAAc,gCAA+B,CAAE,CAAC,EAEjD,SAAS,YAAY,cAAc,eAAc,CAAE,CAAC,EACpD,SAAS,QAAQ,cAAc,eAAc,CAAE,CAAC,EAChD,SAAS,SAAS,cAAc,qBAAoB,CAAE,CAAC,EACvD,SAAS,SAAS,cAAc,eAAc,CAAE,CAAC,EACjD,SAAS,SAAS,cAAc,aAAa,YAAW,CAAE,CAAC,CAAC,EAC5D,SAAS,iBAAiB,cAAc,iBAAiB,CAAC,EAC1D,MAAM,0BAA0B;AAE9B,IAAM,mCACX,MACE,oBAAmB,EAChB,SAAS,gBAAgB,oBAAoB,MAAM,CAAC,EACpD,SAAS,YAAY,gBAAe,CAAE,EACtC,SAAS,kBAAkB,gBAAe,CAAE,EAC5C,SAAS,SAAS,gBAAe,CAAE,EACnC,SAAS,iBAAiB,qBAAoB,CAAE,EAChD,SAAS,iBAAiB,eAAc,CAAE,EAC1C,SAAS,wBAAwB,eAAc,CAAE,EACjD,SAAS,iBAAiB,qBAAoB,CAAE,EAChD,SAAS,kBAAkB,sBAAqB,CAAE,EAClD,SAAS,gBAAgB,aAAa,8BAA6B,CAAE,CAAC,EACtE,SAAS,gBAAgB,aAAa,gCAA+B,CAAE,CAAC,EACxE,SAAS,kBAAkB,aAAa,sBAAqB,CAAE,CAAC,EAChE,SAAS,oBAAoB,YAAW,CAAE,EAC1C,MAAM,2CAA2C;AAEjD,IAAM,qCACX,MACE,oBAAmB,EAChB,SAAS,gBAAgB,oBAAoB,QAAQ,CAAC,EACtD,SAAS,iBAAiB,uBAAsB,CAAE,EAClD,SAAS,iBAAiB,iBAAiB,EAC3C,SAAS,WAAW,eAAc,CAAE,EACpC,SAAS,gBAAgB,qBAAoB,CAAE,EAC/C,SAAS,yBAAyB,cAAc,eAAc,CAAE,CAAC,EACjE,SAAS,gCAAgC,cAAc,eAAc,CAAE,CAAC,EACxE,SAAS,oBAAoB,eAAc,CAAE,EAC7C,MAAM,2CAA2C;AAEjD,IAAM,sCACX,MACE,oBAAmB,EAChB,SAAS,gBAAgB,oBAAoB,SAAS,CAAC,EACvD,SAAS,kBAAkB,sBAAqB,CAAE,EAClD,MAAM,8CAA8C;AAEpD,IAAM,6CACX,MACE,mBAAkB,EACf,eAAe,cAAc,EAC7B,YAAY,QAAQ,iCAAgC,CAAE,EACtD,YAAY,UAAU,mCAAkC,CAAE,EAC1D,YAAY,WAAW,oCAAmC,CAAE,EAC5D,MAAM,8CAA8C;AAEpD,IAAM,wBACX,MACE,oBAAmB,EAChB,SAAS,UAAU,eAAc,CAAE,EACnC,SAAS,WAAW,gBAAe,CAAE,EACrC,SAAS,aAAa,iBAAiB,EACvC,SAAS,UAAU,qBAAoB,CAAE,EACzC,MAAM,gCAAgC;AAEtC,IAAM,kCACX,MACE,oBAAmB,EAChB,SAAS,gBAAgB,YAAW,CAAE,EACtC,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,kBAAkB,iBAAiB,EAC5C,SAAS,UAAU,qBAAoB,CAAE,EACzC,SAAS,aAAa,gBAAe,CAAE,EACvC,MAAM,0CAA0C;AAEhD,IAAM,gCACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,iBAAiB,eAAc,CAAE,EAC1C,SAAS,wBAAwB,eAAc,CAAE,EACjD,SAAS,YAAY,eAAc,CAAE,EACrC,MAAM,wCAAwC;AAE9C,IAAM,iCACX,MACE,oBAAmB,EAChB,SAAS,oBAAoB,uBAAsB,CAAE,EACrD,SAAS,cAAc,eAAc,CAAE,EACvC,MAAM,yCAAyC;AAE/C,IAAM,sBAAsB,MACjC,oBAAmB,EAChB,SAAS,aAAa,aAAa,wBAAuB,CAAE,CAAC,EAC7D,MAAM,+BAA+B;AAEnC,IAAM,0BACX,MACE,oBAAmB,EAChB,SAAS,iBAAiB,qBAAoB,CAAE,EAChD,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,aAAa,oBAAmB,CAAE,EAC3C,SAAS,gBAAgB,YAAW,CAAE,EACtC,SAAS,sBAAsB,eAAc,CAAE,EAC/C,SAAS,kBAAkB,cAAc,iBAAiB,CAAC,EAC3D,SAAS,YAAY,cAAc,gBAAe,CAAE,CAAC,EACrD,SAAS,aAAa,cAAc,gBAAe,CAAE,CAAC,EACtD,MAAM,kCAAkC;AAExC,IAAM,mCACX,MACE,oBAAmB,EAChB,SAAS,eAAe,aAAa,uBAAsB,CAAE,CAAC,EAC9D,MAAM,2CAA2C;AAEjD,IAAM,yBACX,MACE,oBAAmB,EAChB,SAAS,iBAAiB,eAAc,CAAE,EAC1C,SAAS,sBAAsB,eAAc,CAAE,EAC/C,MAAM,iCAAiC;AAEvC,IAAM,2BACX,MACE,oBAAmB,EAChB,SAAS,sBAAsB,eAAc,CAAE,EAC/C,SAAS,iBAAiB,eAAc,CAAE,EAC1C,SAAS,WAAW,cAAc,eAAc,CAAE,CAAC,EACnD,SAAS,iBAAiB,eAAc,CAAE,EAC1C,SAAS,YAAY,cAAc,eAAc,CAAE,CAAC,EACpD,MAAM,mCAAmC;AAEzC,IAAM,kCACX,MACE,oBAAmB,EAChB,SAAS,aAAa,aAAa,sBAAqB,CAAE,CAAC,EAC3D,MAAM,0CAA0C;AAEhD,IAAM,wBACX,MACE,oBAAmB,EAChB,SAAS,eAAe,eAAc,CAAE,EACxC,SAAS,wBAAwB,eAAc,CAAE,EACjD,MAAM,gCAAgC;AAEtC,IAAM,0BACX,MACE,oBAAmB,EAChB,SAAS,wBAAwB,eAAc,CAAE,EACjD,SAAS,UAAU,cAAc,eAAc,CAAE,CAAC,EAClD,SAAS,qBAAqB,gCAA+B,CAAE,EAC/D,SAAS,qBAAqB,cAAc,eAAc,CAAE,CAAC,EAC7D,SAAS,qBAAqB,cAAc,wCAAuC,CAAE,CAAC,EACtF,MAAM,kCAAkC;AAExC,IAAM,kCACX,MACE,oBAAmB,EAChB,SAAS,WAAW,cAAc,eAAc,CAAE,CAAC,EACnD,SAAS,YAAY,cAAc,eAAc,CAAE,CAAC,EACpD,SAAS,UAAU,cAAc,qBAAoB,CAAE,CAAC,EACxD,SAAS,eAAe,eAAc,CAAE,EACxC,SAAS,gBAAgB,gBAAgB,EACzC,MAAM,0CAA0C;AAEhD,IAAM,0CACX,MACE,oBAAmB,EAChB,SAAS,WAAW,cAAc,eAAc,CAAE,CAAC,EACnD,SAAS,YAAY,cAAc,eAAc,CAAE,CAAC,EACpD,SAAS,UAAU,cAAc,qBAAoB,CAAE,CAAC,EACxD,SAAS,eAAe,cAAc,eAAc,CAAE,CAAC,EACvD,SAAS,gBAAgB,cAAc,gBAAgB,CAAC,EACxD,MAAM,kDAAkD;AAExD,IAAM,gCACX,MACE,oBAAmB,EAChB,SAAS,qBAAqB,gCAA+B,CAAE,EAC/D,SAAS,qBAAqB,cAAc,eAAc,CAAE,CAAC,EAC7D,SAAS,qBAAqB,cAAc,wCAAuC,CAAE,CAAC,EACtF,MAAM,wCAAwC;AAE9C,IAAM,iCACX,MACE,oBAAmB,EAChB,SAAS,YAAY,aAAa,qBAAoB,CAAE,CAAC,EACzD,MAAM,yCAAyC;AAE/C,IAAM,uBAAuB,MAClC,oBAAmB,EAChB,SAAS,cAAc,eAAc,CAAE,EACvC,SAAS,cAAc,eAAc,CAAE,EACvC,MAAM,+BAA+B;AAEnC,IAAM,yBACX,MACE,oBAAmB,EAChB,SAAS,cAAc,eAAc,CAAE,EACvC,SAAS,OAAO,eAAc,CAAE,EAChC,SAAS,eAAe,eAAc,CAAE,EACxC,SAAS,mBAAmB,cAAc,eAAc,CAAE,CAAC,EAC3D,SAAS,iBAAiB,cAAc,eAAc,CAAE,CAAC,EACzD,MAAM,iCAAiC;AAEvC,IAAM,0BACX,MACE,eACE,oBAAoB,UAAU,GAC9B,oBAAoB,cAAc,CAAC;AAElC,IAAM,6BACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,eAAe,eAAc,CAAE,EACxC,SAAS,oBAAoB,gCAA+B,CAAE,EAC9D,SAAS,eAAe,iBAAiB,EACzC,SAAS,gBAAgB,iBAAiB,EAC1C,SAAS,YAAY,gBAAgB,EACrC,SAAS,QAAQ,wBAAuB,CAAE,EAC1C,SAAS,UAAU,eAAc,CAAE,EACnC,SAAS,YAAY,eAAc,CAAE,EACrC,MAAM,qCAAqC;AAE3C,IAAM,4BACX,MACE,oBAAmB,EAChB,SAAS,kBAAkB,aAAa,2BAA0B,CAAE,CAAC,EACrE,MAAM,oCAAoC;AAE1C,IAAM,6BACX,MACE,oBAAmB,EAChB,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,eAAe,iBAAiB,EACzC,SAAS,gBAAgB,iBAAiB,EAC1C,SAAS,QAAQ,wBAAuB,CAAE,EAC1C,MAAM,qCAAqC;AAE3C,IAAM,4BACX,MACE,oBAAmB,EAChB,SAAS,aAAa,aAAa,iBAAgB,CAAE,CAAC,EACtD,MAAM,oCAAoC;AAE1C,IAAM,mBAAmB,MAC9B,oBAAmB,EAChB,SAAS,QAAQ,eAAc,CAAE,EACjC,SAAS,aAAa,eAAc,CAAE,EACtC,SAAS,WAAW,cAAc,eAAc,CAAE,CAAC,EACnD,SAAS,QAAQ,cAAc,eAAc,CAAE,CAAC,EAChD,SAAS,MAAM,eAAc,CAAE,EAC/B,SAAS,gBAAgB,eAAc,CAAE,EACzC,SAAS,mBAAmB,aAAa,eAAc,CAAE,CAAC,EAC1D,SAAS,WAAW,gBAAe,CAAE,EACrC,MAAM,2BAA2B;AA6S/B,IAAM,wBAAwB,MACnC,oBAAmB,EAChB,SAAS,QAAQ,oBAAoB,eAAe,CAAC,EACrD,SAAS,WAAW,eAAc,CAAE,EACpC,SAAS,YAAY,eAAc,CAAE,EACrC,SAAS,kBAAkB,cAAc,eAAc,CAAE,CAAC,EAC1D,MAAM,+BAA+B;AAEnC,IAAM,iCACX,MACE,oBAAmB,EAChB,SAAS,kBAAkB,oBAAmB,CAAE,EAChD,SACC,yBACA,aAAa,uCAAsC,CAAE,CAAC,EAEvD,MAAM,yCAAyC;AAE/C,IAAM,yCACX,MACE,oBAAmB,EAChB,SAAS,UAAU,qBAAoB,CAAE,EACzC,SAAS,QAAQ,iBAAiB,EAClC,SAAS,iBAAiB,oBAAmB,CAAE,EAC/C,SAAS,UAAU,eAAc,CAAE,EACnC,SAAS,WAAW,eAAc,CAAE,EACpC,MAAM,gDAAgD;AA4R7D,IAAM,cAAc;AA2Zd,IAAW;CAAjB,SAAiBI,mBAAgB;AA8Z/B,MAAY;AAAZ,GAAA,SAAYC,wBAAqB;AAC/B,IAAAA,uBAAAA,uBAAA,MAAA,IAAA,CAAA,IAAA;AACA,IAAAA,uBAAAA,uBAAA,KAAA,IAAA,CAAA,IAAA;AACA,IAAAA,uBAAAA,uBAAA,OAAA,IAAA,CAAA,IAAA;AACA,IAAAA,uBAAAA,uBAAA,MAAA,IAAA,CAAA,IAAA;AACA,IAAAA,uBAAAA,uBAAA,QAAA,IAAA,CAAA,IAAA;EACF,GANY,wBAAAD,kBAAA,0BAAAA,kBAAA,wBAAqB,CAAA,EAAA;AA6FjC,MAAY;AAAZ,GAAA,SAAYE,aAAU;AACpB,IAAAA,YAAA,KAAA,IAAA;AACA,IAAAA,YAAA,OAAA,IAAA;EACF,GAHY,aAAAF,kBAAA,eAAAA,kBAAA,aAAU,CAAA,EAAA;AAIxB,GA/fiB,qBAAA,mBAAgB,CAAA,EAAA;AAigB3B,IAAW;CAAjB,SAAiBG,mBAAgB;AAC/B,MAAY;AAAZ,GAAA,SAAYC,WAAQ;AAClB,IAAAA,UAAAA,UAAA,QAAA,IAAA,CAAA,IAAA;AACA,IAAAA,UAAAA,UAAA,SAAA,IAAA,CAAA,IAAA;AACA,IAAAA,UAAAA,UAAA,QAAA,IAAA,CAAA,IAAA;EACF,GAJY,WAAAD,kBAAA,aAAAA,kBAAA,WAAQ,CAAA,EAAA;AA+jBtB,GAhkBiB,qBAAA,mBAAgB,CAAA,EAAA;AAkkB3B,IAAW;CAAjB,SAAiBE,oBAAgB;AAiyD/B,MAAY;AAAZ,GAAA,SAAYC,kBAAe;AACzB,IAAAA,iBAAA,UAAA,IAAA;AACA,IAAAA,iBAAA,cAAA,IAAA;EACF,GAHY,kBAAAD,mBAAA,oBAAAA,mBAAA,kBAAe,CAAA,EAAA;AAyU7B,GA1mEiB,qBAAA,mBAAgB,CAAA,EAAA;;;ACj+FjC,IAAY;CAAZ,SAAYE,iBAAc;AAQxB,EAAAA,gBAAAA,gBAAA,UAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,oBAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,YAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,IAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,SAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,UAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,WAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,cAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,gBAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,aAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,iBAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,QAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,iBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,kBAAA,IAAA,GAAA,IAAA;AAUA,EAAAA,gBAAAA,gBAAA,OAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,UAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,aAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,UAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,aAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,mBAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,mBAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,YAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,cAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,iBAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,WAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,UAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,kBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,eAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,gBAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,UAAA,IAAA,GAAA,IAAA;AASA,EAAAA,gBAAAA,gBAAA,MAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,gBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,oBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,iBAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,YAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,mBAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,YAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,oBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,QAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,kBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,iBAAA,IAAA,GAAA,IAAA;AAQA,EAAAA,gBAAAA,gBAAA,sBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,iBAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,6BAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,4BAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,gBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,YAAA,IAAA,GAAA,IAAA;AAMA,EAAAA,gBAAAA,gBAAA,oBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,gBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,yBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,uBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,qBAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,cAAA,IAAA,GAAA,IAAA;AAKA,EAAAA,gBAAAA,gBAAA,aAAA,IAAA,GAAA,IAAA;AAOA,EAAAA,gBAAAA,gBAAA,+BAAA,IAAA,GAAA,IAAA;AACF,GArXY,mBAAA,iBAAc,CAAA,EAAA;;;ACyBpB,IAAO,cAAP,MAAkB;EACtB,MACE,KACA,KAAoC;AAEpC,UAAM,IAAI,MAAM,yBAAyB;EAC3C;;;;ACJI,SAAU,sBACd,MAAyB;AAEzB,SAAO,IAAS,YAAY,IAAI;AAClC;;;ACOM,IAAW;CAAjB,SAAiBC,iBAAc;AAI7B,WAAgBC,SACd,IACA,OAAa;AAEb,UAAM,QAAQ,aAAa,EAAE;AAC7B,UAAM,WAAW,aAAa,KAAK;AAEnC,QAAI,EAAE,SAAS,WAAW;AACxB,aAAO;IACT;AAEA,UAAM,aACJ,MAAM,UAAU,MAAM,OAAO,SAAS,WACtC,MAAM,WAAW,SAAS,UAAU,SAAS;AAE/C,UAAM,aAAa,KAAK,KAAK,MAAM,UAAU,SAAS,OAAO;AAE7D,WAAO,EAAE,YAAY,WAAU;EACjC;AAlBgB,EAAAD,gBAAA,UAAOC;AAoBvB,WAAgB,aAAaC,IAAS;AACpC,UAAM,CAAC,YAAY,aAAa,QAAQ,GAAG,IAAI,IAAIA,GAAE,MAAM,GAAG;AAC9D,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO;IACT;AACA,UAAM,UAAU,OAAO,SAAS,UAAU;AAC1C,UAAM,WAAW,OAAO,SAAS,WAAW;AAC5C,UAAM,MAAM,OAAO,SAAS,MAAM;AAElC,QAAI,OAAO,MAAM,OAAO,GAAG;AACzB,aAAO;IACT;AAEA,QAAI,OAAO,MAAM,QAAQ,GAAG;AAC1B,aAAO;IACT;AAEA,QAAI,OAAO,MAAM,GAAG,GAAG;AACrB,aAAO;IACT;AAEA,WAAO,EAAE,SAAS,UAAU,IAAG;EACjC;AAtBgB,EAAAF,gBAAA,eAAY;AAuB9B,GA/CiB,mBAAA,iBAAc,CAAA,EAAA;;;ACS/B,IAAMG,UAAS,IAAI,OAAO,sBAAsB;;;AC7BhD,IAAMC,UAAS,IAAI,OAAO,qBAAqB;AAK/C,IAAM,iBAAiB;AAKvB,IAAM,iBAAiB;AAKvB,IAAM,eAAe;AAKrB,IAAM,cAAN,MAAiB;EAAjB,cAAA;AACE,SAAA,eAAuB;AACvB,SAAA,eAAuB;AACvB,SAAA,aAAqB;AACb,SAAA,aAAa,aAAa,IAAG;EAmDvC;EAjDU,SAAM;AACZ,UAAMC,OAAM,aAAa,IAAG;AAC5B,QAAI,aAAa,IAAIA,MAAK,KAAK,UAAU,IAAI,GAAG;AAE9C,WAAK,aAAaA;AAClB;IACF;AACA,UAAMC,KAAI,aAAa,WAAWD,MAAK,KAAK,UAAU;AACtD,QAAIC,GAAE,SAAS,WAAW;AACxB,YAAM,MAAM,kBAAkB;IAChC;AACA,SAAK,eAAe,KAAK,IACvB,gBACA,KAAK,eAAeA,GAAE,OAAO,GAAI;AAEnC,SAAK,eAAe,KAAK,IACvB,gBACA,KAAK,eAAeA,GAAE,OAAO,MAAO,EAAE;AAExC,SAAK,aAAa,KAAK,IACrB,cACA,KAAK,aAAaA,GAAE,OAAO,MAAO,KAAK,EAAE;AAE3C,SAAK,aAAaD;EACpB;;;;;EAMA,gBAAa;AACX,SAAK,OAAM;AACX,QAAI,KAAK,eAAe,GAAG;AACzB,MAAAD,QAAO,KAAK,+CAA+C;AAC3D,aAAO;IACT;AACA,QAAI,KAAK,eAAe,GAAG;AACzB,MAAAA,QAAO,KAAK,+CAA+C;AAC3D,aAAO;IACT;AACA,QAAI,KAAK,aAAa,GAAG;AACvB,MAAAA,QAAO,KAAK,6CAA6C;AACzD,aAAO;IACT;AACA,SAAK;AACL,SAAK;AACL,SAAK;AACL,WAAO;EACT;;AAQI,IAAO,mBAAP,MAAuB;EAA7B,cAAA;AACU,SAAA,gBAAmD,CAAA;EAyC7D;;;;;;EAlCU,SAAS,QAAc;AAC7B,UAAMG,KAAI,KAAK,cAAc,MAAM;AACnC,QAAIA,IAAG;AACL,aAAOA;IACT;AACA,UAAM,KAAM,KAAK,cAAc,MAAM,IAAI,IAAI,YAAW;AACxD,WAAO;EACT;;;;;;EAOA,cAAc,YAAkB;AAC9B,UAAM,SAAS,IAAI,IAAI,UAAU,EAAE;AACnC,WAAO,KAAK,SAAS,MAAM,EAAE,cAAa;EAC5C;;;;EAKA,iBAAiB,YAAkB;AACjC,UAAM,SAAS,IAAI,IAAI,UAAU,EAAE;AACnC,UAAM,QAAQ,KAAK,SAAS,MAAM;AAClC,WAAO;MACL,YAAY,MAAM;MAClB,cAAc,MAAM;MACpB,cAAc,MAAM;MACpB,eAAe;MACf,iBAAiB;MACjB,iBAAiB;;EAErB;;;;ACnGF,IAAY;CAAZ,SAAYC,yBAAsB;AAChC,EAAAA,wBAAA,UAAA,IAAA;AACA,EAAAA,wBAAA,QAAA,IAAA;AACA,EAAAA,wBAAA,QAAA,IAAA;AACA,EAAAA,wBAAA,SAAA,IAAA;AACF,GALY,2BAAA,yBAAsB,CAAA,EAAA;;;ACrBlC,IAAMC,UAAS,IAAI,OAAO,uBAAuB;;;ACwBjD,IAAMC,UAAS,IAAI,OAAO,oBAAoB;AAE9C,IAAY;CAAZ,SAAYC,uBAAoB;AAC9B,EAAAA,sBAAA,QAAA,IAAA;AACA,EAAAA,sBAAA,OAAA,IAAA;AACF,GAHY,yBAAA,uBAAoB,CAAA,EAAA;;;ACxC1B,SAAU,sBAAsB,aAAwB;AAC5D,MAAI,SAAS;AACb,MAAIC,aACF;AAEF,MAAI,QAAQ,IAAI,WAAW,WAAW;AACtC,MAAI,aAAa,MAAM;AACvB,MAAI,gBAAgB,aAAa;AACjC,MAAI,aAAa,aAAa;AAE9B,MAAIC,IAAGC,IAAGC,IAAGC;AACb,MAAI;AAGJ,WAASC,KAAI,GAAGA,KAAI,YAAYA,KAAIA,KAAI,GAAG;AAEzC,YAAS,MAAMA,EAAC,KAAK,KAAO,MAAMA,KAAI,CAAC,KAAK,IAAK,MAAMA,KAAI,CAAC;AAG5D,IAAAJ,MAAK,QAAQ,aAAa;AAC1B,IAAAC,MAAK,QAAQ,WAAW;AACxB,IAAAC,MAAK,QAAQ,SAAS;AACtB,IAAAC,KAAI,QAAQ;AAGZ,cAAUJ,WAAUC,EAAC,IAAID,WAAUE,EAAC,IAAIF,WAAUG,EAAC,IAAIH,WAAUI,EAAC;EACpE;AAGA,MAAI,iBAAiB,GAAG;AACtB,YAAQ,MAAM,UAAU;AAExB,IAAAH,MAAK,QAAQ,QAAQ;AAGrB,IAAAC,MAAK,QAAQ,MAAM;AAEnB,cAAUF,WAAUC,EAAC,IAAID,WAAUE,EAAC,IAAI;EAC1C,WAAW,iBAAiB,GAAG;AAC7B,YAAS,MAAM,UAAU,KAAK,IAAK,MAAM,aAAa,CAAC;AAEvD,IAAAD,MAAK,QAAQ,UAAU;AACvB,IAAAC,MAAK,QAAQ,SAAS;AAGtB,IAAAC,MAAK,QAAQ,OAAO;AAEpB,cAAUH,WAAUC,EAAC,IAAID,WAAUE,EAAC,IAAIF,WAAUG,EAAC,IAAI;EACzD;AAEA,SAAO;AACT;;;ACpCA,IAAMG,UAAS,IAAI,OAAO,kBAAkB;AAEtC,IAAW;CAAjB,SAAiBC,oBAAiB;AAChC,WAAgB,cACd,SACA,MACA,MAAmB;AAEnB,UAAM,MAAM,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AAC9C,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,eAASC,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACnC,YAAIA,EAAC,IAAI,cAAc,IAAIA,EAAC,GAAG,CAAC,GAAG,MAAM,GAAGA,EAAC,EAAE,GAAG,IAAI;MACxD;IACF,WAAW,OAAO,QAAQ,YAAY,OAAO,MAAM;AACjD,UAAI,OAAO,IAAI,iBAAiB,UAAU;AACxC,mBAAWC,MAAK,OAAO,KAAK,IAAI,YAAY,GAAG;AAC7C,cAAI,CAAC,KAAK,CAAC,GAAG,MAAMA,EAAC,CAAC,GAAG;AACvB;UACF;AACA,cAAI,CAAC,IAAI,YAAY;AACnB,gBAAI,aAAa,CAAA;UACnB;AACA,cAAI,CAAC,IAAI,WAAWA,EAAC,GAAG;AACtB,kBAAM,eAAe,cACnB,cAAc,MAAM,IAAIA,EAAC,CAAC,CAAC,IAAI,IAAI;AAErC,kBAAM,WAAW,cAAc,IAAI,aAAaA,EAAC,IAAI,IAAI;AACzD,kBAAMC,KAAI,IAAI,IAAI,cAAc,UAAU,IAAI,WAAW,CAAA,CAAE,CAAC;AAC5D,gBAAI,WAAWD,EAAC,IAAI,YAAYC,EAAC;UACnC;AACA,iBAAO,IAAID,EAAC;AACZ,iBAAO,IAAI,aAAaA,EAAC;QAC3B;AACA,YAAI,OAAO,KAAK,IAAI,YAAY,EAAE,WAAW,GAAG;AAC9C,iBAAO,IAAI;QACb;MACF;AACA,iBAAWA,MAAK,OAAO,KAAK,GAAG,GAAG;AAChC,YAAIA,GAAE,WAAW,GAAG,GAAG;AACrB;QACF;AACA,YAAIA,EAAC,IAAI,cAAc,IAAIA,EAAC,GAAG,CAAC,GAAG,MAAMA,EAAC,GAAG,IAAI;MACnD;IACF;AACA,WAAO;EACT;AA1CgB,EAAAF,mBAAA,gBAAa;AAiD7B,WAAgB,MAAM,SAAY;AAChC,WAAO,cAAc,SAAS,CAAA,GAAI,MAAM,IAAI;EAC9C;AAFgB,EAAAA,mBAAA,QAAK;AAQrB,WAAgB,UAAU,SAAc,MAAmB;AACzD,WAAO,cAAc,SAAS,CAAA,GAAI,IAAI;EACxC;AAFgB,EAAAA,mBAAA,YAAS;AAQzB,WAAgB,gBAAgB,SAAY;AAC1C,UAAM,MAAM,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AAC9C,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,eAASC,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACnC,YAAIA,EAAC,IAAI,gBAAgB,IAAIA,EAAC,CAAC;MACjC;IACF,WAAW,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAClD,UAAI,OAAO,IAAI,iBAAiB,UAAU;AACxC,mBAAWG,MAAK,OAAO,KAAK,IAAI,YAAY,GAAG;AAC7C,cAAI,IAAI,aAAaA,EAAC,MAAM,MAAM;AAChC,gBAAI,aAAaA,EAAC,IAAI,YAAY,eAAe,EAAE,CAAC;UACtD;QACF;MACF;AACA,iBAAWF,MAAK,OAAO,KAAK,GAAG,GAAG;AAChC,YAAIA,GAAE,WAAW,GAAG,GAAG;AACrB;QACF;AACA,YAAIA,EAAC,IAAI,gBAAgB,IAAIA,EAAC,CAAC;MACjC;IACF;AACA,WAAO;EACT;AAtBgB,EAAAF,mBAAA,kBAAe;AAwB/B,QAAM,YAAY;AAMlB,WAAgB,oBAAoB,SAAY;AAC9C,QAAI,OAAO,YAAY,UAAU;AAC/B,aAAO;IACT;AACA,QAAI,OAAO,YAAY,UAAU;AAC/B,aACE,OAAO,UAAU,OAAO,KACxB,WAAW,OAAO,oBAClB,WAAW,OAAO;IAEtB;AACA,QAAI,OAAO,YAAY,WAAW;AAChC,aAAO;IACT;AACA,QAAI,YAAY,MAAM;AACpB,aAAO;IACT;AACA,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,aAAO,QAAQ,MAAM,CAACE,OAAM,oBAAoBA,EAAC,CAAC;IACpD;AACA,QAAI,OAAO,YAAY,UAAU;AAC/B,iBAAWE,MAAK,OAAO,KAAK,OAAO,GAAG;AACpC,YAAIA,GAAE,MAAM,SAAS,GAAG;AACtB,cAAI,oBAAoB,QAAQA,EAAC,CAAC,GAAG;AACnC;UACF,OAAO;AACL,mBAAO;UACT;QACF;AACA,YAAIA,OAAM,gBAAgB;AACxB,gBAAM,MAAM,QAAQ;AACpB,cAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC,mBAAO;UACT;AACA,qBAAW,MAAM,OAAO,KAAK,GAAG,GAAG;AACjC,gBAAI,CAAC,GAAG,MAAM,SAAS,GAAG;AACxB,qBAAO;YACT;AACA,gBAAI,EAAE,MAAM,UAAU;AACpB,qBAAO;YACT;AACA,kBAAM,KAAK,QAAQ,aAAa,EAAE;AAClC,gBAAI,OAAO,OAAO,UAAU;AAC1B,qBAAO;YACT;UACF;QACF,WAAWA,OAAM,cAAc;AAC7B,gBAAM,MAAM,QAAQ;AACpB,cAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC,mBAAO;UACT;AACA,qBAAW,MAAM,OAAO,KAAK,GAAG,GAAG;AACjC,gBAAI,CAAC,GAAG,MAAM,SAAS,GAAG;AACxB,qBAAO;YACT;AAEA,gBAAI,MAAM,SAAS;AACjB,qBAAO;YACT;AACA,kBAAM,KAAK,QAAQ,WAAW,EAAE;AAChC,gBAAI,OAAO,OAAO,UAAU;AAC1B,qBAAO;YACT;AACA,gBAAI;AACF,oBAAM,QAAQ,YAAY,EAAE;AAC5B,kBAAI,MAAM,UAAU,IAAI;AACtB,uBAAO;cACT;YACF,SAASC,IAAG;AACV,qBAAO;YACT;AAEA,gBAAI,QAAQ,eAAeD,EAAC,MAAM,QAAW;AAC3C,qBAAO;YACT;UACF;QACF,OAAO;AACL,iBAAO;QACT;MACF;AACA,aAAO;IACT;AACA,WAAO;EACT;AAnFgB,EAAAJ,mBAAA,sBAAmB;AA0FnC,WAAgB,yBAAyB,eAAkB;AACzD,UAAM,MAAM,qBAAqB;EACnC;AAFgB,EAAAA,mBAAA,2BAAwB;AASxC,WAAgB,kBAAkB,eAAsB;AACtD,UAAM,UAAU,MAAM,aAAa;AACnC,UAAM,QAAQ,cAAc,OAAO,IAAI;AACvC,UAAM,QAAQ,cAAc,KAAK;AACjC,WAAO,YAAYM,MAAK,KAAK,CAAC;EAChC;AALgB,EAAAN,mBAAA,oBAAiB;AAMnC,GAzMiB,sBAAA,oBAAiB,CAAA,EAAA;;;AC+I5B,SAAU,gBACd,MACA,QACA,MAAa;AAEb,MAAI,CAAC,QAAQ,CAAE,OAAe,MAAM;AAClC,WAAO,eAAe,IAAI;EAC5B;AACA,QAAM,OAAO,aAAa,IAAG;AAC7B,SAAO,EAAE,MAAM,MAAM,MAAM,GAAG,OAAM;AACtC;AAkBA,SAAS,eAAe,MAAY;AAClC,QAAM,UAAU,eAAe,IAAI;AACnC,MAAI,SAAS;AACX,WAAO,UAAU,OAAO;EAC1B,OAAO;AACL,WAAO;EACT;AACF;AA8BM,IAAO,aAAP,MAAO,oBAA4B,MAAK;EAG5C,YAAoBO,IAAyB,OAAa;AACxD,UAAMA,GAAE,QAAQ,eAAeA,GAAE,IAAI,GAAG;AACxC,SAAK,cAAcA;AACnB,SAAK,QAAQ;AACb,WAAO,eAAe,MAAM,YAAW,SAAS;EAClD;EAEA,OAAO,WACL,MACA,QACA,MACA,OAAa;AAEb,QAAI,CAAC,MAAM;AACT,aAAO,eAAe,IAAI;IAC5B;AACA,UAAM,OAAO,aAAa,IAAG;AAC7B,WAAO,IAAI,YAAoB,EAAE,MAAM,MAAM,MAAM,GAAG,OAAM,GAAI,KAAK;EACvE;EAEA,OAAO,oBAAoBA,IAAqBC,IAAS;AACvD,WAAO,IAAI,YAAoB,EAAE,GAAGD,GAAC,GAAIC,EAAC;EAC5C;EAEA,OAAO,cAAcC,IAAM;AACzB,UAAM,YAAY,4BAA4BA,EAAC;AAC/C,WAAO,IAAI,YAAW,WAAWA,EAAC;EACpC;EAEA,aACE,MAAO;AAEP,WAAO,KAAK,YAAY,SAAS;EACnC;EAEA,WAAQ;AACN,WAAO,eAAe,KAAK,UAAU,KAAK,WAAW,CAAC;EACxD;;AAOI,SAAU,4BAA4BA,IAAM;AAChD,MAAIA,cAAa,YAAY;AAC3B,WAAOA,GAAE;EACX;AACA,MAAIA,cAAa,kBAAkB,mBAAmB;AACpD,UAAMC,OAAM,gBACV,eAAe,+BACf,CAAA,CAAE;AAEJ,WAAOA;EACT;AACA,MAAID,cAAa,OAAO;AACtB,UAAMC,OAAM,gBACV,eAAe,6BACf;MACE,OAAOD,GAAE;OAEX,kCAAkCA,GAAE,OAAO,GAAG;AAEhD,WAAOC;EACT;AAGA,MAAI;AACJ,MAAI;AACF,gBAAYD,GAAE,SAAQ;EACxB,SAASA,IAAG;AAEV,gBAAY;EACd;AACA,QAAM,MAAM,gBACV,eAAe,6BACf,CAAA,GACA,2CAA2C,SAAS,GAAG;AAEzD,SAAO;AACT;AAEM,SAAU,kBAAkBE,IAAQ;AACxC,QAAM,IAAI,MAAM,2BAA2B;AAC7C;;;ACjTM,IAAW;CAAjB,SAAiBC,SAAM;AACrB,WAAgB,IAAO,KAAUC,IAAoB;AACnD,eAAWC,MAAK,KAAK;AACnB,UAAI,CAACD,GAAEC,EAAC,GAAG;AACT,eAAO;MACT;IACF;AACA,WAAO;EACT;AAPgB,EAAAF,QAAA,MAAG;AASnB,WAAgB,IAAO,KAAUC,IAAoB;AACnD,eAAWC,MAAK,KAAK;AACnB,UAAID,GAAEC,EAAC,GAAG;AACR,eAAO;MACT;IACF;AACA,WAAO;EACT;AAPgB,EAAAF,QAAA,MAAG;AAQrB,GAlBiB,WAAA,SAAM,CAAA,EAAA;;;ACiFvB,IAAY;CAAZ,SAAYG,wBAAqB;AAE/B,EAAAA,uBAAA,MAAA,IAAA;AACA,EAAAA,uBAAA,SAAA,IAAA;AACA,EAAAA,uBAAA,MAAA,IAAA;AACA,EAAAA,uBAAA,UAAA,IAAA;AACA,EAAAA,uBAAA,SAAA,IAAA;AACA,EAAAA,uBAAA,WAAA,IAAA;AACA,EAAAA,uBAAA,QAAA,IAAA;AACA,EAAAA,uBAAA,mBAAA,IAAA;AACA,EAAAA,uBAAA,QAAA,IAAA;AACA,EAAAA,uBAAA,SAAA,IAAA;AAEA,EAAAA,uBAAA,SAAA,IAAA;AACF,GAdY,0BAAA,wBAAqB,CAAA,EAAA;AAgBjC,IAAY;CAAZ,SAAYC,wBAAqB;AAE/B,EAAAA,uBAAA,SAAA,IAAA;AACA,EAAAA,uBAAA,SAAA,IAAA;AACA,EAAAA,uBAAA,aAAA,IAAA;AACA,EAAAA,uBAAA,aAAA,IAAA;AACA,EAAAA,uBAAA,kBAAA,IAAA;AACA,EAAAA,uBAAA,OAAA,IAAA;AACA,EAAAA,uBAAA,eAAA,IAAA;AACA,EAAAA,uBAAA,eAAA,IAAA;AACA,EAAAA,uBAAA,SAAA,IAAA;AACA,EAAAA,uBAAA,QAAA,IAAA;AACA,EAAAA,uBAAA,YAAA,IAAA;AACA,EAAAA,uBAAA,MAAA,IAAA;AACA,EAAAA,uBAAA,MAAA,IAAA;AACA,EAAAA,uBAAA,UAAA,IAAA;AACA,EAAAA,uBAAA,eAAA,IAAA;AACA,EAAAA,uBAAA,aAAA,IAAA;AACA,EAAAA,uBAAA,aAAA,IAAA;AACA,EAAAA,uBAAA,aAAA,IAAA;AACA,EAAAA,uBAAA,gBAAA,IAAA;AACA,EAAAA,uBAAA,OAAA,IAAA;AACA,EAAAA,uBAAA,OAAA,IAAA;AACA,EAAAA,uBAAA,YAAA,IAAA;AACA,EAAAA,uBAAA,qBAAA,IAAA;AACA,EAAAA,uBAAA,qBAAA,IAAA;AACA,EAAAA,uBAAA,eAAA,IAAA;AACA,EAAAA,uBAAA,qBAAA,IAAA;AACA,EAAAA,uBAAA,cAAA,IAAA;AACA,EAAAA,uBAAA,UAAA,IAAA;AACA,EAAAA,uBAAA,SAAA,IAAA;AACA,EAAAA,uBAAA,UAAA,IAAA;AACA,EAAAA,uBAAA,uBAAA,IAAA;AACA,EAAAA,uBAAA,UAAA,IAAA;AACA,EAAAA,uBAAA,iBAAA,IAAA;AACA,EAAAA,uBAAA,cAAA,IAAA;AACA,EAAAA,uBAAA,aAAA,IAAA;AACF,GArCY,0BAAA,wBAAqB,CAAA,EAAA;AAuCjC,IAAY;CAAZ,SAAYC,oBAAiB;AAC3B,EAAAA,mBAAA,QAAA,IAAA;AACA,EAAAA,mBAAA,SAAA,IAAA;AACA,EAAAA,mBAAA,QAAA,IAAA;AACA,EAAAA,mBAAA,OAAA,IAAA;AACA,EAAAA,mBAAA,MAAA,IAAA;AACA,EAAAA,mBAAA,OAAA,IAAA;AACF,GAPY,sBAAA,oBAAiB,CAAA,EAAA;AAwE7B,IAAY;CAAZ,SAAYC,kBAAe;AACzB,EAAAA,iBAAA,YAAA,IAAA;AACA,EAAAA,iBAAA,oBAAA,IAAA;AACA,EAAAA,iBAAA,SAAA,IAAA;AACA,EAAAA,iBAAA,QAAA,IAAA;AACA,EAAAA,iBAAA,SAAA,IAAA;AACA,EAAAA,iBAAA,QAAA,IAAA;AACA,EAAAA,iBAAA,SAAA,IAAA;AACA,EAAAA,iBAAA,eAAA,IAAA;AACA,EAAAA,iBAAA,gBAAA,IAAA;AACA,EAAAA,iBAAA,eAAA,IAAA;AACA,EAAAA,iBAAA,gBAAA,IAAA;AACA,EAAAA,iBAAA,QAAA,IAAA;AACA,EAAAA,iBAAA,WAAA,IAAA;AACF,GAdY,oBAAA,kBAAe,CAAA,EAAA;AAgB3B,IAAY;CAAZ,SAAYC,iBAAc;AACxB,EAAAA,gBAAA,yBAAA,IAAA;AACA,EAAAA,gBAAA,gBAAA,IAAA;AACF,GAHY,mBAAA,iBAAc,CAAA,EAAA;AA2D1B,IAAY;CAAZ,SAAYC,qBAAkB;AAC5B,EAAAA,oBAAA,cAAA,IAAA;AACA,EAAAA,oBAAA,eAAA,IAAA;AACA,EAAAA,oBAAA,gBAAA,IAAA;AACF,GAJY,uBAAA,qBAAkB,CAAA,EAAA;AA2L9B,IAAY;CAAZ,SAAYC,gBAAa;AAIvB,EAAAA,eAAA,SAAA,IAAA;AAMA,EAAAA,eAAA,QAAA,IAAA;AAKA,EAAAA,eAAA,MAAA,IAAA;AAKA,EAAAA,eAAA,UAAA,IAAA;AACF,GArBY,kBAAA,gBAAa,CAAA,EAAA;;;AClTzB,IAAY;CAAZ,SAAYC,wBAAqB;AAC/B,EAAAA,uBAAA,WAAA,IAAA;AACA,EAAAA,uBAAA,KAAA,IAAA;AACF,GAHY,0BAAA,wBAAqB,CAAA,EAAA;AA0B1B,IAAM,+BACX,oBAAmB,EAChB,SAAS,UAAU,qBAAoB,CAAE,EACzC,SACC,QACA,eACE,oBAAoB,sBAAsB,GAAG,GAC7C,oBAAoB,sBAAsB,SAAS,CAAC,CACrD,EAEF,MAAM,sBAAsB;AAM1B,IAAM,2BAA2B,oBAAmB,EACxD,SAAS,YAAY,eAAc,CAAE,EACrC,MAAM,kBAAkB;AAM3B,IAAM,6CAA6C,MAGjD,oBAAmB,EAChB,SACC,QACA,eACE,oBAAoB,sBAAsB,GAAG,GAC7C,oBAAoB,sBAAsB,SAAS,CAAC,CACrD,EAEF,SAAS,oBAAoB,qBAAoB,CAAE;AAqBxD,IAAM,oCACJ,2CAA0C,EACvC,SAAS,QAAQ,oBAAoB,gBAAgB,UAAU,CAAC,EAChE,SAAS,eAAe,cAAc,eAAc,CAAE,CAAC,EACvD,MAAM,2BAA2B;AAEtC,IAAM,mCACJ,2CAA0C,EACvC,SAAS,QAAQ,oBAAoB,gBAAgB,OAAO,CAAC,EAC7D,SAAS,WAAW,eAAc,CAAE,EACpC,MAAM,0BAA0B;AAErC,IAAM,qCACJ,2CAA0C,EACvC,SAAS,QAAQ,oBAAoB,gBAAgB,aAAa,CAAC,EACnE,MAAM,4BAA4B;AAEvC,IAAM,sCACJ,2CAA0C,EACvC,SAAS,QAAQ,oBAAoB,gBAAgB,cAAc,CAAC,EACpE,SAAS,eAAe,eAAc,CAAE,EACxC,MAAM,6BAA6B;AAsBxC,IAAM,mCACJ,oBAAmB,EAChB,SAAS,QAAQ,oBAAoB,gBAAgB,OAAO,CAAC,EAC7D,SAAS,iBAAiB,qBAAoB,CAAE,EAChD,MAAM,0BAA0B;AAErC,IAAM,qCACJ,oBAAmB,EAChB,SAAS,QAAQ,oBAAoB,gBAAgB,aAAa,CAAC,EACnE,MAAM,4BAA4B;AAEvC,IAAM,sCACJ,oBAAmB,EAChB,SAAS,QAAQ,oBAAoB,gBAAgB,cAAc,CAAC,EACpE,MAAM,6BAA6B;AAyDxC,IAAY;CAAZ,SAAYC,cAAW;AACrB,EAAAA,aAAA,aAAA,IAAA;AACA,EAAAA,aAAA,aAAA,IAAA;AACA,EAAAA,aAAA,sBAAA,IAAA;AACA,EAAAA,aAAA,aAAA,IAAA;AACF,GALY,gBAAA,cAAW,CAAA,EAAA;AA6IvB,IAAY;CAAZ,SAAYC,YAAS;AACnB,EAAAA,WAAA,QAAA,IAAA;AACA,EAAAA,WAAA,UAAA,IAAA;AACA,EAAAA,WAAA,SAAA,IAAA;AACF,GAJY,cAAA,YAAS,CAAA,EAAA;AAsDrB,IAAY;CAAZ,SAAYC,aAAU;AAIpB,EAAAA,YAAA,OAAA,IAAA;AAKA,EAAAA,YAAA,WAAA,IAAA;AAMA,EAAAA,YAAA,gBAAA,IAAA;AAKA,EAAAA,YAAA,SAAA,IAAA;AACF,GArBY,eAAA,aAAU,CAAA,EAAA;AAyEtB,IAAY;CAAZ,SAAYC,uBAAoB;AAC9B,EAAAA,sBAAA,MAAA,IAAA;AACA,EAAAA,sBAAA,SAAA,IAAA;AACF,GAHY,yBAAA,uBAAoB,CAAA,EAAA;AAyKhC,IAAY;CAAZ,SAAYC,uBAAoB;AAC9B,EAAAA,sBAAA,iBAAA,IAAA;AACA,EAAAA,sBAAA,qBAAA,IAAA;AACA,EAAAA,sBAAA,kBAAA,IAAA;AACF,GAJY,yBAAA,uBAAoB,CAAA,EAAA;AA2RhC,IAAY;CAAZ,SAAYC,gBAAa;AACvB,EAAAA,eAAA,QAAA,IAAA;AACA,EAAAA,eAAA,aAAA,IAAA;AACA,EAAAA,eAAA,YAAA,IAAA;AACA,EAAAA,eAAA,aAAA,IAAA;AACA,EAAAA,eAAA,aAAA,IAAA;AACA,EAAAA,eAAA,QAAA,IAAA;AACA,EAAAA,eAAA,UAAA,IAAA;AACA,EAAAA,eAAA,cAAA,IAAA;AACA,EAAAA,eAAA,oBAAA,IAAA;AACA,EAAAA,eAAA,oBAAA,IAAA;AACA,EAAAA,eAAA,QAAA,IAAA;AACA,EAAAA,eAAA,gBAAA,IAAA;AACA,EAAAA,eAAA,WAAA,IAAA;AACF,GAdY,kBAAA,gBAAa,CAAA,EAAA;AAyQzB,IAAY;CAAZ,SAAYC,oBAAiB;AAC3B,EAAAA,mBAAA,SAAA,IAAA;AACA,EAAAA,mBAAA,UAAA,IAAA;AACA,EAAAA,mBAAA,UAAA,IAAA;AACF,GAJY,sBAAA,oBAAiB,CAAA,EAAA;AAM7B,IAAY;CAAZ,SAAYC,sBAAmB;AAC7B,EAAAA,qBAAA,QAAA,IAAA;AACA,EAAAA,qBAAA,WAAA,IAAA;AACA,EAAAA,qBAAA,MAAA,IAAA;AACF,GAJY,wBAAA,sBAAmB,CAAA,EAAA;AAM/B,IAAY;CAAZ,SAAYC,uBAAoB;AAC9B,EAAAA,sBAAA,SAAA,IAAA;AACA,EAAAA,sBAAA,eAAA,IAAA;AACA,EAAAA,sBAAA,WAAA,IAAA;AACA,EAAAA,sBAAA,mBAAA,IAAA;AACA,EAAAA,sBAAA,OAAA,IAAA;AACA,EAAAA,sBAAA,aAAA,IAAA;AACF,GAPY,yBAAA,uBAAoB,CAAA,EAAA;AAmwBhC,IAAY;CAAZ,SAAYC,wBAAqB;AAI/B,EAAAA,uBAAA,MAAA,IAAA;AAKA,EAAAA,uBAAA,QAAA,IAAA;AACF,GAVY,0BAAA,wBAAqB,CAAA,EAAA;AA4SjC,IAAY;CAAZ,SAAYC,oBAAiB;AAC3B,EAAAA,mBAAA,MAAA,IAAA;AACA,EAAAA,mBAAA,QAAA,IAAA;AACA,EAAAA,mBAAA,KAAA,IAAA;AACF,GAJY,sBAAA,oBAAiB,CAAA,EAAA;AAkD7B,IAAY;CAAZ,SAAYC,gBAAa;AACvB,EAAAA,eAAA,eAAA,IAAA;AAEA,EAAAA,eAAA,cAAA,IAAA;AACA,EAAAA,eAAA,mBAAA,IAAA;AACA,EAAAA,eAAA,gBAAA,IAAA;AAEA,EAAAA,eAAA,oBAAA,IAAA;AACA,EAAAA,eAAA,oBAAA,IAAA;AACA,EAAAA,eAAA,wBAAA,IAAA;AACA,EAAAA,eAAA,8BAAA,IAAA;AACA,EAAAA,eAAA,kCAAA,IAAA;AAEA,EAAAA,eAAA,mBAAA,IAAA;AACA,EAAAA,eAAA,mBAAA,IAAA;AACA,EAAAA,eAAA,6BAAA,IAAA;AAEA,EAAAA,eAAA,iBAAA,IAAA;AACA,EAAAA,eAAA,qBAAA,IAAA;AACF,GAnBY,kBAAA,gBAAa,CAAA,EAAA;AAqBlB,IAAM,wBAET;EACF,kBAAkB,kBAAkB;EAEpC,iBAAiB,kBAAkB;EACnC,uBAAuB,kBAAkB;EACzC,mBAAmB,kBAAkB;EAErC,wBAAwB,kBAAkB;EAE1C,wBAAwB,kBAAkB;EAC1C,6BAA6B,kBAAkB;EAC/C,kCAAkC,kBAAkB;EACpD,uCAAuC,kBAAkB;EAEzD,uBAAuB,kBAAkB;EACzC,uBAAuB,kBAAkB;EACzC,iCAAiC,kBAAkB;EAEnD,qBAAqB,kBAAkB;EACvC,0BAA0B,kBAAkB;;AA6tB9C,IAAY;CAAZ,SAAYC,sBAAmB;AAC7B,EAAAA,qBAAA,QAAA,IAAA;AACA,EAAAA,qBAAA,SAAA,IAAA;AACA,EAAAA,qBAAA,qBAAA,IAAA;AACA,EAAAA,qBAAA,MAAA,IAAA;AACA,EAAAA,qBAAA,cAAA,IAAA;AACF,GANY,wBAAA,sBAAmB,CAAA,EAAA;;;AChqGzB,SAAU,0BAA0B,OAAkB;AAC1D,SAAO,uBAAuB,KAAK;AACrC;AAKM,SAAU,oBAAoB,KAAU,YAA6B;AACzE,MAAI,CAAC;AAAY;AACjB,MAAI,WAAW,QAAQ;AACrB,QAAI,aAAa,IAAI,SAAS,WAAW,MAAM;EACjD;AACA,QAAM,QAAQ,CAAC,cAAc,WAAW,UAAU,QAAQ,IAAI;AAC9D,QAAM,QACJ,CAAC,cAAc,CAAC,WAAW,SAAS,WAAW,UAAU,IACrD,IACA,KAAK,IAAI,WAAW,KAAK;AAE/B,MAAI,aAAa,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACrD;AAEM,SAAU,4BACd,KACA,YAA6B;AAE7B,MAAI,CAAC;AAAY;AACjB,MAAI,WAAW,QAAQ;AACrB,QAAI,aAAa,IAAI,UAAU,WAAW,MAAM;EAClD;AACA,QAAM,QAAQ,CAAC,cAAc,WAAW,UAAU,QAAQ,IAAI;AAC9D,QAAM,QACJ,CAAC,cAAc,CAAC,WAAW,SAAS,WAAW,UAAU,IACrD,IACA,KAAK,IAAI,WAAW,KAAK;AAE/B,MAAI,aAAa,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACrD;AAEM,SAAU,oBAAoB,KAAU,OAAsB;AAClE,MAAI,CAAC;AAAO;AACZ,MAAI,MAAM,WAAW;AACnB,QAAI,aAAa,IAAI,gBAAgB,OAAO,MAAM,SAAS,CAAC;EAC9D;AACF;AAMO,IAAM,cAAqC;EAChD,eAAe,MAAM,QAAQ,QAAO;;;;ACpCtC,IAAY;CAAZ,SAAYC,mCAAgC;AAC1C,EAAAA,kCAAAA,kCAAA,aAAA,IAAA,CAAA,IAAA;AACF,GAFY,qCAAA,mCAAgC,CAAA,EAAA;;;ACbtC,IAAO,gCAAP,MAAoC;EAKxC,YACW,SACT,YAA+B;AADtB,SAAA,UAAA;AALK,SAAA,mBAAmB;AAQjC,SAAK,UAAU,cAAc,sBAAqB;EACpD;EAEA,aAAa,SAAe;AAC1B,UAAMC,WAAU,eAAe,QAAQ,KAAK,kBAAkB,OAAO;AACrE,WAAOA,UAAS,cAAc;EAChC;;;;;;EAOA,MAAM,uBACJ,UACA,UACA,MAAsC;AAEtC,UAAM,MAAM,IAAI,IAAI,SAAS,KAAK,OAAO;AACzC,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR,SAAS;QACP,eAAe,oBAAoB,UAAU,QAAQ;;MAEvD;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,6BAA4B,CAAE;MAE/D,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;EAMA,MAAM,wBACJ,OACA,MAAsC;AAEtC,UAAM,MAAM,IAAI,IAAI,SAAS,KAAK,OAAO;AACzC,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR,SAAS;QACP,eAAe,0BAA0B,KAAoB;;MAE/D;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,qCAAoC,CAAE;MAEvE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;EAEA,MAAM,kBAAkB,OAAkB;AACxC,UAAM,MAAM,IAAI,IAAI,SAAS,KAAK,OAAO;AACzC,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR,SAAS;QACP,eAAe,0BAA0B,KAAK;;KAEjD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,eAAe,IAAI;MAE5B,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;ACxDF,IAAY;CAAZ,SAAYC,6BAA0B;AACpC,EAAAA,4BAAAA,4BAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,4BAAAA,4BAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,4BAAAA,4BAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,4BAAAA,4BAAA,iBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,4BAAAA,4BAAA,oBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,4BAAAA,4BAAA,oBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,4BAAAA,4BAAA,kBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,4BAAAA,4BAAA,mBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,4BAAAA,4BAAA,gBAAA,IAAA,CAAA,IAAA;AACF,GAVY,+BAAA,6BAA0B,CAAA,EAAA;;;ACEtC,IAAY;CAAZ,SAAYC,qCAAkC;AAC5C,EAAAA,oCAAAA,oCAAA,cAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,cAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,cAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,yBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,yBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,qBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,qBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,qBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,gBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,iBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,iBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,eAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,eAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,eAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,iBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,iBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,iBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,gBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,gBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,gBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,oBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,oBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,oBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,oCAAAA,oCAAA,MAAA,IAAA,EAAA,IAAA;AACF,GA3BY,uCAAA,qCAAkC,CAAA,EAAA;AA4B9C,IAAY;CAAZ,SAAYC,uCAAoC;AAC9C,EAAAA,sCAAAA,sCAAA,iBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,sCAAAA,sCAAA,iBAAA,IAAA,EAAA,IAAA;AACA,EAAAA,sCAAAA,sCAAA,iBAAA,IAAA,EAAA,IAAA;AACF,GAJY,yCAAA,uCAAoC,CAAA,EAAA;AAc1C,IAAO,kCAAP,MAAsC;EAM1C,YACW,SACT,YACA,cAA+D;AAFtD,SAAA,UAAA;AANK,SAAA,mBAAmB;AAUjC,SAAK,UAAU,cAAc,sBAAqB;AAClD,SAAK,eAAe,gBAAgB;EACtC;EAEA,aAAa,SAAe;AAC1B,UAAMC,WAAU,eAAe,QAAQ,KAAK,kBAAkB,OAAO;AACrE,WAAOA,UAAS,cAAc;EAChC;;;;;EAMA,MAAM,YAAS;AACb,UAAM,MAAM,IAAI,IAAI,UAAU,KAAK,OAAO;AAE1C,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;KACT;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,uBAAsB,CAAE;MACzD,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,WAAW,SAAiB,MAAmC;AACnE,UAAM,MAAM,IAAI,IAAI,UAAU,OAAO,UAAU,KAAK,OAAO;AAE3D,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,kBAAkB,MAAM,sBAAqB,CAAE;MACxD;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,YAAY,SAAiB,MAAiC;AAClE,UAAM,MAAM,IAAI,IAAI,UAAU,OAAO,QAAQ,KAAK,OAAO;AAEzD,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,kBAAkB,MAAM,wBAAuB,CAAE;MAC1D;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAMA,MAAM,iBACJ,SACA,SAAsD,CAAA,GAAE;AAExD,UAAM,MAAM,IAAI,IAAI,UAAU,OAAO,IAAI,KAAK,OAAO;AAErD,QAAI,OAAO,+BAA+B,QAAW;AACnD,UAAI,aAAa,IACf,iCACA,OAAO,6BAA6B,QAAQ,IAAI;IAEpD;AACA,QAAI,OAAO,wBAAwB,QAAW;AAC5C,UAAI,aAAa,IACf,yBACA,OAAO,6BAA6B,QAAQ,IAAI;IAEpD;AACA,QAAI,OAAO,eAAe,QAAW;AACnC,UAAI,aAAa,IAAI,SAAS,OAAO,UAAU;IACjD;AACA,QAAI,OAAO,qBAAqB,QAAW;AACzC,UAAI,aAAa,IAAI,cAAc,OAAO,gBAAgB;IAC5D;AACA,QAAI,OAAO,WAAW,QAAW;AAC/B,UAAI,aAAa,IAAI,UAAU,OAAO,MAAM;IAC9C;AACA,QAAI,OAAO,cAAc,QAAW;AAClC,UAAI,aAAa,IAAI,cAAc,OAAO,SAAS;IACrD;AACA,QAAI,OAAO,YAAY,QAAW;AAChC,UAAI,aAAa,IAAI,cAAc,OAAO,OAAO,OAAO,CAAC;IAC3D;AAEA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;;KAET;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,mBAAkB,CAAE;MACrD,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,mBAAkB,CAAE;MAErD,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,2BAA0B,CAAE;MAC7D,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBAAkB,SAAiB,MAAkC;AACzE,UAAM,MAAM,IAAI,IAAI,UAAU,OAAO,SAAS,KAAK,OAAO;AAE1D,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,kBAAkB,MAAM,iCAAgC,CAAE;MACnE;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,uBACJ,SACA,MAAmC;AAEnC,UAAM,MAAM,IAAI,IAAI,UAAU,OAAO,UAAU,KAAK,OAAO;AAE3D,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,kBAAkB,MAAM,sBAAqB,CAAE;MACxD;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,aACJ,SACA,MAA0C;AAE1C,UAAM,MAAM,IAAI,IAAI,UAAU,OAAO,WAAW,KAAK,OAAO;AAE5D,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,kBAAkB,MAAM,6BAA4B,CAAE;MAC/D;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,oCACJ,OACA,MAAuD;AAEvD,UAAM,MAAM,IAAI,IAAI,gBAAgB,KAAK,OAAO;AAEhD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,eAAe,IAAI;MAC5B,KAAK,eAAe;AAClB,eAAO,eAAe,IAAI;MAC5B,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,sBACJ,OACA,MAAqD;AAErD,UAAM,MAAM,IAAI,IAAI,WAAW,KAAK,OAAO;AAE3C,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,uBAAuB;AAE5D,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;EAMA,MAAM,0BAA0B,OAAkB;AAChD,UAAM,MAAM,IAAI,IAAI,WAAW,KAAK,OAAO;AAE3C,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,+BAA8B,CAAE;MACjE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,sBACJ,OACA,SAA8B,CAAA,GAAE;AAEhC,UAAM,MAAM,IAAI,IAAI,WAAW,KAAK,OAAO;AAE3C,QAAI,OAAO,UAAU,QAAW;AAC9B,UAAI,aAAa,IAAI,SAAS,OAAO,QAAQ,QAAQ,IAAI;IAC3D;AAEA,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,uBAAuB;AAE5D,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,2BACJ,OACA,SAAqD,CAAA,GAAE;AAEvD,UAAM,MAAM,IAAI,IAAI,eAAe,KAAK,OAAO;AAE/C,QAAI,OAAO,UAAU;AACnB,UAAI,aAAa,IAAI,UAAU,OAAO,QAAQ;IAChD;AACA,QAAI,OAAO,aAAa;AACtB,UAAI,aAAa,IAAI,gBAAgB,OAAO,WAAW;IACzD;AACA,QAAI,OAAO,SAAS;AAClB,UAAI,aAAa,IAAI,cAAc,OAAO,OAAO,OAAO,CAAC;IAC3D;AAEA,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,4BAA2B,CAAE;MAC9D,KAAK,eAAe;AAClB,eAAO,eAAe,IAAI;MAC5B,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,0BACL,MACA,KAAK,QACL,4BAA2B,CAAE;MAEjC,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,eACJ,OACA,MAAwC;AAExC,UAAM,MAAM,IAAI,IAAI,oBAAoB,KAAK,OAAO;AAEpD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,mBAAmB;AAExD,eAAO,kBAAkB,MAAM,2BAA0B,CAAE;MAC7D;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBACJ,OACA,aACA,MAA0C;AAE1C,UAAM,MAAM,IAAI,IAAI,oBAAoB,WAAW,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,mBAAmB;AAExD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,iBAAiB,OAAoB,QAAyB;AAClE,UAAM,MAAM,IAAI,IAAI,oBAAoB,KAAK,OAAO;AAIpD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,gCAA+B,CAAE;MAClE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,sBACJ,OACA,aAAmB;AAEnB,UAAM,MAAM,IAAI,IAAI,oBAAoB,WAAW,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,yBAAwB,CAAE;MAC3D,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBAAkB,OAAgC,aAAmB;AACzE,UAAM,MAAM,IAAI,IAAI,oBAAoB,WAAW,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,mBAAmB;AAExD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,WACJ,OACA,MAAuC;AAEvC,UAAM,MAAM,IAAI,IAAI,oBAAoB,KAAK,OAAO;AAEpD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,cAAc;AAEnD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,cACJ,OACA,WACA,MAAyC;AAEzC,UAAM,MAAM,IAAI,IAAI,oBAAoB,SAAS,IAAI,KAAK,OAAO;AAEjE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,cAAc;AAEnD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,aACJ,OACA,QAAyB;AAEzB,UAAM,MAAM,IAAI,IAAI,oBAAoB,KAAK,OAAO;AAEpD,gCAA4B,KAAK,MAAM;AAEvC,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,iCAAgC,CAAE;MACnE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBAAkB,OAAgC,WAAiB;AACvE,UAAM,MAAM,IAAI,IAAI,oBAAoB,SAAS,IAAI,KAAK,OAAO;AAEjE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,sBAAqB,CAAE;MACxD,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,YACJ,OACA,WACA,MAAkC;AAElC,UAAM,MAAM,IAAI,IAAI,oBAAoB,SAAS,SAAS,KAAK,OAAO;AAEtE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,cAAc;AAEnD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,cAAc,OAAgC,WAAiB;AACnE,UAAM,MAAM,IAAI,IAAI,oBAAoB,SAAS,IAAI,KAAK,OAAO;AAEjE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,cAAc;AAEnD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,YACJ,OACA,MAAuC;AAEvC,UAAM,MAAM,IAAI,IAAI,kBAAkB,KAAK,OAAO;AAElD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AACD,WAAO,KAAK,4BAA4B,IAAI;EAC9C;EAEQ,MAAM,4BAA4B,MAAkB;AAC1D,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,kBAAkB,MAAM,0BAAyB,CAAE;MAC5D;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,0BACL,MACA,KAAK,QACL,2BAA0B,CAAE;MAEhC;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,WACJ,OACA,SAAmD,CAAA,GAAE;AAErD,UAAM,MAAM,IAAI,IAAI,kBAAkB,KAAK,OAAO;AAElD,QAAI,OAAO,MAAM;AACf,UAAI,aAAa,IAAI,UAAU,OAAO,OAAO,IAAI,CAAC;IACpD;AACA,QAAI,OAAO,gBAAgB;AACzB,UAAI,aAAa,IAAI,mBAAmB,OAAO,cAAc;IAC/D;AACA,QAAI,OAAO,SAAS,QAAW;AAC7B,UAAI,aAAa,IAAI,QAAQ,OAAO,OAAO,QAAQ,IAAI;IACzD;AACA,QAAI,OAAO,aAAa,QAAW;AACjC,UAAI,aAAa,IAAI,YAAY,OAAO,WAAW,QAAQ,IAAI;IACjE;AACA,QAAI,OAAO,WAAW;AACpB,UAAI,aAAa,IAAI,cAAc,OAAO,SAAS;IACrD;AACA,QAAI,OAAO,SAAS;AAClB,UAAI,aAAa,IAAI,WAAW,OAAO,OAAO,OAAO,CAAC;IACxD;AACA,QAAI,OAAO,UAAU,QAAW;AAC9B,UAAI,aAAa,IAAI,SAAS,OAAO,QAAQ,QAAQ,IAAI;IAC3D;AACA,gCAA4B,KAAK,MAAM;AAEvC,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,qBAAoB,CAAE;MACvD,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,gBACJ,OACA,SACA,SAAiD,CAAA,GAAE;AAEnD,UAAM,MAAM,IAAI,IAAI,kBAAkB,OAAO,IAAI,KAAK,OAAO;AAE7D,QAAI,OAAO,+BAA+B,QAAW;AACnD,UAAI,aAAa,IACf,iCACA,OAAO,6BAA6B,QAAQ,IAAI;IAEpD;AACA,QAAI,OAAO,WAAW;AACpB,UAAI,aAAa,IAAI,cAAc,OAAO,SAAS;IACrD;AACA,QAAI,OAAO,SAAS;AAClB,UAAI,aAAa,IAAI,cAAc,OAAO,OAAO,OAAO,CAAC;IAC3D;AAEA,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBACL,MACA,2CAA0C,CAAE;MAEhD,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,0BACL,MACA,KAAK,QACL,2BAA0B,CAAE;MAEhC;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,YACJ,OACA,SACA,MAAoC;AAEpC,UAAM,MAAM,IAAI,IAAI,kBAAkB,OAAO,WAAW,KAAK,OAAO;AAEpE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,eAAe,IAAI;MAC5B,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,YAAY,OAAgC,SAAe;AAC/D,UAAM,MAAM,IAAI,IAAI,kBAAkB,OAAO,IAAI,KAAK,OAAO;AAE7D,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,UACJ,OACA,SACA,MAAoC;AAEpC,UAAM,MAAM,IAAI,IAAI,kBAAkB,OAAO,WAAW,KAAK,OAAO;AAEpE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,YAAY;AAEjD,eAAO,kBAAkB,MAAM,+BAA8B,CAAE;MACjE;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,mBACJ,OACA,MAA0C;AAE1C,UAAM,MAAM,IAAI,IAAI,qBAAqB,KAAK,OAAO;AAErD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,eAAe;AAEpD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBACJ,OACA,SAAyD,CAAA,GAAE;AAE3D,UAAM,MAAM,IAAI,IAAI,qBAAqB,KAAK,OAAO;AAErD,QAAI,OAAO,OAAO;AAChB,UAAI,aAAa,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;IACpD;AACA,QAAI,OAAO,QAAQ;AACjB,UAAI,aAAa,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;IACtD;AACA,QAAI,OAAO,UAAU;AACnB,UAAI,aAAa,IAAI,aAAa,OAAO,QAAQ;IACnD;AACA,QAAI,OAAO,aAAa,QAAW;AACjC,UAAI,aAAa,IAAI,YAAY,OAAO,WAAW,QAAQ,IAAI;IACjE;AACA,gCAA4B,KAAK,MAAM;AAEvC,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,oBAAmB,CAAE;MACtD,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,mBAAmB,OAAgC,YAAkB;AACzE,UAAM,MAAM,IAAI,IAAI,qBAAqB,UAAU,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,eAAe;AAEpD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,aACJ,OACA,MAA0C;AAE1C,UAAM,MAAM,IAAI,IAAI,uBAAuB,KAAK,OAAO;AAEvD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,aAAa;AAElD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,gBACJ,OACA,UACA,MAA4C;AAE5C,UAAM,MAAM,IAAI,IAAI,uBAAuB,QAAQ,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,aAAa;AAElD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,eACJ,OACA,QAAyB;AAEzB,UAAM,MAAM,IAAI,IAAI,uBAAuB,KAAK,OAAO;AAEvD,gCAA4B,KAAK,MAAM;AAEvC,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,iCAAgC,CAAE;MACnE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,oBACJ,OACA,UACA,SAAqD,CAAA,GAAE;AAEvD,UAAM,MAAM,IAAI,IAAI,uBAAuB,QAAQ,IAAI,KAAK,OAAO;AAEnE,QAAI,OAAO,UAAU;AACnB,UAAI,aAAa,IAAI,YAAY,OAAO,OAAO,QAAQ,CAAC;IAC1D;AACA,QAAI,OAAO,OAAO;AAChB,UAAI,aAAa,IAAI,SAAS,OAAO,KAAK;IAC5C;AACA,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,yBAAwB,CAAE;MAC3D,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,gBAAgB,OAAgC,UAAgB;AACpE,UAAM,MAAM,IAAI,IAAI,uBAAuB,QAAQ,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,aAAa;AAElD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,YACJ,OACA,MAAyC;AAEzC,UAAM,MAAM,IAAI,IAAI,qBAAqB,KAAK,OAAO;AAErD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,eAAe;AAEpD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,eACJ,OACA,YACA,MAA2C;AAE3C,UAAM,MAAM,IAAI,IAAI,qBAAqB,UAAU,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,eAAe;AAEpD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,cACJ,OACA,QAAyB;AAEzB,UAAM,MAAM,IAAI,IAAI,qBAAqB,KAAK,OAAO;AAErD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,gCAA+B,CAAE;MAClE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,mBAAmB,OAAgC,YAAkB;AACzE,UAAM,MAAM,IAAI,IAAI,qBAAqB,UAAU,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,wBAAuB,CAAE;MAC1D,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,eAAe,OAAgC,YAAkB;AACrE,UAAM,MAAM,IAAI,IAAI,qBAAqB,UAAU,IAAI,KAAK,OAAO;AAEnE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,eAAe;AAEpD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,mBAAmB,YAAkB;AACzC,UAAM,MAAM,IAAI,IAAI,aAAa,UAAU,IAAI,KAAK,OAAO;AAE3D,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;KACT;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,8BAA6B,CAAE;MAChE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,uBACJ,YACA,MAA2C;AAE3C,UAAM,MAAM,IAAI,IAAI,aAAa,UAAU,IAAI,KAAK,OAAO;AAE3D,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,WAAO,KAAK,4BAA4B,IAAI;EAC9C;;;;;;;EASA,MAAM,WACJ,OACA,MAAwC;AAExC,UAAM,MAAM,IAAI,IAAI,oBAAoB,KAAK,OAAO;AAEpD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,cAAc;AAEnD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,cACJ,OACA,WACA,MAA0C;AAE1C,UAAM,MAAM,IAAI,IAAI,oBAAoB,SAAS,IAAI,KAAK,OAAO;AAEjE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,cAAc;AAEnD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,aACJ,OACA,QAAyB;AAEzB,UAAM,MAAM,IAAI,IAAI,oBAAoB,KAAK,OAAO;AAEpD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,+BAA8B,CAAE;MACjE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBAAkB,OAAgC,WAAiB;AACvE,UAAM,MAAM,IAAI,IAAI,oBAAoB,SAAS,IAAI,KAAK,OAAO;AAEjE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,uBAAsB,CAAE;MACzD,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,cAAc,OAAgC,WAAiB;AACnE,UAAM,MAAM,IAAI,IAAI,oBAAoB,SAAS,IAAI,KAAK,OAAO;AAEjE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,cAAc;AAEnD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EASA,MAAM,kBACJ,OACA,MAA+C;AAE/C,UAAM,MAAM,IAAI,IAAI,yBAAyB,KAAK,OAAO;AAEzD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,kBAAkB;AAEvD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBACJ,OACA,WACA,MAA+C;AAE/C,UAAM,MAAM,IAAI,IAAI,yBAAyB,SAAS,IAAI,KAAK,OAAO;AAEtE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,IAAI;AACtB,aAAK,aAAa,cAChB,mCAAmC,kBAAkB;AAEvD,eAAO,kBAAkB,MAAM,2BAA0B,CAAE;MAC7D;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBACJ,OACA,QAAyB;AAEzB,UAAM,MAAM,IAAI,IAAI,yBAAyB,KAAK,OAAO;AAEzD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,0BAAyB,CAAE;MAC5D,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,sBACJ,OACA,WAAiB;AAEjB,UAAM,MAAM,IAAI,IAAI,yBAAyB,SAAS,IAAI,KAAK,OAAO;AAEtE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,2BAA0B,CAAE;MAC7D,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,kBAAkB,OAAgC,WAAiB;AACvE,UAAM,MAAM,IAAI,IAAI,yBAAyB,SAAS,IAAI,KAAK,OAAO;AAEtE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,aAAa,cAChB,mCAAmC,kBAAkB;AAEvD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;;EAQA,uBAAoB;AAClB,WAAO,IAAI,IAAI,YAAY,KAAK,OAAO;EACzC;;AAUI,IAAO,oCAAP,cAAiD,gCAA+B;EAIpF,YACW,SACT,YAEA,cAEC;AAED,UAAM,SAAS,YAAY,YAAY;AAP9B,SAAA,UAAA;AAQT,SAAK,yBAAyB,gBAAgB;EAChD;EAEA,kBAAkB,YAAkB;AAClC,WAAO,IAAI,IAAI,aAAa,UAAU,KAAK,KAAK,OAAO;EACzD;;;;;;;EASA,MAAM,eACJ,OACA,MAAmD;AAEnD,UAAM,MAAM,IAAI,IAAI,wBAAwB,KAAK,OAAO;AAExD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,uBAAuB,cAC1B,qCAAqC,eAAe;AAEtD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,6BACJ,OACA,YACA,MAAuD;AAEvD,UAAM,MAAM,IAAI,IACd,wBAAwB,UAAU,SAClC,KAAK,OAAO;AAGd,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,eAAe,IAAI;MAC5B,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,eACJ,OACA,YACA,MAAqD;AAErD,UAAM,MAAM,IAAI,IAAI,wBAAwB,UAAU,IAAI,KAAK,OAAO;AAEtE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;MACA;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,uBAAuB,cAC1B,qCAAqC,eAAe;AAEtD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,cACJ,OACA,QAAyB;AAEzB,UAAM,MAAM,IAAI,IAAI,wBAAwB,KAAK,OAAO;AAExD,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,0BAAyB,CAAE;MAC5D,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;EAMA,MAAM,mBAAmB,OAAgC,YAAkB;AACzE,UAAM,MAAM,IAAI,IAAI,wBAAwB,UAAU,IAAI,KAAK,OAAO;AAEtE,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AAED,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,+BAA8B,CAAE;MACjE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,eACJ,OACA,YACA,SAA8B,CAAA,GAAE;AAEhC,UAAM,MAAM,IAAI,IAAI,wBAAwB,UAAU,IAAI,KAAK,OAAO;AAEtE,QAAI,OAAO,UAAU,QAAW;AAC9B,UAAI,aAAa,IAAI,SAAS,OAAO,QAAQ,QAAQ,IAAI;IAC3D;AAEA,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe,WAAW;AAC7B,aAAK,uBAAuB,cAC1B,qCAAqC,eAAe;AAEtD,eAAO,eAAe,IAAI;MAC5B;MACA,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;EAKA,MAAM,oBACJ,OACA,YACA,QAAkD;AAElD,UAAM,MAAM,IAAI,IAAI,wBAAwB,UAAU,QAAQ,KAAK,OAAO;AAE1E,QAAI,OAAO,UAAU;AACnB,UAAI,aAAa,IAAI,UAAU,OAAO,QAAQ;IAChD;AACA,QAAI,OAAO,aAAa;AACtB,UAAI,aAAa,IAAI,gBAAgB,OAAO,WAAW;IACzD;AACA,QAAI,OAAO,SAAS;AAClB,UAAI,aAAa,IAAI,cAAc,OAAO,OAAO,OAAO,CAAC;IAC3D;AAEA,UAAM,UAAkC,CAAA;AACxC,QAAI,OAAO;AACT,cAAQ,gBAAgB,0BAA0B,KAAK;IACzD;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR;KACD;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,4BAA2B,CAAE;MAC9D,KAAK,eAAe;AAClB,eAAO,eAAe,IAAI;MAC5B,KAAK,eAAe;AAClB,eAAO,eAAe,IAAI;MAC5B,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;AC/uEI,IAAO,yBAAP,MAA6B;EAGjC,YACW,SACT,YAA+B;AADtB,SAAA,UAAA;AAMK,SAAA,mBAAmB;AAHjC,SAAK,UAAU,cAAc,sBAAqB;EACpD;EAIA,aAAa,SAAe;AAC1B,UAAMC,WAAU,eAAe,QAAQ,KAAK,kBAAkB,OAAO;AACrE,WAAOA,UAAS,cAAc;EAChC;;;;;EAMA,MAAM,UAAU,MAA0B;AACxC,UAAM,MAAM,IAAI,IAAI,UAAU,KAAK,OAAO;AAC1C,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR,SAAS;QACP,eAAe,OACX,oBAAoB,KAAK,UAAU,KAAK,QAAQ,IAChD;;KAEP;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,sBAAqB,CAAE;MACxD,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;;;EAMA,MAAM,WACJ,MACA,QAA0C;AAE1C,UAAM,MAAM,IAAI,IAAI,WAAW,KAAK,OAAO;AAC3C,wBAAoB,KAAK,MAAM;AAC/B,wBAAoB,KAAK,MAAM;AAC/B,UAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM;MAC9C,QAAQ;MACR,SAAS;QACP,eAAe,OACX,oBAAoB,KAAK,UAAU,KAAK,QAAQ,IAChD;;KAEP;AACD,YAAQ,KAAK,QAAQ;MACnB,KAAK,eAAe;AAClB,eAAO,kBAAkB,MAAM,+BAA8B,CAAE;MACjE,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C,KAAK,eAAe;AAClB,eAAO,mBAAmB,KAAK,QAAQ,IAAI;MAC7C;AACE,eAAO,iBAAiB,MAAM,MAAM,uBAAuB,IAAI,CAAC;IACpE;EACF;;;;AC/HF,aAAwB;AAGxB,IAAMC,UAAS,IAAI,OAAO,eAAe;AAElC,IAAI,MAAW;AAMhB,SAAU,UAAU,MAAcC,UAA6B;AACnE,SAAO,KAAK,QAAQ,KAAK,GAAG;AAE5B,MAAI,CAACA,SAAQ,IAAI,GAAG;AAClB,IAAAA,SAAQ,IAAI,IAAI,CAAA;EAElB;AACA,QAAM,IAAW,WAAIA,SAAQ,IAAI,CAAC;AACpC;AAgBA,SAAS,aAAa,WAAgC;AACpD,MAAIC,KAAI;AACR,WAASC,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACzC,IAAAD,MAAK,UAAUC,EAAC;AAChB,QAAIA,KAAI,UAAU,SAAS,GAAG;AAC5B,MAAAD,MAAK,IAAIC,KAAI,CAAC;IAChB;EACF;AACA,SAAOD;AACT;AAKM,SAAU,SACd,cACG,QAAa;AAEhB,QAAMA,KAAI,aAAa,SAAS;AAChC,QAAM,KAAK,IACR,UAAUA,EAAC,EACX,SAAS,GAAGA,EAAC,EACb,MAAM,GAAG,MAAM;AAClB,SAAO;AACT;AAKM,SAAU,UACd,cACG,QAAa;AAEhB,QAAMA,KAAI,aAAa,SAAS;AAChC,MAAI,CAACA;AAAG,WAAO,CAAA;AACf,QAAM,cAAgC,IAAI,SAASA,IAAGA,IAAG,CAAC;AAC1D,SAAO,6BAA6B,aAAa,MAAM;AACzD;AAKM,SAAU,UAAU,EACxB,UACA,MAAK,GAIN;AACC,QAAME,KAAI,CAAA,EAAG,OAAO,QAAQ;AAC5B,QAAMF,KAAI,eAAeE,EAAC;AAC1B,MAAI,CAACF;AAAG,WAAO,CAAA;AACf,QAAM,cAAgC,IAAI,SAASA,IAAGA,IAAG,CAAC;AAC1D,MAAI,OAAO;AACT,YAAQ,IAAI,gBAAgBA,IAAG,OAAO,WAAW;EACnD;AACA,SAAO,6BAA6B,aAAaE,EAAC;AACpD;AAoBA,SAAS,6BACP,aACA,YAAsB;AAEtB,QAAM,KAAK,YAAY,MAAM,WAAW;AAGxC,QAAM,sBAAsB,CAAA;AAC5B,WAASC,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAK;AAC1C,UAAMC,KAAI,WAAWD,EAAC;AACtB,QAAIC,OAAM,QAAW;AACnB;IACF,WAAW,OAAOA,OAAM,UAAU;AAChC;IACF,OAAO;AACL,0BAAoB,KAAKA,EAAC;IAC5B;EACF;AACA,QAAM,SAAS,CAAA;AACf,WAASD,KAAI,GAAGA,KAAI,GAAG,QAAQA,MAAK;AAClC,QAAIA,KAAI,KAAK,GAAG;AAEd,aAAO,KAAK,GAAGA,EAAC,CAAC;IACnB,OAAO;AACL,YAAM,WAAW,OAAO,SAAS,GAAGA,EAAC,CAAC,IAAI;AAC1C,aAAO,KAAK,oBAAoB,QAAQ,CAAC;IAC3C;EACF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,UAAoB;AAC1C,MAAIE,KAAI;AACR,QAAM,KAAK,SAAS,IAAI,CAACC,OAAK;AAC5B,QAAI,OAAOA,OAAM,UAAU;AACzB,aAAOA;IACT;AACA,WAAO,IAAID,IAAG;EAChB,CAAC;AACD,QAAME,KAAI,GAAG,KAAK,EAAE,EAAE,QAAQ,OAAO,GAAG,EAAE,KAAI;AAC9C,SAAOA;AACT;AAEO,IAAM,OAAO;EAClB,KAAK;EACL;EACA;EACA;;;;AC8BF,IAAI,SAAS,IAAI,WAAW,CAAC;AAC7B,IAAI,SAAS,IAAI,WAAW,CAAC;AAC7B,IAAI,MAAM,IAAI,WAAW,CAAC;AAC1B,IAAI,MAAM,IAAI,WAAW,CAAC;;;ACrK1B,IAAY;CAAZ,SAAYC,mBAAgB;AAC1B,EAAAA,kBAAA,eAAA,IAAA;AACA,EAAAA,kBAAA,sBAAA,IAAA;AACA,EAAAA,kBAAA,4BAAA,IAAA;AACA,EAAAA,kBAAA,+BAAA,IAAA;AACA,EAAAA,kBAAA,yBAAA,IAAA;AACA,EAAAA,kBAAA,wBAAA,IAAA;AACA,EAAAA,kBAAA,2BAAA,IAAA;AACF,GARY,qBAAA,mBAAgB,CAAA,EAAA;AAqF5B,IAAY;CAAZ,SAAYC,yBAAsB;AAChC,EAAAA,wBAAA,gBAAA,IAAA;AACA,EAAAA,wBAAA,sBAAA,IAAA;AACA,EAAAA,wBAAA,wBAAA,IAAA;AACA,EAAAA,wBAAA,cAAA,IAAA;AACA,EAAAA,wBAAA,sBAAA,IAAA;AACA,EAAAA,wBAAA,oBAAA,IAAA;AACA,EAAAA,wBAAA,cAAA,IAAA;AACA,EAAAA,wBAAA,sBAAA,IAAA;AACA,EAAAA,wBAAA,oBAAA,IAAA;AACA,EAAAA,wBAAA,WAAA,IAAA;AACA,EAAAA,wBAAA,UAAA,IAAA;AACA,EAAAA,wBAAA,WAAA,IAAA;AACA,EAAAA,wBAAA,oBAAA,IAAA;AACA,EAAAA,wBAAA,uBAAA,IAAA;AACA,EAAAA,wBAAA,aAAA,IAAA;AACA,EAAAA,wBAAA,qBAAA,IAAA;AACA,EAAAA,wBAAA,mBAAA,IAAA;AACA,EAAAA,wBAAA,SAAA,IAAA;AACF,GAnBY,2BAAA,yBAAsB,CAAA,EAAA;;;AC5ElC,IAAI,QAAQ;AAEN,IAAO,8BAAP,MAAkC;EAEtC,YACU,MACA,IAAwB;AADxB,SAAA,OAAA;AACA,SAAA,KAAA;AAHO,SAAA,iBAAiB,oBAAI,IAAG;EAItC;EAEI,cAAc,IAAU;AAC7B,UAAM,aAAa,KAAK,eAAe,IAAI,EAAE;AAC7C,QAAI,CAAC;AAAY;AACjB,eAAW,OAAM;EACnB;EAEA,MAAM,MACJ,KACA,KAAoC;AAEpC,UAAM,KAAK,OAAO,KAAK;AACvB,YAAQ,QAAQ;AAEhB,UAAM,aAAa,kBAAkB,OAAM;AAC3C,QAAI,KAAK,mBAAmB;AAC1B,UAAI,kBAAkB,YAAY,WAAW,MAAM;IACrD;AACA,SAAK,eAAe,IAAI,IAAI,UAAU;AAEtC,SAAK,GAAG,QAAQ;MACd;MACA,MAAM,aAAa,IAAG;MACtB,MAAM,uBAAuB;MAC7B;KACD;AAED,UAAM,iBAAiB,OAAO,CAAA;AAC9B,mBAAe,oBAAoB,WAAW;AAC9C,QAAI;AACF,YAAM,MAAM,MAAM,KAAK,KAAK,MAAM,KAAK,cAAc;AACrD,WAAK,GAAG,QAAQ;QACd;QACA,MAAM,aAAa,IAAG;QACtB,MAAM,uBAAuB;QAC7B;QACA,QAAQ,IAAI;OACb;AACD,aAAO;IACT,SAASC,IAAG;AACV,WAAK,GAAG,QAAQ;QACd;QACA,MAAM,aAAa,IAAG;QACtB,MAAM,uBAAuB;QAC7B;QACA,OAAO,4BAA4BA,EAAC;OACrC;AACD,YAAMA;IACR;AACE,WAAK,eAAe,OAAO,EAAE;IAC/B;EACF;;;;AC9EF,IAAMC,YAAW;AAKX,SAAU,oBAAoB,MAAiB;AACnD,QAAM,YAAY,IAAI,WAAW,IAAI;AACrC,MAAI,KAAK;AACT,QAAM,OAAO,KAAK;AAClB,MAAI,SAAS;AACb,MAAI,UAAU;AACd,MAAI,MAAM;AACV,SAAO,MAAM,QAAQ,UAAU,GAAG;AAChC,QAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,YAAMC,KAAI,UAAU,KAAK;AACzB,eAAU,UAAU,IAAKA;AACzB,iBAAW;IACb;AACA,QAAI,UAAU,GAAG;AAEf,eAAS,UAAW,IAAI;AACxB,gBAAU;IACZ;AACA,UAAMC,KAAK,WAAY,UAAU,IAAM;AACvC,UAAMF,UAASE,EAAC;AAChB,eAAW;EACb;AACA,SAAO;AACT;AAEM,SAAU,uBAAuBC,IAAS;AAC9C,WAAS,MAAM,GAAG,MAAMA,GAAE,QAAQ,OAAO;AACvC,UAAMC,KAAID,GAAE,OAAO,GAAG;AACtB,QAAIH,UAAS,QAAQI,EAAC,MAAM;AAAI,aAAO;EACzC;AACA,SAAO;AACT;AAEM,SAAU,yBAAsB;AACpC,QAAM,MAAM,eAAe,EAAE;AAC7B,SAAO,oBAAoB,GAAG;AAChC;;;AC/BA,IAAMC,WAAS,IAAI,OAAO,UAAU;AAepC,IAAM,iBAAN,MAAoB;EAClB,YAAmBC,IAAM;AAAN,SAAA,IAAAA;EAAS;EAE5B,QAAK;AACH,kBAAc,KAAK,CAAC;EACtB;;;;;EAMA,QAAK;AACH,QAAI,OAAO,KAAK,MAAM,YAAY,WAAW,KAAK,GAAG;AACnD,WAAK,EAAE,MAAK;IACd;EACF;;AAGF,IAAM,gBAAN,MAAmB;EACjB,YAAmBA,IAAM;AAAN,SAAA,IAAAA;EAAS;EAE5B,QAAK;AACH,iBAAa,KAAK,CAAC;EACrB;;;;;EAMA,QAAK;AACH,QAAI,OAAO,KAAK,MAAM,YAAY,WAAW,KAAK,GAAG;AACnD,WAAK,EAAE,MAAK;IACd;EACF;;AAMK,IAAM,kBAAgC,MAAK;AAEhD,MAAI,OAAO,YAAY,eAAe,QAAQ,QAAQ;AACpD,WAAO,MAAK;AACV,aAAO,QAAQ,OAAO,OAAM;IAC9B;EACF;AAGA,MAAI,OAAO,gBAAgB,aAAa;AAEtC,WAAO,MAAM,OAAO,KAAK,MAAM,YAAY,IAAG,IAAK,GAAI,CAAC,IAAI,OAAO,GAAI;EACzE;AAEA,SAAO,MAAM,QAAO,oBAAI,KAAI,GAAG,QAAO,CAAE,IAAI,OAAO,GAAI,IAAI,OAAO,GAAI;AACxE,GAAE;AAqBI,IAAO,qBAAP,MAAyB;;;;EAI7B,MAAM,SAAiB,UAAoB;AACzC,WAAO,IAAI,eAAe,YAAY,UAAU,OAAO,CAAC;EAC1D;;;;EAKA,MAAM,SAAiB,UAAoB;AACzC,WAAO,IAAI,cAAc,WAAW,UAAU,OAAO,CAAC;EACxD;;AAGK,IAAM,QAAQ,IAAI,mBAAkB;;;AC5GpC,IAAM,+BAA+B;EAC1C;IACE,MAAM,gBAAgB;IACtB,SAAS;MACP,OAAO,sBAAsB;;IAE/B,WAAW;IACX,iBAAiB;IACjB,gBAAgB;IAChB,sBAAsB;IACtB,QAAQ,cAAc;IACtB,eAAe;IACf,iBAAiB;IACjB,SAAS;IACT,SAAS,CAAA;IACT,WAAW;MACT,KAAK;;IAEP,eACE;IACF,YAAY;IACZ,MAAM;MACJ,UAAU;QACR,MAAM;QACN,SAAS;QACT,OAAO;QACP,SAAS,CAAA;QACT,cAAc,CAAA;;MAEhB,SAAS;MACT,UAAU;QACR;UACE,aAAa;UACb,UAAU;UACV,OAAO;UACP,YAAY;;;MAGhB,SAAS;MACT,mBACE;MACF,gBACE;;IAEJ,mBAAmB;IACnB,QAAQ;;EAEV;IACE,MAAM,gBAAgB;IACtB,SAAS;MACP,OAAO,sBAAsB;;IAE/B,eAAe,cAAc;IAC7B,iBAAiB;IACjB,WAAW;IACX,oBAAoB;IACpB,qBAAqB;IACrB,0BACE;IACF,SAAS;IACT,WAAW;MACT,KAAK;;IAEP,eACE;IACF,QAAQ;IACR,OAAO;MACL,MAAM;MACN,MAAM;QACJ,MAAM;;MAER,MAAM;MACN,WAAW;MACX,QAAQ;QACN;UACE,MAAM;UACN,MAAM;YACJ,MAAM;;UAER,MAAM;UACN,OACE;;;;;;;;ACxFZ,gBAAe;;;ACGf;AGDA;ACXA;ACOA;AMKA;AACA;ACNA;AACA;AuHWA;AAOA;AERA;AAOA;ACnBA;AACA;ACAA;AACA;AClBA;ACCA;ACDA;AACA;ACiBA;ACGA;AACA;ACNA;AChBA;AAEA;ACDA;ACiBA;AACA;ACHA;AChBA;ACeA;ACbA;AACA;ACFA;ACAA;AACA;ACFA;ACKA;AACA;ACNA;ACAA;ACCA;ACCA;ACFA;ADMA;AELA;ACAA;AACA;ACDA;ACAA;ACDA;ACAA;ACAA;AACA;ACDA;AACA;ACDA;ACAA;ACAA;ACEA;ACmBA;AAWA;;;;;;AzKxBO,SAAS,UACd,UAA0B,oBAAI,IAAe,GACnB;AAC1B,QAAM,MAAM,IAAI,YAAY;AAC5B,QAAM,eAAyC;IAC7C,aAAa,CAAC,YAAY;AACxB,UAAI,iBAAiB,UAAU,OAAO;AACtC,UAAI,iBAAiB,SAAS,OAAO;AACrC,aAAO,MAAM;AACX,YAAI,oBAAoB,UAAU,OAAO;AACzC,YAAI,oBAAoB,SAAS,OAAO;MAC1C;IACF;IACA,UAAU,CAAC,KAAK,YAAY;AAC1B,UAAI,iBAAiB,UAAU,GAAG,IAAI,OAAO;AAC7C,UAAI,iBAAiB,SAAS,OAAO;AACrC,aAAO,MAAM;AACX,YAAI,oBAAoB,UAAU,GAAG,IAAI,OAAO;AAChD,YAAI,oBAAoB,SAAS,OAAO;MAC1C;IACF;IACA,QAAQ,CAAC,QAAgB;AACvB,YAAM,SAAS,QAAQ,OAAO,GAAG;AAEjC,mBAAa,OAAO,QAAQ;AAC5B,UAAI,cAAc,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC;AAC5C,UAAI,cAAc,IAAI,MAAM,QAAQ,CAAC;AACrC,aAAO;IACT;IACA,KAAK,CAAC,KAAa,UAAa;AAC9B,cAAQ,IAAI,KAAK,KAAK;AAEtB,mBAAa,OAAO,QAAQ;AAC5B,UAAI,cAAc,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC;AAC5C,UAAI,cAAc,IAAI,MAAM,QAAQ,CAAC;AACrC,aAAO;IACT;IACA,OAAO,MAAM;AACX,cAAQ,MAAM;AACd,UAAI,cAAc,IAAI,MAAM,OAAO,CAAC;IACtC;IACA,SAAS,QAAQ,QAAQ,KAAK,OAAO;IACrC,SAAS,QAAQ,QAAQ,KAAK,OAAO;IACrC,KAAK,QAAQ,IAAI,KAAK,OAAO;IAC7B,KAAK,QAAQ,IAAI,KAAK,OAAO;IAC7B,MAAM,QAAQ,KAAK,KAAK,OAAO;IAC/B,MAAM,QAAQ;IACd,QAAQ,QAAQ,OAAO,KAAK,OAAO;IACnC,CAAC,OAAO,QAAQ,GAAG,QAAQ,OAAO,QAAQ;IAC1C,CAAC,OAAO,WAAW,GAAG;EACxB;AACA,SAAO;AACT;AAMO,SAAS,kBAAiD;AAC/D,QAAM,MAAM,IAAI,YAAY;AAC5B,QAAM,qBAAoD;IACxD,aAAa,CAAC,YAAY;AACxB,UAAI,iBAAiB,UAAU,OAAO;AACtC,UAAI,iBAAiB,SAAS,OAAO;AACrC,aAAO,iBAAiB,WAAW,OAAO;AAC1C,aAAO,MAAM;AACX,eAAO,oBAAoB,WAAW,OAAO;AAC7C,YAAI,oBAAoB,UAAU,OAAO;AACzC,YAAI,oBAAoB,SAAS,OAAO;MAC1C;IACF;IACA,UAAU,CAAC,KAAK,YAAY;AAC1B,UAAI,iBAAiB,UAAU,GAAG,IAAI,OAAO;AAC7C,UAAI,iBAAiB,SAAS,OAAO;AACrC,eAAS,mBAAmB,IAAkB;AAC5C,YAAI,GAAG,QAAQ,QAAQ,GAAG,QAAQ,KAAK;AACrC,kBAAQ;QACV;MACF;AACA,aAAO,iBAAiB,WAAW,kBAAkB;AACrD,aAAO,MAAM;AACX,eAAO,oBAAoB,WAAW,kBAAkB;AACxD,YAAI,oBAAoB,UAAU,GAAG,IAAI,OAAO;AAChD,YAAI,oBAAoB,SAAS,OAAO;MAC1C;IACF;IACA,QAAQ,CAAC,QAAgB;AACvB,YAAM,SAAS,aAAa,QAAQ,GAAG,MAAM;AAC7C,mBAAa,WAAW,GAAG;AAE3B,yBAAmB,OAAO,aAAa;AACvC,UAAI,cAAc,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC;AAC5C,UAAI,cAAc,IAAI,MAAM,QAAQ,CAAC;AACrC,aAAO;IACT;IACA,KAAK,CAAC,KAAaC,OAAc;AAC/B,mBAAa,QAAQ,KAAKA,EAAC;AAE3B,yBAAmB,OAAO,aAAa;AACvC,UAAI,cAAc,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC;AAC5C,UAAI,cAAc,IAAI,MAAM,QAAQ,CAAC;AACrC,aAAO;IACT;IACA,OAAO,MAAM;AACX,mBAAa,MAAM;AACnB,UAAI,cAAc,IAAI,MAAM,OAAO,CAAC;IACtC;IACA,SAAS,MAA0C;AACjD,UAAI,QAAQ;AACZ,YAAM,QAAQ,aAAa;AAC3B,aAAO;QACL,OAAO;AACL,cAAI,UAAU;AAAO,mBAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAC3D,gBAAM,MAAM,aAAa,IAAI,KAAK;AAClC,cAAI,QAAQ,MAAM;AAEhB,kBAAM,MAAM,kBAAkB;UAChC;AACA,gBAAM,OAAO,aAAa,QAAQ,GAAG;AACrC,cAAI,SAAS,MAAM;AAEjB,kBAAM,MAAM,oBAAoB;UAClC;AACA,kBAAQ,QAAQ;AAChB,iBAAO,EAAE,MAAM,OAAO,OAAO,CAAC,KAAK,IAAI,EAAE;QAC3C;QACA,CAAC,OAAO,QAAQ,IAAI;AAClB,iBAAO;QACT;MACF;IACF;IACA,SAAS,CAAC,OAAO;AACf,eAAS,QAAQ,GAAG,QAAQ,aAAa,QAAQ,SAAS;AACxD,cAAM,MAAM,aAAa,IAAI,KAAK;AAClC,YAAI,QAAQ,MAAM;AAEhB,gBAAM,MAAM,kBAAkB;QAChC;AACA,cAAM,OAAO,aAAa,QAAQ,GAAG;AACrC,YAAI,SAAS,MAAM;AAEjB,gBAAM,MAAM,oBAAoB;QAClC;AACA,WAAG,KAAK,MAAM,kBAAkB;MAClC;IACF;IACA,KAAK,CAAC,QAAgB;AACpB,YAAM,OAAO,aAAa,QAAQ,GAAG;AACrC,UAAI,SAAS;AAAM,eAAO;AAC1B,aAAO;IACT;IACA,KAAK,CAAC,QAAgB;AACpB,aAAO,aAAa,QAAQ,GAAG,MAAM;IACvC;IACA,MAAM,MAAM;AACV,UAAI,QAAQ;AACZ,YAAM,QAAQ,aAAa;AAC3B,aAAO;QACL,OAAO;AACL,cAAI,UAAU;AAAO,mBAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAC3D,gBAAM,MAAM,aAAa,IAAI,KAAK;AAClC,cAAI,QAAQ,MAAM;AAEhB,kBAAM,MAAM,kBAAkB;UAChC;AACA,kBAAQ,QAAQ;AAChB,iBAAO,EAAE,MAAM,OAAO,OAAO,IAAI;QACnC;QACA,CAAC,OAAO,QAAQ,IAAI;AAClB,iBAAO;QACT;MACF;IACF;IACA,MAAM,aAAa;IACnB,QAAQ,MAAM;AACZ,UAAI,QAAQ;AACZ,YAAM,QAAQ,aAAa;AAC3B,aAAO;QACL,OAAO;AACL,cAAI,UAAU;AAAO,mBAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAC3D,gBAAM,MAAM,aAAa,IAAI,KAAK;AAClC,cAAI,QAAQ,MAAM;AAEhB,kBAAM,MAAM,kBAAkB;UAChC;AACA,gBAAM,OAAO,aAAa,QAAQ,GAAG;AACrC,cAAI,SAAS,MAAM;AAEjB,kBAAM,MAAM,oBAAoB;UAClC;AACA,kBAAQ,QAAQ;AAChB,iBAAO,EAAE,MAAM,OAAO,OAAO,KAAK;QACpC;QACA,CAAC,OAAO,QAAQ,IAAI;AAClB,iBAAO;QACT;MACF;IACF;IACA,CAAC,OAAO,QAAQ,GAAG,WAAgD;AACjE,aAAO,mBAAmB,QAAQ;IACpC;IACA,CAAC,OAAO,WAAW,GAAG;EACxB;AACA,SAAO;AACT;AAEA,IAAM,YACJ,OAAQ,WAAmB,eAC3B,OAAQ,OAAe,gBAAgB,MAAM;AAE/C,eAAe,gBAAgB;AAE7B,MAAI,WAAW;AAEb,WAAO,QAAQ,QAAQ,MAAM,IAAI;EACnC,OAAO;AACL,WAAO,OAAO,QAAQ,MAAM,IAAI;EAClC;AACF;AAEA,eAAe,cAAc,KAA0B;AACrD,MAAI,WAAW;AAEb,WAAO,QAAQ,QAAQ,MAAM,IAAI,GAAG;EACtC,OAAO;AACL,WAAO,OAAO,QAAQ,MAAM,IAAI,GAAG;EACrC;AACF;AAEA,SAAS,uBAAuB,IAAsC;AACpE,MAAI,WAAW;AAEb,YAAQ,QAAQ,MAAM,UAAU,YAAY,EAAE;EAChD,OAAO;AACL,WAAO,QAAQ,MAAM,UAAU,YAAY,EAAE;EAC/C;AACF;AAEO,SAAS,kBACd,SAC+B;AAC/B,gBAAc,EAAE,KAAK,CAAA,YAAW;AAC9B,WAAO,QAAQ,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACC,KAAGD,EAAC,MAAM;AAChD,cAAQ,IAAIC,KAAGD,EAAW;IAC5B,CAAC;EACH,CAAC;AAED,UAAQ,YAAY,YAAY;AAC9B,UAAM,SAAiC,CAAC;AACxC,eAAW,CAAC,KAAK,KAAK,KAAK,QAAQ,QAAQ,GAAG;AAC5C,aAAO,GAAG,IAAI;IAChB;AACA,UAAM,cAAc,MAAM;EAC5B,CAAC;AAED,yBAAuB,CAAC,YAAY;AAElC,UAAM,eAAe,OAAO,KAAK,OAAO;AACxC,QAAI,aAAa,WAAW,GAAG;AAC7B,cAAQ,MAAM;IAChB,OAAO;AACL,iBAAW,OAAO,cAAc;AAC9B,YAAI,CAAC,QAAQ,GAAG,EAAE,UAAU;AAC1B,kBAAQ,OAAO,GAAG;QACpB,OAAO;AACL,cAAI,QAAQ,GAAG,EAAE,aAAa,QAAQ,GAAG,EAAE,UAAU;AACnD,oBAAQ,IAAI,KAAK,QAAQ,GAAG,EAAE,QAAQ;UACxC;QACF;MACF;IACF;EACF,CAAC;AAED,SAAO;AACT;AD/OO,SAAS,gBACd,MACA,OACiB;AACjB,SAAO;IACL,IAAI;IACJ,OAAO,SAAU,eAAe;EAClC;AACF;AAQA,IAAM,sBAAsB,OAAO,WAAW;AAC9C,IAAM,wBACJ,OAAO,WAAW,eAAe,OAAO,OAAO,YAAY;AAK7D,IAAM,UAA0C,SAAS,eAAe;AACtE,MAAI,uBAAuB;AAIzB,QAAI,qBAAqB;AACvB,aAAO,kBAAkB,gBAAgB,CAAC;IAC5C,OAAO;AAEL,aAAO,kBAAkB,UAAkB,CAAC;IAC9C;EACF,WAAW,qBAAqB;AAE9B,WAAO,gBAAgB;EACzB,OAAO;AAEL,WAAO,UAAkB;EAC3B;AACF,EAAG;AAWI,SAAS,gBACd,KACA,cACoB;AACpB,QAAM,UAAU,QAAQ,QAAQ,IAAI,IAAI,EAAE,GAAG,KAAK,YAAY;AAE9D,QAAM,CAACE,IAAG,cAAc,IAAIC,GAAS,aAAa,IAAI,EAAE,IAAI;AAE5D,EAAAC,GAAU,MAAM;AACd,WAAO,QAAQ,SAAS,IAAI,IAAI,MAAM;AAEpC,qBAAe,aAAa,IAAI,EAAE,IAAI;IACxC,CAAC;EACH,GAAG,CAAC,IAAI,EAAE,CAAC;AAEX,QAAM,WAAW,CAAC,UAAuB;AACvC,QAAI,UAAU,QAAW;AACvB,cAAQ,OAAO,IAAI,EAAE;IACvB,OAAO;AACL,cAAQ;QACN,IAAI;QACJ,IAAI,QAAQ,KAAK,UAAU,KAAK,IAAK;MACvC;IACF;EACF;AAEA,SAAO;IACL,OAAO;IACP,QAAQ;IACR,OAAO,MAAM;AACX,eAAS,YAAY;IACvB;EACF;AACF;AAEA,SAAS,QAAc,SAA6B,KAAuB,cAAuC;AAChH,MAAI,YAAY;AAAW,WAAO;AAClC,MAAI;AACF,WAAO,IAAI,MAAM,OAAO,KAAK,MAAM,OAAO,CAAC;EAC7C,SAASC,KAAG;AAEV,WAAO;EACT;AACF;AEpHA,IAAM,8BAA8B;AAKpC,SAAS,eAAe,cAA0D;AAChF,MAAI,OAAO,WAAW;AAAa,WAAO;AAE1C,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,aAAa,OAAO,UAAU,QAAQ,KAAK,6BAA6B;AAC1E,aAAO,OAAO,UAAU;IAC1B;EACF;AACA,MAAI,OAAO,UAAU,WAAW;AAC9B,UAAMC,UAAQ,OAAO,QAAQ,YAAY,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM;AACnE,UAAI,QAAQ;AAA6B,eAAO;AAChD,aAAO,OAAO,UAAU,UAAU,UAAU,CAAAC,OAAKA,GAAE,WAAW,IAAI,CAAC,MAAM;IAC3E,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,MAAM,MAAM,EAAE;AAE3C,QAAID,QAAM,SAAS,GAAG;AACpB,UAAI,MAAMA,QAAM,CAAC;AACjBA,MAAAA,QAAM,QAAQ,CAAAN,OAAK;AACjB,YAAIA,GAAE,QAAQ,IAAI,OAAO;AACvB,gBAAMA;QACR;MACF,CAAC;AACD,aAAO,IAAI;IACb;EACF;AAAC;AAED,SAAO;AACT;AAEA,IAAM,oBAAoB,gBAAgB,iBAAiB;AAEpD,SAAS,QAAQQ,WAA6B,cAA8D;AACjH,QAAM,gBAAgB,eAAe,YAAY,KAAKA,aAAW,MAAM,UAAU,GAAG,CAAC;AACrF,SAAO,gBAAgB,mBAAmB,YAAY;AACxD;ACnCA,IAAMC,WAAsC,UAAe;ACY3D,IAAMC,WAAU,UAA4C;AAGrD,IAAM,8BAA8B,SAAS,SAAS;EAC3D,SAAS;AACX,CAAC;AEzBM,SAAS,aAAa,KAAqB;AAChD,SAAO,aAAa,aAAa,GAAG,CAAC;AACvC;AAqDA,SAAS,WAAW,QAAwB;AAC1C,SAAO,SAAS,KACZ,SAAS,KACT,SAAS,KACP,SAAS,KACT,SAAS,KACP,SAAS,IACT,WAAW,KACT,KACA,WAAW,KACT,KACA;AACd;AAEA,SAAS,aAAa,QAA4B;AAChD,MAAI,QAAQ;AACZ,MAAI,UAAU;AAEd,QAAM,OAAO,OAAO;AACpB,MAAI,UAAU;AACd,WAAS,OAAO,GAAG,OAAO,MAAM,QAAQ;AACtC,YAAQ,OAAO;AAMf,eAAW,OAAO,IAAI,MAAO,OAAO,QAAS;AAC7C,QAAI,UAAU,KAAK,OAAO,SAAS,SAAS,GAAG;AAC7C,iBAAW,OAAO;QAChB,WAAY,YAAY,KAAM,EAAE;QAChC,WAAY,YAAY,KAAM,EAAE;QAChC,WAAY,YAAY,IAAK,EAAE;QAC/B,WAAW,UAAU,EAAE;MACzB;AACA,gBAAU;IACZ;EACF;AACA,SACE,QAAQ,UAAU,GAAG,QAAQ,SAAS,IAAI,KAAK,KAC9C,UAAU,IAAI,KAAK,UAAU,IAAI,MAAM;AAE5C;AA+CA,SAAS,aAAa,SAA6B;AACjD,MAAI;AACJ,QAAM,UAAU,QAAQ;AACxB,MAAI,UAAU;AAGd,WAAS,UAAU,GAAG,UAAU,SAAS,WAAW;AAClD,WAAO,QAAQ,YAAY,OAAO;AAClC,QAAI,SAAS,QAAW;AACtB,YAAM,MAAM,cAAc,OAAO,2BAA2B,QAAQ,MAAM,EAAE;IAC9E;AAEA,QAAI,QAAQ,OAAS;AACnB;IACF;AAEA,eACE,OAAO,MACH,IACA,OAAO,OACL,IACA,OAAO,QACL,IACA,OAAO,UACL,IACA,OAAO,WACL,IACA;EAChB;AAEA,QAAM,SAAS,IAAI,WAAW,OAAO;AAGrC,MAAI,OAAO;AACX,MAAI,UAAU;AACd,SAAO,OAAO,SAAS;AACrB,WAAO,QAAQ,YAAY,OAAO;AAClC,QAAI,SAAS,QAAW;AACtB,YAAM,MAAM,cAAc,OAAO,2BAA2B,QAAQ,MAAM,EAAE;IAC9E;AACA,QAAI,OAAO,KAAK;AAEd,aAAO,MAAM,IAAI;IACnB,WAAW,OAAO,MAAO;AAEvB,aAAO,MAAM,IAAI,OAAO,SAAS;AACjC,aAAO,MAAM,IAAI,OAAO,OAAO;IACjC,WAAW,OAAO,OAAS;AAEzB,aAAO,MAAM,IAAI,OAAO,SAAS;AACjC,aAAO,MAAM,IAAI,OAAQ,SAAS,IAAK;AACvC,aAAO,MAAM,IAAI,OAAO,OAAO;IACjC,WAAW,OAAO,SAAU;AAE1B,aAAO,MAAM,IAAI,OAAO,SAAS;AACjC,aAAO,MAAM,IAAI,OAAQ,SAAS,KAAM;AACxC,aAAO,MAAM,IAAI,OAAQ,SAAS,IAAK;AACvC,aAAO,MAAM,IAAI,OAAO,OAAO;AAC/B;IACF,WAAW,OAAO,UAAW;AAE3B,aAAO,MAAM,IAAI,OAAO,SAAS;AACjC,aAAO,MAAM,IAAI,OAAQ,SAAS,KAAM;AACxC,aAAO,MAAM,IAAI,OAAQ,SAAS,KAAM;AACxC,aAAO,MAAM,IAAI,OAAQ,SAAS,IAAK;AACvC,aAAO,MAAM,IAAI,OAAO,OAAO;AAC/B;IACF,OAAqC;AAEnC,aAAO,MAAM,IAAI,OAAO,SAAS;AACjC,aAAO,MAAM,IAAI,OAAQ,SAAS,KAAM;AACxC,aAAO,MAAM,IAAI,OAAQ,SAAS,KAAM;AACxC,aAAO,MAAM,IAAI,OAAQ,SAAS,KAAM;AACxC,aAAO,MAAM,IAAI,OAAQ,SAAS,IAAK;AACvC,aAAO,MAAM,IAAI,OAAO,OAAO;AAC/B;IACF;AACA;EACF;AAEA,SAAO;AACT;AC1MA,eAAsB,sBACpB,SACA,UACA,UAA0B,CAAC,GACC;AAC5B,QAAM,iBAAyC,CAAC;AAChD,MAAI,QAAQ,OAAO;AACjB,mBAAe,gBAAgB,uBAAuB,QAAQ,KAAK;EACrE,WAAW,QAAQ,WAAW;AAC5B,mBAAe,gBAAgB,SAAS;MACtC,GAAG,QAAQ,UAAU,QAAQ,IAAI,QAAQ,UAAU,QAAQ;IAC7D,CAAC;EACH;AACA,iBAAe,cAAc,IAC3B,CAAC,QAAQ,eAAe,QAAQ,gBAAgB,SAAS,qBAAqB;AAEhF,MAAI,QAAQ,0BAA0B;AACpC,mBAAe,6BAA6B,IAC1C,QAAQ;EACZ;AAEA,QAAM,gBAAgB,SAAS,UAAU;AACzC,QAAM,cAAc,SAAS;AAC7B,QAAM,iBAAiB,SAAS,WAAW,IAAI;AAC/C,QAAM,gBAAgB,QAAQ,UAAU,CAAC;AACzC,QAAM,sBAAsB,QAAQ,gBAAgB;AACpD,QAAM,qBAAqB,QAAQ,eAAe;AAElD,QAAM,WAAW,YAAY,SAAS,QAAQ;AAE9C,MAAI,CAAC,UAAU;AACb,UAAMC,SAAqC;MACzC,MAAM;QACJ,KAAK,GAAG,OAAO,GAAG,QAAQ;QAC1B,SAAS,CAAC;QACV,UAAU,CAAC,CAAC,QAAQ;QACpB,QAAQ;QACR;MACF;MACA,MAAM;MACN,WAAW;MACX,SAAS;MACT,SAAS,iBAAiB,OAAO,GAAG,QAAQ;IAC9C;AACA,UAAM,IAAI,aAAaA,MAAK;EAC9B;AAEA,SAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,aAAS,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;EAC9C,CAAC;AAED,MAAI,UAAgC;AACpC,MAAI,eAAe,MAAM;AACvB,QAAI,OAAO,gBAAgB,UAAU;AACnC,gBAAU;IACZ,WAAW,uBAAuB,aAAa;AAC7C,gBAAU;IACZ,WAAW,YAAY,OAAO,WAAW,GAAG;AAC1C,gBAAU;IACZ,WAAW,OAAO,gBAAgB,UAAU;AAC1C,gBAAU,KAAK,UAAU,WAAW;IACtC,OAAO;AACL,YAAMA,SAAqC;QACzC,MAAM;UACJ,KAAK,SAAS;UACd,SAAS,CAAC;UACV,UAAU,CAAC,CAAC,QAAQ;UACpB,QAAQ;UACR;QACF;QACA,MAAM;QACN,WAAW;QACX,SAAS;QACT,SAAS,mCAAmC,OAAO,WAAW;MAChE;AACA,YAAM,IAAI,aAAaA,MAAK;IAC9B;EACF;AAEA,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,YAAY,WAAW,MAAM;AACjC,eAAW,MAAM,sBAAsB;EACzC,GAAG,cAAc;AAEjB,MAAI;AACJ,MAAI;AACF,eAAW,MAAM,MAAM,SAAS,MAAM;MACpC,SAAS;MACT,QAAQ;MACR,aAAa;MACb,MAAM,qBAAqB,YAAY;MACvC,OAAO,sBAAsB,aAAa;MAC1C,MAAM;MACN,QAAQ,WAAW;IACrB,CAAC;EACH,SAAS,IAAI;AACX,UAAM,OAAoB;MACxB;MACA,KAAK,SAAS;MACd,UAAU,CAAC,CAAC,QAAQ;MACpB,QAAQ;MACR;IACF;AAEA,QAAI,cAAc,OAAO;AACvB,UAAI,GAAG,YAAY,wBAAwB;AACzC,cAAMA,UAAiC;UACrC;UACA,MAAM;UACN,SAAS;QACX;AACA,cAAM,IAAI,aAAaA,OAAK;MAC9B;IACF;AAEA,UAAMA,SAAqC;MACzC;MACA,MAAM;MACN,WAAW;MACX,SAAS;MACT,SAAU,cAAc,QAAQ,GAAG,UAAU;IAC/C;AACA,UAAM,IAAI,aAAaA,MAAK;EAC9B;AAEA,MAAI,WAAW;AACb,iBAAa,SAAS;EACxB;AACA,QAAM,YAAY,IAAI,QAAQ;AAC9B,WAAS,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACvC,cAAU,IAAI,KAAK,KAAK;EAC1B,CAAC;AAED,MAAI,SAAS,IAAI;AACf,UAAM,SAAS,MAAM;MACnB;MACA,SAAS;MACT;MACA,CAAC,CAAC,QAAQ;MACV;IACF;AACA,WAAO;EACT,OAAO;AACL,UAAM,UAAU,MAAM,SAAS,KAAK;AACpC,UAAMA,SAAQ;MACZ,SAAS;MACT;MACA,SAAS;MACT;MACA;IACF;AACA,UAAM,IAAI,aAAaA,MAAK;EAC9B;AACF;AAoIO,IAAM,eAAN,cAAwC,MAAM;EAMnD,YAAYC,KAA2B;AACrC,UAAMA,IAAE,OAAO;AACf,SAAK,OAAOA;AACZ,SAAK,QAAQA;EACf;AACF;AA0BA,eAAe,eACb,UACA,KACA,SACA,UACA,SAC4B;AAC5B,QAAM,UAAU,MAAM,SAAS,KAAK;AACpC,QAAM,OAAO,UAAU,KAAK,MAAM,OAAO,IAAI;AAC7C,SAAO;IACL,IAAI;IACJ;IACA,MAAM;MACJ;MACA;MACA;MACA;MACA,QAAQ,SAAS;IACnB;EACF;AACF;AAKO,SAAS,mBACd,KACA,SACA,QACA,SACA,cAK8B;AAC9B,QAAM,UAAU,gBAAgB,CAAC;AACjC,QAAM,OAAoB;IACxB;IACA;IACA,UAAU,CAAC,CAAC,QAAQ;IACpB;IACA,QAAQ,UAAU;EACpB;AAGA,MAAI;AACF,UAAM,OAAO,UAAU,KAAK,MAAM,OAAO,IAAI;AAC7C,UAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,OAAO,KAAK,UAAU,KAAK,IAAI;AAChE,UAAM,YACJ,CAAC,QAAQ,CAAC,KAAK,OAAO,cAAc,GAAG,KAAK,IAAI,IAAI,SAAS;AAE/D,QAAI,UAAU,UAAU,OAAO,SAAS,KAAK;AAC3C,YAAM,UACJ,SAAS,SACL,iBAAiB,MAAM,oBACvB;AAEN,YAAMD,SAA8C;QAClD,MAAM;QACN;QACA;QACA;QACA,SAAS;MACX;AACA,aAAOA;IACT;AACA,QAAI,UAAU,UAAU,OAAO,SAAS,KAAK;AAC3C,YAAM,UACJ,SAAS,SACL,iBAAiB,MAAM,oBACvB;AACN,YAAMA,SAA8C;QAClD,MAAM;QACN;QACA;QACA;QACA,SAAS;MACX;AACA,aAAOA;IACT;AACA,WAAO;MACL;MACA,SAAS;MACT,MAAM;MACN;MACA,WAAW;MACX,SAAS,iCAAiC,MAAM;IAClD;EACF,SAAS,IAAI;AACX,UAAMA,SAAqC;MACzC;MACA,SAAS;MACT;MACA,MAAM;MACN,WAAW;MACX,MAAM;MACN,SAAS;IACX;AAEA,WAAOA;EACT;AACF;AAKA,SAAS,YAAY,SAAiB,UAAmC;AACvE,MAAI;AACF,WAAO,IAAI,IAAI,GAAG,OAAO,GAAG,QAAQ,EAAE;EACxC,SAAS,IAAI;AACX,WAAO;EACT;AAEF;ACtbA,IAAME,WAAS,IAAI,OAAO,gBAAgB;ACGnC,IAAM,sBAAN,MAAwD;EAKtD,YAAY,MAAoB;AAJvC,SAAQ,WAAW,IAAIC,iBAAiB;AACxC,SAAQ,oBAAoB;AAC5B,SAAQ,aAAa;AAGnB,SAAK,oBAAoB,MAAM,oBAAoB;AACnD,SAAK,aAAa,MAAM,cAAc;EACxC;EAEA,MAAM,MACJ,YACA,SACuB;AACvB,UAAM,gBAAgB,SAAS,UAAU;AACzC,UAAM,cAAc,SAAS;AAC7B,UAAM,gBAAgB,SAAS;AAC/B,UAAM,iBACJ,SAAS,WAAWC,SAAS,iBAAiBC,0BAA0B;AAC1E,UAAM,gBAAgB,SAAS;AAE/B,UAAM,YAAY,IAAI,IAAI,UAAU;AACpC,QAAI,KAAK,qBAAqB,KAAK,SAAS,cAAc,UAAU,GAAG;AACrE,YAAMC,WAAW;QACfC,eAAe;QACf;UACE;UACA;UACA,eAAe,KAAK,SAAS,iBAAiB,UAAU;QAC1D;QACA,qBAAqB,UAAU,MAAM;MACvC;IACF;AACA,QAAI,KAAK,cAAc,UAAU,aAAa,UAAU;AACtD,YAAMD,WAAW;QACfC,eAAe;QACf;UACE;UACA;QACF;QACA,cAAc,UAAU,MAAM,kCAAkC,UAAU,QAAQ;MACpF;IACF;AAEA,UAAM,SACJ,kBAAkB,UAAU,kBAAkB,SAAS,kBAAkB,UACrEC,WAAW,WAAW,IACtB;AAEN,UAAM,oBAAoBC,kBAAkB,aAAa;AACzD,QAAI,eAAe;AACjB,aAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,YAAI,UAAU;AAAW;AACzB,0BAAkB,GAAG,IAAI;MAC3B,CAAC;IACH;AAEA,UAAM,aAAa,IAAI,gBAAgB;AACvC,QAAI;AACJ,QAAI,eAAe,SAAS,WAAW;AACrC,kBAAY,WAAW,MAAM;AAC3B,mBAAW,MAAMF,eAAe,eAAe;MACjD,GAAG,eAAe,IAAI;IACxB;AACA,QAAI,eAAe;AACjB,oBAAc,YAAY,MAAM;AAC9B,mBAAW,MAAMA,eAAe,6BAA6B;MAC/D,CAAC;IACH;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,YAAY;QACvC,SAAS;QACT,MAAM;QACN,QAAQ;QACR,QAAQ,WAAW;MACrB,CAAC;AAED,UAAI,WAAW;AACb,qBAAa,SAAS;MACxB;AAEA,YAAM,YAAY,IAAIG,SAAQ;AAC9B,eAAS,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACvC,kBAAU,IAAI,KAAK,KAAK;MAC1B,CAAC;AACD,aAAO;QACL,SAAS;QACT,QAAQ,SAAS;QACjB;QACA;QACA,MAAM,gBAAgB,UAAU,YAAY,aAAa;QACzD,MAAM,gBAAgB,UAAU,YAAY,aAAa;QACzD,OAAO,aAAa,MAAM,SAAS,KAAK,GAAG,YAAY;MACzD;IACF,SAASC,KAAG;AACV,UAAI,WAAW,QAAQ;AACrB,cAAML,WAAW;UACf,WAAW,OAAO;UAClB;YACE;YACA;YACA,WAAW,eAAe,SAAS,YAAY,IAAI,eAAe;UACpE;UACA;QACF;MACF;AACA,YAAMK;IACR;EACF;AAEF;AAEA,SAAS,gBACP,UACA,YACA,eACA;AACA,SAAO,eAAe,sBAAoC;AACxD,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,SAAS,KAAK;IACjC,SAASA,KAAG;AACV,YAAML,WAAW;QACfC,eAAe;QACf;UACE;UACA;UACA,gBAAgB,SAAS;QAC3B;QACA;MACF;IACF;AACA,WAAO;EACT;AACF;AAEA,SAAS,gBACP,UACA,YACA,eACA;AACA,MAAI,eAAwB;AAC5B,SAAO,eAAe,sBAAoC;AACxD,QAAI,iBAAiB,QAAW;AAC9B,UAAI;AACF,uBAAe,MAAM,SAAS,KAAK;MACrC,SAASI,KAAG;AACV,cAAM,UAAUA,eAAa,QAAQ,oCAAoCA,IAAE,OAAO,KAAK;AACvF,cAAML,WAAW;UACfC,eAAe;UACf;YACE;YACA;YACA,gBAAgB,SAAS;UAC3B;UACA;QACF;MACF;IACF;AACA,QAAI,iBAAiB,QAAQ,OAAO,iBAAiB,UAAU;AAC7D,YAAMD,WAAW;QACfC,eAAe;QACf;UACE;UACA;UACA,gBAAgB,SAAS;QAC3B;QACA;MACF;IACF;AACA,WAAO;EACT;AACF;AC1LO,SAAS,WAEd,SAAiB,SAA+C;AAChE,QAAM,MAAM;AACZ,SAAO;IACL,SAAS,IAAI,OAAO,OAAO;IAC3B;EACF;AACF;AAkBA,IAAM,eAAe;EACnB,SAAS,IAAI,OAAO,IAAI;EACxB,KAAK,MAAM;AACb;ACpBA,IAAM,UAAU,EAAoB,EAAE,SAAS,sBAAsB,CAAQ;AErC9D,SAAR,kBAAmC,MAAM;AAC9C,SAAO,WAAY;AACjB,QAAI,UAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AAEnF,QAAI,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,KAAK,IAAI,KAAK;AACzD,QAAIK,UAAS,KAAK,QAAQ,KAAK,KAAK,KAAK,QAAQ,KAAK,YAAY;AAClE,WAAOA;EACT;AACF;ACRe,SAAR,gBAAiC,MAAM;AAC5C,SAAO,SAAU,YAAY,SAAS;AACpC,QAAI,UAAU,YAAY,QAAQ,YAAY,UAAU,QAAQ,UAAU,OAAO,QAAQ,OAAO,IAAI;AACpG,QAAI;AAEJ,QAAI,YAAY,gBAAgB,KAAK,kBAAkB;AACrD,UAAI,eAAe,KAAK,0BAA0B,KAAK;AACvD,UAAI,QAAQ,YAAY,QAAQ,YAAY,UAAU,QAAQ,QAAQ,OAAO,QAAQ,KAAK,IAAI;AAC9F,oBAAc,KAAK,iBAAiB,KAAK,KAAK,KAAK,iBAAiB,YAAY;IAClF,OAAO;AACL,UAAI,gBAAgB,KAAK;AAEzB,UAAI,SAAS,YAAY,QAAQ,YAAY,UAAU,QAAQ,QAAQ,OAAO,QAAQ,KAAK,IAAI,KAAK;AAEpG,oBAAc,KAAK,OAAO,MAAM,KAAK,KAAK,OAAO,aAAa;IAChE;AAEA,QAAI,QAAQ,KAAK,mBAAmB,KAAK,iBAAiB,UAAU,IAAI;AAExE,WAAO,YAAY,KAAK;EAC1B;AACF;ACrBe,SAAR,aAA8B,MAAM;AACzC,SAAO,SAAUC,SAAQ;AACvB,QAAI,UAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AACnF,QAAI,QAAQ,QAAQ;AACpB,QAAI,eAAe,SAAS,KAAK,cAAc,KAAK,KAAK,KAAK,cAAc,KAAK,iBAAiB;AAClG,QAAI,cAAcA,QAAO,MAAM,YAAY;AAE3C,QAAI,CAAC,aAAa;AAChB,aAAO;IACT;AAEA,QAAI,gBAAgB,YAAY,CAAC;AACjC,QAAI,gBAAgB,SAAS,KAAK,cAAc,KAAK,KAAK,KAAK,cAAc,KAAK,iBAAiB;AACnG,QAAI,MAAM,MAAM,QAAQ,aAAa,IAAI,UAAU,eAAe,SAAU,SAAS;AACnF,aAAO,QAAQ,KAAK,aAAa;IACnC,CAAC,IAAI,QAAQ,eAAe,SAAU,SAAS;AAC7C,aAAO,QAAQ,KAAK,aAAa;IACnC,CAAC;AACD,QAAI;AACJ,YAAQ,KAAK,gBAAgB,KAAK,cAAc,GAAG,IAAI;AACvD,YAAQ,QAAQ,gBAAgB,QAAQ,cAAc,KAAK,IAAI;AAC/D,QAAI,OAAOA,QAAO,MAAM,cAAc,MAAM;AAC5C,WAAO;MACL;MACA;IACF;EACF;AACF;AAEA,SAAS,QAAQC,SAAQ,WAAW;AAClC,WAAS,OAAOA,SAAQ;AACtB,QAAIA,QAAO,eAAe,GAAG,KAAK,UAAUA,QAAO,GAAG,CAAC,GAAG;AACxD,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEA,SAAS,UAAUC,QAAO,WAAW;AACnC,WAAS,MAAM,GAAG,MAAMA,OAAM,QAAQ,OAAO;AAC3C,QAAI,UAAUA,OAAM,GAAG,CAAC,GAAG;AACzB,aAAO;IACT;EACF;AAEA,SAAO;AACT;AC/Ce,SAAR,oBAAqC,MAAM;AAChD,SAAO,SAAUF,SAAQ;AACvB,QAAI,UAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AACnF,QAAI,cAAcA,QAAO,MAAM,KAAK,YAAY;AAChD,QAAI,CAAC;AAAa,aAAO;AACzB,QAAI,gBAAgB,YAAY,CAAC;AACjC,QAAI,cAAcA,QAAO,MAAM,KAAK,YAAY;AAChD,QAAI,CAAC;AAAa,aAAO;AACzB,QAAI,QAAQ,KAAK,gBAAgB,KAAK,cAAc,YAAY,CAAC,CAAC,IAAI,YAAY,CAAC;AACnF,YAAQ,QAAQ,gBAAgB,QAAQ,cAAc,KAAK,IAAI;AAC/D,QAAI,OAAOA,QAAO,MAAM,cAAc,MAAM;AAC5C,WAAO;MACL;MACA;IACF;EACF;AACF;AChBe,SAAR,UAA2B,aAAa;AAC7C,MAAI,gBAAgB,QAAQ,gBAAgB,QAAQ,gBAAgB,OAAO;AACzE,WAAO;EACT;AAEA,MAAIG,UAAS,OAAO,WAAW;AAE/B,MAAI,MAAMA,OAAM,GAAG;AACjB,WAAOA;EACT;AAEA,SAAOA,UAAS,IAAI,KAAK,KAAKA,OAAM,IAAI,KAAK,MAAMA,OAAM;AAC3D;ACZe,SAAR,aAA8B,UAAU,MAAM;AACnD,MAAI,KAAK,SAAS,UAAU;AAC1B,UAAM,IAAI,UAAU,WAAW,eAAe,WAAW,IAAI,MAAM,MAAM,yBAAyB,KAAK,SAAS,UAAU;EAC5H;AACF;ACJA,SAAS,QAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAE,cAAU,SAASC,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAE,cAAU,SAASD,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAO,QAAQ,GAAG;AAAG;AAkC1W,SAAR,OAAwB,UAAU;AACvC,eAAa,GAAG,SAAS;AACzB,MAAI,SAAS,OAAO,UAAU,SAAS,KAAK,QAAQ;AAEpD,MAAI,oBAAoB,QAAQ,QAAQ,QAAQ,MAAM,YAAY,WAAW,iBAAiB;AAE5F,WAAO,IAAI,KAAK,SAAS,QAAQ,CAAC;EACpC,WAAW,OAAO,aAAa,YAAY,WAAW,mBAAmB;AACvE,WAAO,IAAI,KAAK,QAAQ;EAC1B,OAAO;AACL,SAAK,OAAO,aAAa,YAAY,WAAW,sBAAsB,OAAO,YAAY,aAAa;AAEpG,cAAQ,KAAK,oNAAoN;AAEjO,cAAQ,KAAK,IAAI,MAAM,EAAE,KAAK;IAChC;AAEA,WAAO,oBAAI,KAAK,GAAG;EACrB;AACF;AKrDA,IAAI,iBAAiB,CAAC;AACf,SAAS,oBAAoB;AAClC,SAAO;AACT;AImBO,IAAI,aAAa;AAUjB,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,KAAK;AAU/C,IAAI,uBAAuB;AAU3B,IAAI,qBAAqB;AAUzB,IAAI,uBAAuB;AAU3B,IAAI,UAAU,CAAC;AAkDf,IAAI,gBAAgB;AAoBpB,IAAI,eAAe,gBAAgB;AAUnC,IAAI,gBAAgB,eAAe;AAUnC,IAAI,gBAAgB,eAAe;AAUnC,IAAI,iBAAiB,gBAAgB;AAUrC,IAAI,mBAAmB,iBAAiB;AUpLhC,SAAR,kBAAmC,WAAW;AACnD,eAAa,GAAG,SAAS;AACzB,MAAI,eAAe;AACnB,MAAIC,QAAO,OAAO,SAAS;AAC3B,MAAI,MAAMA,MAAK,UAAU;AACzB,MAAI,QAAQ,MAAM,eAAe,IAAI,KAAK,MAAM;AAChD,EAAAA,MAAK,WAAWA,MAAK,WAAW,IAAI,IAAI;AACxC,EAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,SAAOA;AACT;ACRe,SAAR,kBAAmC,WAAW;AACnD,eAAa,GAAG,SAAS;AACzB,MAAIA,QAAO,OAAO,SAAS;AAC3B,MAAI,OAAOA,MAAK,eAAe;AAC/B,MAAI,4BAA4B,oBAAI,KAAK,CAAC;AAC1C,4BAA0B,eAAe,OAAO,GAAG,GAAG,CAAC;AACvD,4BAA0B,YAAY,GAAG,GAAG,GAAG,CAAC;AAChD,MAAI,kBAAkB,kBAAkB,yBAAyB;AACjE,MAAI,4BAA4B,oBAAI,KAAK,CAAC;AAC1C,4BAA0B,eAAe,MAAM,GAAG,CAAC;AACnD,4BAA0B,YAAY,GAAG,GAAG,GAAG,CAAC;AAChD,MAAI,kBAAkB,kBAAkB,yBAAyB;AAEjE,MAAIA,MAAK,QAAQ,KAAK,gBAAgB,QAAQ,GAAG;AAC/C,WAAO,OAAO;EAChB,WAAWA,MAAK,QAAQ,KAAK,gBAAgB,QAAQ,GAAG;AACtD,WAAO;EACT,OAAO;AACL,WAAO,OAAO;EAChB;AACF;ACpBe,SAAR,sBAAuC,WAAW;AACvD,eAAa,GAAG,SAAS;AACzB,MAAI,OAAO,kBAAkB,SAAS;AACtC,MAAI,kBAAkB,oBAAI,KAAK,CAAC;AAChC,kBAAgB,eAAe,MAAM,GAAG,CAAC;AACzC,kBAAgB,YAAY,GAAG,GAAG,GAAG,CAAC;AACtC,MAAIA,QAAO,kBAAkB,eAAe;AAC5C,SAAOA;AACT;ACPA,IAAI,uBAAuB;AACZ,SAAR,cAA+B,WAAW;AAC/C,eAAa,GAAG,SAAS;AACzB,MAAIA,QAAO,OAAO,SAAS;AAC3B,MAAI,OAAO,kBAAkBA,KAAI,EAAE,QAAQ,IAAI,sBAAsBA,KAAI,EAAE,QAAQ;AAInF,SAAO,KAAK,MAAM,OAAO,oBAAoB,IAAI;AACnD;ACTe,SAAR,eAAgC,WAAW,SAAS;AACzD,MAAI,MAAM,OAAO,OAAO,uBAAuB,iBAAiB,uBAAuB,uBAAuB;AAE9G,eAAa,GAAG,SAAS;AACzB,MAAIC,mBAAiB,kBAAkB;AACvC,MAAI,eAAe,WAAW,QAAQ,SAAS,SAAS,wBAAwB,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,kBAAkB,QAAQ,0BAA0B,SAAS,wBAAwB,YAAY,QAAQ,YAAY,SAAS,UAAU,kBAAkB,QAAQ,YAAY,QAAQ,oBAAoB,SAAS,UAAU,wBAAwB,gBAAgB,aAAa,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB,kBAAkB,QAAQ,UAAU,SAAS,QAAQA,iBAAe,kBAAkB,QAAQ,UAAU,SAAS,SAAS,wBAAwBA,iBAAe,YAAY,QAAQ,0BAA0B,SAAS,UAAU,yBAAyB,sBAAsB,aAAa,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB,kBAAkB,QAAQ,SAAS,SAAS,OAAO,CAAC;AAEp4B,MAAI,EAAE,gBAAgB,KAAK,gBAAgB,IAAI;AAC7C,UAAM,IAAI,WAAW,kDAAkD;EACzE;AAEA,MAAID,QAAO,OAAO,SAAS;AAC3B,MAAI,MAAMA,MAAK,UAAU;AACzB,MAAI,QAAQ,MAAM,eAAe,IAAI,KAAK,MAAM;AAChD,EAAAA,MAAK,WAAWA,MAAK,WAAW,IAAI,IAAI;AACxC,EAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,SAAOA;AACT;AChBe,SAAR,eAAgC,WAAW,SAAS;AACzD,MAAI,MAAM,OAAO,OAAO,uBAAuB,iBAAiB,uBAAuB,uBAAuB;AAE9G,eAAa,GAAG,SAAS;AACzB,MAAIA,QAAO,OAAO,SAAS;AAC3B,MAAI,OAAOA,MAAK,eAAe;AAC/B,MAAIC,mBAAiB,kBAAkB;AACvC,MAAI,wBAAwB,WAAW,QAAQ,SAAS,SAAS,wBAAwB,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,2BAA2B,QAAQ,0BAA0B,SAAS,wBAAwB,YAAY,QAAQ,YAAY,SAAS,UAAU,kBAAkB,QAAQ,YAAY,QAAQ,oBAAoB,SAAS,UAAU,wBAAwB,gBAAgB,aAAa,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB,2BAA2B,QAAQ,UAAU,SAAS,QAAQA,iBAAe,2BAA2B,QAAQ,UAAU,SAAS,SAAS,wBAAwBA,iBAAe,YAAY,QAAQ,0BAA0B,SAAS,UAAU,yBAAyB,sBAAsB,aAAa,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB,2BAA2B,QAAQ,SAAS,SAAS,OAAO,CAAC;AAEj7B,MAAI,EAAE,yBAAyB,KAAK,yBAAyB,IAAI;AAC/D,UAAM,IAAI,WAAW,2DAA2D;EAClF;AAEA,MAAI,sBAAsB,oBAAI,KAAK,CAAC;AACpC,sBAAoB,eAAe,OAAO,GAAG,GAAG,qBAAqB;AACrE,sBAAoB,YAAY,GAAG,GAAG,GAAG,CAAC;AAC1C,MAAI,kBAAkB,eAAe,qBAAqB,OAAO;AACjE,MAAI,sBAAsB,oBAAI,KAAK,CAAC;AACpC,sBAAoB,eAAe,MAAM,GAAG,qBAAqB;AACjE,sBAAoB,YAAY,GAAG,GAAG,GAAG,CAAC;AAC1C,MAAI,kBAAkB,eAAe,qBAAqB,OAAO;AAEjE,MAAID,MAAK,QAAQ,KAAK,gBAAgB,QAAQ,GAAG;AAC/C,WAAO,OAAO;EAChB,WAAWA,MAAK,QAAQ,KAAK,gBAAgB,QAAQ,GAAG;AACtD,WAAO;EACT,OAAO;AACL,WAAO,OAAO;EAChB;AACF;AC7Be,SAAR,mBAAoC,WAAW,SAAS;AAC7D,MAAI,MAAM,OAAO,OAAO,uBAAuB,iBAAiB,uBAAuB,uBAAuB;AAE9G,eAAa,GAAG,SAAS;AACzB,MAAIC,mBAAiB,kBAAkB;AACvC,MAAI,wBAAwB,WAAW,QAAQ,SAAS,SAAS,wBAAwB,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,2BAA2B,QAAQ,0BAA0B,SAAS,wBAAwB,YAAY,QAAQ,YAAY,SAAS,UAAU,kBAAkB,QAAQ,YAAY,QAAQ,oBAAoB,SAAS,UAAU,wBAAwB,gBAAgB,aAAa,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB,2BAA2B,QAAQ,UAAU,SAAS,QAAQA,iBAAe,2BAA2B,QAAQ,UAAU,SAAS,SAAS,wBAAwBA,iBAAe,YAAY,QAAQ,0BAA0B,SAAS,UAAU,yBAAyB,sBAAsB,aAAa,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB,2BAA2B,QAAQ,SAAS,SAAS,OAAO,CAAC;AACj7B,MAAI,OAAO,eAAe,WAAW,OAAO;AAC5C,MAAI,YAAY,oBAAI,KAAK,CAAC;AAC1B,YAAU,eAAe,MAAM,GAAG,qBAAqB;AACvD,YAAU,YAAY,GAAG,GAAG,GAAG,CAAC;AAChC,MAAID,QAAO,eAAe,WAAW,OAAO;AAC5C,SAAOA;AACT;ACbA,IAAIE,wBAAuB;AACZ,SAAR,WAA4B,WAAW,SAAS;AACrD,eAAa,GAAG,SAAS;AACzB,MAAIF,QAAO,OAAO,SAAS;AAC3B,MAAI,OAAO,eAAeA,OAAM,OAAO,EAAE,QAAQ,IAAI,mBAAmBA,OAAM,OAAO,EAAE,QAAQ;AAI/F,SAAO,KAAK,MAAM,OAAOE,qBAAoB,IAAI;AACnD;AMbA,IAAI,uBAAuB;EACzB,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;EACb,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,OAAO;IACL,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;EACA,SAAS;IACP,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,YAAY;IACV,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;AACF;AAEA,IAAI,iBAAiB,SAASC,gBAAe,OAAO,OAAO,SAAS;AAClE,MAAI;AACJ,MAAI,aAAa,qBAAqB,KAAK;AAE3C,MAAI,OAAO,eAAe,UAAU;AAClC,aAAS;EACX,WAAW,UAAU,GAAG;AACtB,aAAS,WAAW;EACtB,OAAO;AACL,aAAS,WAAW,MAAM,QAAQ,aAAa,MAAM,SAAS,CAAC;EACjE;AAEA,MAAI,YAAY,QAAQ,YAAY,UAAU,QAAQ,WAAW;AAC/D,QAAI,QAAQ,cAAc,QAAQ,aAAa,GAAG;AAChD,aAAO,QAAQ;IACjB,OAAO;AACL,aAAO,SAAS;IAClB;EACF;AAEA,SAAO;AACT;AAEA,IAAO,yBAAQ;ACtFf,IAAI,cAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAI,cAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAI,kBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAI,aAAa;EACf,MAAM,kBAAkB;IACtB,SAAS;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAAS;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAAS;IACT,cAAc;EAChB,CAAC;AACH;AChCA,IAAI,uBAAuB;EACzB,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AAEA,IAAI,iBAAiB,SAASC,gBAAe,OAAO,OAAO,WAAW,UAAU;AAC9E,SAAO,qBAAqB,KAAK;AACnC;AAEA,IAAO,yBAAQ;ACZf,IAAI,YAAY;EACd,QAAQ,CAAC,KAAK,GAAG;EACjB,aAAa,CAAC,MAAM,IAAI;EACxB,MAAM,CAAC,iBAAiB,aAAa;AACvC;AACA,IAAI,gBAAgB;EAClB,QAAQ,CAAC,KAAK,KAAK,KAAK,GAAG;EAC3B,aAAa,CAAC,MAAM,MAAM,MAAM,IAAI;EACpC,MAAM,CAAC,eAAe,eAAe,eAAe,aAAa;AACnE;AAKA,IAAI,cAAc;EAChB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EACnE,aAAa,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAChG,MAAM,CAAC,WAAW,YAAY,SAAS,SAAS,OAAO,QAAQ,QAAQ,UAAU,aAAa,WAAW,YAAY,UAAU;AACjI;AACA,IAAI,YAAY;EACd,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EAC1C,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EAChD,aAAa,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC7D,MAAM,CAAC,UAAU,UAAU,WAAW,aAAa,YAAY,UAAU,UAAU;AACrF;AACA,IAAI,kBAAkB;EACpB,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAI,4BAA4B;EAC9B,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AAEA,IAAI,gBAAgB,SAASC,eAAc,aAAa,UAAU;AAChE,MAAIC,UAAS,OAAO,WAAW;AAO/B,MAAI,SAASA,UAAS;AAEtB,MAAI,SAAS,MAAM,SAAS,IAAI;AAC9B,YAAQ,SAAS,IAAI;MACnB,KAAK;AACH,eAAOA,UAAS;MAElB,KAAK;AACH,eAAOA,UAAS;MAElB,KAAK;AACH,eAAOA,UAAS;IACpB;EACF;AAEA,SAAOA,UAAS;AAClB;AAEA,IAAI,WAAW;EACb;EACA,KAAK,gBAAgB;IACnB,QAAQ;IACR,cAAc;EAChB,CAAC;EACD,SAAS,gBAAgB;IACvB,QAAQ;IACR,cAAc;IACd,kBAAkB,SAAS,iBAAiB,SAAS;AACnD,aAAO,UAAU;IACnB;EACF,CAAC;EACD,OAAO,gBAAgB;IACrB,QAAQ;IACR,cAAc;EAChB,CAAC;EACD,KAAK,gBAAgB;IACnB,QAAQ;IACR,cAAc;EAChB,CAAC;EACD,WAAW,gBAAgB;IACzB,QAAQ;IACR,cAAc;IACd,kBAAkB;IAClB,wBAAwB;EAC1B,CAAC;AACH;AACA,IAAO,mBAAQ;AC/If,IAAI,4BAA4B;AAChC,IAAI,4BAA4B;AAChC,IAAI,mBAAmB;EACrB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAI,mBAAmB;EACrB,KAAK,CAAC,OAAO,SAAS;AACxB;AACA,IAAI,uBAAuB;EACzB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAI,uBAAuB;EACzB,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI;AAC9B;AACA,IAAI,qBAAqB;EACvB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAI,qBAAqB;EACvB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC3F,KAAK,CAAC,QAAQ,OAAO,SAAS,QAAQ,SAAS,SAAS,SAAS,QAAQ,OAAO,OAAO,OAAO,KAAK;AACrG;AACA,IAAI,mBAAmB;EACrB,QAAQ;EACR,OAAO;EACP,aAAa;EACb,MAAM;AACR;AACA,IAAI,mBAAmB;EACrB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EACxD,KAAK,CAAC,QAAQ,OAAO,QAAQ,OAAO,QAAQ,OAAO,MAAM;AAC3D;AACA,IAAI,yBAAyB;EAC3B,QAAQ;EACR,KAAK;AACP;AACA,IAAI,yBAAyB;EAC3B,KAAK;IACH,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAI,QAAQ;EACV,eAAe,oBAAoB;IACjC,cAAc;IACd,cAAc;IACd,eAAe,SAAS,cAAc,OAAO;AAC3C,aAAO,SAAS,OAAO,EAAE;IAC3B;EACF,CAAC;EACD,KAAK,aAAa;IAChB,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,mBAAmB;EACrB,CAAC;EACD,SAAS,aAAa;IACpB,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,mBAAmB;IACnB,eAAe,SAASC,eAAc,OAAO;AAC3C,aAAO,QAAQ;IACjB;EACF,CAAC;EACD,OAAO,aAAa;IAClB,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,mBAAmB;EACrB,CAAC;EACD,KAAK,aAAa;IAChB,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,mBAAmB;EACrB,CAAC;EACD,WAAW,aAAa;IACtB,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,mBAAmB;EACrB,CAAC;AACH;AACA,IAAO,gBAAQ;AUjGf,SAASC,SAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,SAAQ,GAAG;AAAG;AAEzX,SAAS,UAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAY,oBAAgB,UAAU,UAAU;AAAG;AAEhY,SAAS,gBAAgBE,IAAGC,IAAG;AAAE,oBAAkB,OAAO,kBAAkB,SAASC,kBAAgBF,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAO,gBAAgBA,IAAGC,EAAC;AAAG;AAEzK,SAAS,aAAa,SAAS;AAAE,MAAI,4BAA4B,0BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQ,gBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAY,gBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAO,2BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAAS,2BAA2BE,OAAM,MAAM;AAAE,MAAI,SAASL,SAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAO,uBAAuBK,KAAI;AAAG;AAEhL,SAAS,uBAAuBA,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAAS,4BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASC,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAAS,gBAAgBJ,IAAG;AAAE,oBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASK,kBAAgBL,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAO,gBAAgBA,EAAC;AAAG;AAE5M,SAAS,gBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAAS,kBAAkB,QAAQ,OAAO;AAAE,WAASM,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAAS,aAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAY,sBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAa,sBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAAS,gBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAGzM,IAAI,SAAsB,2BAAY;AAC3C,WAASC,UAAS;AAChB,oBAAgB,MAAMA,OAAM;AAE5B,oBAAgB,MAAM,eAAe,CAAC;EACxC;AAEA,eAAaA,SAAQ,CAAC;IACpB,KAAK;IACL,OAAO,SAAS,SAAS,UAAU,UAAU;AAC3C,aAAO;IACT;EACF,CAAC,CAAC;AAEF,SAAOA;AACT,EAAE;AACK,IAAI,cAA2B,yBAAU,SAAS;AACvD,YAAUC,cAAa,OAAO;AAE9B,MAAI,SAAS,aAAaA,YAAW;AAErC,WAASA,aAAY,OAAO,eAAe,UAAU,UAAU,aAAa;AAC1E,QAAI;AAEJ,oBAAgB,MAAMA,YAAW;AAEjC,YAAQ,OAAO,KAAK,IAAI;AACxB,UAAM,QAAQ;AACd,UAAM,gBAAgB;AACtB,UAAM,WAAW;AACjB,UAAM,WAAW;AAEjB,QAAI,aAAa;AACf,YAAM,cAAc;IACtB;AAEA,WAAO;EACT;AAEA,eAAaA,cAAa,CAAC;IACzB,KAAK;IACL,OAAO,SAAS,SAAS,SAAS,SAAS;AACzC,aAAO,KAAK,cAAc,SAAS,KAAK,OAAO,OAAO;IACxD;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASC,KAAI,SAAS,OAAO,SAAS;AAC3C,aAAO,KAAK,SAAS,SAAS,OAAO,KAAK,OAAO,OAAO;IAC1D;EACF,CAAC,CAAC;AAEF,SAAOD;AACT,EAAE,MAAM;AC7ER,SAASE,iBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,mBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,cAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,uBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,uBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAG/M,IAAI,SAAsB,2BAAY;AAC3C,WAASG,UAAS;AAChBJ,qBAAgB,MAAMI,OAAM;EAC9B;AAEAD,gBAAaC,SAAQ,CAAC;IACpB,KAAK;IACL,OAAO,SAAS,IAAI,YAAY,OAAOC,SAAO,SAAS;AACrD,UAAI,SAAS,KAAK,MAAM,YAAY,OAAOA,SAAO,OAAO;AAEzD,UAAI,CAAC,QAAQ;AACX,eAAO;MACT;AAEA,aAAO;QACL,QAAQ,IAAI,YAAY,OAAO,OAAO,KAAK,UAAU,KAAK,KAAK,KAAK,UAAU,KAAK,WAAW;QAC9F,MAAM,OAAO;MACf;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,UAAU,QAAQ,UAAU;AACnD,aAAO;IACT;EACF,CAAC,CAAC;AAEF,SAAOD;AACT,EAAE;AClCF,SAASE,SAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,SAAQ,GAAG;AAAG;AAEzX,SAASN,iBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,mBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,cAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,uBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,uBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,WAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,qBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,iBAAgBC,IAAGC,IAAG;AAAEF,qBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,iBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,cAAa,SAAS;AAAE,MAAI,4BAA4BC,2BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,4BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,4BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,SAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,wBAAuBD,KAAI;AAAG;AAEhL,SAASC,wBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,6BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,iBAAgBJ,IAAG;AAAEI,qBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,iBAAgBJ,EAAC;AAAG;AAE5M,SAASS,iBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAGzM,IAAI,YAAyB,yBAAU,SAAS;AACrDX,aAAUY,YAAW,OAAO;AAE5B,MAAI,SAASR,cAAaQ,UAAS;AAEnC,WAASA,aAAY;AACnB,QAAI;AAEJpB,qBAAgB,MAAMoB,UAAS;AAE/B,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDD,qBAAgBF,wBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,qBAAgBF,wBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AAEzF,WAAO;EACT;AAEAd,gBAAaiB,YAAW,CAAC;IACvB,KAAK;IACL,OAAO,SAASC,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QAEb,KAAK;QACL,KAAK;QACL,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;UACT,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;UACT,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;UACT,CAAC;QAGH,KAAK;QACL;AACE,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;UACT,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;UACT,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;UACT,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,OAAO,OAAO;AACtC,YAAM,MAAM;AACZ,MAAAA,MAAK,eAAe,OAAO,GAAG,CAAC;AAC/B,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOH;AACT,EAAE,MAAM;AC3FD,IAAI,kBAAkB;EAC3B,OAAO;;EAEP,MAAM;;EAEN,WAAW;;EAEX,MAAM;;EAEN,SAAS;;EAET,SAAS;;EAET,SAAS;;EAET,SAAS;;EAET,QAAQ;;EAER,QAAQ;;EAER,aAAa;;EAEb,WAAW;;EAEX,aAAa;;EAEb,YAAY;;EAEZ,iBAAiB;EACjB,mBAAmB;;EAEnB,iBAAiB;;EAEjB,mBAAmB;;EAEnB,kBAAkB;;AAEpB;AACO,IAAI,mBAAmB;EAC5B,sBAAsB;EACtB,OAAO;EACP,sBAAsB;EACtB,UAAU;EACV,yBAAyB;AAC3B;AC3CO,SAAS,SAAS,eAAe,OAAO;AAC7C,MAAI,CAAC,eAAe;AAClB,WAAO;EACT;AAEA,SAAO;IACL,OAAO,MAAM,cAAc,KAAK;IAChC,MAAM,cAAc;EACtB;AACF;AACO,SAAS,oBAAoB,SAAS,YAAY;AACvD,MAAI,cAAc,WAAW,MAAM,OAAO;AAE1C,MAAI,CAAC,aAAa;AAChB,WAAO;EACT;AAEA,SAAO;IACL,OAAO,SAAS,YAAY,CAAC,GAAG,EAAE;IAClC,MAAM,WAAW,MAAM,YAAY,CAAC,EAAE,MAAM;EAC9C;AACF;AACO,SAAS,qBAAqB,SAAS,YAAY;AACxD,MAAI,cAAc,WAAW,MAAM,OAAO;AAE1C,MAAI,CAAC,aAAa;AAChB,WAAO;EACT;AAGA,MAAI,YAAY,CAAC,MAAM,KAAK;AAC1B,WAAO;MACL,OAAO;MACP,MAAM,WAAW,MAAM,CAAC;IAC1B;EACF;AAEA,MAAI,OAAO,YAAY,CAAC,MAAM,MAAM,IAAI;AACxC,MAAI,QAAQ,YAAY,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,IAAI;AAC5D,MAAI,UAAU,YAAY,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,IAAI;AAC9D,MAAI,UAAU,YAAY,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,IAAI;AAC9D,SAAO;IACL,OAAO,QAAQ,QAAQ,qBAAqB,UAAU,uBAAuB,UAAU;IACvF,MAAM,WAAW,MAAM,YAAY,CAAC,EAAE,MAAM;EAC9C;AACF;AACO,SAAS,qBAAqB,YAAY;AAC/C,SAAO,oBAAoB,gBAAgB,iBAAiB,UAAU;AACxE;AACO,SAAS,aAAaI,IAAG,YAAY;AAC1C,UAAQA,IAAG;IACT,KAAK;AACH,aAAO,oBAAoB,gBAAgB,aAAa,UAAU;IAEpE,KAAK;AACH,aAAO,oBAAoB,gBAAgB,WAAW,UAAU;IAElE,KAAK;AACH,aAAO,oBAAoB,gBAAgB,aAAa,UAAU;IAEpE,KAAK;AACH,aAAO,oBAAoB,gBAAgB,YAAY,UAAU;IAEnE;AACE,aAAO,oBAAoB,IAAI,OAAO,YAAYA,KAAI,GAAG,GAAG,UAAU;EAC1E;AACF;AACO,SAAS,mBAAmBA,IAAG,YAAY;AAChD,UAAQA,IAAG;IACT,KAAK;AACH,aAAO,oBAAoB,gBAAgB,mBAAmB,UAAU;IAE1E,KAAK;AACH,aAAO,oBAAoB,gBAAgB,iBAAiB,UAAU;IAExE,KAAK;AACH,aAAO,oBAAoB,gBAAgB,mBAAmB,UAAU;IAE1E,KAAK;AACH,aAAO,oBAAoB,gBAAgB,kBAAkB,UAAU;IAEzE;AACE,aAAO,oBAAoB,IAAI,OAAO,cAAcA,KAAI,GAAG,GAAG,UAAU;EAC5E;AACF;AACO,SAAS,qBAAqB,WAAW;AAC9C,UAAQ,WAAW;IACjB,KAAK;AACH,aAAO;IAET,KAAK;AACH,aAAO;IAET,KAAK;IACL,KAAK;IACL,KAAK;AACH,aAAO;IAET,KAAK;IACL,KAAK;IACL,KAAK;IACL;AACE,aAAO;EACX;AACF;AACO,SAAS,sBAAsB,cAAc,aAAa;AAC/D,MAAI,cAAc,cAAc;AAKhC,MAAI,iBAAiB,cAAc,cAAc,IAAI;AACrD,MAAI;AAEJ,MAAI,kBAAkB,IAAI;AACxB,aAAS,gBAAgB;EAC3B,OAAO;AACL,QAAI,WAAW,iBAAiB;AAChC,QAAI,kBAAkB,KAAK,MAAM,WAAW,GAAG,IAAI;AACnD,QAAI,oBAAoB,gBAAgB,WAAW;AACnD,aAAS,eAAe,mBAAmB,oBAAoB,MAAM;EACvE;AAEA,SAAO,cAAc,SAAS,IAAI;AACpC;AACO,SAAS,gBAAgB,MAAM;AACpC,SAAO,OAAO,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,QAAQ;AAC9D;ACjIA,SAASlB,SAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,SAAQ,GAAG;AAAG;AAEzX,SAASN,iBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,mBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,cAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,uBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,uBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,WAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,qBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,iBAAgBC,IAAGC,IAAG;AAAEF,qBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,iBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,cAAa,SAAS;AAAE,MAAI,4BAA4BC,2BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,4BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,4BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,SAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,wBAAuBD,KAAI;AAAG;AAEhL,SAASC,wBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,6BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,iBAAgBJ,IAAG;AAAEI,qBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,iBAAgBJ,EAAC;AAAG;AAE5M,SAASS,iBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAYzM,IAAI,aAA0B,yBAAU,SAAS;AACtDX,aAAUiB,aAAY,OAAO;AAE7B,MAAI,SAASb,cAAaa,WAAU;AAEpC,WAASA,cAAa;AACpB,QAAI;AAEJzB,qBAAgB,MAAMyB,WAAU;AAEhC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDN,qBAAgBF,wBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,qBAAgBF,wBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEvH,WAAO;EACT;AAEAd,gBAAasB,aAAY,CAAC;IACxB,KAAK;IACL,OAAO,SAASJ,OAAM,YAAY,OAAOhB,SAAO;AAC9C,UAAIqB,kBAAgB,SAASA,iBAAc,MAAM;AAC/C,eAAO;UACL;UACA,gBAAgB,UAAU;QAC5B;MACF;AAEA,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,SAAS,aAAa,GAAG,UAAU,GAAGA,eAAa;QAE5D,KAAK;AACH,iBAAO,SAASrB,QAAM,cAAc,YAAY;YAC9C,MAAM;UACR,CAAC,GAAGqB,eAAa;QAEnB;AACE,iBAAO,SAAS,aAAa,MAAM,QAAQ,UAAU,GAAGA,eAAa;MACzE;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,MAAM,kBAAkB,MAAM,OAAO;IAC9C;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASJ,KAAIC,OAAM,OAAO,OAAO;AACtC,UAAI,cAAcA,MAAK,eAAe;AAEtC,UAAI,MAAM,gBAAgB;AACxB,YAAI,yBAAyB,sBAAsB,MAAM,MAAM,WAAW;AAC1E,QAAAA,MAAK,eAAe,wBAAwB,GAAG,CAAC;AAChD,QAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,eAAOA;MACT;AAEA,UAAI,OAAO,EAAE,SAAS,UAAU,MAAM,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM;AACzE,MAAAA,MAAK,eAAe,MAAM,GAAG,CAAC;AAC9B,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOE;AACT,EAAE,MAAM;ACzGR,SAASnB,SAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,SAAQ,GAAG;AAAG;AAEzX,SAASN,iBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,mBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,cAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,uBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,uBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,WAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,qBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,iBAAgBC,IAAGC,IAAG;AAAEF,qBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,iBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,cAAa,SAAS;AAAE,MAAI,4BAA4BC,2BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,4BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,4BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,SAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,wBAAuBD,KAAI;AAAG;AAEhL,SAASC,wBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,6BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,iBAAgBJ,IAAG;AAAEI,qBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,iBAAgBJ,EAAC;AAAG;AAE5M,SAASS,iBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAOzM,IAAI,sBAAmC,yBAAU,SAAS;AAC/DX,aAAUmB,sBAAqB,OAAO;AAEtC,MAAI,SAASf,cAAae,oBAAmB;AAE7C,WAASA,uBAAsB;AAC7B,QAAI;AAEJ3B,qBAAgB,MAAM2B,oBAAmB;AAEzC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDR,qBAAgBF,wBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,qBAAgBF,wBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEtI,WAAO;EACT;AAEAd,gBAAawB,sBAAqB,CAAC;IACjC,KAAK;IACL,OAAO,SAASN,OAAM,YAAY,OAAOhB,SAAO;AAC9C,UAAIqB,kBAAgB,SAASA,iBAAc,MAAM;AAC/C,eAAO;UACL;UACA,gBAAgB,UAAU;QAC5B;MACF;AAEA,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,SAAS,aAAa,GAAG,UAAU,GAAGA,eAAa;QAE5D,KAAK;AACH,iBAAO,SAASrB,QAAM,cAAc,YAAY;YAC9C,MAAM;UACR,CAAC,GAAGqB,eAAa;QAEnB;AACE,iBAAO,SAAS,aAAa,MAAM,QAAQ,UAAU,GAAGA,eAAa;MACzE;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,MAAM,kBAAkB,MAAM,OAAO;IAC9C;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASJ,KAAIC,OAAM,OAAO,OAAO,SAAS;AAC/C,UAAI,cAAc,eAAeA,OAAM,OAAO;AAE9C,UAAI,MAAM,gBAAgB;AACxB,YAAI,yBAAyB,sBAAsB,MAAM,MAAM,WAAW;AAC1E,QAAAA,MAAK,eAAe,wBAAwB,GAAG,QAAQ,qBAAqB;AAC5E,QAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,eAAO,eAAeA,OAAM,OAAO;MACrC;AAEA,UAAI,OAAO,EAAE,SAAS,UAAU,MAAM,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM;AACzE,MAAAA,MAAK,eAAe,MAAM,GAAG,QAAQ,qBAAqB;AAC1D,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAO,eAAeA,OAAM,OAAO;IACrC;EACF,CAAC,CAAC;AAEF,SAAOI;AACT,EAAE,MAAM;ACpGR,SAASrB,SAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,SAAQ,GAAG;AAAG;AAEzX,SAASN,iBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,mBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,cAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,uBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,uBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,WAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,qBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,iBAAgBC,IAAGC,IAAG;AAAEF,qBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,iBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,cAAa,SAAS;AAAE,MAAI,4BAA4BC,2BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,4BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,4BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,SAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,wBAAuBD,KAAI;AAAG;AAEhL,SAASC,wBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,6BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,iBAAgBJ,IAAG;AAAEI,qBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,iBAAgBJ,EAAC;AAAG;AAE5M,SAASS,iBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAMzM,IAAI,oBAAiC,yBAAU,SAAS;AAC7DX,aAAUoB,oBAAmB,OAAO;AAEpC,MAAI,SAAShB,cAAagB,kBAAiB;AAE3C,WAASA,qBAAoB;AAC3B,QAAI;AAEJ5B,qBAAgB,MAAM4B,kBAAiB;AAEvC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDT,qBAAgBF,wBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,qBAAgBF,wBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEhJ,WAAO;EACT;AAEAd,gBAAayB,oBAAmB,CAAC;IAC/B,KAAK;IACL,OAAO,SAASP,OAAM,YAAY,OAAO;AACvC,UAAI,UAAU,KAAK;AACjB,eAAO,mBAAmB,GAAG,UAAU;MACzC;AAEA,aAAO,mBAAmB,MAAM,QAAQ,UAAU;IACpD;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASC,KAAI,OAAO,QAAQ,OAAO;AACxC,UAAI,kBAAkB,oBAAI,KAAK,CAAC;AAChC,sBAAgB,eAAe,OAAO,GAAG,CAAC;AAC1C,sBAAgB,YAAY,GAAG,GAAG,GAAG,CAAC;AACtC,aAAO,kBAAkB,eAAe;IAC1C;EACF,CAAC,CAAC;AAEF,SAAOM;AACT,EAAE,MAAM;ACvER,SAAStB,SAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,eAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,SAAQ,GAAG;AAAG;AAEzX,SAASN,iBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,mBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,cAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,uBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,uBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,WAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,qBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,iBAAgBC,IAAGC,IAAG;AAAEF,qBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,iBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,cAAa,SAAS;AAAE,MAAI,4BAA4BC,2BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,4BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,4BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,SAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,wBAAuBD,KAAI;AAAG;AAEhL,SAASC,wBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,6BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,iBAAgBJ,IAAG;AAAEI,qBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,iBAAgBJ,EAAC;AAAG;AAE5M,SAASS,iBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAIzM,IAAI,qBAAkC,yBAAU,SAAS;AAC9DX,aAAUqB,qBAAoB,OAAO;AAErC,MAAI,SAASjB,cAAaiB,mBAAkB;AAE5C,WAASA,sBAAqB;AAC5B,QAAI;AAEJ7B,qBAAgB,MAAM6B,mBAAkB;AAExC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDV,qBAAgBF,wBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,qBAAgBF,wBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAE5H,WAAO;EACT;AAEAd,gBAAa0B,qBAAoB,CAAC;IAChC,KAAK;IACL,OAAO,SAASR,OAAM,YAAY,OAAO;AACvC,UAAI,UAAU,KAAK;AACjB,eAAO,mBAAmB,GAAG,UAAU;MACzC;AAEA,aAAO,mBAAmB,MAAM,QAAQ,UAAU;IACpD;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASC,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,eAAe,OAAO,GAAG,CAAC;AAC/B,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOM;AACT,EAAE,MAAM;ACpER,SAASvB,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,iBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,mBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,cAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,uBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,uBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,WAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,qBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,iBAAgBC,IAAGC,IAAG;AAAEF,qBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,iBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,cAAa,SAAS;AAAE,MAAI,4BAA4BC,2BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,4BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,4BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,wBAAuBD,KAAI;AAAG;AAEhL,SAASC,wBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,6BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,iBAAgBJ,IAAG;AAAEI,qBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,iBAAgBJ,EAAC;AAAG;AAE5M,SAASS,iBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAIzM,IAAI,gBAA6B,yBAAU,SAAS;AACzDX,aAAUsB,gBAAe,OAAO;AAEhC,MAAI,SAASlB,cAAakB,cAAa;AAEvC,WAASA,iBAAgB;AACvB,QAAI;AAEJ9B,qBAAgB,MAAM8B,cAAa;AAEnC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDX,qBAAgBF,wBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,qBAAgBF,wBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAE3I,WAAO;EACT;AAEAd,gBAAa2B,gBAAe,CAAC;IAC3B,KAAK;IACL,OAAO,SAAST,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QAEb,KAAK;QACL,KAAK;AAEH,iBAAO,aAAa,MAAM,QAAQ,UAAU;QAG9C,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,QAAQ,YAAY;YAC/B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,QAAQ,YAAY;YAC9B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,QAAQ,YAAY;YAC/B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;QACL;AACE,iBAAOA,QAAM,QAAQ,YAAY;YAC/B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,QAAQ,YAAY;YAC9B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,QAAQ,YAAY;YAC9B,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,aAAa,QAAQ,KAAK,GAAG,CAAC;AACnC,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOO;AACT,EAAE,MAAM;AChHR,SAASxB,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,iBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,mBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,cAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,uBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,uBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,WAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,qBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,iBAAgBC,IAAGC,IAAG;AAAEF,qBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,iBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,cAAa,SAAS;AAAE,MAAI,4BAA4BC,2BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,4BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,4BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,wBAAuBD,KAAI;AAAG;AAEhL,SAASC,wBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,6BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,iBAAgBJ,IAAG;AAAEI,qBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,iBAAgBJ,EAAC;AAAG;AAE5M,SAASS,iBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAIzM,IAAI,0BAAuC,yBAAU,SAAS;AACnEX,aAAUuB,0BAAyB,OAAO;AAE1C,MAAI,SAASnB,cAAamB,wBAAuB;AAEjD,WAASA,2BAA0B;AACjC,QAAI;AAEJ/B,qBAAgB,MAAM+B,wBAAuB;AAE7C,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDZ,qBAAgBF,wBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,qBAAgBF,wBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAE3I,WAAO;EACT;AAEAd,gBAAa4B,0BAAyB,CAAC;IACrC,KAAK;IACL,OAAO,SAASV,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QAEb,KAAK;QACL,KAAK;AAEH,iBAAO,aAAa,MAAM,QAAQ,UAAU;QAG9C,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,QAAQ,YAAY;YAC/B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,QAAQ,YAAY;YAC9B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,QAAQ,YAAY;YAC/B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;QACL;AACE,iBAAOA,QAAM,QAAQ,YAAY;YAC/B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,QAAQ,YAAY;YAC9B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,QAAQ,YAAY;YAC9B,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,aAAa,QAAQ,KAAK,GAAG,CAAC;AACnC,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOQ;AACT,EAAE,MAAM;AChHR,SAASzB,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,WAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,qBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,iBAAgBC,IAAGC,IAAG;AAAEF,qBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,iBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,cAAa,SAAS;AAAE,MAAI,4BAA4BC,2BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,4BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,4BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,wBAAuBD,KAAI;AAAG;AAEhL,SAASC,wBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,6BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,iBAAgBJ,IAAG;AAAEI,qBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,iBAAgBJ,EAAC;AAAG;AAE5M,SAASS,iBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,cAA2B,yBAAU,SAAS;AACvDX,aAAUwB,cAAa,OAAO;AAE9B,MAAI,SAASpB,cAAaoB,YAAW;AAErC,WAASA,eAAc;AACrB,QAAI;AAEJhC,sBAAgB,MAAMgC,YAAW;AAEjC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDb,qBAAgBF,wBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEtIE,qBAAgBF,wBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9D,WAAO;EACT;AAEAd,iBAAa6B,cAAa,CAAC;IACzB,KAAK;IACL,OAAO,SAASX,OAAM,YAAY,OAAOhB,SAAO;AAC9C,UAAIqB,kBAAgB,SAASA,iBAAc,OAAO;AAChD,eAAO,QAAQ;MACjB;AAEA,cAAQ,OAAO;QAEb,KAAK;AACH,iBAAO,SAAS,oBAAoB,gBAAgB,OAAO,UAAU,GAAGA,eAAa;QAGvF,KAAK;AACH,iBAAO,SAAS,aAAa,GAAG,UAAU,GAAGA,eAAa;QAG5D,KAAK;AACH,iBAAO,SAASrB,QAAM,cAAc,YAAY;YAC9C,MAAM;UACR,CAAC,GAAGqB,eAAa;QAGnB,KAAK;AACH,iBAAOrB,QAAM,MAAM,YAAY;YAC7B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,MAAM,YAAY;YAC5B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,MAAM,YAAY;YAC7B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;QACL;AACE,iBAAOA,QAAM,MAAM,YAAY;YAC7B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,MAAM,YAAY;YAC5B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,MAAM,YAAY;YAC5B,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,YAAY,OAAO,CAAC;AACzB,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOS;AACT,EAAE,MAAM;ACvHR,SAAS1B,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,wBAAqC,yBAAU,SAAS;AACjEX,cAAUyB,wBAAuB,OAAO;AAExC,MAAI,SAASrB,eAAaqB,sBAAqB;AAE/C,WAASA,yBAAwB;AAC/B,QAAI;AAEJjC,sBAAgB,MAAMiC,sBAAqB;AAE3C,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDd,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEtI,WAAO;EACT;AAEAd,iBAAa8B,wBAAuB,CAAC;IACnC,KAAK;IACL,OAAO,SAASZ,OAAM,YAAY,OAAOhB,SAAO;AAC9C,UAAIqB,kBAAgB,SAASA,iBAAc,OAAO;AAChD,eAAO,QAAQ;MACjB;AAEA,cAAQ,OAAO;QAEb,KAAK;AACH,iBAAO,SAAS,oBAAoB,gBAAgB,OAAO,UAAU,GAAGA,eAAa;QAGvF,KAAK;AACH,iBAAO,SAAS,aAAa,GAAG,UAAU,GAAGA,eAAa;QAG5D,KAAK;AACH,iBAAO,SAASrB,QAAM,cAAc,YAAY;YAC9C,MAAM;UACR,CAAC,GAAGqB,eAAa;QAGnB,KAAK;AACH,iBAAOrB,QAAM,MAAM,YAAY;YAC7B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,MAAM,YAAY;YAC5B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,MAAM,YAAY;YAC7B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;QACL;AACE,iBAAOA,QAAM,MAAM,YAAY;YAC7B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,MAAM,YAAY;YAC5B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,MAAM,YAAY;YAC5B,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,YAAY,OAAO,CAAC;AACzB,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOU;AACT,EAAE,MAAM;ACnHO,SAAR,WAA4B,WAAW,WAAW,SAAS;AAChE,eAAa,GAAG,SAAS;AACzB,MAAIV,QAAO,OAAO,SAAS;AAC3B,MAAI,OAAO,UAAU,SAAS;AAC9B,MAAI,OAAO,WAAWA,OAAM,OAAO,IAAI;AACvC,EAAAA,MAAK,WAAWA,MAAK,WAAW,IAAI,OAAO,CAAC;AAC5C,SAAOA;AACT;ACXA,SAASjB,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAQzM,IAAI,kBAA+B,yBAAU,SAAS;AAC3DX,cAAU0B,kBAAiB,OAAO;AAElC,MAAI,SAAStB,eAAasB,gBAAe;AAEzC,WAASA,mBAAkB;AACzB,QAAI;AAEJlC,sBAAgB,MAAMkC,gBAAe;AAErC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDf,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEtI,WAAO;EACT;AAEAd,iBAAa+B,kBAAiB,CAAC;IAC7B,KAAK;IACL,OAAO,SAASb,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,MAAM,UAAU;QAE7D,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO,SAAS;AAChD,aAAO,eAAe,WAAWA,OAAM,OAAO,OAAO,GAAG,OAAO;IACjE;EACF,CAAC,CAAC;AAEF,SAAOW;AACT,EAAE,MAAM;AC9EO,SAAR,cAA+B,WAAW,cAAc;AAC7D,eAAa,GAAG,SAAS;AACzB,MAAIX,QAAO,OAAO,SAAS;AAC3B,MAAI,UAAU,UAAU,YAAY;AACpC,MAAI,OAAO,cAAcA,KAAI,IAAI;AACjC,EAAAA,MAAK,WAAWA,MAAK,WAAW,IAAI,OAAO,CAAC;AAC5C,SAAOA;AACT;ACXA,SAASjB,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAQzM,IAAI,gBAA6B,yBAAU,SAAS;AACzDX,cAAU2B,gBAAe,OAAO;AAEhC,MAAI,SAASvB,eAAauB,cAAa;AAEvC,WAASA,iBAAgB;AACvB,QAAI;AAEJnC,sBAAgB,MAAMmC,cAAa;AAEnC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDhB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,GAAG;AAE9DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAE3I,WAAO;EACT;AAEAd,iBAAagC,gBAAe,CAAC;IAC3B,KAAK;IACL,OAAO,SAASd,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,MAAM,UAAU;QAE7D,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,aAAO,kBAAkB,cAAcA,OAAM,KAAK,CAAC;IACrD;EACF,CAAC,CAAC;AAEF,SAAOY;AACT,EAAE,MAAM;AClFR,SAAS7B,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKhN,IAAI,gBAAgB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACnE,IAAI,0BAA0B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAEtE,IAAI,aAA0B,yBAAU,SAAS;AACtDX,cAAU4B,aAAY,OAAO;AAE7B,MAAI,SAASxB,eAAawB,WAAU;AAEpC,WAASA,cAAa;AACpB,QAAI;AAEJpC,sBAAgB,MAAMoC,WAAU;AAEhC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDjB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,eAAe,CAAC;AAE/DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEjI,WAAO;EACT;AAEAd,iBAAaiC,aAAY,CAAC;IACxB,KAAK;IACL,OAAO,SAASf,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,MAAM,UAAU;QAE7D,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAASkB,OAAM,OAAO;AACpC,UAAI,OAAOA,MAAK,eAAe;AAC/B,UAAI,aAAa,gBAAgB,IAAI;AACrC,UAAI,QAAQA,MAAK,YAAY;AAE7B,UAAI,YAAY;AACd,eAAO,SAAS,KAAK,SAAS,wBAAwB,KAAK;MAC7D,OAAO;AACL,eAAO,SAAS,KAAK,SAAS,cAAc,KAAK;MACnD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASD,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,WAAW,KAAK;AACrB,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOa;AACT,EAAE,MAAM;AC9FR,SAAS9B,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,kBAA+B,yBAAU,SAAS;AAC3DX,cAAU6B,kBAAiB,OAAO;AAElC,MAAI,SAASzB,eAAayB,gBAAe;AAEzC,WAASA,mBAAkB;AACzB,QAAI;AAEJrC,sBAAgB,MAAMqC,gBAAe;AAErC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDlB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,eAAe,CAAC;AAE/DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEhJ,WAAO;EACT;AAEAd,iBAAakC,kBAAiB,CAAC;IAC7B,KAAK;IACL,OAAO,SAAShB,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;QACL,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,WAAW,UAAU;QAElE,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAASkB,OAAM,OAAO;AACpC,UAAI,OAAOA,MAAK,eAAe;AAC/B,UAAI,aAAa,gBAAgB,IAAI;AAErC,UAAI,YAAY;AACd,eAAO,SAAS,KAAK,SAAS;MAChC,OAAO;AACL,eAAO,SAAS,KAAK,SAAS;MAChC;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASD,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,YAAY,GAAG,KAAK;AACzB,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOc;AACT,EAAE,MAAM;ACvFO,SAAR,UAA2B,WAAW,UAAU,SAAS;AAC9D,MAAI,MAAM,OAAO,OAAO,uBAAuB,iBAAiB,uBAAuB,uBAAuB;AAE9G,eAAa,GAAG,SAAS;AACzB,MAAIC,mBAAiB,kBAAkB;AACvC,MAAI,eAAe,WAAW,QAAQ,SAAS,SAAS,wBAAwB,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,kBAAkB,QAAQ,0BAA0B,SAAS,wBAAwB,YAAY,QAAQ,YAAY,SAAS,UAAU,kBAAkB,QAAQ,YAAY,QAAQ,oBAAoB,SAAS,UAAU,wBAAwB,gBAAgB,aAAa,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB,kBAAkB,QAAQ,UAAU,SAAS,QAAQA,iBAAe,kBAAkB,QAAQ,UAAU,SAAS,SAAS,wBAAwBA,iBAAe,YAAY,QAAQ,0BAA0B,SAAS,UAAU,yBAAyB,sBAAsB,aAAa,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB,kBAAkB,QAAQ,SAAS,SAAS,OAAO,CAAC;AAEp4B,MAAI,EAAE,gBAAgB,KAAK,gBAAgB,IAAI;AAC7C,UAAM,IAAI,WAAW,kDAAkD;EACzE;AAEA,MAAIf,QAAO,OAAO,SAAS;AAC3B,MAAI,MAAM,UAAU,QAAQ;AAC5B,MAAI,aAAaA,MAAK,UAAU;AAChC,MAAI,YAAY,MAAM;AACtB,MAAI,YAAY,YAAY,KAAK;AACjC,MAAI,QAAQ,WAAW,eAAe,IAAI,KAAK,MAAM;AACrD,EAAAA,MAAK,WAAWA,MAAK,WAAW,IAAI,IAAI;AACxC,SAAOA;AACT;ACvBA,SAASjB,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,YAAyB,yBAAU,SAAS;AACrDX,cAAU+B,YAAW,OAAO;AAE5B,MAAI,SAAS3B,eAAa2B,UAAS;AAEnC,WAASA,aAAY;AACnB,QAAI;AAEJvC,sBAAgB,MAAMuC,UAAS;AAE/B,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDpB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEnG,WAAO;EACT;AAEAd,iBAAaoC,YAAW,CAAC;IACvB,KAAK;IACL,OAAO,SAASlB,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QAEb,KAAK;QACL,KAAK;QACL,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;QACL;AACE,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO,SAAS;AAChD,MAAAA,QAAO,UAAUA,OAAM,OAAO,OAAO;AACrC,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOgB;AACT,EAAE,MAAM;ACvHR,SAASjC,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAMzM,IAAI,iBAA8B,yBAAU,SAAS;AAC1DX,cAAUgC,iBAAgB,OAAO;AAEjC,MAAI,SAAS5B,eAAa4B,eAAc;AAExC,WAASA,kBAAiB;AACxB,QAAI;AAEJxC,sBAAgB,MAAMwC,eAAc;AAEpC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDrB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEhJ,WAAO;EACT;AAEAd,iBAAaqC,iBAAgB,CAAC;IAC5B,KAAK;IACL,OAAO,SAASnB,OAAM,YAAY,OAAOhB,SAAO,SAAS;AACvD,UAAIqB,kBAAgB,SAASA,iBAAc,OAAO;AAChD,YAAI,gBAAgB,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI;AAClD,gBAAQ,QAAQ,QAAQ,eAAe,KAAK,IAAI;MAClD;AAEA,cAAQ,OAAO;QAEb,KAAK;QACL,KAAK;AAEH,iBAAO,SAAS,aAAa,MAAM,QAAQ,UAAU,GAAGA,eAAa;QAGvE,KAAK;AACH,iBAAO,SAASrB,QAAM,cAAc,YAAY;YAC9C,MAAM;UACR,CAAC,GAAGqB,eAAa;QAGnB,KAAK;AACH,iBAAOrB,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;QACL;AACE,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO,SAAS;AAChD,MAAAA,QAAO,UAAUA,OAAM,OAAO,OAAO;AACrC,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOiB;AACT,EAAE,MAAM;ACvIR,SAASlC,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAMzM,IAAI,2BAAwC,yBAAU,SAAS;AACpEX,cAAUiC,2BAA0B,OAAO;AAE3C,MAAI,SAAS7B,eAAa6B,yBAAwB;AAElD,WAASA,4BAA2B;AAClC,QAAI;AAEJzC,sBAAgB,MAAMyC,yBAAwB;AAE9C,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDtB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEhJ,WAAO;EACT;AAEAd,iBAAasC,2BAA0B,CAAC;IACtC,KAAK;IACL,OAAO,SAASpB,OAAM,YAAY,OAAOhB,SAAO,SAAS;AACvD,UAAIqB,kBAAgB,SAASA,iBAAc,OAAO;AAChD,YAAI,gBAAgB,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI;AAClD,gBAAQ,QAAQ,QAAQ,eAAe,KAAK,IAAI;MAClD;AAEA,cAAQ,OAAO;QAEb,KAAK;QACL,KAAK;AAEH,iBAAO,SAAS,aAAa,MAAM,QAAQ,UAAU,GAAGA,eAAa;QAGvE,KAAK;AACH,iBAAO,SAASrB,QAAM,cAAc,YAAY;YAC9C,MAAM;UACR,CAAC,GAAGqB,eAAa;QAGnB,KAAK;AACH,iBAAOrB,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;AACH,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;QAGH,KAAK;QACL;AACE,iBAAOA,QAAM,IAAI,YAAY;YAC3B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO,SAAS;AAChD,MAAAA,QAAO,UAAUA,OAAM,OAAO,OAAO;AACrC,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOkB;AACT,EAAE,MAAM;ACpIO,SAAR,aAA8B,WAAW,UAAU;AACxD,eAAa,GAAG,SAAS;AACzB,MAAI,MAAM,UAAU,QAAQ;AAE5B,MAAI,MAAM,MAAM,GAAG;AACjB,UAAM,MAAM;EACd;AAEA,MAAI,eAAe;AACnB,MAAIlB,QAAO,OAAO,SAAS;AAC3B,MAAI,aAAaA,MAAK,UAAU;AAChC,MAAI,YAAY,MAAM;AACtB,MAAI,YAAY,YAAY,KAAK;AACjC,MAAI,QAAQ,WAAW,eAAe,IAAI,KAAK,MAAM;AACrD,EAAAA,MAAK,WAAWA,MAAK,WAAW,IAAI,IAAI;AACxC,SAAOA;AACT;ACnBA,SAASjB,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAMzM,IAAI,eAA4B,yBAAU,SAAS;AACxDX,cAAUkC,eAAc,OAAO;AAE/B,MAAI,SAAS9B,eAAa8B,aAAY;AAEtC,WAASA,gBAAe;AACtB,QAAI;AAEJ1C,sBAAgB,MAAM0C,aAAY;AAElC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDvB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEhJ,WAAO;EACT;AAEAd,iBAAauC,eAAc,CAAC;IAC1B,KAAK;IACL,OAAO,SAASrB,OAAM,YAAY,OAAOhB,SAAO;AAC9C,UAAIqB,kBAAgB,SAASA,iBAAc,OAAO;AAChD,YAAI,UAAU,GAAG;AACf,iBAAO;QACT;AAEA,eAAO;MACT;AAEA,cAAQ,OAAO;QAEb,KAAK;QACL,KAAK;AAEH,iBAAO,aAAa,MAAM,QAAQ,UAAU;QAG9C,KAAK;AACH,iBAAOrB,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAGH,KAAK;AACH,iBAAO,SAASA,QAAM,IAAI,YAAY;YACpC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,GAAGqB,eAAa;QAGnB,KAAK;AACH,iBAAO,SAASrB,QAAM,IAAI,YAAY;YACpC,OAAO;YACP,SAAS;UACX,CAAC,GAAGqB,eAAa;QAGnB,KAAK;AACH,iBAAO,SAASrB,QAAM,IAAI,YAAY;YACpC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,GAAGqB,eAAa;QAGnB,KAAK;QACL;AACE,iBAAO,SAASrB,QAAM,IAAI,YAAY;YACpC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,IAAI,YAAY;YAC1B,OAAO;YACP,SAAS;UACX,CAAC,GAAGqB,eAAa;MACrB;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASJ,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,QAAO,aAAaA,OAAM,KAAK;AAC/B,MAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOmB;AACT,EAAE,MAAM;AC1IR,SAASpC,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAIzM,IAAI,aAA0B,yBAAU,SAAS;AACtDX,cAAUmC,aAAY,OAAO;AAE7B,MAAI,SAAS/B,eAAa+B,WAAU;AAEpC,WAASA,cAAa;AACpB,QAAI;AAEJ3C,sBAAgB,MAAM2C,WAAU;AAEhC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDxB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEnG,WAAO;EACT;AAEAd,iBAAawC,aAAY,CAAC;IACxB,KAAK;IACL,OAAO,SAAStB,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;QACL,KAAK;QACL,KAAK;AACH,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC;QAEH,KAAK;AACH,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC;QAEH,KAAK;QACL;AACE,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,YAAY,qBAAqB,KAAK,GAAG,GAAG,GAAG,CAAC;AACrD,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOoB;AACT,EAAE,MAAM;AC7FR,SAASrC,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAIzM,IAAI,qBAAkC,yBAAU,SAAS;AAC9DX,cAAUoC,qBAAoB,OAAO;AAErC,MAAI,SAAShC,eAAagC,mBAAkB;AAE5C,WAASA,sBAAqB;AAC5B,QAAI;AAEJ5C,sBAAgB,MAAM4C,mBAAkB;AAExC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDzB,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEnG,WAAO;EACT;AAEAd,iBAAayC,qBAAoB,CAAC;IAChC,KAAK;IACL,OAAO,SAASvB,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;QACL,KAAK;QACL,KAAK;AACH,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC;QAEH,KAAK;AACH,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC;QAEH,KAAK;QACL;AACE,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,YAAY,qBAAqB,KAAK,GAAG,GAAG,GAAG,CAAC;AACrD,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOqB;AACT,EAAE,MAAM;AC7FR,SAAStC,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,kBAA+B,yBAAU,SAAS;AAC3DX,cAAUqC,kBAAiB,OAAO;AAElC,MAAI,SAASjC,eAAaiC,gBAAe;AAEzC,WAASA,mBAAkB;AACzB,QAAI;AAEJ7C,sBAAgB,MAAM6C,gBAAe;AAErC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErD1B,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AAEzF,WAAO;EACT;AAEAd,iBAAa0C,kBAAiB,CAAC;IAC7B,KAAK;IACL,OAAO,SAASxB,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;QACL,KAAK;QACL,KAAK;AACH,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC;QAEH,KAAK;AACH,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC;QAEH,KAAK;QACL;AACE,iBAAOA,QAAM,UAAU,YAAY;YACjC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC,KAAKA,QAAM,UAAU,YAAY;YAChC,OAAO;YACP,SAAS;UACX,CAAC;MACL;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,YAAY,qBAAqB,KAAK,GAAG,GAAG,GAAG,CAAC;AACrD,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOsB;AACT,EAAE,MAAM;AC9FR,SAASvC,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,kBAA+B,yBAAU,SAAS;AAC3DX,cAAUsC,kBAAiB,OAAO;AAElC,MAAI,SAASlC,eAAakC,gBAAe;AAEzC,WAASA,mBAAkB;AACzB,QAAI;AAEJ9C,sBAAgB,MAAM8C,gBAAe;AAErC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErD3B,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAE9F,WAAO;EACT;AAEAd,iBAAa2C,kBAAiB,CAAC;IAC7B,KAAK;IACL,OAAO,SAASzB,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,SAAS,UAAU;QAEhE,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,UAAI,OAAOA,MAAK,YAAY,KAAK;AAEjC,UAAI,QAAQ,QAAQ,IAAI;AACtB,QAAAA,MAAK,YAAY,QAAQ,IAAI,GAAG,GAAG,CAAC;MACtC,WAAW,CAAC,QAAQ,UAAU,IAAI;AAChC,QAAAA,MAAK,YAAY,GAAG,GAAG,GAAG,CAAC;MAC7B,OAAO;AACL,QAAAA,MAAK,YAAY,OAAO,GAAG,GAAG,CAAC;MACjC;AAEA,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOuB;AACT,EAAE,MAAM;ACzFR,SAASxC,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,kBAA+B,yBAAU,SAAS;AAC3DX,cAAUuC,kBAAiB,OAAO;AAElC,MAAI,SAASnC,eAAamC,gBAAe;AAEzC,WAASA,mBAAkB;AACzB,QAAI;AAEJ/C,sBAAgB,MAAM+C,gBAAe;AAErC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErD5B,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAExG,WAAO;EACT;AAEAd,iBAAa4C,kBAAiB,CAAC;IAC7B,KAAK;IACL,OAAO,SAAS1B,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,SAAS,UAAU;QAEhE,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,YAAY,OAAO,GAAG,GAAG,CAAC;AAC/B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOwB;AACT,EAAE,MAAM;AChFR,SAASzC,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,kBAA+B,yBAAU,SAAS;AAC3DX,cAAUwC,kBAAiB,OAAO;AAElC,MAAI,SAASpC,eAAaoC,gBAAe;AAEzC,WAASA,mBAAkB;AACzB,QAAI;AAEJhD,sBAAgB,MAAMgD,gBAAe;AAErC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErD7B,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAE9F,WAAO;EACT;AAEAd,iBAAa6C,kBAAiB,CAAC;IAC7B,KAAK;IACL,OAAO,SAAS3B,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,SAAS,UAAU;QAEhE,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,UAAI,OAAOA,MAAK,YAAY,KAAK;AAEjC,UAAI,QAAQ,QAAQ,IAAI;AACtB,QAAAA,MAAK,YAAY,QAAQ,IAAI,GAAG,GAAG,CAAC;MACtC,OAAO;AACL,QAAAA,MAAK,YAAY,OAAO,GAAG,GAAG,CAAC;MACjC;AAEA,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAOyB;AACT,EAAE,MAAM;ACvFR,SAAS1C,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,kBAA+B,yBAAU,SAAS;AAC3DX,cAAUyC,kBAAiB,OAAO;AAElC,MAAI,SAASrC,eAAaqC,gBAAe;AAEzC,WAASA,mBAAkB;AACzB,QAAI;AAEJjD,sBAAgB,MAAMiD,gBAAe;AAErC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErD9B,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAExG,WAAO;EACT;AAEAd,iBAAa8C,kBAAiB,CAAC;IAC7B,KAAK;IACL,OAAO,SAAS5B,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,SAAS,UAAU;QAEhE,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,UAAI,QAAQ,SAAS,KAAK,QAAQ,KAAK;AACvC,MAAAA,MAAK,YAAY,OAAO,GAAG,GAAG,CAAC;AAC/B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAO0B;AACT,EAAE,MAAM;ACjFR,SAAS3C,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,eAA4B,yBAAU,SAAS;AACxDX,cAAU0C,eAAc,OAAO;AAE/B,MAAI,SAAStC,eAAasC,aAAY;AAEtC,WAASA,gBAAe;AACtB,QAAI;AAEJlD,sBAAgB,MAAMkD,aAAY;AAElC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErD/B,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,GAAG,CAAC;AAE/E,WAAO;EACT;AAEAd,iBAAa+C,eAAc,CAAC;IAC1B,KAAK;IACL,OAAO,SAAS7B,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,QAAQ,UAAU;QAE/D,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,cAAc,OAAO,GAAG,CAAC;AAC9B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAO2B;AACT,EAAE,MAAM;AChFR,SAAS5C,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAKzM,IAAI,eAA4B,yBAAU,SAAS;AACxDX,cAAU2C,eAAc,OAAO;AAE/B,MAAI,SAASvC,eAAauC,aAAY;AAEtC,WAASA,gBAAe;AACtB,QAAI;AAEJnD,sBAAgB,MAAMmD,aAAY;AAElC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDhC,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,GAAG,CAAC;AAE/E,WAAO;EACT;AAEAd,iBAAagD,eAAc,CAAC;IAC1B,KAAK;IACL,OAAO,SAAS9B,OAAM,YAAY,OAAOhB,SAAO;AAC9C,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,oBAAoB,gBAAgB,QAAQ,UAAU;QAE/D,KAAK;AACH,iBAAOA,QAAM,cAAc,YAAY;YACrC,MAAM;UACR,CAAC;QAEH;AACE,iBAAO,aAAa,MAAM,QAAQ,UAAU;MAChD;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAAS,SAAS,OAAO,OAAO;AACrC,aAAO,SAAS,KAAK,SAAS;IAChC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASiB,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,cAAc,OAAO,CAAC;AAC3B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAO4B;AACT,EAAE,MAAM;AChFR,SAAS7C,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAIzM,IAAI,yBAAsC,yBAAU,SAAS;AAClEX,cAAU4C,yBAAwB,OAAO;AAEzC,MAAI,SAASxC,eAAawC,uBAAsB;AAEhD,WAASA,0BAAyB;AAChC,QAAI;AAEJpD,sBAAgB,MAAMoD,uBAAsB;AAE5C,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDjC,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,GAAG,CAAC;AAE/E,WAAO;EACT;AAEAd,iBAAaiD,yBAAwB,CAAC;IACpC,KAAK;IACL,OAAO,SAAS/B,OAAM,YAAY,OAAO;AACvC,UAAIK,kBAAgB,SAASA,iBAAc,OAAO;AAChD,eAAO,KAAK,MAAM,QAAQ,KAAK,IAAI,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;MAC3D;AAEA,aAAO,SAAS,aAAa,MAAM,QAAQ,UAAU,GAAGA,eAAa;IACvE;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASJ,KAAIC,OAAM,QAAQ,OAAO;AACvC,MAAAA,MAAK,mBAAmB,KAAK;AAC7B,aAAOA;IACT;EACF,CAAC,CAAC;AAEF,SAAO6B;AACT,EAAE,MAAM;ACnER,SAAS9C,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAMzM,IAAI,yBAAsC,yBAAU,SAAS;AAClEX,cAAU6C,yBAAwB,OAAO;AAEzC,MAAI,SAASzC,eAAayC,uBAAsB;AAEhD,WAASA,0BAAyB;AAChC,QAAI;AAEJrD,sBAAgB,MAAMqD,uBAAsB;AAE5C,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDlC,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,GAAG,CAAC;AAEpF,WAAO;EACT;AAEAd,iBAAakD,yBAAwB,CAAC;IACpC,KAAK;IACL,OAAO,SAAShC,OAAM,YAAY,OAAO;AACvC,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,qBAAqB,iBAAiB,sBAAsB,UAAU;QAE/E,KAAK;AACH,iBAAO,qBAAqB,iBAAiB,OAAO,UAAU;QAEhE,KAAK;AACH,iBAAO,qBAAqB,iBAAiB,sBAAsB,UAAU;QAE/E,KAAK;AACH,iBAAO,qBAAqB,iBAAiB,yBAAyB,UAAU;QAElF,KAAK;QACL;AACE,iBAAO,qBAAqB,iBAAiB,UAAU,UAAU;MACrE;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASC,KAAIC,OAAM,OAAO,OAAO;AACtC,UAAI,MAAM,gBAAgB;AACxB,eAAOA;MACT;AAEA,aAAO,IAAI,KAAKA,MAAK,QAAQ,IAAI,KAAK;IACxC;EACF,CAAC,CAAC;AAEF,SAAO8B;AACT,EAAE,MAAM;ACpFR,SAAS/C,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAMzM,IAAI,oBAAiC,yBAAU,SAAS;AAC7DX,cAAU8C,oBAAmB,OAAO;AAEpC,MAAI,SAAS1C,eAAa0C,kBAAiB;AAE3C,WAASA,qBAAoB;AAC3B,QAAI;AAEJtD,sBAAgB,MAAMsD,kBAAiB;AAEvC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDnC,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,CAAC,KAAK,KAAK,GAAG,CAAC;AAEpF,WAAO;EACT;AAEAd,iBAAamD,oBAAmB,CAAC;IAC/B,KAAK;IACL,OAAO,SAASjC,OAAM,YAAY,OAAO;AACvC,cAAQ,OAAO;QACb,KAAK;AACH,iBAAO,qBAAqB,iBAAiB,sBAAsB,UAAU;QAE/E,KAAK;AACH,iBAAO,qBAAqB,iBAAiB,OAAO,UAAU;QAEhE,KAAK;AACH,iBAAO,qBAAqB,iBAAiB,sBAAsB,UAAU;QAE/E,KAAK;AACH,iBAAO,qBAAqB,iBAAiB,yBAAyB,UAAU;QAElF,KAAK;QACL;AACE,iBAAO,qBAAqB,iBAAiB,UAAU,UAAU;MACrE;IACF;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASC,KAAIC,OAAM,OAAO,OAAO;AACtC,UAAI,MAAM,gBAAgB;AACxB,eAAOA;MACT;AAEA,aAAO,IAAI,KAAKA,MAAK,QAAQ,IAAI,KAAK;IACxC;EACF,CAAC,CAAC;AAEF,SAAO+B;AACT,EAAE,MAAM;ACpFR,SAAShD,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAIzM,IAAI,yBAAsC,yBAAU,SAAS;AAClEX,cAAU+C,yBAAwB,OAAO;AAEzC,MAAI,SAAS3C,eAAa2C,uBAAsB;AAEhD,WAASA,0BAAyB;AAChC,QAAI;AAEJvD,sBAAgB,MAAMuD,uBAAsB;AAE5C,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDpC,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,GAAG;AAExE,WAAO;EACT;AAEAd,iBAAaoD,yBAAwB,CAAC;IACpC,KAAK;IACL,OAAO,SAASlC,OAAM,YAAY;AAChC,aAAO,qBAAqB,UAAU;IACxC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASC,KAAI,OAAO,QAAQ,OAAO;AACxC,aAAO,CAAC,IAAI,KAAK,QAAQ,GAAI,GAAG;QAC9B,gBAAgB;MAClB,CAAC;IACH;EACF,CAAC,CAAC;AAEF,SAAOiC;AACT,EAAE,MAAM;AChER,SAASjD,UAAQ,KAAK;AAAE;AAA2B,MAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAO,OAAOA;IAAK;EAAG,OAAO;AAAED,gBAAU,SAASA,UAAQC,MAAK;AAAE,aAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;IAAK;EAAG;AAAE,SAAOD,UAAQ,GAAG;AAAG;AAEzX,SAASN,kBAAgB,UAAU,aAAa;AAAE,MAAI,EAAE,oBAAoB,cAAc;AAAE,UAAM,IAAI,UAAU,mCAAmC;EAAG;AAAE;AAExJ,SAASC,oBAAkB,QAAQ,OAAO;AAAE,WAASC,MAAI,GAAGA,MAAI,MAAM,QAAQA,OAAK;AAAE,QAAI,aAAa,MAAMA,GAAC;AAAG,eAAW,aAAa,WAAW,cAAc;AAAO,eAAW,eAAe;AAAM,QAAI,WAAW;AAAY,iBAAW,WAAW;AAAM,WAAO,eAAe,QAAQ,WAAW,KAAK,UAAU;EAAG;AAAE;AAE5T,SAASC,eAAa,aAAa,YAAY,aAAa;AAAE,MAAI;AAAYF,wBAAkB,YAAY,WAAW,UAAU;AAAG,MAAI;AAAaA,wBAAkB,aAAa,WAAW;AAAG,SAAO;AAAa;AAEtN,SAASO,YAAU,UAAU,YAAY;AAAE,MAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,UAAM,IAAI,UAAU,oDAAoD;EAAG;AAAE,WAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK,EAAE,CAAC;AAAG,MAAI;AAAYC,sBAAgB,UAAU,UAAU;AAAG;AAEhY,SAASA,kBAAgBC,IAAGC,IAAG;AAAEF,sBAAkB,OAAO,kBAAkB,SAASA,kBAAgBC,KAAGC,KAAG;AAAED,IAAAA,IAAE,YAAYC;AAAG,WAAOD;EAAG;AAAG,SAAOD,kBAAgBC,IAAGC,EAAC;AAAG;AAEzK,SAASC,eAAa,SAAS;AAAE,MAAI,4BAA4BC,4BAA0B;AAAG,SAAO,SAAS,uBAAuB;AAAE,QAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,QAAI,2BAA2B;AAAE,UAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,eAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;IAAG,OAAO;AAAE,eAAS,MAAM,MAAM,MAAM,SAAS;IAAG;AAAE,WAAOC,6BAA2B,MAAM,MAAM;EAAG;AAAG;AAExa,SAASA,6BAA2BC,OAAM,MAAM;AAAE,MAAI,SAASV,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,WAAO;EAAM;AAAE,SAAOW,yBAAuBD,KAAI;AAAG;AAEhL,SAASC,yBAAuBD,OAAM;AAAE,MAAIA,UAAS,QAAQ;AAAE,UAAM,IAAI,eAAe,2DAA2D;EAAG;AAAE,SAAOA;AAAM;AAErK,SAASH,8BAA4B;AAAE,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,WAAO;AAAO,MAAI,QAAQ,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,UAAU;AAAY,WAAO;AAAM,MAAI;AAAE,YAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,CAAC,GAAG,WAAY;IAAC,CAAC,CAAC;AAAG,WAAO;EAAM,SAASK,KAAG;AAAE,WAAO;EAAO;AAAE;AAExU,SAASJ,kBAAgBJ,IAAG;AAAEI,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,kBAAgBJ,KAAG;AAAE,WAAOA,IAAE,aAAa,OAAO,eAAeA,GAAC;EAAG;AAAG,SAAOI,kBAAgBJ,EAAC;AAAG;AAE5M,SAASS,kBAAgB,KAAK,KAAK,OAAO;AAAE,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;EAAO;AAAE,SAAO;AAAK;AAIzM,IAAI,8BAA2C,yBAAU,SAAS;AACvEX,cAAUgD,8BAA6B,OAAO;AAE9C,MAAI,SAAS5C,eAAa4C,4BAA2B;AAErD,WAASA,+BAA8B;AACrC,QAAI;AAEJxD,sBAAgB,MAAMwD,4BAA2B;AAEjD,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;IAC7B;AAEA,YAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDrC,sBAAgBF,yBAAuB,KAAK,GAAG,YAAY,EAAE;AAE7DE,sBAAgBF,yBAAuB,KAAK,GAAG,sBAAsB,GAAG;AAExE,WAAO;EACT;AAEAd,iBAAaqD,8BAA6B,CAAC;IACzC,KAAK;IACL,OAAO,SAASnC,OAAM,YAAY;AAChC,aAAO,qBAAqB,UAAU;IACxC;EACF,GAAG;IACD,KAAK;IACL,OAAO,SAASC,KAAI,OAAO,QAAQ,OAAO;AACxC,aAAO,CAAC,IAAI,KAAK,KAAK,GAAG;QACvB,gBAAgB;MAClB,CAAC;IACH;EACF,CAAC,CAAC;AAEF,SAAOkC;AACT,EAAE,MAAM;ACWD,IAAIC,WAAU;EACnB,GAAG,IAAI,UAAU;EACjB,GAAG,IAAI,WAAW;EAClB,GAAG,IAAI,oBAAoB;EAC3B,GAAG,IAAI,kBAAkB;EACzB,GAAG,IAAI,mBAAmB;EAC1B,GAAG,IAAI,cAAc;EACrB,GAAG,IAAI,wBAAwB;EAC/B,GAAG,IAAI,YAAY;EACnB,GAAG,IAAI,sBAAsB;EAC7B,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,cAAc;EACrB,GAAG,IAAI,WAAW;EAClB,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,UAAU;EACjB,GAAG,IAAI,eAAe;EACtB,GAAG,IAAI,yBAAyB;EAChC,GAAG,IAAI,aAAa;EACpB,GAAG,IAAI,WAAW;EAClB,GAAG,IAAI,mBAAmB;EAC1B,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,aAAa;EACpB,GAAG,IAAI,aAAa;EACpB,GAAG,IAAI,uBAAuB;EAC9B,GAAG,IAAI,uBAAuB;EAC9B,GAAG,IAAI,kBAAkB;EACzB,GAAG,IAAI,uBAAuB;EAC9B,GAAG,IAAI,4BAA4B;AACrC;AO3GA,IAAIC,wBAAuB;EACzB,kBAAkB;IAChB,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,UAAU;IACR,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;IACZ,iBAAiB;EACnB;EACA,kBAAkB;IAChB,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,UAAU;IACR,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,OAAO;IACL,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,cAAc;IACZ,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,SAAS;IACP,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,YAAY;IACV,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,cAAc;IACZ,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;AACF;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,SAAS;AAClE,MAAI;AACJ,MAAI,aAAa,YAAY,QAAQ,YAAY,UAAU,QAAQ,YAAYD,sBAAqB,KAAK,EAAE,kBAAkBA,sBAAqB,KAAK,EAAE;AAEzJ,MAAI,OAAO,eAAe,UAAU;AAClC,aAAS;EACX,WAAW,UAAU,GAAG;AACtB,aAAS,WAAW;EACtB,OAAO;AACL,aAAS,WAAW,MAAM,QAAQ,aAAa,OAAO,KAAK,CAAC;EAC9D;AAEA,MAAI,YAAY,QAAQ,YAAY,UAAU,QAAQ,WAAW;AAC/D,QAAI,QAAQ,cAAc,QAAQ,aAAa,GAAG;AAChD,aAAO,QAAQ;IACjB,OAAO;AACL,aAAO,SAAS;IAClB;EACF;AAEA,SAAO;AACT;AAEA,IAAOE,0BAAQD;AClLf,IAAIE,eAAc;EAChB,MAAM;;EAEN,MAAM;;EAEN,QAAQ;;EAER,OAAO;;AAET;AACA,IAAIC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,mBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,cAAa;EACf,MAAM,kBAAkB;IACtB,SAASH;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAASC;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAASC;IACT,cAAc;EAChB,CAAC;AACH;AACA,IAAOE,sBAAQD;ACtCf,IAAIE,wBAAuB;EACzB,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,WAAW,UAAU;AAC9E,SAAOD,sBAAqB,KAAK;AACnC;AAEA,IAAOE,0BAAQD;ACZf,IAAIE,aAAY;EACd,QAAQ,CAAC,UAAU,QAAQ;EAC3B,aAAa,CAAC,UAAU,QAAQ;EAChC,MAAM,CAAC,gBAAgB,eAAe;AACxC;AACA,IAAIC,iBAAgB;EAClB,QAAQ,CAAC,KAAK,KAAK,KAAK,GAAG;EAC3B,aAAa,CAAC,MAAM,MAAM,MAAM,IAAI;EACpC,MAAM,CAAC,cAAc,cAAc,cAAc,YAAY;AAC/D;AAKA,IAAIC,eAAc;EAChB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EACnE,aAAa,CAAC,OAAO,OAAO,UAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAChG,MAAM,CAAC,UAAU,WAAW,WAAQ,SAAS,OAAO,QAAQ,QAAQ,UAAU,aAAa,WAAW,YAAY,UAAU;AAC9H;AAEA,IAAI,wBAAwB;EAC1B,QAAQA,aAAY;EACpB,aAAa,CAAC,QAAQ,QAAQ,WAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;EAC3G,MAAMA,aAAY;AACpB;AACA,IAAIC,aAAY;EACd,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EAC1C,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EAChD,aAAa,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC7D,MAAM,CAAC,WAAW,UAAU,YAAY,YAAY,cAAc,WAAW,SAAS;AACxF;AAEA,IAAIC,mBAAkB;EACpB,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAIC,6BAA4B;EAC9B,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AAEA,IAAIC,iBAAgB,SAASA,eAAc,aAAa;AACtD,MAAIC,UAAS,OAAO,WAAW;AAC/B,SAAOA,UAAS;AAClB;AAEA,IAAIC,YAAW;EACb,eAAeF;EACf,KAAK,gBAAgB;IACnB,QAAQN;IACR,cAAc;EAChB,CAAC;EACD,SAAS,gBAAgB;IACvB,QAAQC;IACR,cAAc;IACd,kBAAkB,SAASQ,kBAAiB,SAAS;AACnD,aAAO,UAAU;IACnB;EACF,CAAC;EACD,OAAO,gBAAgB;IACrB,QAAQP;IACR,kBAAkB;IAClB,cAAc;EAChB,CAAC;EACD,KAAK,gBAAgB;IACnB,QAAQC;IACR,cAAc;EAChB,CAAC;EACD,WAAW,gBAAgB;IACzB,QAAQC;IACR,cAAc;IACd,kBAAkBC;IAClB,wBAAwB;EAC1B,CAAC;AACH;AACA,IAAOK,oBAAQF;AClIf,IAAIG,6BAA4B;AAChC,IAAIC,6BAA4B;AAChC,IAAIC,oBAAmB;EACrB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,KAAK,CAAC,OAAO,KAAK;AACpB;AACA,IAAIC,wBAAuB;EACzB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,wBAAuB;EACzB,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI;AAC9B;AACA,IAAIC,sBAAqB;EACvB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,sBAAqB;EACvB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC3F,KAAK,CAAC,WAAW,OAAO,SAAS,QAAQ,SAAS,SAAS,SAAS,QAAQ,OAAO,OAAO,OAAO,KAAK;AACxG;AACA,IAAIC,oBAAmB;EACrB,QAAQ;EACR,OAAO;EACP,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,KAAK,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,MAAM;AAC7D;AACA,IAAIC,0BAAyB;EAC3B,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,0BAAyB;EAC3B,KAAK;IACH,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;;IAEX,SAAS;IACT,OAAO;;EAET;AACF;AACA,IAAIC,SAAQ;EACV,eAAe,oBAAoB;IACjC,cAAcZ;IACd,cAAcC;IACd,eAAe,SAASY,eAAc,OAAO;AAC3C,aAAO,SAAS,KAAK;IACvB;EACF,CAAC;EACD,KAAK,aAAa;IAChB,eAAeX;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,SAAS,aAAa;IACpB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;IACnB,eAAe,SAASQ,eAAc,OAAO;AAC3C,aAAO,QAAQ;IACjB;EACF,CAAC;EACD,OAAO,aAAa;IAClB,eAAeP;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,KAAK,aAAa;IAChB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,WAAW,aAAa;IACtB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;AACH;AACA,IAAOG,iBAAQF;ACjFf,IAAIG,UAAS;EACX,MAAM;EACN,gBAAgBnC;EAChB,YAAYK;EACZ,gBAAgBG;EAChB,UAAUW;EACV,OAAOe;EACP,SAAS;IACP,cAAc;IAGd,uBAAuB;EACzB;AACF;AACA,IAAO,aAAQC;AC/Bf,IAAIlC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,mBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,cAAa;EACf,MAAM,kBAAkB;IACtB,SAASH;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAASC;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAASC;IACT,cAAc;EAChB,CAAC;AACH;AACA,IAAOE,sBAAQD;ACnBf,IAAI+B,UAAS;EACX,MAAM;EACN,gBAAgB;EAChB,YAAY9B;EACZ,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,SAAS;IACP,cAAc;IAGd,uBAAuB;EACzB;AACF;AACA,IAAO,gBAAQ8B;AC5Bf,IAAIrC,wBAAuB;EACzB,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;EACb,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,OAAO;IACL,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;EACA,SAAS;IACP,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,YAAY;IACV,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;AACF;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,SAAS;AAClE,MAAI;AACJ,MAAI,aAAaD,sBAAqB,KAAK;AAE3C,MAAI,OAAO,eAAe,UAAU;AAClC,aAAS;EACX,WAAW,UAAU,GAAG;AACtB,aAAS,WAAW;EACtB,OAAO;AACL,aAAS,WAAW,MAAM,QAAQ,aAAa,MAAM,SAAS,CAAC;EACjE;AAEA,MAAI,YAAY,QAAQ,YAAY,UAAU,QAAQ,WAAW;AAC/D,QAAI,QAAQ,cAAc,QAAQ,aAAa,GAAG;AAChD,aAAO,QAAQ;IACjB,OAAO;AACL,aAAO,UAAU;IACnB;EACF;AAEA,SAAO;AACT;AAEA,IAAOE,0BAAQD;ACtFf,IAAIE,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,mBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,cAAa;EACf,MAAM,kBAAkB;IACtB,SAASH;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAASC;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAASC;IACT,cAAc;EAChB,CAAC;AACH;AACA,IAAOE,sBAAQD;ACjCf,IAAIE,wBAAuB;EACzB,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AACA,IAAI,6BAA6B;EAC/B,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO6B,OAAM,WAAW,UAAU;AAC7E,MAAIA,MAAK,YAAY,MAAM,GAAG;AAC5B,WAAO,2BAA2B,KAAK;EACzC,OAAO;AACL,WAAO9B,sBAAqB,KAAK;EACnC;AACF;AAEA,IAAOE,0BAAQD;ACxBf,IAAIE,aAAY;EACd,QAAQ,CAAC,MAAM,IAAI;EACnB,aAAa,CAAC,MAAM,IAAI;EACxB,MAAM,CAAC,mBAAmB,sBAAmB;AAC/C;AACA,IAAIC,iBAAgB;EAClB,QAAQ,CAAC,KAAK,KAAK,KAAK,GAAG;EAC3B,aAAa,CAAC,MAAM,MAAM,MAAM,IAAI;EACpC,MAAM,CAAC,mBAAgB,mBAAgB,mBAAgB,iBAAc;AACvE;AACA,IAAIC,eAAc;EAChB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EACnE,aAAa,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAChG,MAAM,CAAC,SAAS,WAAW,SAAS,SAAS,QAAQ,SAAS,SAAS,UAAU,cAAc,WAAW,aAAa,WAAW;AACpI;AACA,IAAIC,aAAY;EACd,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EAC1C,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAI;EAChD,aAAa,CAAC,OAAO,OAAO,OAAO,UAAO,OAAO,OAAO,QAAK;EAC7D,MAAM,CAAC,WAAW,SAAS,UAAU,gBAAa,UAAU,WAAW,WAAQ;AACjF;AACA,IAAIC,mBAAkB;EACpB,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAIC,6BAA4B;EAC9B,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AAEA,IAAIC,iBAAgB,SAASA,eAAc,aAAa,UAAU;AAChE,MAAIC,UAAS,OAAO,WAAW;AAC/B,SAAOA,UAAS;AAClB;AAEA,IAAIC,YAAW;EACb,eAAeF;EACf,KAAK,gBAAgB;IACnB,QAAQN;IACR,cAAc;EAChB,CAAC;EACD,SAAS,gBAAgB;IACvB,QAAQC;IACR,cAAc;IACd,kBAAkB,SAASQ,kBAAiB,SAAS;AACnD,aAAO,OAAO,OAAO,IAAI;IAC3B;EACF,CAAC;EACD,OAAO,gBAAgB;IACrB,QAAQP;IACR,cAAc;EAChB,CAAC;EACD,KAAK,gBAAgB;IACnB,QAAQC;IACR,cAAc;EAChB,CAAC;EACD,WAAW,gBAAgB;IACzB,QAAQC;IACR,cAAc;IACd,kBAAkBC;IAClB,wBAAwB;EAC1B,CAAC;AACH;AACA,IAAOK,oBAAQF;ACtHf,IAAIG,6BAA4B;AAChC,IAAIC,6BAA4B;AAChC,IAAIC,oBAAmB;EACrB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,KAAK,CAAC,QAAQ,MAAM;EACpB,MAAM,CAAC,gDAAgD,uCAAuC;AAChG;AACA,IAAIC,wBAAuB;EACzB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,wBAAuB;EACzB,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI;AAC9B;AACA,IAAIC,sBAAqB;EACvB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,sBAAqB;EACvB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC3F,KAAK,CAAC,QAAQ,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,OAAO;AACjH;AACA,IAAIC,oBAAmB;EACrB,QAAQ;EACR,OAAO;EACP,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EACxD,KAAK,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAC9D;AACA,IAAIC,0BAAyB;EAC3B,QAAQ;EACR,KAAK;AACP;AACA,IAAIC,0BAAyB;EAC3B,KAAK;IACH,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAIC,SAAQ;EACV,eAAe,oBAAoB;IACjC,cAAcZ;IACd,cAAcC;IACd,eAAe,SAASY,eAAc,OAAO;AAC3C,aAAO,SAAS,OAAO,EAAE;IAC3B;EACF,CAAC;EACD,KAAK,aAAa;IAChB,eAAeX;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,SAAS,aAAa;IACpB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;IACnB,eAAe,SAASQ,eAAc,OAAO;AAC3C,aAAO,QAAQ;IACjB;EACF,CAAC;EACD,OAAO,aAAa;IAClB,eAAeP;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,KAAK,aAAa;IAChB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,WAAW,aAAa;IACtB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;AACH;AACA,IAAOG,iBAAQF;AChFf,IAAIG,UAAS;EACX,MAAM;EACN,gBAAgBnC;EAChB,YAAYK;EACZ,gBAAgBG;EAChB,UAAUW;EACV,OAAOe;EACP,SAAS;IACP,cAAc;IAGd,uBAAuB;EACzB;AACF;AACA,IAAO,aAAQC;AChCf,IAAIrC,wBAAuB;EACzB,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;EACb,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,OAAO;IACL,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;EACA,SAAS;IACP,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,YAAY;IACV,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;AACF;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,SAAS;AAClE,MAAI;AACJ,MAAI,OAAOD,sBAAqB,KAAK;AAErC,MAAI,OAAO,SAAS,UAAU;AAC5B,aAAS;EACX,WAAW,UAAU,GAAG;AACtB,aAAS,KAAK;EAChB,OAAO;AACL,aAAS,KAAK,MAAM,QAAQ,aAAa,OAAO,KAAK,CAAC;EACxD;AAEA,MAAI,YAAY,QAAQ,YAAY,UAAU,QAAQ,WAAW;AAC/D,QAAI,QAAQ,cAAc,QAAQ,aAAa,GAAG;AAChD,aAAO,UAAU;IACnB,OAAO;AACL,aAAO,YAAY;IACrB;EACF;AAEA,SAAO;AACT;AAEA,IAAOE,0BAAQD;ACtFf,IAAIE,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,mBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,cAAa;EACf,MAAM,kBAAkB;IACtB,SAASH;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAASC;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAASC;IACT,cAAc;EAChB,CAAC;AACH;AACA,IAAOE,sBAAQD;ACjCf,IAAIE,wBAAuB;EACzB,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,WAAW,UAAU;AAC9E,SAAOD,sBAAqB,KAAK;AACnC;AAEA,IAAOE,0BAAQD;ACZf,IAAIE,aAAY;EACd,QAAQ,CAAC,YAAY,UAAU;EAC/B,aAAa,CAAC,YAAY,UAAU;EACpC,MAAM,CAAC,yBAAsB,0BAAoB;AACnD;AACA,IAAIC,iBAAgB;EAClB,QAAQ,CAAC,MAAM,MAAM,MAAM,IAAI;EAC/B,aAAa,CAAC,aAAa,iBAAc,iBAAc,eAAY;EACnE,MAAM,CAAC,iBAAiB,qBAAkB,qBAAkB,mBAAgB;AAC9E;AACA,IAAIC,eAAc;EAChB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EACnE,aAAa,CAAC,SAAS,YAAS,QAAQ,QAAQ,OAAO,QAAQ,SAAS,WAAQ,SAAS,QAAQ,QAAQ,SAAM;EAC/G,MAAM,CAAC,WAAW,cAAW,QAAQ,SAAS,OAAO,QAAQ,WAAW,WAAQ,aAAa,WAAW,YAAY,aAAU;AAChI;AACA,IAAIC,aAAY;EACd,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EAC1C,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EAChD,aAAa,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;EACpE,MAAM,CAAC,YAAY,SAAS,SAAS,YAAY,SAAS,YAAY,QAAQ;AAChF;AACA,IAAIC,mBAAkB;EACpB,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AAEA,IAAIE,iBAAgB,SAASA,eAAc,aAAa,SAAS;AAC/D,MAAIC,UAAS,OAAO,WAAW;AAC/B,MAAI,OAAO,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ;AACrE,MAAIA,YAAW;AAAG,WAAO;AACzB,MAAI,gBAAgB,CAAC,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAC/D,MAAI;AAEJ,MAAIA,YAAW,GAAG;AAChB,aAAS,QAAQ,cAAc,SAAS,IAAI,IAAI,WAAQ;EAC1D,OAAO;AACL,aAAS;EACX;AAEA,SAAOA,UAAS;AAClB;AAEA,IAAIC,YAAW;EACb,eAAeF;EACf,KAAK,gBAAgB;IACnB,QAAQN;IACR,cAAc;EAChB,CAAC;EACD,SAAS,gBAAgB;IACvB,QAAQC;IACR,cAAc;IACd,kBAAkB,SAASQ,kBAAiB,SAAS;AACnD,aAAO,UAAU;IACnB;EACF,CAAC;EACD,OAAO,gBAAgB;IACrB,QAAQP;IACR,cAAc;EAChB,CAAC;EACD,KAAK,gBAAgB;IACnB,QAAQC;IACR,cAAc;EAChB,CAAC;EACD,WAAW,gBAAgB;IACzB,QAAQC;IACR,cAAc;EAChB,CAAC;AACH;AACA,IAAOM,oBAAQF;AC/Ff,IAAIG,6BAA4B;AAChC,IAAIC,6BAA4B;AAChC,IAAIC,oBAAmB;EACrB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,KAAK,CAAC,QAAQ,MAAM;AACtB;AACA,IAAIC,wBAAuB;EACzB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,wBAAuB;EACzB,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI;AAC9B;AACA,IAAIC,sBAAqB;EACvB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,sBAAqB;EACvB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC3F,KAAK,CAAC,QAAQ,OAAO,SAAS,QAAQ,QAAQ,UAAU,UAAU,QAAQ,OAAO,OAAO,OAAO,KAAK;AACtG;AACA,IAAIC,oBAAmB;EACrB,QAAQ;EACR,OAAO;EACP,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EACxD,KAAK,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAC9D;AACA,IAAIC,0BAAyB;EAC3B,QAAQ;EACR,KAAK;AACP;AACA,IAAIC,0BAAyB;EAC3B,KAAK;IACH,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAIC,SAAQ;EACV,eAAe,oBAAoB;IACjC,cAAcZ;IACd,cAAcC;IACd,eAAe,SAASY,eAAc,OAAO;AAC3C,aAAO,SAAS,KAAK;IACvB;EACF,CAAC;EACD,KAAK,aAAa;IAChB,eAAeX;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,SAAS,aAAa;IACpB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;IACnB,eAAe,SAASQ,eAAc,OAAO;AAC3C,aAAO,QAAQ;IACjB;EACF,CAAC;EACD,OAAO,aAAa;IAClB,eAAeP;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,KAAK,aAAa;IAChB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,WAAW,aAAa;IACtB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;AACH;AACA,IAAOG,iBAAQF;AClFf,IAAIG,UAAS;EACX,MAAM;EACN,gBAAgBnC;EAChB,YAAYK;EACZ,gBAAgBG;EAChB,UAAUW;EACV,OAAOe;EACP,SAAS;IACP,cAAc;IAGd,uBAAuB;EACzB;AACF;AACA,IAAO,aAAQC;AtHUf,IAAM,gBAAgB;EACpB,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;AACN;AAEA,IAAM,UAAgB;EACpB,MAAM;EACN;EACA,gBAAgB,MAAM;EAEtB;EACA;EACA,YAAY;EACZ,cAAc;IACZ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;EACN;AACF;AACA,IAAME,WAAUC,EAAoB,OAAO;AAWpC,IAAM,sBAAsB,CAAC;EAClC,SAAAC;EACA;EACA;EACA;EACA,cAAc;AAChB,MAAoB;AAClB,QAAM,eAAe;IACnB,IAAI;IACJ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;IAC5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;IAC5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;IAC5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;IAC5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;EAC9E;AACA,QAAM,EAAE,OAAO,MAAM,QAAQ,eAAe,IAAI,QAAQA,WAAS,YAAY;AAE7EC,EAAAA,GAAU,MAAM;AACd,QAAI,WAAW;AACb,qBAAe,SAAS;IAC1B;EACF,CAAC;AACDA,EAAAA,GAAU,MAAM;AACd,cAAU,MAAM,MAAM;EACxB,GAAG,CAAC,IAAI,CAAC;AACT,MAAI,WAAW;AACb,cAAU,WAAW,MAAM;EAC7B,OAAO;AACL,cAAU,MAAM,MAAM;EACxB;AAEA,QAAM,aAAa,SAAS,OAAO,aACjC,SAAS,OAAO,aACd,SAAS,OAAO,aACd;AAEN,SAAOC,EAAEJ,SAAQ,UAAU;IACzB,OAAO,EAAE,MAAM,gBAAgB,eAAe,MAAM,YAAY,aAAa;IAC7E;EACF,CAAC;AACH;AAEO,IAAM,wBAAwB,MAAYK,GAAWL,QAAO;AwHhG5D,IAAM,iBAAN,MAA4B;EAEjC,cAAc;AADd,SAAQ,YAAY,IAAI,MAAuB;AAE7C,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;EAC3C;EACA,OAAO,MAAa;AAClB,SAAK,UAAU,QAAQ,CAAC,aAAa,SAAS,IAAI,CAAC;EACrD;EACA,UAAU,MAAoC;AAC5C,SAAK,UAAU,KAAK,IAAI;AACxB,WAAO,MAAM;AACX,WAAK,UAAU,QAAQ,CAAC,UAAU,UAAU;AAC1C,YAAI,aAAa,MAAM;AACrB,eAAK,UAAU,OAAO,OAAO,CAAC;QAChC;MACF,CAAC;IACH;EACF;AACF;ADeA,IAAM,cAAcC,EAA+B,MAAS;AEK5D,IAAM,kBAAkBK,EAAmC,MAAS;AAE7D,IAAM,wBAAwB,MACnCC,GAAW,eAAe;AAmB5B,IAAMC,4BAA2B;AAE1B,IAAM,sBAAsB,CAAC;EAClC;EACA;EACA,WAAW,CAAC;EACZ;AACF,MAOa;AACX,QAAM,CAAC,SAAS,UAAU,IACxBC,GAAyD;AAE3D,QAAM,CAAC,kBAAkB,sBAAsB,IAAIA,GAAS,OAAO;AAEnE,QAAM,EAAE,iBAAiB,SAAAC,UAAS,KAAK,eAAe,WAAW,IAC/D,uBAAuB,kBAAkB,QAAQ;AAEnDC,EAAAA,GAAU,MAAM;AACd,QAAI,eAAe;AACnB,mBAAe,aAA4B;AACzC,UAAI;AACF,cAAM,SAAS,MAAM,gBAAgB;AACrC,YAAIC,eAAe,QAAQF,UAAS,OAAO,OAAO,GAAG;AACnD,qBAAW,EAAE,MAAM,MAAM,QAAQ,OAAO,CAAC,EAAE,CAAC;QAC9C,OAAO;AACL,qBAAW;YACT,MAAM;YACN,QAAQ;YACR,WAAWA;UACb,CAAC;QACH;MACF,SAASG,QAAO;AACd,YAAIA,kBAAiBC,YAAY;AAC/B,cAAI,cAAc;AAChB,uBAAW,MAAM;AACf,yBAAW;YACb,GAAGN,yBAAwB;UAC7B;AACA,qBAAW,EAAE,MAAM,SAAS,OAAAK,OAAM,CAAC;QACrC,OAAO;AACL,qBAAW,EAAE,MAAM,SAAS,OAAOC,WAAW,cAAcD,MAAK,EAAE,CAAC;QACtE;MACF;IACF;AACA,eAAW;AACX,WAAO,MAAM;AAEX,qBAAe;IACjB;EACF,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC,WAAW,QAAQ,SAAS,MAAM;AACrC,WAAOE,EAAE,cAAc,EAAE,OAAO,QAAQ,GAAG,CAAC,CAAC;EAC/C;AAEA,QAAM,QAA6B;IACjC,KAAK;IACL,QAAQ,QAAQ;IAChB;IACA;IACA;IACA,eAAe;IACf,OAAO,QAAQ;EACjB;AACA,SAAOA,EAAE,gBAAgB,UAAU;IACjC;IACA;EACF,CAAC;AACH;AAEA,SAAS,uBACP,KACA,UAC0D;AAC1D,QAAM,YAAY,IAAI,oBAAoB;IACxC,kBAAkB;IAClB,YAAY;EACd,CAAC;AACD,QAAM,UAAU,IAAI,eAAmC;AAEvD,QAAM,UAAU,IAAIC,4BAA4B,WAAW;IACzD,QAAQ,IAAI;AACV,cAAQ,OAAO,EAAE;IACnB;EACF,CAAC;AAED,QAAM,WAAW,IAAI;IACnB,IAAI;IACJ;IACA,SAAS;EACX;AACA,QAAM,eAAe,IAAIC;IACvB,SAAS,qBAAqB,EAAE;IAChC;EACF;AAeA,QAAM,UAAU;AAChB,WAAS,kBAAkB,YAAiC;AAC1D,UAAM,SAAS,IAAI,IAAI,YAAY,UAAU,KAAK,OAAO;AACzD,UAAM,MAAM,uBAAuB,QAAQ,QAAQ;AACnD,WAAO,IAAI;EACb;AAEA,iBAAe,kBAA6D;AAC1E,UAAM,OAAO,MAAM,SAAS,UAAU;AACtC,QAAI,KAAK,SAAS,QAAQ;AACxB,YAAMH,WAAW,oBAAoB,KAAK,MAAM;IAClD;AACA,WAAO,KAAK;EACd;AAEA,SAAO;IACL;IACA,SAAS,SAAS;IAClB,KAAK;MACH;MACA;MACA,gBAAgB;IAClB;IACA,YAAY,QAAQ;IACpB,eAAe,QAAQ;EACzB;AACF;ACrLA,IAAMI,WAAUC,EAAoB,MAAS;AAEtC,IAAM,uBAAuB,MAAYC,GAAWF,QAAO;AAElE,SAAS,6BAA6B;AACpC,QAAM,OACJ,OAAO,WAAW,cAAc,OAAO,SAAS,KAAK,UAAU,CAAC,IAAI;AACtE,QAAM,SAAiC,CAAC;AACxC,MAAI,OAAO,WAAW,aAAa;AACjC,eAAW,CAAC,KAAK,KAAK,KAAK,IAAI,gBAAgB,OAAO,SAAS,MAAM,GAAG;AACtE,aAAO,GAAG,IAAI;IAChB;EACF;AACA,SAAO,EAAE,MAAM,OAAO;AACxB;AAEA,IAAM,EAAE,MAAM,aAAa,QAAQ,cAAc,IAC/C,2BAA2B;AAM7B,IAAM,oBAAoB;AAEnB,IAAM,gCAAgC,CAAC;EAC5C;AACF,MAEa;AACX,QAAM,CAAC,EAAE,MAAM,OAAO,GAAG,QAAQ,IAAIG,GAAS;IAC5C,MAAM;IACN,QAAQ;EACV,CAAC;AACD,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM;MACJ;IACF;EACF;AACA,WAAS,WAAWC,OAAc;AAChC,UAAM,EAAE,QAAAC,QAAO,IAAI,2BAA2B;AAC9C,aAAS,EAAE,MAAAD,OAAM,QAAAC,QAAO,CAAC;AACzB,WAAO,SAAS,OAAOD;EACzB;AAEAE,EAAAA,GAAU,MAAM;AACd,aAAS,gBAAgB;AACvB,eAAS,2BAA2B,CAAC;IACvC;AACA,WAAO,iBAAiB,mBAAmB,aAAa;AACxD,WAAO,MAAM;AACX,aAAO,oBAAoB,mBAAmB,aAAa;IAC7D;EACF,GAAG,CAAC,CAAC;AACL,SAAOC,EAAEP,SAAQ,UAAU;IACzB,OAAO,EAAE,MAAM,QAAQ,WAAW;IAClC;EACF,CAAC;AACH;AC5EA,SAAS,kBAAkB,KAAe,YAAyB;AACjE,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,aAAa,QAAQ,WAAW;AACrC,OAAK,aAAa,WAAW,kBAAkB,GAAG,CAAC;AAEnD,WAAS,KAAK,YAAY,IAAI;AAE9B,MAAI,cAAc;AAClB,SAAO,iBAAiB,gBAAgB,MAAM;AAC5C,kBAAc;EAChB,CAAC;AACD,aAAW,MAAM;AACf,QAAI,CAAC,eAAe,YAAY;AAC9B,iBAAW;IACb;EACF,GAAG,EAAE;AACP;AAYA,IAAMA,WAAUC,EAAoB,MAAS;AAItC,IAAM,wCAAwC,CAAC;EACpD;AACF,MAEa;AACX,QAAM,QAAc;IAClB,oBAAoB;EACtB;AACA,SAAOO,EAAEC,SAAQ,UAAU;IACzB;IACA;EACF,CAAC;AACH;ACrEA,IAAA,gBAAA,CAAA;AAAAC,UAAA,eAAA;EAAA,SAAA,MAAA;EAAA,WAAA,MAAA;EAAA,wBAAA,MAAA;AAAA,CAAA;AAUO,SAAS,QACd,MACA,SACqB;AAErB,WAAS,SAAS,WAAqD;AACrE,aAAS,oBAA2B;AAClC,YAAM,QAAQ,UAAU;AAExB,UAAI,OAAO,UAAU,YAAY;AAC/B,cAAM,eAAe,SAAS,KAAK;AACnC,eAAO,EAAc,cAAc,CAAC,CAAC;MACvC;AAEA,YAAM,aAAa,MAAM;AACzB,YAAM,gBAAgB,QAAQ,UAAU;AACxC,aAAO,EAAc,eAAe,KAAK;IAC3C;AAEA,WAAO;EACT;AAEA,SAAO,CAACC,OAAa;AACnB,UAAMC,MAAI,SAAS,MAAM,KAAKD,EAAC,CAAC;AAChC,WAAOC,IAAE;EACX;AACF;AAEO,SAAS,UACd,MACqB;AAErB,WAAS,SAAS,WAAqD;AACrE,aAAS,oBAA2B;AAClC,YAAM,QAAQ,UAAU;AAExB,UAAI,OAAO,UAAU,YAAY;AAC/B,cAAM,eAAe,SAAS,KAAK;AACnC,eAAO,EAAc,cAAc,CAAC,CAAC;MACvC;AAEA,aAAO;IACT;AAEA,WAAO;EACT;AAEA,SAAO,CAACD,OAAa;AACnB,UAAMC,MAAI,SAAS,MAAM,KAAKD,EAAC,CAAC;AAChC,WAAOC,IAAE;EACX;AACF;AASO,SAAS,uBAA0B,KAAW;AAEnD,SAAO,eAAe,IAAI,SAAS,gBAAgB;AACjD,YAAQ,GAAG;EACb;AACA,SAAO;AACT;AACA,SAAS,QAAQ,KAAU;AACzB,MAAI,CAAC;AAAK;AACV,MAAI,IAAI,OAAO,IAAI,IAAI,KAAK;AAC1B,UAAM,gBAAgB,IAAI,IAAI,YAAY;AAC1C,UAAM,YAAY,IAAI,IAAI;AAC1B,UAAM,YAAY,UAAU;AAC5B,YAAQ,IAAI,kBAAkB,aAAa;AAC3C,cAAU,QAAQ,CAAC,SAAS;AAC1B,YAAM,EAAE,IAAI,OAAO,GAAG,SAAS,KAAK,SAAS,KAAK,KAAK,IAAI;AAC3D,UAAI,OAAO,YAAY,aAAa;AAClC,cAAM,EAAE,KAAK,UAAU,IAAI;AAC3B,gBAAQ,IAAI,YAAY,WAAW,IAAI;MACzC,WAAW,OAAO,YAAY,YAAY;AACxC,gBAAQ,IAAI,SAAS,OAAO,SAAS,IAAI;MAC3C,WAAW,OAAO,UAAU,YAAY;AACtC,cAAM,aAAa,MAAM;AACzB,gBAAQ,IAAI,WAAW,YAAY,SAAS,IAAI;MAClD,WAAW,OAAO,MAAM,YAAY,aAAa;AAC/C,cAAM,MAAM,MAAM;AAClB,gBAAQ,IAAI,QAAQ,eAAe,UAAU,IAAI,YAAY,GAAG;MAClE,WAAW,iBAAiB,OAAO;AACjC,gBAAQ,IAAI,UAAU,MAAM,CAAC,CAAC;MAChC,OAAO;AACL,gBAAQ,IAAI,IAAI;MAClB;IACF,CAAC;EACH;AACA,QAAM,WAAW,IAAI;AACrB,MAAI,oBAAoB,OAAO;AAC7B,aAAS,QAAQ,CAACC,QAAM,QAAQA,GAAC,CAAC;EACpC,OAAO;AACL,YAAQ,QAAQ;EAClB;AACF;AgB1FO,IAAM,cAAcC,EAA6B,CAAC,CAAC;;;AmBU1D;AACA;;;AC9BA;AACA,kBAAqC;;;ACFrC;AAGA,IAAM,OAAO,MAAI;AAAC;AAKlB,IAAM;AAAA;AAAA,EAA8B,KAAK;AAAA;AACzC,IAAM,SAAS;AACf,IAAM,cAAc,CAACC,OAAIA,OAAM;AAC/B,IAAM,aAAa,CAACA,OAAI,OAAOA,MAAK;AACpC,IAAM,eAAe,CAACC,IAAGC,QAAK;AAAA,EACtB,GAAGD;AAAA,EACH,GAAGC;AACP;AACJ,IAAM,gBAAgB,CAACC,OAAI,WAAWA,GAAE,IAAI;AAM5C,IAAM,QAAQ,oBAAI,QAAQ;AAE1B,IAAI,UAAU;AASd,IAAM,aAAa,CAAC,QAAM;AACtB,QAAM,OAAO,OAAO;AACpB,QAAM,cAAc,OAAO,IAAI;AAC/B,QAAMC,UAAS,eAAe;AAC9B,MAAI;AACJ,MAAI;AACJ,MAAI,OAAO,GAAG,MAAM,OAAO,CAACA,WAAU,eAAe,QAAQ;AAGzD,aAAS,MAAM,IAAI,GAAG;AACtB,QAAI;AAAQ,aAAO;AAInB,aAAS,EAAE,UAAU;AACrB,UAAM,IAAI,KAAK,MAAM;AACrB,QAAI,eAAe,OAAO;AAEtB,eAAS;AACT,WAAI,QAAQ,GAAG,QAAQ,IAAI,QAAQ,SAAQ;AACvC,kBAAU,WAAW,IAAI,KAAK,CAAC,IAAI;AAAA,MACvC;AACA,YAAM,IAAI,KAAK,MAAM;AAAA,IACzB;AACA,QAAI,eAAe,QAAQ;AAEvB,eAAS;AACT,YAAM,OAAO,OAAO,KAAK,GAAG,EAAE,KAAK;AACnC,aAAM,CAAC,YAAY,QAAQ,KAAK,IAAI,CAAC,GAAE;AACnC,YAAI,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG;AAC1B,oBAAU,QAAQ,MAAM,WAAW,IAAI,KAAK,CAAC,IAAI;AAAA,QACrD;AAAA,MACJ;AACA,YAAM,IAAI,KAAK,MAAM;AAAA,IACzB;AAAA,EACJ,OAAO;AACH,aAASA,UAAS,IAAI,OAAO,IAAI,QAAQ,WAAW,IAAI,SAAS,IAAI,QAAQ,WAAW,KAAK,UAAU,GAAG,IAAI,KAAK;AAAA,EACvH;AACA,SAAO;AACX;AAGA,IAAM,iBAAiB,oBAAI,QAAQ;AAEnC,IAAM,cAAc,CAAC;AACrB,IAAM,gBAAgB,CAAC;AACvB,IAAM,gBAAgB;AAEtB,IAAM,kBAAkB,OAAO,UAAU;AACzC,IAAM,oBAAoB,OAAO,YAAY;AAC7C,IAAM,2BAA2B,MAAI,mBAAmB,OAAO,OAAO,uBAAuB,KAAK;AAClG,IAAM,oBAAoB,CAACC,QAAO,QAAM;AACpC,QAAM,QAAQ,eAAe,IAAIA,MAAK;AACtC,SAAO;AAAA;AAAA,IAEH,MAAI,CAAC,YAAY,GAAG,KAAKA,OAAM,IAAI,GAAG,KAAK;AAAA;AAAA,IAE3C,CAAC,SAAO;AACJ,UAAI,CAAC,YAAY,GAAG,GAAG;AACnB,cAAM,OAAOA,OAAM,IAAI,GAAG;AAG1B,YAAI,EAAE,OAAO,gBAAgB;AACzB,wBAAc,GAAG,IAAI;AAAA,QACzB;AACA,cAAM,CAAC,EAAE,KAAK,aAAa,MAAM,IAAI,GAAG,QAAQ,WAAW;AAAA,MAC/D;AAAA,IACJ;AAAA;AAAA,IAEA,MAAM,CAAC;AAAA;AAAA,IAEP,MAAI;AACA,UAAI,CAAC,YAAY,GAAG,GAAG;AAEnB,YAAI,OAAO;AAAe,iBAAO,cAAc,GAAG;AAAA,MACtD;AAEA,aAAO,CAAC,YAAY,GAAG,KAAKA,OAAM,IAAI,GAAG,KAAK;AAAA,IAClD;AAAA,EACJ;AACJ;AASI,IAAI,SAAS;AACjB,IAAM,WAAW,MAAI;AAErB,IAAM,CAAC,eAAe,cAAc,IAAI,mBAAmB,OAAO,mBAAmB;AAAA,EACjF,OAAO,iBAAiB,KAAK,MAAM;AAAA,EACnC,OAAO,oBAAoB,KAAK,MAAM;AAC1C,IAAI;AAAA,EACA;AAAA,EACA;AACJ;AACA,IAAM,YAAY,MAAI;AAClB,QAAM,kBAAkB,qBAAqB,SAAS;AACtD,SAAO,YAAY,eAAe,KAAK,oBAAoB;AAC/D;AACA,IAAM,YAAY,CAAC,aAAW;AAE1B,MAAI,mBAAmB;AACnB,aAAS,iBAAiB,oBAAoB,QAAQ;AAAA,EAC1D;AACA,gBAAc,SAAS,QAAQ;AAC/B,SAAO,MAAI;AACP,QAAI,mBAAmB;AACnB,eAAS,oBAAoB,oBAAoB,QAAQ;AAAA,IAC7D;AACA,mBAAe,SAAS,QAAQ;AAAA,EACpC;AACJ;AACA,IAAM,gBAAgB,CAAC,aAAW;AAE9B,QAAM,WAAW,MAAI;AACjB,aAAS;AACT,aAAS;AAAA,EACb;AAEA,QAAM,YAAY,MAAI;AAClB,aAAS;AAAA,EACb;AACA,gBAAc,UAAU,QAAQ;AAChC,gBAAc,WAAW,SAAS;AAClC,SAAO,MAAI;AACP,mBAAe,UAAU,QAAQ;AACjC,mBAAe,WAAW,SAAS;AAAA,EACvC;AACJ;AACA,IAAM,SAAS;AAAA,EACX;AAAA,EACA;AACJ;AACA,IAAM,uBAAuB;AAAA,EACzB;AAAA,EACA;AACJ;AAEA,IAAM,kBAAkB,CAAC,GAAM;AAC/B,IAAM,YAAY,CAAC,mBAAmB,UAAU;AAEhD,IAAM,MAAM,CAACC,OAAI,yBAAyB,IAAI,OAAO,uBAAuB,EAAEA,EAAC,IAAI,WAAWA,IAAG,CAAC;AAIlG,IAAM,4BAA4B,YAAYC,KAAYC;AAE1D,IAAM,sBAAsB,OAAO,cAAc,eAAe,UAAU;AAE1E,IAAM,iBAAiB,CAAC,aAAa,wBAAwB;AAAA,EACzD;AAAA,EACA;AACJ,EAAE,SAAS,oBAAoB,aAAa,KAAK,oBAAoB;AAErE,IAAM,YAAY,CAAC,QAAM;AACrB,MAAI,WAAW,GAAG,GAAG;AACjB,QAAI;AACA,YAAM,IAAI;AAAA,IACd,SAAS,KAAK;AAEV,YAAM;AAAA,IACV;AAAA,EACJ;AAGA,QAAM,OAAO;AAEb,QAAM,OAAO,OAAO,WAAW,OAAO,MAAM,QAAQ,GAAG,IAAI,IAAI,SAAS,OAAO,WAAW,GAAG,IAAI;AACjG,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;AAGA,IAAI,cAAc;AAClB,IAAM,eAAe,MAAI,EAAE;AAE3B,IAAM,cAAc;AACpB,IAAM,kBAAkB;AACxB,IAAM,eAAe;AACrB,IAAM,yBAAyB;AAE/B,IAAI,SAAS;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,eAAe,kBAAkB,MAAM;AACnC,QAAM,CAACH,QAAO,MAAM,OAAO,KAAK,IAAI;AAGpC,QAAM,UAAU,aAAa;AAAA,IACzB,eAAe;AAAA,IACf,cAAc;AAAA,EAClB,GAAG,OAAO,UAAU,YAAY;AAAA,IAC5B,YAAY;AAAA,EAChB,IAAI,SAAS,CAAC,CAAC;AACf,MAAI,gBAAgB,QAAQ;AAC5B,QAAM,wBAAwB,QAAQ;AACtC,MAAI,iBAAiB,QAAQ;AAC7B,QAAM,aAAa,QAAQ,eAAe;AAC1C,QAAM,kBAAkB,CAACI,WAAQ;AAC7B,WAAO,OAAO,0BAA0B,aAAa,sBAAsBA,MAAK,IAAI,0BAA0B;AAAA,EAClH;AACA,QAAM,eAAe,QAAQ;AAG7B,MAAI,WAAW,IAAI,GAAG;AAClB,UAAM,YAAY;AAClB,UAAM,cAAc,CAAC;AACrB,UAAM,KAAKJ,OAAM,KAAK;AACtB,eAAW,OAAO,IAAG;AACjB;AAAA;AAAA,QACA,CAAC,iBAAiB,KAAK,GAAG,KAAK,UAAUA,OAAM,IAAI,GAAG,EAAE,EAAE;AAAA,QAAG;AACzD,oBAAY,KAAK,GAAG;AAAA,MACxB;AAAA,IACJ;AACA,WAAO,QAAQ,IAAI,YAAY,IAAI,WAAW,CAAC;AAAA,EACnD;AACA,SAAO,YAAY,IAAI;AACvB,iBAAe,YAAY,IAAI;AAE3B,UAAM,CAAC,GAAG,IAAI,UAAU,EAAE;AAC1B,QAAI,CAAC;AAAK;AACV,UAAM,CAAC,KAAKK,IAAG,IAAI,kBAAkBL,QAAO,GAAG;AAC/C,UAAM,CAAC,oBAAoB,UAAU,OAAO,OAAO,IAAI,eAAe,IAAIA,MAAK;AAC/E,UAAM,kBAAkB,MAAI;AACxB,YAAM,eAAe,mBAAmB,GAAG;AAC3C,UAAI,YAAY;AAGZ,eAAO,MAAM,GAAG;AAChB,eAAO,QAAQ,GAAG;AAClB,YAAI,gBAAgB,aAAa,CAAC,GAAG;AACjC,iBAAO,aAAa,CAAC,EAAE,YAAY,EAAE,KAAK,MAAI,IAAI,EAAE,IAAI;AAAA,QAC5D;AAAA,MACJ;AACA,aAAO,IAAI,EAAE;AAAA,IACjB;AAEA,QAAI,KAAK,SAAS,GAAG;AAEjB,aAAO,gBAAgB;AAAA,IAC3B;AACA,QAAI,OAAO;AACX,QAAII;AAEJ,UAAM,mBAAmB,aAAa;AACtC,aAAS,GAAG,IAAI;AAAA,MACZ;AAAA,MACA;AAAA,IACJ;AACA,UAAM,oBAAoB,CAAC,YAAY,cAAc;AACrD,UAAM,QAAQ,IAAI;AAIlB,UAAM,gBAAgB,MAAM;AAC5B,UAAM,cAAc,MAAM;AAC1B,UAAM,gBAAgB,YAAY,WAAW,IAAI,gBAAgB;AAEjE,QAAI,mBAAmB;AACnB,uBAAiB,WAAW,cAAc,IAAI,eAAe,eAAe,aAAa,IAAI;AAE7F,MAAAC,KAAI;AAAA,QACA,MAAM;AAAA,QACN,IAAI;AAAA,MACR,CAAC;AAAA,IACL;AACA,QAAI,WAAW,IAAI,GAAG;AAElB,UAAI;AACA,eAAO,KAAK,aAAa;AAAA,MAC7B,SAAS,KAAK;AAEV,QAAAD,SAAQ;AAAA,MACZ;AAAA,IACJ;AAEA,QAAI,QAAQ,cAAc,IAAI,GAAG;AAG7B,aAAO,MAAM,KAAK,MAAM,CAAC,QAAM;AAC3B,QAAAA,SAAQ;AAAA,MACZ,CAAC;AAID,UAAI,qBAAqB,SAAS,GAAG,EAAE,CAAC,GAAG;AACvC,YAAIA;AAAO,gBAAMA;AACjB,eAAO;AAAA,MACX,WAAWA,UAAS,qBAAqB,gBAAgBA,MAAK,GAAG;AAG7D,wBAAgB;AAEhB,QAAAC,KAAI;AAAA,UACA,MAAM;AAAA,UACN,IAAI;AAAA,QACR,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,QAAI,eAAe;AACf,UAAI,CAACD,QAAO;AAER,YAAI,WAAW,aAAa,GAAG;AAC3B,gBAAM,qBAAqB,cAAc,MAAM,aAAa;AAC5D,UAAAC,KAAI;AAAA,YACA,MAAM;AAAA,YACN,OAAO;AAAA,YACP,IAAI;AAAA,UACR,CAAC;AAAA,QACL,OAAO;AAEH,UAAAA,KAAI;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP,IAAI;AAAA,UACR,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAEA,aAAS,GAAG,EAAE,CAAC,IAAI,aAAa;AAEhC,YAAQ,QAAQ,gBAAgB,CAAC,EAAE,KAAK,MAAI;AAGxC,MAAAA,KAAI;AAAA,QACA,IAAI;AAAA,MACR,CAAC;AAAA,IACL,CAAC;AAED,QAAID,QAAO;AACP,UAAI;AAAc,cAAMA;AACxB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AAEA,IAAM,oBAAoB,CAAC,cAAc,SAAO;AAC5C,aAAU,OAAO,cAAa;AAC1B,QAAI,aAAa,GAAG,EAAE,CAAC;AAAG,mBAAa,GAAG,EAAE,CAAC,EAAE,IAAI;AAAA,EACvD;AACJ;AACA,IAAM,YAAY,CAAC,UAAU,YAAU;AAMnC,MAAI,CAAC,eAAe,IAAI,QAAQ,GAAG;AAC/B,UAAM,OAAO,aAAa,sBAAsB,OAAO;AAGvD,UAAM,qBAAqB,CAAC;AAC5B,UAAME,UAAS,eAAe,KAAK,WAAW,QAAQ;AACtD,QAAI,UAAU;AACd,UAAM,gBAAgB,CAAC;AACvB,UAAM,YAAY,CAAC,KAAK,aAAW;AAC/B,YAAM,OAAO,cAAc,GAAG,KAAK,CAAC;AACpC,oBAAc,GAAG,IAAI;AACrB,WAAK,KAAK,QAAQ;AAClB,aAAO,MAAI,KAAK,OAAO,KAAK,QAAQ,QAAQ,GAAG,CAAC;AAAA,IACpD;AACA,UAAM,SAAS,CAAC,KAAK,OAAO,SAAO;AAC/B,eAAS,IAAI,KAAK,KAAK;AACvB,YAAM,OAAO,cAAc,GAAG;AAC9B,UAAI,MAAM;AACN,mBAAWC,OAAM,MAAK;AAClB,UAAAA,IAAG,OAAO,IAAI;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,eAAe,MAAI;AACrB,UAAI,CAAC,eAAe,IAAI,QAAQ,GAAG;AAE/B,uBAAe,IAAI,UAAU;AAAA,UACzB;AAAA,UACA,CAAC;AAAA,UACD,CAAC;AAAA,UACD,CAAC;AAAA,UACDD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,YAAI,CAAC,WAAW;AAOZ,gBAAM,eAAe,KAAK,UAAU,WAAW,KAAK,WAAW,kBAAkB,KAAK,WAAW,oBAAoB,WAAW,CAAC,CAAC;AAClI,gBAAM,mBAAmB,KAAK,cAAc,WAAW,KAAK,WAAW,kBAAkB,KAAK,WAAW,oBAAoB,eAAe,CAAC,CAAC;AAC9I,oBAAU,MAAI;AACV,4BAAgB,aAAa;AAC7B,gCAAoB,iBAAiB;AAIrC,2BAAe,OAAO,QAAQ;AAAA,UAClC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,iBAAa;AAMb,WAAO;AAAA,MACH;AAAA,MACAA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AAAA,IACH;AAAA,IACA,eAAe,IAAI,QAAQ,EAAE,CAAC;AAAA,EAClC;AACJ;AAGA,IAAM,eAAe,CAACE,IAAG,IAAI,QAAQ,YAAY,SAAO;AACpD,QAAM,gBAAgB,OAAO;AAC7B,QAAM,oBAAoB,KAAK;AAE/B,QAAM,UAAU,CAAC,GAAG,KAAK,OAAO,IAAI,QAAQ,MAAM,oBAAoB,IAAI,oBAAoB,OAAO,OAAO;AAC5G,MAAI,CAAC,YAAY,aAAa,KAAK,oBAAoB,eAAe;AAClE;AAAA,EACJ;AACA,aAAW,YAAY,SAAS,IAAI;AACxC;AACA,IAAM,UAAU,CAAC,aAAa,YAAU,WAAW,WAAW,KAAK,WAAW,OAAO;AAErF,IAAM,CAAC,OAAO,MAAM,IAAI,UAAU,oBAAI,IAAI,CAAC;AAE3C,IAAM,gBAAgB;AAAA,EAAa;AAAA;AAAA,IAE/B,eAAe;AAAA,IACf,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA,aAAa;AAAA;AAAA,IAEb,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA;AAAA,IAEpB,oBAAoB,iBAAiB,MAAQ;AAAA,IAC7C,uBAAuB,IAAI;AAAA,IAC3B,kBAAkB,IAAI;AAAA,IACtB,gBAAgB,iBAAiB,MAAO;AAAA;AAAA,IAExC;AAAA,IACA,UAAU,MAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,EACf;AAAA;AAAA,EACA;AAAM;AAEN,IAAM,eAAe,CAACZ,IAAGC,OAAI;AAEzB,QAAMF,KAAI,aAAaC,IAAGC,EAAC;AAE3B,MAAIA,IAAG;AACH,UAAM,EAAE,KAAK,IAAI,UAAU,GAAG,IAAID;AAClC,UAAM,EAAE,KAAKa,KAAI,UAAUC,IAAG,IAAIb;AAClC,QAAI,MAAMY,KAAI;AACV,MAAAd,GAAE,MAAM,GAAG,OAAOc,GAAE;AAAA,IACxB;AACA,QAAI,MAAMC,KAAI;AACV,MAAAf,GAAE,WAAW,aAAa,IAAIe,GAAE;AAAA,IACpC;AAAA,EACJ;AACA,SAAOf;AACX;AAEA,IAAM,mBAAmB,EAAc,CAAC,CAAC;AACzC,IAAM,YAAY,CAAC,UAAQ;AACvB,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,eAAegB,GAAW,gBAAgB;AAChD,QAAM,qBAAqB,WAAW,KAAK;AAC3C,QAAM,SAAS,EAAQ,MAAI,qBAAqB,MAAM,YAAY,IAAI,OAAO;AAAA,IACzE;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,iBAAiB,EAAQ,MAAI,qBAAqB,SAAS,aAAa,cAAc,MAAM,GAAG;AAAA,IACjG;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,WAAW,UAAU,OAAO;AAElC,QAAM,kBAAkBH,GAAO,SAAS;AACxC,MAAI,YAAY,CAAC,gBAAgB,SAAS;AACtC,oBAAgB,UAAU,UAAU,SAAS,eAAe,SAAS,KAAK,GAAG,MAAM;AAAA,EACvF;AACA,QAAM,eAAe,gBAAgB;AAErC,MAAI,cAAc;AACd,mBAAe,QAAQ,aAAa,CAAC;AACrC,mBAAe,SAAS,aAAa,CAAC;AAAA,EAC1C;AAEA,4BAA0B,MAAI;AAC1B,QAAI,cAAc;AACd,mBAAa,CAAC,KAAK,aAAa,CAAC,EAAE;AACnC,aAAO,aAAa,CAAC;AAAA,IACzB;AAAA,EACJ,GAAG,CAAC,CAAC;AACL,SAAO,EAAc,iBAAiB,UAAU,aAAa,OAAO;AAAA,IAChE,OAAO;AAAA,EACX,CAAC,CAAC;AACN;AAEA,IAAM,kBAAkB;AAGxB,IAAM,iBAAiB,mBAAmB,OAAO;AACjD,IAAM,MAAM,iBAAiB,OAAO,uBAAuB,CAAC;AAC5D,IAAM,gBAAgB,MAAI;AACtB,MAAI,gBAAgB;AAEhB,WAAO,yBAAyB;AAAA,EACpC;AACJ;AAEA,IAAM,YAAY,CAAC,SAAO;AACtB,SAAO,WAAW,KAAK,CAAC,CAAC,IAAI;AAAA,IACzB,KAAK,CAAC;AAAA,IACN,KAAK,CAAC;AAAA,IACN,KAAK,CAAC,KAAK,CAAC;AAAA,EAChB,IAAI;AAAA,IACA,KAAK,CAAC;AAAA,IACN;AAAA,KACC,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAA,EAC/C;AACJ;AAEA,IAAM,eAAe,MAAI;AACrB,SAAO,aAAa,eAAeG,GAAW,gBAAgB,CAAC;AACnE;AAWA,IAAM,aAAa,CAAC,eAAa,CAAC,MAAM,UAAU,WAAS;AAEnD,QAAM,UAAU,aAAa,IAAI,SAAO;AACpC,UAAM,CAAC,GAAG,IAAI,UAAU,IAAI;AAC5B,UAAM,CAAC,EAAE,EAAE,EAAE,OAAO,IAAI,eAAe,IAAI,KAAK;AAChD,QAAI,IAAI,WAAW,eAAe,GAAG;AAGjC,aAAO,SAAS,GAAG,IAAI;AAAA,IAC3B;AACA,UAAM,MAAM,QAAQ,GAAG;AACvB,QAAI,YAAY,GAAG;AAAG,aAAO,SAAS,GAAG,IAAI;AAC7C,WAAO,QAAQ,GAAG;AAClB,WAAO;AAAA,EACX;AACA,SAAO,WAAW,MAAM,SAAS,MAAM;AAC3C;AAEJ,IAAM,sBAAsB,IAAI,OAAO,UAAU;AAIjD,IAAM,WAAW,CAAC,SAAO;AACrB,SAAO,SAAS,cAAc,MAAM;AAEhC,UAAM,iBAAiB,aAAa;AAEpC,UAAM,CAAC,KAAKC,KAAI,OAAO,IAAI,UAAU,IAAI;AAEzC,UAAM,SAAS,aAAa,gBAAgB,OAAO;AAEnD,QAAI,OAAO;AACX,UAAM,EAAE,KAAAC,KAAI,IAAI;AAChB,UAAMC,eAAcD,QAAO,CAAC,GAAG,OAAO,mBAAmB;AACzD,aAAQE,KAAID,YAAW,QAAQC,QAAK;AAChC,aAAOD,YAAWC,EAAC,EAAE,IAAI;AAAA,IAC7B;AACA,WAAO,KAAK,KAAKH,OAAM,OAAO,WAAW,MAAM,MAAM;AAAA,EACzD;AACJ;AAIA,IAAM,oBAAoB,CAAC,KAAK,WAAW,aAAW;AAClD,QAAM,oBAAoB,UAAU,GAAG,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/D,oBAAkB,KAAK,QAAQ;AAC/B,SAAO,MAAI;AACP,UAAM,QAAQ,kBAAkB,QAAQ,QAAQ;AAChD,QAAI,SAAS,GAAG;AAEZ,wBAAkB,KAAK,IAAI,kBAAkB,kBAAkB,SAAS,CAAC;AACzE,wBAAkB,IAAI;AAAA,IAC1B;AAAA,EACJ;AACJ;AAcA,cAAc;;;ADvpBd,IAAMI,OAAM,GAAa,QAAQ,CAAC,YAAU;AACxC,MAAI,QAAQ,WAAW,WAAW;AAC9B,UAAM;AAAA,EACV,WAAW,QAAQ,WAAW,aAAa;AACvC,WAAO,QAAQ;AAAA,EACnB,WAAW,QAAQ,WAAW,YAAY;AACtC,UAAM,QAAQ;AAAA,EAClB,OAAO;AACH,YAAQ,SAAS;AACjB,YAAQ,KAAK,CAACC,OAAI;AACd,cAAQ,SAAS;AACjB,cAAQ,QAAQA;AAAA,IACpB,GAAG,CAACC,OAAI;AACJ,cAAQ,SAAS;AACjB,cAAQ,SAASA;AAAA,IACrB,CAAC;AACD,UAAM;AAAA,EACV;AACJ;AACA,IAAM,cAAc;AAAA,EAChB,QAAQ;AACZ;AACA,IAAM,gBAAgB,CAAC,MAAM,SAAS,WAAS;AAC3C,QAAM,EAAE,OAAAC,QAAO,SAAAC,UAAS,UAAU,cAAc,mBAAmB,mBAAmB,iBAAiB,mBAAmB,oBAAoB,iBAAiB,IAAI;AACnK,QAAM,CAAC,oBAAoB,UAAU,OAAO,OAAO,IAAI,eAAe,IAAID,MAAK;AAK/E,QAAM,CAAC,KAAK,KAAK,IAAI,UAAU,IAAI;AAEnC,QAAM,oBAAoBE,GAAO,KAAK;AAGtC,QAAM,eAAeA,GAAO,KAAK;AAEjC,QAAM,SAASA,GAAO,GAAG;AACzB,QAAM,aAAaA,GAAO,OAAO;AACjC,QAAM,YAAYA,GAAO,MAAM;AAC/B,QAAM,YAAY,MAAI,UAAU;AAChC,QAAM,WAAW,MAAI,UAAU,EAAE,UAAU,KAAK,UAAU,EAAE,SAAS;AACrE,QAAM,CAAC,UAAU,UAAU,gBAAgB,eAAe,IAAI,kBAAkBF,QAAO,GAAG;AAC1F,QAAM,oBAAoBE,GAAO,CAAC,CAAC,EAAE;AACrC,QAAM,WAAW,YAAY,YAAY,IAAI,OAAO,SAAS,GAAG,IAAI;AACpE,QAAM,UAAU,CAAC,MAAM,YAAU;AAC7B,eAAUA,MAAK,mBAAkB;AAC7B,YAAMC,KAAID;AACV,UAAIC,OAAM,QAAQ;AACd,YAAI,CAACF,SAAQ,KAAKE,EAAC,GAAG,QAAQA,EAAC,CAAC,GAAG;AAC/B,cAAI,CAAC,YAAY,KAAKA,EAAC,CAAC,GAAG;AACvB,mBAAO;AAAA,UACX;AACA,cAAI,CAACF,SAAQ,cAAc,QAAQE,EAAC,CAAC,GAAG;AACpC,mBAAO;AAAA,UACX;AAAA,QACJ;AAAA,MACJ,OAAO;AACH,YAAI,QAAQA,EAAC,MAAM,KAAKA,EAAC,GAAG;AACxB,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACA,QAAM,cAAc,EAAQ,MAAI;AAC5B,UAAM,sBAAsB,MAAI;AAC5B,UAAI,CAAC;AAAK,eAAO;AACjB,UAAI,CAAC;AAAS,eAAO;AAErB,UAAI,CAAC,YAAY,iBAAiB;AAAG,eAAO;AAE5C,UAAI,UAAU,EAAE,SAAS;AAAG,eAAO;AACnC,UAAI;AAAU,eAAO;AACrB,UAAI,CAAC,YAAY,iBAAiB;AAAG,eAAO;AAC5C,aAAO;AAAA,IACX,GAAG;AAEH,UAAM,mBAAmB,CAAC,UAAQ;AAE9B,YAAM,WAAW,aAAa,KAAK;AACnC,aAAO,SAAS;AAChB,UAAI,CAAC,oBAAoB;AACrB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,QACH,cAAc;AAAA,QACd,WAAW;AAAA,QACX,GAAG;AAAA,MACP;AAAA,IACJ;AACA,UAAMC,cAAa,SAAS;AAC5B,UAAM,cAAc,gBAAgB;AACpC,UAAM,iBAAiB,iBAAiBA,WAAU;AAClD,UAAM,iBAAiBA,gBAAe,cAAc,iBAAiB,iBAAiB,WAAW;AAIjG,QAAI,oBAAoB;AACxB,WAAO;AAAA,MACH,MAAI;AACA,cAAM,cAAc,iBAAiB,SAAS,CAAC;AAC/C,cAAM,gBAAgB,QAAQ,aAAa,iBAAiB;AAC5D,YAAI,eAAe;AAWf,4BAAkB,OAAO,YAAY;AACrC,4BAAkB,YAAY,YAAY;AAC1C,4BAAkB,eAAe,YAAY;AAC7C,4BAAkB,QAAQ,YAAY;AACtC,iBAAO;AAAA,QACX,OAAO;AACH,8BAAoB;AACpB,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,MACA,MAAI;AAAA,IACR;AAAA,EAEJ,GAAG;AAAA,IACCJ;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,aAAS,kCAAqBK;AAAA,IAAY,CAAC,aAAW,eAAe,KAAK,CAAC,SAAS,SAAO;AACzF,UAAI,CAAC,QAAQ,MAAM,OAAO;AAAG,iBAAS;AAAA,IAC1C,CAAC;AAAA;AAAA,IACL;AAAA,MACIL;AAAA,MACA;AAAA,IACJ;AAAA,EAAC,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AAClC,QAAM,iBAAiB,CAAC,kBAAkB;AAC1C,QAAM,iBAAiB,mBAAmB,GAAG,KAAK,mBAAmB,GAAG,EAAE,SAAS;AACnF,QAAM,aAAa,OAAO;AAC1B,QAAM,OAAO,YAAY,UAAU,IAAI,WAAW;AAClD,QAAMM,SAAQ,OAAO;AAErB,QAAM,eAAeJ,GAAO,IAAI;AAChC,QAAM,eAAe,mBAAmB,YAAY,UAAU,IAAI,aAAa,UAAU,aAAa;AAItG,QAAM,+BAA+B,MAAI;AAErC,QAAI,kBAAkB,CAAC,YAAYI,MAAK;AAAG,aAAO;AAElD,QAAI,kBAAkB,CAAC,YAAY,iBAAiB;AAAG,aAAO;AAE9D,QAAI,UAAU,EAAE,SAAS;AAAG,aAAO;AAInC,QAAI;AAAU,aAAO,YAAY,IAAI,IAAI,QAAQ;AAGjD,WAAO,YAAY,IAAI,KAAK;AAAA,EAChC,GAAG;AAGH,QAAM,yBAAyB,CAAC,EAAE,OAAO,WAAW,kBAAkB;AACtE,QAAM,eAAe,YAAY,OAAO,YAAY,IAAI,yBAAyB,OAAO;AACxF,QAAM,YAAY,YAAY,OAAO,SAAS,IAAI,yBAAyB,OAAO;AAGlF,QAAM,aAAaD;AAAA,IAAY,OAAO,mBAAiB;AACnD,YAAM,iBAAiB,WAAW;AAClC,UAAI,CAAC,OAAO,CAAC,kBAAkB,aAAa,WAAW,UAAU,EAAE,SAAS,GAAG;AAC3E,eAAO;AAAA,MACX;AACA,UAAI;AACJ,UAAI;AACJ,UAAI,UAAU;AACd,YAAM,OAAO,kBAAkB,CAAC;AAGhC,YAAM,wBAAwB,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK;AAWlD,YAAM,oBAAoB,MAAI;AAC3B,YAAI,iBAAiB;AACjB,iBAAO,CAAC,aAAa,WAAW,QAAQ,OAAO,WAAW,kBAAkB;AAAA,QAChF;AACA,eAAO,QAAQ,OAAO;AAAA,MAC1B;AAEA,YAAM,aAAa;AAAA,QACf,cAAc;AAAA,QACd,WAAW;AAAA,MACf;AACA,YAAM,8BAA8B,MAAI;AACpC,iBAAS,UAAU;AAAA,MACvB;AACA,YAAM,eAAe,MAAI;AAErB,cAAM,cAAc,MAAM,GAAG;AAC7B,YAAI,eAAe,YAAY,CAAC,MAAM,SAAS;AAC3C,iBAAO,MAAM,GAAG;AAAA,QACpB;AAAA,MACJ;AAEA,YAAM,eAAe;AAAA,QACjB,cAAc;AAAA,MAClB;AAGA,UAAI,YAAY,SAAS,EAAE,IAAI,GAAG;AAC9B,qBAAa,YAAY;AAAA,MAC7B;AACA,UAAI;AACA,YAAI,uBAAuB;AACvB,mBAAS,YAAY;AAGrB,cAAI,OAAO,kBAAkB,YAAY,SAAS,EAAE,IAAI,GAAG;AACvD,uBAAW,MAAI;AACX,kBAAI,WAAW,kBAAkB,GAAG;AAChC,0BAAU,EAAE,cAAc,KAAK,MAAM;AAAA,cACzC;AAAA,YACJ,GAAG,OAAO,cAAc;AAAA,UAC5B;AAGA,gBAAM,GAAG,IAAI;AAAA,YACT,eAAe,KAAK;AAAA,YACpB,aAAa;AAAA,UACjB;AAAA,QACJ;AACA,SAAC,SAAS,OAAO,IAAI,MAAM,GAAG;AAC9B,kBAAU,MAAM;AAChB,YAAI,uBAAuB;AAGvB,qBAAW,cAAc,OAAO,gBAAgB;AAAA,QACpD;AAOA,YAAI,CAAC,MAAM,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,MAAM,SAAS;AAC1C,cAAI,uBAAuB;AACvB,gBAAI,kBAAkB,GAAG;AACrB,wBAAU,EAAE,YAAY,GAAG;AAAA,YAC/B;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAEA,mBAAW,QAAQ;AAanB,cAAM,eAAe,SAAS,GAAG;AACjC,YAAI,CAAC,YAAY,YAAY;AAAA,SAC5B,WAAW,aAAa,CAAC;AAAA,QAC1B,WAAW,aAAa,CAAC;AAAA,QACzB,aAAa,CAAC,MAAM,IAAI;AACpB,sCAA4B;AAC5B,cAAI,uBAAuB;AACvB,gBAAI,kBAAkB,GAAG;AACrB,wBAAU,EAAE,YAAY,GAAG;AAAA,YAC/B;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAGA,cAAM,YAAY,SAAS,EAAE;AAG7B,mBAAW,OAAOJ,SAAQ,WAAW,OAAO,IAAI,YAAY;AAE5D,YAAI,uBAAuB;AACvB,cAAI,kBAAkB,GAAG;AACrB,sBAAU,EAAE,UAAU,SAAS,KAAK,MAAM;AAAA,UAC9C;AAAA,QACJ;AAAA,MACJ,SAAS,KAAK;AACV,qBAAa;AACb,cAAM,gBAAgB,UAAU;AAChC,cAAM,EAAE,mBAAmB,IAAI;AAE/B,YAAI,CAAC,cAAc,SAAS,GAAG;AAE3B,qBAAW,QAAQ;AAGnB,cAAI,yBAAyB,kBAAkB,GAAG;AAC9C,0BAAc,QAAQ,KAAK,KAAK,aAAa;AAC7C,gBAAI,uBAAuB,QAAQ,WAAW,kBAAkB,KAAK,mBAAmB,GAAG,GAAG;AAC1F,kBAAI,SAAS,GAAG;AAIZ,8BAAc,aAAa,KAAK,KAAK,eAAe,CAAC,UAAQ;AACzD,wBAAM,eAAe,mBAAmB,GAAG;AAC3C,sBAAI,gBAAgB,aAAa,CAAC,GAAG;AACjC,iCAAa,CAAC,EAAE,OAAiB,wBAAwB,KAAK;AAAA,kBAClE;AAAA,gBACJ,GAAG;AAAA,kBACC,aAAa,KAAK,cAAc,KAAK;AAAA,kBACrC,QAAQ;AAAA,gBACZ,CAAC;AAAA,cACL;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,gBAAU;AAEV,kCAA4B;AAC5B,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA;AAAA,MACI;AAAA,MACAD;AAAA,IACJ;AAAA,EAAC;AAID,QAAM,cAAcK;AAAA;AAAA,IACpB,IAAI,SAAO;AACP,aAAO,eAAeL,QAAO,OAAO,SAAS,GAAG,IAAI;AAAA,IACxD;AAAA;AAAA,IACA,CAAC;AAAA,EAAC;AAEF,4BAA0B,MAAI;AAC1B,eAAW,UAAU;AACrB,cAAU,UAAU;AAGpB,QAAI,CAAC,YAAY,UAAU,GAAG;AAC1B,mBAAa,UAAU;AAAA,IAC3B;AAAA,EACJ,CAAC;AAED,4BAA0B,MAAI;AAC1B,QAAI,CAAC;AAAK;AACV,UAAM,iBAAiB,WAAW,KAAK,WAAW,WAAW;AAG7D,QAAI,yBAAyB;AAC7B,UAAM,eAAe,CAAC,MAAM,OAAO,CAAC,MAAI;AACpC,UAAI,QAAQ,OAAiB,aAAa;AACtC,cAAMO,OAAM,KAAK,IAAI;AACrB,YAAI,UAAU,EAAE,qBAAqBA,OAAM,0BAA0B,SAAS,GAAG;AAC7E,mCAAyBA,OAAM,UAAU,EAAE;AAC3C,yBAAe;AAAA,QACnB;AAAA,MACJ,WAAW,QAAQ,OAAiB,iBAAiB;AACjD,YAAI,UAAU,EAAE,yBAAyB,SAAS,GAAG;AACjD,yBAAe;AAAA,QACnB;AAAA,MACJ,WAAW,QAAQ,OAAiB,cAAc;AAC9C,eAAO,WAAW;AAAA,MACtB,WAAW,QAAQ,OAAiB,wBAAwB;AACxD,eAAO,WAAW,IAAI;AAAA,MAC1B;AACA;AAAA,IACJ;AACA,UAAM,cAAc,kBAAkB,KAAK,oBAAoB,YAAY;AAE3E,iBAAa,UAAU;AACvB,WAAO,UAAU;AACjB,sBAAkB,UAAU;AAE5B,aAAS;AAAA,MACL,IAAI;AAAA,IACR,CAAC;AAED,QAAI,6BAA6B;AAC7B,UAAI,YAAY,IAAI,KAAK,WAAW;AAEhC,uBAAe;AAAA,MACnB,OAAO;AAGH,YAAI,cAAc;AAAA,MACtB;AAAA,IACJ;AACA,WAAO,MAAI;AAEP,mBAAa,UAAU;AACvB,kBAAY;AAAA,IAChB;AAAA,EACJ,GAAG;AAAA,IACC;AAAA,EACJ,CAAC;AAED,4BAA0B,MAAI;AAC1B,QAAIC;AACJ,aAAS,OAAO;AAGZ,YAAM,WAAW,WAAW,eAAe,IAAI,gBAAgB,SAAS,EAAE,IAAI,IAAI;AAIlF,UAAI,YAAYA,WAAU,IAAI;AAC1B,QAAAA,SAAQ,WAAW,SAAS,QAAQ;AAAA,MACxC;AAAA,IACJ;AACA,aAAS,UAAU;AAGf,UAAI,CAAC,SAAS,EAAE,UAAU,qBAAqB,UAAU,EAAE,UAAU,OAAO,sBAAsB,UAAU,EAAE,SAAS,IAAI;AACvH,mBAAW,WAAW,EAAE,KAAK,IAAI;AAAA,MACrC,OAAO;AAEH,aAAK;AAAA,MACT;AAAA,IACJ;AACA,SAAK;AACL,WAAO,MAAI;AACP,UAAIA,QAAO;AACP,qBAAaA,MAAK;AAClB,QAAAA,SAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,EAAAC,GAAc,YAAY;AAK1B,MAAI,YAAY,YAAY,IAAI,KAAK,KAAK;AAItC,QAAI,CAAC,mBAAmB,WAAW;AAC/B,YAAM,IAAI,MAAM,uDAAuD;AAAA,IAC3E;AAEA,eAAW,UAAU;AACrB,cAAU,UAAU;AACpB,iBAAa,UAAU;AACvB,UAAM,MAAM,QAAQ,GAAG;AACvB,QAAI,CAAC,YAAY,GAAG,GAAG;AACnB,YAAM,UAAU,YAAY,GAAG;AAC/B,MAAAZ,KAAI,OAAO;AAAA,IACf;AACA,QAAI,YAAYS,MAAK,GAAG;AACpB,YAAM,UAAU,WAAW,WAAW;AACtC,UAAI,CAAC,YAAY,YAAY,GAAG;AAC5B,gBAAQ,SAAS;AACjB,gBAAQ,QAAQ;AAAA,MACpB;AACA,MAAAT,KAAI,OAAO;AAAA,IACf,OAAO;AACH,YAAMS;AAAA,IACV;AAAA,EACJ;AACA,SAAO;AAAA,IACH,QAAQ;AAAA,IACR,IAAI,OAAQ;AACR,wBAAkB,OAAO;AACzB,aAAO;AAAA,IACX;AAAA,IACA,IAAI,QAAS;AACT,wBAAkB,QAAQ;AAC1B,aAAOA;AAAA,IACX;AAAA,IACA,IAAI,eAAgB;AAChB,wBAAkB,eAAe;AACjC,aAAO;AAAA,IACX;AAAA,IACA,IAAI,YAAa;AACb,wBAAkB,YAAY;AAC9B,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;AACA,IAAMI,aAAY,OAAO,eAAe,WAAa,gBAAgB;AAAA,EACjE,OAAO;AACX,CAAC;AAeG,IAAM,SAAS,SAAS,aAAa;;;AE5hB1B,SAAR,WAA4B;AACjC,aAAW,OAAO,SAAS,OAAO,OAAO,KAAK,IAAI,SAAU,QAAQ;AAClE,aAASC,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACzC,UAAI,SAAS,UAAUA,EAAC;AACxB,eAAS,OAAO,QAAQ;AACtB,YAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG,GAAG;AACrD,iBAAO,GAAG,IAAI,OAAO,GAAG;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO,SAAS,MAAM,MAAM,SAAS;AACvC;;;ACbA,SAAS,WAAW,UAAU;AAC5B,SAAO,SAAS,OAAO,CAAC,MAAM;AAChC;AAGA,SAAS,UAAU,MAAM,OAAO;AAC9B,WAASC,KAAI,OAAOC,KAAID,KAAI,GAAGE,KAAI,KAAK,QAAQD,KAAIC,IAAGF,MAAK,GAAGC,MAAK,GAAG;AACrE,SAAKD,EAAC,IAAI,KAAKC,EAAC;AAAA,EAClB;AAEA,OAAK,IAAI;AACX;AAGA,SAAS,gBAAgB,IAAI,MAAM;AACjC,MAAI,SAAS;AAAW,WAAO;AAE/B,MAAI,UAAW,MAAM,GAAG,MAAM,GAAG,KAAM,CAAC;AACxC,MAAI,YAAa,QAAQ,KAAK,MAAM,GAAG,KAAM,CAAC;AAE9C,MAAI,UAAU,MAAM,WAAW,EAAE;AACjC,MAAI,YAAY,QAAQ,WAAW,IAAI;AACvC,MAAI,aAAa,WAAW;AAE5B,MAAI,MAAM,WAAW,EAAE,GAAG;AAExB,gBAAY;AAAA,EACd,WAAW,QAAQ,QAAQ;AAEzB,cAAU,IAAI;AACd,gBAAY,UAAU,OAAO,OAAO;AAAA,EACtC;AAEA,MAAI,CAAC,UAAU;AAAQ,WAAO;AAE9B,MAAI;AACJ,MAAI,UAAU,QAAQ;AACpB,QAAI,OAAO,UAAU,UAAU,SAAS,CAAC;AACzC,uBAAmB,SAAS,OAAO,SAAS,QAAQ,SAAS;AAAA,EAC/D,OAAO;AACL,uBAAmB;AAAA,EACrB;AAEA,MAAI,KAAK;AACT,WAASD,KAAI,UAAU,QAAQA,MAAK,GAAGA,MAAK;AAC1C,QAAI,OAAO,UAAUA,EAAC;AAEtB,QAAI,SAAS,KAAK;AAChB,gBAAU,WAAWA,EAAC;AAAA,IACxB,WAAW,SAAS,MAAM;AACxB,gBAAU,WAAWA,EAAC;AACtB;AAAA,IACF,WAAW,IAAI;AACb,gBAAU,WAAWA,EAAC;AACtB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC;AAAY,WAAO,MAAM;AAAI,gBAAU,QAAQ,IAAI;AAExD,MACE,cACA,UAAU,CAAC,MAAM,OAChB,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,UAAU,CAAC,CAAC;AAE1C,cAAU,QAAQ,EAAE;AAEtB,MAAI,SAAS,UAAU,KAAK,GAAG;AAE/B,MAAI,oBAAoB,OAAO,OAAO,EAAE,MAAM;AAAK,cAAU;AAE7D,SAAO;AACT;AAEA,IAAO,2BAAQ;;;AC1Ef,IAAI,eAAe;AACnB,IAAI,SAAS;AACb,SAASG,WAAU,WAAW,SAAS;AACnC,MAAI,WAAW;AACX;AAAA,EACJ;AACA,MAAI,cAAc;AACd,UAAM,IAAI,MAAM,MAAM;AAAA,EAC1B;AACA,MAAI,WAAW,OAAO,YAAY,aAAa,QAAQ,IAAI;AAC3D,MAAI,QAAQ,WAAW,GAAG,OAAO,QAAQ,IAAI,EAAE,OAAO,QAAQ,IAAI;AAClE,QAAM,IAAI,MAAM,KAAK;AACzB;;;ACNA,SAAS,gBAAgB,MAAM;AAC7B,SAAO,KAAK,OAAO,CAAC,MAAM,MAAM,OAAO,MAAM;AAC/C;AACA,SAAS,kBAAkB,MAAM;AAC/B,SAAO,KAAK,OAAO,CAAC,MAAM,MAAM,KAAK,OAAO,CAAC,IAAI;AACnD;AACA,SAAS,YAAY,MAAMC,SAAQ;AACjC,SAAO,KAAK,YAAY,EAAE,QAAQA,QAAO,YAAY,CAAC,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAOA,QAAO,MAAM,CAAC,MAAM;AACjH;AACA,SAAS,cAAc,MAAMA,SAAQ;AACnC,SAAO,YAAY,MAAMA,OAAM,IAAI,KAAK,OAAOA,QAAO,MAAM,IAAI;AAClE;AACA,SAAS,mBAAmB,MAAM;AAChC,SAAO,KAAK,OAAO,KAAK,SAAS,CAAC,MAAM,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI;AACpE;AACA,SAAS,UAAU,MAAM;AACvB,MAAI,WAAW,QAAQ;AACvB,MAAI,SAAS;AACb,MAAIC,QAAO;AACX,MAAI,YAAY,SAAS,QAAQ,GAAG;AAEpC,MAAI,cAAc,IAAI;AACpB,IAAAA,QAAO,SAAS,OAAO,SAAS;AAChC,eAAW,SAAS,OAAO,GAAG,SAAS;AAAA,EACzC;AAEA,MAAI,cAAc,SAAS,QAAQ,GAAG;AAEtC,MAAI,gBAAgB,IAAI;AACtB,aAAS,SAAS,OAAO,WAAW;AACpC,eAAW,SAAS,OAAO,GAAG,WAAW;AAAA,EAC3C;AAEA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,WAAW,MAAM,KAAK;AAAA,IAC9B,MAAMA,UAAS,MAAM,KAAKA;AAAA,EAC5B;AACF;AACA,SAAS,WAAWC,WAAU;AAC5B,MAAI,WAAWA,UAAS,UACpB,SAASA,UAAS,QAClBD,QAAOC,UAAS;AACpB,MAAI,OAAO,YAAY;AACvB,MAAI,UAAU,WAAW;AAAK,YAAQ,OAAO,OAAO,CAAC,MAAM,MAAM,SAAS,MAAM;AAChF,MAAID,SAAQA,UAAS;AAAK,YAAQA,MAAK,OAAO,CAAC,MAAM,MAAMA,QAAO,MAAMA;AACxE,SAAO;AACT;AAEA,SAAS,eAAe,MAAM,OAAO,KAAK,iBAAiB;AACzD,MAAIC;AAEJ,MAAI,OAAO,SAAS,UAAU;AAE5B,IAAAA,YAAW,UAAU,IAAI;AACzB,IAAAA,UAAS,QAAQ;AAAA,EACnB,OAAO;AAEL,IAAAA,YAAW,SAAS,CAAC,GAAG,IAAI;AAC5B,QAAIA,UAAS,aAAa;AAAW,MAAAA,UAAS,WAAW;AAEzD,QAAIA,UAAS,QAAQ;AACnB,UAAIA,UAAS,OAAO,OAAO,CAAC,MAAM;AAAK,QAAAA,UAAS,SAAS,MAAMA,UAAS;AAAA,IAC1E,OAAO;AACL,MAAAA,UAAS,SAAS;AAAA,IACpB;AAEA,QAAIA,UAAS,MAAM;AACjB,UAAIA,UAAS,KAAK,OAAO,CAAC,MAAM;AAAK,QAAAA,UAAS,OAAO,MAAMA,UAAS;AAAA,IACtE,OAAO;AACL,MAAAA,UAAS,OAAO;AAAA,IAClB;AAEA,QAAI,UAAU,UAAaA,UAAS,UAAU;AAAW,MAAAA,UAAS,QAAQ;AAAA,EAC5E;AAEA,MAAI;AACF,IAAAA,UAAS,WAAW,UAAUA,UAAS,QAAQ;AAAA,EACjD,SAASC,IAAG;AACV,QAAIA,cAAa,UAAU;AACzB,YAAM,IAAI,SAAS,eAAeD,UAAS,WAAW,+EAAoF;AAAA,IAC5I,OAAO;AACL,YAAMC;AAAA,IACR;AAAA,EACF;AAEA,MAAI;AAAK,IAAAD,UAAS,MAAM;AAExB,MAAI,iBAAiB;AAEnB,QAAI,CAACA,UAAS,UAAU;AACtB,MAAAA,UAAS,WAAW,gBAAgB;AAAA,IACtC,WAAWA,UAAS,SAAS,OAAO,CAAC,MAAM,KAAK;AAC9C,MAAAA,UAAS,WAAW,yBAAgBA,UAAS,UAAU,gBAAgB,QAAQ;AAAA,IACjF;AAAA,EACF,OAAO;AAEL,QAAI,CAACA,UAAS,UAAU;AACtB,MAAAA,UAAS,WAAW;AAAA,IACtB;AAAA,EACF;AAEA,SAAOA;AACT;AAKA,SAAS,0BAA0B;AACjC,MAAI,SAAS;AAEb,WAAS,UAAU,YAAY;AAC7B,YAAwC,yBAAQ,UAAU,MAAM,8CAA8C,IAAI;AAClH,aAAS;AACT,WAAO,WAAY;AACjB,UAAI,WAAW;AAAY,iBAAS;AAAA,IACtC;AAAA,EACF;AAEA,WAAS,oBAAoBE,WAAU,QAAQ,qBAAqB,UAAU;AAI5E,QAAI,UAAU,MAAM;AAClB,UAAI,SAAS,OAAO,WAAW,aAAa,OAAOA,WAAU,MAAM,IAAI;AAEvE,UAAI,OAAO,WAAW,UAAU;AAC9B,YAAI,OAAO,wBAAwB,YAAY;AAC7C,8BAAoB,QAAQ,QAAQ;AAAA,QACtC,OAAO;AACL,kBAAwC,yBAAQ,OAAO,iFAAiF,IAAI;AAC5I,mBAAS,IAAI;AAAA,QACf;AAAA,MACF,OAAO;AAEL,iBAAS,WAAW,KAAK;AAAA,MAC3B;AAAA,IACF,OAAO;AACL,eAAS,IAAI;AAAA,IACf;AAAA,EACF;AAEA,MAAI,YAAY,CAAC;AAEjB,WAAS,eAAeC,KAAI;AAC1B,QAAI,WAAW;AAEf,aAAS,WAAW;AAClB,UAAI;AAAU,QAAAA,IAAG,MAAM,QAAQ,SAAS;AAAA,IAC1C;AAEA,cAAU,KAAK,QAAQ;AACvB,WAAO,WAAY;AACjB,iBAAW;AACX,kBAAY,UAAU,OAAO,SAAU,MAAM;AAC3C,eAAO,SAAS;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,kBAAkB;AACzB,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,IAAI,IAAI,UAAU,IAAI;AAAA,IAC7B;AAEA,cAAU,QAAQ,SAAU,UAAU;AACpC,aAAO,SAAS,MAAM,QAAQ,IAAI;AAAA,IACpC,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAI,YAAY,CAAC,EAAE,OAAO,WAAW,eAAe,OAAO,YAAY,OAAO,SAAS;AACvF,SAAS,gBAAgB,SAAS,UAAU;AAC1C,WAAS,OAAO,QAAQ,OAAO,CAAC;AAClC;AA0BA,SAAS,mCAAmC;AAC1C,SAAO,OAAO,UAAU,UAAU,QAAQ,SAAS,MAAM;AAC3D;AAiRA,IAAI,oBAAoB;AACxB,IAAI,iBAAiB;AAAA,EACnB,UAAU;AAAA,IACR,YAAY,SAAS,WAAW,MAAM;AACpC,aAAO,KAAK,OAAO,CAAC,MAAM,MAAM,OAAO,OAAO,kBAAkB,IAAI;AAAA,IACtE;AAAA,IACA,YAAY,SAAS,WAAW,MAAM;AACpC,aAAO,KAAK,OAAO,CAAC,MAAM,MAAM,KAAK,OAAO,CAAC,IAAI;AAAA,IACnD;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AACF;AAEA,SAAS,UAAU,KAAK;AACtB,MAAI,YAAY,IAAI,QAAQ,GAAG;AAC/B,SAAO,cAAc,KAAK,MAAM,IAAI,MAAM,GAAG,SAAS;AACxD;AAEA,SAAS,cAAc;AAGrB,MAAI,OAAO,OAAO,SAAS;AAC3B,MAAI,YAAY,KAAK,QAAQ,GAAG;AAChC,SAAO,cAAc,KAAK,KAAK,KAAK,UAAU,YAAY,CAAC;AAC7D;AAEA,SAAS,aAAa,MAAM;AAC1B,SAAO,SAAS,OAAO;AACzB;AAEA,SAAS,gBAAgB,MAAM;AAC7B,SAAO,SAAS,QAAQ,UAAU,OAAO,SAAS,IAAI,IAAI,MAAM,IAAI;AACtE;AAEA,SAAS,kBAAkB,OAAO;AAChC,MAAI,UAAU,QAAQ;AACpB,YAAQ,CAAC;AAAA,EACX;AAEA,GAAC,YAAY,QAAwCC,WAAU,OAAO,0BAA0B,IAAIA,WAAU,KAAK,IAAI;AACvH,MAAI,gBAAgB,OAAO;AAC3B,MAAI,qBAAqB,iCAAiC;AAC1D,MAAI,SAAS,OACT,wBAAwB,OAAO,qBAC/B,sBAAsB,0BAA0B,SAAS,kBAAkB,uBAC3E,kBAAkB,OAAO,UACzB,WAAW,oBAAoB,SAAS,UAAU;AACtD,MAAI,WAAW,MAAM,WAAW,mBAAmB,gBAAgB,MAAM,QAAQ,CAAC,IAAI;AACtF,MAAI,wBAAwB,eAAe,QAAQ,GAC/CC,cAAa,sBAAsB,YACnCC,cAAa,sBAAsB;AAEvC,WAAS,iBAAiB;AACxB,QAAIC,QAAOD,YAAW,YAAY,CAAC;AACnC,YAAwC,yBAAQ,CAAC,YAAY,YAAYC,OAAM,QAAQ,GAAG,oHAAyHA,QAAO,sBAAsB,WAAW,IAAI,IAAI;AACnQ,QAAI;AAAU,MAAAA,QAAO,cAAcA,OAAM,QAAQ;AACjD,WAAO,eAAeA,KAAI;AAAA,EAC5B;AAEA,MAAI,oBAAoB,wBAAwB;AAEhD,WAAS,SAAS,WAAW;AAC3B,aAASC,UAAS,SAAS;AAE3B,IAAAA,SAAQ,SAAS,cAAc;AAC/B,sBAAkB,gBAAgBA,SAAQ,UAAUA,SAAQ,MAAM;AAAA,EACpE;AAEA,MAAI,eAAe;AACnB,MAAI,aAAa;AAEjB,WAAS,qBAAqBC,IAAGC,IAAG;AAClC,WAAOD,GAAE,aAAaC,GAAE,YAAYD,GAAE,WAAWC,GAAE,UAAUD,GAAE,SAASC,GAAE;AAAA,EAC5E;AAEA,WAAS,mBAAmB;AAC1B,QAAIH,QAAO,YAAY;AACvB,QAAII,eAAcN,YAAWE,KAAI;AAEjC,QAAIA,UAASI,cAAa;AAExB,sBAAgBA,YAAW;AAAA,IAC7B,OAAO;AACL,UAAIC,YAAW,eAAe;AAC9B,UAAI,eAAeJ,SAAQ;AAC3B,UAAI,CAAC,gBAAgB,qBAAqB,cAAcI,SAAQ;AAAG;AAEnE,UAAI,eAAe,WAAWA,SAAQ;AAAG;AAEzC,mBAAa;AACb,gBAAUA,SAAQ;AAAA,IACpB;AAAA,EACF;AAEA,WAAS,UAAUA,WAAU;AAC3B,QAAI,cAAc;AAChB,qBAAe;AACf,eAAS;AAAA,IACX,OAAO;AACL,UAAI,SAAS;AACb,wBAAkB,oBAAoBA,WAAU,QAAQ,qBAAqB,SAAU,IAAI;AACzF,YAAI,IAAI;AACN,mBAAS;AAAA,YACP;AAAA,YACA,UAAUA;AAAA,UACZ,CAAC;AAAA,QACH,OAAO;AACL,oBAAUA,SAAQ;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,UAAU,cAAc;AAC/B,QAAI,aAAaJ,SAAQ;AAIzB,QAAI,UAAU,SAAS,YAAY,WAAW,UAAU,CAAC;AACzD,QAAI,YAAY;AAAI,gBAAU;AAC9B,QAAI,YAAY,SAAS,YAAY,WAAW,YAAY,CAAC;AAC7D,QAAI,cAAc;AAAI,kBAAY;AAClC,QAAI,QAAQ,UAAU;AAEtB,QAAI,OAAO;AACT,qBAAe;AACf,SAAG,KAAK;AAAA,IACV;AAAA,EACF;AAGA,MAAI,OAAO,YAAY;AACvB,MAAI,cAAcH,YAAW,IAAI;AACjC,MAAI,SAAS;AAAa,oBAAgB,WAAW;AACrD,MAAI,kBAAkB,eAAe;AACrC,MAAI,WAAW,CAAC,WAAW,eAAe,CAAC;AAE3C,WAAS,WAAWO,WAAU;AAC5B,QAAI,UAAU,SAAS,cAAc,MAAM;AAC3C,QAAI,OAAO;AAEX,QAAI,WAAW,QAAQ,aAAa,MAAM,GAAG;AAC3C,aAAO,UAAU,OAAO,SAAS,IAAI;AAAA,IACvC;AAEA,WAAO,OAAO,MAAMP,YAAW,WAAW,WAAWO,SAAQ,CAAC;AAAA,EAChE;AAEA,WAAS,KAAKL,OAAM,OAAO;AACzB,YAAwC,yBAAQ,UAAU,QAAW,+CAA+C,IAAI;AACxH,QAAI,SAAS;AACb,QAAIK,YAAW,eAAeL,OAAM,QAAW,QAAWC,SAAQ,QAAQ;AAC1E,sBAAkB,oBAAoBI,WAAU,QAAQ,qBAAqB,SAAU,IAAI;AACzF,UAAI,CAAC;AAAI;AACT,UAAIL,QAAO,WAAWK,SAAQ;AAC9B,UAAID,eAAcN,YAAW,WAAWE,KAAI;AAC5C,UAAI,cAAc,YAAY,MAAMI;AAEpC,UAAI,aAAa;AAIf,qBAAaJ;AACb,qBAAaI,YAAW;AACxB,YAAI,YAAY,SAAS,YAAY,WAAWH,SAAQ,QAAQ,CAAC;AACjE,YAAI,YAAY,SAAS,MAAM,GAAG,YAAY,CAAC;AAC/C,kBAAU,KAAKD,KAAI;AACnB,mBAAW;AACX,iBAAS;AAAA,UACP;AAAA,UACA,UAAUK;AAAA,QACZ,CAAC;AAAA,MACH,OAAO;AACL,gBAAwC,yBAAQ,OAAO,4FAA4F,IAAI;AACvJ,iBAAS;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,QAAQL,OAAM,OAAO;AAC5B,YAAwC,yBAAQ,UAAU,QAAW,kDAAkD,IAAI;AAC3H,QAAI,SAAS;AACb,QAAIK,YAAW,eAAeL,OAAM,QAAW,QAAWC,SAAQ,QAAQ;AAC1E,sBAAkB,oBAAoBI,WAAU,QAAQ,qBAAqB,SAAU,IAAI;AACzF,UAAI,CAAC;AAAI;AACT,UAAIL,QAAO,WAAWK,SAAQ;AAC9B,UAAID,eAAcN,YAAW,WAAWE,KAAI;AAC5C,UAAI,cAAc,YAAY,MAAMI;AAEpC,UAAI,aAAa;AAIf,qBAAaJ;AACb,wBAAgBI,YAAW;AAAA,MAC7B;AAEA,UAAI,YAAY,SAAS,QAAQ,WAAWH,SAAQ,QAAQ,CAAC;AAC7D,UAAI,cAAc;AAAI,iBAAS,SAAS,IAAID;AAC5C,eAAS;AAAA,QACP;AAAA,QACA,UAAUK;AAAA,MACZ,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,WAAS,GAAGC,IAAG;AACb,YAAwC,yBAAQ,oBAAoB,8DAA8D,IAAI;AACtI,kBAAc,GAAGA,EAAC;AAAA,EACpB;AAEA,WAAS,SAAS;AAChB,OAAG,EAAE;AAAA,EACP;AAEA,WAAS,YAAY;AACnB,OAAG,CAAC;AAAA,EACN;AAEA,MAAI,gBAAgB;AAEpB,WAAS,kBAAkB,OAAO;AAChC,qBAAiB;AAEjB,QAAI,kBAAkB,KAAK,UAAU,GAAG;AACtC,aAAO,iBAAiB,mBAAmB,gBAAgB;AAAA,IAC7D,WAAW,kBAAkB,GAAG;AAC9B,aAAO,oBAAoB,mBAAmB,gBAAgB;AAAA,IAChE;AAAA,EACF;AAEA,MAAI,YAAY;AAEhB,WAAS,MAAM,QAAQ;AACrB,QAAI,WAAW,QAAQ;AACrB,eAAS;AAAA,IACX;AAEA,QAAI,UAAU,kBAAkB,UAAU,MAAM;AAEhD,QAAI,CAAC,WAAW;AACd,wBAAkB,CAAC;AACnB,kBAAY;AAAA,IACd;AAEA,WAAO,WAAY;AACjB,UAAI,WAAW;AACb,oBAAY;AACZ,0BAAkB,EAAE;AAAA,MACtB;AAEA,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEA,WAAS,OAAO,UAAU;AACxB,QAAI,WAAW,kBAAkB,eAAe,QAAQ;AACxD,sBAAkB,CAAC;AACnB,WAAO,WAAY;AACjB,wBAAkB,EAAE;AACpB,eAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAIL,WAAU;AAAA,IACZ,QAAQ,cAAc;AAAA,IACtB,QAAQ;AAAA,IACR,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAOA;AACT;;;ACtuBA;;;;AC9BAM,IAAMC,UAAQ,CAAA;AAEd,SAAgB,OAAO,KAAK,OAAO;AAElC,WAASC,MAAK,OAAO;AACpB,QAAIA,EAAC,IAAI,MAAMA,EAAC;;AAEjB,SAAO;;AAGR,SAAgB,KAAK,KAAKC,QAAO,MAAM;AACtCC,MAAI,MAAM,yBACTC,KAAI,IAAI,MAAM,GAAG,GACjB,UAAU,CAAA,GACV;AACD,MAAIA,MAAKA,GAAE,CAAC,GAAG;AACdD,QAAIE,KAAID,GAAE,CAAC,EAAE,MAAM,GAAG;AACtB,aAASH,KAAE,GAAGA,KAAEI,GAAE,QAAQJ,MAAK;AAC9BE,UAAIG,KAAID,GAAEJ,EAAC,EAAE,MAAM,GAAG;AACtB,cAAQ,mBAAmBK,GAAE,CAAC,CAAC,CAAC,IAAI,mBAAmBA,GAAE,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC;;;AAG7E,QAAM,WAAW,IAAI,QAAQ,KAAK,EAAE,CAAC;AACrC,EAAAJ,SAAQ,WAAWA,UAAS,EAAE;AAC9BC,MAAI,MAAM,KAAK,IAAI,IAAI,QAAQD,OAAM,MAAM;AAC3C,WAASD,MAAE,GAAGA,MAAE,KAAKA,OAAK;AACzB,QAAIC,OAAMD,GAAC,KAAKC,OAAMD,GAAC,EAAE,OAAO,CAAC,MAAI,KAAK;AACzCE,UAAI,QAAQD,OAAMD,GAAC,EAAE,QAAQ,iBAAiB,EAAE,GAC/C,SAASC,OAAMD,GAAC,EAAE,MAAM,SAAS,KAAKD,SAAO,CAAC,KAAK,IACnD,OAAO,CAAC,MAAM,QAAQ,GAAG,GACzB,OAAO,CAAC,MAAM,QAAQ,GAAG,GACzB,MAAM,IAAIC,GAAC,KAAK;AACjB,UAAI,CAAC,OAAO,CAAC,SAAS,MAAM,QAAQ,GAAG,IAAE,KAAK,OAAO;AACpD,cAAM;AACN;;AAED,cAAQ,KAAK,IAAI,mBAAmB,GAAG;AACvC,UAAI,QAAQ,MAAM;AACjB,gBAAQ,KAAK,IAAI,IAAI,MAAMA,GAAC,EAAE,IAAI,kBAAkB,EAAE,KAAK,GAAG;AAC9D;;eAGOC,OAAMD,GAAC,MAAI,IAAIA,GAAC,GAAG;AAC3B,YAAM;AACN;;;AAGF,MAAI,KAAK,YAAU,QAAQ,QAAM,OAAO;AAAA,WAAO;EAAM;AACrD,SAAO;;AAGR,SAAgB,aAAaM,IAAGC,IAAG;AAClC,SACED,GAAE,OAAOC,GAAE,OAAQ,IAClBD,GAAE,OAAOC,GAAE,OAAQ,KAClBD,GAAE,QAAQC,GAAE;;AAKjB,SAAgB,uBAAuB,OAAO,OAAO;AACpD,QAAM,QAAQ;AACd,QAAM,OAAO,UAAU,KAAK;AAC5B,SAAO,MAAM;;AAGd,SAAgB,WAAW,KAAK;AAC/B,SAAO,IAAI,QAAQ,gBAAgB,EAAE,EAAE,MAAM,GAAG;;AAGjD,SAAgB,YAAY,SAAS;AACpC,SAAO,QAAQ,OAAO,CAAC,KAAG,MAAO,IAAI,MAAM,QAAQ,QAAQ,OAAO,QAAQ,SAAO,CAAC,CAAC,KAAM,IAAI;;AAG9F,SAAgB,KAAK,MAAM;AAC1B,SAAO,WAAW,IAAI,EAAE,IAAI,WAAW,EAAE,KAAK,EAAE;;AAGjD,SAAS,UAAU,OAAO;AACzB,SAAO,MAAM,MAAM,UAAU,IAAI,KAAK,MAAM,MAAM,IAAI;;AC7EvDL,IAAI,gBAAgB;AAEpBJ,IAAM,UAAU,CAAA;AAEhBA,IAAM,cAAc,CAAA;AAEpBA,IAAM,QAAQ,CAAA;AAEd,SAAS,OAAO,KAAK,MAAa;;WAAR;AACzB,MAAI,iBAAiB,cAAc,IAAI,GAAG;AACzC,kBAAc,IAAI,EAAE,GAAG;aAEf,OAAO,YAAU,eAAe,QAAQ,OAAK,OAAO,GAAG;AAC/D,YAAQ,OAAK,OAAO,EAAE,MAAM,MAAM,GAAG;;;AAKvC,SAAS,gBAAgB;AACxBI,MAAI;AACJ,MAAI,iBAAiB,cAAc,UAAU;AAC5C,UAAM,cAAc;aAEZ,iBAAiB,cAAc,oBAAoB;AAC3D,UAAM,cAAc,mBAAkB;SAElC;AACJ,UAAM,OAAO,aAAW,cAAc,WAAW;;AAElD,SAAO,MAAG,IAAI,YAAY,OAAK,IAAI,UAAU;;AAK9C,SAAS,MAAM,KAAK,SAAe;;cAAP;AAC3B,MAAI,OAAO,QAAM,YAAY,IAAI,KAAK;AACrC,cAAU,IAAI;AACd,UAAM,IAAI;;AAIX,MAAI,SAAS,GAAG,GAAG;AAClB,WAAO,KAAK,UAAU,YAAY,MAAM;;AAGzC,SAAO,QAAQ,GAAG;;AAKnB,SAAS,SAAS,KAAK;AACtB,WAASF,KAAE,QAAQ,QAAQA,QAAO;AACjC,QAAI,QAAQA,EAAC,EAAE,SAAS,GAAG,GAAG;AAAA,aAAO;IAAK;;AAE3C,SAAO;;AAKR,SAAS,QAAQ,KAAK;AACrBE,MAAI,WAAW;AACf,WAASF,KAAE,GAAGA,KAAE,QAAQ,QAAQA,MAAK;AACpC,QAAI,QAAQA,EAAC,EAAE,QAAQ,GAAG,MAAI,MAAM;AACnC,iBAAW;;;AAGb,WAASA,MAAE,YAAY,QAAQA,SAAO;AACrC,gBAAYA,GAAC,EAAE,GAAG;;AAEnB,SAAO;;AAIR,SAAS,cAAc,MAAM;AAE5B,MAAI,CAAC,QAAQ,CAAC,KAAK,cAAc;AAAA;EAAO;AAExCE,MAAI,OAAO,KAAK,aAAa,MAAM,GAClC,SAAS,KAAK,aAAa,QAAQ;AAGpC,MAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,MAAM,KAAM,UAAU,CAAC,OAAO,MAAM,WAAW,GAAI;AAAA;EAAO;AAGnF,SAAO,MAAM,IAAI;;AAIlB,SAAS,gBAAgBM,IAAG;AAC3B,MAAIA,GAAE,WAAWA,GAAE,WAAWA,GAAE,UAAUA,GAAE,YAAYA,GAAE,WAAS,GAAG;AAAA;EAAO;AAC7E,gBAAcA,GAAE,iBAAiBA,GAAE,UAAU,IAAI;AACjD,SAAO,QAAQA,EAAC;;AAIjB,SAAS,QAAQA,IAAG;AACnB,MAAIA,IAAG;AACN,QAAIA,GAAE,0BAA0B;AAAA,MAAAA,GAAE,yBAAwB;IAAG;AAC7D,QAAIA,GAAE,iBAAiB;AAAA,MAAAA,GAAE,gBAAe;IAAG;AAC3C,IAAAA,GAAE,eAAc;;AAEjB,SAAO;;AAIR,SAAS,oBAAoBA,IAAG;AAE/B,MAAIA,GAAE,WAAWA,GAAE,WAAWA,GAAE,UAAUA,GAAE,YAAYA,GAAE,WAAS,GAAG;AAAA;EAAO;AAE7EN,MAAIO,KAAID,GAAE;AACV,KAAG;AACF,QAAI,OAAOC,GAAE,QAAQ,EAAE,YAAW,MAAK,OAAOA,GAAE,aAAa,MAAM,GAAG;AACrE,UAAIA,GAAE,aAAa,QAAQ,GAAG;AAAA;MAAO;AAErC,UAAI,cAAcA,EAAC,GAAG;AACrB,eAAO,QAAQD,EAAC;;;WAGTC,KAAEA,GAAE;;AAIfP,IAAI,4BAA4B;AAEhC,SAAS,qBAAqB;AAC7B,MAAI,2BAA2B;AAAA;EAAO;AAEtC,MAAI,OAAO,qBAAmB,YAAY;AACzC,QAAI,CAAC,eAAe;AACnB,uBAAiB,YAAY,WAAG;AAC/B,gBAAQ,cAAa,CAAE;OACvB;;AAEF,qBAAiB,SAAS,mBAAmB;;AAE9C,8BAA4B;;AAI7B,IAAM,SAAM,SAAA,cAAA;AAAmB,WAAAQ,QAClB,OAAO;AAClBC,iBAAK,KAAC,MAAA,KAAK;AACX,QAAI,MAAM,SAAS;AAClB,sBAAgB,MAAM;;AAGvB,SAAK,QAAQ;MACZ,KAAK,MAAM,OAAO,cAAa;;AAGhC,uBAAkB;;;;;;AAGnB,EAAAD,QAAA,UAAA,wBAAqB,SAAA,sBAAC,OAAO;AAC5B,QAAI,MAAM,WAAS,MAAM;AAAA,aAAO;IAAK;AACrC,WAAO,MAAM,QAAM,KAAK,MAAM,OAAO,MAAM,aAAW,KAAK,MAAM;;AAIlE,EAAAA,QAAA,UAAA,WAAQ,SAAAE,UAAC,KAAK;AACbd,QAAM,WAAWe,GAAa,KAAK,MAAM,QAAQ;AACjD,WAAO,KAAK,oBAAoB,UAAU,KAAK,KAAK,EAAE,SAAS;;AAIhE,EAAAH,QAAA,UAAA,UAAO,SAAAI,SAAC,KAAK;AACZ,SAAK,SAAS,EAAE,IAAG,CAAE;AAErBhB,QAAM,WAAW,KAAK,SAAS,GAAG;AAGlC,QAAI,CAAC,KAAK,UAAU;AAAA,WAAK,YAAW;IAAG;AAEvC,WAAO;;AAGR,EAAAY,QAAA,UAAA,qBAAkB,SAAA,qBAAG;AACpB,YAAQ,KAAK,IAAI;AACjB,SAAK,WAAW;;AAGjB,EAAAA,QAAA,UAAA,oBAAiB,SAAA,oBAAG;;AACnB,QAAI,eAAe;AAClB,WAAK,WAAW,cAAc,OAAO,SAACK,WAAU;AAC/CC,eAAK,QAAQ,MAAGD,UAAS,YAAY,OAAKA,UAAS,UAAU,GAAE;OAC/D;;AAEF,SAAK,WAAW;;AAGjB,EAAAL,QAAA,UAAA,uBAAoB,SAAA,uBAAG;AACtB,QAAI,OAAO,KAAK,aAAW,YAAY;AAAA,WAAK,SAAQ;IAAG;AACvD,YAAQ,OAAO,QAAQ,QAAQ,IAAI,GAAG,CAAC;;AAGxC,EAAAA,QAAA,UAAA,sBAAmB,SAAA,sBAAG;AACrB,SAAK,WAAW;;AAGjB,EAAAA,QAAA,UAAA,qBAAkB,SAAA,qBAAG;AACpB,SAAK,WAAW;;AAGjB,EAAAA,QAAA,UAAA,sBAAmB,SAAA,oBAAC,UAAU,KAAK,QAAQ;AAC1C,WAAO,SACL,OAAO,sBAAsB,EAC7B,KAAK,YAAY,EACjB,IAAK,SAAA,OAAM;AACXR,UAAI,UAAU,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,KAAK;AACrD,UAAI,SAAS;AACZ,YAAI,WAAW,OAAO;AACrBA,cAAI,WAAW,EAAE,KAAK,QAAO;AAC7B,iBAAO,UAAU,OAAO;AACxB,iBAAO,SAAS;AAChB,iBAAO,SAAS;AAChB,iBAAO,EAAa,OAAO,QAAQ;;AAEpC,eAAO;;KAER,EAAE,OAAO,OAAO;;AAGnB,EAAAQ,QAAA,UAAA,SAAM,SAAA,OAAC,KAAwB,OAAS;QAA/B,WAAQ,IAAA;QAAE,WAAQ,IAAA;QAAM,MAAG,MAAA;AACnCR,QAAI,SAAS,KAAK,oBAAoBW,GAAa,QAAQ,GAAG,KAAK,IAAI;AAEvEX,QAAI,UAAU,OAAO,CAAC,KAAK;AAE3BA,QAAI,WAAW,KAAK;AACpB,QAAI,QAAM,UAAU;AACnB,WAAK,cAAc;AACnB,UAAI,OAAO,aAAW,YAAY;AACjC,iBAAS;UACR,QAAQ;UACR;UACA;UACA;UACA;SACA;;;AAIH,WAAO;;;EAtGY,CAwGpB;AAEDJ,IAAM,OAAO,SAAC,OAAO;AAAA,SACpB,EAAc,KAAK,OAAO,EAAE,SAAS,gBAAe,GAAI,KAAK,CAAC;;AAG/DA,IAAM,QAAQ,SAAA,OAAM;AAAA,SAAG,EAAc,MAAM,WAAW,KAAK;AAAC;AAE5D,OAAO,cAAc;AACrB,OAAO,gBAAgB;AACvB,OAAO,QAAQ;AACf,OAAO,SAAS;AAChB,OAAO,QAAQ;AACf,OAAO,OAAO;AACd,OAAO,OAAO;;;AFnOd;;;AGZA;AAEO,SAAS,UAAiB;AAC/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA;AAAA,IAEA,kBAAC,aAAQ;AAAA,EACX;AAEJ;AAEO,SAAS,UAAiB;AAC/B,SACE,kBAAC,SAAI,OAAM,cACT,kBAAC,WAAI,GACL,kBAAC,WAAI,GACL,kBAAC,WAAI,GACL,kBAAC,WAAI,CACP;AAEJ;;;AC/BA;AACA;;;ACFA;;;ACSA;AACA;;;ACwCO,IAAM,+BAA+B,MAC1C,oBAA8B,EAC3B,SAAS,UAAU,oBAAoB,UAAU,CAAC,EAClD,SAAS,YAAY,eAAe,CAAC,EACrC,SAAS,eAAe,cAAc,oBAAoB,CAAC,CAAC,EAC5D,SAAS,SAAS,cAAc,eAAe,CAAuB,CAAC,EACvE,SAAS,WAAW,gBAAgB,CAAC,EACrC,MAAM,uBAAuB;AAE3B,IAAM,8BAA8B,MACzC,oBAA6B,EAC1B,SAAS,UAAU,oBAAoB,SAAS,CAAC,EACjD,SAAS,YAAY,eAAe,CAAC,EACrC,SAAS,eAAe,cAAc,oBAAoB,CAAC,CAAC,EAC5D,SAAS,WAAW,gBAAgB,CAAC,EACrC,MAAM,sBAAsB;AAE1B,IAAM,gCAAgC,MAC3C,oBAA+B,EAC5B,SAAS,UAAU,oBAAoB,WAAW,CAAC,EACnD,SAAS,YAAY,eAAe,CAAC,EACrC,SAAS,WAAW,gBAAgB,CAAC,EACrC,MAAM,wBAAwB;AAE5B,IAAM,sBAAsB,MACjC,oBAAiC,EAC9B,SAAS,oBAAoB,eAAe,CAAC,EAC7C;AAAA,EACC;AAAA,EACA,cAAc,eAAe,CAAuB;AACtD,EACC,SAAS,sBAAsB,eAAe,CAAC,EAC/C,MAAM,0BAA0B;AAE9B,IAAM,uBAAuB,MAClC,mBAAiC,EAC9B,eAAe,QAAQ,EACvB,YAAY,YAAY,6BAA6B,CAAC,EACtD,YAAY,aAAa,8BAA8B,CAAC,EACxD,YAAY,WAAW,4BAA4B,CAAC,EACpD,MAAM,cAAc;AAEzB,SAAS,kBAAkB,KAAU;AACnC,QAAMmB,SAAQ,mBAAmB,KAAK,IAAI,IAAI;AAC9C,SAAO,CAACA,UAAS,CAACA,OAAM,CAAC,IAAI,yBAAyBA,OAAM,CAAC;AAC/D;AAEO,IAAM,eAAe,CAAC,QAA2B;AACtD,QAAM,WAAW,kBAAkB,GAAG;AACtC,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,SAAS,aAAa;AAAA,IACtB,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AACF;AA4BA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA,qBAAqB;AACvB;AAEO,IAAM,yBAAyB;AAE/B,IAAM,qBAAqB;AAO3B,SAAS,oBAAyC;AACvD,QAAM,EAAE,KAAK,aAAa,cAAc,IAAI,sBAAsB;AAElE,QAAM,EAAE,OAAO,OAAO,OAAO,IAAI;AAAA,IAC/B;AAAA,IACA,aAAa,WAAW;AAAA,EAC1B;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AACP,YAAM,WAAW,kBAAkB,WAAW;AAC9C,YAAM,YAA0B;AAAA,QAC9B,QAAQ;AAAA,QACR;AAAA,QACA,SAAS,aAAa;AAAA,MACxB;AACA,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,gBAAgB;AACd,UAAI,MAAM,WAAW,eAAe,MAAM,WAAW,WAAW;AAE9D;AAAA,MACF;AACA,UAAI,MAAM,gBAAgB,QAAW;AACnC;AAAA,MACF;AACA,YAAM,SAAS,IAAI,IAAI,MAAM,MAAM,YAAY,kBAAkB;AACjE,oBAAc,MAAM;AACpB,YAAM,YAA0B;AAAA,QAC9B,QAAQ;AAAA,QACR,SAAS,MAAM,YAAY,qBAAqB;AAAA,QAChD,UAAU,MAAM,YAAY;AAAA,QAC5B,OAAO,MAAM,YAAY;AAAA,QACzB,aAAa;AAAA,MACf;AACA,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,YAAY,MAAM;AAChB,UAAI,MAAM,WAAW,eAAe,MAAM,WAAW,WAAW;AAE9D;AAAA,MACF;AACA,oBAAc,KAAK,OAAO;AAC1B,YAAM,YAA0B;AAAA,QAC9B,QAAQ;AAAA,QACR,SAAS,KAAK,aAAa;AAAA,QAC3B,UAAU,KAAK;AAAA;AAAA,QAEf,OAAO,KAAK,OAAO,UAAU,gBAAgB,MAAM;AAAA,QACnD,aAAa;AAAA,UACX,oBAAoB,YAAY;AAAA,UAChC,eAAe,MAAM;AAAA,UACrB,kBAAkB,MAAM;AAAA,QAC1B;AAAA,MACF;AACA,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,UAAU;AACR,UAAI,MAAM,WAAW;AAAa;AAElC,YAAM,YAA0B;AAAA,QAC9B,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AACA,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,MAAM,MAAM;AAEV,YAAM,YAA0B;AAAA,QAC9B,aAAa;AAAA,QACb,GAAG;AAAA,QACH,QAAQ;AAAA;AAAA,QAER,OAAO,KAAK,OAAO,UAAU,gBAAgB,MAAM;AAAA;AAAA,MAErD;AACA,aAAO,SAAS;AAChB,oBAAc;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,gBAAsB;AAC7B,SAAO,MAAM,MAAM,QAAW,EAAE,YAAY,MAAM,CAAC;AACrD;;;AClOA;AACA;;;ACHA;;;ACCA;AACA;;;ACDO,IAAM,cACX;AAQK,IAAM,yBACX;AAEK,IAAM,YACX;AAEK,IAAM,sBAAsB;AAG5B,IAAM,yBAAyB,sBAAsB;AAGrD,IAAM,0BAA0B;AAEhC,IAAM,iBAAiB,OAAO;AAE9B,IAAM,oBAAoB;AAE1B,IAAM,gBAAgB;AAAA,EAC3B,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,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;AA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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", "fn", "p", "e", "split", "isValid", "max", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "self", "table", "a", "r", "lexer", "c", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "this", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "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", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "createContext", "defaultValue", "contextId", "Consumer", "contextValue", "Provider", "subs", "ctx", "_props", "old", "splice", "isValidElement", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "getHookState", "index", "type", "options", "__h", "currentComponent", "currentHook", "hooks", "__H", "__", "length", "push", "__V", "EMPTY", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "currentIndex", "_reducer", "__c", "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", "useImperativeHandle", "ref", "createHandle", "concat", "factory", "useCallback", "useContext", "context", "provider", "sub", "value", "useDebugValue", "formatter", "useErrorBoundary", "cb", "errState", "componentDidCatch", "err", "errorInfo", "undefined", "useId", "root", "__v", "__m", "mask", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "invokeCleanup", "invokeEffect", "e", "__e", "afterNextFrame", "raf", "done", "clearTimeout", "timeout", "HAS_RAF", "cancelAnimationFrame", "setTimeout", "requestAnimationFrame", "hook", "comp", "cleanup", "oldArgs", "newArgs", "some", "arg", "f", "previousComponent", "prevRaf", "oldBeforeDiff", "oldBeforeRender", "oldAfterDiff", "oldCommit", "oldBeforeUnmount", "diffed", "unmount", "__b", "vnode", "commitQueue", "hasErrored", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "is", "x", "y", "PureComponent", "p", "this", "memo", "c", "comparer", "shouldUpdate", "nextProps", "ref", "updateRef", "call", "current", "Memoed", "shouldComponentUpdate", "createElement", "displayName", "name", "prototype", "isReactComponent", "forwardRef", "fn", "Forwarded", "clone", "$$typeof", "REACT_FORWARD_SYMBOL", "render", "__f", "detachedClone", "vnode", "detachedParent", "parentDom", "__c", "forEach", "effect", "__H", "__P", "__k", "map", "child", "removeOriginal", "originalParent", "__v", "__e", "insertBefore", "__d", "Suspense", "__u", "_suspenders", "suspended", "component", "__", "__a", "lazy", "loader", "prom", "error", "Lazy", "then", "exports", "default", "e", "SuspenseList", "_next", "_map", "ContextProvider", "getChildContext", "context", "children", "Portal", "_this", "container", "_container", "componentWillUnmount", "_temp", "nodeType", "parentNode", "childNodes", "appendChild", "push", "before", "removeChild", "splice", "indexOf", "createPortal", "el", "containerInfo", "parent", "callback", "textContent", "preactRender", "hydrate", "preactHydrate", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "createFactory", "type", "bind", "isValidElement", "element", "REACT_ELEMENT_TYPE", "cloneElement", "preactCloneElement", "apply", "arguments", "unmountComponentAtNode", "findDOMNode", "base", "Fragment", "startTransition", "cb", "useDeferredValue", "val", "useTransition", "useLayoutEffect", "useSyncExternalStore", "subscribe", "getSnapshot", "value", "_useState", "useState", "_instance", "_getSnapshot", "forceUpdate", "useEffect", "oldDiffHook", "mapFn", "Children", "oldCatchError", "oldUnmount", "resolve", "CAMEL_PROPS", "IS_DOM", "onChangeInputType", "oldEventHook", "currentComponent", "classNameDescriptor", "oldVNodeHook", "oldBeforeRender", "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", "version", "unstable_batchedUpdates", "flushSync", "StrictMode", "useInsertionEffect", "index", "Component", "isPureReactComponent", "state", "options", "__b", "Symbol", "for", "toChildArray", "count", "length", "only", "normalized", "toArray", "newVNode", "oldVNode", "errorInfo", "unmount", "__R", "__h", "promise", "suspendingVNode", "suspendingComponent", "resolved", "onResolved", "onSuspensionComplete", "suspendedVNode", "setState", "pop", "wasHydrating", "document", "detachedComponent", "__O", "fallback", "list", "node", "delete", "revealOrder", "size", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "reverse", "set", "componentDidUpdate", "componentDidMount", "test", "key", "Object", "defineProperty", "configurable", "v", "writable", "event", "persist", "nativeEvent", "class", "normalizedProps", "nonCustomElement", "toLowerCase", "replace", "multiple", "Array", "isArray", "selected", "defaultValue", "className", "enumerable", "__r", "ReactCurrentDispatcher", "readContext", "__n", "arg", "useId", "useReducer", "useRef", "useImperativeHandle", "useMemo", "useCallback", "useContext", "useDebugValue", "createContext", "createRef", "e", "h", "a", "b", "k", "l", "m", "n", "p", "q", "d", "f", "c", "g", "r", "t", "u", "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", "r", "i", "x", "n", "h", "l", "y", "d", "x", "y", "r", "a", "i", "o", "v", "c", "p", "q", "b", "t", "n", "j", "m", "d", "t2", "t3", "t22", "b2", "b3", "b4", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "s", "r", "x", "i", "j", "k", "r", "p", "q", "t", "s", "m", "n", "i", "t", "h", "p", "q", "i", "n", "b", "h", "fn", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "timer", "CancellationToken", "a", "r", "n", "x", "c", "a2", "x2", "a", "b", "n", "r", "s", "r2", "i", "names", "normal", "small", "array", "fn", "string", "counter", "k", "i", "n", "j", "w", "t", "m", "q", "string", "i", "c", "a", "b", "R", "n", "counter", "number", "e", "base", "res", "v", "URL", "URLSearchParams", "x", "URL", "e", "s", "i", "s2", "LogLevel", "m", "e", "location", "c", "p", "x", "d", "map", "i", "x", "c", "s", "n", "x", "c", "e", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "TalerPreciseTimestamp", "now", "t", "s", "TalerProtocolTimestamp", "t2", "Duration", "d", "now", "s", "i", "d2", "n", "AbsoluteTime", "t2", "difference", "t", "at", "x", "c", "x", "c", "DenomKeyType", "t", "DenominationPubKey", "p2", "ExchangeProtocolVersion", "MerchantProtocolVersion", "n", "a", "d", "v", "N", "i", "j", "s", "c", "p", "hash", "d", "logger", "n", "TalerSignaturePurpose", "WalletAccountMergeFlags", "c", "p", "x", "bigint", "Edx25519", "L", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "decode", "encode", "p", "i", "d", "encode", "decode", "p", "prefix", "x", "c", "p", "s", "URLSearchParams", "v", "k", "logger", "Headers", "r", "m", "v", "k", "e", "e", "r", "s", "error", "x", "c", "s", "p", "r", "TalerUriType", "TalerUriAction", "string", "q", "URLSearchParams", "v", "k", "URL", "TalerCorebankApi", "MonitorTimeframeParam", "TanChannel", "TalerExchangeApi", "AmlState", "TalerMerchantApi", "TokenFamilyKind", "HttpStatusCode", "LibtoolVersion", "compare", "v", "logger", "logger", "now", "d", "s", "ReserveTransactionType", "logger", "logger", "CreditDebitIndicator", "encodings", "a", "b", "c", "d", "i", "logger", "ContractTermsUtil", "i", "x", "h", "k", "e", "hash", "d", "c", "e", "err", "x", "fnutil", "f", "x", "TransactionMajorState", "TransactionMinorState", "TransactionAction", "TransactionType", "WithdrawalType", "DenomLossEventType", "PaymentStatus", "TransactionAmountMode", "BalanceFlag", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "ExchangeUpdateStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "ProviderPaymentType", "TalerBankConversionCacheEviction", "compare", "TalerCoreBankCacheEviction", "TalerMerchantInstanceCacheEviction", "TalerMerchantManagementCacheEviction", "compare", "compare", "logger", "strings", "s", "i", "c", "i", "x", "n", "c", "s", "NotificationType", "ObservabilityEventType", "e", "encTable", "d", "v", "s", "c", "logger", "h", "v", "k", "_", "p", "h", "e", "match", "l", "initial", "storage", "storage", "error", "d", "logger", "RequestThrottler", "Duration", "DEFAULT_REQUEST_TIMEOUT_MS", "TalerError", "TalerErrorCode", "encodeBody", "getDefaultHeaders", "Headers", "e", "format", "string", "object", "array", "number", "_typeof", "obj", "date", "defaultOptions", "MILLISECONDS_IN_WEEK", "formatDistance", "formatRelative", "ordinalNumber", "number", "valueCallback", "_typeof", "obj", "o", "p", "_setPrototypeOf", "self", "e", "_getPrototypeOf", "i", "Setter", "ValueSetter", "set", "_classCallCheck", "_defineProperties", "i", "_createClass", "Parser", "match", "_typeof", "obj", "_inherits", "_setPrototypeOf", "o", "p", "_createSuper", "_isNativeReflectConstruct", "_getPrototypeOf", "_possibleConstructorReturn", "self", "_assertThisInitialized", "e", "_defineProperty", "EraParser", "parse", "set", "date", "n", "YearParser", "valueCallback", "LocalWeekYearParser", "ISOWeekYearParser", "ExtendedYearParser", "QuarterParser", "StandAloneQuarterParser", "MonthParser", "StandAloneMonthParser", "LocalWeekParser", "ISOWeekParser", "DateParser", "DayOfYearParser", "defaultOptions", "DayParser", "LocalDayParser", "StandAloneLocalDayParser", "ISODayParser", "AMPMParser", "AMPMMidnightParser", "DayPeriodParser", "Hour1to12Parser", "Hour0to23Parser", "Hour0To11Parser", "Hour1To24Parser", "MinuteParser", "SecondParser", "FractionOfSecondParser", "ISOTimezoneWithZParser", "ISOTimezoneParser", "TimestampSecondsParser", "TimestampMillisecondsParser", "parsers", "formatDistanceLocale", "formatDistance", "formatDistance_default", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "formatLong_default", "formatRelativeLocale", "formatRelative", "formatRelative_default", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "number", "localize", "argumentCallback", "localize_default", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "valueCallback", "match_default", "locale", "date", "Context", "createContext", "initial", "useEffect", "h", "useContext", "createContext", "useContext", "CONFIG_FAIL_TRY_AGAIN_MS", "useState", "VERSION", "useEffect", "LibtoolVersion", "error", "TalerError", "h", "ObservableHttpClientLibrary", "TalerAuthenticationHttpClient", "Context", "createContext", "useContext", "useState", "path", "params", "useEffect", "h", "h", "Context", "__export", "p", "h", "e", "createContext", "v", "a", "b", "x", "isDate", "cache", "f", "h", "s", "error", "set", "mutate", "fn", "_", "u2", "f2", "q", "fn", "use", "middleware", "i", "use", "v", "e", "cache", "compare", "_", "t", "cachedData", "T", "error", "now", "timer", "x", "SWRConfig", "i", "i", "k", "n", "invariant", "prefix", "hash", "location", "e", "location", "fn", "invariant", "encodePath", "decodePath", "path", "history", "a", "b", "encodedPath", "location", "n", "const", "EMPTY", "i", "route", "let", "c", "p", "r", "a", "b", "e", "t", "Router", "super", "canRoute", "x", "routeTo", "location", "this", "match", "s", "object", "errors", "FormContext", "e", "q", "errors", "object", "p", "value", "defaultToString", "f", "defaultFromString", "v", "initial", "names", "f", "v", "error", "e", "i18n", "p", "p", "i18n", "errors", "k", "fn", "p", "error", "i18n", "toInteger", "number", "requiredArgs", "_typeof", "obj", "toDate", "requiredArgs", "requiredArgs", "date", "toDate", "toInteger", "requiredArgs", "date", "toDate", "toInteger", "_typeof", "obj", "add", "requiredArgs", "toInteger", "date", "toDate", "requiredArgs", "toDate", "toInteger", "defaultOptions", "getDefaultOptions", "date", "requiredArgs", "date", "toDate", "requiredArgs", "requiredArgs", "toDate", "daysInYear", "maxTime", "millisecondsInMinute", "millisecondsInHour", "minTime", "maxTime", "secondsInHour", "secondsInDay", "secondsInHour", "secondsInWeek", "secondsInYear", "daysInYear", "secondsInMonth", "secondsInQuarter", "_typeof", "obj", "requiredArgs", "requiredArgs", "date", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "difference", "requiredArgs", "toDate", "requiredArgs", "millisecondsInHour", "requiredArgs", "millisecondsInMinute", "requiredArgs", "date", "toDate", "requiredArgs", "date", "toDate", "requiredArgs", "date", "toDate", "requiredArgs", "toDate", "difference", "requiredArgs", "requiredArgs", "toDate", "difference", "requiredArgs", "toInteger", "MILLISECONDS_IN_DAY", "requiredArgs", "date", "toDate", "difference", "startOfUTCISOWeek", "requiredArgs", "date", "toDate", "getUTCISOWeekYear", "requiredArgs", "date", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "requiredArgs", "getUTCISOWeekYear", "date", "startOfUTCISOWeek", "MILLISECONDS_IN_WEEK", "getUTCISOWeek", "requiredArgs", "date", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "startOfUTCWeek", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "date", "toDate", "getUTCWeekYear", "requiredArgs", "date", "toDate", "defaultOptions", "getDefaultOptions", "toInteger", "startOfUTCWeek", "startOfUTCWeekYear", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "getUTCWeekYear", "date", "startOfUTCWeek", "MILLISECONDS_IN_WEEK", "getUTCWeek", "requiredArgs", "date", "toDate", "startOfUTCWeek", "startOfUTCWeekYear", "number", "y", "date", "M", "d", "a", "h", "H", "m", "s", "S", "formatters", "G", "date", "localize", "y", "Y", "getUTCWeekYear", "R", "getUTCISOWeekYear", "u", "Q", "q", "M", "L", "w", "getUTCWeek", "I", "getUTCISOWeek", "d", "D", "E", "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", "formatDistanceLocale", "formatDistance", "formatDistance_default", "buildFormatLongFn", "format", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "buildFormatLongFn", "formatRelativeLocale", "formatRelative", "formatRelative_default", "buildLocalizeFn", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "number", "localize", "buildLocalizeFn", "argumentCallback", "localize_default", "buildMatchFn", "string", "findIndex", "findKey", "object", "array", "buildMatchPatternFn", "string", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "buildMatchPatternFn", "valueCallback", "buildMatchFn", "match_default", "formatDistance_default", "formatRelative_default", "localize_default", "match_default", "requiredArgs", "defaultOptions", "getDefaultOptions", "locale", "toInteger", "toDate", "assign", "object", "object", "assign", "formatDistance", "requiredArgs", "defaultOptions", "getDefaultOptions", "locale", "assign", "toDate", "defaultOptions", "getDefaultOptions", "locale", "format", "delimiter", "m", "requiredArgs", "toDate", "add", "requiredArgs", "date", "toDate", "requiredArgs", "toDate", "i18n", "initial", "p", "e", "n", "p", "i18n", "error", "name", "value", "v", "f", "readField", "object", "p", "error", "_", "i18n", "p", "e", "f", "b", "i18n", "p", "v", "defaultToString", "f", "defaultFromString", "v", "error", "e", "i", "f", "v", "error", "c", "defaultToString", "f", "defaultFromString", "v", "error", "e", "i18n", "p", "v", "p", "i18n", "errors", "k", "p", "i18n", "d", "error", "i18n", "useSWR", "error", "error", "useSWR", "instanceId", "p", "h", "i18n", "e", "i", "p", "i18n", "i", "p", "i18n", "token", "e", "AsyncButton", "p", "i18n", "error", "e", "s", "p", "l", "i18n", "e", "p", "h", "p", "e", "n", "useSWR", "error", "k", "v", "s", "i18n", "e", "code", "number", "initial", "p", "errors", "k", "h", "v", "i18n", "p", "errors", "k", "s", "e", "accountAuthType", "CreatePage", "i18n", "p", "errors", "k", "p", "i18n", "CreatePage", "error", "history", "i18n", "p", "CardTable", "p", "i18n", "Table", "EmptyTable", "CardTable", "o", "i18n", "p", "e", "error", "p", "i18n", "error", "ListPage", "i18n", "EmptyTable", "e", "i", "status", "ListPage", "useSWR", "error", "useSWR", "c", "p", "r", "error", "d", "v", "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", "fn", "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", "recursive", "_", "fn", "mapKeys", "camelCase", "snakeCase", "base", "mapValues", "create", "_extends", "i", "create", "v", "errors", "recursive", "path", "_", "a", "base", "p", "v", "create", "d", "p", "errors", "k", "T", "i18n", "v", "i", "f", "p", "h", "i18n", "initial", "errors", "T", "k", "InputNumber", "i18n", "a", "i", "a", "b", "r", "with_defaults", "CreatePage", "p", "i18n", "errors", "k", "v", "h", "e", "c", "InputNumber", "now", "p", "CreatePage", "r", "error", "useSWR", "error", "o", "p", "r", "w", "d", "error", "CardTable", "p", "i18n", "Table", "o", "EmptyTable", "i", "r", "c", "errors", "k", "d", "e", "events", "a", "b", "p", "h", "i", "i18n", "now", "events", "p", "e", "w", "formatDistance", "p", "i18n", "error", "i18n", "error", "p", "e", "ListPage", "i18n", "p", "d", "CardTable", "p", "date", "d", "i18n", "ListPage", "o", "error", "_", "h", "qrcode", "CreatedSuccessfully", "i18n", "CreatePage", "i18n", "p", "errors", "k", "v", "e", "s", "CreateValidator", "p", "i18n", "CreatedSuccessfully", "CreatePage", "d", "error", "useSWR", "error", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "ListPage", "CardTable", "o", "ListOtpDevices", "i18n", "p", "ListPage", "e", "error", "algorithms", "algorithmsNames", "UpdatePage", "i18n", "p", "errors", "k", "v", "e", "s", "UpdateValidator", "p", "i18n", "CreatedSuccessfully", "UpdatePage", "d", "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", "errors", "k", "InputNumber", "c", "ProductList", "p", "i18n", "CardTable", "error", "UpdatePage", "i18n", "ProductForm", "p", "i18n", "UpdatePage", "error", "CreatePage", "i18n", "p", "errors", "d", "k", "InputNumber", "e", "v", "p", "i18n", "CreatePage", "error", "useSWR", "p", "error", "d", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "ListPage", "CardTable", "o", "i18n", "p", "ListPage", "e", "error", "i18n", "UpdatePage", "i18n", "p", "errors", "d", "k", "InputNumber", "e", "v", "p", "i18n", "UpdatePage", "error", "i18n", "p", "errors", "k", "p", "i18n", "error", "DetailPage", "p", "i18n", "errors", "k", "i18n", "p", "DetailPage", "error", "CreatePage", "i18n", "p", "errors", "k", "CreateTransfer", "p", "i18n", "a", "CreatePage", "error", "useSWR", "o", "p", "v", "error", "d", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "ListPage", "i18n", "d", "CardTable", "o", "s", "p", "a", "h", "ListPage", "v", "convert", "UpdatePage", "p", "i18n", "errors", "k", "Update", "t", "p", "i18n", "UpdatePage", "d", "error", "CreatePage", "i18n", "p", "errors", "k", "p", "i18n", "CreatePage", "error", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "ListPage", "i18n", "CardTable", "o", "i18n", "p", "ListPage", "e", "error", "validMethod", "UpdatePage", "i18n", "p", "errors", "k", "p", "i18n", "UpdatePage", "error", "getBrowserLang", "i18n", "errors", "s", "v", "e", "history", "p", "error", "P", "now", "e", "Update", "ProductList", "CreateTransfer", "ListOtpDevices", "UpdateValidator", "CreateValidator", "h", "i18n", "initial", "Context", "Context", "defaultSettings", "e", "p", "h", "SWRConfig", "e", "map", "i18n"]
+ "sources": ["../../../../node_modules/.pnpm/big-integer@1.6.52/node_modules/big-integer/BigInteger.js", "../../../../node_modules/.pnpm/jed@1.1.1/node_modules/jed/jed.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", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/util.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/PureComponent.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/memo.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/forwardRef.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/Children.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense-list.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/portals.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/render.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/index.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/index.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", "../../../taler-util/src/nacl-fast.ts", "../../../taler-util/src/prng-browser.ts", "../../../taler-util/src/taler-error-codes.ts", "../../../taler-util/src/CancellationToken.ts", "../../../taler-util/src/amounts.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/logging.ts", "../../../taler-util/src/codec.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/bech32.ts", "../../../taler-util/src/segwit_addr.ts", "../../../taler-util/src/bitcoin.ts", "../../../taler-util/src/payto.ts", "../../../taler-util/src/http-common.ts", "../../../taler-util/src/operation.ts", "../../../taler-util/src/taleruri.ts", "../../../taler-util/src/http-client/types.ts", "../../../taler-util/src/http-status-codes.ts", "../../../taler-util/src/http-impl.missing.ts", "../../../taler-util/src/http.ts", "../../../taler-util/src/libtool-version.ts", "../../../taler-util/src/MerchantApiClient.ts", "../../../taler-util/src/RequestThrottler.ts", "../../../taler-util/src/ReserveTransaction.ts", "../../../taler-util/src/TaskThrottler.ts", "../../../taler-util/src/bank-api-client.ts", "../../../taler-util/src/base64.ts", "../../../taler-util/src/contract-terms.ts", "../../../taler-util/src/errors.ts", "../../../taler-util/src/fnutils.ts", "../../../taler-util/src/transactions-types.ts", "../../../taler-util/src/wallet-types.ts", "../../../taler-util/src/http-client/utils.ts", "../../../taler-util/src/http-client/bank-conversion.ts", "../../../taler-util/src/http-client/authentication.ts", "../../../taler-util/src/http-client/bank-core.ts", "../../../taler-util/src/http-client/merchant.ts", "../../../taler-util/src/http-client/challenger.ts", "../../../taler-util/src/http-client/bank-revenue.ts", "../../../taler-util/src/http-client/exchange.ts", "../../../taler-util/src/i18n.ts", "../../../taler-util/src/iban.ts", "../../../taler-util/src/notifications.ts", "../../../taler-util/src/observability.ts", "../../../taler-util/src/rfc3548.ts", "../../../taler-util/src/timer.ts", "../../../taler-util/src/transaction-test-data.ts", "../../../taler-util/src/index.browser.ts", "../../../web-util/src/hooks/useLocalStorage.ts", "../../../web-util/src/utils/observable.ts", "../../../web-util/src/hooks/useLang.ts", "../../../web-util/src/hooks/useMemoryStorage.ts", "../../../web-util/src/hooks/useNotifications.ts", "../../../web-util/src/hooks/useAsyncAsHook.ts", "../../../web-util/src/utils/base64.ts", "../../../web-util/src/utils/request.ts", "../../../web-util/src/utils/http-impl.browser.ts", "../../../web-util/src/utils/http-impl.sw.ts", "../../../web-util/src/utils/route.ts", "../../../web-util/src/context/api.ts", "../../../web-util/src/context/translation.ts", "../../../../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/_lib/buildLocalizeFn/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/_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/startOfWeek/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/constants/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameDay/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/endOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/eachDayOfInterval/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfWeek/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/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/en-US/_lib/localize/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/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMinutes/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getSeconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Setter.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/constants.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/utils.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCDay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISODay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subDays/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/sub/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/index.js", "../../../web-util/src/context/bank-api.ts", "../../../web-util/src/context/activity.ts", "../../../web-util/src/context/challenger-api.ts", "../../../web-util/src/context/merchant-api.ts", "../../../web-util/src/context/exchange-api.ts", "../../../web-util/src/context/navigation.ts", "../../../web-util/src/context/wallet-integration.ts", "../../../web-util/src/components/utils.ts", "../../../web-util/src/components/Attention.tsx", "../../../web-util/src/components/CopyButton.tsx", "../../../web-util/src/components/ErrorLoading.tsx", "../../../web-util/src/components/LangSelector.tsx", "../../../web-util/src/components/Loading.tsx", "../../../web-util/src/components/Header.tsx", "../../../web-util/src/components/Footer.tsx", "../../../web-util/src/components/Button.tsx", "../../../web-util/src/components/ShowInputErrorLabel.tsx", "../../../web-util/src/components/NotificationBanner.tsx", "../../../web-util/src/components/ToastBanner.tsx", "../../../web-util/src/forms/Calendar.tsx", "../../../web-util/src/forms/Caption.tsx", "../../../web-util/src/forms/InputLine.tsx", "../../../web-util/src/forms/InputArray.tsx", "../../../web-util/src/forms/FormProvider.tsx", "../../../web-util/src/forms/forms.ts", "../../../web-util/src/forms/Group.tsx", "../../../web-util/src/forms/InputAbsoluteTime.tsx", "../../../web-util/src/forms/Dialog.tsx", "../../../web-util/src/forms/useField.ts", "../../../web-util/src/forms/InputAmount.tsx", "../../../web-util/src/forms/InputChoiceHorizontal.tsx", "../../../web-util/src/forms/InputChoiceStacked.tsx", "../../../web-util/src/forms/InputFile.tsx", "../../../web-util/src/forms/InputInteger.tsx", "../../../web-util/src/forms/InputSelectMultiple.tsx", "../../../web-util/src/forms/InputSelectOne.tsx", "../../../web-util/src/forms/InputText.tsx", "../../../web-util/src/forms/InputTextArea.tsx", "../../../web-util/src/forms/InputToggle.tsx", "../../../web-util/src/forms/DefaultForm.tsx", "../../../web-util/src/forms/TimePicker.tsx", "../../../web-util/src/forms/ui-form.ts", "../../../web-util/src/forms/converter.ts", "../../../web-util/src/stories.tsx", "../../src/Application.tsx", "../../../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/core/dist/index.mjs", "../../../../node_modules/.pnpm/swr@2.2.2_react@18.2.0/node_modules/swr/_internal/dist/index.mjs", "../../../../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-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/Routing.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", "../../src/components/exception/loading.tsx", "../../src/components/menu/index.tsx", "../../src/AdminRoutes.tsx", "../../src/paths/admin/create/index.tsx", "../../src/context/session.ts", "../../src/paths/admin/create/CreatePage.tsx", "../../src/components/exception/AsyncButton.tsx", "../../src/components/modal/index.tsx", "../../src/utils/constants.ts", "../../src/components/form/FormProvider.tsx", "../../src/components/form/Input.tsx", "../../src/components/form/useField.tsx", "../../src/hooks/async.ts", "../../src/components/instance/DefaultInstanceFormFields.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/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/cloneObject/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/formatDistance/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/isFuture/index.js", "../../src/components/form/InputDuration.tsx", "../../src/components/picker/DurationPicker.tsx", "../../src/components/form/InputGroup.tsx", "../../src/components/form/useGroupField.tsx", "../../src/components/form/InputImage.tsx", "../../src/components/form/InputLocation.tsx", "../../src/components/form/InputSelector.tsx", "../../src/components/form/InputToggle.tsx", "../../src/components/form/InputWithAddon.tsx", "../../src/components/form/TextField.tsx", "../../src/utils/table.ts", "../../src/paths/admin/list/index.tsx", "../../src/components/ErrorLoadingMerchant.tsx", "../../src/hooks/instance.ts", "../../src/paths/login/index.tsx", "../../src/paths/admin/list/View.tsx", "../../src/paths/admin/list/TableActive.tsx", "../../src/components/menu/NavigationBar.tsx", "../../src/components/menu/SideBar.tsx", "../../src/components/menu/LangSelector.tsx", "../../src/i18n/strings.ts", "../../src/hooks/bank.ts", "../../src/hooks/preference.ts", "../../src/paths/instance/accounts/create/index.tsx", "../../src/paths/instance/accounts/create/CreatePage.tsx", "../../src/components/form/InputPaytoForm.tsx", "../../src/paths/instance/accounts/update/UpdatePage.tsx", "../../src/paths/instance/accounts/list/index.tsx", "../../src/paths/notfound/index.tsx", "../../src/paths/instance/accounts/list/ListPage.tsx", "../../src/paths/instance/accounts/list/Table.tsx", "../../src/paths/instance/accounts/update/index.tsx", "../../src/paths/instance/kyc/list/index.tsx", "../../src/paths/instance/kyc/list/ListPage.tsx", "../../src/paths/instance/orders/create/index.tsx", "../../src/hooks/product.ts", "../../src/hooks/webhooks.ts", "../../src/paths/instance/orders/create/CreatePage.tsx", "../../src/components/form/InputCurrency.tsx", "../../src/components/form/InputDate.tsx", "../../src/components/picker/DatePicker.tsx", "../../src/components/form/InputNumber.tsx", "../../src/components/product/InventoryProductForm.tsx", "../../src/components/form/InputSearchOnList.tsx", "../../src/components/product/NonInventoryProductForm.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/ProductList.tsx", "../../src/utils/amount.ts", "../../src/paths/instance/orders/details/index.tsx", "../../src/hooks/order.ts", "../../src/paths/instance/orders/details/DetailPage.tsx", "../../src/paths/instance/orders/list/Table.tsx", "../../src/paths/instance/orders/details/Timeline.tsx", "../../src/paths/instance/orders/list/index.tsx", "../../src/components/form/JumpToElementById.tsx", "../../src/paths/instance/orders/list/ListPage.tsx", "../../src/paths/instance/otp_devices/create/index.tsx", "../../src/paths/instance/otp_devices/create/CreatePage.tsx", "../../src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx", "../../src/components/exception/QR.tsx", "../../src/components/notifications/CreatedSuccessfully.tsx", "../../src/paths/instance/otp_devices/list/index.tsx", "../../src/hooks/otp.ts", "../../src/paths/instance/otp_devices/list/ListPage.tsx", "../../src/paths/instance/otp_devices/list/Table.tsx", "../../src/paths/instance/otp_devices/update/index.tsx", "../../src/paths/instance/otp_devices/update/UpdatePage.tsx", "../../src/paths/instance/products/create/index.tsx", "../../src/paths/instance/products/create/CreatePage.tsx", "../../src/components/product/ProductForm.tsx", "../../src/components/form/InputStock.tsx", "../../src/paths/instance/products/list/index.tsx", "../../src/paths/instance/products/list/Table.tsx", "../../src/paths/instance/products/update/index.tsx", "../../src/paths/instance/products/update/UpdatePage.tsx", "../../src/paths/instance/templates/create/index.tsx", "../../src/paths/instance/templates/create/CreatePage.tsx", "../../src/paths/instance/templates/list/index.tsx", "../../src/hooks/templates.ts", "../../src/paths/instance/templates/list/ListPage.tsx", "../../src/paths/instance/templates/list/Table.tsx", "../../src/paths/instance/templates/qr/index.tsx", "../../src/paths/instance/templates/qr/QrPage.tsx", "../../src/paths/instance/templates/update/index.tsx", "../../src/paths/instance/templates/update/UpdatePage.tsx", "../../src/paths/instance/templates/use/index.tsx", "../../src/paths/instance/templates/use/UsePage.tsx", "../../src/paths/instance/token/index.tsx", "../../src/paths/instance/token/DetailPage.tsx", "../../src/paths/instance/transfers/create/index.tsx", "../../src/paths/instance/transfers/create/CreatePage.tsx", "../../src/paths/instance/transfers/list/index.tsx", "../../src/hooks/transfer.ts", "../../src/paths/instance/transfers/list/ListPage.tsx", "../../src/paths/instance/transfers/list/Table.tsx", "../../src/paths/instance/update/index.tsx", "../../src/paths/instance/update/UpdatePage.tsx", "../../src/paths/instance/webhooks/create/index.tsx", "../../src/paths/instance/webhooks/create/CreatePage.tsx", "../../src/paths/instance/webhooks/list/index.tsx", "../../src/paths/instance/webhooks/list/ListPage.tsx", "../../src/paths/instance/webhooks/list/Table.tsx", "../../src/paths/instance/webhooks/update/index.tsx", "../../src/paths/instance/webhooks/update/UpdatePage.tsx", "../../src/paths/settings/index.tsx", "../../src/context/settings.ts", "../../src/settings.ts", "../../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 || alphabet) 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 || alphabet) 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", "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", "/**\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", "/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\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 `_.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", "// 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 * An error response did not include an error code in the format expected by the client. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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. Details should be in the local logs. Check if you are using the latest available version or file a report with the developers.\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 in the expected format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 * The operation timed out. Trying again might help. Check the network connection.\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 protocol version given by the server does not follow the required format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 the right data format, but the content did not satisfy the protocol. Please file a bug report.\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 an option is set to an invalid value. Check the logs and fix the local 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 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. Please file a bug report.\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 token used by the client to authorize the request does not grant the required permissions for the request. Check the requirements and obtain a suitable authorization token to proceed.\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 GENERIC_TOKEN_PERMISSION_INSUFFICIENT = 16,\n\n\n /**\n * The HTTP method used is invalid for this endpoint. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you used the correct URL and/or file a report with the developers of the client software.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 were malformed and caused the server to not be able to handle the request. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check that you are using the correct syntax as of RFC 8905 and/or that you entered the bank account number correctly.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 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 body in the request could not be decompressed by the server. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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_COMPRESSION_INVALID = 28,\n\n\n /**\n * The currency involved in the operation is not acceptable for this server. Check your configuration and make sure the currency specified for a given service provider is one of the currencies supported by that provider.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\n * Returned with an HTTP status code of #MHD_HTTP_CONTENT_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 refused the request due to lack of proper 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 GENERIC_UNAUTHORIZED = 40,\n\n\n /**\n * The service refused the request as the given authorization token is unknown.\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 GENERIC_TOKEN_UNKNOWN = 41,\n\n\n /**\n * The service refused the request as the given authorization token expired.\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 GENERIC_TOKEN_EXPIRED = 42,\n\n\n /**\n * The service refused the request as the given authorization token is malformed.\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 GENERIC_TOKEN_MALFORMED = 43,\n\n\n /**\n * The service refused the request due to lack of proper rights on the resource.\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 GENERIC_FORBIDDEN = 44,\n\n\n /**\n * The service failed initialize its connection to the database. The system administrator should check that the service has permissions to access the database and that the database is running.\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. The system administrator should check that the database is running.\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. The system administrator should check that the database is running and review the service logs.\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. The system administrator should check that the database is running and review the service logs.\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 unrecoverable error trying to commit a transaction to the database. The system administrator should check that the database is running and review the service logs.\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; it should only happen if some client maliciously tries to create conflicting concurrent transactions. It could also be a sign of a missing index. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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). Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. The system administrator should check if the resource files are installed in the correct location and are readable to the 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 GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply. The system administrator should investigate the logs and check if the templates are well-formed.\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 coin is not known to the exchange (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_GENERIC_COIN_UNKNOWN = 1019,\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 failed to start a KYC attribute conversion helper process. It is likely configured incorrectly.\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_KYC_CONVERTER_FAILED = 1037,\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 client provided an unknown commitment for an age-withdraw 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 EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN = 1161,\n\n\n /**\n * The total sum of amounts from the denominations did overflow.\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_AGE_WITHDRAW_AMOUNT_OVERFLOW = 1162,\n\n\n /**\n * The total sum of value and fees from the denominations differs from the committed amount with fees.\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_AGE_WITHDRAW_AMOUNT_INCORRECT = 1163,\n\n\n /**\n * The original commitment differs from the calculated hash\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_AGE_WITHDRAW_REVEAL_INVALID_HASH = 1164,\n\n\n /**\n * The maximum age in the commitment is too large for the reserve\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_MAXIMUM_AGE_TOO_LARGE = 1165,\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 coin 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_COIN_HISTORY_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_RESERVE_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 * Withdrawal from the reserve requires age restriction to be set.\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_AGE_RESTRICTION_REQUIRED = 1681,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys or the helpers had no denominations (properly) configured.\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_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_BAD_GATEWAY (502).\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 * TOTP key 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_TOTP_KEY_INVALID = 1980,\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 reward ID is unknown. This could happen if the reward 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_REWARD_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 backend could not find the OTP device(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_OTP_DEVICE_UNKNOWN = 2021,\n\n\n /**\n * The account 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_ACCOUNT_UNKNOWN = 2022,\n\n\n /**\n * The wire hash 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 MERCHANT_GENERIC_H_WIRE_MALFORMED = 2023,\n\n\n /**\n * The currency specified in the operation does not work with the current state of the given resource.\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_GENERIC_CURRENCY_MISMATCH = 2024,\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_BAD_REQUEST (400).\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_BAD_REQUEST (400).\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 exchange does not support the selected bank account of the merchant. Likely the merchant had stale data on the bank accounts of the exchange and thus selected an inappropriate exchange when making the offer.\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_WIRE_METHOD_UNSUPPORTED = 2175,\n\n\n /**\n * The payment requires the wallet to select a choice from the choices array and pass it in the 'choice_index' field of 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 MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING = 2176,\n\n\n /**\n * The 'choice_index' field is 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 MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS = 2177,\n\n\n /**\n * The provided 'tokens' array does not match with the required input tokens of the order.\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_INPUT_TOKENS_MISMATCH = 2178,\n\n\n /**\n * Invalid token issue signature (blindly signed by merchant) for provided token.\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_TOKEN_ISSUE_SIG_INVALID = 2179,\n\n\n /**\n * Invalid token use signature (EdDSA, signed by wallet) for provided token.\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_TOKEN_USE_SIG_INVALID = 2180,\n\n\n /**\n * The provided number of tokens does not match the required 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 MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH = 2181,\n\n\n /**\n * The provided number of token envelopes does not match the specified 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 MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH = 2182,\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 * A token family with this ID but conflicting data 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_POST_TOKEN_FAMILY_CONFLICT = 2225,\n\n\n /**\n * The backend is unaware of a token family with the given ID.\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_PATCH_TOKEN_FAMILY_NOT_FOUND = 2226,\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 are waiting for the exchange to provide us with key material before checking the wire transfer.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS = 2258,\n\n\n /**\n * We are waiting for the exchange to provide us with the list of aggregated transactions.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST = 2259,\n\n\n /**\n * The endpoint indicated in the wire transfer does not belong to a GNU Taler exchange.\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_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE = 2260,\n\n\n /**\n * The exchange indicated in the wire transfer claims to know nothing about the wire transfer.\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_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND = 2261,\n\n\n /**\n * The interaction with the exchange is delayed due to rate limiting.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED = 2262,\n\n\n /**\n * We experienced a transient failure in our interaction with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE = 2263,\n\n\n /**\n * The response from the exchange was unacceptable and should be reviewed with an auditor.\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_EXCHANGE_TRANSFERS_HARD_FAILURE = 2264,\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_REWARD_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_REWARD_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_REWARD_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The reward 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_REWARD_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_REWARD_PICKUP_AMOUNT_EXCEEDS_REWARD_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_REWARD_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The merchant instance has no active bank accounts configured. However, at least one bank account must be available to create 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 merchant backend failed to obtain the current local time.\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; likely 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 * A conflicting order (sharing the same order identifier) already exists at this merchant backend instance.\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 order creation request is invalid because the given 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 order creation request is invalid because the delivery date given 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 order creation request is invalid because a wire deadline of \"never\" 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_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The order creation request is invalid because the given payment deadline 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 order creation request is invalid because the given refund deadline 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 * The backend does not trust any exchange that would allow funds to be wired to any bank account of this instance using the wire method specified with the order. Note that right now, we do not support the use of exchange bank accounts with mandatory currency conversion.\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_NO_EXCHANGES_FOR_WIRE_METHOD = 2509,\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. Deletion may work later after the offer has expired if it remains unpaid.\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 exceeds the original price paid by the customer.\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 * Only paid orders can be refunded, and the frontend specified an unpaid order to issue a refund for.\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 ever 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 token family slug provided in this order could not be found in the merchant 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 MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN = 2533,\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 amount transferred differs between what was submitted and what the exchange claimed.\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_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS = 2563,\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 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 MERCHANT_PRIVATE_ACCOUNT_DELETE_UNKNOWN_ACCOUNT = 2626,\n\n\n /**\n * The bank account specified in the request already exists at the merchant.\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_ACCOUNT_EXISTS = 2627,\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 requested exchange does not allow rewards.\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_REWARDS_NOT_ALLOWED = 2701,\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 rewards 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_REWARD_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the rewards 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_REWARD_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the reward, and it was configured for rewardping. However, the funds remaining are insufficient to cover the reward, 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_REWARD_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the reward.\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_REWARD_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 * The OTP device 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_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS = 2851,\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 * The requested resource could not be 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 AUDITOR_RESOURCE_NOT_FOUND = 3102,\n\n\n /**\n * The URI is missing a path component.\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 AUDITOR_URI_MISSING_PATH_COMPONENT = 3103,\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 * 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 client tried to register a new account under a reserved username (like 'admin' for example).\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_RESERVED_USERNAME_CONFLICT = 5120,\n\n\n /**\n * The client tried to register a new account with an username 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 BANK_REGISTER_USERNAME_REUSE = 5121,\n\n\n /**\n * The client tried to register a new account with a payto:// URI 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 BANK_REGISTER_PAYTO_URI_REUSE = 5122,\n\n\n /**\n * The client tried to delete an account with a non null 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 BANK_ACCOUNT_BALANCE_NOT_ZERO = 5123,\n\n\n /**\n * The client tried to create a transaction or an operation that credit an unknown account.\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_UNKNOWN_CREDITOR = 5124,\n\n\n /**\n * The client tried to create a transaction or an operation that debit an unknown account.\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_UNKNOWN_DEBTOR = 5125,\n\n\n /**\n * The client tried to perform an action prohibited for exchange accounts.\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_ACCOUNT_IS_EXCHANGE = 5126,\n\n\n /**\n * The client tried to perform an action reserved for exchange accounts.\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_ACCOUNT_IS_NOT_EXCHANGE = 5127,\n\n\n /**\n * Received currency conversion is wrong.\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_BAD_CONVERSION = 5128,\n\n\n /**\n * The account referenced in this operation is missing tan info for the chosen channel.\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_MISSING_TAN_INFO = 5129,\n\n\n /**\n * The client attempted to confirm a transaction with incomplete info.\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_INCOMPLETE = 5130,\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 BANK_TAN_RATE_LIMITED = 5131,\n\n\n /**\n * This TAN channel is not supported.\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 BANK_TAN_CHANNEL_NOT_SUPPORTED = 5132,\n\n\n /**\n * Failed to send TAN using the helper script. Either script is not found, or script timeout, or script 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 BANK_TAN_CHANNEL_SCRIPT_FAILED = 5133,\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 BANK_TAN_CHALLENGE_FAILED = 5134,\n\n\n /**\n * A non-admin user has tried to change their legal 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_NON_ADMIN_PATCH_LEGAL_NAME = 5135,\n\n\n /**\n * A non-admin user has tried to change their debt limit.\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_NON_ADMIN_PATCH_DEBT_LIMIT = 5136,\n\n\n /**\n * A non-admin user has tried to change their password whihout providing the current 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 BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD = 5137,\n\n\n /**\n * Provided old password does not match current password.\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_PATCH_BAD_OLD_PASSWORD = 5138,\n\n\n /**\n * An admin user has tried to become an 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 BANK_PATCH_ADMIN_EXCHANGE = 5139,\n\n\n /**\n * A non-admin user has tried to change their cashout account.\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_NON_ADMIN_PATCH_CASHOUT = 5140,\n\n\n /**\n * A non-admin user has tried to change their contact info.\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_NON_ADMIN_PATCH_CONTACT = 5141,\n\n\n /**\n * The client tried to create a transaction that credit the admin account.\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_ADMIN_CREDITOR = 5142,\n\n\n /**\n * The referenced challenge 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_CHALLENGE_NOT_FOUND = 5143,\n\n\n /**\n * The referenced challenge has expired.\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_TAN_CHALLENGE_EXPIRED = 5144,\n\n\n /**\n * A non-admin user has tried to create an account with 2fa.\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_NON_ADMIN_SET_TAN_CHANNEL = 5145,\n\n\n /**\n * A non-admin user has tried to set their minimum cashout amount.\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_NON_ADMIN_SET_MIN_CASHOUT = 5146,\n\n\n /**\n * Amount of currency conversion it less than the minimum 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 BANK_CONVERSION_AMOUNT_TO_SMALL = 5147,\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_CONTENT_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_CONTENT_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 a reward) 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_REWARD_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 * The exchange's self-reported base URL does not match the one that the wallet is using.\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_BASE_URL_MISMATCH = 7030,\n\n\n /**\n * The order has already been paid 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_PAID = 7031,\n\n\n /**\n * An exchange that is required for some request is currently 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_EXCHANGE_UNAVAILABLE = 7032,\n\n\n /**\n * An exchange entry is still used by the exchange, thus it can't be deleted without purging.\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_ENTRY_USED = 7033,\n\n\n /**\n * The wallet database is unavailable and the wallet thus is not operational.\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_DB_UNAVAILABLE = 7034,\n\n\n /**\n * A taler:// URI is malformed and 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_TALER_URI_MALFORMED = 7035,\n\n\n /**\n * A wallet-core request was cancelled and thus can't provide a 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_CORE_REQUEST_CANCELLED = 7036,\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_CONTENT_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 * The Donau failed to perform the operation as it could not find the private keys. This is a problem with the Donau 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 DONAU_GENERIC_KEYS_MISSING = 8607,\n\n\n /**\n * The signature of the charity key 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 DONAU_CHARITY_SIGNATURE_INVALID = 8608,\n\n\n /**\n * The charity 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 DONAU_CHARITY_NOT_FOUND = 8609,\n\n\n /**\n * The donation amount specified in the request exceeds the limit of the charity.\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 DONAU_EXCEEDING_DONATION_LIMIT = 8610,\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 * The client is unknown or unauthorized.\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 CHALLENGER_GENERIC_CLIENT_UNKNOWN = 9750,\n\n\n /**\n * The client is not authorized to use the given redirect URI.\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 CHALLENGER_GENERIC_CLIENT_FORBIDDEN_BAD_REDIRECT_URI = 9751,\n\n\n /**\n * The service failed to execute its helper process to send the challenge.\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 CHALLENGER_HELPER_EXEC_FAILED = 9752,\n\n\n /**\n * The grant is unknown to the service (it could also have 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 CHALLENGER_GRANT_UNKNOWN = 9753,\n\n\n /**\n * The code given is not even well-formed.\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 CHALLENGER_CLIENT_FORBIDDEN_BAD_CODE = 9754,\n\n\n /**\n * The service is not aware of the referenced validation process.\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 CHALLENGER_GENERIC_VALIDATION_UNKNOWN = 9755,\n\n\n /**\n * The code given 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 CHALLENGER_CLIENT_FORBIDDEN_INVALID_CODE = 9756,\n\n\n /**\n * Too many attempts have been made, validation is temporarily disabled for this address.\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 CHALLENGER_TOO_MANY_ATTEMPTS = 9757,\n\n\n /**\n * The PIN code provided is incorrect.\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 CHALLENGER_INVALID_PIN = 9758,\n\n\n /**\n * The token cannot be valid as no address was ever provided by the client.\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 CHALLENGER_MISSING_ADDRESS = 9759,\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", "/*\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) 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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n renderContext,\n} from \"./codec.js\";\nimport { CurrencySpecification } from \"./index.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 * Separator character between integer and fractional\n */\nexport const FRAC_SEPARATOR = \".\";\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\n/**\n * Immutable amount.\n */\nexport class Amount {\n static from(a: AmountLike): Amount {\n return new Amount(Amounts.parseOrThrow(a), 0);\n }\n\n static zeroOfCurrency(currency: string): Amount {\n return new Amount(Amounts.zeroOfCurrency(currency), 0);\n }\n\n add(...a: AmountLike[]): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.add(this.val, ...a);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n mult(n: number): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.mult(this, n);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n toJson(): AmountJson {\n return { ...this.val };\n }\n\n toString(): AmountString {\n return Amounts.stringify(this.val);\n }\n\n private constructor(\n private val: AmountJson,\n private saturated: number,\n ) {}\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 function codecForAmountString(): Codec<AmountString> {\n return {\n decode(x: any, c?: Context): AmountString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (Amounts.parse(x) === undefined) {\n throw new DecodingError(\n `invalid amount at ${renderContext(c)} got \"${x}\"`,\n );\n }\n return x as AmountString;\n },\n };\n}\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 = string | AmountString | AmountJson | Amount;\n\nexport interface DivmodResult {\n quotient: number;\n remainder: AmountJson;\n}\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 if (amt instanceof Amount) {\n return amt.toJson();\n }\n return amt;\n }\n\n static divmod(a1: AmountLike, a2: AmountLike): DivmodResult {\n const am1 = Amounts.jsonifyAmount(a1);\n const am2 = Amounts.jsonifyAmount(a2);\n if (am1.currency != am2.currency) {\n throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);\n }\n\n const x1 =\n BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);\n const x2 =\n BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);\n\n const quotient = x1 / x2;\n const remainderScaled = x1 % x2;\n\n return {\n quotient: Number(quotient),\n remainder: {\n currency: am1.currency,\n value: Number(remainderScaled / BigInt(amountFractionalBase)),\n fraction: Number(remainderScaled % BigInt(amountFractionalBase)),\n },\n };\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 * Check whether a string is a valid currency for a Taler amount.\n */\n static isCurrency(s: string): boolean {\n return /^[a-zA-Z]{1,11}$/.test(s);\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n *\n * Currency name size limit is 11 of ASCII letters\n * Fraction size limit is 8\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z]{1,11}):([0-9]+)([.][0-9]{1,8})?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || FRAC_SEPARATOR + \"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 (s instanceof Amount) {\n return s.toJson();\n }\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 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 multiplied 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): AmountString {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}` as AmountString;\n }\n\n static amountHasSameCurrency(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 isSameCurrency(curr1: string, curr2: string): boolean {\n return curr1.toLowerCase() === curr2.toLowerCase();\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 + FRAC_SEPARATOR;\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 static stringifyValueWithSpec(\n value: AmountJson,\n spec: CurrencySpecification,\n ): { currency: string; normal: string; small?: string } {\n const strValue = Amounts.stringifyValue(value);\n const pos = strValue.indexOf(FRAC_SEPARATOR);\n const originalPosition = pos < 0 ? strValue.length : pos;\n\n let currency = value.currency;\n const names = Object.keys(spec.alt_unit_names);\n let FRAC_POS_NEW_POSITION = originalPosition;\n //find symbol\n //FIXME: this should be based on a cache to speed up\n if (names.length > 0) {\n let unitIndex: string = \"0\"; //default entry by DD51\n names.forEach((index) => {\n const i = Number.parseInt(index, 10);\n if (Number.isNaN(i)) return; //skip\n if (originalPosition - i <= 0) return; //too big\n if (originalPosition - i < FRAC_POS_NEW_POSITION) {\n FRAC_POS_NEW_POSITION = originalPosition - i;\n unitIndex = index;\n }\n });\n currency = spec.alt_unit_names[unitIndex];\n }\n\n if (originalPosition === FRAC_POS_NEW_POSITION) {\n const { normal, small } = splitNormalAndSmall(\n strValue,\n originalPosition,\n spec,\n );\n return { currency, normal, small };\n }\n\n const intPart = strValue.substring(0, originalPosition);\n const fracPArt = strValue.substring(originalPosition + 1);\n //indexSize is always smaller than originalPosition\n const newValue =\n intPart.substring(0, FRAC_POS_NEW_POSITION) +\n FRAC_SEPARATOR +\n intPart.substring(FRAC_POS_NEW_POSITION) +\n fracPArt;\n const { normal, small } = splitNormalAndSmall(\n newValue,\n FRAC_POS_NEW_POSITION,\n spec,\n );\n return { currency, normal, small };\n }\n}\n\nfunction splitNormalAndSmall(\n decimal: string,\n fracSeparatorIndex: number,\n spec: CurrencySpecification,\n): { normal: string; small?: string } {\n let normal: string;\n let small: string | undefined;\n if (\n decimal.length - fracSeparatorIndex - 1 >\n spec.num_fractional_normal_digits\n ) {\n const limit = fracSeparatorIndex + spec.num_fractional_normal_digits + 1;\n normal = decimal.substring(0, limit);\n small = decimal.substring(limit);\n } else {\n normal = decimal;\n small = undefined;\n }\n return { normal, small };\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 //Include URL type for \"url\" and \"base\" params.\n constructor(url: string | URL, base?: string | URL) {\n let parsedBase = null;\n if (base !== undefined) {\n if (base instanceof URL) {\n base = base.href;\n }\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n if (url instanceof URL) {\n url = url.href;\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) 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\nlet globalLogLevel = LogLevel.Info;\nconst byTagLogLevel: Record<string, LogLevel> = {};\n\nlet nativeLogging: boolean = false;\n\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString\nError.prototype.toString = function () {\n if (\n this === null ||\n (typeof this !== \"object\" && typeof this !== \"function\")\n ) {\n throw new TypeError();\n }\n let name = this.name;\n name = name === undefined ? \"Error\" : `${name}`;\n let msg = this.message;\n msg = msg === undefined ? \"\" : `${msg}`;\n\n let cause = \"\";\n if (\"cause\" in this) {\n cause = `\\n Caused by: ${this.cause}`;\n }\n return `${name}: ${msg}${cause}`;\n};\n\nexport function getGlobalLogLevel(): string {\n return globalLogLevel;\n}\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nexport function enableNativeLogging() {\n nativeLogging = true;\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 writeNativeLog(\n message: any,\n tag: string,\n level: number,\n args: any[],\n): void {\n const logFn = (globalThis as any).__nativeLog;\n if (logFn) {\n let m: string;\n if (args.length == 0) {\n m = message;\n } else {\n m = message + \" \" + args.toString();\n }\n logFn(level, tag, message);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 2, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 3, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 4, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 1, args);\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", "/*\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\nimport { j2s } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\nconst logger = new Logger(\"codec.ts\");\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 * Return a codec for a value that must be a string.\n */\nexport function codecForStringURL(shouldEndWithSlash?: boolean): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return x;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n }\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForURL(shouldEndWithSlash?: boolean): Codec<URL> {\n return {\n decode(x: any, c?: Context): URL {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return url;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\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 function codecForLazy<V>(innerCodec: () => Codec<V>): Codec<V> {\n let instance: Codec<V> | undefined = undefined\n return {\n decode(x: any, c?: Context): V {\n if (instance === undefined) {\n instance = innerCodec()\n }\n return instance.decode(x, c);\n },\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 if (logger.shouldLogTrace()) {\n logger.trace(`offending value: ${j2s(x)}`);\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\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 reuse 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 * as argon2 from \"./argon2.js\";\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\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\nimport { AmountLike, Amounts } from \"./amounts.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 hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n ): 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 async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n if (tart) {\n return tart.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\n }\n return await argon2.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\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 global/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 public 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 public 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\n/**\n * This makes the assumption that the uint64 fits a float,\n * which should be true for all Taler protocol messages.\n */\nexport function bufferForUint64(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(8);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n if (n < 0 || !Number.isInteger(n)) {\n throw Error(\"non-negative integer expected\");\n }\n dv.setBigUint64(0, BigInt(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 MERCHANT_REFUND = 1102,\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 WALLET_PURSE_DELETE = 1220,\n WALLET_COIN_HISTORY = 1209,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n TALER_SIGNATURE_AML_DECISION = 1350,\n TALER_SIGNATURE_AML_QUERY = 1351,\n TALER_SIGNATURE_MASTER_AML_KEY = 1017,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport 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 const PublishedAgeRestrictionBaseKey: Edx25519PublicKey = decodeCrock(\n \"CH0VKFDZ2GWRWHQBBGEK9MWV5YDQVJ0RXEE0KYT3NMB69F0R96TG\",\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 < numPrivs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-commitment\"),\n salt: bufferForUint32(i),\n });\n\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n privs.push(priv);\n }\n\n for (let i = numPrivs; i < numPubs; i++) {\n const deriveSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-factor\"),\n salt: bufferForUint32(i),\n });\n const pub = await Edx25519.publicKeyDerive(\n PublishedAgeRestrictionBaseKey,\n deriveSeed,\n );\n pubs.push(pub);\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!\nexport type 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\nexport async 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\nexport async 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 nonce: EncryptionNonce,\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(nonce, key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n nonce: EncryptionNonce,\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(nonce, 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\nexport function amountToBuffer(amount: AmountLike): Uint8Array {\n const amountJ = Amounts.jsonifyAmount(amount);\n const buffer = new ArrayBuffer(8 + 4 + 12);\n const dvbuf = new DataView(buffer);\n const u8buf = new Uint8Array(buffer);\n const curr = stringToBytes(amountJ.currency);\n if (typeof dvbuf.setBigUint64 !== \"undefined\") {\n dvbuf.setBigUint64(0, BigInt(amountJ.value));\n } else {\n const arr = bigint(amountJ.value).toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n dvbuf.setUint8(offset++, arr[i]);\n }\n }\n dvbuf.setUint32(8, amountJ.fraction);\n u8buf.set(curr, 8 + 4);\n\n return u8buf;\n}\n\nexport function timestampRoundedToBuffer(\n ts: TalerProtocolTimestamp,\n): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.t_s) * BigInt(1000 * 1000);\n v.setBigUint64(0, s);\n } else {\n const s =\n ts.t_s === \"never\" ? bigint.zero : bigint(ts.t_s).multiply(1000 * 1000);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n\nexport function durationRoundedToBuffer(ts: TalerProtocolDuration): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.d_us);\n v.setBigUint64(0, s);\n } else {\n const s = ts.d_us === \"forever\" ? bigint.zero : bigint(ts.d_us);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\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, Context, renderContext } from \"./codec.js\";\n\ndeclare const flavor_AbsoluteTime: unique symbol;\ndeclare const flavor_TalerProtocolTimestamp: unique symbol;\ndeclare const flavor_TalerPreciseTimestamp: unique symbol;\n\nconst opaque_AbsoluteTime: unique symbol = Symbol(\"opaque_AbsoluteTime\");\n\n// FIXME: Make this opaque!\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n\n readonly _flavor?: typeof flavor_AbsoluteTime;\n\n // Make the type opaque, we only want our constructors\n // to able to create an AbsoluteTime value.\n [opaque_AbsoluteTime]: true;\n}\n\nexport interface TalerProtocolTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n readonly _flavor?: typeof flavor_TalerProtocolTimestamp;\n}\n\n/**\n * Precise timestamp, typically used in the wallet-core\n * API but not in other Taler APIs so far.\n */\nexport interface TalerPreciseTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n /**\n * Optional microsecond offset (non-negative integer).\n */\n readonly off_us?: number;\n\n readonly _flavor?: typeof flavor_TalerPreciseTimestamp;\n}\n\nexport namespace TalerPreciseTimestamp {\n export function now(): TalerPreciseTimestamp {\n const absNow = AbsoluteTime.now();\n return AbsoluteTime.toPreciseTimestamp(absNow);\n }\n\n export function round(t: TalerPreciseTimestamp): TalerProtocolTimestamp {\n return {\n t_s: t.t_s,\n };\n }\n\n export function fromSeconds(s: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(s),\n off_us: Math.floor((s - Math.floor(s)) / 1000 / 1000),\n };\n }\n\n export function fromMilliseconds(ms: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(ms / 1000),\n off_us: Math.floor((ms - Math.floor(ms / 1000) * 1000) * 1000),\n };\n }\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toProtocolTimestamp(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 isNever(t: TalerProtocolTimestamp): boolean {\n return t.t_s === \"never\";\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\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\n/**\n * Timeshift in milliseconds.\n */\nlet timeshift = 0;\n\n/**\n * Set timetravel offset in milliseconds.\n *\n * Use carefully and only for testing.\n */\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function toMilliseconds(d: Duration): number {\n if (d.d_ms === \"forever\") {\n return Number.MAX_VALUE;\n }\n return d.d_ms;\n }\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 /**\n * Compare two durations. Returns 0 when equal, -1 when a < b\n * and +1 when a > b.\n */\n export function cmp(d1: Duration, d2: Duration): 1 | 0 | -1 {\n if (d1.d_ms === \"forever\") {\n if (d2.d_ms === \"forever\") {\n return 0;\n }\n return 1;\n }\n if (d2.d_ms === \"forever\") {\n return -1;\n }\n if (d1.d_ms == d2.d_ms) {\n return 0;\n }\n if (d1.d_ms > d2.d_ms) {\n return 1;\n }\n return -1;\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 function fromSpec(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\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: Math.floor(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 fromMilliseconds(ms: number): Duration {\n return {\n d_ms: ms,\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 getStampMsNow(): number {\n return new Date().getTime();\n }\n\n export function getStampMsNever(): number {\n return Number.MAX_SAFE_INTEGER;\n }\n\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromMilliseconds(ms: number): AbsoluteTime {\n return {\n t_ms: ms,\n [opaque_AbsoluteTime]: true,\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, [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\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 isNever(t: AbsoluteTime): boolean {\n return t.t_ms === \"never\";\n }\n\n export function fromProtocolTimestamp(\n t: TalerProtocolTimestamp,\n ): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return {\n t_ms: t.t_s * 1000,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromStampMs(stampMs: number): AbsoluteTime {\n return {\n t_ms: stampMs,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromPreciseTimestamp(t: TalerPreciseTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n const offsetUs = t.off_us ?? 0;\n return {\n t_ms: t.t_s * 1000 + Math.floor(offsetUs / 1000),\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function toStampMs(at: AbsoluteTime): number {\n if (at.t_ms === \"never\") {\n return Number.MAX_SAFE_INTEGER;\n }\n return at.t_ms;\n }\n\n export function toPreciseTimestamp(at: AbsoluteTime): TalerPreciseTimestamp {\n if (at.t_ms == \"never\") {\n return {\n t_s: \"never\",\n };\n }\n const t_s = Math.floor(at.t_ms / 1000);\n const off_us = Math.floor(1000 * (at.t_ms - t_s * 1000));\n return {\n t_s,\n off_us,\n };\n }\n\n export function toProtocolTimestamp(\n at: AbsoluteTime,\n ): 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\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: t1.t_ms + d.d_ms, [opaque_AbsoluteTime]: true };\n }\n\n /**\n * Get the remaining duration until {@param t1}.\n *\n * If {@param t1} already happened, the remaining duration\n * is zero.\n */\n export function remaining(t1: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return Duration.getForever();\n }\n const stampNow = now();\n if (stampNow.t_ms === \"never\") {\n throw Error(\"invariant violated\");\n }\n return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_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\", [opaque_AbsoluteTime]: true };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms), [opaque_AbsoluteTime]: true };\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 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 if (x === undefined) {\n throw Error(`got undefined and expected absolute time at ${renderContext(c)}`);\n }\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms, [opaque_AbsoluteTime]: true };\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 if (x === undefined) {\n throw Error(`got undefined and expected timestamp at ${renderContext(c)}`);\n }\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 protocol timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForPreciseTimestamp: Codec<TalerPreciseTimestamp> = {\n decode(x: any, c?: Context): TalerPreciseTimestamp {\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 throw Error(`expected precise 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 { Amounts, codecForAmountString } from \"./amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecForStringURL,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport {\n CurrencySpecification,\n codecForCurrencySpecificiation,\n codecForEither,\n codecForProduct,\n} from \"./index.js\";\nimport { Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForDuration,\n codecForTimestamp,\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 // The exchange's base URL.\n url: string;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKeyString;\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: EddsaPublicKeyString;\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 // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\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?: InternationalizedString;\n\n // The number of units of the product to deliver to the customer.\n quantity?: Integer;\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?: ImageDataUrl;\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 // The hash of the merchant instance's wire details.\n h_wire: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: TalerProtocolDuration;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: InternationalizedString;\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: string;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: TalerProtocolTimestamp;\n\n // More info about the merchant, see below.\n merchant: MerchantInfo;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: string;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: TalerProtocolTimestamp;\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: ExchangeHandle[];\n\n // List of products that are part of the purchase (see Product).\n products?: Product[];\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: TalerProtocolTimestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // Time when this contract was generated.\n timestamp: TalerProtocolTimestamp;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional, but either fulfillment_url\n // or fulfillment_message must be specified in every\n // contract terms.\n //\n // If a non-unique fulfillment URL is used, a customer can only\n // buy the order once and will be redirected to a previous purchase\n // when trying to buy an order with the same fulfillment URL a second\n // time. This is useful for digital goods that a customer only needs\n // to buy once but should be able to repeatedly download.\n //\n // For orders where the customer is expected to be able to make\n // repeated purchases (for equivalent goods), the fulfillment URL\n // should be made unique for every order. The easiest way to do\n // this is to include a unique order ID in the fulfillment URL.\n //\n // When POSTing to the merchant, the placeholder text \"${ORDER_ID}\"\n // is be replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL). Note that this placeholder can only be used once.\n // Front-ends may use other means to generate a unique fulfillment URL.\n fulfillment_url?: string;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: InternationalizedString;\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: string;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n // Must really be an Object (not a string, integer, float or array).\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\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 * 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 * Canonical, public base URL of the exchange.\n */\n base_url: string;\n\n currency: string;\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 accounts: ExchangeWireAccount[];\n\n wire_fees: { [methodName: string]: WireFeesJson[] };\n\n denominations: DenomGroup[];\n}\n\nexport type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n\nexport interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n\n // XOR of all the SHA-512 hash values of the denominations' public keys\n // in this group. Note that for hashing, the binary format of the\n // public keys is used, and not their base32 encoding.\n hash: HashCodeString;\n}\n\nexport interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignatureString;\n\n // When does the denomination key become valid?\n stamp_start: TalerProtocolTimestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: TalerProtocolTimestamp;\n\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n}\n\nexport type RsaPublicKeySring = string;\nexport type AgeMask = number;\nexport type ImageDataUrl = string;\n\n/**\n * 32-byte value representing a point on Curve25519.\n */\nexport type Cs25519Point = string;\n\nexport interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\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\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 status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\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 RewardPickupGetResponse {\n reward_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 pos_confirmation?: 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 // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected or pending.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Deprecated field use status instead\n // The transfer has been confirmed and registered by the bank.\n // Does not guarantee that the funds have arrived at the exchange already.\n transfer_done: boolean;\n}\n\nexport const codeForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\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\ndeclare const __amount_str: unique symbol;\nexport type AmountString = string & { [__amount_str]: true };\n// export type AmountString = string;\nexport type Base32String = string;\nexport type EddsaSignatureString = string;\nexport type EddsaPublicKeyString = string;\nexport type EddsaPrivateKeyString = 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 codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\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\", codecForAmountString())\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\", codecForAmountString())\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\", codecForAmountString())\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 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\n// FIXME: Validate properly!\nexport const codecForNgDenominations: Codec<DenomGroup> = codecForAny();\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\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 .property(\"accounts\", codecForList(codecForExchangeWireAccount()))\n .property(\"wire_fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .property(\"denominations\", codecForList(codecForNgDenominations))\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 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(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\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 codecForRewardPickupGetResponse =\n (): Codec<RewardPickupGetResponse> =>\n buildCodecForObject<RewardPickupGetResponse>()\n .property(\"reward_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 codecForExchangeWithdrawBatchResponse =\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 .property(\"pos_confirmation\", codecOptional(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 codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\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 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 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\ninterface DepositConfirmationSignature {\n // The EdDSA signature of `TALER_DepositConfirmationPS` using a current\n // `signing key of the exchange <sign-key-priv>` 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: EddsaSignatureString;\n}\n\nexport interface BatchDepositSuccess {\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 // `Public EdDSA key of the exchange <sign-key-pub>` 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: EddsaPublicKeyString;\n\n // Array of deposit confirmation signatures from the exchange\n // Entries must be in the same order the coins were given\n // in the batch deposit request.\n exchange_sig: EddsaSignatureString;\n}\n\nexport const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> =>\n buildCodecForObject<BatchDepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"BatchDepositSuccess\");\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\n/**\n * @deprecated batch deposit should be used.\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 type WireSalt = string;\n\nexport interface ExchangeBatchDepositRequest {\n // The merchant's account details.\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: WireSalt;\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 // The list of coins that are going to be deposited with this Request.\n coins: BatchDepositRequestCoin[];\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 <merchant-pub>`, so that the client can identify the\n // merchant for refund requests.\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 batch-deposit.\n // This might be a refund, auction or escrow policy.\n policy?: any;\n}\n\nexport interface BatchDepositRequestCoin {\n // EdDSA public key of the coin being deposited.\n coin_pub: EddsaPublicKeyString;\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 // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: Amounts;\n\n // Signature over `TALER_DepositRequestPS`, made by the customer with the\n // `coin's private key <coin-priv>`.\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\nexport interface ExchangeRefundRequest {\n // Amount to be refunded, can be a fraction of the\n // coin's total deposit value (including deposit fee);\n // must be larger than the refund fee.\n refund_amount: AmountString;\n\n // SHA-512 hash of the contact of the merchant with the customer.\n h_contract_terms: HashCodeString;\n\n // 64-bit transaction id of the refund transaction between merchant and customer.\n rtransaction_id: number;\n\n // EdDSA public key of the merchant.\n merchant_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the merchant over a\n // TALER_RefundRequestPS with purpose\n // TALER_SIGNATURE_MERCHANT_REFUND\n // affirming the refund.\n merchant_sig: EddsaPublicKeyString;\n}\n\nexport interface ExchangeRefundSuccessResponse {\n // The EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND over\n // a TALER_RecoupRefreshConfirmationPS\n // 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\nexport const codecForExchangeRefundSuccessResponse =\n (): Codec<ExchangeRefundSuccessResponse> =>\n buildCodecForObject<ExchangeRefundSuccessResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .build(\"ExchangeRefundSuccessResponse\");\n\nexport type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n\nexport interface DenyAllAccountRestriction {\n type: \"deny\";\n}\n\n// Accounts interacting with this type of account\n// restriction must have a payto://-URI matching\n// the given regex.\nexport interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: InternationalizedString;\n}\n\nexport interface ExchangeWireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: string;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignatureString;\n\n // Display label wallets should use to show this\n // bank account.\n // Since protocol **v19**.\n bank_label?: string;\n priority?: number;\n}\n\nexport const codecForExchangeWireAccount = (): Codec<ExchangeWireAccount> =>\n buildCodecForObject<ExchangeWireAccount>()\n .property(\"conversion_url\", codecOptional(codecForStringURL()))\n .property(\"credit_restrictions\", codecForList(codecForAny()))\n .property(\"debit_restrictions\", codecForList(codecForAny()))\n .property(\"master_sig\", codecForString())\n .property(\"payto_uri\", codecForString())\n .property(\"bank_label\", codecOptional(codecForString()))\n .property(\"priority\", codecOptional(codecForNumber()))\n .build(\"WireAccount\");\n\nexport type Integer = number;\n\nexport interface BankConversionInfoConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n regional_currency: string;\n\n fiat_currency: string;\n\n // Currency used by this bank.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency_specification: CurrencySpecification;\n}\n\nexport const codecForBankConversionInfoConfig =\n (): Codec<BankConversionInfoConfig> =>\n buildCodecForObject<BankConversionInfoConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"fiat_currency\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .build(\"BankConversionInfoConfig\");\n\nexport interface DenominationExpiredMessage {\n // Taler error code. Note that beyond\n // expiration this message format is also\n // used if the key is not yet valid, or\n // has been revoked.\n code: number;\n\n // Signature by the exchange over a\n // TALER_DenominationExpiredAffirmationPS.\n // Must have purpose TALER_SIGNATURE_EXCHANGE_AFFIRM_DENOM_EXPIRED.\n exchange_sig: EddsaSignatureString;\n\n // Public key of the exchange used to create\n // the 'exchange_sig.\n exchange_pub: EddsaPublicKeyString;\n\n // Hash of the denomination public key that is unknown.\n h_denom_pub: HashCodeString;\n\n // When was the signature created.\n timestamp: TalerProtocolTimestamp;\n\n // What kind of operation was requested that now\n // failed?\n oper: string;\n}\n\nexport const codecForDenominationExpiredMessage = () =>\n buildCodecForObject<DenominationExpiredMessage>()\n .property(\"code\", codecForNumber())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"oper\", codecForString())\n .build(\"DenominationExpiredMessage\");\n\nexport interface CoinHistoryResponse {\n // Current balance of the coin.\n balance: AmountString;\n\n // Hash of the coin's denomination.\n h_denom_pub: HashCodeString;\n\n // Transaction history for the coin.\n history: any[];\n}\n\nexport const codecForCoinHistoryResponse = () =>\n buildCodecForObject<CoinHistoryResponse>()\n .property(\"balance\", codecForAmountString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"history\", codecForAny())\n .build(\"CoinHistoryResponse\");\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 { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { URLSearchParams } from \"./url.js\";\n\nexport type PaytoUri =\n | PaytoUriUnknown\n | PaytoUriIBAN\n | PaytoUriTalerBank\n | PaytoUriBitcoin;\n\ndeclare const __payto_str: unique symbol;\nexport type PaytoString = string & { [__payto_str]: true };\n\nexport function codecForPaytoString(): Codec<PaytoString> {\n return {\n decode(x: any, c?: Context): PaytoString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (!x.startsWith(paytoPfx)) {\n throw new DecodingError(\n `expected start with payto at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as PaytoString;\n },\n };\n}\n\nexport interface PaytoUriGeneric {\n targetType: PaytoType | 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 address: string;\n segwitAddrs: Array<string>;\n}\n\nconst paytoPfx = \"payto://\";\n\nexport type PaytoType = \"iban\" | \"bitcoin\" | \"x-taler-bank\";\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: PaytoType,\n first: string,\n second?: string,\n): PaytoUriGeneric {\n switch (type) {\n case \"bitcoin\": {\n const uppercased = first.toUpperCase();\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetType: \"bitcoin\",\n targetPath: first,\n address: uppercased,\n params: {},\n segwitAddrs: !second ? [] : generateFakeSegwitAddress(second, first),\n };\n return result;\n }\n case \"iban\": {\n const uppercased = first.toUpperCase();\n const result: PaytoUriIBAN = {\n isKnown: true,\n targetType: \"iban\",\n iban: uppercased,\n params: {},\n targetPath: !second ? uppercased : `${second}/${uppercased}`,\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): PaytoString {\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 as PaytoString;\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].toUpperCase();\n }\n if (parts.length === 2) {\n bic = parts[0];\n iban = parts[1].toUpperCase();\n } else {\n iban = targetPath.toUpperCase();\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 uppercased = targetType.toUpperCase();\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetPath,\n targetType,\n address: uppercased,\n params,\n segwitAddrs,\n };\n\n return result;\n }\n return {\n targetPath,\n targetType,\n params,\n isKnown: false,\n };\n}\n\nexport function talerPaytoFromExchangeReserve(\n exchangeBaseUrl: string,\n reservePub: string,\n): string {\n const url = new URL(exchangeBaseUrl);\n let proto: string;\n if (url.protocol === \"http:\") {\n proto = \"taler-reserve-http\";\n } else if (url.protocol === \"https:\") {\n proto = \"taler-reserve\";\n } else {\n throw Error(`unsupported exchange base URL protocol (${url.protocol})`);\n }\n\n let path = url.pathname;\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n return `payto://${proto}/${url.host}${url.pathname}${reservePub}`;\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 type { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport {\n TalerError,\n base64FromArrayBuffer,\n makeErrorDetail,\n stringToBytes,\n} from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AbsoluteTime, Duration } 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\" | \"PATCH\" | \"PUT\" | \"GET\" | \"DELETE\";\n headers?: { [name: string]: string | undefined };\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 * How to handle redirects.\n * Same semantics as WHATWG fetch.\n */\n redirect?: \"follow\" | \"error\" | \"manual\";\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 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\n/**\n * Read Taler error details from an HTTP response.\n */\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const contentType = httpResponse.headers.get(\"content-type\");\n if (contentType !== \"application/json\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n contentType: contentType || \"<null>\",\n },\n \"Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.\",\n );\n }\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\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 let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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\nexport async function readResponseJsonOrErrorCode<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<{ isError: boolean; response: T }> {\n let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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: !(httpResponse.status >= 200 && httpResponse.status < 300),\n response: parsedResponse,\n };\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 expectSuccessResponseOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (httpResponse.status >= 200 && httpResponse.status <= 299) {\n return;\n }\n const errResp = await readTalerErrorResponse(httpResponse);\n throwUnexpectedRequestError(httpResponse, errResp);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 = AbsoluteTime.fromMilliseconds(expiryDateMs);\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 * Only allow HTTPS connections, not plain http.\n */\n requireTls?: boolean;\n printAsCurl?: 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/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport {\n HttpResponse,\n readResponseJsonOrErrorCode,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http-common.js\";\nimport {\n Codec,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TalerErrorDetail,\n} from \"./index.js\";\n\ntype OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =\n ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;\n\nexport type OperationResult<Body, ErrorEnum, K = never> =\n | OperationOk<Body>\n | OperationAlternative<ErrorEnum, any>\n | OperationFail<ErrorEnum>\n | OperationFailWithBodyOrNever<ErrorEnum, K>;\n\nexport function isOperationOk<T, E>(\n c: OperationResult<T, E>,\n): c is OperationOk<T> {\n return c.type === \"ok\";\n}\n\nexport function isOperationFail<T, E>(\n c: OperationResult<T, E>,\n): c is OperationFail<E> {\n return c.type === \"fail\";\n}\n\n/**\n * successful operation\n */\nexport interface OperationOk<BodyT> {\n type: \"ok\";\n\n /**\n * Parsed response body.\n */\n body: BodyT;\n}\n\n/**\n * unsuccessful operation, see details\n */\nexport interface OperationFail<T> {\n type: \"fail\";\n\n /**\n * Error case (either HTTP status code or TalerErrorCode)\n */\n case: T;\n\n detail: TalerErrorDetail;\n}\n\n/**\n * unsuccessful operation, see body\n */\nexport interface OperationAlternative<T, B> {\n type: \"fail\";\n\n case: T;\n body: B;\n}\n\nexport interface OperationFailWithBody<B> {\n type: \"fail\";\n\n case: keyof B;\n body: B[OperationFailWithBody<B>[\"case\"]];\n}\n\nexport async function opSuccessFromHttp<T>(\n resp: HttpResponse,\n codec: Codec<T>,\n): Promise<OperationOk<T>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"ok\" as const, body };\n}\n\n/**\n * Success case, but instead of the body we're returning a fixed response\n * to the client.\n */\nexport function opFixedSuccess<T>(body: T): OperationOk<T> {\n return { type: \"ok\" as const, body };\n}\n\nexport function opEmptySuccess(resp: HttpResponse): OperationOk<void> {\n return { type: \"ok\" as const, body: void 0 };\n}\n\nexport async function opKnownFailureWithBody<B>(\n case_: keyof B,\n body: B[typeof case_],\n): Promise<OperationFailWithBody<B>> {\n return { type: \"fail\", case: case_, body };\n}\n\nexport async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(\n resp: HttpResponse,\n s: T,\n codec: Codec<B>,\n): Promise<OperationAlternative<T, B>> {\n const body = (await readResponseJsonOrErrorCode(resp, codec)).response;\n return { type: \"fail\", case: s, body };\n}\n\nexport async function opKnownHttpFailure<T extends HttpStatusCode>(\n s: T,\n resp: HttpResponse,\n): Promise<OperationFail<T>> {\n const detail = await readTalerErrorResponse(resp);\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opKnownTalerFailure<T extends TalerErrorCode>(\n s: T,\n detail: TalerErrorDetail,\n): OperationFail<T> {\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: resp.requestUrl,\n requestMethod: resp.requestMethod,\n httpStatusCode: resp.status,\n errorResponse: error,\n },\n `Unexpected HTTP status ${resp.status} in response`,\n );\n}\n\n/**\n * Convenience function to throw an error if the operation is not a success.\n */\nexport function narrowOpSuccessOrThrow<Body, ErrorEnum>(\n opName: string,\n opRes: OperationResult<Body, ErrorEnum>,\n): asserts opRes is OperationOk<Body> {\n if (opRes.type !== \"ok\") {\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR,\n {\n operation: opName,\n error: String(opRes.case),\n detail: \"detail\" in opRes ? opRes.detail : undefined,\n },\n `Operation ${opName} failed: ${String(opRes.case)}`,\n );\n }\n}\n\nexport type ResultByMethod<\n TT extends object,\n p extends keyof TT,\n> = TT[p] extends (...args: any[]) => infer Ret\n ? Ret extends Promise<infer Result>\n ? Result extends OperationResult<any, any>\n ? Result\n : never\n : never //api always use Promises\n : never; //error cases just for functions\n\nexport type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<\n ResultByMethod<TT, p>,\n OperationOk<any>\n>;\n\nexport type RedirectResult = { redirectURL: URL }\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\n/**\n * @fileoverview\n * Construction and parsing of taler:// URIs.\n * Specification: https://lsd.gnunet.org/lsd0006/\n */\n\n/**\n * Imports.\n */\nimport { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { opFixedSuccess, opKnownTalerFailure } from \"./operation.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { URL, URLSearchParams } from \"./url.js\";\n/**\n * A parsed taler URI.\n */\nexport type TalerUri =\n | PayUriResult\n | PayTemplateUriResult\n | DevExperimentUri\n | PayPullUriResult\n | PayPushUriResult\n | BackupRestoreUri\n | RefundUriResult\n | WithdrawUriResult\n | WithdrawExchangeUri\n | AddExchangeUri;\n\ndeclare const __action_str: unique symbol;\nexport type TalerUriString = string & { [__action_str]: true };\n\nexport function codecForTalerUriString(): Codec<TalerUriString> {\n return {\n decode(x: any, c?: Context): TalerUriString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (parseTalerUri(x) === undefined) {\n throw new DecodingError(\n `invalid taler URI at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as TalerUriString;\n },\n };\n}\n\nexport interface PayUriResult {\n type: TalerUriAction.Pay;\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken?: string;\n noncePriv?: string;\n}\n\nexport type TemplateParams = {\n amount?: string;\n summary?: string;\n};\n\nexport interface PayTemplateUriResult {\n type: TalerUriAction.PayTemplate;\n merchantBaseUrl: string;\n templateId: string;\n templateParams: TemplateParams;\n}\n\nexport interface WithdrawUriResult {\n type: TalerUriAction.Withdraw;\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n type: TalerUriAction.Refund;\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface PayPushUriResult {\n type: TalerUriAction.PayPush;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n type: TalerUriAction.PayPull;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n type: TalerUriAction.DevExperiment;\n devExperimentId: string;\n}\n\nexport interface BackupRestoreUri {\n type: TalerUriAction.Restore;\n walletRootPriv: string;\n providers: Array<string>;\n}\n\nexport interface WithdrawExchangeUri {\n type: TalerUriAction.WithdrawExchange;\n exchangeBaseUrl: string;\n exchangePub?: string;\n amount?: AmountString;\n}\n\nexport interface AddExchangeUri {\n type: TalerUriAction.AddExchange;\n exchangeBaseUrl: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"withdraw\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 const result: WithdrawUriResult = {\n type: TalerUriAction.Withdraw,\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n withdrawalOperationId: withdrawId,\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const r = parseWithdrawUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseAddExchangeUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"add-exchange\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 p = [host, ...pathSegments].join(\"/\");\n\n const result: AddExchangeUri = {\n type: TalerUriAction.AddExchange,\n exchangeBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseAddExchangeUri(s: string): AddExchangeUri | undefined {\n const r = parseAddExchangeUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * @deprecated use TalerUriAction\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\nexport enum TalerUriAction {\n Pay = \"pay\",\n Withdraw = \"withdraw\",\n Refund = \"refund\",\n PayPull = \"pay-pull\",\n PayPush = \"pay-push\",\n PayTemplate = \"pay-template\",\n Restore = \"restore\",\n DevExperiment = \"dev-experiment\",\n WithdrawExchange = \"withdraw-exchange\",\n AddExchange = \"add-exchange\",\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\nfunction parseProtoInfoWithError(s: string, action: string) {\n if (\n !s.toLowerCase().startsWith(\"taler://\") &&\n !s.toLowerCase().startsWith(\"taler+http://\")\n ) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return opFixedSuccess({\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n });\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return opFixedSuccess({\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n });\n } else {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n}\n\ntype Parser = (s: string) => TalerUri | undefined;\nconst parsers: { [A in TalerUriAction]: Parser } = {\n [TalerUriAction.Pay]: parsePayUri,\n [TalerUriAction.PayPull]: parsePayPullUri,\n [TalerUriAction.PayPush]: parsePayPushUri,\n [TalerUriAction.PayTemplate]: parsePayTemplateUri,\n [TalerUriAction.Restore]: parseRestoreUri,\n [TalerUriAction.Refund]: parseRefundUri,\n [TalerUriAction.Withdraw]: parseWithdrawUri,\n [TalerUriAction.DevExperiment]: parseDevExperimentUri,\n [TalerUriAction.WithdrawExchange]: parseWithdrawExchangeUri,\n [TalerUriAction.AddExchange]: parseAddExchangeUri,\n};\n\nexport function parseTalerUri(string: string): TalerUri | undefined {\n const https = string.startsWith(\"taler://\");\n const http = string.startsWith(\"taler+http://\");\n if (!https && !http) return undefined;\n const actionStart = https ? 8 : 13;\n const actionEnd = string.indexOf(\"/\", actionStart + 1);\n const action = string.substring(actionStart, actionEnd);\n const found = Object.values(TalerUriAction).find((x) => x === action);\n if (!found) return undefined;\n return parsers[found](string);\n}\n\nexport function stringifyTalerUri(uri: TalerUri): string {\n switch (uri.type) {\n case TalerUriAction.DevExperiment: {\n return stringifyDevExperimentUri(uri);\n }\n case TalerUriAction.Pay: {\n return stringifyPayUri(uri);\n }\n case TalerUriAction.PayPull: {\n return stringifyPayPullUri(uri);\n }\n case TalerUriAction.PayPush: {\n return stringifyPayPushUri(uri);\n }\n case TalerUriAction.PayTemplate: {\n return stringifyPayTemplateUri(uri);\n }\n case TalerUriAction.Restore: {\n return stringifyRestoreUri(uri);\n }\n case TalerUriAction.Refund: {\n return stringifyRefundUri(uri);\n }\n case TalerUriAction.Withdraw: {\n return stringifyWithdrawUri(uri);\n }\n case TalerUriAction.WithdrawExchange: {\n return stringifyWithdrawExchange(uri);\n }\n case TalerUriAction.AddExchange: {\n return stringifyAddExchange(uri);\n }\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 type: TalerUriAction.Pay,\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n uriString: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(uriString, TalerUriAction.PayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi.rest.split(\"?\");\n\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n\n const q = new URLSearchParams(c[1] ?? \"\");\n const params: Record<string, string> = {};\n q.forEach((v, k) => {\n params[k] = v;\n });\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayTemplate,\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPush);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPush,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPull);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPull,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parseWithdrawExchangeUri(\n s: string,\n): WithdrawExchangeUri | undefined {\n const pi = parseProtoInfo(s, \"withdraw-exchange\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 1) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;\n const pathSegments = parts.slice(1, parts.length - 1);\n const hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n const q = new URLSearchParams(c[1] ?? \"\");\n const amount = (q.get(\"a\") ?? undefined) as AmountString | undefined;\n\n return {\n type: TalerUriAction.WithdrawExchange,\n exchangeBaseUrl,\n exchangePub: exchangePub != \"\" ? exchangePub : undefined,\n amount,\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.Refund,\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 parts = c[0].split(\"/\");\n return {\n type: TalerUriAction.DevExperiment,\n devExperimentId: parts[0],\n };\n}\n\nexport function parseRestoreUri(uri: string): BackupRestoreUri | undefined {\n const pi = parseProtoInfo(uri, \"restore\");\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\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<string>();\n parts[1].split(\",\").map((name) => {\n const url = canonicalizeBaseUrl(\n `${pi.innerProto}://${decodeURIComponent(name)}/`,\n );\n providers.push(url);\n });\n return {\n type: TalerUriAction.Restore,\n walletRootPriv,\n providers,\n };\n}\n\n// ================================================\n// To string functions\n// ================================================\n\nexport function stringifyPayUri({\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n}: Omit<PayUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, {\n c: claimToken,\n n: noncePriv,\n });\n return `${proto}://pay/${path}${orderId}/${sessionId}${query}`;\n}\n\nexport function stringifyPayPullUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPullUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://pay-pull/${path}${contractPriv}`;\n}\n\nexport function stringifyPayPushUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPushUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n\n return `${proto}://pay-push/${path}${contractPriv}`;\n}\n\nexport function stringifyRestoreUri({\n providers,\n walletRootPriv,\n}: Omit<BackupRestoreUri, \"type\">): string {\n const list = providers\n .map((url) => `${encodeURIComponent(new URL(url).href)}`)\n .join(\",\");\n return `taler://restore/${walletRootPriv}/${list}`;\n}\n\nexport function stringifyWithdrawExchange({\n exchangeBaseUrl,\n exchangePub,\n amount,\n}: Omit<WithdrawExchangeUri, \"type\">): string {\n const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {\n a: amount,\n });\n return `${proto}://withdraw-exchange/${path}${exchangePub ?? \"\"}${query}`;\n}\n\nexport function stringifyAddExchange({\n exchangeBaseUrl,\n}: Omit<AddExchangeUri, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://add-exchange/${path}`;\n}\n\nexport function stringifyDevExperimentUri({\n devExperimentId,\n}: Omit<DevExperimentUri, \"type\">): string {\n return `taler://dev-experiment/${devExperimentId}`;\n}\n\nexport function stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams,\n}: Omit<PayTemplateUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, templateParams);\n return `${proto}://pay-template/${path}${templateId}${query}`;\n}\n\nexport function stringifyRefundUri({\n merchantBaseUrl,\n orderId,\n}: Omit<RefundUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(merchantBaseUrl);\n return `${proto}://refund/${path}${orderId}/`;\n}\n\nexport function stringifyWithdrawUri({\n bankIntegrationApiBaseUrl,\n withdrawalOperationId,\n}: Omit<WithdrawUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(bankIntegrationApiBaseUrl);\n return `${proto}://withdraw/${path}${withdrawalOperationId}`;\n}\n\n/**\n * Use baseUrl to defined http or https\n * create path using host+port+pathname\n * use params to create a query parameter string or empty\n */\nfunction getUrlInfo(\n baseUrl: string,\n params: Record<string, string | undefined> = {},\n): { proto: string; path: string; query: string } {\n const url = new URL(baseUrl);\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 URL protocol in ${baseUrl}`);\n }\n let path = url.hostname;\n if (url.port) {\n path = path + \":\" + url.port;\n }\n if (url.pathname) {\n path = path + url.pathname;\n }\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n const qp = new URLSearchParams();\n let withParams = false;\n Object.entries(params).forEach(([name, value]) => {\n if (value !== undefined) {\n withParams = true;\n qp.append(name, value);\n }\n });\n const query = withParams ? \"?\" + qp.toString() : \"\";\n\n return { proto, path, query };\n}\n", "import { deprecate } from \"util\";\nimport { codecForAmountString } from \"../amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"../codec.js\";\nimport { PaytoString, codecForPaytoString } from \"../payto.js\";\nimport {\n AmountString,\n InternationalizedString,\n codecForInternationalizedString,\n codecForLocation,\n} from \"../taler-types.js\";\nimport { TalerUriString, codecForTalerUriString } from \"../taleruri.js\";\nimport {\n AbsoluteTime,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n} from \"../time.js\";\n\nexport type UserAndPassword = {\n username: string;\n password: string;\n};\n\nexport type UserAndToken = {\n username: string;\n token: AccessToken;\n};\n\ndeclare const opaque_OfficerAccount: unique symbol;\nexport type LockedAccount = string & { [opaque_OfficerAccount]: true };\n\ndeclare const opaque_OfficerId: unique symbol;\nexport type OfficerId = string & { [opaque_OfficerId]: true };\n\ndeclare const opaque_OfficerSigningKey: unique symbol;\nexport type SigningKey = Uint8Array & { [opaque_OfficerSigningKey]: true };\n\nexport interface OfficerAccount {\n id: OfficerId;\n signingKey: SigningKey;\n}\n\nexport type PaginationParams = {\n /**\n * row identifier as the starting point of the query\n */\n offset?: string;\n /**\n * max number of element in the result response\n * always greater than 0\n */\n limit?: number;\n /**\n * order\n */\n order?: \"asc\" | \"dec\";\n};\n\nexport type LongPollParams = {\n /**\n * milliseconds the server should wait for at least one result to be shown\n */\n timeoutMs?: number;\n};\n///\n/// HASH\n///\n\n// 64-byte hash code.\ntype HashCode = string;\n\ntype PaytoHash = string;\n\ntype AmlOfficerPublicKeyP = string;\n\n// 32-byte hash code.\ntype ShortHashCode = string;\n\n// 16-byte salt.\ntype WireSalt = string;\n\ntype SHA256HashCode = ShortHashCode;\n\ntype SHA512HashCode = HashCode;\n\n// 32-byte nonce value, must only be used once.\ntype CSNonce = string;\n\n// 32-byte nonce value, must only be used once.\ntype RefreshMasterSeed = string;\n\n// 32-byte value representing a point on Curve25519.\ntype Cs25519Point = string;\n\n// 32-byte value representing a scalar multiplier\n// for scalar operations on points on Curve25519.\ntype Cs25519Scalar = string;\n\n///\n/// KEYS\n///\n\n// 16-byte access token used to authorize access.\ntype ClaimToken = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPublicKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPrivateKey = string;\n\n// Edx25519 public keys are points on Curve25519 and represented using the\n// standard 256 bits Ed25519 compact format converted to Crockford\n// Base32.\ntype Edx25519PublicKey = string;\n\n// Edx25519 private keys are always points on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype Edx25519PrivateKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePublicKey = string;\n\n// Point on Curve25519 represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype CsRPublic = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePrivateKey = string;\n\ntype CoinPublicKey = EddsaPublicKey;\n\n// RSA public key converted to Crockford Base32.\ntype RsaPublicKey = string;\n\ntype Integer = number;\n\ntype WireTransferIdentifierRawP = string;\n// Subset of numbers: Integers in the\n// inclusive range 0 .. (2^53 - 1).\ntype SafeUint64 = number;\n\n// The string must be a data URL according to RFC 2397\n// with explicit mediatype and base64 parameters.\n//\n// data:<mediatype>;base64,<data>\n//\n// Supported mediatypes are image/jpeg and image/png.\n// Invalid strings will be rejected by the wallet.\ntype ImageDataUrl = string;\n\ntype WadId = string;\n\ntype Timestamp = TalerProtocolTimestamp;\n\ntype RelativeTime = TalerProtocolDuration;\n\nexport interface LoginToken {\n token: AccessToken;\n expiration: Timestamp;\n}\n\ndeclare const __ac_token: unique symbol;\n/**\n * Use `createAccessToken(string)` function to build one.\n */\nexport type AccessToken = string & {\n [__ac_token]: true;\n};\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n * Encode the token with rfc7230 to send in a http header.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessTokenEncoded(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\")\n ? token\n : `secret-token:${encodeURIComponent(token)}`\n ) as AccessToken;\n}\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessTokenPlain(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\") ? token : `secret-token:${token}`\n ) as AccessToken;\n}\n\n/**\n * Convert string to access token.\n *\n * @param clientSecret\n * @returns\n */\nexport function createClientSecretAccessToken(\n clientSecret: string,\n): AccessToken {\n return clientSecret as AccessToken;\n}\n\ndeclare const __officer_signature: unique symbol;\nexport type OfficerSignature = string & {\n [__officer_signature]: true;\n};\n\nexport namespace TalerAuthentication {\n export interface TokenRequest {\n // Service-defined scope for the token.\n // Typical scopes would be \"readonly\" or \"readwrite\".\n scope: string;\n\n // Server may impose its own upper bound\n // on the token validity duration\n duration?: RelativeTime;\n\n // Is the token refreshable into a new token during its\n // validity?\n // Refreshable tokens effectively provide indefinite\n // access if they are refreshed in time.\n refreshable?: boolean;\n }\n\n export interface TokenSuccessResponse {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n access_token: AccessToken;\n }\n export interface TokenSuccessResponseMerchant {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n token: AccessToken;\n }\n}\n\n// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html\nexport interface CurrencySpecification {\n // Name of the currency.\n name: string;\n\n // how many digits the user may enter after the decimal_separator\n num_fractional_input_digits: Integer;\n\n // Number of fractional digits to render in normal font and size.\n num_fractional_normal_digits: Integer;\n\n // Number of fractional digits to render always, if needed by\n // padding with zeros.\n num_fractional_trailing_zero_digits: Integer;\n\n // map of powers of 10 to alternative currency names / symbols, must\n // always have an entry under \"0\" that defines the base name,\n // e.g. \"0 => \u20AC\" or \"3 => k\u20AC\". For BTC, would be \"0 => BTC, -3 => mBTC\".\n // Communicates the currency symbol to be used.\n alt_unit_names: { [log10: string]: string };\n}\n\n//FIXME: implement this codec\nexport const codecForAccessToken = codecForString as () => Codec<AccessToken>;\nexport const codecForTokenSuccessResponse =\n (): Codec<TalerAuthentication.TokenSuccessResponse> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponse>()\n .property(\"access_token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponse\");\n\nexport const codecForTokenSuccessResponseMerchant =\n (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()\n .property(\"token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponseMerchant\");\n\nexport const codecForCurrencySpecificiation =\n (): Codec<CurrencySpecification> =>\n buildCodecForObject<CurrencySpecification>()\n .property(\"name\", codecForString())\n .property(\"num_fractional_input_digits\", codecForNumber())\n .property(\"num_fractional_normal_digits\", codecForNumber())\n .property(\"num_fractional_trailing_zero_digits\", codecForNumber())\n .property(\"alt_unit_names\", codecForMap(codecForString()))\n .build(\"CurrencySpecification\");\n\nexport const codecForIntegrationBankConfig =\n (): Codec<TalerCorebankApi.IntegrationConfig> =>\n buildCodecForObject<TalerCorebankApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .build(\"TalerCorebankApi.IntegrationConfig\");\n\nexport const codecForCoreBankConfig = (): Codec<TalerCorebankApi.Config> =>\n buildCodecForObject<TalerCorebankApi.Config>()\n .property(\"name\", codecForConstString(\"libeufin-bank\"))\n .property(\"version\", codecForString())\n .property(\"bank_name\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"allow_conversion\", codecForBoolean())\n .property(\"allow_registrations\", codecForBoolean())\n .property(\"allow_deletions\", codecForBoolean())\n .property(\"allow_edit_name\", codecForBoolean())\n .property(\"allow_edit_cashout_payto_uri\", codecForBoolean())\n .property(\"default_debit_threshold\", codecForAmountString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"supported_tan_channels\",\n codecForList(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\"wire_type\", codecForString())\n .build(\"TalerCorebankApi.Config\");\n\n//FIXME: implement this codec\nexport const codecForURN = codecForString;\n\nexport const codecForExchangeConfigInfo =\n (): Codec<TalerMerchantApi.ExchangeConfigInfo> =>\n buildCodecForObject<TalerMerchantApi.ExchangeConfigInfo>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"master_pub\", codecForString())\n .build(\"TalerMerchantApi.ExchangeConfigInfo\");\n\nexport const codecForMerchantConfig =\n (): Codec<TalerMerchantApi.VersionResponse> =>\n buildCodecForObject<TalerMerchantApi.VersionResponse>()\n .property(\"name\", codecForConstString(\"taler-merchant\"))\n .property(\"currency\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currencies\", codecForMap(codecForCurrencySpecificiation()))\n .property(\"exchanges\", codecForList(codecForExchangeConfigInfo()))\n .build(\"TalerMerchantApi.VersionResponse\");\n\nexport const codecForClaimResponse =\n (): Codec<TalerMerchantApi.ClaimResponse> =>\n buildCodecForObject<TalerMerchantApi.ClaimResponse>()\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.ClaimResponse\");\n\nexport const codecForPaymentResponse =\n (): Codec<TalerMerchantApi.PaymentResponse> =>\n buildCodecForObject<TalerMerchantApi.PaymentResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForStatusPaid = (): Codec<TalerMerchantApi.StatusPaid> =>\n buildCodecForObject<TalerMerchantApi.StatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refunded\", codecForBoolean())\n .property(\"type\", codecForConstString(\"paid\"))\n .build(\"TalerMerchantApi.StatusPaid\");\n\nexport const codecForStatusGoto =\n (): Codec<TalerMerchantApi.StatusGotoResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusGotoResponse>()\n .property(\"public_reorder_url\", codecForURL())\n .property(\"type\", codecForConstString(\"goto\"))\n .build(\"TalerMerchantApi.StatusGotoResponse\");\n\nexport const codecForStatusStatusUnpaid =\n (): Codec<TalerMerchantApi.StatusUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusUnpaidResponse>()\n .property(\"type\", codecForConstString(\"unpaid\"))\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForPaidRefundStatusResponse =\n (): Codec<TalerMerchantApi.PaidRefundStatusResponse> =>\n buildCodecForObject<TalerMerchantApi.PaidRefundStatusResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"refunded\", codecForBoolean())\n .build(\"TalerMerchantApi.PaidRefundStatusResponse\");\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse =\n (): Codec<TalerMerchantApi.AbortResponse> =>\n buildCodecForObject<TalerMerchantApi.AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForWalletRefundResponse =\n (): Codec<TalerMerchantApi.WalletRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.WalletRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantCoinRefundStatus\");\n\nexport const codecForQueryInstancesResponse =\n (): Codec<TalerMerchantApi.QueryInstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.QueryInstancesResponse>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"merchant_pub\", codecForString())\n .property(\"address\", codecForLocation())\n .property(\"jurisdiction\", codecForLocation())\n .property(\"use_stefan\", codecForBoolean())\n .property(\"default_wire_transfer_delay\", codecForDuration)\n .property(\"default_pay_delay\", codecForDuration)\n .property(\n \"auth\",\n buildCodecForObject<{\n method: \"external\" | \"token\";\n }>()\n .property(\n \"method\",\n codecForEither(\n codecForConstString(\"token\"),\n codecForConstString(\"external\"),\n ),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse.auth\"),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse\");\n\nexport const codecForAccountKycRedirects =\n (): Codec<TalerMerchantApi.AccountKycRedirects> =>\n buildCodecForObject<TalerMerchantApi.AccountKycRedirects>()\n .property(\n \"pending_kycs\",\n codecForList(codecForMerchantAccountKycRedirect()),\n )\n .property(\"timeout_kycs\", codecForList(codecForExchangeKycTimeout()))\n\n .build(\"TalerMerchantApi.AccountKycRedirects\");\n\nexport const codecForMerchantAccountKycRedirect =\n (): Codec<TalerMerchantApi.MerchantAccountKycRedirect> =>\n buildCodecForObject<TalerMerchantApi.MerchantAccountKycRedirect>()\n .property(\"kyc_url\", codecForURL())\n .property(\"aml_status\", codecForNumber())\n .property(\"exchange_url\", codecForURL())\n .property(\"payto_uri\", codecForPaytoString())\n .build(\"TalerMerchantApi.MerchantAccountKycRedirect\");\n\nexport const codecForExchangeKycTimeout =\n (): Codec<TalerMerchantApi.ExchangeKycTimeout> =>\n buildCodecForObject<TalerMerchantApi.ExchangeKycTimeout>()\n .property(\"exchange_url\", codecForURL())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .build(\"TalerMerchantApi.ExchangeKycTimeout\");\n\nexport const codecForAccountAddResponse =\n (): Codec<TalerMerchantApi.AccountAddResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountAddResponse>()\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .build(\"TalerMerchantApi.AccountAddResponse\");\n\nexport const codecForAccountsSummaryResponse =\n (): Codec<TalerMerchantApi.AccountsSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountsSummaryResponse>()\n .property(\"accounts\", codecForList(codecForBankAccountSummaryEntry()))\n .build(\"TalerMerchantApi.AccountsSummaryResponse\");\n\nexport const codecForBankAccountSummaryEntry =\n (): Codec<TalerMerchantApi.BankAccountSummaryEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountSummaryEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .build(\"TalerMerchantApi.BankAccountSummaryEntry\");\n\nexport const codecForBankAccountEntry =\n (): Codec<TalerMerchantApi.BankAccountEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .property(\"credit_facade_url\", codecOptional(codecForURL()))\n .property(\"active\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.BankAccountEntry\");\n\nexport const codecForInventorySummaryResponse =\n (): Codec<TalerMerchantApi.InventorySummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.InventorySummaryResponse>()\n .property(\"products\", codecForList(codecForInventoryEntry()))\n .build(\"TalerMerchantApi.InventorySummaryResponse\");\n\nexport const codecForInventoryEntry =\n (): Codec<TalerMerchantApi.InventoryEntry> =>\n buildCodecForObject<TalerMerchantApi.InventoryEntry>()\n .property(\"product_id\", codecForString())\n .property(\"product_serial\", codecForNumber())\n .build(\"TalerMerchantApi.InventoryEntry\");\n\nexport const codecForProductDetail =\n (): Codec<TalerMerchantApi.ProductDetail> =>\n buildCodecForObject<TalerMerchantApi.ProductDetail>()\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"unit\", codecForString())\n .property(\"price\", codecForAmountString())\n .property(\"image\", codecForString())\n .property(\"taxes\", codecForList(codecForTax()))\n .property(\"address\", codecForLocation())\n .property(\"next_restock\", codecForTimestamp)\n .property(\"total_stock\", codecForNumber())\n .property(\"total_sold\", codecForNumber())\n .property(\"total_lost\", codecForNumber())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"TalerMerchantApi.ProductDetail\");\n\nexport const codecForTax = (): Codec<TalerMerchantApi.Tax> =>\n buildCodecForObject<TalerMerchantApi.Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForAmountString())\n .build(\"TalerMerchantApi.Tax\");\n\nexport const codecForPostOrderResponse =\n (): Codec<TalerMerchantApi.PostOrderResponse> =>\n buildCodecForObject<TalerMerchantApi.PostOrderResponse>()\n .property(\"order_id\", codecForString())\n .property(\"token\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.PostOrderResponse\");\n\nexport const codecForOutOfStockResponse =\n (): Codec<TalerMerchantApi.OutOfStockResponse> =>\n buildCodecForObject<TalerMerchantApi.OutOfStockResponse>()\n .property(\"product_id\", codecForString())\n .property(\"available_quantity\", codecForNumber())\n .property(\"requested_quantity\", codecForNumber())\n .property(\"restock_expected\", codecForTimestamp)\n .build(\"TalerMerchantApi.OutOfStockResponse\");\n\nexport const codecForOrderHistory = (): Codec<TalerMerchantApi.OrderHistory> =>\n buildCodecForObject<TalerMerchantApi.OrderHistory>()\n .property(\"orders\", codecForList(codecForOrderHistoryEntry()))\n .build(\"TalerMerchantApi.OrderHistory\");\n\nexport const codecForOrderHistoryEntry =\n (): Codec<TalerMerchantApi.OrderHistoryEntry> =>\n buildCodecForObject<TalerMerchantApi.OrderHistoryEntry>()\n .property(\"order_id\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"refundable\", codecForBoolean())\n .property(\"paid\", codecForBoolean())\n .build(\"TalerMerchantApi.OrderHistoryEntry\");\n\nexport const codecForMerchant = (): Codec<TalerMerchantApi.Merchant> =>\n buildCodecForObject<TalerMerchantApi.Merchant>()\n .property(\"name\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"TalerMerchantApi.MerchantInfo\");\n\nexport const codecForExchange = (): Codec<TalerMerchantApi.Exchange> =>\n buildCodecForObject<TalerMerchantApi.Exchange>()\n .property(\"master_pub\", codecForString())\n .property(\"priority\", codecForNumber())\n .property(\"url\", codecForString())\n .build(\"TalerMerchantApi.Exchange\");\n\nexport const codecForContractTerms =\n (): Codec<TalerMerchantApi.ContractTerms> =>\n buildCodecForObject<TalerMerchantApi.ContractTerms>()\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(\n \"summary_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"merchant\", codecForMerchant())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchange()))\n .property(\"products\", codecForList(codecForProduct()))\n .property(\"extra\", codecForAny())\n .build(\"TalerMerchantApi.ContractTerms\");\n\nexport const codecForProduct = (): Codec<TalerMerchantApi.Product> =>\n buildCodecForObject<TalerMerchantApi.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(codecForAmountString()))\n .property(\"image\", codecOptional(codecForString()))\n .property(\"taxes\", codecOptional(codecForList(codecForTax())))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .build(\"TalerMerchantApi.Product\");\n\nexport const codecForCheckPaymentPaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentPaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentPaidResponse>()\n .property(\"order_status\", codecForConstString(\"paid\"))\n .property(\"refunded\", codecForBoolean())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"wired\", codecForBoolean())\n .property(\"deposit_total\", codecForAmountString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"wire_reports\", codecForList(codecForTransactionWireReport()))\n .property(\"wire_details\", codecForList(codecForTransactionWireTransfer()))\n .property(\"refund_details\", codecForList(codecForRefundDetails()))\n .property(\"order_status_url\", codecForURL())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentUnpaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentUnpaidResponse>()\n .property(\"order_status\", codecForConstString(\"unpaid\"))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .property(\"creation_time\", codecForTimestamp)\n .property(\"summary\", codecForString())\n .property(\"total_amount\", codecForAmountString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"already_paid_fulfillment_url\", codecOptional(codecForString()))\n .property(\"order_status_url\", codecForString())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentClaimedResponse =\n (): Codec<TalerMerchantApi.CheckPaymentClaimedResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentClaimedResponse>()\n .property(\"order_status\", codecForConstString(\"claimed\"))\n .property(\"contract_terms\", codecForContractTerms())\n .build(\"TalerMerchantApi.CheckPaymentClaimedResponse\");\n\nexport const codecForMerchantOrderPrivateStatusResponse =\n (): Codec<TalerMerchantApi.MerchantOrderStatusResponse> =>\n buildCodecForUnion<TalerMerchantApi.MerchantOrderStatusResponse>()\n .discriminateOn(\"order_status\")\n .alternative(\"paid\", codecForCheckPaymentPaidResponse())\n .alternative(\"unpaid\", codecForCheckPaymentUnpaidResponse())\n .alternative(\"claimed\", codecForCheckPaymentClaimedResponse())\n .build(\"TalerMerchantApi.MerchantOrderStatusResponse\");\n\nexport const codecForRefundDetails =\n (): Codec<TalerMerchantApi.RefundDetails> =>\n buildCodecForObject<TalerMerchantApi.RefundDetails>()\n .property(\"reason\", codecForString())\n .property(\"pending\", codecForBoolean())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .build(\"TalerMerchantApi.RefundDetails\");\n\nexport const codecForTransactionWireTransfer =\n (): Codec<TalerMerchantApi.TransactionWireTransfer> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireTransfer>()\n .property(\"exchange_url\", codecForURL())\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"confirmed\", codecForBoolean())\n .build(\"TalerMerchantApi.TransactionWireTransfer\");\n\nexport const codecForTransactionWireReport =\n (): Codec<TalerMerchantApi.TransactionWireReport> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireReport>()\n .property(\"code\", codecForNumber())\n .property(\"hint\", codecForString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"coin_pub\", codecForString())\n .build(\"TalerMerchantApi.TransactionWireReport\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<TalerMerchantApi.MerchantRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.MerchantRefundResponse>()\n .property(\"taler_refund_uri\", codecForTalerUriString())\n .property(\"h_contract\", codecForString())\n .build(\"TalerMerchantApi.MerchantRefundResponse\");\n\nexport const codecForTansferList = (): Codec<TalerMerchantApi.TransferList> =>\n buildCodecForObject<TalerMerchantApi.TransferList>()\n .property(\"transfers\", codecForList(codecForTransferDetails()))\n .build(\"TalerMerchantApi.TransferList\");\n\nexport const codecForTransferDetails =\n (): Codec<TalerMerchantApi.TransferDetails> =>\n buildCodecForObject<TalerMerchantApi.TransferDetails>()\n .property(\"credit_amount\", codecForAmountString())\n .property(\"wtid\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"exchange_url\", codecForURL())\n .property(\"transfer_serial_id\", codecForNumber())\n .property(\"execution_time\", codecOptional(codecForTimestamp))\n .property(\"verified\", codecOptional(codecForBoolean()))\n .property(\"confirmed\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.TransferDetails\");\n\nexport const codecForOtpDeviceSummaryResponse =\n (): Codec<TalerMerchantApi.OtpDeviceSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceSummaryResponse>()\n .property(\"otp_devices\", codecForList(codecForOtpDeviceEntry()))\n .build(\"TalerMerchantApi.OtpDeviceSummaryResponse\");\n\nexport const codecForOtpDeviceEntry =\n (): Codec<TalerMerchantApi.OtpDeviceEntry> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceEntry>()\n .property(\"otp_device_id\", codecForString())\n .property(\"device_description\", codecForString())\n .build(\"TalerMerchantApi.OtpDeviceEntry\");\n\nexport const codecForOtpDeviceDetails =\n (): Codec<TalerMerchantApi.OtpDeviceDetails> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceDetails>()\n .property(\"device_description\", codecForString())\n .property(\"otp_algorithm\", codecForNumber())\n .property(\"otp_ctr\", codecOptional(codecForNumber()))\n .property(\"otp_timestamp\", codecForNumber())\n .property(\"otp_code\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.OtpDeviceDetails\");\n\nexport const codecForTemplateSummaryResponse =\n (): Codec<TalerMerchantApi.TemplateSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.TemplateSummaryResponse>()\n .property(\"templates\", codecForList(codecForTemplateEntry()))\n .build(\"TalerMerchantApi.TemplateSummaryResponse\");\n\nexport const codecForTemplateEntry =\n (): Codec<TalerMerchantApi.TemplateEntry> =>\n buildCodecForObject<TalerMerchantApi.TemplateEntry>()\n .property(\"template_id\", codecForString())\n .property(\"template_description\", codecForString())\n .build(\"TalerMerchantApi.TemplateEntry\");\n\nexport const codecForTemplateDetails =\n (): Codec<TalerMerchantApi.TemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateDetails>()\n .property(\"template_description\", codecForString())\n .property(\"otp_id\", codecOptional(codecForString()))\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.TemplateDetails\");\n\nexport const codecForTemplateContractDetails =\n (): Codec<TalerMerchantApi.TemplateContractDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetails>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecForNumber())\n .property(\"pay_duration\", codecForDuration)\n .build(\"TalerMerchantApi.TemplateContractDetails\");\n\nexport const codecForTemplateContractDetailsDefaults =\n (): Codec<TalerMerchantApi.TemplateContractDetailsDefaults> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetailsDefaults>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .property(\"pay_duration\", codecOptional(codecForDuration))\n .build(\"TalerMerchantApi.TemplateContractDetailsDefaults\");\n\nexport const codecForWalletTemplateDetails =\n (): Codec<TalerMerchantApi.WalletTemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.WalletTemplateDetails>()\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.WalletTemplateDetails\");\n\nexport const codecForWebhookSummaryResponse =\n (): Codec<TalerMerchantApi.WebhookSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.WebhookSummaryResponse>()\n .property(\"webhooks\", codecForList(codecForWebhookEntry()))\n .build(\"TalerMerchantApi.WebhookSummaryResponse\");\n\nexport const codecForWebhookEntry = (): Codec<TalerMerchantApi.WebhookEntry> =>\n buildCodecForObject<TalerMerchantApi.WebhookEntry>()\n .property(\"webhook_id\", codecForString())\n .property(\"event_type\", codecForString())\n .build(\"TalerMerchantApi.WebhookEntry\");\n\nexport const codecForWebhookDetails =\n (): Codec<TalerMerchantApi.WebhookDetails> =>\n buildCodecForObject<TalerMerchantApi.WebhookDetails>()\n .property(\"event_type\", codecForString())\n .property(\"url\", codecForString())\n .property(\"http_method\", codecForString())\n .property(\"header_template\", codecOptional(codecForString()))\n .property(\"body_template\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.WebhookDetails\");\n\nexport const codecForTokenFamilyKind =\n (): Codec<TalerMerchantApi.TokenFamilyKind> =>\n codecForEither(\n codecForConstString(\"discount\"),\n codecForConstString(\"subscription\"),\n ) as any; //FIXME: create a codecForEnum\nexport const codecForTokenFamilyDetails =\n (): Codec<TalerMerchantApi.TokenFamilyDetails> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilyDetails>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"duration\", codecForDuration)\n .property(\"kind\", codecForTokenFamilyKind())\n .property(\"issued\", codecForNumber())\n .property(\"redeemed\", codecForNumber())\n .build(\"TalerMerchantApi.TokenFamilyDetails\");\n\nexport const codecForTokenFamiliesList =\n (): Codec<TalerMerchantApi.TokenFamiliesList> =>\n buildCodecForObject<TalerMerchantApi.TokenFamiliesList>()\n .property(\"token_families\", codecForList(codecForTokenFamilySummary()))\n .build(\"TalerMerchantApi.TokenFamiliesList\");\n\nexport const codecForTokenFamilySummary =\n (): Codec<TalerMerchantApi.TokenFamilySummary> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilySummary>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"kind\", codecForTokenFamilyKind())\n .build(\"TalerMerchantApi.TokenFamilySummary\");\n\nexport const codecForInstancesResponse =\n (): Codec<TalerMerchantApi.InstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.InstancesResponse>()\n .property(\"instances\", codecForList(codecForInstance()))\n .build(\"TalerMerchantApi.InstancesResponse\");\n\nexport const codecForInstance = (): Codec<TalerMerchantApi.Instance> =>\n buildCodecForObject<TalerMerchantApi.Instance>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"id\", codecForString())\n .property(\"merchant_pub\", codecForString())\n .property(\"payment_targets\", codecForList(codecForString()))\n .property(\"deleted\", codecForBoolean())\n .build(\"TalerMerchantApi.Instance\");\n\nexport const codecForExchangeConfig =\n (): Codec<TalerExchangeApi.ExchangeVersionResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeVersionResponse>()\n .property(\"version\", codecForString())\n .property(\"name\", codecForConstString(\"taler-exchange\"))\n .property(\"implementation\", codecOptional(codecForURN()))\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"supported_kyc_requirements\", codecForList(codecForString()))\n .build(\"TalerExchangeApi.ExchangeVersionResponse\");\n\nexport const codecForExchangeKeys =\n (): Codec<TalerExchangeApi.ExchangeKeysResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeKeysResponse>()\n .property(\"version\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"TalerExchangeApi.ExchangeKeysResponse\");\n\nconst codecForBalance = (): Codec<TalerCorebankApi.Balance> =>\n buildCodecForObject<TalerCorebankApi.Balance>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"credit_debit_indicator\",\n codecForEither(\n codecForConstString(\"credit\"),\n codecForConstString(\"debit\"),\n ),\n )\n .build(\"TalerCorebankApi.Balance\");\n\nconst codecForPublicAccount = (): Codec<TalerCorebankApi.PublicAccount> =>\n buildCodecForObject<TalerCorebankApi.PublicAccount>()\n .property(\"username\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.PublicAccount\");\n\nexport const codecForPublicAccountsResponse =\n (): Codec<TalerCorebankApi.PublicAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.PublicAccountsResponse>()\n .property(\"public_accounts\", codecForList(codecForPublicAccount()))\n .build(\"TalerCorebankApi.PublicAccountsResponse\");\n\nexport const codecForAccountMinimalData =\n (): Codec<TalerCorebankApi.AccountMinimalData> =>\n buildCodecForObject<TalerCorebankApi.AccountMinimalData>()\n .property(\"username\", codecForString())\n .property(\"name\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"balance\", codecForBalance())\n .property(\"row_id\", codecForNumber())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"min_cashout\", codecOptional(codecForAmountString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"status\",\n codecOptional(\n codecForEither(\n codecForConstString(\"active\"),\n codecForConstString(\"deleted\"),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountMinimalData\");\n\nexport const codecForListBankAccountsResponse =\n (): Codec<TalerCorebankApi.ListBankAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.ListBankAccountsResponse>()\n .property(\"accounts\", codecForList(codecForAccountMinimalData()))\n .build(\"TalerCorebankApi.ListBankAccountsResponse\");\n\nexport const codecForAccountData = (): Codec<TalerCorebankApi.AccountData> =>\n buildCodecForObject<TalerCorebankApi.AccountData>()\n .property(\"name\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"min_cashout\", codecOptional(codecForAmountString()))\n .property(\"contact_data\", codecOptional(codecForChallengeContactData()))\n .property(\"cashout_payto_uri\", codecOptional(codecForPaytoString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"tan_channel\",\n codecOptional(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\n \"status\",\n codecOptional(\n codecForEither(\n codecForConstString(\"active\"),\n codecForConstString(\"deleted\"),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountData\");\n\nexport const codecForChallengeContactData =\n (): Codec<TalerCorebankApi.ChallengeContactData> =>\n buildCodecForObject<TalerCorebankApi.ChallengeContactData>()\n .property(\"email\", codecOptional(codecForString()))\n .property(\"phone\", codecOptional(codecForString()))\n .build(\"TalerCorebankApi.ChallengeContactData\");\n\nexport const codecForWithdrawalPublicInfo =\n (): Codec<TalerCorebankApi.WithdrawalPublicInfo> =>\n buildCodecForObject<TalerCorebankApi.WithdrawalPublicInfo>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"username\", codecForString())\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\n \"selected_exchange_account\",\n codecOptional(codecForPaytoString()),\n )\n .build(\"TalerCorebankApi.WithdrawalPublicInfo\");\n\nexport const codecForBankAccountTransactionsResponse =\n (): Codec<TalerCorebankApi.BankAccountTransactionsResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionsResponse>()\n .property(\n \"transactions\",\n codecForList(codecForBankAccountTransactionInfo()),\n )\n .build(\"TalerCorebankApi.BankAccountTransactionsResponse\");\n\nexport const codecForBankAccountTransactionInfo =\n (): Codec<TalerCorebankApi.BankAccountTransactionInfo> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionInfo>()\n .property(\"creditor_payto_uri\", codecForPaytoString())\n .property(\"debtor_payto_uri\", codecForPaytoString())\n .property(\"amount\", codecForAmountString())\n .property(\n \"direction\",\n codecForEither(\n codecForConstString(\"debit\"),\n codecForConstString(\"credit\"),\n ),\n )\n .property(\"subject\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"date\", codecForTimestamp)\n .build(\"TalerCorebankApi.BankAccountTransactionInfo\");\n\nexport const codecForCreateTransactionResponse =\n (): Codec<TalerCorebankApi.CreateTransactionResponse> =>\n buildCodecForObject<TalerCorebankApi.CreateTransactionResponse>()\n .property(\"row_id\", codecForNumber())\n .build(\"TalerCorebankApi.CreateTransactionResponse\");\n\nexport const codecForRegisterAccountResponse =\n (): Codec<TalerCorebankApi.RegisterAccountResponse> =>\n buildCodecForObject<TalerCorebankApi.RegisterAccountResponse>()\n .property(\"internal_payto_uri\", codecForPaytoString())\n .build(\"TalerCorebankApi.RegisterAccountResponse\");\n\nexport const codecForBankAccountCreateWithdrawalResponse =\n (): Codec<TalerCorebankApi.BankAccountCreateWithdrawalResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountCreateWithdrawalResponse>()\n .property(\"taler_withdraw_uri\", codecForTalerUriString())\n .property(\"withdrawal_id\", codecForString())\n .build(\"TalerCorebankApi.BankAccountCreateWithdrawalResponse\");\n\nexport const codecForCashoutPending =\n (): Codec<TalerCorebankApi.CashoutResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutResponse>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutPending\");\n\nexport const codecForCashoutConversionResponse =\n (): Codec<TalerBankConversionApi.CashoutConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashoutConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashoutConversionResponse\");\n\nexport const codecForCashinConversionResponse =\n (): Codec<TalerBankConversionApi.CashinConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashinConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashinConversionResponse\");\n\nexport const codecForCashouts = (): Codec<TalerCorebankApi.Cashouts> =>\n buildCodecForObject<TalerCorebankApi.Cashouts>()\n .property(\"cashouts\", codecForList(codecForCashoutInfo()))\n .build(\"TalerCorebankApi.Cashouts\");\n\nexport const codecForCashoutInfo = (): Codec<TalerCorebankApi.CashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.CashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutInfo\");\n\nexport const codecForGlobalCashouts =\n (): Codec<TalerCorebankApi.GlobalCashouts> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashouts>()\n .property(\"cashouts\", codecForList(codecForGlobalCashoutInfo()))\n .build(\"TalerCorebankApi.GlobalCashouts\");\n\nexport const codecForGlobalCashoutInfo =\n (): Codec<TalerCorebankApi.GlobalCashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .property(\"username\", codecForString())\n .build(\"TalerCorebankApi.GlobalCashoutInfo\");\n\nexport const codecForCashoutStatusResponse =\n (): Codec<TalerCorebankApi.CashoutStatusResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutStatusResponse>()\n .property(\"amount_debit\", codecForAmountString())\n .property(\"amount_credit\", codecForAmountString())\n .property(\"subject\", codecForString())\n .property(\"creation_time\", codecForTimestamp)\n .build(\"TalerCorebankApi.CashoutStatusResponse\");\n\nexport const codecForConversionRatesResponse =\n (): Codec<TalerCorebankApi.ConversionRatesResponse> =>\n buildCodecForObject<TalerCorebankApi.ConversionRatesResponse>()\n .property(\"buy_at_ratio\", codecForDecimalNumber())\n .property(\"buy_in_fee\", codecForDecimalNumber())\n .property(\"sell_at_ratio\", codecForDecimalNumber())\n .property(\"sell_out_fee\", codecForDecimalNumber())\n .build(\"TalerCorebankApi.ConversionRatesResponse\");\n\nexport const codecForMonitorResponse =\n (): Codec<TalerCorebankApi.MonitorResponse> =>\n buildCodecForUnion<TalerCorebankApi.MonitorResponse>()\n .discriminateOn(\"type\")\n .alternative(\"no-conversions\", codecForMonitorNoConversion())\n .alternative(\"with-conversions\", codecForMonitorWithCashout())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForMonitorNoConversion =\n (): Codec<TalerCorebankApi.MonitorNoConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorNoConversion>()\n .property(\"type\", codecForConstString(\"no-conversions\"))\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorJustPayouts\");\n\nexport const codecForMonitorWithCashout =\n (): Codec<TalerCorebankApi.MonitorWithConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorWithConversion>()\n .property(\"type\", codecForConstString(\"with-conversions\"))\n .property(\"cashinCount\", codecForNumber())\n .property(\"cashinFiatVolume\", codecForAmountString())\n .property(\"cashinRegionalVolume\", codecForAmountString())\n .property(\"cashoutCount\", codecForNumber())\n .property(\"cashoutFiatVolume\", codecForAmountString())\n .property(\"cashoutRegionalVolume\", codecForAmountString())\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorWithCashout\");\n\nexport const codecForBankVersion =\n (): Codec<TalerBankIntegrationApi.BankVersion> =>\n buildCodecForObject<TalerBankIntegrationApi.BankVersion>()\n .property(\"currency\", codecForCurrencyName())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForLibtoolVersion())\n .build(\"TalerBankIntegrationApi.BankVersion\");\n\nexport const codecForBankWithdrawalOperationStatus =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"sender_wire\", codecOptional(codecForPaytoString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .property(\"wire_types\", codecForList(codecForString()))\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\"selected_exchange_account\", codecOptional(codecForString()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationStatus\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationPostResponse\");\n\nexport const codecForRevenueConfig = (): Codec<TalerRevenueApi.RevenueConfig> =>\n buildCodecForObject<TalerRevenueApi.RevenueConfig>()\n .property(\"name\", codecForConstString(\"taler-revenue\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"TalerRevenueApi.RevenueConfig\");\n\nexport const codecForRevenueIncomingHistory =\n (): Codec<TalerRevenueApi.RevenueIncomingHistory> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForRevenueIncomingBankTransaction()),\n )\n .build(\"TalerRevenueApi.MerchantIncomingHistory\");\n\nexport const codecForRevenueIncomingBankTransaction =\n (): Codec<TalerRevenueApi.RevenueIncomingBankTransaction> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"row_id\", codecForNumber())\n .property(\"subject\", codecForString())\n .build(\"TalerRevenueApi.RevenueIncomingBankTransaction\");\n\nexport const codecForTransferResponse =\n (): Codec<TalerWireGatewayApi.TransferResponse> =>\n buildCodecForObject<TalerWireGatewayApi.TransferResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.TransferResponse\");\n\nexport const codecForIncomingHistory =\n (): Codec<TalerWireGatewayApi.IncomingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForIncomingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.IncomingHistory\");\n\nexport const codecForIncomingBankTransaction =\n (): Codec<TalerWireGatewayApi.IncomingBankTransaction> =>\n buildCodecForUnion<TalerWireGatewayApi.IncomingBankTransaction>()\n .discriminateOn(\"type\")\n .alternative(\"RESERVE\", codecForIncomingReserveTransaction())\n .alternative(\"WAD\", codecForIncomingWadTransaction())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForIncomingReserveTransaction =\n (): Codec<TalerWireGatewayApi.IncomingReserveTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingReserveTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"reserve_pub\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"RESERVE\"))\n .build(\"TalerWireGatewayApi.IncomingReserveTransaction\");\n\nexport const codecForIncomingWadTransaction =\n (): Codec<TalerWireGatewayApi.IncomingWadTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingWadTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"origin_exchange_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"WAD\"))\n .property(\"wad_id\", codecForString())\n .build(\"TalerWireGatewayApi.IncomingWadTransaction\");\n\nexport const codecForOutgoingHistory =\n (): Codec<TalerWireGatewayApi.OutgoingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingHistory>()\n .property(\"debit_account\", codecForPaytoString())\n .property(\n \"outgoing_transactions\",\n codecForList(codecForOutgoingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.OutgoingHistory\");\n\nexport const codecForOutgoingBankTransaction =\n (): Codec<TalerWireGatewayApi.OutgoingBankTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"exchange_base_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"wtid\", codecForString())\n .build(\"TalerWireGatewayApi.OutgoingBankTransaction\");\n\nexport const codecForAddIncomingResponse =\n (): Codec<TalerWireGatewayApi.AddIncomingResponse> =>\n buildCodecForObject<TalerWireGatewayApi.AddIncomingResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.AddIncomingResponse\");\n\nexport const codecForAmlRecords = (): Codec<TalerExchangeApi.AmlRecords> =>\n buildCodecForObject<TalerExchangeApi.AmlRecords>()\n .property(\"records\", codecForList(codecForAmlRecord()))\n .build(\"TalerExchangeApi.AmlRecords\");\n\nexport const codecForAmlRecord = (): Codec<TalerExchangeApi.AmlRecord> =>\n buildCodecForObject<TalerExchangeApi.AmlRecord>()\n .property(\"current_state\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .property(\"rowid\", codecForNumber())\n .property(\"threshold\", codecForAmountString())\n .build(\"TalerExchangeApi.AmlRecord\");\n\nexport const codecForAmlDecisionDetails =\n (): Codec<TalerExchangeApi.AmlDecisionDetails> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetails>()\n .property(\"aml_history\", codecForList(codecForAmlDecisionDetail()))\n .property(\"kyc_attributes\", codecForList(codecForKycDetail()))\n .build(\"TalerExchangeApi.AmlDecisionDetails\");\n\nexport const codecForAmlDecisionDetail =\n (): Codec<TalerExchangeApi.AmlDecisionDetail> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetail>()\n .property(\"justification\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"new_threshold\", codecForAmountString())\n .property(\"decider_pub\", codecForString())\n .build(\"TalerExchangeApi.AmlDecisionDetail\");\n\nexport const codecForChallenge = (): Codec<TalerCorebankApi.Challenge> =>\n buildCodecForObject<TalerCorebankApi.Challenge>()\n .property(\"challenge_id\", codecForNumber())\n .build(\"TalerCorebankApi.Challenge\");\n\nexport const codecForTanTransmission =\n (): Codec<TalerCorebankApi.TanTransmission> =>\n buildCodecForObject<TalerCorebankApi.TanTransmission>()\n .property(\n \"tan_channel\",\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n )\n .property(\"tan_info\", codecForString())\n .build(\"TalerCorebankApi.TanTransmission\");\n\ninterface KycDetail {\n provider_section: string;\n attributes?: Object;\n collection_time: Timestamp;\n expiration_time: Timestamp;\n}\nexport const codecForKycDetail = (): Codec<TalerExchangeApi.KycDetail> =>\n buildCodecForObject<TalerExchangeApi.KycDetail>()\n .property(\"provider_section\", codecForString())\n .property(\"attributes\", codecOptional(codecForAny()))\n .property(\"collection_time\", codecForTimestamp)\n .property(\"expiration_time\", codecForTimestamp)\n .build(\"TalerExchangeApi.KycDetail\");\n\nexport const codecForAmlDecision = (): Codec<TalerExchangeApi.AmlDecision> =>\n buildCodecForObject<TalerExchangeApi.AmlDecision>()\n .property(\"justification\", codecForString())\n .property(\"new_threshold\", codecForAmountString())\n .property(\"h_payto\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"officer_sig\", codecForString())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"kyc_requirements\", codecOptional(codecForList(codecForString())))\n .build(\"TalerExchangeApi.AmlDecision\");\n\nexport const codecForConversionInfo =\n (): Codec<TalerBankConversionApi.ConversionInfo> =>\n buildCodecForObject<TalerBankConversionApi.ConversionInfo>()\n .property(\"cashin_fee\", codecForAmountString())\n .property(\"cashin_min_amount\", codecForAmountString())\n .property(\"cashin_ratio\", codecForDecimalNumber())\n .property(\n \"cashin_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashin_tiny_amount\", codecForAmountString())\n .property(\"cashout_fee\", codecForAmountString())\n .property(\"cashout_min_amount\", codecForAmountString())\n .property(\"cashout_ratio\", codecForDecimalNumber())\n .property(\n \"cashout_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashout_tiny_amount\", codecForAmountString())\n .build(\"ConversionBankConfig.ConversionInfo\");\n\nexport const codecForConversionBankConfig =\n (): Codec<TalerBankConversionApi.IntegrationConfig> =>\n buildCodecForObject<TalerBankConversionApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .property(\"fiat_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n\n .property(\"conversion_rate\", codecForConversionInfo())\n .build(\"ConversionBankConfig.IntegrationConfig\");\n\nexport const codecForChallengerTermsOfServiceResponse =\n (): Codec<ChallengerApi.ChallengerTermsOfServiceResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerTermsOfServiceResponse>()\n .property(\"name\", codecForConstString(\"challenger\"))\n .property(\"version\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"ChallengerApi.ChallengerTermsOfServiceResponse\");\n\nexport const codecForChallengeSetupResponse =\n (): Codec<ChallengerApi.ChallengeSetupResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeSetupResponse>()\n .property(\"nonce\", codecForString())\n .build(\"ChallengerApi.ChallengeSetupResponse\");\n\nexport const codecForChallengeStatus =\n (): Codec<ChallengerApi.ChallengeStatus> =>\n buildCodecForObject<ChallengerApi.ChallengeStatus>()\n .property(\"restrictions\", codecOptional(codecForMap(codecForAny())))\n .property(\"fix_address\", codecForBoolean())\n .property(\"last_address\", codecOptional(codecForMap(codecForAny())))\n .property(\"changes_left\", codecForNumber())\n .build(\"ChallengerApi.ChallengeStatus\");\nexport const codecForChallengeCreateResponse =\n (): Codec<ChallengerApi.ChallengeCreateResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeCreateResponse>()\n .property(\"attempts_left\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"transmitted\", codecForBoolean())\n .property(\"next_tx_time\", codecForString())\n .build(\"ChallengerApi.ChallengeCreateResponse\");\n\nexport const codecForInvalidPinResponse =\n (): Codec<ChallengerApi.InvalidPinResponse> =>\n buildCodecForObject<ChallengerApi.InvalidPinResponse>()\n .property(\"ec\", codecOptional(codecForNumber()))\n .property(\"hint\", codecForAny())\n .property(\"addresses_left\", codecForNumber())\n .property(\"pin_transmissions_left\", codecForNumber())\n .property(\"auth_attempts_left\", codecForNumber())\n .property(\"exhausted\", codecForBoolean())\n .property(\"no_challenge\", codecForBoolean())\n .build(\"ChallengerApi.InvalidPinResponse\");\n\nexport const codecForChallengerAuthResponse =\n (): Codec<ChallengerApi.ChallengerAuthResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerAuthResponse>()\n .property(\"access_token\", codecForString())\n .property(\"token_type\", codecForAny())\n .property(\"expires_in\", codecForNumber())\n .build(\"ChallengerApi.ChallengerAuthResponse\");\n\nexport const codecForChallengerInfoResponse =\n (): Codec<ChallengerApi.ChallengerInfoResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerInfoResponse>()\n .property(\"id\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"address_type\", codecForString())\n .property(\"expires\", codecForTimestamp)\n .build(\"ChallengerApi.ChallengerInfoResponse\");\n\ntype EmailAddress = string;\ntype PhoneNumber = string;\ntype EddsaSignature = string;\n// base32 encoded RSA blinded signature.\ntype BlindedRsaSignature = string;\ntype Base32 = string;\n\ntype DecimalNumber = string;\ntype RsaSignature = string;\ntype Float = number;\ntype LibtoolVersion = string;\n// The type of a coin's blinded envelope depends on the cipher that is used\n// for signing with a denomination key.\ntype CoinEnvelope = RSACoinEnvelope | CSCoinEnvelope;\n// For denomination signatures based on RSA, the planchet is just a blinded\n// coin's public EdDSA key.\ninterface RSACoinEnvelope {\n cipher: \"RSA\" | \"RSA+age_restricted\";\n rsa_blinded_planchet: string; // Crockford Base32 encoded\n}\n// For denomination signatures based on Blind Clause-Schnorr, the planchet\n// consists of the public nonce and two Curve25519 scalars which are two\n// blinded challenges in the Blinded Clause-Schnorr signature scheme.\n// See https://taler.net/papers/cs-thesis.pdf for details.\ninterface CSCoinEnvelope {\n cipher: \"CS\" | \"CS+age_restricted\";\n cs_nonce: string; // Crockford Base32 encoded\n cs_blinded_c0: string; // Crockford Base32 encoded\n cs_blinded_c1: string; // Crockford Base32 encoded\n}\n// Secret for blinding/unblinding.\n// An RSA blinding secret, which is basically\n// a 256-bit nonce, converted to Crockford Base32.\ntype DenominationBlindingKeyP = string;\n\n//FIXME: implement this codec\nconst codecForURL = codecForString;\n//FIXME: implement this codec\nconst codecForLibtoolVersion = codecForString;\n//FIXME: implement this codec\nconst codecForCurrencyName = codecForString;\n//FIXME: implement this codec\nconst codecForDecimalNumber = codecForString;\n\nexport type WithdrawalOperationStatus =\n | \"pending\"\n | \"selected\"\n | \"aborted\"\n | \"confirmed\";\n\nexport namespace TalerWireGatewayApi {\n export interface TransferResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n\n export interface TransferRequest {\n // Nonce to make the request idempotent. Requests with the same\n // transaction_uid that differ in any of the other fields\n // are rejected.\n request_uid: HashCode;\n\n // Amount to transfer.\n amount: AmountString;\n\n // Base URL of the exchange. Shall be included by the bank gateway\n // in the appropriate section of the wire transfer details.\n exchange_base_url: string;\n\n // Wire transfer identifier chosen by the exchange,\n // used by the merchant to identify the Taler order(s)\n // associated with this wire transfer.\n wtid: ShortHashCode;\n\n // The recipient's account identifier as a payto URI.\n credit_account: PaytoString;\n }\n\n export interface IncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: IncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if incoming transaction is empty\n credit_account?: PaytoString;\n }\n\n // Union discriminated by the \"type\" field.\n export type IncomingBankTransaction =\n | IncomingReserveTransaction\n | IncomingWadTransaction;\n\n export interface IncomingReserveTransaction {\n type: \"RESERVE\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // The reserve public key extracted from the transaction details.\n reserve_pub: EddsaPublicKey;\n }\n\n export interface IncomingWadTransaction {\n type: \"WAD\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n credit_account: PaytoString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // Base URL of the exchange that originated the wad.\n origin_exchange_url: string;\n\n // The reserve public key extracted from the transaction details.\n wad_id: WadId;\n }\n\n export interface OutgoingHistory {\n // Array of outgoing transactions.\n outgoing_transactions: OutgoingBankTransaction[];\n\n // Payto URI to identify the sender of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if outgoing transactions is empty\n debit_account?: PaytoString;\n }\n\n export interface OutgoingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n credit_account: PaytoString;\n\n // The wire transfer ID in the outgoing transaction.\n wtid: ShortHashCode;\n\n // Base URL of the exchange.\n exchange_base_url: string;\n }\n\n export interface AddIncomingRequest {\n // Amount to transfer.\n amount: AmountString;\n\n // Reserve public key that is included in the wire transfer details\n // to identify the reserve that is being topped up.\n reserve_pub: EddsaPublicKey;\n\n // Account (as payto URI) that makes the wire transfer to the exchange.\n // Usually this account must be created by the test harness before this API is\n // used. An exception is the \"exchange-fakebank\", where any debit account can be\n // specified, as it is automatically created.\n debit_account: PaytoString;\n }\n\n export interface AddIncomingResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n}\n\nexport namespace TalerRevenueApi {\n export interface RevenueConfig {\n // Name of the API.\n name: \"taler-revenue\";\n\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this gateway.\n currency: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface RevenueIncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: RevenueIncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n credit_account: string;\n }\n\n export interface RevenueIncomingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: string;\n\n // The wire transfer subject.\n subject: string;\n }\n}\n\nexport namespace TalerBankConversionApi {\n export interface ConversionInfo {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n }\n\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n // Currency used by this bank.\n regional_currency: string;\n\n // How the bank SPA should render this currency.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency: string;\n\n // How the bank SPA should render this currency.\n fiat_currency_specification: CurrencySpecification;\n\n // Extra conversion rate information.\n // Only present if server opts in to report the static conversion rate.\n conversion_rate: ConversionInfo;\n }\n\n export interface CashinConversionResponse {\n // Amount that the user will get deducted from their fiat\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their regional\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export interface CashoutConversionResponse {\n // Amount that the user will get deducted from their regional\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their fiat\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export type RoundingMode = \"zero\" | \"up\" | \"nearest\";\n\n export interface ConversionRate {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: RoundingMode;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: RoundingMode;\n }\n}\n\nexport namespace TalerBankIntegrationApi {\n export interface BankVersion {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification?: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n\n export interface BankWithdrawalOperationStatus {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Bank account of the customer that is withdrawing, as a\n // payto URI.\n sender_wire?: PaytoString;\n\n // Suggestion for an exchange given by the bank.\n suggested_exchange?: string;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Wire transfer types supported by the bank.\n wire_types: string[];\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: string;\n }\n\n export interface BankWithdrawalOperationPostRequest {\n // Reserve public key.\n reserve_pub: string;\n\n // Payto address of the exchange selected for the withdrawal.\n selected_exchange: PaytoString;\n }\n\n export interface BankWithdrawalOperationPostResponse {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: Omit<\"pending\", WithdrawalOperationStatus>;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n }\n}\n\nexport namespace TalerCorebankApi {\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n export interface Config {\n // Name of this API, always \"taler-corebank\".\n name: \"libeufin-bank\";\n // name: \"taler-corebank\";\n\n // API version in the form $n:$n:$n\n version: string;\n\n // Bank display name to be used in user interfaces.\n // For consistency use \"Taler Bank\" if missing.\n // @since v4, will become mandatory in the next version.\n bank_name: string;\n\n // Advertised base URL to use when you sharing an URL with another\n // program.\n // @since v4.\n base_url?: string;\n\n // If 'true' the server provides local currency conversion support\n // If 'false' some parts of the API are not supported and return 501\n allow_conversion: boolean;\n\n // If 'true' anyone can register\n // If 'false' only the admin can\n allow_registrations: boolean;\n\n // If 'true' account can delete themselves\n // If 'false' only the admin can delete accounts\n allow_deletions: boolean;\n\n // If 'true' anyone can edit their name\n // If 'false' only admin can\n allow_edit_name: boolean;\n\n // If 'true' anyone can edit their cashout account\n // If 'false' only the admin\n allow_edit_cashout_payto_uri: boolean;\n\n // Default debt limit for newly created accounts\n default_debit_threshold: AmountString;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // TAN channels supported by the server\n supported_tan_channels: TanChannel[];\n\n // Wire transfer type supported by the bank.\n // Default to 'iban' is missing\n // @since v4, may become mandatory in the future.\n wire_type: string;\n }\n\n export interface BankAccountCreateWithdrawalRequest {\n // Amount to withdraw.\n amount: AmountString;\n }\n export interface BankAccountCreateWithdrawalResponse {\n // ID of the withdrawal, can be used to view/modify the withdrawal operation.\n withdrawal_id: string;\n\n // URI that can be passed to the wallet to initiate the withdrawal.\n taler_withdraw_uri: TalerUriString;\n }\n export interface WithdrawalPublicInfo {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Account username\n username: string;\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: PaytoString;\n }\n\n export interface BankAccountTransactionsResponse {\n transactions: BankAccountTransactionInfo[];\n }\n\n export interface BankAccountTransactionInfo {\n creditor_payto_uri: PaytoString;\n debtor_payto_uri: PaytoString;\n\n amount: AmountString;\n direction: \"debit\" | \"credit\";\n\n subject: string;\n\n // Transaction unique ID. Matches\n // $transaction_id from the URI.\n row_id: number;\n date: Timestamp;\n }\n\n export interface CreateTransactionRequest {\n // Address in the Payto format of the wire transfer receiver.\n // It needs at least the 'message' query string parameter.\n payto_uri: PaytoString;\n\n // Transaction amount (in the $currency:x.y format), optional.\n // However, when not given, its value must occupy the 'amount'\n // query string parameter of the 'payto' field. In case it\n // is given in both places, the paytoUri's takes the precedence.\n amount?: AmountString;\n\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n // @since v4, will become mandatory in the next version.\n request_uid?: ShortHashCode;\n }\n\n export interface CreateTransactionResponse {\n // ID identifying the transaction being created\n row_id: Integer;\n }\n\n export interface RegisterAccountResponse {\n // Internal payto URI of this bank account.\n internal_payto_uri: PaytoString;\n }\n\n export interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n contact_data?: ChallengeContactData;\n\n // 'payto' address of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n cashout_payto_uri?: PaytoString;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: PaytoString;\n\n // If present, set the max debit allowed for this user\n // Only admin can set this property.\n debit_threshold?: AmountString;\n\n // If present, set a custom minimum cashout amount for this account.\n // Only admin can set this property\n // @since v4\n min_cashout?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n // Only admin can set this property, other user can reconfig their account\n // after creation.\n tan_channel?: TanChannel;\n }\n\n export interface ChallengeContactData {\n // E-Mail address\n email?: EmailAddress;\n\n // Phone number.\n phone?: PhoneNumber;\n }\n\n export interface AccountReconfiguration {\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n // Only admin can change this property.\n contact_data?: ChallengeContactData;\n\n // 'payto' URI of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n // Only admin can change this property if not allowed in config\n cashout_payto_uri?: PaytoString;\n\n // If present, change the legal name associated with $username.\n // Only admin can change this property if not allowed in config\n name?: string;\n\n // Make this account visible to anyone?\n is_public?: boolean;\n\n // If present, change the max debit allowed for this user\n // Only admin can change this property.\n debit_threshold?: AmountString;\n\n // If present, change the custom minimum cashout amount for this account.\n // Only admin can set this property\n // @since v4\n min_cashout?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n tan_channel?: TanChannel | null;\n }\n\n export interface AccountPasswordChange {\n // New password.\n new_password: string;\n // Old password. If present, check that the old password matches.\n // Optional for admin account.\n old_password?: string;\n }\n\n export interface PublicAccountsResponse {\n public_accounts: PublicAccount[];\n }\n export interface PublicAccount {\n // Username of the account\n username: string;\n\n // Internal payto URI of this bank account.\n payto_uri: string;\n\n // Current balance of the account\n balance: Balance;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface ListBankAccountsResponse {\n accounts: AccountMinimalData[];\n }\n export interface Balance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n }\n export interface AccountMinimalData {\n // Username\n username: string;\n\n // Legal name of the account owner.\n name: string;\n\n // Internal payto URI of this bank account.\n payto_uri: PaytoString;\n\n // current balance of the account\n balance: Balance;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Custom minimum cashout amount for this account.\n // If null or absent, the global conversion fee is used.\n // @since v4\n min_cashout?: AmountString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n\n // Current status of the account\n // active: the account can be used\n // deleted: the account has been deleted but is retained for compliance\n // reasons, only the administrator can access it\n // Default to 'active' is missing\n // @since v4, will become mandatory in the next version.\n status?: \"active\" | \"deleted\";\n }\n\n export interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: Balance;\n\n // payto://-URI of the account.\n payto_uri: PaytoString;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Custom minimum cashout amount for this account.\n // If null or absent, the global conversion fee is used.\n // @since v4\n min_cashout?: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: PaytoString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Is 2FA enabled and what channel is used for challenges?\n tan_channel?: TanChannel;\n \n // Current status of the account\n // active: the account can be used\n // deleted: the account has been deleted but is retained for compliance\n // reasons, only the administrator can access it\n // Default to 'active' is missing\n // @since v4, will become mandatory in the next version.\n status?: \"active\" | \"deleted\";\n }\n\n export interface CashoutRequest {\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n request_uid: ShortHashCode;\n\n // Optional subject to associate to the\n // cashout operation. This data will appear\n // as the incoming wire transfer subject in\n // the user's fiat bank account.\n subject?: string;\n\n // That is the plain amount that the user specified\n // to cashout. Its $currency is the (regional) currency of the\n // bank instance.\n amount_debit: AmountString;\n\n // That is the amount that will effectively be\n // transferred by the bank to the user's bank\n // account, that is external to the regional currency.\n // It is expressed in the fiat currency and\n // is calculated after the cashout fee and the\n // exchange rate. See the /cashout-rates call.\n // The client needs to calculate this amount\n // correctly based on the amount_debit and the cashout rate,\n // otherwise the request will fail.\n amount_credit: AmountString;\n }\n\n export interface CashoutResponse {\n // ID identifying the operation being created\n cashout_id: number;\n }\n\n /**\n * @deprecated since 4, use 2fa\n */\n export interface CashoutConfirmRequest {\n // the TAN that confirms $CASHOUT_ID.\n tan: string;\n }\n\n export interface Cashouts {\n // Every string represents a cash-out operation ID.\n cashouts: CashoutInfo[];\n }\n\n export interface CashoutInfo {\n cashout_id: number;\n /**\n * @deprecated since 4, use new 2fa\n */\n status?: \"pending\" | \"aborted\" | \"confirmed\";\n }\n export interface GlobalCashouts {\n // Every string represents a cash-out operation ID.\n cashouts: GlobalCashoutInfo[];\n }\n export interface GlobalCashoutInfo {\n cashout_id: number;\n username: string;\n }\n\n export interface CashoutStatusResponse {\n // Amount debited to the internal\n // regional currency bank account.\n amount_debit: AmountString;\n\n // Amount credited to the external bank account.\n amount_credit: AmountString;\n\n // Transaction subject.\n subject: string;\n\n // Time when the cashout was created.\n creation_time: Timestamp;\n }\n\n export interface ConversionRatesResponse {\n // Exchange rate to buy the local currency from the external one\n buy_at_ratio: DecimalNumber;\n\n // Exchange rate to sell the local currency for the external one\n sell_at_ratio: DecimalNumber;\n\n // Fee to subtract after applying the buy ratio.\n buy_in_fee: DecimalNumber;\n\n // Fee to subtract after applying the sell ratio.\n sell_out_fee: DecimalNumber;\n }\n\n export enum MonitorTimeframeParam {\n hour,\n day,\n month,\n year,\n decade,\n }\n\n export type MonitorResponse = MonitorNoConversion | MonitorWithConversion;\n\n // Monitoring stats when conversion is not supported\n export interface MonitorNoConversion {\n type: \"no-conversions\";\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n // Monitoring stats when conversion is supported\n export interface MonitorWithConversion {\n type: \"with-conversions\";\n\n // How many cashin operations were confirmed by a\n // wallet owner. Note: wallet owners\n // are NOT required to be customers of the libeufin-bank.\n cashinCount: number;\n\n // Overall regional currency that has been paid by the regional admin account\n // to regional bank accounts to fulfill all the confirmed cashin operations.\n cashinRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid to the fiat admin account\n // by fiat bank accounts to fulfill all the confirmed cashin operations.\n cashinFiatVolume: AmountString;\n\n // How many cashout operations were confirmed.\n cashoutCount: number;\n\n // Overall regional currency that has been paid to the regional admin account\n // by fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid by the fiat admin account\n // to fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutFiatVolume: AmountString;\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n export interface TanTransmission {\n // Channel of the last successful transmission of the TAN challenge.\n tan_channel: TanChannel;\n\n // Info of the last successful transmission of the TAN challenge.\n tan_info: string;\n }\n\n export interface Challenge {\n // Unique identifier of the challenge to solve to run this protected\n // operation.\n challenge_id: number;\n }\n\n export interface ChallengeSolve {\n // The TAN code that solves $CHALLENGE_ID\n tan: string;\n }\n\n export enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n }\n}\n\nexport namespace TalerExchangeApi {\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n export interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: AmountString;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: AmountString;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n export interface AmlDecision {\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: AmountString;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n export interface ExchangeVersionResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-exchange\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v18, may become mandatory in the future.\n implementation?: string;\n\n // Currency supported by this exchange, given\n // as a currency code (\"USD\" or \"EUR\").\n currency: string;\n\n // How wallets should render this currency.\n currency_specification: CurrencySpecification;\n\n // Names of supported KYC requirements.\n supported_kyc_requirements: string[];\n }\n\n export type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n // Account restriction that disables this type of\n // account for the indicated operation categorically.\n export interface DenyAllAccountRestriction {\n type: \"deny\";\n }\n // Accounts interacting with this type of account\n // restriction must have a payto://-URI matching\n // the given regex.\n export interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: { [lang_tag: string]: string };\n }\n\n export interface WireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: PaytoString;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignature;\n }\n\n export interface ExchangeKeysResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // The exchange's base URL.\n base_url: string;\n\n // The exchange's currency or asset unit.\n currency: string;\n\n /**\n * FIXME: PARTIALLY IMPLEMENTED!!\n */\n\n // How wallets should render this currency.\n // currency_specification: CurrencySpecification;\n\n // // Absolute cost offset for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // stefan_abs: AmountString;\n\n // // Factor to multiply the logarithm of the amount\n // // with to (over) approximate fees payable by amount.\n // // Note that the total to be paid is first to be\n // // divided by the smallest denomination to obtain\n // // the value that the logarithm is to be taken of.\n // stefan_log: AmountString;\n\n // // Linear cost factor for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // //\n // // Note that this is a scalar, as it is multiplied\n // // with the actual amount.\n // stefan_lin: Float;\n\n // // Type of the asset. \"fiat\", \"crypto\", \"regional\"\n // // or \"stock\". Wallets should adjust their UI/UX\n // // based on this value.\n // asset_type: string;\n\n // // Array of wire accounts operated by the exchange for\n // // incoming wire transfers.\n // accounts: WireAccount[];\n\n // // Object mapping names of wire methods (i.e. \"iban\" or \"x-taler-bank\")\n // // to wire fees.\n // wire_fees: { method: AggregateTransferFee[] };\n\n // // List of exchanges that this exchange is partnering\n // // with to enable wallet-to-wallet transfers.\n // wads: ExchangePartner[];\n\n // // Set to true if this exchange allows the use\n // // of reserves for rewards.\n // // @deprecated in protocol v18.\n // rewards_allowed: false;\n\n // // EdDSA master public key of the exchange, used to sign entries\n // // in denoms and signkeys.\n // master_public_key: EddsaPublicKey;\n\n // // Relative duration until inactive reserves are closed;\n // // not signed (!), can change without notice.\n // reserve_closing_delay: RelativeTime;\n\n // // Threshold amounts beyond which wallet should\n // // trigger the KYC process of the issuing\n // // exchange. Optional option, if not given there is no limit.\n // // Currency must match currency.\n // wallet_balance_limit_without_kyc?: AmountString[];\n\n // // Denominations offered by this exchange\n // denominations: DenomGroup[];\n\n // // Compact EdDSA signature (binary-only) over the\n // // contatentation of all of the master_sigs (in reverse\n // // chronological order by group) in the arrays under\n // // \"denominations\". Signature of TALER_ExchangeKeySetPS\n // exchange_sig: EddsaSignature;\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 signkeys. It is given\n // // explicitly as the client might otherwise be confused by clock skew as to\n // // which signing key was used for the exchange_sig.\n // exchange_pub: EddsaPublicKey;\n\n // // Denominations for which the exchange currently offers/requests recoup.\n // recoup: Recoup[];\n\n // // Array of globally applicable fees by time range.\n // global_fees: GlobalFees[];\n\n // // The date when the denomination keys were last updated.\n // list_issue_date: Timestamp;\n\n // // Auditors of the exchange.\n // auditors: AuditorKeys[];\n\n // // The exchange's signing keys.\n // signkeys: SignKey[];\n\n // // Optional field with a dictionary of (name, object) pairs defining the\n // // supported and enabled extensions, such as age_restriction.\n // extensions?: { name: ExtensionManifest };\n\n // // Signature by the exchange master key of the SHA-256 hash of the\n // // normalized JSON-object of field extensions, if it was set.\n // // The signature has purpose TALER_SIGNATURE_MASTER_EXTENSIONS.\n // extensions_sig?: EddsaSignature;\n }\n\n interface ExtensionManifest {\n // The criticality of the extension MUST be provided. It has the same\n // semantics as \"critical\" has for extensions in X.509:\n // - if \"true\", the client must \"understand\" the extension before\n // proceeding,\n // - if \"false\", clients can safely skip extensions they do not\n // understand.\n // (see https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)\n critical: boolean;\n\n // The version information MUST be provided in Taler's protocol version\n // ranges notation, see\n // https://docs.taler.net/core/api-common.html#protocol-version-ranges\n version: LibtoolVersion;\n\n // Optional configuration object, defined by the feature itself\n config?: object;\n }\n\n interface SignKey {\n // The actual exchange's EdDSA signing public key.\n key: EddsaPublicKey;\n\n // Initial validity date for the signing key.\n stamp_start: Timestamp;\n\n // Date when the exchange will stop using the signing key, allowed to overlap\n // slightly with the next signing key's validity to allow for clock skew.\n stamp_expire: Timestamp;\n\n // Date when all signatures made by the signing key expire and should\n // henceforth no longer be considered valid in legal disputes.\n stamp_end: Timestamp;\n\n // Signature over key and stamp_expire by the exchange master key.\n // Signature of TALER_ExchangeSigningKeyValidityPS.\n // Must have purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.\n master_sig: EddsaSignature;\n }\n\n interface AuditorKeys {\n // The auditor's EdDSA signing public key.\n auditor_pub: EddsaPublicKey;\n\n // The auditor's URL.\n auditor_url: string;\n\n // The auditor's name (for humans).\n auditor_name: string;\n\n // An array of denomination keys the auditor affirms with its signature.\n // Note that the message only includes the hash of the public key, while the\n // signature is actually over the expanded information including expiration\n // times and fees. The exact format is described below.\n denomination_keys: AuditorDenominationKey[];\n }\n interface AuditorDenominationKey {\n // Hash of the public RSA key used to sign coins of the respective\n // denomination. Note that the auditor's signature covers more than just\n // the hash, but this other information is already provided in denoms and\n // thus not repeated here.\n denom_pub_h: HashCode;\n\n // Signature of TALER_ExchangeKeyValidityPS.\n auditor_sig: EddsaSignature;\n }\n\n interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: Timestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: Timestamp;\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: RelativeTime;\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: Integer;\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: RelativeTime;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: EddsaSignature;\n }\n\n interface Recoup {\n // Hash of the public key of the denomination that is being revoked under\n // emergency protocol (see /recoup).\n h_denom_pub: HashCode;\n\n // We do not include any signature here, as the primary use-case for\n // this emergency involves the exchange having lost its signing keys,\n // so such a signature here would be pretty worthless. However, the\n // exchange will not honor /recoup requests unless they are for\n // denomination keys listed here.\n }\n\n interface AggregateTransferFee {\n // Per transfer wire transfer fee.\n wire_fee: AmountString;\n\n // Per transfer closing fee.\n closing_fee: AmountString;\n\n // What date (inclusive) does this fee go into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n start_date: Timestamp;\n\n // What date (exclusive) does this fee stop going into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n end_date: Timestamp;\n\n // Signature of TALER_MasterWireFeePS with\n // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.\n sig: EddsaSignature;\n }\n\n interface ExchangePartner {\n // Base URL of the partner exchange.\n partner_base_url: string;\n\n // Public master key of the partner exchange.\n partner_master_pub: EddsaPublicKey;\n\n // Per exchange-to-exchange transfer (wad) fee.\n wad_fee: AmountString;\n\n // Exchange-to-exchange wad (wire) transfer frequency.\n wad_frequency: RelativeTime;\n\n // When did this partnership begin (under these conditions)?\n start_date: Timestamp;\n\n // How long is this partnership expected to last?\n end_date: Timestamp;\n\n // Signature using the exchange's offline key over\n // TALER_WadPartnerSignaturePS\n // with purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS.\n master_sig: EddsaSignature;\n }\n\n type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n\n // Binary representation of the age groups.\n // The bits set in the mask mark the edges at the beginning of a next age\n // group. F.e. for the age groups\n // 0-7, 8-9, 10-11, 12-13, 14-15, 16-17, 18-21, 21-*\n // the following bits are set:\n //\n // 31 24 16 8 0\n // | | | | |\n // oooooooo oo1oo1o1 o1o1o1o1 ooooooo1\n //\n // A value of 0 means that the exchange does not support the extension for\n // age-restriction.\n type AgeMask = Integer;\n\n interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n // Common attributes for all denomination groups\n interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n }\n interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignature;\n\n // When does the denomination key become valid?\n stamp_start: Timestamp;\n\n // When is it no longer possible to withdraw coins\n // of this denomination?\n stamp_expire_withdraw: Timestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_deposit: Timestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: Timestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n }\n type DenominationKey = RsaDenominationKey | CSDenominationKey;\n interface RsaDenominationKey {\n cipher: \"RSA\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // RSA public key\n rsa_public_key: RsaPublicKey;\n }\n interface CSDenominationKey {\n cipher: \"CS\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // Public key of the denomination.\n cs_public_key: Cs25519Point;\n }\n}\n\nexport namespace TalerMerchantApi {\n export interface VersionResponse {\n // libtool-style representation of the Merchant protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-merchant\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since **v8**, may become mandatory in the future.\n implementation?: string;\n\n // Default (!) currency supported by this backend.\n // This is the currency that the backend should\n // suggest by default to the user when entering\n // amounts. See currencies for a list of\n // supported currencies and how to render them.\n currency: string;\n\n // How services should render currencies supported\n // by this backend. Maps\n // currency codes (e.g. \"EUR\" or \"KUDOS\") to\n // the respective currency specification.\n // All currencies in this map are supported by\n // the backend. Note that the actual currency\n // specifications are a *hint* for applications\n // that would like *advice* on how to render amounts.\n // Applications *may* ignore the currency specification\n // if they know how to render currencies that they are\n // used with.\n currencies: { [currency: string]: CurrencySpecification };\n\n // Array of exchanges trusted by the merchant.\n // Since protocol **v6**.\n exchanges: ExchangeConfigInfo[];\n }\n\n export interface ExchangeConfigInfo {\n // Base URL of the exchange REST API.\n base_url: string;\n\n // Currency for which the merchant is configured\n // to trust the exchange.\n // May not be the one the exchange actually uses,\n // but is the only one we would trust this exchange for.\n currency: string;\n\n // Offline master public key of the exchange. The\n // /keys data must be signed with this public\n // key for us to trust it.\n master_pub: EddsaPublicKey;\n }\n export interface ClaimRequest {\n // Nonce to identify the wallet that claimed the order.\n nonce: string;\n\n // Token that authorizes the wallet to claim the order.\n // *Optional* as the merchant may not have required it\n // (create_token set to false in PostOrderRequest).\n token?: ClaimToken;\n }\n\n export interface ClaimResponse {\n // Contract terms of the claimed order\n contract_terms: ContractTerms;\n\n // Signature by the merchant over the contract terms.\n sig: EddsaSignature;\n }\n\n export interface PaymentResponse {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Text to be shown to the point-of-sale staff as a proof of\n // payment.\n pos_confirmation?: string;\n }\n\n export interface PaymentStatusRequestParams {\n // Hash of the order\u2019s contract terms (this is used to\n // authenticate the wallet/customer in case\n // $ORDER_ID is guessable).\n // Required once an order was claimed.\n contractTermHash?: string;\n // Authorizes the request via the claim token that\n // was returned in the PostOrderResponse. Used with\n // unclaimed orders only. Whether token authorization is\n // required is determined by the merchant when the\n // frontend creates the order.\n claimToken?: string;\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // If specified, the merchant backend will wait up to\n // timeout_ms milliseconds for completion of the payment\n // before sending the HTTP response. A client must never\n // rely on this behavior, as the merchant backend may return\n // a response immediately.\n timeout?: number;\n // If set to \u201Cyes\u201D, poll for the order\u2019s pending refunds\n // to be picked up. timeout_ms specifies how long we\n // will wait for the refund.\n awaitRefundObtained?: boolean;\n // Indicates that we are polling for a refund above the\n // given AMOUNT. timeout_ms will specify how long we\n // will wait for the refund.\n refund?: AmountString;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface GetKycStatusRequestParams {\n // If specified, the KYC check should return\n // the KYC status only for this wire account.\n // Otherwise, for all wire accounts.\n wireHash?: string;\n // If specified, the KYC check should return\n // the KYC status only for the given exchange.\n // Otherwise, for all exchanges we interacted with.\n exchangeURL?: string;\n // If specified, the merchant will wait up to\n // timeout_ms milliseconds for the exchanges to\n // confirm completion of the KYC process(es).\n timeout?: number;\n }\n export interface GetOtpDeviceRequestParams {\n // Timestamp in seconds to use when calculating\n // the current OTP code of the device. Since protocol v10.\n faketime?: number;\n // Price to use when calculating the current OTP\n // code of the device. Since protocol v10.\n price?: AmountString;\n }\n export interface GetOrderRequestParams {\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // Timeout in milliseconds to wait for a payment if\n // the answer would otherwise be negative (long polling).\n timeout?: number;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface ListWireTransferRequestParams {\n // Filter for transfers to the given bank account\n // (subject and amount MUST NOT be given in the payto URI).\n paytoURI?: string;\n // Filter for transfers executed before the given timestamp.\n before?: number;\n // Filter for transfers executed after the given timestamp.\n after?: number;\n // At most return the given number of results. Negative for\n // descending in execution time, positive for ascending in\n // execution time. Default is -20.\n limit?: number;\n // Starting transfer_serial_id for an iteration.\n offset?: string;\n // Filter transfers by verification status.\n verified?: boolean;\n order?: \"asc\" | \"dec\";\n }\n export interface ListOrdersRequestParams {\n // If set to yes, only return paid orders, if no only\n // unpaid orders. Do not give (or use \u201Call\u201D) to see all\n // orders regardless of payment status.\n paid?: boolean;\n // If set to yes, only return refunded orders, if no only\n // unrefunded orders. Do not give (or use \u201Call\u201D) to see\n // all orders regardless of refund status.\n refunded?: boolean;\n // If set to yes, only return wired orders, if no only\n // orders with missing wire transfers. Do not give (or\n // use \u201Call\u201D) to see all orders regardless of wire transfer\n // status.\n wired?: boolean;\n // At most return the given number of results. Negative\n // for descending by row ID, positive for ascending by\n // row ID. Default is 20. Since protocol v12.\n limit?: number;\n // Non-negative date in seconds after the UNIX Epoc, see delta\n // for its interpretation. If not specified, we default to the\n // oldest or most recent entry, depending on delta.\n date?: AbsoluteTime;\n // Starting product_serial_id for an iteration.\n // Since protocol v12.\n offset?: string;\n // Timeout in milliseconds to wait for additional orders if the\n // answer would otherwise be negative (long polling). Only useful\n // if delta is positive. Note that the merchant MAY still return\n // a response that contains fewer than delta orders.\n timeout?: number;\n // Since protocol v6. Filters by session ID.\n sessionId?: string;\n // Since protocol v6. Filters by fulfillment URL.\n fulfillmentUrl?: string;\n\n order?: \"asc\" | \"dec\";\n }\n\n export interface PayRequest {\n // The coins used to make the payment.\n coins: CoinPaySig[];\n\n // Custom inputs from the wallet for the contract.\n wallet_data?: Object;\n\n // The session for which the payment is made (or replayed).\n // Only set for session-based payments.\n session_id?: string;\n }\n export interface CoinPaySig {\n // Signature by the coin.\n coin_sig: EddsaSignature;\n\n // Public key of the coin being spent.\n coin_pub: EddsaPublicKey;\n\n // Signature made by the denomination public key.\n ub_sig: RsaSignature;\n\n // The hash of the denomination public key associated with this coin.\n h_denom: HashCode;\n\n // The amount that is subtracted from this coin with this payment.\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n }\n\n export interface StatusPaid {\n type: \"paid\";\n\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 export interface StatusGotoResponse {\n type: \"goto\";\n // The client should go to the reorder URL, there a fresh\n // order might be created as this one is taken by another\n // customer or wallet (or repurchase detection logic may\n // apply).\n public_reorder_url: string;\n }\n export interface StatusUnpaidResponse {\n type: \"unpaid\";\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n fulfillment_url?: string;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n }\n\n export interface PaidRefundStatusResponse {\n // Text to be shown to the point-of-sale staff as a proof of\n // payment (present only if reusable OTP algorithm is used).\n pos_confirmation?: string;\n\n // True if the order has been subjected to\n // refunds. False if it was simply paid.\n refunded: boolean;\n }\n export interface PaidRequest {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer and to enable signature verification without\n // database access).\n h_contract: HashCode;\n\n // Hash over custom inputs from the wallet for the contract.\n wallet_data_hash?: HashCode;\n\n // Session id for which the payment is proven.\n session_id: string;\n }\n\n export 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: HashCode;\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 interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKey;\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 export 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 export type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n // Details about why a refund failed.\n export 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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\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.\n export 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: EddsaSignature;\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: EddsaPublicKey;\n }\n\n export interface WalletRefundRequest {\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer).\n h_contract: HashCode;\n }\n export interface WalletRefundResponse {\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Successful refunds for this payment, empty array for none.\n refunds: MerchantCoinRefundStatus[];\n\n // Public key of the merchant.\n merchant_pub: EddsaPublicKey;\n }\n export type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n // Details about why a refund failed.\n export interface MerchantCoinRefundFailureStatus {\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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\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.\n export interface MerchantCoinRefundSuccessStatus {\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: EddsaSignature;\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: EddsaPublicKey;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\n }\n\n interface RewardInformation {\n // Exchange from which the reward will be withdrawn. Needed by the\n // wallet to determine denominations, fees, etc.\n exchange_url: string;\n\n // URL where to go after obtaining the reward.\n next_url: string;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n // Note that rewards that have expired MAY also result in a 404 response.\n expiration: Timestamp;\n }\n\n interface RewardPickupRequest {\n // List of planchets the wallet wants to use for the reward.\n planchets: PlanchetDetail[];\n }\n interface PlanchetDetail {\n // Hash of the denomination's public key (hashed to reduce\n // bandwidth consumption).\n denom_pub_hash: HashCode;\n\n // Coin's blinded public key.\n coin_ev: CoinEnvelope;\n }\n interface RewardResponse {\n // Blind RSA signatures over the planchets.\n // The order of the signatures matches the planchets list.\n blind_sigs: BlindSignature[];\n }\n interface BlindSignature {\n // The (blind) RSA signature. Still needs to be unblinded.\n blind_sig: BlindedRsaSignature;\n }\n\n export interface InstanceConfigurationMessage {\n // Name of the merchant instance to create (will become $INSTANCE).\n // Must match the regex ^[A-Za-z0-9][A-Za-z0-9_.@-]+$.\n id: string;\n\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Authentication settings for this instance\n auth: InstanceAuthConfigurationMessage;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstanceAuthConfigurationMessage {\n // Type of authentication.\n // \"external\": The mechant backend does not do\n // any authentication checks. Instead an API\n // gateway must do the authentication.\n // \"token\": The merchant checks an auth token.\n // See \"token\" for details.\n method: \"external\" | \"token\";\n\n // For method \"token\", this field is mandatory.\n // The token MUST begin with the string \"secret-token:\".\n // After the auth token has been set (with method \"token\"),\n // the value must be provided in a \"Authorization: Bearer $token\"\n // header.\n token?: AccessToken;\n }\n\n export interface InstanceReconfigurationMessage {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstancesResponse {\n // List of instances that are present in the backend (see Instance).\n instances: Instance[];\n }\n\n export interface Instance {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Merchant instance this response is about ($INSTANCE).\n id: string;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // List of the payment targets supported by this instance. Clients can\n // specify the desired payment target in /order requests. Note that\n // front-ends do not have to support wallets selecting payment targets.\n payment_targets: string[];\n\n // Has this instance been deleted (but not purged)?\n deleted: boolean;\n }\n\n export interface QueryInstancesResponse {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n\n // Authentication configuration.\n // Does not contain the token when token auth is configured.\n auth: {\n method: \"external\" | \"token\";\n };\n }\n\n export interface AccountKycRedirects {\n // Array of pending KYCs.\n pending_kycs: MerchantAccountKycRedirect[];\n\n // Array of exchanges with no reply.\n timeout_kycs: ExchangeKycTimeout[];\n }\n\n export interface MerchantAccountKycRedirect {\n // URL that the user should open in a browser to\n // proceed with the KYC process (as returned\n // by the exchange's /kyc-check/ endpoint).\n // Optional, missing if the account is blocked\n // due to AML and not due to KYC.\n kyc_url?: string;\n\n // AML status of the account.\n aml_status: Integer;\n\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Our bank wire account this is about.\n payto_uri: PaytoString;\n }\n\n export interface ExchangeKycTimeout {\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Numeric error code indicating errors the exchange\n // returned, or TALER_EC_INVALID for none.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information about the KYC status.\n // 0 if there was no response at all.\n exchange_http_status: number;\n }\n\n export interface AccountAddDetails {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export type FacadeCredentials =\n | NoFacadeCredentials\n | BasicAuthFacadeCredentials;\n export interface NoFacadeCredentials {\n type: \"none\";\n }\n export interface BasicAuthFacadeCredentials {\n type: \"basic\";\n\n // Username to use to authenticate\n username: string;\n\n // Password to use to authenticate\n password: string;\n }\n export interface AccountAddResponse {\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n }\n\n export interface AccountPatchDetails {\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n // If the argument is omitted, the old credentials\n // are simply preserved.\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export interface AccountsSummaryResponse {\n // List of accounts that are known for the instance.\n accounts: BankAccountSummaryEntry[];\n }\n\n // TODO: missing in docs\n export interface BankAccountSummaryEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n }\n export interface BankAccountEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // true if this account is active,\n // false if it is historic.\n active?: boolean;\n }\n\n export interface ProductAddDetail {\n // Product ID to use.\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface ProductPatchDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost?: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface InventorySummaryResponse {\n // List of products that are present in the inventory.\n products: InventoryEntry[];\n }\n\n export interface InventoryEntry {\n // Product identifier, as found in the product.\n product_id: string;\n // product_serial_id of the product in the database.\n product_serial: Integer;\n }\n\n export interface ProductDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that have already been sold.\n total_sold: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost: Integer;\n\n // Identifies where the product is in stock.\n address: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years).\n minimum_age?: Integer;\n }\n export interface LockRequest {\n // UUID that identifies the frontend performing the lock\n // Must be unique for the lifetime of the lock.\n lock_uuid: string;\n\n // How long does the frontend intend to hold the lock?\n duration: RelativeTime;\n\n // How many units should be locked?\n quantity: Integer;\n }\n\n export interface PostOrderRequest {\n // The order must at least contain the minimal\n // order detail, but can override all.\n order: Order;\n\n // If set, the backend will then set the refund deadline to the current\n // time plus the specified delay. If it's not set, refunds will not be\n // possible.\n refund_delay?: RelativeTime;\n\n // Specifies the payment target preferred by the client. Can be used\n // to select among the various (active) wire methods supported by the instance.\n payment_target?: string;\n\n // Specifies that some products are to be included in the\n // order from the inventory. For these inventory management\n // is performed (so the products must be in stock) and\n // details are completed from the product data of the backend.\n inventory_products?: MinimalInventoryProduct[];\n\n // Specifies a lock identifier that was used to\n // lock a product in the inventory. Only useful if\n // inventory_products is set. Used in case a frontend\n // reserved quantities of the individual products while\n // the shopping cart was being built. Multiple UUIDs can\n // be used in case different UUIDs were used for different\n // products (i.e. in case the user started with multiple\n // shopping sessions that were combined during checkout).\n lock_uuids?: string[];\n\n // Should a token for claiming the order be generated?\n // False can make sense if the ORDER_ID is sufficiently\n // high entropy to prevent adversarial claims (like it is\n // if the backend auto-generates one). Default is 'true'.\n create_token?: boolean;\n\n // OTP device ID to associate with the order.\n // This parameter is optional.\n otp_id?: string;\n }\n\n type Order = MinimalOrderDetail | ContractTerms;\n\n interface MinimalOrderDetail {\n // Amount to be paid by the customer.\n amount: AmountString;\n\n // Short summary of the order.\n summary: string;\n\n // See documentation of fulfillment_url in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n // When creating an order, the fulfillment URL can\n // contain ${ORDER_ID} which will be substituted with the\n // order ID of the newly created order.\n fulfillment_url?: string;\n\n // See documentation of fulfillment_message in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n }\n\n interface MinimalInventoryProduct {\n // Which product is requested (here mandatory!).\n product_id: string;\n\n // How many units of the product are requested.\n quantity: Integer;\n }\n\n export interface PostOrderResponse {\n // Order ID of the response that was just created.\n order_id: string;\n\n // Token that authorizes the wallet to claim the order.\n // Provided only if \"create_token\" was set to 'true'\n // in the request.\n token?: ClaimToken;\n }\n export interface OutOfStockResponse {\n // Product ID of an out-of-stock item.\n product_id: string;\n\n // Requested quantity.\n requested_quantity: Integer;\n\n // Available quantity (must be below requested_quantity).\n available_quantity: Integer;\n\n // When do we expect the product to be again in stock?\n // Optional, not given if unknown.\n restock_expected?: Timestamp;\n }\n\n export interface OrderHistory {\n // Timestamp-sorted array of all orders matching the query.\n // The order of the sorting depends on the sign of delta.\n orders: OrderHistoryEntry[];\n }\n export interface OrderHistoryEntry {\n // Order ID of the transaction related to this entry.\n order_id: string;\n\n // Row ID of the order in the database.\n row_id: number;\n\n // When the order was created.\n timestamp: Timestamp;\n\n // The amount of money the order is for.\n amount: AmountString;\n\n // The summary of the order.\n summary: string;\n\n // Whether some part of the order is refundable,\n // that is the refund deadline has not yet expired\n // and the total amount refunded so far is below\n // the value of the original transaction.\n refundable: boolean;\n\n // Whether the order has been paid or not.\n paid: boolean;\n }\n\n export type MerchantOrderStatusResponse =\n | CheckPaymentPaidResponse\n | CheckPaymentClaimedResponse\n | CheckPaymentUnpaidResponse;\n export interface CheckPaymentPaidResponse {\n // The customer paid for this contract.\n order_status: \"paid\";\n\n // Was the payment refunded (even partially)?\n refunded: boolean;\n\n // True if there are any approved refunds that the wallet has\n // not yet obtained.\n refund_pending: boolean;\n\n // Did the exchange wire us the funds?\n wired: boolean;\n\n // Total amount the exchange deposited into our bank account\n // for this contract, excluding fees.\n deposit_total: AmountString;\n\n // Numeric error code indicating errors the exchange\n // encountered tracking the wire transfer for this purchase (before\n // we even got to specific coin issues).\n // 0 if there were no issues.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information to track the wire transfer for this purchase.\n // 0 if there were no issues.\n exchange_http_status: number;\n\n // Total amount that was refunded, 0 if refunded is false.\n refund_amount: AmountString;\n\n // Contract terms.\n contract_terms: ContractTerms;\n\n // The wire transfer status from the exchange for this order if\n // available, otherwise empty array.\n wire_details: TransactionWireTransfer[];\n\n // Reports about trouble obtaining wire transfer details,\n // empty array if no trouble were encountered.\n wire_reports: TransactionWireReport[];\n\n // The refund details for this order. One entry per\n // refunded coin; empty array if there are no refunds.\n refund_details: RefundDetails[];\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n }\n export interface CheckPaymentClaimedResponse {\n // A wallet claimed the order, but did not yet pay for the contract.\n order_status: \"claimed\";\n\n // Contract terms.\n contract_terms: ContractTerms;\n }\n export interface CheckPaymentUnpaidResponse {\n // The order was neither claimed nor paid.\n order_status: \"unpaid\";\n\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // when was the order created\n creation_time: Timestamp;\n\n // Order summary text.\n summary: string;\n\n // Total amount of the order (to be paid by the customer).\n total_amount: AmountString;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n\n // Fulfillment URL of an already paid order. Only given if under this\n // session an already paid order with a fulfillment URL exists.\n already_paid_fulfillment_url?: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n\n // We do we NOT return the contract terms here because they may not\n // exist in case the wallet did not yet claim them.\n }\n export interface RefundDetails {\n // Reason given for the refund.\n reason: string;\n\n // Set to true if a refund is still available for the wallet for this payment.\n pending: boolean;\n\n // When was the refund approved.\n timestamp: Timestamp;\n\n // Total amount that was refunded (minus a refund fee).\n amount: AmountString;\n }\n export interface TransactionWireTransfer {\n // Responsible exchange.\n exchange_url: string;\n\n // 32-byte wire transfer identifier.\n wtid: Base32;\n\n // Execution time of the wire transfer.\n execution_time: Timestamp;\n\n // Total amount that has been wire transferred\n // to the merchant.\n amount: AmountString;\n\n // Was this transfer confirmed by the merchant via the\n // POST /transfers API, or is it merely claimed by the exchange?\n confirmed: boolean;\n }\n export interface TransactionWireReport {\n // Numerical error code.\n code: number;\n\n // Human-readable error description.\n hint: string;\n\n // Numerical error code from the exchange.\n exchange_code: number;\n\n // HTTP status code received from the exchange.\n exchange_http_status: number;\n\n // Public key of the coin for which we got the exchange error.\n coin_pub: CoinPublicKey;\n }\n\n export interface ForgetRequest {\n // Array of valid JSON paths to forgettable fields in the order's\n // contract terms.\n fields: string[];\n }\n\n export interface RefundRequest {\n // Amount to be refunded.\n refund: AmountString;\n\n // Human-readable refund justification.\n reason: string;\n }\n export interface MerchantRefundResponse {\n // URL (handled by the backend) that the wallet should access to\n // trigger refund processing.\n // taler://refund/...\n taler_refund_uri: string;\n\n // Contract hash that a client may need to authenticate an\n // HTTP request to obtain the above URI in a wallet-friendly way.\n h_contract: HashCode;\n }\n\n export interface TransferInformation {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n }\n\n export interface TransferList {\n // List of all the transfers that fit the filter that we know.\n transfers: TransferDetails[];\n }\n export interface TransferDetails {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n\n // Serial number identifying the transfer in the merchant backend.\n // Used for filtering via offset.\n transfer_serial_id: number;\n\n // Time of the execution of the wire transfer by the exchange, according to the exchange\n // Only provided if we did get an answer from the exchange.\n execution_time?: Timestamp;\n\n // True if we checked the exchange's answer and are happy with it.\n // False if we have an answer and are unhappy, missing if we\n // do not have an answer from the exchange.\n verified?: boolean;\n\n // True if the merchant uses the POST /transfers API to confirm\n // that this wire transfer took place (and it is thus not\n // something merely claimed by the exchange).\n confirmed?: boolean;\n }\n\n\n export interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n // \"NONE\" or 0: No algorithm (no pos confirmation will be generated)\n // \"TOTP_WITHOUT_PRICE\" or 1: Without amounts (typical OTP device)\n // \"TOTP_WITH_PRICE\" or 2: With amounts (special-purpose OTP device)\n // The \"String\" variants are supported @since protocol **v7**.\n otp_algorithm: Integer | string;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDevicePatchDetails {\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDeviceSummaryResponse {\n // Array of devices that are present in our backend.\n otp_devices: OtpDeviceEntry[];\n }\n export interface OtpDeviceEntry {\n // Device identifier.\n otp_device_id: string;\n\n // Human-readable description for the device.\n device_description: string;\n }\n\n export interface OtpDeviceDetails {\n // Human-readable description for the device.\n device_description: string;\n\n // Algorithm for computing the POS confirmation.\n //\n // Currently, the following numbers are defined:\n // 0: None\n // 1: TOTP without price\n // 2: TOTP with price\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n\n // Current time for time-based OTP devices.\n // Will match the faketime argument of the\n // query if one was present, otherwise the current\n // time at the backend.\n //\n // Available since protocol **v10**.\n otp_timestamp: Integer;\n\n // Current OTP confirmation string of the device.\n // Matches exactly the string that would be returned\n // as part of a payment confirmation for the given\n // amount and time (so may contain multiple OTP codes).\n //\n // If the otp_algorithm is time-based, the code is\n // returned for the current time, or for the faketime\n // if a TIMESTAMP query argument was provided by the client.\n //\n // When using OTP with counters, the counter is **NOT**\n // increased merely because this endpoint created\n // an OTP code (this is a GET request, after all!).\n //\n // If the otp_algorithm requires an amount, the\n // amount argument must be specified in the\n // query, otherwise the otp_code is not\n // generated.\n //\n // This field is *optional* in the response, as it is\n // only provided if we could compute it based on the\n // otp_algorithm and matching client query arguments.\n //\n // Available since protocol **v10**.\n otp_code?: string;\n }\n export interface TemplateAddDetails {\n // Template ID to use.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface TemplateContractDetails {\n // Human-readable summary for the template.\n summary?: string;\n\n // Required currency for payments to the template.\n // The user may specify any amount, but it must be\n // in this currency.\n // This parameter is optional and should not be present\n // if \"amount\" is given.\n currency?: string;\n\n // The price is imposed by the merchant and cannot be changed by the customer.\n // This parameter is optional.\n amount?: AmountString;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age: Integer;\n\n // The time the customer need to pay before his order will be deleted.\n // It is deleted if the customer did not pay and if the duration is over.\n pay_duration: RelativeTime;\n }\n\n export interface TemplateContractDetailsDefaults {\n summary?: string;\n\n currency?: string;\n\n amount?: AmountString;\n\n minimum_age?: Integer;\n\n pay_duration?: RelativeTime;\n }\n export interface TemplatePatchDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateSummaryResponse {\n // List of templates that are present in our backend.\n templates: TemplateEntry[];\n }\n\n export interface TemplateEntry {\n // Template identifier, as found in the template.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n }\n\n export interface WalletTemplateDetails {\n // Hard-coded information about the contrac terms\n // for this template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface UsingTemplateDetails {\n // Summary of the template\n summary?: string;\n\n // The amount entered by the customer.\n amount?: AmountString;\n }\n\n export interface WebhookAddDetails {\n // Webhook ID to use.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookPatchDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookSummaryResponse {\n // Return webhooks that are present in our backend.\n webhooks: WebhookEntry[];\n }\n\n export interface WebhookEntry {\n // Webhook identifier, as found in the webhook.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n }\n\n export interface WebhookDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface TokenFamilyCreateRequest {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n // If not specified, merchant backend will use the current time.\n valid_after?: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export enum TokenFamilyKind {\n Discount = \"discount\",\n Subscription = \"subscription\",\n }\n\n export interface TokenFamilyUpdateRequest {\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n }\n\n export interface TokenFamiliesList {\n // All configured token families of this instance.\n token_families: TokenFamilySummary[];\n }\n\n export interface TokenFamilySummary {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export interface TokenFamilyDetails {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n\n // How many tokens have been issued for this family.\n issued: Integer;\n\n // How many tokens have been redeemed for this family.\n redeemed: Integer;\n }\n export interface ContractTerms {\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: { [lang_tag: string]: string };\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: AmountString;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional. When POSTing to the\n // merchant, the placeholder \"${ORDER_ID}\" will be\n // replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL).\n // Note that this placeholder can only be used once.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: { [lang_tag: string]: string };\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: AmountString;\n\n // List of products that are part of the purchase (see Product).\n products: Product[];\n\n // Time when this contract was generated.\n timestamp: Timestamp;\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: Timestamp;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: Timestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: Timestamp;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: EddsaPublicKey;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // More info about the merchant, see below.\n merchant: Merchant;\n\n // The hash of the merchant instance's wire details.\n h_wire: HashCode;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: Exchange[];\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: Timestamp;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: RelativeTime;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\n }\n\n export 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?: Integer;\n\n // 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?: ImageDataUrl;\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?: Timestamp;\n }\n\n export interface Tax {\n // The name of the tax.\n name: string;\n\n // Amount paid in tax.\n tax: AmountString;\n }\n export interface Merchant {\n // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\n }\n // Delivery location, loosely modeled as a subset of\n // ISO20022's PostalAddress25.\n export 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 interface Auditor {\n // Official name.\n name: string;\n\n // Auditor's public key.\n auditor_pub: EddsaPublicKey;\n\n // Base URL of the auditor.\n url: string;\n }\n export interface Exchange {\n // The exchange's base URL.\n url: string;\n\n // How much would the merchant like to use this exchange.\n // The wallet should use a suitable exchange with high\n // priority. The following priority values are used, but\n // it should be noted that they are NOT in any way normative.\n //\n // 0: likely it will not work (recently seen with account\n // restriction that would be bad for this merchant)\n // 512: merchant does not know, might be down (merchant\n // did not yet get /wire response).\n // 1024: good choice (recently confirmed working)\n priority: Integer;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKey;\n }\n}\n\nexport namespace ChallengerApi {\n export interface ChallengerTermsOfServiceResponse {\n // Name of the service\n name: \"challenger\";\n\n // libtool-style representation of the Challenger protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface ChallengeSetupResponse {\n // Nonce to use when constructing /authorize endpoint.\n nonce: string;\n }\n\n export interface Restriction {\n regex?: string;\n hint?: string;\n hint_i18n?: InternationalizedString;\n }\n\n export interface ChallengeStatus {\n // Object; map of keys (names of the fields of the address\n // to be entered by the user) to objects with a \"regex\" (string)\n // containing an extended Posix regular expression for allowed\n // address field values, and a \"hint\"/\"hint_i18n\" giving a\n // human-readable explanation to display if the value entered\n // by the user does not match the regex. Keys that are not mapped\n // to such an object have no restriction on the value provided by\n // the user. See \"ADDRESS_RESTRICTIONS\" in the challenger configuration.\n restrictions: Record<string, Restriction> | undefined;\n\n // indicates if the given address cannot be changed anymore, the\n // form should be read-only if set to true.\n fix_address: boolean;\n\n // form values from the previous submission if available, details depend\n // on the ADDRESS_TYPE, should be used to pre-populate the form\n last_address: Record<string, string> | undefined;\n\n // number of times the address can still be changed, may or may not be\n // shown to the user\n changes_left: Integer;\n }\n\n export interface ChallengeCreateResponse {\n // how many more attempts are allowed, might be shown to the user,\n // highlighting might be appropriate for low values such as 1 or 2 (the\n // form will never be used if the value is zero)\n attempts_left: Integer;\n\n // the address that is being validated, might be shown or not\n address: Object;\n\n // true if we just retransmitted the challenge, false if we sent a\n // challenge recently and thus refused to transmit it again this time;\n // might make a useful hint to the user\n transmitted: boolean;\n\n // timestamp explaining when we would re-transmit the challenge the next\n // time (at the earliest) if requested by the user\n next_tx_time: string;\n }\n\n export interface InvalidPinResponse {\n // numeric Taler error code, should be shown to indicate the error\n // compactly for reporting to developers\n ec?: number;\n\n // human-readable Taler error code, should be shown for the user to\n // understand the error\n hint: string;\n\n // how many times is the user still allowed to change the address;\n // if 0, the user should not be shown a link to jump to the\n // address entry form\n addresses_left: Integer;\n\n // how many times might the PIN still be retransmitted\n pin_transmissions_left: Integer;\n\n // how many times might the user still try entering the PIN code\n auth_attempts_left: Integer;\n\n // if true, the PIN was not even evaluated as the user previously\n // exhausted the number of attempts\n exhausted: boolean;\n\n // if true, the PIN was not even evaluated as no challenge was ever\n // issued (the user must have skipped the step of providing their\n // address first!)\n no_challenge: boolean;\n }\n\n export interface ChallengerAuthResponse {\n // Token used to authenticate access in /info.\n access_token: string;\n\n // Type of the access token.\n token_type: \"Bearer\";\n\n // Amount of time that an access token is valid (in seconds).\n expires_in: Integer;\n }\n\n export interface ChallengerInfoResponse {\n // Unique ID of the record within Challenger\n // (identifies the rowid of the token).\n id: Integer;\n\n // Address that was validated.\n // Key-value pairs, details depend on the\n // address_type.\n address: Object;\n\n // Type of the address.\n address_type: string;\n\n // How long do we consider the address to be\n // valid for this user.\n expires: Timestamp;\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 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\n/**\n * Imports.\n */\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http.js\";\n\n/**\n * Implementation of the HTTP request library interface for node.\n */\nexport class HttpLibImpl implements HttpRequestLibrary {\n fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n throw new Error(\"Method not implemented.\");\n }\n}\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 * Helpers for doing XMLHttpRequest-s that are based on ES6 promises.\n * Allows for easy mocking for test cases.\n *\n * The API is inspired by the HTML5 fetch API.\n */\n\n/**\n * Imports\n */\n\nimport * as impl from \"#http-impl\";\nimport * as common from \"./http-common.js\";\n\nexport * from \"./http-common.js\";\n\nexport function createPlatformHttpLib(\n args?: common.HttpLibArgs,\n): common.HttpRequestLibrary {\n return new impl.HttpLibImpl(args);\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) 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 { codecForAny } from \"./codec.js\";\nimport {\n TalerMerchantApi,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n} from \"./http-client/types.js\";\nimport { HttpStatusCode } from \"./http-status-codes.js\";\nimport {\n createPlatformHttpLib,\n expectSuccessResponseOrThrow,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http.js\";\nimport { FacadeCredentials } from \"./libeufin-api-types.js\";\nimport { LibtoolVersion } from \"./libtool-version.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n MerchantInstancesResponse,\n MerchantPostOrderRequest,\n MerchantPostOrderResponse,\n MerchantTemplateAddDetails,\n codecForMerchantPostOrderResponse,\n} from \"./merchant-api-types.js\";\nimport {\n FailCasesByMethod,\n OperationFail,\n OperationOk,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"./operation.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { TalerProtocolDuration } from \"./time.js\";\n\nconst logger = new Logger(\"MerchantApiClient.ts\");\n\n// FIXME: Explain!\nexport type TalerMerchantResultByMethod<prop extends keyof MerchantApiClient> =\n ResultByMethod<MerchantApiClient, prop>;\n\n// FIXME: Explain!\nexport type TalerMerchantErrorsByMethod<prop extends keyof MerchantApiClient> =\n FailCasesByMethod<MerchantApiClient, prop>;\n\nexport interface MerchantAuthConfiguration {\n method: \"external\" | \"token\";\n token?: string;\n}\n\n// FIXME: Why do we need this? Describe / fix!\nexport interface PartialMerchantInstanceConfig {\n auth?: MerchantAuthConfiguration;\n id: string;\n name: string;\n paytoUris: string[];\n address?: unknown;\n jurisdiction?: unknown;\n defaultWireTransferDelay?: TalerProtocolDuration;\n defaultPayDelay?: TalerProtocolDuration;\n}\n\nexport interface CreateMerchantTippingReserveRequest {\n // Amount that the merchant promises to put into the reserve\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for tipping\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\"\n wire_method: string;\n}\n\nexport interface DeleteTippingReserveArgs {\n reservePub: string;\n purge?: boolean;\n}\n\ninterface MerchantBankAccount {\n // The payto:// URI where the wallet will send coins.\n payto_uri: string;\n\n // Optional base URL for a facade where the\n // merchant backend can see incoming wire\n // transfers to reconcile its accounting\n // with that of the exchange. Used by\n // taler-merchant-wirewatch.\n credit_facade_url?: string;\n\n // Credentials for accessing the credit facade.\n credit_facade_credentials?: FacadeCredentials;\n}\n\nexport interface MerchantInstanceConfig {\n auth: MerchantAuthConfiguration;\n id: string;\n name: string;\n address: unknown;\n jurisdiction: unknown;\n use_stefan: boolean;\n default_wire_transfer_delay: TalerProtocolDuration;\n default_pay_delay: TalerProtocolDuration;\n}\n\nexport interface PrivateOrderStatusQuery {\n instance?: string;\n orderId: string;\n sessionId?: string;\n}\n\nexport interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A base64-encoded key\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: number;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: number;\n}\n\n/**\n * Client for the GNU Taler merchant backend.\n */\nexport class MerchantApiClient {\n /**\n * Base URL for the particular instance that this merchant API client\n * is for.\n */\n private baseUrl: string;\n\n readonly auth: MerchantAuthConfiguration;\n\n public readonly PROTOCOL_VERSION = \"6:0:2\";\n\n constructor(\n baseUrl: string,\n options: { auth?: MerchantAuthConfiguration } = {},\n ) {\n this.baseUrl = baseUrl;\n\n this.auth = options?.auth ?? {\n method: \"external\",\n };\n }\n\n httpClient = createPlatformHttpLib();\n\n async changeAuth(auth: MerchantAuthConfiguration): Promise<void> {\n const url = new URL(\"private/auth\", this.baseUrl);\n const res = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: auth,\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(res);\n }\n\n async getPrivateInstanceInfo(): Promise<any> {\n const url = new URL(\"private\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n return await resp.json();\n }\n\n async deleteInstance(instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(resp);\n }\n\n async createInstance(req: MerchantInstanceConfig): Promise<void> {\n const url = new URL(\"management/instances\", this.baseUrl);\n await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n }\n\n async getInstances(): Promise<MerchantInstancesResponse> {\n const url = new URL(\"management/instances\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getInstanceFullDetails(instanceId: string): Promise<any> {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n try {\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return resp.json();\n } catch (e) {\n throw e;\n }\n }\n\n async createOrder(\n req: MerchantPostOrderRequest,\n ): Promise<MerchantPostOrderResponse> {\n let url = new URL(\"private/orders\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantPostOrderResponse(),\n );\n }\n\n async deleteOrder(req: { orderId: string; force?: boolean }): Promise<void> {\n let url = new URL(`private/orders/${req.orderId}`, this.baseUrl);\n if (req.force) {\n url.searchParams.set(\"force\", \"yes\");\n }\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n if (resp.status !== 204) {\n throw Error(`failed to delete order (status ${resp.status})`);\n }\n }\n\n async queryPrivateOrderStatus(\n query: PrivateOrderStatusQuery,\n ): Promise<TalerMerchantApi.MerchantOrderStatusResponse> {\n const reqUrl = new URL(`private/orders/${query.orderId}`, this.baseUrl);\n if (query.sessionId) {\n reqUrl.searchParams.set(\"session_id\", query.sessionId);\n }\n const resp = await this.httpClient.fetch(reqUrl.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n }\n\n async giveRefund(r: {\n instance: string;\n orderId: string;\n amount: string;\n justification: string;\n }): Promise<{ talerRefundUri: string }> {\n const reqUrl = new URL(`private/orders/${r.orderId}/refund`, this.baseUrl);\n const resp = await this.httpClient.fetch(reqUrl.href, {\n method: \"POST\",\n body: {\n refund: r.amount,\n reason: r.justification,\n },\n });\n const respBody = await resp.json();\n return {\n talerRefundUri: respBody.taler_refund_uri,\n };\n }\n\n async createTemplate(req: MerchantTemplateAddDetails) {\n let url = new URL(\"private/templates\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async getTemplate(templateId: string) {\n let url = new URL(`private/templates/${templateId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAny());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig(): Promise<OperationOk<TalerMerchantApi.VersionResponse>> {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async createOtpDevice(\n req: OtpDeviceAddDetails,\n ): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>> {\n let url = new URL(\"private/otp-devices\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n private makeAuthHeader(): Record<string, string> {\n switch (this.auth.method) {\n case \"external\":\n return {};\n case \"token\":\n return {\n Authorization: `Bearer ${this.auth.token}`,\n };\n }\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 TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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", "/*\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 { codecForAmountString } from \"./amounts.js\";\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\", codecForAmountString())\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\", codecForAmountString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"closing_fee\", codecForAmountString())\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\", codecForAmountString())\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 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, Duration } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\n/**\n * Logger.\n */\nconst logger = new Logger(\"OperationThrottler.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 task.\n */\nclass TaskState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n 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 TaskThrottler {\n private perTaskInfo: { [taskId: string]: TaskState } = {};\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): TaskState {\n const s = this.perTaskInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perTaskInfo[origin] = new TaskState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(taskId: string): boolean {\n for (let [k, v] of Object.entries(this.perTaskInfo)) {\n // Remove throttled tasks that haven't seen an update in more than one hour.\n if (\n Duration.cmp(\n AbsoluteTime.difference(v.lastUpdate, AbsoluteTime.now()),\n Duration.fromSpec({ hours: 1 }),\n ) > 1\n ) {\n delete this.perTaskInfo[k];\n }\n }\n return this.getState(taskId).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(taskId: string): Record<string, unknown> {\n const state = this.getState(taskId);\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", "/*\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 * Client for the Taler (demo-)bank.\n */\n\n/**\n * Imports.\n */\nimport {\n AmountString,\n base64FromArrayBuffer,\n buildCodecForObject,\n Codec,\n codecForAny,\n codecForString,\n encodeCrock,\n getRandomBytes,\n HttpStatusCode,\n j2s,\n Logger,\n opEmptySuccess,\n opKnownHttpFailure,\n opUnknownFailure,\n stringToBytes,\n TalerError,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n checkSuccessResponseOrThrow,\n createPlatformHttpLib,\n HttpRequestLibrary,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"bank-api-client.ts\");\n\nexport enum CreditDebitIndicator {\n Credit = \"credit\",\n Debit = \"debit\",\n}\n\nexport interface BankAccountBalanceResponse {\n balance: {\n amount: AmountString;\n credit_debit_indicator: CreditDebitIndicator;\n };\n}\n\nexport interface BankUser {\n username: string;\n password: string;\n accountPaytoUri: string;\n}\n\nexport interface WithdrawalOperationInfo {\n withdrawal_id: string;\n taler_withdraw_uri: string;\n}\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nfunction makeBasicAuthHeader(username: string, password: string): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\nconst codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>\n buildCodecForObject<WithdrawalOperationInfo>()\n .property(\"withdrawal_id\", codecForString())\n .property(\"taler_withdraw_uri\", codecForString())\n .build(\"WithdrawalOperationInfo\");\n\nexport interface BankAccessApiClientArgs {\n auth?: { username: string; password: string };\n httpClient?: HttpRequestLibrary;\n}\n\nexport interface BankAccessApiCreateTransactionRequest {\n amount: AmountString;\n paytoUri: string;\n}\n\nexport class WireGatewayApiClientArgs {\n auth?: {\n username: string;\n password: string;\n };\n httpClient?: HttpRequestLibrary;\n}\n\n/**\n * This API look like it belongs to harness\n * but it will be nice to have in utils to be used by others\n */\nexport class WireGatewayApiClient {\n httpLib;\n\n constructor(\n private baseUrl: string,\n private args: WireGatewayApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n private makeAuthHeader(): Record<string, string> {\n const auth = this.args.auth;\n if (auth) {\n return {\n Authorization: makeBasicAuthHeader(auth.username, auth.password),\n };\n }\n return {};\n }\n\n async adminAddIncoming(params: {\n amount: string;\n reservePub: string;\n debitAccountPayto: string;\n }): Promise<void> {\n let url = new URL(`admin/add-incoming`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount: params.amount,\n reserve_pub: params.reservePub,\n debit_account: params.debitAccountPayto,\n },\n headers: this.makeAuthHeader(),\n });\n logger.info(`add-incoming response status: ${resp.status}`);\n await checkSuccessResponseOrThrow(resp);\n }\n}\n\nexport interface ChallengeContactData {\n // E-Mail address\n email?: string;\n\n // Phone number.\n phone?: string;\n}\n\nexport interface AccountBalance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n}\n\nexport interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n challenge_contact_data?: ChallengeContactData;\n\n // 'payto' address pointing a bank account\n // external to the libeufin-bank.\n // Payments will be sent to this bank account\n // when the user wants to convert the local currency\n // back to fiat currency outside libeufin-bank.\n cashout_payto_uri?: string;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: string;\n}\n\nexport interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: AccountBalance;\n\n // payto://-URI of the account.\n payto_uri: string;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: string;\n}\n\nexport interface ConfirmWithdrawalArgs {\n withdrawalOperationId: string;\n}\n\n/**\n * Client for the Taler corebank API.\n */\nexport class TalerCorebankApiClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n private baseUrl: string,\n private args: BankAccessApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n setAuth(auth: { username: string; password: string }) {\n this.args.auth = auth;\n }\n\n private makeAuthHeader(): Record<string, string> {\n if (!this.args.auth) {\n return {};\n }\n const authHeaderValue = makeBasicAuthHeader(\n this.args.auth.username,\n this.args.auth.password,\n );\n return {\n Authorization: authHeaderValue,\n };\n }\n\n async getAccountBalance(\n username: string,\n ): Promise<BankAccountBalanceResponse> {\n const url = new URL(`accounts/${username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getTransactions(username: string): Promise<void> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"GET\",\n headers: {\n ...this.makeAuthHeader(),\n },\n });\n\n const res = await readSuccessResponseJsonOrThrow(resp, codecForAny());\n logger.info(`result: ${j2s(res)}`);\n }\n\n async createTransaction(\n username: string,\n req: BankAccessApiCreateTransactionRequest,\n ): Promise<any> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n return await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async registerAccountExtended(req: RegisterAccountRequest): Promise<void> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n }\n\n /**\n * Register a new account and return information about it.\n *\n * This is a helper, as it does both the registration and the\n * account info query.\n */\n async registerAccount(username: string, password: string): Promise<BankUser> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n username,\n password,\n name: username,\n },\n headers: this.makeAuthHeader(),\n });\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n // FIXME: Corebank should directly return this info!\n const infoUrl = new URL(`accounts/${username}`, this.baseUrl);\n const infoResp = await this.httpLib.fetch(infoUrl.href, {\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n });\n // FIXME: Validate!\n const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(\n infoResp,\n codecForAny(),\n );\n return {\n password,\n username,\n accountPaytoUri: acctInfo.payto_uri,\n };\n }\n\n async createRandomBankUser(): Promise<BankUser> {\n const username = \"user-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n const password = \"pw-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n return await this.registerAccount(username, password);\n }\n\n async createWithdrawalOperation(\n user: string,\n amount: string,\n ): Promise<WithdrawalOperationInfo> {\n const url = new URL(`accounts/${user}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount,\n },\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForWithdrawalOperationInfo(),\n );\n }\n\n async confirmWithdrawalOperation(\n username: string,\n wopi: ConfirmWithdrawalArgs,\n ) {\n const url = new URL(\n `accounts/${username}/withdrawals/${wopi.withdrawalOperationId}/confirm`,\n this.baseUrl,\n );\n logger.info(`confirming withdrawal operation via ${url.href}`);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async abortWithdrawalOperation(wopi: WithdrawalOperationInfo): Promise<void> {\n const url = new URL(\n `withdrawals/${wopi.withdrawal_id}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n}\n", "// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then\n// use window.btoa' step. According to my tests, this appears to be a faster approach:\n// http://jsperf.com/encoding-xhr-image-data/5\n\n/*\nMIT LICENSE\nCopyright 2011 Jon Leighton\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function base64FromArrayBuffer(arrayBuffer: ArrayBuffer): string {\n var base64 = \"\";\n var encodings =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n var bytes = new Uint8Array(arrayBuffer);\n var byteLength = bytes.byteLength;\n var byteRemainder = byteLength % 3;\n var mainLength = byteLength - byteRemainder;\n\n var a, b, c, d;\n var chunk;\n\n // Main loop deals with bytes in chunks of 3\n for (var i = 0; i < mainLength; i = i + 3) {\n // Combine the three bytes into a single integer\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n\n // Use bitmasks to extract 6-bit segments from the triplet\n a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12\n c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6\n d = chunk & 63; // 63 = 2^6 - 1\n\n // Convert the raw binary segments to the appropriate ASCII encoding\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n }\n\n // Deal with the remaining bytes and padding\n if (byteRemainder == 1) {\n chunk = bytes[mainLength];\n\n a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n\n // Set the 4 least significant bits to zero\n b = (chunk & 3) << 4; // 3 = 2^2 - 1\n\n base64 += encodings[a] + encodings[b] + \"==\";\n } else if (byteRemainder == 2) {\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n\n a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4\n\n // Set the 2 least significant bits to zero\n c = (chunk & 15) << 2; // 15 = 2^4 - 1\n\n base64 += encodings[a] + encodings[b] + encodings[c] + \"=\";\n }\n\n return base64;\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\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) 2019-2020 Taler Systems SA\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Classes and helpers for error handling specific to wallet operations.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport {\n AbsoluteTime,\n CancellationToken,\n PaymentInsufficientBalanceDetails,\n TalerErrorCode,\n TalerErrorDetail,\n TransactionType,\n} from \"@gnu-taler/taler-util\";\n\ntype empty = Record<string, never>;\n\nexport interface DetailsMap {\n [TalerErrorCode.WALLET_PENDING_OPERATION_FAILED]: {\n innerError: TalerErrorDetail;\n transactionId?: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT]: {\n exchangeBaseUrl: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE]: {\n exchangeProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK]: empty;\n [TalerErrorCode.WALLET_REWARD_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_ORDER_ALREADY_CLAIMED]: {\n orderId: string;\n claimUrl: string;\n };\n [TalerErrorCode.WALLET_ORDER_ALREADY_PAID]: {\n orderId: string;\n fulfillmentUrl: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_MALFORMED]: empty;\n [TalerErrorCode.WALLET_CONTRACT_TERMS_SIGNATURE_INVALID]: {\n merchantPub: string;\n orderId: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_BASE_URL_MISMATCH]: {\n baseUrlForDownload: string;\n baseUrlFromContractTerms: string;\n };\n [TalerErrorCode.WALLET_INVALID_TALER_PAY_URI]: {\n talerPayUri: string;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n errorResponse?: any;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION]: {\n stack?: string;\n };\n [TalerErrorCode.WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE]: {\n bankProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN]: {\n operation: string;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED]: {\n requestUrl: string;\n requestMethod: string;\n throttleStats: Record<string, unknown>;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.WALLET_NETWORK_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n };\n [TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n validationError?: string;\n /**\n * Content type of the response, usually only specified if not the\n * expected content type.\n */\n contentType?: string;\n };\n [TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR]: {\n operation: string;\n error: string;\n detail: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: {\n numErrors: number;\n errorsPerCoin: Record<number, TalerErrorDetail>;\n };\n [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: {\n lastError?: TalerErrorDetail;\n };\n [TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR]: {\n httpStatusCode: number;\n };\n [TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR]: {\n requestError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_ERROR]: {\n innerError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_BAD_REQUEST]: {\n detail: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED]: {\n kycUrl: string;\n };\n [TalerErrorCode.WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_REFRESH_GROUP_INCOMPLETE]: {\n numErrors: number;\n /**\n * Errors, can be truncated.\n */\n errors: TalerErrorDetail[];\n };\n [TalerErrorCode.WALLET_EXCHANGE_BASE_URL_MISMATCH]: {\n urlWallet: string;\n urlExchange: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_UNAVAILABLE]: {\n exchangeBaseUrl: string;\n innerError: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_DB_UNAVAILABLE]: {\n innerError: TalerErrorDetail | undefined;\n };\n}\n\ntype ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : empty;\n\nexport function makeErrorDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n): TalerErrorDetail {\n if (!hint && !(detail as any).hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return { code, when, hint, ...detail };\n}\n\nexport function makePendingOperationFailedError(\n innerError: TalerErrorDetail,\n tag: TransactionType,\n uid: string,\n): TalerError {\n return TalerError.fromDetail(TalerErrorCode.WALLET_PENDING_OPERATION_FAILED, {\n innerError,\n transactionId: `${tag}:${uid}`,\n });\n}\n\nexport function summarizeTalerErrorDetail(ed: TalerErrorDetail): string {\n const errName = TalerErrorCode[ed.code] ?? \"<unknown>\";\n return `Error (${ed.code}/${errName})`;\n}\n\nfunction getDefaultHint(code: number): string {\n const errName = TalerErrorCode[code];\n if (errName) {\n return `Error (${errName})`;\n } else {\n return `Error (<unknown>)`;\n }\n}\n\nexport class TalerProtocolViolationError extends Error {\n constructor(hint?: string) {\n let msg: string;\n if (hint) {\n msg = `Taler protocol violation error (${hint})`;\n } else {\n msg = `Taler protocol violation error`;\n }\n super(msg);\n Object.setPrototypeOf(this, TalerProtocolViolationError.prototype);\n }\n}\n\n// compute a subset of TalerError, just for http request\ntype HttpErrors =\n | TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT\n | TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED\n | TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE\n | TalerErrorCode.WALLET_NETWORK_ERROR\n | TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR;\n\ntype TalerHttpErrorsDetails = {\n [code in HttpErrors]: TalerError<DetailsMap[code]>;\n};\n\nexport type TalerHttpError =\n TalerHttpErrorsDetails[keyof TalerHttpErrorsDetails];\n\nexport class TalerError<T = any> extends Error {\n errorDetail: TalerErrorDetail & T;\n cause: Error | undefined;\n private constructor(d: TalerErrorDetail & T, cause?: Error) {\n super(d.hint ?? `Error (code ${d.code})`);\n this.errorDetail = d;\n this.cause = cause;\n Object.setPrototypeOf(this, TalerError.prototype);\n }\n\n static fromDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n cause?: Error,\n ): TalerError {\n if (!hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return new TalerError<unknown>({ code, when, hint, ...detail }, cause);\n }\n\n static fromUncheckedDetail(d: TalerErrorDetail, c?: Error): TalerError {\n return new TalerError<unknown>({ ...d }, c);\n }\n\n static fromException(e: any): TalerError {\n const errDetail = getErrorDetailFromException(e);\n return new TalerError(errDetail, e);\n }\n\n hasErrorCode<C extends keyof DetailsMap>(\n code: C,\n ): this is TalerError<DetailsMap[C]> {\n return this.errorDetail.code === code;\n }\n\n toString(): string {\n return `TalerError: ${JSON.stringify(this.errorDetail)}`;\n }\n}\n\nexport function safeStringifyException(e: any): string {\n return JSON.stringify(getErrorDetailFromException(e), undefined, 2);\n}\n\n/**\n * Convert an exception (or anything that was thrown) into\n * a TalerErrorDetail object.\n */\nexport function getErrorDetailFromException(e: any): TalerErrorDetail {\n if (e instanceof TalerError) {\n return e.errorDetail;\n }\n if (e instanceof CancellationToken.CancellationError) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_CORE_REQUEST_CANCELLED,\n {},\n );\n return err;\n }\n if (e instanceof Error) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {\n stack: e.stack,\n },\n `unexpected exception (message: ${e.message})`,\n );\n return err;\n }\n // Something was thrown that is not even an exception!\n // Try to stringify it.\n let excString: string;\n try {\n excString = e.toString();\n } catch (e) {\n // Something went horribly wrong.\n excString = \"can't stringify exception\";\n }\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {},\n `unexpected exception (not an exception, ${excString})`,\n );\n return err;\n}\n\nexport function assertUnreachable(x: never): never {\n throw new Error(\"Didn't expect to get here\");\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 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 {\n Codec,\n buildCodecForObject,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport {\n AmountString,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n} from \"./taler-types.js\";\nimport { TalerPreciseTimestamp, TalerProtocolTimestamp } from \"./time.js\";\nimport {\n RefreshReason,\n ScopeInfo,\n TalerErrorDetail,\n TransactionIdStr,\n TransactionStateFilter,\n WithdrawalExchangeAccountDetails,\n codecForScopeInfo,\n} from \"./wallet-types.js\";\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n *\n * it will be removed in next release\n *\n * @deprecated use scopeInfo\n */\n currency?: string;\n\n /**\n * return only transactions in the given scopeInfo\n */\n scopeInfo?: ScopeInfo;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * Sort order of the transaction items.\n * By default, items are sorted ascending by their\n * main timestamp.\n *\n * ascending: ascending by timestamp, but pending transactions first\n * descending: ascending by timestamp, but pending transactions first\n * stable-ascending: ascending by timestamp, with pending transactions amidst other transactions\n * (stable in the sense of: pending transactions don't jump around)\n */\n sort?: \"ascending\" | \"descending\" | \"stable-ascending\";\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n\n filterByState?: TransactionStateFilter;\n}\n\nexport interface TransactionState {\n major: TransactionMajorState;\n minor?: TransactionMinorState;\n}\n\nexport enum TransactionMajorState {\n // No state, only used when reporting transitions into the initial state\n None = \"none\",\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Suspended = \"suspended\",\n Dialog = \"dialog\",\n SuspendedAborting = \"suspended-aborting\",\n Failed = \"failed\",\n Expired = \"expired\",\n // Only used for the notification, never in the transaction history\n Deleted = \"deleted\",\n}\n\nexport enum TransactionMinorState {\n // Placeholder until D37 is fully implemented\n Unknown = \"unknown\",\n Deposit = \"deposit\",\n KycRequired = \"kyc\",\n AmlRequired = \"aml\",\n MergeKycRequired = \"merge-kyc\",\n Track = \"track\",\n SubmitPayment = \"submit-payment\",\n RebindSession = \"rebind-session\",\n Refresh = \"refresh\",\n Pickup = \"pickup\",\n AutoRefund = \"auto-refund\",\n User = \"user\",\n Bank = \"bank\",\n Exchange = \"exchange\",\n ClaimProposal = \"claim-proposal\",\n CheckRefund = \"check-refund\",\n CreatePurse = \"create-purse\",\n DeletePurse = \"delete-purse\",\n RefreshExpired = \"refresh-expired\",\n Ready = \"ready\",\n Merge = \"merge\",\n Repurchase = \"repurchase\",\n BankRegisterReserve = \"bank-register-reserve\",\n BankConfirmTransfer = \"bank-confirm-transfer\",\n WithdrawCoins = \"withdraw-coins\",\n ExchangeWaitReserve = \"exchange-wait-reserve\",\n AbortingBank = \"aborting-bank\",\n Aborting = \"aborting\",\n Refused = \"refused\",\n Withdraw = \"withdraw\",\n MerchantOrderProposed = \"merchant-order-proposed\",\n Proposed = \"proposed\",\n RefundAvailable = \"refund-available\",\n AcceptRefund = \"accept-refund\",\n PaidByOther = \"paid-by-other\",\n CompletedByOtherWallet = \"completed-by-other-wallet\",\n}\n\nexport enum TransactionAction {\n Delete = \"delete\",\n Suspend = \"suspend\",\n Resume = \"resume\",\n Abort = \"abort\",\n Fail = \"fail\",\n Retry = \"retry\",\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: TalerPreciseTimestamp;\n\n /**\n * Transaction state, as per DD37.\n */\n txState: TransactionState;\n\n /**\n * Possible transitions based on the current state.\n */\n txActions: TransactionAction[];\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 /**\n * If the transaction minor state is in KycRequired this field is going to\n * have the location where the user need to go to complete KYC information.\n */\n kycUrl?: string;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit\n | TransactionInternalWithdrawal\n | TransactionRecoup\n | TransactionDenomLoss;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n InternalWithdrawal = \"internal-withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n Recoup = \"recoup\",\n DenomLoss = \"denom-loss\",\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 * @deprecated in favor of exchangeCreditAccounts\n */\n exchangePaytoUris: string[];\n\n exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\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 exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\n}\n\nexport enum DenomLossEventType {\n DenomExpired = \"denom-expired\",\n DenomVanished = \"denom-vanished\",\n DenomUnoffered = \"denom-unoffered\",\n}\n\n/**\n * A transaction to indicate financial loss due to denominations\n * that became unusable for deposits.\n */\nexport interface TransactionDenomLoss extends TransactionCommon {\n type: TransactionType.DenomLoss;\n lossEventType: DenomLossEventType;\n exchangeBaseUrl: string;\n}\n\n/**\n * A withdrawal transaction (either bank-integrated or manual).\n */\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\n/**\n * Internal withdrawal operation, only reported on request.\n *\n * Some transactions (peer-*-credit) internally do a withdrawal,\n * but only the peer-*-credit transaction is reported.\n *\n * The internal withdrawal transaction allows to access the details of\n * the underlying withdrawal for testing/debugging.\n *\n * It is usually not reported, so that amounts of transactions properly\n * add up, since the amountEffecive of the withdrawal is already reported\n * in the peer-*-credit transaction.\n */\nexport interface TransactionInternalWithdrawal extends TransactionCommon {\n type: TransactionType.InternalWithdrawal;\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 * Only available in the right state.\n */\n talerUri: string | undefined;\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 * Only present if the transaction is in a state where the other party can\n * 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\n/**\n * The exchange revoked a key and the wallet recoups funds.\n */\nexport interface TransactionRecoup extends TransactionCommon {\n type: TransactionType.Recoup;\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 * 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 /**\n * Does this purchase has an pos validation\n */\n posConfirmation: string | undefined;\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 * 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\n/**\n * Summary information about the payment that we got a refund for.\n */\nexport interface RefundPaymentInfo {\n summary: string;\n summary_i18n?: InternationalizedString;\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\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 // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n paymentInfo: RefundPaymentInfo | undefined;\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\nexport interface DepositTransactionTrackingState {\n // Raw wire transfer identifier of the deposit.\n wireTransferId: string;\n // When was the wire transfer given to the bank.\n timestampExecuted: TalerProtocolTimestamp;\n // Total amount transfer for this wtid (including fees)\n amountRaw: AmountString;\n // Wire fee amount for this exchange\n wireFee: 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 trackingState: Array<DepositTransactionTrackingState>;\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 interface WithdrawalTransactionByURIRequest {\n talerWithdrawUri: string;\n}\n\nexport const codecForWithdrawalTransactionByURIRequest =\n (): Codec<WithdrawalTransactionByURIRequest> =>\n buildCodecForObject<WithdrawalTransactionByURIRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .build(\"WithdrawalTransactionByURIRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"scopeInfo\", codecOptional(codecForScopeInfo()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\n \"sort\",\n codecOptional(\n codecForEither(\n codecForConstString(\"ascending\"),\n codecForConstString(\"descending\"),\n codecForConstString(\"stable-ascending\"),\n ),\n ),\n )\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(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n\nexport interface ListAssociatedRefreshesRequest {\n transactionId: string;\n}\n\nexport const codecForListAssociatedRefreshesRequest =\n (): Codec<ListAssociatedRefreshesRequest> =>\n buildCodecForObject<ListAssociatedRefreshesRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ListAssociatedRefreshesRequest\");\n\nexport interface ListAssociatedRefreshesResponse {\n transactionIds: string[];\n}\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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n renderContext,\n} from \"./codec.js\";\nimport {\n CurrencySpecification,\n TemplateParams,\n WithdrawalOperationStatus,\n canonicalizeBaseUrl,\n} from \"./index.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 AccountRestriction,\n AmountString,\n AuditorDenomSig,\n CoinEnvelope,\n DenomKeyType,\n DenominationPubKey,\n EddsaPrivateKeyString,\n ExchangeAuditor,\n ExchangeWireAccount,\n InternationalizedString,\n MerchantContractTerms,\n MerchantInfo,\n PeerContractTerms,\n UnblindedSignature,\n codecForExchangeWireAccount,\n codecForMerchantContractTerms,\n codecForPeerContractTerms,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n TalerPreciseTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForPreciseTimestamp,\n codecForTimestamp,\n} from \"./time.js\";\nimport {\n OrderShortInfo,\n TransactionState,\n TransactionType,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\ndeclare const __txId: unique symbol;\nexport type TransactionIdStr = `txn:${string}:${string}` & { [__txId]: true };\n\n/**\n * Identifier for a pending task in the wallet.\n */\ndeclare const __pndId: unique symbol;\nexport type PendingIdStr = `pnd:${string}:${string}` & { [__pndId]: true };\n\ndeclare const __tmbId: unique symbol;\nexport type TombstoneIdStr = `tmb:${string}:${string}` & { [__tmbId]: true };\n\nfunction codecForTransactionIdStr(): Codec<TransactionIdStr> {\n return {\n decode(x: any, c?: Context): TransactionIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as TransactionIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForPendingIdStr(): Codec<PendingIdStr> {\n return {\n decode(x: any, c?: Context): PendingIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as PendingIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForTombstoneIdStr(): Codec<TombstoneIdStr> {\n return {\n decode(x: any, c?: Context): TombstoneIdStr {\n if (typeof x === \"string\" && x.startsWith(\"tmb:\")) {\n return x as TombstoneIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"tmb:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nexport function codecForCanonBaseUrl(): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x === \"string\") {\n const canon = canonicalizeBaseUrl(x);\n if (x !== canon) {\n throw new DecodingError(\n `expected canonicalized base URL at ${renderContext(\n c,\n )} but got value '${x}'`,\n );\n }\n return x;\n }\n throw new DecodingError(\n `expected base URL at ${renderContext(c)} but got type ${typeof x}`,\n );\n },\n };\n}\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\n/**\n * How the amount should be interpreted in a transaction\n * Effective = how the balance is change\n * Raw = effective amount without fee\n *\n * Depending on the transaction, raw can be higher than effective\n */\nexport enum TransactionAmountMode {\n Effective = \"effective\",\n Raw = \"raw\",\n}\n\nexport type GetPlanForOperationRequest =\n | GetPlanForWithdrawRequest\n | GetPlanForDepositRequest;\n// | GetPlanForPushDebitRequest\n// | GetPlanForPullCreditRequest\n// | GetPlanForPaymentRequest\n// | GetPlanForTipRequest\n// | GetPlanForRefundRequest\n// | GetPlanForPullDebitRequest\n// | GetPlanForPushCreditRequest;\n\ninterface GetPlanForWalletInitiatedOperation {\n instructedAmount: AmountString;\n mode: TransactionAmountMode;\n}\n\nexport interface ConvertAmountRequest {\n amount: AmountString;\n type: TransactionAmountMode;\n}\n\nexport const codecForConvertAmountRequest =\n buildCodecForObject<ConvertAmountRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"type\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .build(\"ConvertAmountRequest\");\n\nexport interface GetAmountRequest {\n currency: string;\n}\n\nexport const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetAmountRequest\");\n\ninterface GetPlanToCompleteOperation {\n instructedAmount: AmountString;\n}\n\nconst codecForGetPlanForWalletInitiatedOperation = <\n T extends GetPlanForWalletInitiatedOperation,\n>() =>\n buildCodecForObject<T>()\n .property(\n \"mode\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .property(\"instructedAmount\", codecForAmountString());\n\ninterface GetPlanForWithdrawRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Withdrawal;\n exchangeUrl?: string;\n}\ninterface GetPlanForDepositRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Deposit;\n account: string; //payto string\n}\ninterface GetPlanForPushDebitRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPushDebit;\n}\n\ninterface GetPlanForPullCreditRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPullCredit;\n exchangeUrl: string;\n}\n\nconst codecForGetPlanForWithdrawRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForWithdrawRequest>()\n .property(\"type\", codecForConstString(TransactionType.Withdrawal))\n .property(\"exchangeUrl\", codecOptional(codecForString()))\n .build(\"GetPlanForWithdrawRequest\");\n\nconst codecForGetPlanForDepositRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForDepositRequest>()\n .property(\"type\", codecForConstString(TransactionType.Deposit))\n .property(\"account\", codecForString())\n .build(\"GetPlanForDepositRequest\");\n\nconst codecForGetPlanForPushDebitRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPushDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushDebit))\n .build(\"GetPlanForPushDebitRequest\");\n\nconst codecForGetPlanForPullCreditRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPullCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullCredit))\n .property(\"exchangeUrl\", codecForString())\n .build(\"GetPlanForPullCreditRequest\");\n\ninterface GetPlanForPaymentRequest extends GetPlanToCompleteOperation {\n type: TransactionType.Payment;\n wireMethod: string;\n ageRestriction: number;\n maxDepositFee: AmountString;\n}\n\ninterface GetPlanForPullDebitRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPullDebit;\n}\n\ninterface GetPlanForPushCreditRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPushCredit;\n}\n\nconst codecForGetPlanForPaymentRequest =\n buildCodecForObject<GetPlanForPaymentRequest>()\n .property(\"type\", codecForConstString(TransactionType.Payment))\n .property(\"maxDepositFee\", codecForAmountString())\n .build(\"GetPlanForPaymentRequest\");\n\nconst codecForGetPlanForPullDebitRequest =\n buildCodecForObject<GetPlanForPullDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullDebit))\n .build(\"GetPlanForPullDebitRequest\");\n\nconst codecForGetPlanForPushCreditRequest =\n buildCodecForObject<GetPlanForPushCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushCredit))\n .build(\"GetPlanForPushCreditRequest\");\n\nexport const codecForGetPlanForOperationRequest =\n (): Codec<GetPlanForOperationRequest> =>\n buildCodecForUnion<GetPlanForOperationRequest>()\n .discriminateOn(\"type\")\n .alternative(\n TransactionType.Withdrawal,\n codecForGetPlanForWithdrawRequest,\n )\n .alternative(TransactionType.Deposit, codecForGetPlanForDepositRequest)\n // .alternative(\n // TransactionType.PeerPushDebit,\n // codecForGetPlanForPushDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPullCredit,\n // codecForGetPlanForPullCreditRequest,\n // )\n // .alternative(TransactionType.Payment, codecForGetPlanForPaymentRequest)\n // .alternative(\n // TransactionType.PeerPullDebit,\n // codecForGetPlanForPullDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPushCredit,\n // codecForGetPlanForPushCreditRequest,\n // )\n .build(\"GetPlanForOperationRequest\");\n\nexport interface GetPlanForOperationResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n counterPartyAmount?: AmountString;\n details: any;\n}\n\nexport const codecForGetPlanForOperationResponse =\n (): Codec<GetPlanForOperationResponse> =>\n buildCodecForObject<GetPlanForOperationResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .property(\"details\", codecForAny())\n .property(\"counterPartyAmount\", codecOptional(codecForAmountString()))\n .build(\"GetPlanForOperationResponse\");\n\nexport interface AmountResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n}\n\nexport const codecForAmountResponse = (): Codec<AmountResponse> =>\n buildCodecForObject<AmountResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .build(\"AmountResponse\");\n\nexport enum BalanceFlag {\n IncomingKyc = \"incoming-kyc\",\n IncomingAml = \"incoming-aml\",\n IncomingConfirmation = \"incoming-confirmation\",\n OutgoingKyc = \"outgoing-kyc\",\n}\n\nexport interface WalletBalance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n /**\n * Does the balance for this currency have a pending\n * transaction?\n *\n * @deprecated use flags and pendingIncoming/pendingOutgoing instead\n */\n hasPendingTransactions: boolean;\n\n /**\n * Is there a transaction that requires user input?\n *\n * @deprecated use flags instead\n */\n requiresUserInput: boolean;\n\n flags: BalanceFlag[];\n}\n\nexport const codecForScopeInfoGlobal = (): Codec<ScopeInfoGlobal> =>\n buildCodecForObject<ScopeInfoGlobal>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Global))\n .build(\"ScopeInfoGlobal\");\n\nexport const codecForScopeInfoExchange = (): Codec<ScopeInfoExchange> =>\n buildCodecForObject<ScopeInfoExchange>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Exchange))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoExchange\");\n\nexport const codecForScopeInfoAuditor = (): Codec<ScopeInfoAuditor> =>\n buildCodecForObject<ScopeInfoAuditor>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Auditor))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoAuditor\");\n\nexport const codecForScopeInfo = (): Codec<ScopeInfo> =>\n buildCodecForUnion<ScopeInfo>()\n .discriminateOn(\"type\")\n .alternative(ScopeType.Global, codecForScopeInfoGlobal())\n .alternative(ScopeType.Exchange, codecForScopeInfoExchange())\n .alternative(ScopeType.Auditor, codecForScopeInfoAuditor())\n .build(\"ScopeInfo\");\n\nexport interface GetCurrencySpecificationRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForGetCurrencyInfoRequest =\n (): Codec<GetCurrencySpecificationRequest> =>\n buildCodecForObject<GetCurrencySpecificationRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"GetCurrencySpecificationRequest\");\n\nexport interface ListExchangesForScopedCurrencyRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForListExchangesForScopedCurrencyRequest =\n (): Codec<ListExchangesForScopedCurrencyRequest> =>\n buildCodecForObject<ListExchangesForScopedCurrencyRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"ListExchangesForScopedCurrencyRequest\");\n\nexport interface GetCurrencySpecificationResponse {\n currencySpecification: CurrencySpecification;\n}\n\nexport interface BuiltinExchange {\n exchangeBaseUrl: string;\n currencyHint: string;\n}\n\nexport interface PartialWalletRunConfig {\n builtin?: Partial<WalletRunConfig[\"builtin\"]>;\n testing?: Partial<WalletRunConfig[\"testing\"]>;\n features?: Partial<WalletRunConfig[\"features\"]>;\n}\n\nexport interface WalletRunConfig {\n /**\n * Initialization values useful for a complete startup.\n *\n * These are values may be overridden by different wallets\n */\n builtin: {\n exchanges: BuiltinExchange[];\n };\n\n /**\n * Unsafe options which it should only be used to create\n * testing environment.\n */\n testing: {\n /**\n * Allow withdrawal of denominations even though they are about to expire.\n */\n denomselAllowLate: boolean;\n devModeActive: boolean;\n insecureTrustExchange: boolean;\n preventThrottling: boolean;\n skipDefaults: boolean;\n emitObservabilityEvents?: boolean;\n };\n\n /**\n * Configurations values that may be safe to show to the user\n */\n features: {\n allowHttp: boolean;\n };\n}\n\nexport interface InitRequest {\n config?: PartialWalletRunConfig;\n}\n\nexport const codecForInitRequest = (): Codec<InitRequest> =>\n buildCodecForObject<InitRequest>()\n .property(\"config\", codecForAny())\n .build(\"InitRequest\");\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 ScopeInfoGlobal = { type: ScopeType.Global; currency: string };\nexport type ScopeInfoExchange = {\n type: ScopeType.Exchange;\n currency: string;\n url: string;\n};\nexport type ScopeInfoAuditor = {\n type: ScopeType.Auditor;\n currency: string;\n url: string;\n};\n\nexport type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;\n\nexport interface BalancesResponse {\n balances: WalletBalance[];\n}\n\nexport const codecForBalance = (): Codec<WalletBalance> =>\n buildCodecForObject<WalletBalance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForAmountString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForAmountString())\n .property(\"pendingOutgoing\", codecForAmountString())\n .property(\"requiresUserInput\", codecForBoolean())\n .property(\"flags\", codecForAny()) // FIXME\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 * Coin was lost as the denomination is not usable anymore.\n */\n DenomLoss = \"denom-loss\",\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: AmountString;\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: TransactionIdStr;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: TransactionIdStr;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecOptional(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\", codecForTransactionIdStr())\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\", codecForTransactionIdStr())\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 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(\"transactionId\", codecForTransactionIdStr())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\nexport interface BalanceDetails {}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PaymentInsufficientBalanceDetails {\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 balanceReceiverAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceReceiverDepositable: AmountString;\n\n balanceExchangeDepositable: AmountString;\n\n /**\n * Maximum effective amount that the wallet can spend,\n * when all fees are paid by the wallet.\n */\n maxEffectiveSpendAmount: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n balanceExchangeDepositable: AmountString;\n balanceAgeAcceptable: AmountString;\n balanceReceiverAcceptable: AmountString;\n balanceReceiverDepositable: AmountString;\n maxEffectiveSpendAmount: AmountString;\n /**\n * Exchange doesn't have global fees configured for the relevant year,\n * p2p payments aren't possible.\n */\n missingGlobalFees: boolean;\n };\n };\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PaymentInsufficientBalanceDetails> =>\n buildCodecForObject<PaymentInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceReceiverAcceptable\", codecForAmountString())\n .property(\"balanceReceiverDepositable\", codecForAmountString())\n .property(\"balanceExchangeDepositable\", codecForAmountString())\n .property(\"perExchange\", codecForAny())\n .property(\"maxEffectiveSpendAmount\", 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(\"transactionId\", codecForTransactionIdStr())\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\", codecOptional(codecForAmountString()))\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecForString())\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\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 transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId instead\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: AmountString;\n talerUri: string;\n balanceDetails: PaymentInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n transactionId: TransactionIdStr;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: AmountString;\n amountEffective: AmountString | undefined;\n contractTermsHash: string;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n talerUri: string;\n}\n\nexport interface BankWithdrawDetails {\n status: WithdrawalOperationStatus;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n operationId: string;\n apiBaseUrl: string;\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: TransactionIdStr;\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/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 AbortDeposit = \"abort-deposit\",\n AbortPeerPushDebit = \"abort-peer-push-debit\",\n AbortPeerPullDebit = \"abort-peer-pull-debit\",\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 * 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 ExchangesShortListResponse {\n exchanges: ShortExchangeListItem[];\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n implementationSemver: string;\n implementationGitHash: string;\n\n /**\n * Wallet-core protocol version supported by this implementation\n * of the API (\"server\" version).\n */\n version: string;\n exchange: string;\n merchant: string;\n\n bankIntegrationApiRange: string;\n bankConversionApiRange: string;\n corebankApiRange: string;\n\n /**\n * @deprecated as bank was split into multiple APIs with separate versioning\n */\n bank: string;\n\n /**\n * @deprecated\n */\n hash: string | undefined;\n\n /**\n * @deprecated will be removed\n */\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\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\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeWireAccount[];\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 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(codecForExchangeWireAccount()))\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 auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n Pending = \"pending\",\n Proposed = \"proposed\",\n Accepted = \"accepted\",\n}\n\nexport enum ExchangeEntryStatus {\n Preset = \"preset\",\n Ephemeral = \"ephemeral\",\n Used = \"used\",\n}\n\nexport enum ExchangeUpdateStatus {\n Initial = \"initial\",\n InitialUpdate = \"initial-update\",\n Suspended = \"suspended\",\n UnavailableUpdate = \"unavailable-update\",\n Ready = \"ready\",\n ReadyUpdate = \"ready-update\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\nexport interface ShortExchangeListItem {\n exchangeBaseUrl: string;\n}\n\n/**\n * Info about an exchange entry in the wallet.\n */\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n masterPub: string | undefined;\n currency: string;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n ageRestrictionOptions: number[];\n\n /**\n * P2P payments are disabled with this exchange\n * (e.g. because no global fees are configured).\n */\n peerPaymentsDisabled: boolean;\n\n /**\n * Set to true if this exchange doesn't charge any fees.\n */\n noFees: boolean;\n\n scopeInfo: ScopeInfo;\n\n lastUpdateTimestamp: TalerPreciseTimestamp | undefined;\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\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\", codecForCanonBaseUrl())\n .property(\"paytoUris\", codecForList(codecForString()))\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\", codecForCanonBaseUrl())\n .property(\"masterPub\", codecOptional(codecForString()))\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeEntryStatus\", codecForAny())\n .property(\"exchangeUpdateStatus\", codecForAny())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .property(\"scopeInfo\", codecForScopeInfo())\n .property(\"lastUpdateErrorInfo\", codecForAny())\n .property(\"lastUpdateTimestamp\", codecOptional(codecForPreciseTimestamp))\n .property(\"noFees\", codecForBoolean())\n .property(\"peerPaymentsDisabled\", codecForBoolean())\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 * @deprecated in favor of withdrawalAccountsList\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\n\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawalDetailsForAmount {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n *\n * @deprecated the client should query the exchange entry instead\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 * Number of coins that would be used for withdrawal.\n *\n * The UIs should warn if this number is too high (roughly at >100).\n */\n numCoins: number;\n\n /**\n * Ways to pay the exchange.\n *\n * @deprecated in favor of withdrawalAccountsList\n */\n paytoUris: string[];\n\n /**\n * Ways to pay the exchange, including accounts that require currency conversion.\n */\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\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 * Scope info of the currency withdrawn.\n */\n scopeInfo: ScopeInfo;\n}\n\nexport interface DenomSelItem {\n denomPubHash: string;\n count: number;\n /**\n * Number of denoms/planchets to skip, because\n * a re-denomination effectively deleted them.\n */\n skip?: number;\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: DenomSelItem[];\n earliestDepositExpiration: TalerProtocolTimestamp;\n hasDenomWithAgeRestriction: boolean;\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 exchangeCreditAccountDetails: WithdrawalExchangeAccountDetails[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\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 scopeInfo: ScopeInfo;\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 /**\n * Language of the returned content.\n *\n * If missing, language is unknown.\n */\n contentLanguage: string | undefined;\n\n /**\n * Available languages as advertised by the exchange.\n */\n tosAvailableLanguages: string[];\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: AmountString;\n summary: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForTestPayArgs = (): Codec<TestPayArgs> =>\n buildCodecForObject<TestPayArgs>()\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: AmountString;\n amountToSpend: AmountString;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"IntegrationTestArgs\");\n\nexport interface IntegrationTestV2Args {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n}\n\nexport const codecForIntegrationTestV2Args = (): Codec<IntegrationTestV2Args> =>\n buildCodecForObject<IntegrationTestV2Args>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"IntegrationTestV2Args\");\n\nexport interface GetExchangeEntryByUrlRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeEntryByUrlRequest =\n (): Codec<GetExchangeEntryByUrlRequest> =>\n buildCodecForObject<GetExchangeEntryByUrlRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"GetExchangeEntryByUrlRequest\");\n\nexport type GetExchangeEntryByUrlResponse = ExchangeListItem;\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use a separate API call to start a forced exchange update instead\n */\n forceUpdate?: boolean;\n\n masterPub?: string;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .property(\"masterPub\", codecOptional(codecForString()))\n .build(\"AddExchangeRequest\");\n\nexport interface UpdateExchangeEntryRequest {\n exchangeBaseUrl: string;\n force?: boolean;\n}\n\nexport const codecForUpdateExchangeEntryRequest =\n (): Codec<UpdateExchangeEntryRequest> =>\n buildCodecForObject<UpdateExchangeEntryRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"force\", codecOptional(codecForBoolean()))\n .build(\"UpdateExchangeEntryRequest\");\n\nexport interface GetExchangeResourcesRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeResourcesRequest =\n (): Codec<GetExchangeResourcesRequest> =>\n buildCodecForObject<GetExchangeResourcesRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"GetExchangeResourcesRequest\");\n\nexport interface GetExchangeResourcesResponse {\n hasResources: boolean;\n}\n\nexport interface DeleteExchangeRequest {\n exchangeBaseUrl: string;\n purge?: boolean;\n}\n\nexport const codecForDeleteExchangeRequest = (): Codec<DeleteExchangeRequest> =>\n buildCodecForObject<DeleteExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"purge\", codecOptional(codecForBoolean()))\n .build(\"DeleteExchangeRequest\");\n\nexport interface ForceExchangeUpdateRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForceExchangeUpdateRequest =\n (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"AddExchangeRequest\");\n\nexport interface GetExchangeTosRequest {\n exchangeBaseUrl: string;\n acceptedFormat?: string[];\n acceptLanguage?: string;\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .property(\"acceptLanguage\", codecOptional(codecForString()))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * Instead of generating a fresh, random reserve key pair,\n * use the provided reserve private key.\n *\n * Use with caution. Usage of this field may be restricted\n * to developer mode.\n */\n forceReservePriv?: EddsaPrivateKeyString;\n}\n\nexport const codecForAcceptManualWithdrawalRequest =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"forceReservePriv\", codecOptional(codecForString()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * ID provided by the client to cancel the request.\n *\n * If the same request is made again with the same clientCancellationId,\n * all previous requests are cancelled.\n *\n * The cancelled request will receive an error response with\n * an error code that indicates the cancellation.\n *\n * The cancellation is best-effort, responses might still arrive.\n */\n clientCancellationId?: string;\n}\n\nexport interface PrepareBankIntegratedWithdrawalRequest {\n talerWithdrawUri: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\n restrictAge?: number;\n}\n\nexport const codecForPrepareBankIntegratedWithdrawalRequest =\n (): Codec<PrepareBankIntegratedWithdrawalRequest> =>\n buildCodecForObject<PrepareBankIntegratedWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"PrepareBankIntegratedWithdrawalRequest\");\n\nexport interface PrepareBankIntegratedWithdrawalResponse {\n transactionId: string;\n}\n\nexport interface ConfirmWithdrawalRequest {\n transactionId: string;\n}\n\nexport const codecForConfirmWithdrawalRequestRequest =\n (): Codec<ConfirmWithdrawalRequest> =>\n buildCodecForObject<ConfirmWithdrawalRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmWithdrawalRequest\");\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\", codecForCanonBaseUrl())\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\", codecForCanonBaseUrl())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"clientCancellationId\", codecOptional(codecForString()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ForgetExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForgetExchangeTosRequest =\n (): Codec<ForgetExchangeTosRequest> =>\n buildCodecForObject<ForgetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"ForgetExchangeTosRequest\");\n\nexport interface AcceptRefundRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<AcceptRefundRequest> =>\n buildCodecForObject<AcceptRefundRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AcceptRefundRequest\");\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 // @deprecated use transaction id\n proposalId?: string;\n transactionId?: string;\n}\n\nexport const codecForGetContractTermsDetails =\n (): Codec<GetContractTermsDetailsRequest> =>\n buildCodecForObject<GetContractTermsDetailsRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(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 SharePaymentRequest {\n merchantBaseUrl: string;\n orderId: string;\n}\nexport const codecForSharePaymentRequest = (): Codec<SharePaymentRequest> =>\n buildCodecForObject<SharePaymentRequest>()\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"orderId\", codecForString())\n .build(\"SharePaymentRequest\");\n\nexport interface SharePaymentResult {\n privatePayUri: string;\n}\nexport const codecForSharePaymentResult = (): Codec<SharePaymentResult> =>\n buildCodecForObject<SharePaymentResult>()\n .property(\"privatePayUri\", codecForString())\n .build(\"SharePaymentResult\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams?: TemplateParams;\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 /**\n * @deprecated use transactionId instead\n */\n proposalId?: string;\n transactionId?: TransactionIdStr;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\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}\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: AmountString;\n /**\n * Corebank API base URL.\n */\n corebankApiBaseUrl: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\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\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"WithdrawTestBalanceRequest\");\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 RefreshCoinSpec {\n coinPub: string;\n amount?: AmountString;\n}\n\nexport const codecForRefreshCoinSpec = (): Codec<RefreshCoinSpec> =>\n buildCodecForObject<RefreshCoinSpec>()\n .property(\"amount\", codecForAmountString())\n .property(\"coinPub\", codecForString())\n .build(\"ForceRefreshRequest\");\n\nexport interface ForceRefreshRequest {\n refreshCoinSpecs: RefreshCoinSpec[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"refreshCoinSpecs\", codecForList(codecForRefreshCoinSpec()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport interface StartRefundQueryForUriResponse {\n /**\n * Transaction id of the *payment* where the refund query was started.\n */\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface StartRefundQueryRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForStartRefundQueryRequest =\n (): Codec<StartRefundQueryRequest> =>\n buildCodecForObject<StartRefundQueryRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"StartRefundQueryRequest\");\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForFailTransactionRequest =\n (): Codec<FailTransactionRequest> =>\n buildCodecForObject<FailTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"FailTransactionRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForResumeTransaction = (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AbortTransactionRequest\");\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n /**\n * Pre-allocated transaction ID.\n * Allows clients to easily handle notifications\n * that occur while the operation has been created but\n * before the creation request has returned.\n */\n transactionId?: TransactionIdStr;\n depositPaytoUri: string;\n amount: AmountString;\n}\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 fees: DepositGroupFees;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: TransactionIdStr;\n}\n\nexport interface TxIdResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawUriInfoResponse {\n operationId: string;\n status: WithdrawalOperationStatus;\n confirmTransferUrl?: string;\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"operationId\", codecForString())\n .property(\"confirmTransferUrl\", codecOptional(codecForString()))\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"defaultExchangeBaseUrl\", codecOptional(codecForCanonBaseUrl()))\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 TestingListTasksForTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface TestingListTasksForTransactionsResponse {\n taskIdList: string[];\n}\n\nexport const codecForTestingListTasksForTransactionRequest =\n (): Codec<TestingListTasksForTransactionRequest> =>\n buildCodecForObject<TestingListTasksForTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"TestingListTasksForTransactionRequest\");\n\nexport interface DeleteTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\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: TransactionIdStr;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: TransactionIdStr;\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: TransactionIdStr;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: TransactionIdStr;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: TalerPreciseTimestamp;\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 ActiveTask {\n taskId: string;\n transaction: TransactionIdStr | undefined;\n firstTry: AbsoluteTime | undefined;\n nextTry: AbsoluteTime | undefined;\n retryCounter: number | undefined;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport interface GetActiveTasksResponse {\n tasks: ActiveTask[];\n}\n\nexport const codecForActiveTask = (): Codec<ActiveTask> =>\n buildCodecForObject<ActiveTask>()\n .property(\"taskId\", codecForString())\n .property(\"transaction\", codecOptional(codecForTransactionIdStr()))\n .property(\"retryCounter\", codecOptional(codecForNumber()))\n .property(\"firstTry\", codecOptional(codecForAbsoluteTime))\n .property(\"nextTry\", codecOptional(codecForAbsoluteTime))\n .property(\"lastError\", codecOptional(codecForTalerErrorDetail()))\n .build(\"ActiveTask\");\n\nexport const codecForGetActiveTasks = (): Codec<GetActiveTasksResponse> =>\n buildCodecForObject<GetActiveTasksResponse>()\n .property(\"tasks\", codecForList(codecForActiveTask()))\n .build(\"GetActiveTasks\");\n\nexport interface ImportDbRequest {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDbRequest> =>\n buildCodecForObject<ImportDbRequest>()\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 /**\n * Number of coins used for the payment.\n */\n numCoins: number;\n}\n\nexport interface SelectedCoin {\n denomPubHash: string;\n coinPub: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\nexport interface SelectedProspectiveCoin {\n denomPubHash: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n coins: SelectedCoin[];\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 ProspectivePayCoinSelection {\n prospectiveCoins: SelectedProspectiveCoin[];\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(codecForCanonBaseUrl()))\n .property(\"amount\", codecForAmountString())\n .build(\"CheckPeerPushDebitRequest\");\n\nexport interface CheckPeerPushDebitResponse {\n amountRaw: AmountString;\n amountEffective: AmountString;\n exchangeBaseUrl: string;\n /**\n * Maximum expiration date, based on how close the coins\n * used for the payment are to expiry.\n *\n * The value is based on when the wallet would typically\n * automatically refresh the coins on its own, leaving enough\n * time to get a refund for the push payment and refresh the\n * coin.\n */\n maxExpirationDate: TalerProtocolTimestamp;\n}\n\nexport interface InitiatePeerPushDebitRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushDebitResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n transactionId: TransactionIdStr;\n}\n\nexport const codecForInitiatePeerPushDebitRequest =\n (): Codec<InitiatePeerPushDebitRequest> =>\n buildCodecForObject<InitiatePeerPushDebitRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushDebitRequest\");\n\nexport interface PreparePeerPushCreditRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n transactionId: TransactionIdStr;\n\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use transaction ID instead.\n */\n peerPushCreditId: string;\n\n /**\n * @deprecated\n */\n amount: AmountString;\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 peerPullDebitId: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCreditRequest> =>\n buildCodecForObject<PreparePeerPushCreditRequest>()\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 transactionId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n transactionId: TransactionIdStr;\n}\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(\"transactionId\", codecForTransactionIdStr())\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(codecForCanonBaseUrl()))\n .build(\"CheckPeerPullCreditRequest\");\n\nexport interface CheckPeerPullCreditResponse {\n exchangeBaseUrl: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n /**\n * Number of coins that will be used,\n * can be used by the UI to warn if excessively large.\n */\n numCoins: number;\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(codecForCanonBaseUrl()))\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 * @deprecated since it's not necessarily valid yet until the tx is in the right state\n */\n talerUri: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport interface CanonicalizeBaseUrlRequest {\n url: string;\n}\n\nexport const codecForCanonicalizeBaseUrlRequest =\n (): Codec<CanonicalizeBaseUrlRequest> =>\n buildCodecForObject<CanonicalizeBaseUrlRequest>()\n .property(\"url\", codecForString())\n .build(\"CanonicalizeBaseUrlRequest\");\n\nexport interface CanonicalizeBaseUrlResponse {\n url: string;\n}\n\nexport interface ValidateIbanRequest {\n iban: string;\n}\n\nexport const codecForValidateIbanRequest = (): Codec<ValidateIbanRequest> =>\n buildCodecForObject<ValidateIbanRequest>()\n .property(\"iban\", codecForString())\n .build(\"ValidateIbanRequest\");\n\nexport interface ValidateIbanResponse {\n valid: boolean;\n}\n\nexport const codecForValidateIbanResponse = (): Codec<ValidateIbanResponse> =>\n buildCodecForObject<ValidateIbanResponse>()\n .property(\"valid\", codecForBoolean())\n .build(\"ValidateIbanResponse\");\n\nexport type TransactionStateFilter = \"nonfinal\";\n\nexport interface TransactionRecordFilter {\n onlyState?: TransactionStateFilter;\n onlyCurrency?: string;\n}\n\nexport interface StoredBackupList {\n storedBackups: {\n name: string;\n }[];\n}\n\nexport interface CreateStoredBackupResponse {\n name: string;\n}\n\nexport interface RecoverStoredBackupRequest {\n name: string;\n}\n\nexport interface DeleteStoredBackupRequest {\n name: string;\n}\n\nexport const codecForDeleteStoredBackupRequest =\n (): Codec<DeleteStoredBackupRequest> =>\n buildCodecForObject<DeleteStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"DeleteStoredBackupRequest\");\n\nexport const codecForRecoverStoredBackupRequest =\n (): Codec<RecoverStoredBackupRequest> =>\n buildCodecForObject<RecoverStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"RecoverStoredBackupRequest\");\n\nexport interface TestingSetTimetravelRequest {\n offsetMs: number;\n}\n\nexport const codecForTestingSetTimetravelRequest =\n (): Codec<TestingSetTimetravelRequest> =>\n buildCodecForObject<TestingSetTimetravelRequest>()\n .property(\"offsetMs\", codecForNumber())\n .build(\"TestingSetTimetravelRequest\");\n\nexport interface AllowedAuditorInfo {\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport interface AllowedExchangeInfo {\n exchangeBaseUrl: string;\n exchangePub: string;\n}\n\n/**\n * Data extracted from the contract terms that is relevant for payment\n * processing in the wallet.\n */\nexport interface WalletContractData {\n /**\n * Fulfillment URL, or the empty string if the order has no fulfillment URL.\n *\n * Stored as a non-nullable string as we use this field for IndexedDB indexing.\n */\n fulfillmentUrl: string;\n\n contractTermsHash: string;\n fulfillmentMessage?: string;\n fulfillmentMessageI18n?: InternationalizedString;\n merchantSig: string;\n merchantPub: string;\n merchant: MerchantInfo;\n amount: AmountString;\n orderId: string;\n merchantBaseUrl: string;\n summary: string;\n summaryI18n: { [lang_tag: string]: string } | undefined;\n autoRefund: TalerProtocolDuration | undefined;\n payDeadline: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n allowedExchanges: AllowedExchangeInfo[];\n timestamp: TalerProtocolTimestamp;\n wireMethod: string;\n wireInfoHash: string;\n maxDepositFee: AmountString;\n minimumAge?: number;\n}\n\nexport interface TestingWaitTransactionRequest {\n transactionId: TransactionIdStr;\n txState: TransactionState;\n}\n\nexport interface TestingGetDenomStatsRequest {\n exchangeBaseUrl: string;\n}\n\nexport interface TestingGetDenomStatsResponse {\n numKnown: number;\n numOffered: number;\n numLost: number;\n}\n\nexport const codecForTestingGetDenomStatsRequest =\n (): Codec<TestingGetDenomStatsRequest> =>\n buildCodecForObject<TestingGetDenomStatsRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"TestingGetDenomStatsRequest\");\n\nexport interface WithdrawalExchangeAccountDetails {\n /**\n * Payto URI to credit the exchange.\n *\n * Depending on whether the (manual!) withdrawal is accepted or just\n * being checked, this already includes the subject with the\n * reserve public key.\n */\n paytoUri: string;\n\n /**\n * Status that indicates whether the account can be used\n * by the user to send funds for a withdrawal.\n *\n * ok: account should be shown to the user\n * error: account should not be shown to the user, UIs might render the error (in conversionError),\n * especially in dev mode.\n */\n status: \"ok\" | \"error\";\n\n /**\n * Transfer amount. Might be in a different currency than the requested\n * amount for withdrawal.\n *\n * Absent if this is a conversion account and the conversion failed.\n */\n transferAmount?: AmountString;\n\n /**\n * Currency specification for the external currency.\n *\n * Only included if this account requires a currency conversion.\n */\n currencySpecification?: CurrencySpecification;\n\n /**\n * Further restrictions for sending money to the\n * exchange.\n */\n creditRestrictions?: AccountRestriction[];\n\n /**\n * Label given to the account or the account's bank by the exchange.\n */\n bankLabel?: string;\n\n /*\n * Display priority assigned to this bank account by the exchange.\n */\n priority?: number;\n\n /**\n * Error that happened when attempting to request the conversion rate.\n */\n conversionError?: TalerErrorDetail;\n}\n\nexport interface PrepareWithdrawExchangeRequest {\n /**\n * A taler://withdraw-exchange URI.\n */\n talerUri: string;\n}\n\nexport const codecForPrepareWithdrawExchangeRequest =\n (): Codec<PrepareWithdrawExchangeRequest> =>\n buildCodecForObject<PrepareWithdrawExchangeRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PrepareWithdrawExchangeRequest\");\n\nexport interface PrepareWithdrawExchangeResponse {\n /**\n * Base URL of the exchange that already existed\n * or was ephemerally added as an exchange entry to\n * the wallet.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount from the taler://withdraw-exchange URI.\n * Only present if specified in the URI.\n */\n amount?: AmountString;\n}\n\nexport interface ExchangeEntryState {\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n}\n\nexport interface ListGlobalCurrencyAuditorsResponse {\n auditors: {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n }[];\n}\n\nexport interface ListGlobalCurrencyExchangesResponse {\n exchanges: {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n }[];\n}\n\nexport interface AddGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForAddGlobalCurrencyExchangeRequest =\n (): Codec<AddGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<AddGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"AddGlobalCurrencyExchangeRequest\");\n\nexport interface RemoveGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyExchangeRequest =\n (): Codec<RemoveGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"RemoveGlobalCurrencyExchangeRequest\");\n\nexport interface AddGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForAddGlobalCurrencyAuditorRequest =\n (): Codec<AddGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<AddGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForCanonBaseUrl())\n .property(\"auditorPub\", codecForString())\n .build(\"AddGlobalCurrencyAuditorRequest\");\n\nexport interface RemoveGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyAuditorRequest =\n (): Codec<RemoveGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForCanonBaseUrl())\n .property(\"auditorPub\", codecForString())\n .build(\"RemoveGlobalCurrencyAuditorRequest\");\n\n/**\n * Information about one provider.\n *\n * We don't store the account key here,\n * as that's derived from the wallet root key.\n */\nexport interface ProviderInfo {\n active: boolean;\n syncProviderBaseUrl: string;\n name: string;\n terms?: BackupProviderTerms;\n /**\n * Last communication issue with the provider.\n */\n lastError?: TalerErrorDetail;\n lastSuccessfulBackupTimestamp?: TalerPreciseTimestamp;\n lastAttemptedBackupTimestamp?: TalerPreciseTimestamp;\n paymentProposalIds: string[];\n backupProblem?: BackupProblem;\n paymentStatus: ProviderPaymentStatus;\n}\n\nexport interface BackupProviderTerms {\n supportedProtocolVersion: string;\n annualFee: AmountString;\n storageLimitInMegabytes: number;\n}\n\nexport type BackupProblem =\n | BackupUnreadableProblem\n | BackupConflictingDeviceProblem;\n\nexport interface BackupUnreadableProblem {\n type: \"backup-unreadable\";\n}\n\nexport interface BackupConflictingDeviceProblem {\n type: \"backup-conflicting-device\";\n otherDeviceId: string;\n myDeviceId: string;\n backupTimestamp: AbsoluteTime;\n}\n\nexport type ProviderPaymentStatus =\n | ProviderPaymentTermsChanged\n | ProviderPaymentPaid\n | ProviderPaymentInsufficientBalance\n | ProviderPaymentUnpaid\n | ProviderPaymentPending;\n\nexport enum ProviderPaymentType {\n Unpaid = \"unpaid\",\n Pending = \"pending\",\n InsufficientBalance = \"insufficient-balance\",\n Paid = \"paid\",\n TermsChanged = \"terms-changed\",\n}\n\nexport interface ProviderPaymentUnpaid {\n type: ProviderPaymentType.Unpaid;\n}\n\nexport interface ProviderPaymentInsufficientBalance {\n type: ProviderPaymentType.InsufficientBalance;\n amount: AmountString;\n}\n\nexport interface ProviderPaymentPending {\n type: ProviderPaymentType.Pending;\n talerUri?: string;\n}\n\nexport interface ProviderPaymentPaid {\n type: ProviderPaymentType.Paid;\n paidUntil: AbsoluteTime;\n}\n\nexport interface ProviderPaymentTermsChanged {\n type: ProviderPaymentType.TermsChanged;\n paidUntil: AbsoluteTime;\n oldTerms: BackupProviderTerms;\n newTerms: BackupProviderTerms;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport interface SyncTermsOfServiceResponse {\n // maximum backup size supported\n storage_limit_in_megabytes: number;\n\n // Fee for an account, per year.\n annual_fee: AmountString;\n\n // protocol version supported by the server,\n // for now always \"0.0\".\n version: string;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport const codecForSyncTermsOfServiceResponse =\n (): Codec<SyncTermsOfServiceResponse> =>\n buildCodecForObject<SyncTermsOfServiceResponse>()\n .property(\"storage_limit_in_megabytes\", codecForNumber())\n .property(\"annual_fee\", codecForAmountString())\n .property(\"version\", codecForString())\n .build(\"SyncTermsOfServiceResponse\");\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { base64FromArrayBuffer } from \"../base64.js\";\nimport { encodeCrock, getRandomBytes, stringToBytes } from \"../taler-crypto.js\";\nimport { AccessToken, LongPollParams, PaginationParams } from \"./types.js\";\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\n/**\n * rfc8959\n * @param token\n * @returns\n */\nexport function makeBearerTokenAuthHeader(token: AccessToken): string {\n return `Bearer ${token}`;\n}\n\n/**\n * https://bugs.gnunet.org/view.php?id=7949\n */\nexport function addPaginationParams(url: URL, pagination?: PaginationParams) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"start\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"delta\", String(order * limit));\n}\n\nexport function addMerchantPaginationParams(\n url: URL,\n pagination?: PaginationParams,\n) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"offset\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"limit\", String(order * limit));\n}\n\nexport function addLongPollingParam(url: URL, param?: LongPollParams) {\n if (!param) return;\n if (param.timeoutMs) {\n url.searchParams.set(\"long_poll_ms\", String(param.timeoutMs));\n }\n}\n\nexport interface CacheEvictor<T> {\n notifySuccess: (op: T) => Promise<void>;\n}\n\nexport const nullEvictor: CacheEvictor<unknown> = {\n notifySuccess: () => Promise.resolve(),\n};\n\nexport class IdempotencyRetry {\n public readonly uid: string;\n public readonly timesLeft: number;\n public readonly maxTries: number;\n\n private constructor(timesLeft: number, maxTimesLeft: number) {\n this.timesLeft = timesLeft;\n this.maxTries = maxTimesLeft;\n this.uid = encodeCrock(getRandomBytes(32))\n }\n \n static tryFiveTimes() {\n return new IdempotencyRetry(5, 5)\n }\n\n next(): IdempotencyRetry | undefined {\n const left = this.timesLeft -1\n if (left <= 0) {\n return undefined\n }\n return new IdempotencyRetry(left, this.maxTries);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { AmountJson, Amounts } from \"../amounts.js\";\nimport { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport { TalerErrorCode } from \"../taler-error-codes.js\";\nimport { codecForTalerErrorDetail } from \"../wallet-types.js\";\nimport {\n AccessToken,\n TalerBankConversionApi,\n codecForCashinConversionResponse,\n codecForCashoutConversionResponse,\n codecForConversionBankConfig,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerBankConversionResultByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = ResultByMethod<TalerBankConversionHttpClient, prop>;\nexport type TalerBankConversionErrorsByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;\n\nexport enum TalerBankConversionCacheEviction {\n UPDATE_RATE,\n}\n\n/**\n * The API is used by the wallets.\n */\nexport class TalerBankConversionHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForConversionBankConfig());\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate\n *\n */\n async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) {\n const url = new URL(`cashin-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashinConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate\n *\n */\n async getCashoutRate(conversion: {\n debit?: AmountJson;\n credit?: AmountJson;\n }) {\n const url = new URL(`cashout-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate\n *\n */\n async updateConversionRate(\n auth: AccessToken,\n body: TalerBankConversionApi.ConversionRate,\n ) {\n const url = new URL(`conversion-rate`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerBankConversionCacheEviction.UPDATE_RATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\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 * Imports.\n */\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n makeBasicAuthHeader,\n readTalerErrorResponse,\n} from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n TalerAuthentication,\n codecForTokenSuccessResponse,\n codecForTokenSuccessResponseMerchant,\n} from \"./types.js\";\nimport { makeBearerTokenAuthHeader } from \"./utils.js\";\n\nexport class TalerAuthenticationHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n * @returns\n */\n async createAccessTokenBasic(\n username: string,\n password: string,\n body: TalerAuthentication.TokenRequest,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenSuccessResponse());\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n *\n * @returns\n */\n async createAccessTokenBearer(\n token: AccessToken,\n body: TalerAuthentication.TokenRequest,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenSuccessResponseMerchant());\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async deleteAccessToken(token: AccessToken) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n LibtoolVersion,\n LongPollParams,\n OperationAlternative,\n OperationFail,\n OperationOk,\n TalerErrorCode,\n codecForChallenge,\n codecForTanTransmission,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opKnownTalerFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n PaginationParams,\n TalerCorebankApi,\n UserAndToken,\n WithdrawalOperationStatus,\n codecForAccountData,\n codecForBankAccountCreateWithdrawalResponse,\n codecForBankAccountTransactionInfo,\n codecForBankAccountTransactionsResponse,\n codecForCashoutPending,\n codecForCashoutStatusResponse,\n codecForCashouts,\n codecForCoreBankConfig,\n codecForCreateTransactionResponse,\n codecForGlobalCashouts,\n codecForListBankAccountsResponse,\n codecForMonitorResponse,\n codecForPublicAccountsResponse,\n codecForRegisterAccountResponse,\n codecForWithdrawalPublicInfo,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n IdempotencyRetry,\n addLongPollingParam,\n addPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerCoreBankResultByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = ResultByMethod<TalerCoreBankHttpClient, prop>;\nexport type TalerCoreBankErrorsByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;\n\nexport enum TalerCoreBankCacheEviction {\n DELETE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_ACCOUNT,\n UPDATE_PASSWORD,\n CREATE_TRANSACTION,\n CONFIRM_WITHDRAWAL,\n ABORT_WITHDRAWAL,\n CREATE_WITHDRAWAL,\n CREATE_CASHOUT,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerCoreBankHttpClient {\n public readonly PROTOCOL_VERSION = \"4:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCoreBankConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // ACCOUNTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts\n *\n */\n async createAccount(\n auth: AccessToken | undefined,\n body: TalerCorebankApi.RegisterAccountRequest,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n const headers: Record<string, string> = {};\n if (auth) {\n headers.Authorization = makeBearerTokenAuthHeader(auth);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers: headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n TalerCoreBankCacheEviction.CREATE_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForRegisterAccountResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-corebank.html#delete--accounts-$USERNAME\n *\n */\n async deleteAccount(auth: UserAndToken, cid?: string) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME\n *\n */\n async updateAccount(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountReconfiguration,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME-auth\n *\n */\n async updatePassword(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountPasswordChange,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/auth`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--public-accounts\n *\n */\n async getPublicAccounts(\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`public-accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForPublicAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ public_accounts: [] });\n case HttpStatusCode.NotFound:\n return opFixedSuccess({ public_accounts: [] });\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts\n *\n */\n async getAccounts(\n auth: AccessToken,\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForListBankAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ accounts: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME\n *\n */\n async getAccount(auth: UserAndToken) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountData());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // TRANSACTIONS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions\n *\n */\n async getTransactions(\n auth: UserAndToken,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountTransactionsResponse(),\n );\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ transactions: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions-$TRANSACTION_ID\n *\n */\n async getTransactionById(auth: UserAndToken, txid: number) {\n const url = new URL(\n `accounts/${auth.username}/transactions/${String(txid)}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountTransactionInfo());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions\n *\n */\n async createTransaction(\n auth: UserAndToken,\n body: TalerCorebankApi.CreateTransactionRequest,\n idempotencyCheck: IdempotencyRetry | undefined,\n cid?: string,\n ): Promise<\n //manually definition all return types because of recursion\n | OperationOk<TalerCorebankApi.CreateTransactionResponse>\n | OperationAlternative<HttpStatusCode.Accepted, TalerCorebankApi.Challenge>\n | OperationFail<HttpStatusCode.NotFound>\n | OperationFail<HttpStatusCode.BadRequest>\n | OperationFail<HttpStatusCode.Unauthorized>\n | OperationFail<TalerErrorCode.BANK_UNALLOWED_DEBIT>\n | OperationFail<TalerErrorCode.BANK_ADMIN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_SAME_ACCOUNT>\n | OperationFail<TalerErrorCode.BANK_UNKNOWN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED>\n > {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n if (idempotencyCheck) {\n body.request_uid = idempotencyCheck.uid;\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCreateTransactionResponse());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n if (!idempotencyCheck) {\n return opKnownTalerFailure(details.code, details);\n }\n const nextRetry = idempotencyCheck.next();\n return this.createTransaction(auth, body, nextRetry, cid);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // WITHDRAWALS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals\n *\n */\n async createWithdrawal(\n auth: UserAndToken,\n body: TalerCorebankApi.BankAccountCreateWithdrawalRequest,\n ) {\n const url = new URL(`accounts/${auth.username}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountCreateWithdrawalResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-confirm\n *\n */\n async confirmWithdrawalById(auth: UserAndToken, wid: string, cid?: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-abort\n *\n */\n async abortWithdrawalById(auth: UserAndToken, wid: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--withdrawals-$WITHDRAWAL_ID\n *\n */\n async getWithdrawalById(\n wid: string,\n params?: {\n old_state?: WithdrawalOperationStatus;\n } & LongPollParams,\n ) {\n const url = new URL(`withdrawals/${wid}`, this.baseUrl);\n addLongPollingParam(url, params);\n if (params) {\n url.searchParams.set(\n \"old_state\",\n !params.old_state ? \"pending\" : params.old_state,\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWithdrawalPublicInfo());\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // CASHOUTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts\n *\n */\n async createCashout(\n auth: UserAndToken,\n body: TalerCorebankApi.CashoutRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutPending());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONVERSION_AMOUNT_TO_SMALL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts-$CASHOUT_ID\n *\n */\n async getCashoutById(auth: UserAndToken, cid: number) {\n const url = new URL(\n `accounts/${auth.username}/cashouts/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutStatusResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts\n *\n */\n async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--cashouts\n *\n */\n async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {\n const url = new URL(`cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForGlobalCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // 2FA\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID\n *\n */\n async sendChallenge(auth: UserAndToken, cid: string) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTanTransmission());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID-confirm\n *\n */\n async confirmChallenge(\n auth: UserAndToken,\n cid: string,\n body: TalerCorebankApi.ChallengeSolve,\n ) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // MONITOR\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--monitor\n *\n */\n async getMonitor(\n auth: AccessToken,\n params: {\n timeframe?: TalerCorebankApi.MonitorTimeframeParam;\n date?: AbsoluteTime;\n } = {},\n ) {\n const url = new URL(`monitor`, this.baseUrl);\n if (params.timeframe) {\n url.searchParams.set(\n \"timeframe\",\n TalerCorebankApi.MonitorTimeframeParam[params.timeframe],\n );\n }\n if (params.date) {\n const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);\n if (seconds !== \"never\") {\n url.searchParams.set(\"date_s\", String(seconds));\n }\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMonitorResponse());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Others API\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getIntegrationAPI(): URL {\n return new URL(`taler-integration/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getWireGatewayAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-wire-gateway/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getRevenueAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getAuthenticationAPI(username: string): URL {\n return new URL(`accounts/${username}/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getConversionInfoAPI(): URL {\n return new URL(`conversion-info/`, this.baseUrl);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n FailCasesByMethod,\n HttpStatusCode,\n LibtoolVersion,\n PaginationParams,\n ResultByMethod,\n TalerMerchantApi,\n codecForAbortResponse,\n codecForAccountAddResponse,\n codecForAccountKycRedirects,\n codecForAccountsSummaryResponse,\n codecForBankAccountEntry,\n codecForClaimResponse,\n codecForInstancesResponse,\n codecForInventorySummaryResponse,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n codecForMerchantRefundResponse,\n codecForOrderHistory,\n codecForOtpDeviceDetails,\n codecForOtpDeviceSummaryResponse,\n codecForOutOfStockResponse,\n codecForPaidRefundStatusResponse,\n codecForPaymentResponse,\n codecForPostOrderResponse,\n codecForProductDetail,\n codecForQueryInstancesResponse,\n codecForStatusGoto,\n codecForStatusPaid,\n codecForStatusStatusUnpaid,\n codecForTansferList,\n codecForTemplateDetails,\n codecForTemplateSummaryResponse,\n codecForTokenFamiliesList,\n codecForTokenFamilyDetails,\n codecForWalletRefundResponse,\n codecForWalletTemplateDetails,\n codecForWebhookDetails,\n codecForWebhookSummaryResponse,\n opEmptySuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n HttpResponse,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport { opSuccessFromHttp, opUnknownFailure } from \"../operation.js\";\nimport {\n CacheEvictor,\n addMerchantPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerMerchantInstanceResultByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = ResultByMethod<TalerMerchantInstanceHttpClient, prop>;\nexport type TalerMerchantInstanceErrorsByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = FailCasesByMethod<TalerMerchantInstanceHttpClient, prop>;\n\nexport enum TalerMerchantInstanceCacheEviction {\n CREATE_ORDER,\n UPDATE_ORDER,\n DELETE_ORDER,\n UPDATE_CURRENT_INSTANCE,\n DELETE_CURRENT_INSTANCE,\n CREATE_BANK_ACCOUNT,\n UPDATE_BANK_ACCOUNT,\n DELETE_BANK_ACCOUNT,\n CREATE_PRODUCT,\n UPDATE_PRODUCT,\n DELETE_PRODUCT,\n CREATE_TRANSFER,\n DELETE_TRANSFER,\n CREATE_DEVICE,\n UPDATE_DEVICE,\n DELETE_DEVICE,\n CREATE_TEMPLATE,\n UPDATE_TEMPLATE,\n DELETE_TEMPLATE,\n CREATE_WEBHOOK,\n UPDATE_WEBHOOK,\n DELETE_WEBHOOK,\n CREATE_TOKENFAMILY,\n UPDATE_TOKENFAMILY,\n DELETE_TOKENFAMILY,\n LAST,\n}\nexport enum TalerMerchantManagementCacheEviction {\n CREATE_INSTANCE = TalerMerchantInstanceCacheEviction.LAST + 1,\n UPDATE_INSTANCE,\n DELETE_INSTANCE,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerMerchantInstanceHttpClient {\n public readonly PROTOCOL_VERSION = \"10:0:6\";\n\n readonly httpLib: HttpRequestLibrary;\n readonly cacheEvictor: CacheEvictor<TalerMerchantInstanceCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerMerchantInstanceCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wallet API\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim\n */\n async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {\n const url = new URL(`orders/${orderId}/claim`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForClaimResponse());\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-pay\n */\n async makePayment(orderId: string, body: TalerMerchantApi.PayRequest) {\n const url = new URL(`orders/${orderId}/pay`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaymentResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PaymentRequired:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.RequestTimeout:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PreconditionFailed:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID\n */\n\n async getPaymentStatus(\n orderId: string,\n params: TalerMerchantApi.PaymentStatusRequestParams = {},\n ) {\n const url = new URL(`orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.awaitRefundObtained !== undefined) {\n url.searchParams.set(\n \"await_refund_obtained\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.claimToken !== undefined) {\n url.searchParams.set(\"token\", params.claimToken);\n }\n if (params.contractTermHash !== undefined) {\n url.searchParams.set(\"h_contract\", params.contractTermHash);\n }\n if (params.refund !== undefined) {\n url.searchParams.set(\"refund\", params.refund);\n }\n if (params.sessionId !== undefined) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout !== undefined) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n // body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForStatusPaid());\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForStatusGoto());\n // case HttpStatusCode.Found: not possible since content is not HTML\n case HttpStatusCode.PaymentRequired:\n return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#demonstrating-payment\n */\n async demostratePayment(orderId: string, body: TalerMerchantApi.PaidRequest) {\n const url = new URL(`orders/${orderId}/paid`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments\n */\n async abortIncompletePayment(\n orderId: string,\n body: TalerMerchantApi.AbortRequest,\n ) {\n const url = new URL(`orders/${orderId}/abort`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForAbortResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#obtaining-refunds\n */\n async obtainRefund(\n orderId: string,\n body: TalerMerchantApi.WalletRefundRequest,\n ) {\n const url = new URL(`orders/${orderId}/refund`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForWalletRefundResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth\n */\n async updateCurrentInstanceAuthentication(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(`private/auth`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: // FIXME: missing in docs\n return opEmptySuccess(resp);\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private\n */\n async updateCurrentInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private\n *\n */\n async getCurrentInstanceDetails(token: AccessToken) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private\n */\n async deleteCurrentInstance(\n token: AccessToken | undefined,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc\n */\n async getCurrentIntanceKycStatus(\n token: AccessToken | undefined,\n params: TalerMerchantApi.GetKycStatusRequestParams = {},\n ) {\n const url = new URL(`private/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForAccountKycRedirects(),\n );\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Bank Accounts\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts\n */\n async addBankAccount(\n token: AccessToken | undefined,\n body: TalerMerchantApi.AccountAddDetails,\n ) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForAccountAddResponse());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async updateBankAccount(\n token: AccessToken | undefined,\n wireAccount: string,\n body: TalerMerchantApi.AccountPatchDetails,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts\n */\n async listBankAccounts(token: AccessToken, params?: PaginationParams) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n // addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async getBankAccountDetails(\n token: AccessToken | undefined,\n wireAccount: string,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountEntry());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async deleteBankAccount(token: AccessToken | undefined, wireAccount: string) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Inventory Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products\n */\n async addProduct(\n token: AccessToken | undefined,\n body: TalerMerchantApi.ProductAddDetail,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async updateProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.ProductPatchDetail,\n ) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products\n */\n async listProducts(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInventorySummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: not in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async getProductDetails(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForProductDetail());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#reserving-inventory\n */\n async lockProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.LockRequest,\n ) {\n const url = new URL(`private/products/${productId}/lock`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory\n */\n async deleteProduct(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Payment processing\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders\n */\n async createOrder(\n token: AccessToken | undefined,\n body: TalerMerchantApi.PostOrderRequest,\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n return this.procesOrderCreationResponse(resp);\n }\n\n private async procesOrderCreationResponse(resp: HttpResponse) {\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPostOrderResponse());\n }\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-orders\n */\n async listOrders(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListOrdersRequestParams = {},\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n if (params.date) {\n url.searchParams.set(\"date_s\", String(params.date));\n }\n if (params.fulfillmentUrl) {\n url.searchParams.set(\"fulfillment_url\", params.fulfillmentUrl);\n }\n if (params.paid !== undefined) {\n url.searchParams.set(\"paid\", params.paid ? \"YES\" : \"NO\");\n }\n if (params.refunded !== undefined) {\n url.searchParams.set(\"refunded\", params.refunded ? \"YES\" : \"NO\");\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout\", String(params.timeout));\n }\n if (params.wired !== undefined) {\n url.searchParams.set(\"wired\", params.wired ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOrderHistory());\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async getOrderDetails(\n token: AccessToken | undefined,\n orderId: string,\n params: TalerMerchantApi.GetOrderRequestParams = {},\n ) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup\n */\n async forgetOrder(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.ForgetRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async deleteOrder(token: AccessToken | undefined, orderId: string) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Refunds\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund\n */\n async addRefund(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.RefundRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForMerchantRefundResponse());\n }\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wire Transfer\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers\n */\n async informWireTransfer(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TransferInformation,\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers\n */\n async listWireTransfers(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListWireTransferRequestParams = {},\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n if (params.after) {\n url.searchParams.set(\"after\", String(params.after));\n }\n if (params.before) {\n url.searchParams.set(\"before\", String(params.before));\n }\n if (params.paytoURI) {\n url.searchParams.set(\"payto_uri\", params.paytoURI);\n }\n if (params.verified !== undefined) {\n url.searchParams.set(\"verified\", params.verified ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTansferList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID\n */\n async deleteWireTransfer(token: AccessToken | undefined, transferId: string) {\n const url = new URL(`private/transfers/${transferId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // OTP Devices\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices\n */\n async addOtpDevice(\n token: AccessToken | undefined,\n body: TalerMerchantApi.OtpDeviceAddDetails,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async updateOtpDevice(\n token: AccessToken | undefined,\n deviceId: string,\n body: TalerMerchantApi.OtpDevicePatchDetails,\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices\n */\n async listOtpDevices(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async getOtpDeviceDetails(\n token: AccessToken | undefined,\n deviceId: string,\n params: TalerMerchantApi.GetOtpDeviceRequestParams = {},\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n if (params.faketime) {\n url.searchParams.set(\"faketime\", String(params.faketime));\n }\n if (params.price) {\n url.searchParams.set(\"price\", params.price);\n }\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async deleteOtpDevice(token: AccessToken | undefined, deviceId: string) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Templates\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates\n */\n async addTemplate(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TemplateAddDetails,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async updateTemplate(\n token: AccessToken | undefined,\n templateId: string,\n body: TalerMerchantApi.TemplatePatchDetails,\n ) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-template\n */\n async listTemplates(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async getTemplateDetails(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async deleteTemplate(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-templates-$TEMPLATE_ID\n */\n async useTemplateGetInfo(templateId: string) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWalletTemplateDetails());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID\n */\n async useTemplateCreateOrder(\n templateId: string,\n body: TalerMerchantApi.UsingTemplateDetails,\n ) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n return this.procesOrderCreationResponse(resp);\n }\n\n //\n // Webhooks\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks\n */\n async addWebhook(\n token: AccessToken | undefined,\n body: TalerMerchantApi.WebhookAddDetails,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async updateWebhook(\n token: AccessToken | undefined,\n webhookId: string,\n body: TalerMerchantApi.WebhookPatchDetails,\n ) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks\n */\n async listWebhooks(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWebhookSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async getWebhookDetails(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opSuccessFromHttp(resp, codecForWebhookDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async deleteWebhook(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // token families\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async createTokenFamily(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TokenFamilyCreateRequest,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async updateTokenFamily(\n token: AccessToken | undefined,\n tokenSlug: string,\n body: TalerMerchantApi.TokenFamilyUpdateRequest,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY,\n );\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async listTokenFamilies(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamiliesList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async getTokenFamilyDetails(\n token: AccessToken | undefined,\n tokenSlug: string,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async deleteTokenFamily(token: AccessToken | undefined, tokenSlug: string) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * Get the auth api against the current instance\n *\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token\n */\n getAuthenticationAPI(): URL {\n return new URL(`private/`, this.baseUrl);\n }\n}\n\nexport type TalerMerchantManagementResultByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = ResultByMethod<TalerMerchantManagementHttpClient, prop>;\nexport type TalerMerchantManagementErrorsByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = FailCasesByMethod<TalerMerchantManagementHttpClient, prop>;\n\nexport class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {\n readonly cacheManagementEvictor: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n // cacheManagementEvictor?: CacheEvictor<TalerMerchantManagementCacheEviction>,\n cacheEvictor?: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >,\n ) {\n super(baseUrl, httpClient, cacheEvictor);\n this.cacheManagementEvictor = cacheEvictor ?? nullEvictor;\n }\n\n getSubInstanceAPI(instanceId: string) {\n return new URL(`instances/${instanceId}/`, this.baseUrl);\n }\n\n //\n // Instance Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances\n */\n async createInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceConfigurationMessage,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.CREATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth\n */\n async updateInstanceAuthentication(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(\n `management/instances/${instanceId}/auth`,\n this.baseUrl,\n );\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE\n */\n async updateInstance(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.UPDATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances\n */\n async listInstances(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE\n *\n */\n async getInstanceDetails(token: AccessToken | undefined, instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE\n */\n async deleteInstance(\n token: AccessToken | undefined,\n instanceId: string,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.DELETE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc\n */\n async getIntanceKycStatus(\n token: AccessToken | undefined,\n instanceId: string,\n params: TalerMerchantApi.GetKycStatusRequestParams,\n ) {\n const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { TalerCoreBankCacheEviction } from \"../index.node.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n RedirectResult,\n ResultByMethod,\n opFixedSuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n codecForChallengeCreateResponse,\n codecForChallengeSetupResponse,\n codecForChallengeStatus,\n codecForChallengerAuthResponse,\n codecForChallengerInfoResponse,\n codecForChallengerTermsOfServiceResponse,\n codecForInvalidPinResponse,\n} from \"./types.js\";\nimport { CacheEvictor, makeBearerTokenAuthHeader, nullEvictor } from \"./utils.js\";\n\nexport type ChallengerResultByMethod<prop extends keyof ChallengerHttpClient> =\n ResultByMethod<ChallengerHttpClient, prop>;\nexport type ChallengerErrorsByMethod<prop extends keyof ChallengerHttpClient> =\n FailCasesByMethod<ChallengerHttpClient, prop>;\n\nexport enum ChallengerCacheEviction {\n CREATE_CHALLENGE,\n}\n\n/**\n */\nexport class ChallengerHttpClient {\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<ChallengerCacheEviction>;\n public readonly PROTOCOL_VERSION = \"1:0:0\";\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<ChallengerCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForChallengerTermsOfServiceResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#post--setup-$CLIENT_ID\n *\n */\n async setup(clientId: string, token: AccessToken) {\n const url = new URL(`setup/${clientId}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeSetupResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // LOGIN\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--authorize-$NONCE\n *\n */\n async login(\n nonce: string,\n clientId: string,\n redirectUri: string,\n state: string | undefined,\n ) {\n const url = new URL(`authorize/${nonce}`, this.baseUrl);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n if (state) {\n url.searchParams.set(\"state\", state);\n }\n // url.searchParams.set(\"scope\", \"code\");\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeStatus());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // CHALLENGE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--challenge-$NONCE\n *\n */\n async challenge(nonce: string, body: Record<\"email\", string>) {\n const url = new URL(`challenge/${nonce}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n ChallengerCacheEviction.CREATE_CHALLENGE,\n );\n return opSuccessFromHttp(resp, codecForChallengeCreateResponse());\n }\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // SOLVE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--solve-$NONCE\n *\n */\n async solve(nonce: string, body: Record<string, string>) {\n const url = new URL(`solve/${nonce}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForInvalidPinResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // AUTH\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--token\n *\n */\n async token(\n client_id: string,\n redirect_uri: string,\n client_secret: AccessToken,\n code: string,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams(\n Object.entries({\n client_id,\n redirect_uri,\n client_secret,\n code,\n grant_type: \"authorization_code\",\n }),\n ).toString(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerAuthResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // INFO\n\n /**\n * https://docs.taler.net/core/api-challenger.html#get--info\n *\n */\n async info(token: AccessToken) {\n const url = new URL(`info`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerInfoResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpRequestLibrary,\n makeBasicAuthHeader,\n readTalerErrorResponse,\n} from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n LongPollParams,\n PaginationParams,\n codecForRevenueConfig,\n codecForRevenueIncomingHistory,\n} from \"./types.js\";\nimport { addLongPollingParam, addPaginationParams } from \"./utils.js\";\n\nexport type TalerBankRevenueResultByMethod<\n prop extends keyof TalerRevenueHttpClient,\n> = ResultByMethod<TalerRevenueHttpClient, prop>;\nexport type TalerBankRevenueErrorsByMethod<\n prop extends keyof TalerRevenueHttpClient,\n> = FailCasesByMethod<TalerRevenueHttpClient, prop>;\n\ntype UsernameAndPassword = {\n username: string;\n password: string;\n};\n/**\n * The API is used by the merchant (or other parties) to query\n * for incoming transactions to their account.\n */\nexport class TalerRevenueHttpClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n }\n\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-revenue.html#get--config\n *\n */\n async getConfig(auth?: UsernameAndPassword) {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: auth\n ? makeBasicAuthHeader(auth.username, auth.password)\n : undefined,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForRevenueConfig());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-bank-revenue.html#get--history\n *\n * @returns\n */\n async getHistory(\n auth?: UsernameAndPassword,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`history`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: auth\n ? makeBasicAuthHeader(auth.username, auth.password)\n : undefined,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForRevenueIncomingHistory());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport { hash } from \"../nacl-fast.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n TalerSignaturePurpose,\n amountToBuffer,\n bufferForUint32,\n buildSigPS,\n decodeCrock,\n eddsaSign,\n encodeCrock,\n stringToBytes,\n timestampRoundedToBuffer,\n} from \"../taler-crypto.js\";\nimport {\n OfficerAccount,\n PaginationParams,\n SigningKey,\n TalerExchangeApi,\n codecForAmlDecisionDetails,\n codecForAmlRecords,\n codecForExchangeConfig,\n codecForExchangeKeys,\n} from \"./types.js\";\nimport { CacheEvictor, addPaginationParams, nullEvictor } from \"./utils.js\";\n\nexport type TalerExchangeResultByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = ResultByMethod<TalerExchangeHttpClient, prop>;\nexport type TalerExchangeErrorsByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = FailCasesByMethod<TalerExchangeHttpClient, prop>;\n\nexport enum TalerExchangeCacheEviction {\n CREATE_DESCISION,\n}\n\n\n/**\n */\nexport class TalerExchangeHttpClient {\n httpLib: HttpRequestLibrary;\n public readonly PROTOCOL_VERSION = \"18:0:1\";\n cacheEvictor: CacheEvictor<TalerExchangeCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerExchangeCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--seed\n *\n */\n async getSeed() {\n const url = new URL(`seed`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n const buffer = await resp.bytes();\n const uintar = new Uint8Array(buffer);\n\n return opFixedSuccess(uintar);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n * PARTIALLY IMPLEMENTED!!\n */\n async getKeys() {\n const url = new URL(`keys`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeKeys());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // TERMS\n\n //\n // AML operations\n //\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decisions-$STATE\n *\n */\n async getDecisionsByState(\n auth: OfficerAccount,\n state: TalerExchangeApi.AmlState,\n pagination?: PaginationParams,\n ) {\n const url = new URL(\n `aml/${auth.id}/decisions/${TalerExchangeApi.AmlState[state]}`,\n this.baseUrl,\n );\n addPaginationParams(url, pagination);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlRecords());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ records: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decision-$H_PAYTO\n *\n */\n async getDecisionDetails(auth: OfficerAccount, account: string) {\n const url = new URL(`aml/${auth.id}/decision/${account}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlDecisionDetails());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ aml_history: [], kyc_attributes: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#post--aml-$OFFICER_PUB-decision\n *\n */\n async addDecisionDetails(\n auth: OfficerAccount,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n ) {\n const url = new URL(`aml/${auth.id}/decision`, this.baseUrl);\n\n const body = buildDecisionSignature(auth.signingKey, decision);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: this two need to be split by error code\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n\nfunction buildQuerySignature(key: SigningKey): string {\n const sigBlob = buildSigPS(\n TalerSignaturePurpose.TALER_SIGNATURE_AML_QUERY,\n ).build();\n\n return encodeCrock(eddsaSign(sigBlob, key));\n}\n\nfunction buildDecisionSignature(\n key: SigningKey,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n): TalerExchangeApi.AmlDecision {\n const zero = new Uint8Array(new ArrayBuffer(64));\n\n const sigBlob = buildSigPS(TalerSignaturePurpose.TALER_SIGNATURE_AML_DECISION)\n //TODO: new need the null terminator, also in the exchange\n .put(hash(stringToBytes(decision.justification))) //check null\n .put(timestampRoundedToBuffer(decision.decision_time))\n .put(amountToBuffer(decision.new_threshold))\n .put(decodeCrock(decision.h_payto))\n .put(zero) //kyc_requirement\n .put(bufferForUint32(decision.new_state))\n .build();\n\n const officer_sig = encodeCrock(eddsaSign(sigBlob, key));\n return {\n ...decision,\n officer_sig,\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) 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 * IBAN validation.\n *\n * Currently only validates the checksum.\n *\n * It does not validate:\n * - Country-specific length\n * - Country-specific checksums\n *\n * The country list is also not complete.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\nexport type IbanValidationResult =\n | { type: \"invalid\" }\n | {\n type: \"valid\";\n normalizedIban: string;\n };\n\nexport interface IbanCountryInfo {\n name: string;\n isSepa?: boolean;\n length?: number;\n}\n\n/**\n * Incomplete list, see https://www.swift.com/resource/iban-registry-pdf\n */\nexport const ibanCountryInfoTable: Record<string, IbanCountryInfo> = {\n AE: { name: \"U.A.E.\" },\n AF: { name: \"Afghanistan\" },\n AL: { name: \"Albania\" },\n AM: { name: \"Armenia\" },\n AN: { name: \"Netherlands Antilles\" },\n AR: { name: \"Argentina\" },\n AT: { name: \"Austria\" },\n AU: { name: \"Australia\" },\n AZ: { name: \"Azerbaijan\" },\n BA: { name: \"Bosnia and Herzegovina\" },\n BD: { name: \"Bangladesh\" },\n BE: { name: \"Belgium\" },\n BG: { name: \"Bulgaria\" },\n BH: { name: \"Bahrain\" },\n BN: { name: \"Brunei Darussalam\" },\n BO: { name: \"Bolivia\" },\n BR: { name: \"Brazil\" },\n BT: { name: \"Bhutan\" },\n BY: { name: \"Belarus\" },\n BZ: { name: \"Belize\" },\n CA: { name: \"Canada\" },\n CG: { name: \"Congo\" },\n CH: { name: \"Switzerland\" },\n CI: { name: \"Cote d'Ivoire\" },\n CL: { name: \"Chile\" },\n CM: { name: \"Cameroon\" },\n CN: { name: \"People's Republic of China\" },\n CO: { name: \"Colombia\" },\n CR: { name: \"Costa Rica\" },\n CS: { name: \"Serbia and Montenegro\" },\n CZ: { name: \"Czech Republic\" },\n DE: { name: \"Germany\" },\n DK: { name: \"Denmark\" },\n DO: { name: \"Dominican Republic\" },\n DZ: { name: \"Algeria\" },\n EC: { name: \"Ecuador\" },\n EE: { name: \"Estonia\" },\n EG: { name: \"Egypt\" },\n ER: { name: \"Eritrea\" },\n ES: { name: \"Spain\" },\n ET: { name: \"Ethiopia\" },\n FI: { name: \"Finland\" },\n FO: { name: \"Faroe Islands\" },\n FR: { name: \"France\" },\n GB: { name: \"United Kingdom\" },\n GD: { name: \"Caribbean\" },\n GE: { name: \"Georgia\" },\n GL: { name: \"Greenland\" },\n GR: { name: \"Greece\" },\n GT: { name: \"Guatemala\" },\n HK: { name: \"Hong Kong S.A.R.\" },\n HN: { name: \"Honduras\" },\n HR: { name: \"Croatia\" },\n HT: { name: \"Haiti\" },\n HU: { name: \"Hungary\" },\n ID: { name: \"Indonesia\" },\n IE: { name: \"Ireland\" },\n IL: { name: \"Israel\" },\n IN: { name: \"India\" },\n IQ: { name: \"Iraq\" },\n IR: { name: \"Iran\" },\n IS: { name: \"Iceland\" },\n IT: { name: \"Italy\" },\n JM: { name: \"Jamaica\" },\n JO: { name: \"Jordan\" },\n JP: { name: \"Japan\" },\n KE: { name: \"Kenya\" },\n KG: { name: \"Kyrgyzstan\" },\n KH: { name: \"Cambodia\" },\n KR: { name: \"South Korea\" },\n KW: { name: \"Kuwait\" },\n KZ: { name: \"Kazakhstan\" },\n LA: { name: \"Laos\" },\n LB: { name: \"Lebanon\" },\n LI: { name: \"Liechtenstein\" },\n LK: { name: \"Sri Lanka\" },\n LT: { name: \"Lithuania\" },\n LU: { name: \"Luxembourg\" },\n LV: { name: \"Latvia\" },\n LY: { name: \"Libya\" },\n MA: { name: \"Morocco\" },\n MC: { name: \"Principality of Monaco\" },\n MD: { name: \"Moldava\" },\n ME: { name: \"Montenegro\" },\n MK: { name: \"Former Yugoslav Republic of Macedonia\" },\n ML: { name: \"Mali\" },\n MM: { name: \"Myanmar\" },\n MN: { name: \"Mongolia\" },\n MO: { name: \"Macau S.A.R.\" },\n MT: { name: \"Malta\" },\n MV: { name: \"Maldives\" },\n MX: { name: \"Mexico\" },\n MY: { name: \"Malaysia\" },\n NG: { name: \"Nigeria\" },\n NI: { name: \"Nicaragua\" },\n NL: { name: \"Netherlands\" },\n NO: { name: \"Norway\" },\n NP: { name: \"Nepal\" },\n NZ: { name: \"New Zealand\" },\n OM: { name: \"Oman\" },\n PA: { name: \"Panama\" },\n PE: { name: \"Peru\" },\n PH: { name: \"Philippines\" },\n PK: { name: \"Islamic Republic of Pakistan\" },\n PL: { name: \"Poland\" },\n PR: { name: \"Puerto Rico\" },\n PT: { name: \"Portugal\" },\n PY: { name: \"Paraguay\" },\n QA: { name: \"Qatar\" },\n RE: { name: \"Reunion\" },\n RO: { name: \"Romania\" },\n RS: { name: \"Serbia\" },\n RU: { name: \"Russia\" },\n RW: { name: \"Rwanda\" },\n SA: { name: \"Saudi Arabia\" },\n SE: { name: \"Sweden\" },\n SG: { name: \"Singapore\" },\n SI: { name: \"Slovenia\" },\n SK: { name: \"Slovak\" },\n SN: { name: \"Senegal\" },\n SO: { name: \"Somalia\" },\n SR: { name: \"Suriname\" },\n SV: { name: \"El Salvador\" },\n SY: { name: \"Syria\" },\n TH: { name: \"Thailand\" },\n TJ: { name: \"Tajikistan\" },\n TM: { name: \"Turkmenistan\" },\n TN: { name: \"Tunisia\" },\n TR: { name: \"Turkey\" },\n TT: { name: \"Trinidad and Tobago\" },\n TW: { name: \"Taiwan\" },\n TZ: { name: \"Tanzania\" },\n UA: { name: \"Ukraine\" },\n US: { name: \"United States\" },\n UY: { name: \"Uruguay\" },\n VA: { name: \"Vatican\" },\n VE: { name: \"Venezuela\" },\n VN: { name: \"Viet Nam\" },\n YE: { name: \"Yemen\" },\n ZA: { name: \"South Africa\" },\n ZW: { name: \"Zimbabwe\" },\n};\n\nlet ccZero = \"0\".charCodeAt(0);\nlet ccNine = \"9\".charCodeAt(0);\nlet ccA = \"A\".charCodeAt(0);\nlet ccZ = \"Z\".charCodeAt(0);\n\n/**\n * Append a IBAN digit(s) based on a char code.\n */\nfunction appendDigit(digits: number[], cc: number): boolean {\n if (cc >= ccZero && cc <= ccNine) {\n digits.push(cc - ccZero);\n } else if (cc >= ccA && cc <= ccZ) {\n const n = cc - ccA + 10;\n digits.push(Math.floor(n / 10) % 10);\n digits.push(n % 10);\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Compute MOD-97-10 as per ISO/IEC 7064:2003.\n */\nfunction mod97(digits: number[]): number {\n let i = 0;\n let modAccum = 0;\n while (i < digits.length) {\n let n = 0;\n while (n < 9 && i < digits.length) {\n modAccum = modAccum * 10 + digits[i];\n i++;\n n++;\n }\n modAccum = modAccum % 97;\n }\n return modAccum;\n}\n\nexport function validateIban(ibanString: string): IbanValidationResult {\n let myIban = ibanString.toLocaleUpperCase().replace(\" \", \"\");\n let countryCode = myIban.substring(0, 2);\n let countryInfo = ibanCountryInfoTable[countryCode];\n\n if (!countryInfo) {\n return {\n type: \"invalid\",\n };\n }\n\n let digits: number[] = [];\n\n for (let i = 4; i < myIban.length; i++) {\n const cc = myIban.charCodeAt(i);\n if (!appendDigit(digits, cc)) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n for (let i = 0; i < 4; i++) {\n if (!appendDigit(digits, ibanString.charCodeAt(i))) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n const rem = mod97(digits);\n if (rem === 1) {\n return {\n type: \"valid\",\n normalizedIban: myIban,\n };\n } else {\n return {\n type: \"invalid\",\n };\n }\n}\n\nexport function generateIban(countryCode: string, length: number): string {\n let ibanSuffix = \"\";\n let digits: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const cc = ccZero + (Math.floor(Math.random() * 100) % 10);\n appendDigit(digits, cc);\n ibanSuffix += String.fromCharCode(cc);\n }\n\n appendDigit(digits, countryCode.charCodeAt(0));\n appendDigit(digits, countryCode.charCodeAt(1));\n\n // Try using \"00\" as check digits\n appendDigit(digits, ccZero);\n appendDigit(digits, ccZero);\n\n const requiredChecksum = 98 - mod97(digits);\n\n const checkDigit1 = Math.floor(requiredChecksum / 10) % 10;\n const checkDigit2 = requiredChecksum % 10;\n\n return countryCode + checkDigit1 + checkDigit2 + ibanSuffix;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019-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 * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { AbsoluteTime } from \"./time.js\";\nimport { TransactionState } from \"./transactions-types.js\";\nimport { ExchangeEntryState, TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n BalanceChange = \"balance-change\",\n BackupOperationError = \"backup-error\",\n TransactionStateTransition = \"transaction-state-transition\",\n /**\n * @deprecated\n */\n WithdrawalOperationTransition = \"withdrawal-operation-transition\",\n ExchangeStateTransition = \"exchange-state-transition\",\n Idle = \"idle\",\n TaskObservabilityEvent = \"task-observability-event\",\n RequestObservabilityEvent = \"request-observability-event\",\n}\n\nexport interface ErrorInfoSummary {\n code: number;\n hint?: string;\n message?: string;\n}\n\nexport interface TransactionStateTransitionNotification {\n type: NotificationType.TransactionStateTransition;\n transactionId: string;\n oldTxState: TransactionState;\n newTxState: TransactionState;\n errorInfo?: ErrorInfoSummary;\n\n /**\n * Additional \"user data\" that is dependent on the\n * state transition.\n *\n * Usage should be avoided.\n *\n * Currently used to notify the iOS app about\n * the KYC URL.\n */\n experimentalUserData?: any;\n}\n\nexport interface ExchangeStateTransitionNotification {\n type: NotificationType.ExchangeStateTransition;\n /**\n * Identification of the exchange entry that this\n * notification is about.\n */\n exchangeBaseUrl: string;\n\n /**\n * If missing, the notification means that\n * the exchange entry is newly created.\n */\n oldExchangeState?: ExchangeEntryState;\n\n /**\n * New state of the exchange.\n */\n newExchangeState: ExchangeEntryState;\n\n /**\n * Summary of the error that occurred when trying to update the exchange entry,\n * if applicable.\n */\n errorInfo?: ErrorInfoSummary;\n}\n\nexport interface BalanceChangeNotification {\n type: NotificationType.BalanceChange;\n\n /**\n * Transaction ID of the transaction that caused the balance update.\n *\n * Only used as a hint for debugging, should not be relied upon by clients.\n */\n hintTransactionId: string;\n}\n\nexport interface TaskProgressNotification {\n type: NotificationType.TaskObservabilityEvent;\n taskId: string;\n event: ObservabilityEvent;\n}\n\nexport interface RequestProgressNotification {\n type: NotificationType.RequestObservabilityEvent;\n requestId: string;\n operation: string;\n event: ObservabilityEvent;\n}\n\nexport enum ObservabilityEventType {\n HttpFetchStart = \"http-fetch-start\",\n HttpFetchFinishError = \"http-fetch-finish-error\",\n HttpFetchFinishSuccess = \"http-fetch-finish-success\",\n DbQueryStart = \"db-query-start\",\n DbQueryFinishSuccess = \"db-query-finish-success\",\n DbQueryFinishError = \"db-query-finish-error\",\n RequestStart = \"request-start\",\n RequestFinishSuccess = \"request-finish-success\",\n RequestFinishError = \"request-finish-error\",\n TaskStart = \"task-start\",\n TaskStop = \"task-stop\",\n TaskReset = \"task-reset\",\n ShepherdTaskResult = \"sheperd-task-result\",\n DeclareTaskDependency = \"declare-task-dependency\",\n CryptoStart = \"crypto-start\",\n CryptoFinishSuccess = \"crypto-finish-success\",\n CryptoFinishError = \"crypto-finish-error\",\n Message = \"message\",\n}\n\nexport type ObservabilityEvent =\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchStart;\n url: string;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishSuccess;\n url: string;\n status: number;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishError;\n url: string;\n error: TalerErrorDetail;\n }\n | {\n type: ObservabilityEventType.DbQueryStart;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishSuccess;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishError;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.RequestStart;\n }\n | {\n type: ObservabilityEventType.RequestFinishSuccess;\n durationMs: number;\n }\n | {\n type: ObservabilityEventType.RequestFinishError;\n }\n | {\n type: ObservabilityEventType.TaskStart;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskStop;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskReset;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.DeclareTaskDependency;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.CryptoStart;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishSuccess;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishError;\n operation: string;\n }\n | {\n type: ObservabilityEventType.ShepherdTaskResult;\n resultType: string;\n }\n | {\n type: ObservabilityEventType.Message;\n contents: string;\n };\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n/**\n * This notification is required to signal UI that\n * the withdrawal operation changed the state.\n *\n * https://bugs.gnunet.org/view.php?id=8099\n */\nexport interface WithdrawalOperationTransitionNotification {\n type: NotificationType.WithdrawalOperationTransition;\n uri: string;\n}\n\nexport interface IdleNotification {\n type: NotificationType.Idle;\n}\n\nexport type WalletNotification =\n | BalanceChangeNotification\n | WithdrawalOperationTransitionNotification\n | BackupOperationErrorNotification\n | ExchangeStateTransitionNotification\n | TransactionStateTransitionNotification\n | TaskProgressNotification\n | RequestProgressNotification\n | IdleNotification;\n", "/*\n This file is part of GNU Taler\n (C) 2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n CancellationToken,\n ObservabilityEvent,\n} from \"./index.js\";\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http-common.js\";\nimport { ObservabilityEventType } from \"./notifications.js\";\nimport { getErrorDetailFromException } from \"./errors.js\";\n\n/**\n * Observability sink can be passed into various operations (HTTP requests, DB access)\n * to do structured logging within a particular context (task, request, ...).\n */\nexport interface ObservabilityContext {\n observe(evt: ObservabilityEvent): void;\n}\n\nlet seqId = 1000;\n\nexport class ObservableHttpClientLibrary implements HttpRequestLibrary {\n private readonly cancelatorById = new Map<string, CancellationToken.Source>();\n constructor(\n private impl: HttpRequestLibrary,\n private oc: ObservabilityContext,\n ) {}\n\n public cancelRequest(id: string): void {\n const cancelator = this.cancelatorById.get(id);\n if (!cancelator) return;\n cancelator.cancel();\n }\n\n async fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n const id = `req-${seqId}`;\n seqId = seqId + 1;\n\n const cancelator = CancellationToken.create();\n if (opt?.cancellationToken) {\n opt.cancellationToken.onCancelled(cancelator.cancel);\n }\n this.cancelatorById.set(id, cancelator);\n\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchStart,\n url: url,\n });\n\n const optsWithCancel = opt ?? {};\n optsWithCancel.cancellationToken = cancelator.token;\n try {\n const res = await this.impl.fetch(url, optsWithCancel);\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishSuccess,\n url,\n status: res.status,\n });\n return res;\n } catch (e) {\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishError,\n url,\n error: getErrorDetailFromException(e),\n });\n throw e;\n } finally {\n this.cancelatorById.delete(id);\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2024 Taler Systems SA\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { getRandomBytes } from \"./taler-crypto.js\";\n\nconst encTable = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\n/**\n * base32 RFC 3548\n */\nexport function encodeRfc3548Base32(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 isRfc3548Base32Charset(s: string): boolean {\n for (let idx = 0; idx < s.length; idx++) {\n const c = s.charAt(idx);\n if (encTable.indexOf(c) === -1) return false;\n }\n return true;\n}\n\nexport function randomRfc3548Base32Key(): string {\n const buf = getRandomBytes(20);\n return encodeRfc3548Base32(buf);\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 * Cross-platform timers.\n *\n * NodeJS and the browser use slightly different timer API,\n * this abstracts over these differences.\n */\n\n/**\n * Imports.\n */\nimport { Logger, Duration } from \"@gnu-taler/taler-util\";\n\nconst logger = new Logger(\"timer.ts\");\n\n/**\n * Cancelable timer.\n */\nexport interface TimerHandle {\n clear(): void;\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void;\n}\n\nclass IntervalHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearInterval(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\nclass TimeoutHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearTimeout(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\n/**\n * Get a performance counter in nanoseconds.\n */\nexport const performanceNow: () => bigint = (() => {\n // @ts-ignore\n if (typeof process !== \"undefined\" && process.hrtime) {\n return () => {\n return process.hrtime.bigint();\n };\n }\n\n // @ts-ignore\n if (typeof performance !== \"undefined\") {\n // @ts-ignore\n return () => BigInt(Math.floor(performance.now() * 1000)) * BigInt(1000);\n }\n\n return () => BigInt(new Date().getTime()) * BigInt(1000) * BigInt(1000);\n})();\n\nconst nullTimerHandle = {\n clear() {\n // do nothing\n return;\n },\n unref() {\n // do nothing\n return;\n },\n};\n\n/**\n * Group of timers that can be destroyed at once.\n */\nexport interface TimerAPI {\n after(delayMs: number, callback: () => void): TimerHandle;\n every(delayMs: number, callback: () => void): TimerHandle;\n}\n\nexport class SetTimeoutTimerAPI implements TimerAPI {\n /**\n * Call a function every time the delay given in milliseconds passes.\n */\n every(delayMs: number, callback: () => void): TimerHandle {\n return new IntervalHandle(setInterval(callback, delayMs));\n }\n\n /**\n * Call a function after the delay given in milliseconds passes.\n */\n after(delayMs: number, callback: () => void): TimerHandle {\n return new TimeoutHandle(setTimeout(callback, delayMs));\n }\n}\n\nexport const timer = new SetTimeoutTimerAPI();\n\n/**\n * Implementation of [[TimerGroup]] using setTimeout\n */\nexport class TimerGroup {\n private stopped = false;\n\n private readonly timerMap: { [index: number]: TimerHandle } = {};\n\n private idGen = 1;\n\n constructor(public readonly timerApi: TimerAPI) {}\n\n stopCurrentAndFutureTimers(): void {\n this.stopped = true;\n for (const x in this.timerMap) {\n if (!this.timerMap.hasOwnProperty(x)) {\n continue;\n }\n this.timerMap[x].clear();\n delete this.timerMap[x];\n }\n }\n\n resolveAfter(delayMs: Duration): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (delayMs.d_ms !== \"forever\") {\n this.after(delayMs.d_ms, () => {\n resolve();\n });\n }\n });\n }\n\n after(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.after(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\n }\n\n every(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.every(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\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\nimport {\n TransactionType,\n PaymentStatus,\n TransactionMajorState,\n} from \"./transactions-types.js\";\nimport { RefreshReason } from \"./wallet-types.js\";\n\n/**\n * Sample transaction list entries.\n */\nexport const sampleWalletCoreTransactions = [\n {\n type: TransactionType.Payment,\n txState: {\n major: TransactionMajorState.Done,\n },\n amountRaw: \"KUDOS:10\",\n amountEffective: \"KUDOS:10\",\n totalRefundRaw: \"KUDOS:0\",\n totalRefundEffective: \"KUDOS:0\",\n status: PaymentStatus.Paid,\n refundPending: undefined,\n posConfirmation: undefined,\n pending: false,\n refunds: [],\n timestamp: {\n t_s: 1677166045,\n },\n transactionId:\n \"txn:payment:NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n proposalId: \"NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n info: {\n merchant: {\n name: \"woocommerce\",\n website: \"woocommerce.demo.taler.net\",\n email: \"foo@example.com\",\n address: {},\n jurisdiction: {},\n },\n orderId: \"wc_order_KQCRldghIgDRB-100\",\n products: [\n {\n description: \"Using GCC\",\n quantity: 1,\n price: \"KUDOS:10\",\n product_id: \"28\",\n },\n ],\n summary: \"WooTalerShop #100\",\n contractTermsHash:\n \"A02E1M6ARWKBJ87K2TV4S6WQ4X5YH7BRVR6MYCHCTVAED8MBXTFD6PZ5Q50Y7Z5K18PYBTDA14NQ56XPC1VCQW1EVRWTSB7ZYT65B5G\",\n fulfillmentUrl:\n \"https://woocommerce.demo.taler.net/?wc-api=wc_gnutaler_gateway&order_id=wc_order_KQCRldghIgDRB-100\",\n },\n refundQueryActive: false,\n frozen: false,\n },\n {\n type: TransactionType.Refresh,\n txState: {\n major: TransactionMajorState.Pending,\n },\n refreshReason: RefreshReason.PayMerchant,\n amountEffective: \"KUDOS:0\",\n amountRaw: \"KUDOS:0\",\n refreshInputAmount: \"KUDOS:1.5\",\n refreshOutputAmount: \"KUDOS:1.4\",\n originatingTransactionId:\n \"txn:proposal:ZCGBZFE8KZ1CBYYGSC3ZC8E40KVJWV16VYCTHGC8FFSVZ5HD24BG\",\n pending: true,\n timestamp: {\n t_s: 1681376214,\n },\n transactionId:\n \"txn:refresh:QQSWHHXCRQ269G0E3RW14JMC6F7NFDYDW26NSFHRTXSKDS6CMCZ0\",\n frozen: false,\n error: {\n code: 7029,\n when: {\n t_ms: 1681376473665,\n },\n hint: \"Error (WALLET_REFRESH_GROUP_INCOMPLETE)\",\n numErrors: 1,\n errors: [\n {\n code: 7001,\n when: {\n t_ms: 1681376473189,\n },\n hint: \"unexpected exception (message: exchange wire fee signature invalid)\",\n stack:\n \" at validateWireInfo (../taler-wallet-core-qjs.mjs:23166)\\n\",\n },\n ],\n },\n },\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 { AbsoluteTime, Codec, codecForString } from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport {\n ObservableMap,\n browserStorageMap,\n localStorageMap,\n memoryMap,\n} from \"../utils/observable.js\";\n\ndeclare const opaque_StorageKey: unique symbol;\n\nexport type StorageKey<Key> = {\n id: string;\n [opaque_StorageKey]: true;\n codec: Codec<Key>;\n};\n\nexport function buildStorageKey<Key>(\n name: string,\n codec: Codec<Key>,\n): StorageKey<Key>;\nexport function buildStorageKey(name: string): StorageKey<string>;\nexport function buildStorageKey<Key = string>(\n name: string,\n codec?: Codec<Key>,\n): StorageKey<Key> {\n return {\n id: name,\n codec: codec ?? (codecForString() as Codec<Key>),\n } as StorageKey<Key>;\n}\n\nexport interface StorageState<Type = string> {\n value?: Type;\n update: (s: Type) => void;\n reset: () => void;\n}\n\nconst supportLocalStorage = typeof window !== \"undefined\";\nconst supportBrowserStorage =\n typeof chrome !== \"undefined\" && typeof chrome.storage !== \"undefined\";\n\n/**\n * Build setting storage\n */\nconst storage: ObservableMap<string, string> = (function buildStorage() {\n if (supportBrowserStorage) {\n //browser storage is like local storage but\n //with app sync.\n //Works for almost every browser\n if (supportLocalStorage) {\n return browserStorageMap(localStorageMap());\n } else {\n // service worker doesn't have local storage\n return browserStorageMap(memoryMap<string>());\n }\n } else if (supportLocalStorage) {\n // fallback if browser is too old\n return localStorageMap();\n } else {\n // new need to save settings somewhere\n return memoryMap<string>();\n }\n})();\n//with initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//without initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n): StorageState<Type>;\n// impl\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue?: Type,\n): StorageState<Type> {\n const current = convert(storage.get(key.id), key, defaultValue);\n\n const [_, setStoredValue] = useState(AbsoluteTime.now().t_ms);\n\n useEffect(() => {\n return storage.onUpdate(key.id, () => {\n // const newValue = storage.get(key.id);\n setStoredValue(AbsoluteTime.now().t_ms);\n });\n }, [key.id]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key.id);\n } else {\n storage.set(\n key.id,\n key.codec ? JSON.stringify(value) : (value as string),\n );\n }\n };\n\n return {\n value: current,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n\nfunction convert<Type>(updated: string | undefined, key: StorageKey<Type>, defaultValue?: Type): Type | undefined {\n if (updated === undefined) return defaultValue; //optional\n try {\n return key.codec.decode(JSON.parse(updated));\n } catch (e) {\n //decode error\n return defaultValue;\n }\n}\n", "import { isArrayBufferView } from \"util/types\";\n\nexport type ObservableMap<K, V> = Map<K, V> & {\n onAnyUpdate: (callback: () => void) => () => void;\n onUpdate: (key: string, callback: () => void) => () => void;\n};\n\n//FIXME: allow different type for different properties\nexport function memoryMap<T>(\n backend: Map<string, T> = new Map<string, T>(),\n): ObservableMap<string, T> {\n const obs = new EventTarget();\n const theMemoryMap: ObservableMap<string, T> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const result = backend.delete(key);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return result;\n },\n set: (key: string, value: T) => {\n backend.set(key, value);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theMemoryMap;\n },\n clear: () => {\n backend.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: backend.entries.bind(backend),\n forEach: backend.forEach.bind(backend),\n get: backend.get.bind(backend),\n has: backend.has.bind(backend),\n keys: backend.keys.bind(backend),\n size: backend.size,\n values: backend.values.bind(backend),\n [Symbol.iterator]: backend[Symbol.iterator],\n [Symbol.toStringTag]: \"theMemoryMap\",\n };\n return theMemoryMap;\n}\n\n//FIXME: change this implementation to match the\n// browser storage. instead of creating a sync implementation\n// of observable map it should reuse the memoryMap and\n// sync the state with local storage\nexport function localStorageMap(): ObservableMap<string, string> {\n const obs = new EventTarget();\n const theLocalStorageMap: ObservableMap<string, string> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n window.addEventListener(\"storage\", handler);\n return () => {\n window.removeEventListener(\"storage\", handler);\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n function handleStorageEvent(ev: StorageEvent) {\n if (ev.key === null || ev.key === key) {\n handler();\n }\n }\n window.addEventListener(\"storage\", handleStorageEvent);\n return () => {\n window.removeEventListener(\"storage\", handleStorageEvent);\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const exists = localStorage.getItem(key) !== null;\n localStorage.removeItem(key);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return exists;\n },\n set: (key: string, v: string) => {\n localStorage.setItem(key, v);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theLocalStorageMap;\n },\n clear: () => {\n localStorage.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: (): IterableIterator<[string, string]> => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: [key, item] };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n forEach: (cb) => {\n for (let index = 0; index < localStorage.length; index++) {\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n cb(key, item, theLocalStorageMap);\n }\n },\n get: (key: string) => {\n const item = localStorage.getItem(key);\n if (item === null) return undefined;\n return item;\n },\n has: (key: string) => {\n return localStorage.getItem(key) === null;\n },\n keys: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n index = index + 1;\n return { done: false, value: key };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n size: localStorage.length,\n values: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: item };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n [Symbol.iterator]: function (): IterableIterator<[string, string]> {\n return theLocalStorageMap.entries();\n },\n [Symbol.toStringTag]: \"theLocalStorageMap\",\n };\n return theLocalStorageMap;\n}\n\nconst isFirefox =\n typeof (window as any) !== \"undefined\" &&\n typeof (window as any)[\"InstallTrigger\"] !== \"undefined\";\n\nasync function getAllContent() {\n //Firefox and Chrome has different storage api\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.get();\n } else {\n return chrome.storage.local.get();\n }\n}\n\nasync function updateContent(obj: Record<string, any>) {\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.set(obj);\n } else {\n return chrome.storage.local.set(obj);\n }\n}\ntype Changes = { [key: string]: { oldValue?: any; newValue?: any } };\nfunction onBrowserStorageUpdate(cb: (changes: Changes) => void): void {\n if (isFirefox) {\n // @ts-ignore\n browser.storage.local.onChanged.addListener(cb);\n } else {\n chrome.storage.local.onChanged.addListener(cb);\n }\n}\n\nexport function browserStorageMap(\n backend: ObservableMap<string, string>,\n): ObservableMap<string, string> {\n getAllContent().then(content => {\n Object.entries(content ?? {}).forEach(([k, v]) => {\n backend.set(k, v as string);\n });\n })\n\n backend.onAnyUpdate(async () => {\n const result: Record<string, string> = {};\n for (const [key, value] of backend.entries()) {\n result[key] = value;\n }\n await updateContent(result);\n });\n\n onBrowserStorageUpdate((changes) => {\n //another chrome instance made the change\n const changedItems = Object.keys(changes);\n if (changedItems.length === 0) {\n backend.clear();\n } else {\n for (const key of changedItems) {\n if (!changes[key].newValue) {\n backend.delete(key);\n } else {\n if (changes[key].newValue !== changes[key].oldValue) {\n backend.set(key, changes[key].newValue);\n }\n }\n }\n }\n });\n\n return backend;\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 {\n StorageState,\n buildStorageKey,\n useLocalStorage,\n} from \"./useLocalStorage.js\";\n\nconst MIN_LANG_COVERAGE_THRESHOLD = 90;\n/**\n * choose the best from the browser config based on the completeness\n * on the translation\n */\nfunction getBrowserLang(completeness: Record<string, number>): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n\n if (window.navigator.language) {\n if (completeness[window.navigator.language] >= MIN_LANG_COVERAGE_THRESHOLD) {\n return window.navigator.language\n }\n }\n if (window.navigator.languages) {\n const match = Object.entries(completeness).filter(([code, value]) => {\n if (value < MIN_LANG_COVERAGE_THRESHOLD) return false; //do not consider langs below 90%\n return window.navigator.languages.findIndex(l => l.startsWith(code)) !== -1\n }).map(([code, value]) => ({ code, value }))\n\n if (match.length > 0) {\n let max = match[0]\n match.forEach(v => {\n if (v.value > max.value) {\n max = v\n }\n })\n return max.code\n }\n };\n\n return undefined;\n}\n\nconst langPreferenceKey = buildStorageKey(\"lang-preference\");\n\nexport function useLang(initial: string | undefined, completeness: Record<string, number>): Required<StorageState> {\n const defaultValue = (getBrowserLang(completeness) || initial || \"en\").substring(0, 2);\n return useLocalStorage(langPreferenceKey, defaultValue);\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ObservableMap, memoryMap } from \"../utils/observable.js\";\nimport { StorageKey, StorageState } from \"./useLocalStorage.js\";\n\nconst storage: ObservableMap<string, any> = memoryMap<any>();\n\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n): StorageState<Type>;\n// impl\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue?: Type,\n): StorageState<Type> {\n const [storedValue, setStoredValue] = useState<Type | undefined>(\n (): Type | undefined => {\n const prev = storage.get(key);\n return prev === undefined ? defaultValue : prev;\n },\n );\n\n useEffect(() => {\n return storage.onUpdate(key, () => {\n const newValue = storage.get(key);\n setStoredValue(newValue === undefined ? defaultValue : newValue);\n });\n }, [key]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key);\n } else {\n storage.set(key, value);\n }\n };\n\n return {\n value: storedValue,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n", "import {\n AbsoluteTime,\n Duration,\n OperationAlternative,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ButtonHandler, OnOperationFailReturnType, OnOperationSuccesReturnType } from \"../components/Button.js\";\nimport {\n InternationalizationAPI,\n memoryMap,\n useTranslationContext,\n} from \"../index.browser.js\";\n\nexport type NotificationMessage = ErrorNotification | InfoNotification;\n\nexport interface ErrorNotification {\n type: \"error\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n description?: TranslatedString;\n debug?: any;\n when: AbsoluteTime;\n}\nexport interface InfoNotification {\n type: \"info\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n when: AbsoluteTime;\n}\n\nconst storage = memoryMap<Map<string, NotificationMessage>>();\nconst NOTIFICATION_KEY = \"notification\";\n\nexport const GLOBAL_NOTIFICATION_TIMEOUT = Duration.fromSpec({\n seconds: 5,\n});\n\nfunction updateInStorage(n: NotificationMessage) {\n const h = hash(n);\n const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = new Map(mem);\n newState.set(h, n);\n storage.set(NOTIFICATION_KEY, newState);\n}\n\nexport function notify(notif: NotificationMessage): void {\n const currentState: Map<string, NotificationMessage> =\n storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = currentState.set(hash(notif), notif);\n\n if (GLOBAL_NOTIFICATION_TIMEOUT.d_ms !== \"forever\") {\n setTimeout(() => {\n notif.timeout = true;\n updateInStorage(notif);\n }, GLOBAL_NOTIFICATION_TIMEOUT.d_ms);\n }\n\n storage.set(NOTIFICATION_KEY, newState);\n}\nexport function notifyError(\n title: TranslatedString,\n description: TranslatedString | undefined,\n debug?: any,\n) {\n notify({\n type: \"error\" as const,\n title,\n description,\n debug,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyException(title: TranslatedString, ex: Error) {\n notify({\n type: \"error\" as const,\n title,\n description: ex.message as TranslatedString,\n debug: ex.stack,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyInfo(title: TranslatedString) {\n notify({\n type: \"info\" as const,\n title,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type Notification = {\n message: NotificationMessage;\n acknowledge: () => void;\n};\n\nexport function useNotifications(): Notification[] {\n const [, setLastUpdate] = useState<number>();\n const value = storage.get(NOTIFICATION_KEY) ?? new Map();\n\n useEffect(() => {\n return storage.onUpdate(NOTIFICATION_KEY, () => {\n setLastUpdate(Date.now())\n // const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n // setter(structuredClone(mem));\n });\n });\n\n return Array.from(value.values()).map((message, idx) => {\n return {\n message,\n acknowledge: () => {\n message.ack = true;\n updateInStorage(message);\n },\n };\n });\n}\n\nfunction hashCode(str: string): string {\n if (str.length === 0) return \"0\";\n let hash = 0;\n let chr;\n for (let i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash.toString(16);\n}\n\nfunction hash(msg: NotificationMessage): string {\n let str = (msg.type + \":\" + msg.title) as string;\n if (msg.type === \"error\") {\n if (msg.description) {\n str += \":\" + msg.description;\n }\n if (msg.debug) {\n str += \":\" + msg.debug;\n }\n }\n return hashCode(str);\n}\n\nfunction errorMap<T extends OperationFail<unknown>>(\n resp: T,\n map: (d: T[\"case\"]) => TranslatedString,\n): void {\n notify({\n type: \"error\",\n title: map(resp.case),\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type ErrorNotificationHandler = (\n cb: (notify: typeof errorMap) => Promise<void>,\n) => Promise<void>;\n\n/**\n * @deprecated use useLocalNotificationHandler\n *\n * @returns\n */\nexport function useLocalNotification(): [\n Notification | undefined,\n (n: NotificationMessage) => void,\n ErrorNotificationHandler,\n] {\n const { i18n } = useTranslationContext();\n\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n async function errorHandling(cb: (notify: typeof errorMap) => Promise<void>) {\n try {\n return await cb(errorMap);\n } catch (error: unknown) {\n if (error instanceof TalerError) {\n notify(buildUnifiedRequestErrorMessage(i18n, error));\n } else {\n notifyError(\n i18n.str`Operation failed, please report`,\n (error instanceof Error\n ? error.message\n : JSON.stringify(error)) as TranslatedString,\n );\n }\n }\n }\n return [notif, setter, errorHandling];\n}\n\ntype HandlerMaker = <T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess: OnOperationSuccesReturnType<T>,\n onOperationFail?: OnOperationFailReturnType<T>,\n onOperationComplete?: () => void,\n) => ButtonHandler<T, A, B>;\n\nexport function useLocalNotificationHandler(): [\n Notification | undefined,\n HandlerMaker,\n (n: NotificationMessage) => void,\n] {\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n function makeHandler<T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:OnOperationSuccesReturnType<T>,\n onOperationFail?: OnOperationFailReturnType<T>,\n onOperationComplete?: () => void,\n ): ButtonHandler<T, A, B> {\n return {\n onClick,\n onNotification: setter,\n onOperationFail,\n onOperationSuccess,\n onOperationComplete,\n };\n }\n\n return [notif, makeHandler, setter];\n}\n\nexport function buildUnifiedRequestErrorMessage(\n i18n: InternationalizationAPI,\n cause: TalerError,\n): ErrorNotification {\n let result: ErrorNotification;\n switch (cause.errorDetail.code) {\n case TalerErrorCode.GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Request cancelled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n result = {\n type: \"error\",\n title: i18n.str`Request throttled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n result = {\n type: \"error\",\n title: i18n.str`Malformed response`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Network error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected request error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n default: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n }\n return result;\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport enum ErrorType {\n CLIENT,\n SERVER,\n UNREADABLE,\n TIMEOUT,\n UNEXPECTED,\n}\n\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 * @deprecated do not use it, it will be removed\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 secret-token:${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 || options.contentType === \"json\" ? \"application/json\" : \"text/plain\";\n\n if (options.talerAmlOfficerSignature) {\n requestHeaders[\"Taler-AML-Officer-Signature\"] =\n options.talerAmlOfficerSignature;\n }\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 const requestPreventCache = options.preventCache ?? false;\n const requestPreventCors = options.preventCors ?? false;\n\n const validURL = validateURL(baseUrl, endpoint);\n\n if (!validURL) {\n const error: HttpResponseUnexpectedError = {\n info: {\n url: `${baseUrl}${endpoint}`,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `invalid URL: \"${baseUrl}${endpoint}\"`,\n };\n throw new RequestError(error)\n }\n\n Object.entries(requestParams).forEach(([key, value]) => {\n validURL.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 const error: HttpResponseUnexpectedError = {\n info: {\n url: validURL.href,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `unsupported request body type: \"${typeof requestBody}\"`,\n };\n throw new RequestError(error)\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(validURL.href, {\n headers: requestHeaders,\n method: requestMethod,\n credentials: \"omit\",\n mode: requestPreventCors ? \"no-cors\" : \"cors\",\n cache: requestPreventCache ? \"no-cache\" : \"default\",\n body: payload,\n signal: controller.signal,\n });\n } catch (ex) {\n const info: RequestInfo = {\n payload,\n url: validURL.href,\n hasToken: !!options.token,\n status: 0,\n options,\n };\n\n if (ex instanceof Error) {\n if (ex.message === \"HTTP_REQUEST_TIMEOUT\") {\n const error: HttpRequestTimeoutError = {\n info,\n type: ErrorType.TIMEOUT,\n message: \"request timeout\",\n };\n throw new RequestError(error);\n }\n }\n\n const error: HttpResponseUnexpectedError = {\n info,\n type: ErrorType.UNEXPECTED,\n exception: ex,\n loading: false,\n message: (ex instanceof Error ? ex.message : \"\"),\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 validURL.href,\n payload,\n !!options.token,\n options,\n );\n return result;\n } else {\n const dataTxt = await response.text();\n const error = buildRequestFailed(\n validURL.href,\n dataTxt,\n response.status,\n payload,\n options,\n );\n throw new RequestError(error);\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponse<T, ErrorDetail> =\n | HttpResponseOk<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponsePaginated<T, ErrorDetail> =\n | HttpResponseOkPaginated<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestInfo {\n url: string;\n hasToken: boolean;\n payload: any;\n status: number;\n options: RequestOptions;\n}\n\ninterface HttpResponseLoading<T> {\n ok?: false;\n loading: true;\n clientError?: false;\n serverError?: false;\n\n data?: T;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface WithPagination {\n loadMore: () => void;\n loadMorePrev: () => void;\n isReachingEnd?: boolean;\n isReachingStart?: boolean;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpError<ErrorDetail> =\n | HttpRequestTimeoutError\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface HttpResponseServerError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.SERVER;\n payload: ErrorDetail;\n status: HttpStatusCode;\n message: string;\n info: RequestInfo;\n}\ninterface HttpRequestTimeoutError {\n ok?: false;\n loading?: false;\n type: ErrorType.TIMEOUT;\n\n info: RequestInfo;\n\n message: string;\n}\ninterface HttpResponseClientError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.CLIENT;\n\n info: RequestInfo;\n status: HttpStatusCode;\n payload: ErrorDetail;\n message: string;\n}\n\ninterface HttpResponseUnexpectedError {\n ok?: false;\n loading: false;\n type: ErrorType.UNEXPECTED;\n\n info: RequestInfo;\n status?: HttpStatusCode;\n exception: unknown;\n message: string;\n}\n\ninterface HttpResponseUnreadableError {\n ok?: false;\n loading: false;\n type: ErrorType.UNREADABLE;\n\n info: RequestInfo;\n status: HttpStatusCode;\n exception: unknown;\n body: string;\n message: string;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestOptions {\n method?: Methods;\n token?: string;\n basicAuth?: {\n username: string;\n password: string;\n };\n preventCache?: boolean;\n preventCors?: boolean;\n data?: any;\n params?: unknown;\n timeout?: number;\n contentType?: \"text\" | \"json\";\n talerAmlOfficerSignature?: string;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nasync function buildRequestOk<T>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n options: RequestOptions,\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 options,\n status: response.status,\n },\n };\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport function buildRequestFailed<ErrorDetail>(\n url: string,\n dataTxt: string,\n status: number,\n payload: any,\n maybeOptions?: RequestOptions,\n):\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError {\n const options = maybeOptions ?? {};\n const info: RequestInfo = {\n payload,\n url,\n hasToken: !!options.token,\n options,\n status: status || 0,\n };\n\n // const dataTxt = await response.text();\n try {\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n const errorCode = !data || !data.code ? \"\" : `(code: ${data.code})`;\n const errorHint =\n !data || !data.hint ? \"Not hint.\" : `${data.hint} ${errorCode}`;\n\n if (status && status >= 400 && status < 500) {\n const message =\n data === undefined\n ? `Client error (${status}) without data.`\n : errorHint;\n\n const error: HttpResponseClientError<ErrorDetail> = {\n type: ErrorType.CLIENT,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n if (status && status >= 500 && status < 600) {\n const message =\n data === undefined\n ? `Server error (${status}) without data.`\n : errorHint;\n const error: HttpResponseServerError<ErrorDetail> = {\n type: ErrorType.SERVER,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n return {\n info,\n loading: false,\n type: ErrorType.UNEXPECTED,\n status,\n exception: undefined,\n message: `http status code not handled: ${status}`,\n };\n } catch (ex) {\n const error: HttpResponseUnreadableError = {\n info,\n loading: false,\n status,\n type: ErrorType.UNREADABLE,\n exception: ex,\n body: dataTxt,\n message: \"Could not parse body as json\",\n };\n\n return error;\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nfunction validateURL(baseUrl: string, endpoint: string): URL | undefined {\n try {\n return new URL(`${baseUrl}${endpoint}`)\n } catch (ex) {\n return undefined\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 * Imports.\n */\nimport {\n Logger,\n RequestThrottler,\n TalerErrorCode,\n TalerError,\n Duration,\n} from \"@gnu-taler/taler-util\";\n\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n Headers,\n getDefaultHeaders,\n encodeBody,\n DEFAULT_REQUEST_TIMEOUT_MS,\n HttpLibArgs,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"browserHttpLib\");\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n * \n * @deprecated use BrowserFetchHttpLib\n */\nexport class BrowserHttpLibDepreacted implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n let myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n return new Promise<HttpResponse>((resolve, reject) => {\n const myRequest = new XMLHttpRequest();\n\n myRequest.onerror = (e) => {\n logger.error(\"http request error\");\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"Could not make request\",\n ),\n );\n };\n\n myRequest.open(requestMethod, requestUrl);\n\n let timeoutId: any | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n myRequest.abort();\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `request to ${requestUrl} timed out`,\n ),\n );\n }, requestTimeout.d_ms);\n }\n\n Object.keys(requestHeadersMap).forEach((headerName) => {\n myRequest.setRequestHeader(headerName, requestHeadersMap[headerName]);\n });\n\n myRequest.responseType = \"arraybuffer\";\n myRequest.send(myBody);\n\n myRequest.addEventListener(\"readystatechange\", (e) => {\n if (myRequest.readyState === XMLHttpRequest.DONE) {\n if (myRequest.status === 0) {\n const exc = TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"HTTP request failed (status 0, maybe URI scheme was wrong?)\",\n );\n reject(exc);\n return;\n }\n const makeText = async (): Promise<string> => {\n const td = new TextDecoder();\n return td.decode(myRequest.response);\n };\n let responseJson: unknown = undefined;\n const makeJson = async (): Promise<any> => {\n if (responseJson === undefined) {\n try {\n const td = new TextDecoder();\n const responseString = td.decode(myRequest.response);\n responseJson = JSON.parse(responseString);\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n return responseJson;\n };\n\n const headers = myRequest.getAllResponseHeaders();\n const arr = headers.trim().split(/[\\r\\n]+/);\n\n // Create a map of header names to values\n const headerMap: Headers = new Headers();\n arr.forEach(function (line) {\n const parts = line.split(\": \");\n const headerName = parts.shift();\n if (!headerName) {\n logger.warn(\"skipping invalid header\");\n return;\n }\n const value = parts.join(\": \");\n headerMap.set(headerName, value);\n });\n const resp: HttpResponse = {\n requestUrl: requestUrl,\n status: myRequest.status,\n headers: headerMap,\n requestMethod: requestMethod,\n json: makeJson,\n text: makeText,\n bytes: async () => myRequest.response,\n };\n resolve(resp);\n }\n });\n });\n }\n\n get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"GET\",\n ...opt,\n });\n }\n\n postJson(\n url: string,\n body: any,\n opt?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n ...opt,\n });\n }\n\n stop(): void {\n // Nothing to do\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 * Imports.\n */\nimport {\n Duration,\n RequestThrottler,\n TalerError,\n TalerErrorCode\n} from \"@gnu-taler/taler-util\";\n\nimport {\n DEFAULT_REQUEST_TIMEOUT_MS,\n Headers,\n HttpLibArgs,\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n encodeBody,\n getDefaultHeaders,\n} from \"@gnu-taler/taler-util/http\";\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n */\nexport class BrowserFetchHttpLib implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n public constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n async fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n const requestCancel = options?.cancellationToken;\n const requestRedirect = options?.redirect;\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n const myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n controller.abort(TalerErrorCode.GENERIC_TIMEOUT);\n }, requestTimeout.d_ms);\n }\n if (requestCancel) {\n requestCancel.onCancelled(() => {\n controller.abort(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)\n });\n }\n\n try {\n const response = await fetch(requestUrl, {\n headers: requestHeadersMap,\n body: myBody,\n method: requestMethod,\n signal: controller.signal,\n redirect: requestRedirect\n });\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n const headerMap = new Headers();\n response.headers.forEach((value, key) => {\n headerMap.set(key, value);\n });\n return {\n headers: headerMap,\n status: response.status,\n requestMethod,\n requestUrl,\n json: makeJsonHandler(response, requestUrl, requestMethod),\n text: makeTextHandler(response, requestUrl, requestMethod),\n bytes: async () => (await response.blob()).arrayBuffer(),\n };\n } catch (e) {\n if (controller.signal) {\n throw TalerError.fromDetail(\n controller.signal.reason,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `HTTP request failed.`,\n );\n }\n throw e;\n }\n }\n\n}\n\nfunction makeTextHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n return async function getTextFromResponse(): Promise<any> {\n let respText;\n try {\n respText = await response.text();\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid text from HTTP response\",\n );\n }\n return respText;\n };\n}\n\nfunction makeJsonHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n let responseJson: unknown = undefined;\n return async function getJsonFromResponse(): Promise<any> {\n if (responseJson === undefined) {\n try {\n responseJson = await response.json();\n } catch (e) {\n const message = e instanceof Error ? `Invalid JSON from HTTP response: ${e.message}` : \"Invalid JSON from HTTP response\"\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n message,\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid JSON from HTTP response: null or not object\",\n );\n }\n return responseJson;\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\ndeclare const __location: unique symbol;\n/**\n * special string that defined a location in the application\n *\n * this help to prevent wrong path\n */\nexport type AppLocation = string & {\n [__location]: true;\n};\n\nexport type EmptyObject = Record<string, never>;\n\nexport function urlPattern<\n T extends Record<string, string | undefined> = EmptyObject,\n>(pattern: RegExp, reverse: (p: T) => string): RouteDefinition<T> {\n const url = reverse as (p: T) => AppLocation;\n return {\n pattern: new RegExp(pattern),\n url,\n };\n}\n\n/**\n * defines a location in the app\n *\n * pattern: how a string will trigger this location\n * url(): how a state serialize to a location\n */\n\nexport type ObjectOf<T> = Record<string, T> | EmptyObject;\n\nexport type RouteDefinition<\n T extends ObjectOf<string | undefined> = EmptyObject,\n> = {\n pattern: RegExp;\n url: (p: T) => AppLocation;\n};\n\nconst nullRountDef = {\n pattern: new RegExp(/.*/),\n url: () => \"\" as AppLocation,\n};\nexport function buildNullRoutDefinition<\n T extends ObjectOf<string>,\n>(): RouteDefinition<T> {\n return nullRountDef;\n}\n\n/**\n * Search path in the pageList\n * get the values from the path found\n * add params from searchParams\n *\n * @param path\n * @param params\n */\nexport function findMatch<T extends ObjectOf<RouteDefinition>>(\n pagesMap: T,\n pageList: Array<keyof T>,\n path: string,\n params: Record<string, string[]>,\n): Location<T> | undefined {\n for (let idx = 0; idx < pageList.length; idx++) {\n const name = pageList[idx];\n const found = pagesMap[name].pattern.exec(path);\n if (found !== null) {\n const values = {} as Record<string, unknown>;\n\n if (found.groups !== undefined) {\n Object.entries(found.groups).forEach(([key, value]) => {\n values[key] = value;\n });\n }\n\n // @ts-expect-error values is a map string which is equivalent to the RouteParamsType\n return { name, parent: pagesMap, values, params };\n }\n }\n return undefined;\n}\n\n/**\n * get the type of the params of a location\n *\n */\ntype RouteParamsType<\n RouteType,\n Key extends keyof RouteType,\n> = RouteType[Key] extends RouteDefinition<infer ParamType> ? ParamType : never;\n\n/**\n * Helps to create a map of a type with the key\n */\ntype MapKeyValue<Type> = {\n [Key in keyof Type]: Key extends string\n ? {\n parent: Type;\n name: Key;\n values: RouteParamsType<Type, Key>;\n params: Record<string, string[]>;\n }\n : never;\n};\n\n/**\n * create a enumeration of value of a mapped type\n */\ntype EnumerationOf<T> = T[keyof T];\n\nexport type Location<T> = EnumerationOf<MapKeyValue<T>>;\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 { TalerBankIntegrationHttpClient, TalerCoreBankHttpClient, TalerRevenueHttpClient, TalerWireGatewayHttpClient } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { defaultRequestHandler } from \"../utils/request.js\";\n\ninterface Type {\n /**\n * @deprecated this show not be used\n */\n request: typeof defaultRequestHandler;\n bankCore: TalerCoreBankHttpClient,\n bankIntegration: TalerBankIntegrationHttpClient,\n bankWire: TalerWireGatewayHttpClient,\n bankRevenue: TalerRevenueHttpClient,\n}\n\nconst Context = createContext<Type>({ request: defaultRequestHandler } as any);\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\";\nimport { Locale } from \"date-fns\";\nimport {\n es as esLocale,\n enGB as enLocale,\n fr as frLocale,\n de as deLocale\n} from \"date-fns/locale\"\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 dateLocale: Locale,\n completeness: { [id in keyof typeof supportedLang]: number }\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};\n\nconst initial: Type = {\n lang: \"en\",\n supportedLang,\n changeLanguage: () => {\n // do not change anything\n },\n i18n,\n dateLocale: enLocale,\n completeness: {\n de: 0,\n en: 0,\n es: 0,\n fr: 0,\n it: 0,\n sv: 0,\n }\n};\nconst Context = createContext<Type>(initial);\n\ninterface Props {\n initial?: string;\n children: ComponentChildren;\n forceLang?: string;\n source: Record<string, any>;\n completeness?: Record<string, number>;\n}\n\n// Outmost UI wrapper.\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\n source,\n completeness: completenessProp\n}: Props): VNode => {\n const completeness = {\n en: 100,\n de: !completenessProp || !completenessProp[\"de\"] ? 0 : completenessProp[\"de\"],\n es: !completenessProp || !completenessProp[\"es\"] ? 0 : completenessProp[\"es\"],\n fr: !completenessProp || !completenessProp[\"fr\"] ? 0 : completenessProp[\"fr\"],\n it: !completenessProp || !completenessProp[\"it\"] ? 0 : completenessProp[\"it\"],\n sv: !completenessProp || !completenessProp[\"sv\"] ? 0 : completenessProp[\"sv\"],\n }\n const { value: lang, update: changeLanguage } = useLang(initial, completeness);\n\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 const dateLocale = lang === \"es\" ? esLocale :\n lang === \"fr\" ? frLocale :\n lang === \"de\" ? deLocale :\n enLocale;\n\n return h(Context.Provider, {\n value: { lang, changeLanguage, supportedLang, i18n, dateLocale, completeness },\n children,\n });\n};\n\nexport const useTranslationContext = (): Type => useContext(Context);\n", "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}", "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}", "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}", "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}", "import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\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}", "/**\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;", "import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\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 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 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 requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n var _options$step;\n\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start 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 start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\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;", "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;", "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;", "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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\n\nexport default function getMinutes(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var minutes = date.getMinutes();\n return minutes;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\n\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\n\nexport default function getSeconds(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var seconds = date.getSeconds();\n return seconds;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\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\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n function Setter() {\n _classCallCheck(this, Setter);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n _createClass(Setter, [{\n key: \"validate\",\n value: function validate(_utcDate, _options) {\n return true;\n }\n }]);\n\n return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n _inherits(ValueSetter, _Setter);\n\n var _super = _createSuper(ValueSetter);\n\n function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n var _this;\n\n _classCallCheck(this, ValueSetter);\n\n _this = _super.call(this);\n _this.value = value;\n _this.validateValue = validateValue;\n _this.setValue = setValue;\n _this.priority = priority;\n\n if (subPriority) {\n _this.subPriority = subPriority;\n }\n\n return _this;\n }\n\n _createClass(ValueSetter, [{\n key: \"validate\",\n value: function validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n }, {\n key: \"set\",\n value: function set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n }]);\n\n return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n _inherits(DateToSystemTimezoneSetter, _Setter2);\n\n var _super2 = _createSuper(DateToSystemTimezoneSetter);\n\n function DateToSystemTimezoneSetter() {\n var _this2;\n\n _classCallCheck(this, DateToSystemTimezoneSetter);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n\n return _this2;\n }\n\n _createClass(DateToSystemTimezoneSetter, [{\n key: \"set\",\n value: function set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n }]);\n\n return DateToSystemTimezoneSetter;\n}(Setter);", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: \"run\",\n value: function run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n }, {\n key: \"validate\",\n value: function validate(_utcDate, _value, _options) {\n return true;\n }\n }]);\n\n return Parser;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n _inherits(EraParser, _Parser);\n\n var _super = _createSuper(EraParser);\n\n function EraParser() {\n var _this;\n\n _classCallCheck(this, EraParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n\n return _this;\n }\n\n _createClass(EraParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return EraParser;\n}(Parser);", "export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};", "import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\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 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n _inherits(YearParser, _Parser);\n\n var _super = _createSuper(YearParser);\n\n function YearParser() {\n var _this;\n\n _classCallCheck(this, YearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(YearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return YearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekYearParser, _Parser);\n\n var _super = _createSuper(LocalWeekYearParser);\n\n function LocalWeekYearParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n }]);\n\n return LocalWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekYearParser, _Parser);\n\n var _super = _createSuper(ISOWeekYearParser);\n\n function ISOWeekYearParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n }]);\n\n return ISOWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ExtendedYearParser, _Parser);\n\n var _super = _createSuper(ExtendedYearParser);\n\n function ExtendedYearParser() {\n var _this;\n\n _classCallCheck(this, ExtendedYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ExtendedYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ExtendedYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(QuarterParser, _Parser);\n\n var _super = _createSuper(QuarterParser);\n\n function QuarterParser() {\n var _this;\n\n _classCallCheck(this, QuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(QuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return QuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneQuarterParser, _Parser);\n\n var _super = _createSuper(StandAloneQuarterParser);\n\n function StandAloneQuarterParser() {\n var _this;\n\n _classCallCheck(this, StandAloneQuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneQuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneQuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(MonthParser, _Parser);\n\n var _super = _createSuper(MonthParser);\n\n function MonthParser() {\n var _this;\n\n _classCallCheck(this, MonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n return _this;\n }\n\n _createClass(MonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return MonthParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneMonthParser, _Parser);\n\n var _super = _createSuper(StandAloneMonthParser);\n\n function StandAloneMonthParser() {\n var _this;\n\n _classCallCheck(this, StandAloneMonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneMonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneMonthParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekParser, _Parser);\n\n var _super = _createSuper(LocalWeekParser);\n\n function LocalWeekParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n }]);\n\n return LocalWeekParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekParser, _Parser);\n\n var _super = _createSuper(ISOWeekParser);\n\n function ISOWeekParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n }]);\n\n return ISOWeekParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n _inherits(DateParser, _Parser);\n\n var _super = _createSuper(DateParser);\n\n function DateParser() {\n var _this;\n\n _classCallCheck(this, DateParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DateParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DateParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayOfYearParser, _Parser);\n\n var _super = _createSuper(DayOfYearParser);\n\n function DayOfYearParser() {\n var _this;\n\n _classCallCheck(this, DayOfYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayOfYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayOfYearParser;\n}(Parser);", "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 setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, 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 = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayParser, _Parser);\n\n var _super = _createSuper(DayParser);\n\n function DayParser() {\n var _this;\n\n _classCallCheck(this, DayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalDayParser, _Parser);\n\n var _super = _createSuper(LocalDayParser);\n\n function LocalDayParser() {\n var _this;\n\n _classCallCheck(this, LocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return LocalDayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneLocalDayParser, _Parser);\n\n var _super = _createSuper(StandAloneLocalDayParser);\n\n function StandAloneLocalDayParser() {\n var _this;\n\n _classCallCheck(this, StandAloneLocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneLocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneLocalDayParser;\n}(Parser);", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISODayParser, _Parser);\n\n var _super = _createSuper(ISODayParser);\n\n function ISODayParser() {\n var _this;\n\n _classCallCheck(this, ISODayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISODayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ISODayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMParser, _Parser);\n\n var _super = _createSuper(AMPMParser);\n\n function AMPMParser() {\n var _this;\n\n _classCallCheck(this, AMPMParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMMidnightParser, _Parser);\n\n var _super = _createSuper(AMPMMidnightParser);\n\n function AMPMMidnightParser() {\n var _this;\n\n _classCallCheck(this, AMPMMidnightParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMMidnightParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMMidnightParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayPeriodParser, _Parser);\n\n var _super = _createSuper(DayPeriodParser);\n\n function DayPeriodParser() {\n var _this;\n\n _classCallCheck(this, DayPeriodParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayPeriodParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return DayPeriodParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1to12Parser, _Parser);\n\n var _super = _createSuper(Hour1to12Parser);\n\n function Hour1to12Parser() {\n var _this;\n\n _classCallCheck(this, Hour1to12Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1to12Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour1to12Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0to23Parser, _Parser);\n\n var _super = _createSuper(Hour0to23Parser);\n\n function Hour0to23Parser() {\n var _this;\n\n _classCallCheck(this, Hour0to23Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0to23Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour0to23Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0To11Parser, _Parser);\n\n var _super = _createSuper(Hour0To11Parser);\n\n function Hour0To11Parser() {\n var _this;\n\n _classCallCheck(this, Hour0To11Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0To11Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour0To11Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1To24Parser, _Parser);\n\n var _super = _createSuper(Hour1To24Parser);\n\n function Hour1To24Parser() {\n var _this;\n\n _classCallCheck(this, Hour1To24Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1To24Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour1To24Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n _inherits(MinuteParser, _Parser);\n\n var _super = _createSuper(MinuteParser);\n\n function MinuteParser() {\n var _this;\n\n _classCallCheck(this, MinuteParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(MinuteParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n }]);\n\n return MinuteParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(SecondParser, _Parser);\n\n var _super = _createSuper(SecondParser);\n\n function SecondParser() {\n var _this;\n\n _classCallCheck(this, SecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(SecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n }]);\n\n return SecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(FractionOfSecondParser, _Parser);\n\n var _super = _createSuper(FractionOfSecondParser);\n\n function FractionOfSecondParser() {\n var _this;\n\n _classCallCheck(this, FractionOfSecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(FractionOfSecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n }]);\n\n return FractionOfSecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneWithZParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneWithZParser);\n\n function ISOTimezoneWithZParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneWithZParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneWithZParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneWithZParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneParser);\n\n function ISOTimezoneParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampSecondsParser, _Parser);\n\n var _super = _createSuper(TimestampSecondsParser);\n\n function TimestampSecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampSecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampSecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampSecondsParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampMillisecondsParser, _Parser);\n\n var _super = _createSuper(TimestampMillisecondsParser);\n\n function TimestampMillisecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampMillisecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampMillisecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampMillisecondsParser;\n}(Parser);", "import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\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 | | P | |\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 `parse` 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 */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\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\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/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 { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/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 notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\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 in the format string 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 *\n * Format of the format 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 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\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) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\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 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\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) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\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 | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | 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) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\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) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\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 | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | 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] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | 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) | 10 | 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 * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\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 * In `format` function, they will produce different result:\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 * `parse` will try to match both formatting and stand-alone units interchangably.\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:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. 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` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\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 [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. 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 * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `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 * 7. `D` and `DD` tokens represent days of the year but they are ofthen 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 * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\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 {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\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 {Date} the parsed date\n * @throws {TypeError} 3 arguments required\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} `options.locale` must contain `match` property\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 * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, 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(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\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\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\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 (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _iterator = _createForOfIteratorHelper(tokens),\n _step;\n\n try {\n var _loop = function _loop() {\n var token = _step.value;\n\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return {\n v: new Date(NaN)\n };\n }\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ret = _loop();\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var setter = _step2.value;\n\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}", "import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days 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 days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months 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 months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\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 subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from 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 subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(date, 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; // Subtract years and months\n\n var dateWithoutMonths = subMonths(date, months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}", "var formatDistanceLocale = {\n lessThanXSeconds: {\n standalone: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n },\n withPreposition: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n }\n },\n xSeconds: {\n standalone: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n },\n withPreposition: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n }\n },\n halfAMinute: {\n standalone: 'halbe Minute',\n withPreposition: 'halben Minute'\n },\n lessThanXMinutes: {\n standalone: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n },\n withPreposition: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n }\n },\n xMinutes: {\n standalone: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n },\n withPreposition: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n }\n },\n aboutXHours: {\n standalone: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n },\n withPreposition: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n }\n },\n xHours: {\n standalone: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n },\n withPreposition: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n }\n },\n xDays: {\n standalone: {\n one: '1 Tag',\n other: '{{count}} Tage'\n },\n withPreposition: {\n one: '1 Tag',\n other: '{{count}} Tagen'\n }\n },\n aboutXWeeks: {\n standalone: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n },\n withPreposition: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n }\n },\n xWeeks: {\n standalone: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n },\n withPreposition: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n }\n },\n aboutXMonths: {\n standalone: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monate'\n },\n withPreposition: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monaten'\n }\n },\n xMonths: {\n standalone: {\n one: '1 Monat',\n other: '{{count}} Monate'\n },\n withPreposition: {\n one: '1 Monat',\n other: '{{count}} Monaten'\n }\n },\n aboutXYears: {\n standalone: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahre'\n },\n withPreposition: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahren'\n }\n },\n xYears: {\n standalone: {\n one: '1 Jahr',\n other: '{{count}} Jahre'\n },\n withPreposition: {\n one: '1 Jahr',\n other: '{{count}} Jahren'\n }\n },\n overXYears: {\n standalone: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahre'\n },\n withPreposition: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahren'\n }\n },\n almostXYears: {\n standalone: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahre'\n },\n withPreposition: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahren'\n }\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\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}}', String(count));\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 'vor ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\n// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n full: 'EEEE, do MMMM y',\n // Montag, 7. Januar 2018\n long: 'do MMMM y',\n // 7. Januar 2018\n medium: 'do MMM y',\n // 7. Jan. 2018\n short: 'dd.MM.y' // 07.01.2018\n\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'um' {{time}}\",\n long: \"{{date}} 'um' {{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: \"'letzten' eeee 'um' p\",\n yesterday: \"'gestern um' p\",\n today: \"'heute um' p\",\n tomorrow: \"'morgen um' p\",\n nextWeek: \"eeee 'um' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['v.Chr.', 'n.Chr.'],\n abbreviated: ['v.Chr.', 'n.Chr.'],\n wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n}; // Note: in German, 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', 'M\u00E4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n wide: ['Januar', 'Februar', 'M\u00E4rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n}; // https://st.unicode.org/cldr-apps/v#/de/Gregorian/\n\nvar formattingMonthValues = {\n narrow: monthValues.narrow,\n abbreviated: ['Jan.', 'Feb.', 'M\u00E4rz', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n wide: monthValues.wide\n};\nvar dayValues = {\n narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n}; // https://www.unicode.org/cldr/charts/32/summary/de.html#1881\n\nvar dayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachm.',\n evening: 'Abend',\n night: 'Nacht'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachm.',\n evening: 'abends',\n night: 'nachts'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n var number = Number(dirtyNumber);\n return number + '.';\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 formattingValues: formattingMonthValues,\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;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i\n};\nvar parseEraPatterns = {\n any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(j[a\u00E4]n|feb|m\u00E4r[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\\.?/i,\n wide: /^(januar|februar|m\u00E4rz|april|mai|juni|juli|august|september|oktober|november|dezember)/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: [/^j[a\u00E4]/i, /^f/i, /^m\u00E4r/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smdmf]/i,\n short: /^(so|mo|di|mi|do|fr|sa)/i,\n abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\\.?/i,\n wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i\n};\nvar parseDayPatterns = {\n any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(vm\\.?|nm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n abbreviated: /^(vorm\\.?|nachm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^v/i,\n pm: /^n/i,\n midnight: /^Mitte/i,\n noon: /^Mitta/i,\n morning: /morgens/i,\n afternoon: /nachmittags/i,\n // will never be matched. Afternoon is matched by `pm`\n evening: /abends/i,\n night: /nachts/i // will never be matched. Night is matched by `pm`\n\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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: 'wide',\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 German locale.\n * @language German\n * @iso-639-2 deu\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Asia [@asia-t]{@link https://github.com/asia-t}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author RomanErnst [@pex]{@link https://github.com/pex}\n * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}\n */\nvar locale = {\n code: 'de',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, d MMMM yyyy',\n long: 'd MMMM yyyy',\n medium: 'd MMM yyyy',\n short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\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;", "import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\n\nvar locale = {\n code: 'en-GB',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'menos de un segundo',\n other: 'menos de {{count}} segundos'\n },\n xSeconds: {\n one: '1 segundo',\n other: '{{count}} segundos'\n },\n halfAMinute: 'medio minuto',\n lessThanXMinutes: {\n one: 'menos de un minuto',\n other: 'menos de {{count}} minutos'\n },\n xMinutes: {\n one: '1 minuto',\n other: '{{count}} minutos'\n },\n aboutXHours: {\n one: 'alrededor de 1 hora',\n other: 'alrededor de {{count}} horas'\n },\n xHours: {\n one: '1 hora',\n other: '{{count}} horas'\n },\n xDays: {\n one: '1 d\u00EDa',\n other: '{{count}} d\u00EDas'\n },\n aboutXWeeks: {\n one: 'alrededor de 1 semana',\n other: 'alrededor de {{count}} semanas'\n },\n xWeeks: {\n one: '1 semana',\n other: '{{count}} semanas'\n },\n aboutXMonths: {\n one: 'alrededor de 1 mes',\n other: 'alrededor de {{count}} meses'\n },\n xMonths: {\n one: '1 mes',\n other: '{{count}} meses'\n },\n aboutXYears: {\n one: 'alrededor de 1 a\u00F1o',\n other: 'alrededor de {{count}} a\u00F1os'\n },\n xYears: {\n one: '1 a\u00F1o',\n other: '{{count}} a\u00F1os'\n },\n overXYears: {\n one: 'm\u00E1s de 1 a\u00F1o',\n other: 'm\u00E1s de {{count}} a\u00F1os'\n },\n almostXYears: {\n one: 'casi 1 a\u00F1o',\n other: 'casi {{count}} a\u00F1os'\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 'en ' + result;\n } else {\n return 'hace ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'a las' {{time}}\",\n long: \"{{date}} 'a las' {{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: \"'el' eeee 'pasado a la' p\",\n yesterday: \"'ayer a la' p\",\n today: \"'hoy a la' p\",\n tomorrow: \"'ma\u00F1ana a la' p\",\n nextWeek: \"eeee 'a la' p\",\n other: 'P'\n};\nvar formatRelativeLocalePlural = {\n lastWeek: \"'el' eeee 'pasado a las' p\",\n yesterday: \"'ayer a las' p\",\n today: \"'hoy a las' p\",\n tomorrow: \"'ma\u00F1ana a las' p\",\n nextWeek: \"eeee 'a las' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n if (date.getUTCHours() !== 1) {\n return formatRelativeLocalePlural[token];\n } else {\n return formatRelativeLocale[token];\n }\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['AC', 'DC'],\n abbreviated: ['AC', 'DC'],\n wide: ['antes de cristo', 'despu\u00E9s de cristo']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['T1', 'T2', 'T3', 'T4'],\n wide: ['1\u00BA trimestre', '2\u00BA trimestre', '3\u00BA trimestre', '4\u00BA trimestre']\n};\nvar monthValues = {\n narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n abbreviated: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']\n};\nvar dayValues = {\n narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 's\u00E1'],\n abbreviated: ['dom', 'lun', 'mar', 'mi\u00E9', 'jue', 'vie', 's\u00E1b'],\n wide: ['domingo', 'lunes', 'martes', 'mi\u00E9rcoles', 'jueves', 'viernes', 's\u00E1bado']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n return number + '\u00BA';\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 Number(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;", "import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\u00BA)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|antes de la era com[u\u00FA]n|despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i\n};\nvar parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [/^(antes de cristo|antes de la era com[u\u00FA]n)/i, /^(despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](\u00BA)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[efmajsond]/i,\n abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^e/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: [/^en/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]\n};\nvar matchDayPatterns = {\n narrow: /^[dlmjvs]/i,\n short: /^(do|lu|ma|mi|ju|vi|s[\u00E1a])/i,\n abbreviated: /^(dom|lun|mar|mi[\u00E9e]|jue|vie|s[\u00E1a]b)/i,\n wide: /^(domingo|lunes|martes|mi[\u00E9e]rcoles|jueves|viernes|s[\u00E1a]bado)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(de la|a las) (ma\u00F1ana|tarde|noche))/i,\n any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (ma\u00F1ana|tarde|noche))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn/i,\n noon: /^md/i,\n morning: /ma\u00F1ana/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noche/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 Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Fernando Ag\u00FCero [@fjaguero]{@link https://github.com/fjaguero}\n * @author Gast\u00F3n Haro [@harogaston]{@link https://github.com/harogaston}\n * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n code: 'es',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'moins d\u2019une seconde',\n other: 'moins de {{count}} secondes'\n },\n xSeconds: {\n one: '1 seconde',\n other: '{{count}} secondes'\n },\n halfAMinute: '30 secondes',\n lessThanXMinutes: {\n one: 'moins d\u2019une minute',\n other: 'moins de {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'environ 1 heure',\n other: 'environ {{count}} heures'\n },\n xHours: {\n one: '1 heure',\n other: '{{count}} heures'\n },\n xDays: {\n one: '1 jour',\n other: '{{count}} jours'\n },\n aboutXWeeks: {\n one: 'environ 1 semaine',\n other: 'environ {{count}} semaines'\n },\n xWeeks: {\n one: '1 semaine',\n other: '{{count}} semaines'\n },\n aboutXMonths: {\n one: 'environ 1 mois',\n other: 'environ {{count}} mois'\n },\n xMonths: {\n one: '1 mois',\n other: '{{count}} mois'\n },\n aboutXYears: {\n one: 'environ 1 an',\n other: 'environ {{count}} ans'\n },\n xYears: {\n one: '1 an',\n other: '{{count}} ans'\n },\n overXYears: {\n one: 'plus d\u2019un an',\n other: 'plus de {{count}} ans'\n },\n almostXYears: {\n one: 'presqu\u2019un an',\n other: 'presque {{count}} ans'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var form = formatDistanceLocale[token];\n\n if (typeof form === 'string') {\n result = form;\n } else if (count === 1) {\n result = form.one;\n } else {\n result = form.other.replace('{{count}}', String(count));\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'dans ' + result;\n } else {\n return 'il y a ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE d MMMM y',\n long: 'd MMMM y',\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} '\u00E0' {{time}}\",\n long: \"{{date}} '\u00E0' {{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: \"eeee 'dernier \u00E0' p\",\n yesterday: \"'hier \u00E0' p\",\n today: \"'aujourd\u2019hui \u00E0' p\",\n tomorrow: \"'demain \u00E0' p'\",\n nextWeek: \"eeee 'prochain \u00E0' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['av. J.-C', 'ap. J.-C'],\n abbreviated: ['av. J.-C', 'ap. J.-C'],\n wide: ['avant J\u00E9sus-Christ', 'apr\u00E8s J\u00E9sus-Christ']\n};\nvar quarterValues = {\n narrow: ['T1', 'T2', 'T3', 'T4'],\n abbreviated: ['1er trim.', '2\u00E8me trim.', '3\u00E8me trim.', '4\u00E8me trim.'],\n wide: ['1er trimestre', '2\u00E8me trimestre', '3\u00E8me trimestre', '4\u00E8me trimestre']\n};\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['janv.', 'f\u00E9vr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'ao\u00FBt', 'sept.', 'oct.', 'nov.', 'd\u00E9c.'],\n wide: ['janvier', 'f\u00E9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\u00FBt', 'septembre', 'octobre', 'novembre', 'd\u00E9cembre']\n};\nvar dayValues = {\n narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\n short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\n abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n wide: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'mat.',\n afternoon: 'ap.m.',\n evening: 'soir',\n night: 'mat.'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'matin',\n afternoon: 'apr\u00E8s-midi',\n evening: 'soir',\n night: 'matin'\n },\n wide: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'du matin',\n afternoon: 'de l\u2019apr\u00E8s-midi',\n evening: 'du soir',\n night: 'du matin'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n var number = Number(dirtyNumber);\n var unit = options === null || options === void 0 ? void 0 : options.unit;\n if (number === 0) return '0';\n var feminineUnits = ['year', 'week', 'hour', 'minute', 'second'];\n var suffix;\n\n if (number === 1) {\n suffix = unit && feminineUnits.includes(unit) ? '\u00E8re' : 'er';\n } else {\n suffix = '\u00E8me';\n }\n\n return number + suffix;\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 })\n};\nexport default localize;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(i\u00E8me|\u00E8re|\u00E8me|er|e)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(av\\.J\\.C|ap\\.J\\.C|ap\\.J\\.-C)/i,\n abbreviated: /^(av\\.J\\.-C|av\\.J-C|apr\\.J\\.-C|apr\\.J-C|ap\\.J-C)/i,\n wide: /^(avant J\u00E9sus-Christ|apr\u00E8s J\u00E9sus-Christ)/i\n};\nvar parseEraPatterns = {\n any: [/^av/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^T?[1234]/i,\n abbreviated: /^[1234](er|\u00E8me|e)? trim\\.?/i,\n wide: /^[1234](er|\u00E8me|e)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(janv|f\u00E9vr|mars|avr|mai|juin|juill|juil|ao\u00FBt|sept|oct|nov|d\u00E9c)\\.?/i,\n wide: /^(janvier|f\u00E9vrier|mars|avril|mai|juin|juillet|ao\u00FBt|septembre|octobre|novembre|d\u00E9cembre)/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, /^av/i, /^ma/i, /^juin/i, /^juil/i, /^ao/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[lmjvsd]/i,\n short: /^(di|lu|ma|me|je|ve|sa)/i,\n abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\\.?/i,\n wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|minuit|midi|mat\\.?|ap\\.?m\\.?|soir|nuit)/i,\n any: /^([ap]\\.?\\s?m\\.?|du matin|de l'apr\u00E8s[-\\s]midi|du soir|de la nuit)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^min/i,\n noon: /^mid/i,\n morning: /mat/i,\n afternoon: /ap/i,\n evening: /soir/i,\n night: /nuit/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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 * @type {Locale}\n * @category Locales\n * @summary French locale.\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author Fran\u00E7ois B [@fbonzon]{@link https://github.com/fbonzon}\n */\n\nvar locale = {\n code: 'fr',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerBankConversionCacheEviction,\n TalerBankConversionHttpClient,\n TalerCoreBankCacheEviction,\n TalerCoreBankHttpClient,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { APIClient, ActiviyTracker, BankLib, Subscriber } from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type BankContextType = {\n url: URL;\n config: TalerCorebankApi.Config;\n lib: BankLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst BankContext = createContext<BankContextType>(undefined);\n\nexport const useBankCoreApiContext = (): BankContextType =>\n useContext(BankContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n conversion?: CacheEvictor<TalerBankConversionCacheEviction>;\n bank?: CacheEvictor<TalerCoreBankCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const BankApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerCorebankApi.Config>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildBankApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: BankContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildBankApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<BankLib, TalerCorebankApi.Config> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const bank = new TalerCoreBankHttpClient(url.href, httpLib, evictors.bank);\n const conversion = new TalerBankConversionHttpClient(\n bank.getConversionInfoAPI().href,\n httpLib,\n evictors.conversion,\n );\n const auth = (user: string) =>\n new TalerAuthenticationHttpClient(\n bank.getAuthenticationAPI(user).href,\n httpLib,\n );\n\n async function getRemoteConfig(): Promise<TalerCorebankApi.Config> {\n const resp = await bank.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: bank.PROTOCOL_VERSION,\n lib: {\n bank,\n conversion,\n auth,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const BankApiProviderTesting = ({\n children,\n value,\n}: {\n value: BankContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { ChallengerHttpClient, ObservabilityEvent, TalerAuthenticationHttpClient, TalerBankConversionHttpClient, TalerCoreBankHttpClient, TalerExchangeHttpClient, TalerMerchantInstanceHttpClient, TalerMerchantManagementHttpClient } from \"@gnu-taler/taler-util\";\n\ntype Listener<Event> = (e: Event) => void;\ntype Unsuscriber = () => void;\nexport type Subscriber<Event> = (fn: Listener<Event>) => Unsuscriber;\n\nexport class ActiviyTracker<Event> {\n private observers = new Array<Listener<Event>>();\n constructor() {\n this.notify = this.notify.bind(this)\n this.subscribe = this.subscribe.bind(this)\n }\n notify(data: Event): void {\n this.observers.forEach((observer) => observer(data))\n }\n subscribe(func: Listener<Event>): Unsuscriber {\n this.observers.push(func);\n return () => {\n this.observers.forEach((observer, index) => {\n if (observer === func) {\n this.observers.splice(index, 1);\n }\n });\n };\n }\n}\n\n/**\n * build http client with cache breaker due to SWR\n * @param url\n * @returns\n */\nexport interface APIClient<T, C> {\n getRemoteConfig(): Promise<C>;\n VERSION: string;\n lib: T,\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest(id: string): void;\n}\n\nexport interface MerchantLib {\n instance: TalerMerchantManagementHttpClient;\n authenticate: TalerAuthenticationHttpClient;\n subInstanceApi: (instanceId: string) => MerchantLib;\n}\n\nexport interface ExchangeLib {\n exchange: TalerExchangeHttpClient;\n}\n\nexport interface BankLib {\n bank: TalerCoreBankHttpClient;\n conversion: TalerBankConversionHttpClient;\n auth: (user: string) => TalerAuthenticationHttpClient;\n}\n\nexport interface ChallengerLib {\n challenger: ChallengerHttpClient;\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n ChallengerApi,\n ChallengerCacheEviction,\n ChallengerHttpClient,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerError\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n ChallengerLib,\n Subscriber\n} from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type ChallengerContextType = {\n url: URL;\n config: ChallengerApi.ChallengerTermsOfServiceResponse;\n lib: ChallengerLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst ChallengerContext = createContext<ChallengerContextType>(undefined);\n\nexport const useChallengerApiContext = (): ChallengerContextType =>\n useContext(ChallengerContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n challenger?: CacheEvictor<ChallengerCacheEviction>;\n}\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const ChallengerApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<ChallengerApi.ChallengerTermsOfServiceResponse>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildChallengerApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: ChallengerContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(ChallengerContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildChallengerApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<ChallengerLib, ChallengerApi.ChallengerTermsOfServiceResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const challenger = new ChallengerHttpClient(url.href, httpLib, evictors.challenger);\n\n async function getRemoteConfig(): Promise<ChallengerApi.ChallengerTermsOfServiceResponse> {\n const resp = await challenger.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: challenger.PROTOCOL_VERSION,\n lib: {\n challenger,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const ChallengerApiProviderTesting = ({\n children,\n value,\n}: {\n value: ChallengerContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(ChallengerContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerError,\n TalerMerchantApi,\n TalerMerchantInstanceCacheEviction,\n TalerMerchantManagementCacheEviction,\n TalerMerchantManagementHttpClient,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n MerchantLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type MerchantContextType = {\n url: URL;\n config: TalerMerchantApi.VersionResponse;\n lib: MerchantLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n changeBackend: (url: URL) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst MerchantContext = createContext<MerchantContextType>(undefined);\n\nexport const useMerchantApiContext = (): MerchantContextType =>\n useContext(MerchantContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n management?: CacheEvictor<\n TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction\n >;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\nexport type ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const MerchantApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{\n state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;\n }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerMerchantApi.VersionResponse>>();\n\n const [merchantEndpoint, changeMerchantEndpoint] = useState(baseUrl);\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildMerchantApiClient(merchantEndpoint, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (!checked || checked.type !== \"ok\") {\n return h(frameOnError, { state: checked }, []);\n }\n\n const value: MerchantContextType = {\n url: merchantEndpoint,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n changeBackend: changeMerchantEndpoint,\n hints: checked.hints,\n };\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildMerchantApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<MerchantLib, TalerMerchantApi.VersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const instance = new TalerMerchantManagementHttpClient(\n url.href,\n httpLib,\n evictors.management,\n );\n const authenticate = new TalerAuthenticationHttpClient(\n instance.getAuthenticationAPI().href,\n httpLib,\n );\n\n function getSubInstanceAPI(instanceId: string): MerchantLib {\n const api = buildMerchantApiClient(\n instance.getSubInstanceAPI(instanceId) as URL,\n evictors,\n );\n return api.lib;\n }\n\n async function getRemoteConfig(): Promise<TalerMerchantApi.VersionResponse> {\n const resp = await instance.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: instance.PROTOCOL_VERSION,\n lib: {\n instance,\n authenticate,\n subInstanceApi: getSubInstanceAPI,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const MerchantApiProviderTesting = ({\n children,\n value,\n}: {\n value: MerchantContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerError,\n TalerExchangeApi,\n TalerExchangeCacheEviction,\n TalerExchangeHttpClient\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib, ErrorLoading, useTranslationContext } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n ExchangeLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type ExchangeContextType = {\n url: URL;\n config: TalerExchangeApi.ExchangeVersionResponse;\n lib: ExchangeLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst ExchangeContext = createContext<ExchangeContextType>(undefined);\n\nexport const useExchangeApiContext = (): ExchangeContextType =>\n useContext(ExchangeContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n exchange?: CacheEvictor<TalerExchangeCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\ntype ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const ExchangeApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerExchangeApi.ExchangeVersionResponse>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildExchangeApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: ExchangeContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(ExchangeContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildExchangeApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<ExchangeLib, TalerExchangeApi.ExchangeVersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const ex = new TalerExchangeHttpClient(url.href, httpLib, evictors.exchange);\n\n async function getRemoteConfig(): Promise<TalerExchangeApi.ExchangeVersionResponse> {\n const resp = await ex.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: ex.PROTOCOL_VERSION,\n lib: {\n exchange: ex,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const ExchangeApiProviderTesting = ({\n children,\n value,\n}: {\n value: ExchangeContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(ExchangeContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport {\n AppLocation,\n ObjectOf,\n Location,\n findMatch,\n RouteDefinition,\n} from \"../utils/route.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = {\n path: string;\n params: Record<string, string[]>;\n navigateTo: (path: AppLocation) => void;\n // addNavigationListener: (listener: (path: string, params: Record<string, string>) => void) => (() => void);\n};\n\n// @ts-expect-error should not be used without provider\nconst Context = createContext<Type>(undefined);\n\nexport const useNavigationContext = (): Type => useContext(Context);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useCurrentLocation<T extends ObjectOf<RouteDefinition<any>>>(\n pagesMap: T,\n): Location<T> | undefined {\n const pageList = Object.keys(pagesMap as object) as Array<keyof T>;\n const { path, params } = useNavigationContext();\n\n return findMatch(pagesMap, pageList, path, params);\n}\n\nfunction getPathAndParamsFromWindow(): {\n path: string;\n params: Record<string, string[]>;\n} {\n const path =\n typeof window !== \"undefined\" ? window.location.hash.substring(1) : \"/\";\n const params: Record<string, string[]> = {};\n if (typeof window !== \"undefined\") {\n for (const [key, value] of new URLSearchParams(window.location.search)) {\n if (!params[key]) {\n params[key] = [];\n }\n params[key].push(value);\n }\n }\n return { path, params };\n}\n\nconst { path: initialPath, params: initialParams } =\n getPathAndParamsFromWindow();\n\n// there is a possibility that if the browser does a redirection\n// (which doesn't go through navigatTo function) and that executed\n// too early (before addEventListener runs) it won't be taking\n// into account\nconst PopStateEventType = \"popstate\";\n\nexport const BrowserHashNavigationProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const [{ path, params }, setState] = useState({\n path: initialPath,\n params: initialParams,\n });\n if (typeof window === \"undefined\") {\n throw Error(\n \"Can't use BrowserHashNavigationProvider if there is no window object\",\n );\n }\n function navigateTo(path: string): void {\n const { params } = getPathAndParamsFromWindow();\n setState({ path, params });\n window.location.href = path;\n }\n\n useEffect(() => {\n function eventListener(): void {\n setState(getPathAndParamsFromWindow());\n }\n window.addEventListener(PopStateEventType, eventListener);\n return () => {\n window.removeEventListener(PopStateEventType, eventListener);\n };\n }, []);\n return h(Context.Provider, {\n value: { path, params, navigateTo },\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { stringifyTalerUri, TalerUri } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\n/**\n * https://docs.taler.net/design-documents/039-taler-browser-integration.html\n *\n * @param uri\n */\nfunction createHeadMetaTag(uri: TalerUri, onNotFound?: () => void) {\n const meta = document.createElement(\"meta\");\n meta.setAttribute(\"name\", \"taler-uri\");\n meta.setAttribute(\"content\", stringifyTalerUri(uri));\n\n document.head.appendChild(meta);\n\n let walletFound = false;\n window.addEventListener(\"beforeunload\", () => {\n walletFound = true;\n });\n setTimeout(() => {\n if (!walletFound && onNotFound) {\n onNotFound();\n }\n }, 10); //very short timeout\n}\ninterface Type {\n /**\n * Tell the active wallet that an action is found\n *\n * @param uri\n * @returns\n */\n publishTalerAction: (uri: TalerUri, onNotFound?: () => void) => void;\n}\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst Context = createContext<Type>(undefined);\n\nexport const useTalerWalletIntegrationAPI = (): Type => useContext(Context);\n\nexport const TalerWalletIntegrationBrowserProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const value: Type = {\n publishTalerAction: createHeadMetaTag,\n };\n return h(Context.Provider, {\n value,\n children,\n });\n};\n\nexport const TalerWalletIntegrationTestingProvider = ({\n children,\n value,\n}: {\n children: ComponentChildren;\n value: Type;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\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\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\nexport function recursive<PType>(\n hook: (p: PType) => RecursiveState<VNode>,\n): (p: PType) => VNode {\n\n function withHook(stateHook: () => RecursiveState<VNode>): () => 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 return 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/**\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", "import { Duration, TranslatedString, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\n\ninterface Props {\n type?: \"info\" | \"success\" | \"warning\" | \"danger\" | \"low\",\n onClose?: () => void,\n title: TranslatedString,\n children?: ComponentChildren,\n timeout?: Duration,\n}\nexport function Attention({ type = \"info\", title, children, onClose, timeout = Duration.getForever() }: Props): VNode {\n\n return <div class={`group attention-${type} mt-2 shadow-lg`}>\n {timeout.d_ms === \"forever\" ? undefined : <style>{`\n .progress {\n animation: notificationTimeoutBar ${Math.round(timeout.d_ms / 1000)}s ease-in-out;\n animation-fill-mode:both; \n }\n\n @keyframes notificationTimeoutBar {\n 0% { width: 0; }\n 100% { width: 100%; }\n }\n `}</style>\n }\n\n <div data-timed={timeout.d_ms !== \"forever\"} class=\"rounded-md data-[timed=true]:rounded-b-none group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 p-4 shadow\">\n <div class=\"flex\">\n <div >\n {type === \"low\" ? undefined :\n <svg xmlns=\"http://www.w3.org/2000/svg\" stroke=\"none\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-8 h-8 group-[.attention-info]:text-blue-400 group-[.attention-warning]:text-yellow-400 group-[.attention-danger]:text-red-400 group-[.attention-success]:text-green-400\">\n {(() => {\n switch (type) {\n case \"info\":\n return <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\" />\n case \"warning\":\n return <path fill-rule=\"evenodd\" d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"danger\":\n return <path fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"success\":\n return <path fill-rule=\"evenodd\" d=\"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z\" />\n default:\n assertUnreachable(type)\n }\n })()}\n </svg>\n }\n </div>\n <div class=\"ml-3 w-full\">\n <h3 class=\"text-sm font-bold group-[.attention-info]:text-blue-800 group-[.attention-success]:text-green-800 group-[.attention-warning]:text-yellow-800 group-[.attention-danger]:text-red-800\">\n {title}\n </h3>\n <div class=\"mt-2 text-sm group-[.attention-info]:text-blue-700 group-[.attention-warning]:text-yellow-700 group-[.attention-danger]:text-red-700 group-[.attention-success]:text-green-700\">\n {children}\n </div>\n </div>\n {onClose &&\n <div>\n <button type=\"button\" class=\"font-semibold items-center rounded bg-transparent px-2 py-1 text-xs text-gray-900 hover:bg-gray-50\"\n onClick={(e) => {\n e.preventDefault();\n onClose();\n }}\n >\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n }\n </div>\n </div>\n {timeout.d_ms === \"forever\" ? undefined :\n <div class=\"meter group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 h-1 relative overflow-hidden -mt-1\">\n <span class=\"w-full h-full block\"><span class=\"h-full block progress group-[.attention-info]:bg-blue-600 group-[.attention-low]:bg-gray-600 group-[.attention-warning]:bg-yellow-600 group-[.attention-danger]:bg-red-600 group-[.attention-success]:bg-green-600\"></span></span>\n </div>\n }\n\n </div>\n}\n", "import { ComponentChildren, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nexport function CopyIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75\" />\n </svg>\n )\n};\n\nexport function CopiedIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n )\n};\n\nexport function CopyButton({ class: clazz, children, getContent }: { children?: ComponentChildren, class: string, getContent: () => string }): VNode {\n const [copied, setCopied] = useState(false);\n function copyText(): void {\n if (!navigator.clipboard && !window.isSecureContext) {\n alert('clipboard is not available on insecure context (http)')\n }\n if (navigator.clipboard) {\n navigator.clipboard.writeText(getContent() || \"\");\n setCopied(true);\n }\n }\n useEffect(() => {\n if (copied) {\n setTimeout(() => {\n setCopied(false);\n }, 1000);\n }\n }, [copied]);\n\n if (!copied) {\n return (\n <button class={clazz} onClick={e => {\n e.preventDefault()\n copyText()\n }} >\n <CopyIcon />\n {children}\n </button>\n );\n }\n return (\n <button class={clazz} disabled>\n <CopiedIcon />\n {children}\n </button>\n );\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\nimport { TalerError, TalerErrorCode, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function ErrorLoading({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {\n const { i18n } = useTranslationContext()\n switch (error.errorDetail.code) {\n //////////////////\n // Every error that can be produce in a Http Request\n //////////////////\n case TalerErrorCode.GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request was cancelled.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {\n const { requestMethod, requestUrl, throttleStats } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`A lot of request were made to the same server and this action was throttled`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {\n const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The response of the request is malformed.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {\n const { requestMethod, requestUrl } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Could not complete the request due to a network problem.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {\n const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Unexpected request error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n //////////////////\n // Every other error \n //////////////////\n // case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n // return <Attention type=\"danger\" title={i18n.str``}>\n // </Attention>\n // }\n //////////////////\n // Default message for unhandled case\n //////////////////\n default: return <Attention type=\"danger\" title={i18n.str`Unexpected error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify(error.errorDetail, undefined, 2)}\n </pre>\n }\n </Attention>\n }\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 */\n\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n// import { strings as messages } from \"../i18n/strings.js\";\nimport langIcon from \"../assets/lang.svg\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\ntype LangsNames = {\n [P: string]: 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): string {\n if (names[s]) return names[s];\n return String(s);\n}\n\nexport function LangSelector({ }: {}): VNode {\n const [updatingLang, setUpdatingLang] = useState(false);\n const { lang, changeLanguage, completeness, supportedLang } = useTranslationContext();\n const [hidden, setHidden] = useState(true);\n\n useEffect(() => {\n function bodyKeyPress(event: KeyboardEvent) {\n if (event.code === \"Escape\") setHidden(true);\n }\n function bodyOnClick(event: Event) {\n setHidden(true);\n }\n document.body.addEventListener(\"click\", bodyOnClick);\n document.body.addEventListener(\"keydown\", bodyKeyPress as any);\n return () => {\n document.body.removeEventListener(\"keydown\", bodyKeyPress as any);\n document.body.removeEventListener(\"click\", bodyOnClick);\n };\n }, []);\n return (\n <div>\n <div class=\"relative mt-2\">\n <button type=\"button\" class=\"relative w-full cursor-default rounded-md bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600 sm:text-sm sm:leading-6\" aria-haspopup=\"listbox\" aria-expanded=\"true\" aria-labelledby=\"listbox-label\"\n onClick={(e) => {\n setHidden(!hidden);\n e.stopPropagation()\n }}>\n <span class=\"flex items-center\">\n <img alt=\"language\" class=\"h-5 w-5 flex-shrink-0 rounded-full\" src={langIcon} />\n <span class=\"ml-3 block truncate\">{getLangName(lang)}</span>\n </span>\n <span class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <svg class=\"h-5 w-5 text-gray-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </button>\n\n {!hidden &&\n <ul class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\" tabIndex={-1} role=\"listbox\" aria-labelledby=\"listbox-label\" aria-activedescendant=\"listbox-option-3\">\n {Object.keys(supportedLang)\n .filter((l) => l !== lang)\n .map((lang) => (\n <li class=\"text-gray-900 hover:bg-indigo-600 hover:text-white cursor-pointer relative select-none py-2 pl-3 pr-9\" role=\"option\"\n onClick={() => {\n changeLanguage(lang);\n setUpdatingLang(false);\n setHidden(true)\n }}\n >\n <span class=\"font-normal truncate flex justify-between \">\n <span>{getLangName(lang)}</span>\n <span>{(completeness as any)[lang]}%</span>\n </span>\n\n <span class=\"text-indigo-600 absolute inset-y-0 right-0 flex items-center pr-4\">\n {/* <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clip-rule=\"evenodd\" />\n </svg> */}\n </span>\n </li>\n ))}\n\n </ul>\n }\n\n </div>\n </div>\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\nimport { h, VNode } from \"preact\";\n\nexport function Loading(): VNode {\n return (\n <div\n class=\"columns is-centered is-vcentered\"\n style={{\n width: \"100%\",\n height: \"200px\",\n display: \"flex\",\n margin: \"auto\",\n justifyContent: \"center\",\n }}\n >\n <Spinner />\n </div>\n );\n}\n\nfunction Spinner(): VNode {\n return (\n <div class=\"lds-ring\" style={{ margin: \"auto\" }}>\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n}\n", "import { useState } from \"preact/hooks\";\nimport { LangSelector, useNotifications, useTranslationContext } from \"../index.browser.js\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport logo from \"../assets/logo-2021.svg\";\n\ninterface Props {\n title: string;\n iconLinkURL: string;\n profileURL?: string;\n notificationURL?: string;\n children?: ComponentChildren;\n onLogout: (() => void) | undefined;\n sites: Array<Array<string>>;\n supportedLangs: string[]\n}\n\nexport function Header({ title, profileURL, notificationURL, iconLinkURL, sites, onLogout, children }: Props): VNode {\n const { i18n } = useTranslationContext();\n const [open, setOpen] = useState(false)\n const ns = useNotifications();\n\n return <Fragment>\n <header class=\"bg-indigo-600 w-full mx-auto px-2 border-b border-opacity-25 border-indigo-400\">\n <div class=\"flex flex-row h-16 items-center \">\n <div class=\"flex px-2 justify-start\">\n <div class=\"flex-shrink-0 bg-white rounded-lg\">\n <a href={iconLinkURL ?? \"#\"} name=\"logo\">\n <img\n class=\"h-8 w-auto\"\n src={logo}\n alt=\"GNU Taler\"\n style={{ height: \"1.5rem\", margin: \".5rem\" }}\n />\n </a>\n </div>\n <span class=\"flex items-center text-white text-lg font-bold ml-4\">\n {title}\n </span>\n </div>\n <div class=\"flex-1 ml-6 \">\n <div class=\"flex flex-1 space-x-4\">\n {sites.map((site) => {\n if (site.length !== 2) return;\n const [name, url] = site\n return <a href={url} name={`site header ${name}`} class=\"hidden sm:block text-white hover:bg-indigo-500 hover:bg-opacity-75 rounded-md py-2 px-3 text-sm font-medium\">{name}</a>\n })}\n </div>\n </div>\n <div class=\"flex justify-end\">\n {!notificationURL ? undefined :\n <a href={notificationURL} name=\"notifications\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Show notifications</i18n.Translate></span>\n {ns.length > 0 ?\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-10 h-10\">\n <path d=\"M5.85 3.5a.75.75 0 0 0-1.117-1 9.719 9.719 0 0 0-2.348 4.876.75.75 0 0 0 1.479.248A8.219 8.219 0 0 1 5.85 3.5ZM19.267 2.5a.75.75 0 1 0-1.118 1 8.22 8.22 0 0 1 1.987 4.124.75.75 0 0 0 1.48-.248A9.72 9.72 0 0 0 19.266 2.5Z\" />\n <path fill-rule=\"evenodd\" d=\"M12 2.25A6.75 6.75 0 0 0 5.25 9v.75a8.217 8.217 0 0 1-2.119 5.52.75.75 0 0 0 .298 1.206c1.544.57 3.16.99 4.831 1.243a3.75 3.75 0 1 0 7.48 0 24.583 24.583 0 0 0 4.83-1.244.75.75 0 0 0 .298-1.205 8.217 8.217 0 0 1-2.118-5.52V9A6.75 6.75 0 0 0 12 2.25ZM9.75 18c0-.034 0-.067.002-.1a25.05 25.05 0 0 0 4.496 0l.002.1a2.25 2.25 0 1 1-4.5 0Z\" clip-rule=\"evenodd\" />\n </svg>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\" />\n </svg>\n }\n </a>\n }\n {!profileURL ? undefined :\n <a href={profileURL} name=\"profile\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open profile</i18n.Translate></span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </svg>\n </a>\n }\n <button type=\"button\" name=\"toggle sidebar\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\"\n onClick={(e) => {\n setOpen(!open)\n }}>\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open settings</i18n.Translate></span>\n <svg class=\"block h-10 w-10\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n </svg>\n </button>\n </div>\n </div>\n </header>\n\n {\n open &&\n <div class=\"relative z-10\" name=\"sidebar overlay\" aria-labelledby=\"slide-over-title\" role=\"dialog\" aria-modal=\"true\"\n onClick={() => {\n setOpen(false)\n }}>\n <div class=\"fixed inset-0\"></div>\n\n <div class=\"fixed inset-0 overflow-hidden\">\n <div class=\"absolute inset-0 overflow-hidden\">\n <div class=\"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10\">\n <div class=\"pointer-events-auto w-screen max-w-md\" >\n <div class=\"flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl\" onClick={(e) => {\n //do not trigger close if clicking inside the sidebar\n e.stopPropagation();\n }}>\n <div class=\"px-4 sm:px-6\" >\n <div class=\"flex items-start justify-between\" >\n <h2 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"slide-over-title\">\n <i18n.Translate>Menu</i18n.Translate>\n </h2>\n <div class=\"ml-3 flex h-7 items-center\">\n <button type=\"button\" name=\"close sidebar\" class=\"relative rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2\"\n onClick={(e) => {\n setOpen(false)\n }}\n\n >\n <span class=\"absolute -inset-2.5\"></span>\n <span class=\"sr-only\">\n <i18n.Translate>Close panel</i18n.Translate>\n </span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"relative mt-6 flex-1 px-4 sm:px-6\">\n <nav class=\"flex flex-1 flex-col\" aria-label=\"Sidebar\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n {onLogout ?\n <li>\n <a href=\"#\"\n name=\"logout\"\n class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\"\n onClick={() => {\n onLogout();\n setOpen(false)\n }}\n >\n <svg class=\"h-6 w-6 shrink-0 text-indigo-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\" />\n </svg>\n <i18n.Translate>Log out</i18n.Translate>\n </a>\n </li>\n : undefined}\n <li>\n <LangSelector />\n </li>\n {/* CHILDREN */}\n {children}\n {/* /CHILDREN */}\n {sites.length > 0 ?\n <li class=\"block sm:hidden\">\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Sites</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-1\">\n {sites.map(([name, url]) => {\n return <li>\n <a href={url} name={`site ${name}`} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n <span class=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-lg border text-[0.625rem] font-medium bg-white text-gray-400 border-gray-200 group-hover:border-indigo-600 group-hover:text-indigo-600\">&gt;</span>\n <span class=\"truncate\">{name}</span>\n </a>\n </li>\n })}\n </ul>\n </li>\n : undefined\n }\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </Fragment >\n}\n", "import { useTranslationContext } from \"../index.browser.js\";\nimport { h } from \"preact\";\n\nexport function Footer({ testingUrlKey, VERSION, GIT_HASH }: { VERSION?: string, GIT_HASH?: string, testingUrlKey?: string }) {\n const { i18n } = useTranslationContext()\n\n const testingUrl = (testingUrlKey && typeof localStorage !== \"undefined\") && localStorage.getItem(testingUrlKey) ?\n localStorage.getItem(testingUrlKey) ?? undefined :\n undefined\n const versionText = VERSION\n ? GIT_HASH\n ? <a href={`https://git.taler.net/wallet-core.git/tree/?id=${GIT_HASH}`} target=\"_blank\" rel=\"noreferrer noopener\">\n Version {VERSION} ({GIT_HASH.substring(0, 8)})\n </a>\n : VERSION\n : \"\";\n return (\n <footer class=\"bottom-4 my-4 mx-8 bg-slate-200\">\n <div>\n <p class=\"text-xs leading-5 text-gray-400\">\n <i18n.Translate>\n Learn more about <a target=\"_blank\" rel=\"noreferrer noopener\" class=\"font-semibold text-gray-500 hover:text-gray-400\" href=\"https://taler.net\">GNU Taler</a>\n </i18n.Translate>\n </p>\n </div>\n <div style=\"flex-grow:1\" />\n <p class=\"text-xs leading-5 text-gray-400\">\n Copyright &copy; 2014&mdash;2023 Taler Systems SA. {versionText}{\" \"}\n </p>\n {testingUrlKey && testingUrl &&\n\n <p class=\"text-xs leading-5 text-gray-300\">\n Testing with {testingUrl}{\" \"}\n <a\n href=\"\"\n onClick={(e) => {\n e.preventDefault();\n localStorage.removeItem(testingUrlKey);\n window.location.reload();\n }}\n >\n stop testing\n </a>\n </p>\n }\n </footer>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n OperationAlternative,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\n// import { NotificationMessage, notifyInfo } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { HTMLAttributes, useState } from \"preact/compat\";\nimport {\n NotificationMessage,\n buildUnifiedRequestErrorMessage,\n notifyInfo,\n useTranslationContext,\n} from \"../index.browser.js\";\n// import { useBankCoreApiContext } from \"../context/config.js\";\n\n// function errorMap<T extends OperationFail<unknown>>(resp: T, map: (d: T[\"case\"]) => TranslatedString): void {\n\nexport type OnOperationSuccesReturnType<T> = (\n result: T extends OperationOk<any> ? T : never,\n) => TranslatedString | void;\nexport type OnOperationFailReturnType<T> = (\n (d: (T extends OperationFail<any> ? T : never) | (T extends OperationAlternative<any,any> ? T : never)) => TranslatedString)\n\nexport interface ButtonHandler<T extends OperationResult<A, B>, A, B> {\n onClick: () => Promise<T | undefined>;\n onNotification: (n: NotificationMessage) => void;\n onOperationSuccess: OnOperationSuccesReturnType<T>;\n onOperationFail?: OnOperationFailReturnType<T>;\n onOperationComplete?: () => void;\n}\n\ninterface Props<T extends OperationResult<A, B>, A, B>\n extends HTMLAttributes<HTMLButtonElement> {\n handler: ButtonHandler<T, A, B> | undefined;\n}\n\n/**\n * This button accept an async function and report a notification\n * on error or success.\n *\n * When the async function is running the inner text will change into\n * a \"loading\" animation.\n *\n * @param param0\n * @returns\n */\nexport function Button<T extends OperationResult<A, B>, A, B>({\n handler,\n children,\n disabled,\n onClick: clickEvent,\n ...rest\n}: Props<T, A, B>): VNode {\n const { i18n } = useTranslationContext();\n const [running, setRunning] = useState(false);\n return (\n <button\n {...rest}\n disabled={disabled || running}\n onClick={(e) => {\n e.preventDefault();\n if (!handler) {\n return;\n }\n setRunning(true);\n handler\n .onClick()\n .then((resp) => {\n if (resp) {\n if (resp.type === \"ok\") {\n const result: OperationOk<any> = resp;\n // @ts-expect-error this is an operationOk\n const msg = handler.onOperationSuccess(result);\n if (msg) {\n notifyInfo(msg);\n }\n }\n if (resp.type === \"fail\") {\n const d = 'detail' in resp ? resp.detail : undefined\n \n const title = !handler.onOperationFail ? \"Unexpected error.\" as TranslatedString : handler.onOperationFail(resp as any);\n handler.onNotification({\n title,\n type: \"error\",\n description: d && d.hint ? d.hint as TranslatedString : undefined,\n debug: d,\n when: AbsoluteTime.now(),\n });\n }\n }\n if (handler.onOperationComplete) {\n handler.onOperationComplete();\n }\n setRunning(false);\n })\n .catch((error) => {\n console.error(error);\n\n if (error instanceof TalerError) {\n handler.onNotification(\n buildUnifiedRequestErrorMessage(i18n, error),\n );\n } else {\n const description = (\n error instanceof Error ? error.message : String(error)\n ) as TranslatedString;\n\n handler.onNotification({\n title: i18n.str`Operation failed`,\n type: \"error\",\n description,\n when: AbsoluteTime.now(),\n });\n }\n\n if (handler.onOperationComplete) {\n handler.onOperationComplete();\n }\n setRunning(false);\n });\n }}\n >\n {running ? <Wait /> : children}\n </button>\n );\n}\n\nfunction Wait(): VNode {\n return (\n <Fragment>\n <style>\n {`\n #l1 { width: 120px;\n height: 20px;\n -webkit-mask: radial-gradient(circle closest-side, currentColor 90%, #0000) left/20% 100%;\n background: linear-gradient(currentColor 0 0) left/0% 100% no-repeat #ddd;\n animation: l17 2s infinite steps(6);\n }\n @keyframes l17 {\n 100% {background-size:120% 100%}\n`}\n </style>\n <div id=\"l1\" />\n </Fragment>\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\nimport { Fragment, h, VNode } from \"preact\";\n\nexport function ShowInputErrorLabel({\n isDirty,\n message,\n}: {\n message: string | undefined;\n isDirty: boolean;\n}): VNode {\n if (message && isDirty)\n return <div class=\"text-base\" style={{ color: \"red\" }}>{message}</div>;\n return <div class=\"text-base\" style={{ }}> </div>;\n}\n", "import { h, Fragment, VNode } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { Notification } from \"../index.browser.js\";\n\nexport function LocalNotificationBanner({ notification, showDebug }: { notification?: Notification, showDebug?: boolean }): VNode {\n if (!notification) return <Fragment />\n switch (notification.message.type) {\n case \"error\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"danger\" title={notification.message.title} onClose={() => {\n notification.acknowledge()\n }}>\n {notification.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {notification.message.description}\n </div>\n }\n {showDebug && <pre class=\"whitespace-break-spaces \">\n {notification.message.debug}\n </pre>}\n </Attention>\n </div>\n </div>\n case \"info\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"success\" title={notification.message.title} onClose={() => {\n notification.acknowledge();\n }} /></div></div>\n }\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Fragment, VNode, h } from \"preact\"\nimport { Attention, GLOBAL_NOTIFICATION_TIMEOUT as GLOBAL_TOAST_TIMEOUT, Notification, useNotifications } from \"../index.browser.js\"\n\n/**\n * Toasts should be considered when displaying these types of information to the user:\n * \n * Low attention messages that do not require user action\n * Singular status updates\n * Confirmations\n * Information that does not need to be followed up\n * \n * Do not use toasts if the information contains the following:\n * \n * High attention and crtitical information\n * Time-sensitive information\n * Requires user action or input\n * Batch updates\n * \n * @returns \n */\nexport function ToastBanner(): VNode {\n const notifs = useNotifications()\n if (notifs.length === 0) return <Fragment />\n const show = notifs.filter(e => !e.message.ack && !e.message.timeout)\n if (show.length === 0) return <Fragment />\n return <AttentionByType msg={show[0]} />\n}\n\nfunction AttentionByType({ msg }: { msg: Notification }) {\n switch (msg.message.type) {\n case \"error\":\n return <Attention type=\"danger\" title={msg.message.title} onClose={() => {\n msg.acknowledge()\n }} timeout={GLOBAL_TOAST_TIMEOUT}>\n {msg.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {msg.message.description}\n </div>\n }\n </Attention>\n case \"info\":\n return <Attention type=\"success\" title={msg.message.title} onClose={() => {\n msg.acknowledge();\n }} timeout={GLOBAL_TOAST_TIMEOUT} />\n }\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport {\n add as dateAdd,\n sub as dateSub,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n getMonth,\n getYear,\n isSameDay,\n isSameMonth,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function Calendar({\n value,\n onChange,\n}: {\n value: AbsoluteTime | undefined;\n onChange: (v: AbsoluteTime) => void;\n}): VNode {\n const today = startOfDay(new Date());\n const selected = !value ? today : new Date(AbsoluteTime.toStampMs(value));\n const [showingDate, setShowingDate] = useState(selected);\n const month = getMonth(showingDate);\n const year = getYear(showingDate);\n\n const start = startOfWeek(startOfMonth(showingDate));\n const end = endOfWeek(endOfMonth(showingDate));\n const daysInMonth = eachDayOfInterval({ start, end });\n const { i18n } = useTranslationContext();\n const monthNames = [\n i18n.str`January`,\n i18n.str`February`,\n i18n.str`March`,\n i18n.str`April`,\n i18n.str`May`,\n i18n.str`June`,\n i18n.str`July`,\n i18n.str`August`,\n i18n.str`September`,\n i18n.str`October`,\n i18n.str`November`,\n i18n.str`December`,\n ];\n return (\n <div class=\"text-center p-2\">\n <div class=\"flex items-center text-gray-900\">\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { years: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Previous year`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{year}</div>\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { years: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Next year`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n <div class=\"mt-4 flex items-center text-gray-900\">\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { months: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Previous month`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{monthNames[month]}</div>\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 rounded-sm \"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { months: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Next month`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n <div class=\"mt-6 grid grid-cols-7 text-xs leading-6 text-gray-500\">\n <div>M</div>\n <div>T</div>\n <div>W</div>\n <div>T</div>\n <div>F</div>\n <div>S</div>\n <div>S</div>\n </div>\n <div class=\"isolate mt-2\">\n <div class=\"grid grid-cols-7 gap-px rounded-lg bg-gray-200 text-sm shadow ring-1 ring-gray-200\">\n {daysInMonth.map((current, idx) => (\n <button\n type=\"button\"\n key={idx}\n data-month={isSameMonth(current, showingDate)}\n data-today={isSameDay(current, today)}\n data-selected={isSameDay(current, selected)}\n onClick={() => {\n onChange(AbsoluteTime.fromStampMs(current.getTime()));\n }}\n class=\"text-gray-400 hover:bg-gray-700 focus:z-10 py-1.5 \n data-[month=false]:bg-gray-100 data-[month=true]:bg-white \n data-[today=true]:font-semibold \n data-[month=true]:text-gray-900\n data-[today=true]:bg-red-300 data-[today=true]:hover:bg-red-200\n data-[month=true]:hover:bg-gray-200\n data-[selected=true]:!bg-blue-400 data-[selected=true]:hover:!bg-blue-300 \"\n >\n <time\n dateTime={format(current, \"yyyy-MM-dd\")}\n class=\"mx-auto flex h-7 w-7 py-4 px-5 sm:px-8 items-center justify-center rounded-full\"\n >\n {format(current, \"dd\")}\n </time>\n </button>\n ))}\n </div>\n {daysInMonth.length < 40 ? <div class=\"w-7 h-7 m-1.5\" /> : undefined}\n </div>\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired, RenderAddon } from \"./InputLine.js\";\nimport { Addon } from \"./FormProvider.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: Addon;\n after?: Addon;\n}\n\nexport function Caption({ before, after, label, tooltip, help }: Props): VNode {\n return (\n <div class=\"sm:col-span-6 flex\">\n {before !== undefined && <RenderAddon addon={before} />}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && <RenderAddon addon={after} />}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { Addon, UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { useField } from \"./useField.js\";\n\n//@ts-ignore\nconst TooltipIcon = (\n <svg\n class=\"w-5 h-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n);\n\nexport function LabelWithTooltipMaybeRequired({\n label,\n required,\n tooltip,\n}: {\n label: TranslatedString;\n required?: boolean;\n tooltip?: TranslatedString;\n}): VNode {\n const Label = (\n <Fragment>\n <div class=\"flex justify-between\">\n <label\n htmlFor=\"email\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {label}\n </label>\n </div>\n </Fragment>\n );\n const WithTooltip = tooltip ? (\n <div class=\"relative flex flex-grow items-stretch focus-within:z-10\">\n {Label}\n <span class=\"relative flex items-center group pl-2\">\n {TooltipIcon}\n <div class=\"absolute bottom-0 -ml-10 hidden flex-col items-center mb-6 group-hover:flex w-28\">\n <div class=\"relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-black shadow-lg\">\n {tooltip}\n </div>\n <div class=\"w-3 h-3 -mt-2 rotate-45 bg-black\"></div>\n </div>\n </span>\n </div>\n ) : (\n Label\n );\n if (required) {\n return (\n <div class=\"flex justify-between\">\n {WithTooltip}\n <span class=\"text-sm leading-6 text-red-600\">*</span>\n </div>\n );\n }\n return WithTooltip;\n}\n\nexport function RenderAddon({ disabled, addon }: { disabled?: boolean, addon: Addon }): VNode {\n switch (addon.type) {\n case \"text\": {\n return (\n <span class=\"inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {addon.text}\n </span>\n );\n }\n case \"icon\": {\n return (\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n {addon.icon}\n </div>\n );\n }\n case \"button\": {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={addon.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-l-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {addon.children}\n </button>\n );\n }\n }\n}\n\nfunction InputWrapper<T extends object, K extends keyof T>({\n children,\n label,\n tooltip,\n before,\n after,\n help,\n error,\n disabled,\n required,\n}: {\n error?: string;\n disabled: boolean;\n children: ComponentChildren;\n} & UIFormProps<T, K>): VNode {\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <div class=\"relative mt-2 flex rounded-md shadow-sm\">\n {before && <RenderAddon disabled={disabled} addon={before} />}\n\n {children}\n\n {after && <RenderAddon disabled={disabled} addon={after} />}\n </div>\n {error && (\n <p class=\"mt-2 text-sm text-red-600\" id=\"email-error\">\n {error}\n </p>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n\nfunction defaultToString(v: unknown) {\n return v === undefined ? \"\" : typeof v !== \"object\" ? String(v) : \"\";\n}\nfunction defaultFromString(v: string) {\n return v;\n}\n\ntype InputType = \"text\" | \"text-area\" | \"password\" | \"email\" | \"number\";\n\nexport function InputLine<T extends object, K extends keyof T>(\n props: { type: InputType } & UIFormProps<T, K>,\n): VNode {\n const { name, placeholder, before, after, converter, type } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state, error } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n // const [text, setText] = useState(\"\");\n const fromString: (s: string) => any =\n converter?.fromStringUI ?? defaultFromString;\n const toString: (s: any) => string = converter?.toStringUI ?? defaultToString;\n\n // useEffect(() => {\n // const newValue = toString(value);\n // if (newValue) {\n // setText(newValue);\n // }\n // }, [value]);\n\n if (state.hidden) return <div />;\n\n let clazz =\n \"block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200\";\n if (before) {\n switch (before.type) {\n case \"icon\": {\n clazz += \" pl-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-r-md \";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-r-md rounded-none \";\n break;\n }\n }\n }\n if (after) {\n switch (after.type) {\n case \"icon\": {\n clazz += \" pr-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-l-md\";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-l-md rounded-none \";\n break;\n }\n }\n }\n const showError = value !== undefined && error;\n if (showError) {\n clazz +=\n \" text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500\";\n } else {\n clazz +=\n \" text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-indigo-600\";\n }\n\n if (type === \"text-area\") {\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? error : undefined}\n >\n <textarea\n rows={4}\n name={String(name)}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n }\n\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? error : undefined}\n >\n <input\n name={String(name)}\n type={type}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // onBlur={() => {\n // onChange(fromString(value as any));\n // }}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormProvider, UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { useField } from \"./useField.js\";\n\nfunction Option({\n label,\n disabled,\n isFirst,\n isLast,\n isSelected,\n onClick,\n}: {\n label: TranslatedString;\n isFirst?: boolean;\n isLast?: boolean;\n isSelected?: boolean;\n disabled?: boolean;\n onClick: () => void;\n}): VNode {\n let clazz = \"relative flex border p-4 focus:outline-none disabled:text-grey\";\n if (isFirst) {\n clazz += \" rounded-tl-md rounded-tr-md \";\n }\n if (isLast) {\n clazz += \" rounded-bl-md rounded-br-md \";\n }\n if (isSelected) {\n clazz += \" z-10 border-indigo-200 bg-indigo-50 \";\n } else {\n clazz += \" border-gray-200\";\n }\n if (disabled) {\n clazz +=\n \" cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray\";\n } else {\n clazz += \" cursor-pointer\";\n }\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"privacy-setting\"\n checked={isSelected}\n disabled={disabled}\n onClick={onClick}\n class=\"mt-0.5 h-4 w-4 shrink-0 text-indigo-600 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200 focus:ring-indigo-600\"\n aria-labelledby=\"privacy-setting-0-label\"\n aria-describedby=\"privacy-setting-0-description\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n id=\"privacy-setting-0-label\"\n disabled\n class=\"block text-sm font-medium\"\n >\n {label}\n </span>\n {/* <!-- Checked: \"text-indigo-700\", Not Checked: \"text-gray-500\" --> */}\n {/* <span\n id=\"privacy-setting-0-description\"\n class=\"block text-sm\"\n >\n This project would be available to anyone who has the link\n </span> */}\n </span>\n </label>\n );\n}\n\nexport function noHandlerPropsAndNoContextForField(\n field: string | number | symbol,\n): never {\n throw Error(\n `Field ${field.toString()} doesn't have handler and is not in a form provider context.`,\n );\n}\n\nexport function InputArray<T extends object, K extends keyof T>(\n props: {\n fields: UIFormField[];\n labelField: string;\n } & UIFormProps<T, K>,\n): VNode {\n const { fields, labelField, name, label, required, tooltip } = props;\n // const { value, onChange, state } = useField<T, K>(name);\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n if (!props.handler && !fieldCtx) {\n throw Error(\"\");\n }\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const list = (value ?? []) as Array<Record<string, string | undefined>>;\n const [selectedIndex, setSelected] = useState<number | undefined>(undefined);\n const selected =\n selectedIndex === undefined ? undefined : list[selectedIndex];\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n\n <div class=\"-space-y-px rounded-md bg-white \">\n {list.map((v, idx) => {\n return (\n <Option\n label={v[labelField] as TranslatedString}\n key={idx}\n isSelected={selectedIndex === idx}\n isLast={idx === list.length - 1}\n disabled={selectedIndex !== undefined && selectedIndex !== idx}\n isFirst={idx === 0}\n onClick={() => {\n setSelected(selectedIndex === idx ? undefined : idx);\n }}\n />\n );\n })}\n {!state.disabled && (\n <div class=\"pt-2\">\n <Option\n label={\"Add...\" as TranslatedString}\n isSelected={selectedIndex === list.length}\n isLast\n isFirst\n disabled={\n selectedIndex !== undefined && selectedIndex !== list.length\n }\n onClick={() => {\n setSelected(\n selectedIndex === list.length ? undefined : list.length,\n );\n }}\n />\n </div>\n )}\n </div>\n {selectedIndex !== undefined && (\n /**\n * This form provider act as a substate of the parent form\n * Consider creating an InnerFormProvider since not every feature is expected\n */\n <FormProvider\n initial={selected}\n readOnly={state.disabled}\n computeFormState={(v) => {\n // current state is ignored\n // the state is defined by the parent form\n\n // elements should be present in the state object since this is expected to be an array\n //@ts-ignore\n // return state.elements[selectedIndex];\n return {}\n }}\n onSubmit={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as any);\n setSelected(undefined);\n }}\n onUpdate={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as any);\n }}\n >\n <div class=\"px-4 py-6\">\n <div class=\"grid grid-cols-1 gap-y-8 \">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n </div>\n </FormProvider>\n )}\n {selectedIndex !== undefined && (\n <div class=\"flex items-center pt-3\">\n <div class=\"flex-auto\">\n {selected !== undefined && (\n <button\n type=\"button\"\n onClick={() => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1);\n onChange(newValue as any);\n setSelected(undefined);\n }}\n class=\"block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n Remove\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n", "import {\n AbsoluteTime,\n AmountJson,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, VNode, createContext, h } from \"preact\";\nimport { MutableRef, useState } from \"preact/hooks\";\n\nexport interface FormType<T extends object> {\n value: MutableRef<Partial<T>>;\n initial?: Partial<T>;\n readOnly?: boolean;\n onUpdate?: (v: Partial<T>) => void;\n computeFormState?: (v: Partial<T>) => FormState<T>;\n}\n\nexport const FormContext = createContext<FormType<any>| undefined>(undefined);\n\n/**\n * Map of {[field]:FieldUIOptions}\n * for every field of type\n * - any native (string, number, etc...)\n * - absoluteTime\n * - amountJson\n *\n * except for:\n * - object => recurse into\n * - array => behavior result and element field\n */\nexport type FormState<T extends object | undefined> = {\n [field in keyof T]?: T[field] extends AbsoluteTime\n ? FieldUIOptions\n : T[field] extends AmountJson\n ? FieldUIOptions\n : T[field] extends Array<infer P extends object>\n ? InputArrayFieldState<P>\n : T[field] extends object | undefined\n ? FormState<T[field]>\n : FieldUIOptions;\n};\n\n/**\n * Properties that can be defined by design or by computing state\n */\nexport type FieldUIOptions = {\n /* instruction to be shown in the field */\n placeholder?: TranslatedString;\n /* long text help to be shown on demand */\n tooltip?: TranslatedString;\n /* short text to be shown next to the field*/\n\n help?: TranslatedString;\n /* should show as disabled and readonly */\n disabled?: boolean;\n /* should not show */\n hidden?: boolean;\n\n /* show a mark as required*/\n required?: boolean;\n};\n\n/**\n * properties only to be defined on design time\n */\nexport interface UIFormProps<T extends object, K extends keyof T>\n extends FieldUIOptions {\n // property name of the object\n name: K;\n\n // label if the field\n label: TranslatedString;\n before?: Addon;\n after?: Addon;\n\n // converter to string and back\n converter?: StringConverter<T[K]>;\n\n handler?: UIFieldHandler;\n}\n\nexport type UIFieldHandler = {\n value: string | undefined;\n onChange: (s: string) => void;\n state: FieldUIOptions;\n error?: TranslatedString;\n};\n\nexport interface IconAddon {\n type: \"icon\";\n icon: VNode;\n}\nexport interface ButtonAddon {\n type: \"button\";\n onClick: () => void;\n children: ComponentChildren;\n}\nexport interface TextAddon {\n type: \"text\";\n text: TranslatedString;\n}\nexport type Addon = IconAddon | ButtonAddon | TextAddon;\n\nexport interface StringConverter<T> {\n toStringUI: (v?: T) => string;\n fromStringUI: (v?: string) => T;\n}\n\nexport interface InputArrayFieldState<P extends object> extends FieldUIOptions {\n elements?: FormState<P>[];\n}\n\nexport type FormProviderProps<T extends object> = Omit<FormType<T>, \"value\"> & {\n onSubmit?: (v: Partial<T>, s: FormState<T> | undefined) => void;\n children?: ComponentChildren;\n};\n\nexport function FormProvider<T extends object>({\n children,\n initial,\n onUpdate: notify,\n onSubmit,\n computeFormState,\n readOnly,\n}: FormProviderProps<T>): VNode {\n const [state, setState] = useState<Partial<T>>(initial ?? {});\n const value = { current: state };\n const onUpdate = (v: typeof state) => {\n setState(v);\n if (notify) notify(v);\n };\n return (\n <FormContext.Provider\n value={{ initial, value, onUpdate, computeFormState, readOnly }}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n //@ts-ignore\n if (onSubmit)\n onSubmit(\n value.current,\n !computeFormState ? undefined : computeFormState(value.current),\n );\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n", "import { h as create, Fragment, VNode } from \"preact\";\nimport { Caption } from \"./Caption.js\";\nimport { Group } from \"./Group.js\";\nimport { InputAbsoluteTime } from \"./InputAbsoluteTime.js\";\nimport { InputAmount } from \"./InputAmount.js\";\nimport { InputArray } from \"./InputArray.js\";\nimport { InputChoiceHorizontal } from \"./InputChoiceHorizontal.js\";\nimport { InputChoiceStacked } from \"./InputChoiceStacked.js\";\nimport { InputFile } from \"./InputFile.js\";\nimport { InputInteger } from \"./InputInteger.js\";\nimport { InputSelectMultiple } from \"./InputSelectMultiple.js\";\nimport { InputSelectOne } from \"./InputSelectOne.js\";\nimport { InputText } from \"./InputText.js\";\nimport { InputTextArea } from \"./InputTextArea.js\";\nimport { InputToggle } from \"./InputToggle.js\";\nimport { Addon, StringConverter, UIFieldHandler } from \"./FormProvider.js\";\nimport { InternationalizationAPI, UIFieldBaseDescription } from \"../index.browser.js\";\nimport { assertUnreachable, TranslatedString } from \"@gnu-taler/taler-util\";\nimport {UIFormFieldBaseConfig, UIFormFieldConfig} from \"./ui-form.js\";\n/**\n * Constrain the type with the ui props\n */\ntype FieldType<T extends object = any, K extends keyof T = any> = {\n group: Parameters<typeof Group>[0];\n caption: Parameters<typeof Caption>[0];\n array: Parameters<typeof InputArray<T, K>>[0];\n file: Parameters<typeof InputFile<T, K>>[0];\n selectOne: Parameters<typeof InputSelectOne<T, K>>[0];\n selectMultiple: Parameters<typeof InputSelectMultiple<T, K>>[0];\n text: Parameters<typeof InputText<T, K>>[0];\n textArea: Parameters<typeof InputTextArea<T, K>>[0];\n choiceStacked: Parameters<typeof InputChoiceStacked<T, K>>[0];\n choiceHorizontal: Parameters<typeof InputChoiceHorizontal<T, K>>[0];\n absoluteTime: Parameters<typeof InputAbsoluteTime<T, K>>[0];\n integer: Parameters<typeof InputInteger<T, K>>[0];\n toggle: Parameters<typeof InputToggle<T, K>>[0];\n amount: Parameters<typeof InputAmount<T, K>>[0];\n};\n\n/**\n * List all the form fields so typescript can type-check the form instance\n */\nexport type UIFormField =\n | { type: \"group\"; properties: FieldType[\"group\"] }\n | { type: \"caption\"; properties: FieldType[\"caption\"] }\n | { type: \"array\"; properties: FieldType[\"array\"] }\n | { type: \"file\"; properties: FieldType[\"file\"] }\n | { type: \"amount\"; properties: FieldType[\"amount\"] }\n | { type: \"selectOne\"; properties: FieldType[\"selectOne\"] }\n | {\n type: \"selectMultiple\";\n properties: FieldType[\"selectMultiple\"];\n }\n | { type: \"text\"; properties: FieldType[\"text\"] }\n | { type: \"textArea\"; properties: FieldType[\"textArea\"] }\n | {\n type: \"choiceStacked\";\n properties: FieldType[\"choiceStacked\"];\n }\n | {\n type: \"choiceHorizontal\";\n properties: FieldType[\"choiceHorizontal\"];\n }\n | { type: \"integer\"; properties: FieldType[\"integer\"] }\n | { type: \"toggle\"; properties: FieldType[\"toggle\"] }\n | {\n type: \"absoluteTime\";\n properties: FieldType[\"absoluteTime\"];\n };\n\ntype FieldComponentFunction<key extends keyof FieldType> = (\n props: FieldType[key],\n) => VNode;\n\ntype UIFormFieldMap = {\n [key in keyof FieldType]: FieldComponentFunction<key>;\n};\n\n/**\n * Maps input type with component implementation\n */\nconst UIFormConfiguration: UIFormFieldMap = {\n group: Group,\n caption: Caption,\n //@ts-ignore\n array: InputArray,\n text: InputText,\n //@ts-ignore\n file: InputFile,\n textArea: InputTextArea,\n //@ts-ignore\n absoluteTime: InputAbsoluteTime,\n //@ts-ignore\n choiceStacked: InputChoiceStacked,\n //@ts-ignore\n choiceHorizontal: InputChoiceHorizontal,\n integer: InputInteger,\n //@ts-ignore\n selectOne: InputSelectOne,\n //@ts-ignore\n selectMultiple: InputSelectMultiple,\n //@ts-ignore\n toggle: InputToggle,\n //@ts-ignore\n amount: InputAmount,\n};\n\nexport function RenderAllFieldsByUiConfig({\n fields,\n}: {\n fields: UIFormField[];\n}): VNode {\n return create(\n Fragment,\n {},\n fields.map((field, i) => {\n const Component = UIFormConfiguration[\n field.type\n ] as FieldComponentFunction<any>;\n return Component(field.properties);\n }),\n );\n}\n\n// type FormSet<T extends object> = {\n// Provider: typeof FormProvider<T>;\n// InputLine: <K extends keyof T>() => typeof InputLine<T, K>;\n// InputChoiceHorizontal: <K extends keyof T>() => typeof InputChoiceHorizontal<T, K>;\n// };\n\n/**\n * Helper function that created a typed object.\n *\n * @returns\n */\n// export function createNewForm<T extends object>() {\n// const res: FormSet<T> = {\n// Provider: FormProvider,\n// InputLine: () => InputLine,\n// InputChoiceHorizontal: () => InputChoiceHorizontal,\n// };\n// return {\n// Provider: res.Provider,\n// InputLine: res.InputLine(),\n// InputChoiceHorizontal: res.InputChoiceHorizontal(),\n// };\n// }\n\n/**\n * convert field configuration to render function\n * \n * @param i18n_ \n * @param fieldConfig \n * @param form \n * @returns \n */\nexport function convertUiField(\n i18n_: InternationalizationAPI,\n fieldConfig: UIFormFieldConfig[],\n form: object,\n getConverterById: GetConverterById,\n): UIFormField[] {\n return fieldConfig.map((config) => {\n // NON input fields\n switch (config.type) {\n case \"caption\": {\n const resp: UIFormField = {\n type: config.type,\n properties: converBaseFieldsProps(i18n_, config.properties),\n };\n return resp;\n }\n case \"group\": {\n const resp: UIFormField = {\n type: config.type,\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n fields: convertUiField(i18n_, config.properties.fields, form, getConverterById),\n },\n };\n return resp;\n }\n }\n // Input Fields\n switch (config.type) {\n case \"array\": {\n return {\n type: \"array\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n labelField: config.properties.labelFieldId,\n fields: convertUiField(i18n_, config.properties.fields, form, getConverterById),\n },\n } as UIFormField;\n }\n case \"absoluteTime\": {\n return {\n type: \"absoluteTime\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"amount\": {\n return {\n type: \"amount\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById), \n },\n } as UIFormField;\n }\n case \"choiceHorizontal\": {\n return {\n type: \"choiceHorizontal\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"choiceStacked\": {\n return {\n type: \"choiceStacked\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n \n },\n }as UIFormField;\n }\n case \"file\":{\n return {\n type: \"file\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n accept: config.properties.accept,\n maxBites: config.properties.maxBytes,\n },\n } as UIFormField;\n }\n case \"integer\":{\n return {\n type: \"integer\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"selectMultiple\":{\n return {\n type: \"selectMultiple\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"selectOne\": {\n return {\n type: \"selectOne\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"text\": {\n return {\n type: \"text\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"textArea\": {\n return {\n type: \"text\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"toggle\": {\n return {\n type: \"toggle\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n default: {\n assertUnreachable(config);\n }\n }\n });\n}\n\n\n\nfunction getAddonById(_id: string | undefined): Addon {\n return undefined!;\n}\n\n\ntype GetConverterById = (\n id: string | undefined,\n config: unknown,\n) => StringConverter<unknown>;\n\n\nfunction converInputFieldsProps(\n form: object,\n p: UIFormFieldBaseConfig,\n getConverterById: GetConverterById,\n) {\n return {\n converter: getConverterById(p.converterId, p),\n handler: getValueDeeper2(form, p.id.split(\".\")),\n name: p.name,\n required: p.required,\n disabled: p.disabled,\n help: p.help,\n placeholder: p.placeholder,\n tooltip: p.tooltip,\n label: p.label as TranslatedString,\n };\n}\n\nfunction converBaseFieldsProps(\n i18n_: InternationalizationAPI,\n p: UIFieldBaseDescription,\n) {\n return {\n after: getAddonById(p.addonAfterId),\n before: getAddonById(p.addonBeforeId),\n hidden: p.hidden,\n name: p.name,\n help: i18n_.str`${p.help}`,\n label: i18n_.str`${p.label}`,\n tooltip: i18n_.str`${p.tooltip}`,\n };\n}\n\nfunction getValueDeeper2(\n object: Record<string, any>,\n names: string[],\n): UIFieldHandler {\n if (names.length === 0) return object as UIFieldHandler;\n const [head, ...rest] = names;\n if (!head) {\n return getValueDeeper2(object, rest);\n }\n if (object === undefined) {\n throw Error(\"handler not found\");\n }\n return getValueDeeper2(object[head], rest);\n}\n\n\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired, RenderAddon } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField, convertUiField } from \"./forms.js\";\nimport { Addon, FormProvider } from \"./FormProvider.js\";\nimport { useField } from \"./useField.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\nimport { getConverterById } from \"./converter.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: Addon;\n after?: Addon;\n fields: UIFormField[];\n}\n\nexport function Group({\n before,\n after,\n label,\n tooltip,\n help,\n fields,\n}: Props): VNode {\n return (\n <div class=\"sm:col-span-6 p-4 rounded-lg border-r-2 border-2 bg-gray-50\">\n {before !== undefined && <RenderAddon addon={before} />}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && <RenderAddon addon={after} />}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-2 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig \n fields={fields}\n />\n </div>\n </div>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport { format, parse } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Calendar } from \"./Calendar.js\";\nimport { Dialog } from \"./Dialog.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputAbsoluteTime<T extends object, K extends keyof T>(\n properties: { pattern?: string } & UIFormProps<T, K>,\n): VNode {\n const pattern = properties.pattern ?? \"dd/MM/yyyy\";\n const [open, setOpen] = useState(false);\n\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(properties.name);\n const { value, onChange } =\n properties.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(properties.name);\n return (\n <Fragment>\n <InputLine<T, K>\n type=\"text\"\n after={{\n type: \"button\",\n onClick: () => {\n setOpen(true);\n },\n // icon: <CalendarIcon class=\"h-6 w-6\" />,\n children: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\"\n />\n </svg>\n ),\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AbsoluteTime | undefined => {\n if (!v) return undefined;\n try {\n const t_ms = parse(v, pattern, Date.now()).getTime();\n return AbsoluteTime.fromMilliseconds(t_ms);\n } catch (e) {\n return undefined;\n }\n },\n //@ts-ignore\n toStringUI: (v: AbsoluteTime | undefined) => {\n return !v || !v.t_ms\n ? undefined\n : v.t_ms === \"never\"\n ? \"never\"\n : format(v.t_ms, pattern);\n },\n }}\n {...properties}\n />\n {open && (\n <Dialog onClose={() => setOpen(false)}>\n <Calendar\n value={(value as AbsoluteTime) ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any);\n setOpen(false);\n }}\n />\n </Dialog>\n )}\n {/* {open &&\n <Dialog onClose={() => setOpen(false)} >\n <TimePicker value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n }}\n onConfirm={() => {\n setOpen(false)\n }} />\n </Dialog>} */}\n </Fragment>\n );\n}\n", "import { ComponentChildren, VNode, h } from \"preact\";\n\nexport function Dialog({ children, onClose }: { onClose?: () => void; children: ComponentChildren }): VNode {\n return <div class=\"relative z-10\" aria-labelledby=\"modal-title\" role=\"dialog\" aria-modal=\"true\" onClick={onClose}>\n <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n <div class=\"flex min-h-full items-center justify-center p-4 text-center \">\n <div class=\"relative transform overflow-hidden rounded-lg bg-white p-1 text-left shadow-xl transition-all\" onClick={(e) => e.stopPropagation()}>\n {children}\n </div>\n </div>\n </div>\n </div>\n}\n", "import { useContext } from \"preact/compat\";\nimport { FieldUIOptions, FormContext } from \"./FormProvider.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n\nexport interface InputFieldHandler<Type> {\n value: Type;\n onChange: (s: Type) => void;\n state: FieldUIOptions;\n error?: TranslatedString | undefined;\n}\n\n/**\n * @depreacted removing this so we don't depend on context to create a form\n * @param name \n * @returns \n */\nexport function useField<T extends object, K extends keyof T>(\n name: K,\n): InputFieldHandler<T[K]> | undefined {\n const ctx = useContext(FormContext);\n if (!ctx) {\n //no context, can't be used\n return undefined;\n }\n const {\n value: formValue,\n computeFormState,\n onUpdate: notifyUpdate,\n readOnly: readOnlyForm,\n } = ctx\n\n type P = typeof name;\n type V = T[P];\n const formState = computeFormState ? computeFormState(formValue.current) : {};\n\n const fieldValue = readField(formValue.current, String(name)) as V;\n\n const fieldState =\n readField<Partial<FieldUIOptions>>(formState, String(name)) ?? {};\n\n //compute default state\n const state = {\n disabled: readOnlyForm ? true : (fieldState.disabled ?? false),\n hidden: fieldState.hidden ?? false,\n help: fieldState.help,\n elements: \"elements\" in fieldState ? fieldState.elements ?? [] : [],\n };\n\n function onChange(value: V): void {\n // setCurrentValue(value);\n formValue.current = setValueDeeper(\n formValue.current,\n String(name).split(\".\"),\n value,\n );\n if (notifyUpdate) {\n notifyUpdate(formValue.current);\n }\n }\n\n return {\n value: fieldValue,\n onChange,\n state,\n };\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 */\nfunction readField<T>(\n object: any,\n name: string,\n): T | undefined {\n return name.split(\".\").reduce((prev, current) => {\n return prev ? prev[current] : undefined;\n }, object);\n}\n\nfunction setValueDeeper(object: any, names: string[], value: any): any {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n if (object === undefined) {\n return { [head]: setValueDeeper({}, rest, value) };\n }\n return { ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) };\n}\n", "import { AmountJson, Amounts, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputAmount<T extends object, K extends keyof T>(\n props: { currency?: string } & UIFormProps<T, K>,\n): VNode {\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n const currency =\n !value || !(value as any).currency\n ? props.currency\n : (value as any).currency;\n return (\n <InputLine<T, K>\n type=\"text\"\n before={{\n type: \"text\",\n text: currency as TranslatedString,\n }}\n //@ts-ignore \n converter={ props.converter ?? {\n\n fromStringUI: (v): AmountJson => {\n return (\n Amounts.parse(`${currency}:${v}`) ??\n Amounts.zeroOfCurrency(currency)\n );\n },\n toStringUI: (v: AmountJson) => {\n return v === undefined ? \"\" : Amounts.stringifyValue(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport interface ChoiceH<V> {\n label: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceHorizontal<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceH<string>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { choices, label, tooltip, help, required, converter } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"isolate inline-flex rounded-md shadow-sm\">\n {choices.map((choice, idx) => {\n const isFirst = idx === 0;\n const isLast = idx === choices.length - 1;\n let clazz =\n \"relative inline-flex items-center px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 focus:z-10\";\n if (converter?.fromStringUI(choice.value as any) === value) {\n clazz +=\n \" text-white bg-indigo-600 hover:bg-indigo-500 ring-2 ring-indigo-600 hover:ring-indigo-500\";\n } else {\n clazz += \" hover:bg-gray-100 border-gray-300\";\n }\n if (isFirst) {\n clazz += \" rounded-l-md\";\n } else {\n clazz += \" -ml-px\";\n }\n if (isLast) {\n clazz += \" rounded-r-md\";\n }\n return (\n <button\n type=\"button\"\n key={idx}\n disabled={state.disabled}\n label={choice.label}\n class={clazz}\n onClick={(e) => {\n onChange(\n (value === choice.value ? undefined : converter?.fromStringUI(choice.value as any)) as any,\n );\n }}\n >\n {choice.label}\n </button>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport interface ChoiceS<V> {\n label: TranslatedString;\n description?: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceStacked<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"space-y-4\">\n {choices.map((choice, idx) => {\n // const currentValue = !converter\n // ? choice.value\n // : converter.fromStringUI(choice.value) ?? \"\";\n\n let clazz =\n \"border relative block cursor-pointer rounded-lg bg-white px-6 py-4 shadow-sm focus:outline-none sm:flex sm:justify-between\";\n if (choice.value === value) {\n clazz +=\n \" border-transparent border-indigo-600 ring-2 ring-indigo-600\";\n } else {\n clazz += \" border-gray-300\";\n }\n\n return (\n <label key={idx} class={clazz}>\n <input\n type=\"radio\"\n name=\"server-size\"\n // defaultValue={choice.value}\n disabled={state.disabled}\n value={\n (!converter\n ? (choice.value as string)\n : converter?.toStringUI(choice.value)) ?? \"\"\n }\n onClick={(e) => {\n onChange(\n (value === choice.value\n ? undefined\n : choice.value) as any,\n );\n }}\n class=\"sr-only\"\n aria-labelledby=\"server-size-0-label\"\n aria-describedby=\"server-size-0-description-0 server-size-0-description-1\"\n />\n <span class=\"flex items-center\">\n <span class=\"flex flex-col text-sm\">\n <span\n id=\"server-size-0-label\"\n class=\"font-medium text-gray-900\"\n >\n {choice.label}\n </span>\n {choice.description !== undefined && (\n <span\n id=\"server-size-0-description-0\"\n class=\"text-gray-500\"\n >\n <span class=\"block sm:inline\">\n {choice.description}\n </span>\n </span>\n )}\n </span>\n </span>\n </label>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputFile<T extends object, K extends keyof T>(\n props: { maxBites: number; accept?: string } & UIFormProps<T, K>,\n): VNode {\n const {\n label,\n tooltip,\n required,\n help: propsHelp,\n maxBites,\n accept,\n } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const help = propsHelp ?? state.help;\n if (state.hidden) {\n return <div />;\n }\n\n const valueStr = !value ? \"\" : value.toString();\n const firstColon = valueStr.indexOf(\";\");\n\n const { fileName, dataUri } = valueStr.startsWith(\"file:\")\n ? {\n fileName: valueStr.substring(5, firstColon),\n dataUri: valueStr.substring(firstColon + 1),\n }\n : {\n fileName: \"\",\n dataUri: valueStr,\n };\n\n return (\n <div class=\"col-span-full\">\n <LabelWithTooltipMaybeRequired\n label={label}\n tooltip={tooltip}\n required={required}\n />\n {!dataUri ? (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 py-1\">\n <div class=\"text-center\">\n <svg\n class=\"mx-auto h-12 w-12 text-gray-300\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.5 6a2.25 2.25 0 012.25-2.25h16.5A2.25 2.25 0 0122.5 6v12a2.25 2.25 0 01-2.25 2.25H3.75A2.25 2.25 0 011.5 18V6zM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0021 18v-1.94l-2.69-2.689a1.5 1.5 0 00-2.12 0l-.88.879.97.97a.75.75 0 11-1.06 1.06l-5.16-5.159a1.5 1.5 0 00-2.12 0L3 16.061zm10.125-7.81a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n {!state.disabled && (\n <div class=\"my-2 flex text-sm leading-6 text-gray-600\">\n <label\n for={String(props.name)}\n class=\"relative cursor-pointer rounded-md bg-white font-semibold text-indigo-600 focus-within:outline-none focus-within:ring-2 focus-within:ring-indigo-600 focus-within:ring-offset-2 hover:text-indigo-500\"\n >\n <span>Upload a file</span>\n <input\n id={String(props.name)}\n type=\"file\"\n class=\"sr-only\"\n accept={accept}\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 > maxBites) {\n return onChange(undefined!);\n }\n const fileName = f[0].name;\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 if (fileName) {\n return onChange(\n `file:${fileName};data:${f[0].type};base64,${b64}` as any,\n );\n } else {\n return onChange(\n `data:${f[0].type};base64,${b64}` as any,\n );\n }\n });\n }}\n />\n </label>\n {/* <p class=\"pl-1\">or drag and drop</p> */}\n </div>\n )}\n </div>\n </div>\n ) : (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 relative\">\n {(dataUri as string).startsWith(\"data:image/\") ? (\n <img src={dataUri} class=\" h-24 w-full object-cover relative\" />\n ) : (\n <div />\n )}\n {fileName ? (\n <div class=\"absolute rounded-lg border flex justify-center text-xl items-center text-white \">\n {fileName}\n </div>\n ) : (\n <Fragment />\n )}\n\n {!state.disabled && (\n <div\n class=\"opacity-0 hover:opacity-70 duration-300 absolute rounded-lg border inset-0 z-10 flex justify-center text-xl items-center bg-black text-white cursor-pointer \"\n onClick={() => {\n onChange(undefined!);\n }}\n >\n Clear\n </div>\n )}\n </div>\n )}\n {help && <p class=\"text-xs leading-5 text-gray-600 mt-2\">{help}</p>}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputInteger<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return (\n <InputLine\n type=\"number\"\n converter={{\n //@ts-ignore\n fromStringUI: (v): number => {\n return !v ? 0 : Number.parseInt(v, 10);\n },\n //@ts-ignore\n toStringUI: (v?: number): string => {\n return v === undefined ? \"\" : String(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectMultiple<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n unique?: boolean;\n max?: number;\n } & UIFormProps<T, K>,\n): VNode {\n const { converter, label, choices, placeholder, tooltip, required, unique, max } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce(\n (prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n },\n {} as Record<string, string>,\n );\n\n const list = (value ?? []) as string[];\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {list.map((v, idx) => {\n return (\n <span\n key={idx}\n class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 text-xs font-medium text-gray-600\"\n >\n {choiceMap[v]}\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n const newValue = [...list];\n newValue.splice(idx, 1);\n onChange(newValue as any);\n setFilter(undefined);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n );\n })}\n\n {!state.disabled && (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n key={idx}\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n if (unique && list.indexOf(v.value as string) !== -1) {\n return;\n }\n if (max !== undefined && list.length >= max) {\n return;\n }\n const newValue = [...list];\n newValue.splice(0, 0, v.value as string);\n onChange(newValue as any);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputSelectOne<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { label, choices, placeholder, tooltip, required } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce(\n (prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n },\n {} as Record<string, string>,\n );\n\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {value ? (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 font-medium text-gray-600\">\n {choiceMap[value as string]}\n <button\n type=\"button\"\n onClick={() => {\n onChange(undefined!);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n ) : (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n key={idx}\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n onChange(v.value as any);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\n\nexport function InputText<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputTextArea<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text-area\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputToggle<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const isOn = !!value;\n return (\n <div class=\"sm:col-span-6\">\n <div class=\"flex items-center justify-between\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <button\n type=\"button\"\n data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n onChange(!isOn as any);\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={isOn}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { FormProvider, FormProviderProps, FormState } from \"./FormProvider.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n// import { FlexibleForm } from \"./ui-form.js\";\n\n/**\n * Flexible form uses a DoubleColumForm for design\n * and may have a dynamic properties defined by \n * behavior function.\n */\nexport interface FlexibleForm_Deprecated<T extends object> {\n design: DoubleColumnForm_Deprecated;\n behavior?: (form: Partial<T>) => FormState<T>;\n}\n\n/**\n * Double column form\n * \n * Form with sections, every sections have a title and may\n * have a description.\n * Every sections contain a set of fields.\n */\nexport type DoubleColumnForm_Deprecated = Array<DoubleColumnFormSection_Deprecated | undefined>;\n\nexport type DoubleColumnFormSection_Deprecated = {\n title: TranslatedString;\n description?: TranslatedString;\n fields: UIFormField[];\n};\n\n/**\n * Form Provider implementation that use FlexibleForm\n * to defined behavior and fields.\n */\nexport function DefaultForm<T extends object>({\n initial,\n onUpdate,\n form,\n onSubmit,\n children,\n readOnly,\n}: Omit<FormProviderProps<T>, \"computeFormState\"> & { form: FlexibleForm_Deprecated<T> }): VNode {\n return (\n <FormProvider\n initial={initial}\n onUpdate={onUpdate}\n onSubmit={onSubmit}\n readOnly={readOnly}\n // computeFormState={form.behavior}\n >\n <div class=\"space-y-10 divide-y -mt-5 divide-gray-900/10\">\n {form.design.map((section, i) => {\n if (!section) return <Fragment />;\n return (\n <div key={i} class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n {section.title}\n </h2>\n {section.description && (\n <p class=\"mt-1 text-sm leading-6 text-gray-600\">\n {section.description}\n </p>\n )}\n </div>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2\">\n <div class=\"p-3\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig\n key={i}\n fields={section.fields}\n />\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {children}\n </FormProvider>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { getHours, getMinutes, getSeconds, setHours } from \"date-fns\"\nimport { Fragment, VNode, h } from \"preact\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function TimePicker({ value, onChange, onConfirm }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void, onConfirm: () => void }): VNode {\n const date = !value ? new Date() : new Date(AbsoluteTime.toStampMs(value))\n const hours = getHours(date) % 12\n const minutes = getMinutes(date)\n const seconds = getSeconds(date)\n\n const { i18n } = useTranslationContext()\n\n return <Fragment>\n <div class=\"flex flex-col bg-white rounded-t-sm justify-around\" >\n {/* time selection */}\n <div id=\"\" class=\"bg-[#3b71ca] dark:bg-zinc-700 h-24 rounded-t-lg p-12 flex flex-row items-center justify-center\">\n <div class=\"flex w-full justify-evenly\">\n <div class=\"\">\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \"\n style=\"pointer-events: none;\">\n {new String(hours).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(minutes).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(seconds).padStart(2, \"0\")}\n </button>\n </span>\n </div>\n <div class=\"flex flex-col justify-center text-[18px] text-[#ffffff8a] \">\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n AM\n </button>\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n PM\n </button>\n </div>\n </div>\n </div>\n {/* clock */}\n <div id=\"\" class=\"mt-2 min-w-[310px] max-w-[325px] min-h-[305px] overflow-x-hidden h-full flex justify-center mx-auto flex-col items-center dark:bg-zinc-500\" >\n <div class=\"relative rounded-[100%] w-[260px] h-[260px] cursor-default my-0 mx-auto bg-[#00000012] dark:bg-zinc-600/50 animate-[show-up-clock_350ms_linear]\" >\n\n <span class=\"top-1/2 left-1/2 w-[6px] h-[6px] -translate-y-1/2 -translate-x-1/2 rounded-[50%] bg-[#3b71ca] absolute\" ></span>\n <div class=\"bg-[#3b71ca] bottom-1/2 h-2/5 left-[calc(50%-1px)] rtl:!left-auto origin-[center_bottom_0] rtl:!origin-[50%_50%_0] w-[2px] absolute\" style={{ transform: \"rotateZ(60deg)\", height: \"calc(35% + 1px)\" }}>\n {/* <div class=\"-top-[21px] -left-[15px] w-[4px] border-[14px] border-solid border-[#3b71ca] h-[4px] box-content rounded-[100%] absolute\" style=\"background-color: rgb(25, 118, 210);\"></div> */}\n </div>\n\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 12).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 224px;\">\n <span>0</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 1).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 209.263px;\">\n <span >1</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 2).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" data-selected={true} style=\"left: 209.263px; bottom: 169px;\" >\n <span >2</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 3).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 224px; bottom: 114px;\">\n <span >3</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 4).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 209.263px; bottom: 59px;\">\n <span >4</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 5).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 18.7372px;\">\n <span >5</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 6).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 4px;\">\n <span >6</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 7).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 18.7372px;\">\n <span >7</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 8).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 59px;\">\n <span >8</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 9).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 4px; bottom: 114px;\">\n <span >9</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 10).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 169px;\">\n <span >10</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 11).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 209.263px;\">\n <span >11</span>\n </span>\n </div>\n </div>\n </div>\n <div id=\"\" class=\"rounded-b-lg flex justify-between items-center w-full h-[56px] px-[12px] bg-white dark:bg-zinc-500\">\n <div class=\"w-full flex justify-end\">\n <button\n type=\"submit\"\n onClick={onConfirm}\n class=\"rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </div>\n </Fragment>\n}\n", "import {\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForBoolean,\n codecForConstString,\n codecForLazy,\n codecForList,\n codecForNumber,\n codecForString,\n codecForTimestamp,\n codecOptional,\n Integer,\n TalerProtocolTimestamp,\n} from \"@gnu-taler/taler-util\";\n\nexport type FlexibleForm = DoubleColumnForm;\n\nexport interface DoubleColumnForm {\n type: \"double-column\";\n design: Array<DoubleColumnFormSection>;\n // behavior?: (form: Partial<T>) => FormState<T>;\n}\n\nexport type DoubleColumnFormSection = {\n title: string;\n description?: string;\n fields: UIFormFieldConfig[];\n};\n\n// export interface BaseForm {\n// state: TalerExchangeApi.AmlState;\n// threshold: AmountJson;\n// }\n\nexport type UIFormFieldConfig =\n | UIFormFieldConfigAbsoluteTime\n | UIFormFieldConfigAmount\n | UIFormFieldConfigArray\n | UIFormFieldConfigCaption\n | UIFormFieldConfigChoiseHorizontal\n | UIFormFieldConfigChoiseStacked\n | UIFormFieldConfigFile\n | UIFormFieldConfigGroup\n | UIFormFieldConfigInteger\n | UIFormFieldConfigSelectMultiple\n | UIFormFieldConfigSelectOne\n | UIFormFieldConfigText\n | UIFormFieldConfigTextArea\n | UIFormFieldConfigToggle;\n\ntype UIFormFieldConfigAbsoluteTime = {\n type: \"absoluteTime\";\n properties: UIFormFieldBaseConfig & {\n max?: TalerProtocolTimestamp;\n min?: TalerProtocolTimestamp;\n pattern: string;\n };\n};\n\ntype UIFormFieldConfigAmount = {\n type: \"amount\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n currency: string;\n };\n};\n\ntype UIFormFieldConfigArray = {\n type: \"array\";\n properties: UIFormFieldBaseConfig & {\n // id of the field shown when the array is collapsed\n labelFieldId: UIHandlerId;\n fields: UIFormFieldConfig[];\n };\n};\n\ntype UIFormFieldConfigCaption = {\n type: \"caption\";\n properties: UIFieldBaseDescription;\n};\n\ntype UIFormFieldConfigGroup = {\n type: \"group\";\n properties: UIFieldBaseDescription & {\n fields: UIFormFieldConfig[];\n };\n};\n\ntype UIFormFieldConfigChoiseHorizontal = {\n type: \"choiceHorizontal\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\n\ntype UIFormFieldConfigChoiseStacked = {\n type: \"choiceStacked\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\n\ntype UIFormFieldConfigFile = {\n type: \"file\";\n properties: UIFormFieldBaseConfig & {\n maxBytes?: Integer;\n minBytes?: Integer;\n // comma-separated list of one or more file types\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept#unique_file_type_specifiers\n accept?: string;\n };\n};\ntype UIFormFieldConfigInteger = {\n type: \"integer\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n };\n};\n\ninterface SelectUiChoice {\n label: string;\n description?: string;\n value: string;\n}\n\ntype UIFormFieldConfigSelectMultiple = {\n type: \"selectMultiple\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n unique?: boolean;\n choices: Array<SelectUiChoice>;\n };\n};\ntype UIFormFieldConfigSelectOne = {\n type: \"selectOne\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\ntype UIFormFieldConfigText = {\n type: \"text\";\n properties: UIFormFieldBaseConfig;\n};\ntype UIFormFieldConfigTextArea = {\n type: \"textArea\";\n properties: UIFormFieldBaseConfig;\n};\ntype UIFormFieldConfigToggle = {\n type: \"toggle\";\n properties: UIFormFieldBaseConfig;\n};\n\nexport type UIFieldBaseDescription = {\n /* label if the field, visible for the user */\n label: string;\n /* long text to be shown on user demand */\n tooltip?: string;\n\n /* short text to be shown close to the field */\n help?: string;\n\n /* name of the field, useful for a11y */\n name: string;\n\n /* if the field should be initialy hidden */\n hidden?: boolean;\n /* ui element to show before */\n addonBeforeId?: string;\n /* ui element to show after */\n addonAfterId?: string;\n};\n\nexport type UIFormFieldBaseConfig = UIFieldBaseDescription & {\n /* example to be shown inside the field */\n placeholder?: string;\n\n /* show a mark as required */\n required?: boolean;\n\n /* readonly and dim */\n disabled?: boolean;\n\n /* conversion id to conver the string into the value type\n the id should be known to the ui impl\n */\n converterId?: string;\n\n /* property id of the form */\n id: UIHandlerId;\n};\n\ndeclare const __handlerId: unique symbol;\nexport type UIHandlerId = string & { [__handlerId]: true };\n\n// FIXME: validate well formed ui field id\nconst codecForUiFieldId = codecForString as () => Codec<UIHandlerId>;\n\nconst codecForUIFormFieldBaseDescriptionTemplate = <\n T extends UIFieldBaseDescription,\n>() =>\n buildCodecForObject<T>()\n .property(\"addonAfterId\", codecOptional(codecForString()))\n .property(\"addonBeforeId\", codecOptional(codecForString()))\n .property(\"hidden\", codecOptional(codecForBoolean()))\n .property(\"help\", codecOptional(codecForString()))\n .property(\"label\", codecForString())\n .property(\"name\", codecForString())\n .property(\"tooltip\", codecOptional(codecForString()));\n\nconst codecForUIFormFieldBaseConfigTemplate = <\n T extends UIFormFieldBaseConfig,\n>() =>\n codecForUIFormFieldBaseDescriptionTemplate<T>()\n .property(\"id\", codecForUiFieldId())\n .property(\"converterId\", codecOptional(codecForString()))\n .property(\"disabled\", codecOptional(codecForBoolean()))\n .property(\"required\", codecOptional(codecForBoolean()))\n .property(\"placeholder\", codecOptional(codecForString()));\n\nconst codecForUIFormFieldBaseConfig = (): Codec<UIFormFieldBaseConfig> =>\n codecForUIFormFieldBaseConfigTemplate().build(\"UIFieldToggleProperties\");\n\nconst codecForUIFormFieldAbsoluteTimeConfig = (): Codec<\n UIFormFieldConfigAbsoluteTime[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigAbsoluteTime[\"properties\"]\n >()\n .property(\"pattern\", codecForString())\n .property(\"max\", codecOptional(codecForTimestamp))\n .property(\"min\", codecOptional(codecForTimestamp))\n .build(\"UIFormFieldConfigAbsoluteTime.properties\");\n\nconst codecForUiFormFieldAbsoluteTime =\n (): Codec<UIFormFieldConfigAbsoluteTime> =>\n buildCodecForObject<UIFormFieldConfigAbsoluteTime>()\n .property(\"type\", codecForConstString(\"absoluteTime\"))\n .property(\"properties\", codecForUIFormFieldAbsoluteTimeConfig())\n .build(\"UIFormFieldConfigAbsoluteTime\");\n\nconst codecForUIFormFieldAmountConfig = (): Codec<\n UIFormFieldConfigAmount[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigAmount[\"properties\"]>()\n .property(\"currency\", codecForString())\n .property(\"max\", codecOptional(codecForNumber()))\n .property(\"min\", codecOptional(codecForNumber()))\n .build(\"UIFormFieldConfigAmount.properties\");\n\nconst codecForUiFormFieldAmount = (): Codec<UIFormFieldConfigAmount> =>\n buildCodecForObject<UIFormFieldConfigAmount>()\n .property(\"type\", codecForConstString(\"amount\"))\n .property(\"properties\", codecForUIFormFieldAmountConfig())\n .build(\"UIFormFieldConfigAmount\");\n\nconst codecForUIFormFieldArrayConfig = (): Codec<\n UIFormFieldConfigArray[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigArray[\"properties\"]>()\n .property(\"labelFieldId\", codecForUiFieldId())\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"UIFormFieldConfigArray.properties\");\n\nconst codecForUiFormFieldArray = (): Codec<UIFormFieldConfigArray> =>\n buildCodecForObject<UIFormFieldConfigArray>()\n .property(\"type\", codecForConstString(\"array\"))\n .property(\"properties\", codecForUIFormFieldArrayConfig())\n .build(\"UIFormFieldConfigArray\");\n\nconst codecForUiFormFieldCaption = (): Codec<UIFormFieldConfigCaption> =>\n buildCodecForObject<UIFormFieldConfigCaption>()\n .property(\"type\", codecForConstString(\"caption\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigCaption\");\n\nconst codecForUiFormSelectUiChoice = (): Codec<SelectUiChoice> =>\n buildCodecForObject<SelectUiChoice>()\n .property(\"description\", codecOptional(codecForString()))\n .property(\"label\", codecForString())\n .property(\"value\", codecForString())\n .build(\"SelectUiChoice\");\n\nconst codecForUIFormFieldWithChoiseConfig = (): Codec<\n UIFormFieldConfigChoiseHorizontal[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigChoiseHorizontal[\"properties\"]\n >()\n .property(\"choices\", codecForList(codecForUiFormSelectUiChoice()))\n .build(\"UIFormFieldConfigChoiseHorizontal.properties\");\n\nconst codecForUiFormFieldChoiceHorizontal =\n (): Codec<UIFormFieldConfigChoiseHorizontal> =>\n buildCodecForObject<UIFormFieldConfigChoiseHorizontal>()\n .property(\"type\", codecForConstString(\"choiceHorizontal\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigChoiseHorizontal\");\n\nconst codecForUiFormFieldChoiceStacked =\n (): Codec<UIFormFieldConfigChoiseStacked> =>\n buildCodecForObject<UIFormFieldConfigChoiseStacked>()\n .property(\"type\", codecForConstString(\"choiceStacked\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigChoiseStacked\");\n\nconst codecForUIFormFieldFileConfig = (): Codec<\n UIFormFieldConfigFile[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigFile[\"properties\"]>()\n .property(\"accept\", codecOptional(codecForString()))\n .property(\"maxBytes\", codecOptional(codecForNumber()))\n .property(\"minBytes\", codecOptional(codecForNumber()))\n .build(\"UIFormFieldConfigFile.properties\");\n\nconst codecForUiFormFieldFile = (): Codec<UIFormFieldConfigFile> =>\n buildCodecForObject<UIFormFieldConfigFile>()\n .property(\"type\", codecForConstString(\"file\"))\n .property(\"properties\", codecForUIFormFieldFileConfig())\n .build(\"UIFormFieldConfigFile\");\n\nconst codecForUIFormFieldWithFieldsConfig = (): Codec<\n UIFormFieldConfigGroup[\"properties\"]\n> =>\n codecForUIFormFieldBaseDescriptionTemplate<\n UIFormFieldConfigGroup[\"properties\"]\n >()\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"UIFormFieldConfigGroup.properties\");\n\nconst codecForUiFormFieldGroup = (): Codec<UIFormFieldConfigGroup> =>\n buildCodecForObject<UIFormFieldConfigGroup>()\n .property(\"type\", codecForConstString(\"group\"))\n .property(\"properties\", codecForUIFormFieldWithFieldsConfig())\n .build(\"UiFormFieldGroup\");\n\nconst codecForUiFormFieldInteger = (): Codec<UIFormFieldConfigInteger> =>\n buildCodecForObject<UIFormFieldConfigInteger>()\n .property(\"type\", codecForConstString(\"integer\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigInteger\");\n\nconst codecForUIFormFieldSelectMultipleConfig = (): Codec<\n UIFormFieldConfigSelectMultiple[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigSelectMultiple[\"properties\"]\n >()\n .property(\"max\", codecOptional(codecForNumber()))\n .property(\"min\", codecOptional(codecForNumber()))\n .property(\"unique\", codecOptional(codecForBoolean()))\n .property(\"choices\", codecForList(codecForUiFormSelectUiChoice()))\n .build(\"UIFormFieldConfigSelectMultiple.properties\");\n\nconst codecForUiFormFieldSelectMultiple =\n (): Codec<UIFormFieldConfigSelectMultiple> =>\n buildCodecForObject<UIFormFieldConfigSelectMultiple>()\n .property(\"type\", codecForConstString(\"selectMultiple\"))\n .property(\"properties\", codecForUIFormFieldSelectMultipleConfig())\n .build(\"UiFormFieldSelectMultiple\");\n\nconst codecForUiFormFieldSelectOne = (): Codec<UIFormFieldConfigSelectOne> =>\n buildCodecForObject<UIFormFieldConfigSelectOne>()\n .property(\"type\", codecForConstString(\"selectOne\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigSelectOne\");\n\nconst codecForUiFormFieldText = (): Codec<UIFormFieldConfigText> =>\n buildCodecForObject<UIFormFieldConfigText>()\n .property(\"type\", codecForConstString(\"text\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigText\");\n\nconst codecForUiFormFieldTextArea = (): Codec<UIFormFieldConfigTextArea> =>\n buildCodecForObject<UIFormFieldConfigTextArea>()\n .property(\"type\", codecForConstString(\"textArea\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigTextArea\");\n\nconst codecForUiFormFieldToggle = (): Codec<UIFormFieldConfigToggle> =>\n buildCodecForObject<UIFormFieldConfigToggle>()\n .property(\"type\", codecForConstString(\"toggle\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigToggle\");\n\nconst codecForUiFormField = (): Codec<UIFormFieldConfig> =>\n buildCodecForUnion<UIFormFieldConfig>()\n .discriminateOn(\"type\")\n .alternative(\"array\", codecForLazy(codecForUiFormFieldArray))\n .alternative(\"group\", codecForLazy(codecForUiFormFieldGroup))\n .alternative(\"absoluteTime\", codecForUiFormFieldAbsoluteTime())\n .alternative(\"amount\", codecForUiFormFieldAmount())\n .alternative(\"caption\", codecForUiFormFieldCaption())\n .alternative(\"choiceHorizontal\", codecForUiFormFieldChoiceHorizontal())\n .alternative(\"choiceStacked\", codecForUiFormFieldChoiceStacked())\n .alternative(\"file\", codecForUiFormFieldFile())\n .alternative(\"integer\", codecForUiFormFieldInteger())\n .alternative(\"selectMultiple\", codecForUiFormFieldSelectMultiple())\n .alternative(\"selectOne\", codecForUiFormFieldSelectOne())\n .alternative(\"text\", codecForUiFormFieldText())\n .alternative(\"textArea\", codecForUiFormFieldTextArea())\n .alternative(\"toggle\", codecForUiFormFieldToggle())\n .build(\"UIFormField\");\n\nconst codecForDoubleColumnFormSection = (): Codec<DoubleColumnFormSection> =>\n buildCodecForObject<DoubleColumnFormSection>()\n .property(\"title\", codecForString())\n .property(\"description\", codecOptional(codecForString()))\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"DoubleColumnFormSection\");\n\nconst codecForDoubleColumnForm = (): Codec<DoubleColumnForm> =>\n buildCodecForObject<DoubleColumnForm>()\n .property(\"type\", codecForConstString(\"double-column\"))\n .property(\"design\", codecForList(codecForDoubleColumnFormSection()))\n .build(\"DoubleColumnForm\");\n\nconst codecForFlexibleForm = (): Codec<FlexibleForm> =>\n buildCodecForUnion<FlexibleForm>()\n .discriminateOn(\"type\")\n .alternative(\"double-column\", codecForDoubleColumnForm())\n .build<FlexibleForm>(\"FlexibleForm\");\n\nconst codecForFormMetadata = (): Codec<FormMetadata> =>\n buildCodecForObject<FormMetadata>()\n .property(\"label\", codecForString())\n .property(\"id\", codecForString())\n .property(\"version\", codecForNumber())\n .property(\"config\", codecForFlexibleForm())\n .build(\"FormMetadata\");\n\nexport const codecForUIForms = (): Codec<UiForms> =>\n buildCodecForObject<UiForms>()\n .property(\"forms\", codecForList(codecForFormMetadata()))\n .build(\"UiForms\");\n\nexport type FormMetadata = {\n label: string;\n id: string;\n version: number;\n config: FlexibleForm;\n};\n\nexport interface UiForms {\n // Where libeufin backend is localted\n // default: window.origin without \"webui/\"\n forms: Array<FormMetadata>;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n TalerExchangeApi,\n} from \"@gnu-taler/taler-util\";\nimport { format, parse } from \"date-fns\";\nimport { StringConverter } from \"./FormProvider.js\";\n\nexport const amlStateConverter = {\n toStringUI: stringifyAmlState,\n fromStringUI: parseAmlState,\n};\n\nfunction stringifyAmlState(s: TalerExchangeApi.AmlState | undefined): string {\n if (s === undefined) return \"\";\n switch (s) {\n case TalerExchangeApi.AmlState.normal:\n return \"normal\";\n case TalerExchangeApi.AmlState.pending:\n return \"pending\";\n case TalerExchangeApi.AmlState.frozen:\n return \"frozen\";\n }\n}\n\nfunction parseAmlState(s: string | undefined): TalerExchangeApi.AmlState {\n switch (s) {\n case \"normal\":\n return TalerExchangeApi.AmlState.normal;\n case \"pending\":\n return TalerExchangeApi.AmlState.pending;\n case \"frozen\":\n return TalerExchangeApi.AmlState.frozen;\n default:\n throw Error(`unknown AML state: ${s}`);\n }\n}\n\nfunction amountConverter(config: any): StringConverter<AmountJson> {\n const currency = config[\"currency\"];\n if (!currency || typeof currency !== \"string\") {\n throw Error(`amount converter needs a currency`);\n }\n return {\n fromStringUI(v: string | undefined): AmountJson {\n // FIXME: requires currency\n return Amounts.parse(`${currency}:${v}`) ?? Amounts.zeroOfCurrency(currency);\n },\n toStringUI(v: unknown): string {\n return v === undefined ? \"\" : Amounts.stringifyValue(v as AmountJson);\n },\n };\n}\n\nfunction absTimeConverter(config: any): StringConverter<AbsoluteTime> {\n const pattern = config[\"pattern\"];\n if (!pattern || typeof pattern !== \"string\") {\n throw Error(`absTime converter needs a pattern`);\n }\n return {\n fromStringUI(v: string | undefined): AbsoluteTime {\n if (v === undefined) {\n return AbsoluteTime.never();\n }\n try {\n const time = parse(v, pattern, new Date());\n return AbsoluteTime.fromMilliseconds(time.getTime());\n } catch(e) {\n return AbsoluteTime.never();\n }\n },\n toStringUI(v: unknown): string {\n if (v === undefined) return \"\";\n const d = v as AbsoluteTime;\n if (d.t_ms === \"never\") return \"never\";\n try {\n return format(d.t_ms, pattern)\n } catch (e) {\n return \"\"\n }\n },\n };\n}\n\nexport function getConverterById(\n id: string | undefined,\n config: unknown,\n): StringConverter<unknown> {\n if (id === \"Taler.AbsoluteTime\") {\n // @ts-expect-error check this\n return absTimeConverter(config);\n }\n if (id === \"Taler.Amount\") {\n // @ts-expect-error check this\n return amountConverter(config);\n }\n if (id === \"TalerExchangeApi.AmlState\") {\n // @ts-expect-error check this\n return amlStateConverter;\n }\n return undefined!;\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 {\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\";\nimport { ExampleItemSetup } from \"./tests/hook.js\";\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 contextProps: {},\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<Props extends object = {}> {\n name: string;\n examples: ExampleItem<Props>[];\n}\n\nexport interface ExampleItem<Props extends object = {}> {\n group: string;\n component: string;\n name: string;\n render: ExampleItemSetup<Props>;\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 url = new URL(window.location.href);\n const initialSelection = getSelectionFromLocationHash(\n url.hash,\n examplesInGroups,\n );\n\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 (url.hash) {\n const hash = url.hash.substring(1);\n const found = document.getElementById(hash);\n if (found) {\n setTimeout(() => {\n found.scrollIntoView({\n block: \"center\",\n });\n }, 50);\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", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n TalerMerchantApi,\n TalerMerchantInstanceCacheEviction,\n TalerMerchantManagementCacheEviction,\n assertUnreachable,\n canonicalizeBaseUrl,\n} from \"@gnu-taler/taler-util\";\nimport {\n BrowserHashNavigationProvider,\n ConfigResultFail,\n MerchantApiProvider,\n TalerWalletIntegrationBrowserProvider,\n TranslationProvider,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { SWRConfig } from \"swr\";\nimport { Routing } from \"./Routing.js\";\nimport { Loading } from \"./components/exception/loading.js\";\nimport { NotificationCard } from \"./components/menu/index.js\";\nimport { SettingsProvider } from \"./context/settings.js\";\nimport {\n revalidateBankAccountDetails,\n revalidateInstanceBankAccounts,\n} from \"./hooks/bank.js\";\nimport {\n revalidateBackendInstances,\n revalidateInstanceDetails,\n revalidateManagedInstanceDetails,\n} from \"./hooks/instance.js\";\nimport {\n revalidateInstanceOtpDevices,\n revalidateOtpDeviceDetails,\n} from \"./hooks/otp.js\";\nimport {\n revalidateInstanceProducts,\n revalidateProductDetails,\n} from \"./hooks/product.js\";\nimport {\n revalidateInstanceTemplates,\n revalidateTemplateDetails,\n} from \"./hooks/templates.js\";\nimport { revalidateInstanceTransfers } from \"./hooks/transfer.js\";\nimport {\n revalidateInstanceWebhooks,\n revalidateWebhookDetails,\n} from \"./hooks/webhooks.js\";\nimport { strings } from \"./i18n/strings.js\";\nimport {\n MerchantUiSettings,\n buildDefaultBackendBaseURL,\n fetchSettings,\n} from \"./settings.js\";\nimport {\n revalidateInstanceOrders,\n revalidateOrderDetails,\n} from \"./hooks/order.js\";\nimport { SessionContextProvider } from \"./context/session.js\";\nconst WITH_LOCAL_STORAGE_CACHE = false;\n\nexport function Application(): VNode {\n const [settings, setSettings] = useState<MerchantUiSettings>();\n useEffect(() => {\n fetchSettings(setSettings);\n }, []);\n if (!settings) return <Loading />;\n\n const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);\n return (\n <SettingsProvider value={settings}>\n <TranslationProvider\n source={strings}\n completeness={{\n es: strings[\"es\"].completeness,\n de: strings[\"de\"].completeness,\n }}\n >\n <MerchantApiProvider\n baseUrl={new URL(\"./\", baseUrl)}\n frameOnError={OnConfigError}\n evictors={{\n management: swrCacheEvictor,\n }}\n >\n <SessionContextProvider>\n <SWRConfig\n value={{\n provider: WITH_LOCAL_STORAGE_CACHE\n ? localStorageProvider\n : undefined,\n // normally, do not revalidate\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n revalidateOnMount: undefined,\n focusThrottleInterval: undefined,\n\n // normally, do not refresh\n refreshInterval: undefined,\n dedupingInterval: 2000,\n refreshWhenHidden: false,\n refreshWhenOffline: false,\n\n // ignore errors\n shouldRetryOnError: false,\n errorRetryCount: 0,\n errorRetryInterval: undefined,\n\n // do not go to loading again if already has data\n keepPreviousData: true,\n }}\n >\n <TalerWalletIntegrationBrowserProvider>\n <BrowserHashNavigationProvider>\n <Routing />\n </BrowserHashNavigationProvider>\n </TalerWalletIntegrationBrowserProvider>\n </SWRConfig>\n </SessionContextProvider>\n </MerchantApiProvider>\n </TranslationProvider>\n </SettingsProvider>\n );\n}\n\nfunction getInitialBackendBaseURL(\n backendFromSettings: string | undefined,\n): string {\n /**\n * For testing purpose\n */\n const overrideUrl =\n typeof localStorage !== \"undefined\"\n ? localStorage.getItem(\"merchant-base-url\")\n : undefined;\n let result: string;\n\n if (overrideUrl) {\n // testing/development path\n result = overrideUrl;\n } else {\n // normal path\n if (!backendFromSettings) {\n console.error(\n \"ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'\",\n );\n result = buildDefaultBackendBaseURL();\n } else {\n result = backendFromSettings;\n }\n }\n try {\n return canonicalizeBaseUrl(result);\n } catch (e) {\n // fall back\n return canonicalizeBaseUrl(window.origin);\n }\n}\n\nfunction localStorageProvider(): Map<unknown, unknown> {\n const map = new Map(JSON.parse(localStorage.getItem(\"app-cache\") || \"[]\"));\n\n window.addEventListener(\"beforeunload\", () => {\n const appCache = JSON.stringify(Array.from(map.entries()));\n localStorage.setItem(\"app-cache\", appCache);\n });\n return map;\n}\n\nfunction OnConfigError({\n state,\n}: {\n state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;\n}): VNode {\n const { i18n } = useTranslationContext();\n if (!state) {\n return (\n <i18n.Translate>checking compatibility with server...</i18n.Translate>\n );\n }\n switch (state.type) {\n case \"error\": {\n return (\n <NotificationCard\n notification={{\n message: i18n.str`Contacting the server failed`,\n description: state.error.message,\n details: JSON.stringify(state.error.errorDetail, undefined, 2),\n type: \"ERROR\",\n }}\n />\n );\n }\n case \"incompatible\": {\n return (\n <NotificationCard\n notification={{\n message: i18n.str`The server version is not supported`,\n description: i18n.str`Supported version \"${state.supported}\", server version \"${state.result.version}\".`,\n type: \"WARN\",\n }}\n />\n );\n }\n default:\n assertUnreachable(state);\n }\n}\n\nconst swrCacheEvictor = new (class\n implements\n CacheEvictor<\n TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction\n >\n{\n async notifySuccess(\n op:\n | TalerMerchantManagementCacheEviction\n | TalerMerchantInstanceCacheEviction,\n ) {\n switch (op) {\n case TalerMerchantManagementCacheEviction.CREATE_INSTANCE: {\n await Promise.all([revalidateBackendInstances()]);\n return;\n }\n case TalerMerchantManagementCacheEviction.UPDATE_INSTANCE: {\n await Promise.all([revalidateManagedInstanceDetails()]);\n return;\n }\n case TalerMerchantManagementCacheEviction.DELETE_INSTANCE: {\n await Promise.all([revalidateBackendInstances()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE: {\n await Promise.all([revalidateInstanceDetails()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE: {\n await Promise.all([revalidateInstanceDetails()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT: {\n await Promise.all([revalidateInstanceBankAccounts()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT: {\n await Promise.all([revalidateBankAccountDetails()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT: {\n await Promise.all([revalidateInstanceBankAccounts()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.CREATE_PRODUCT: {\n await Promise.all([revalidateInstanceProducts()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT: {\n await Promise.all([revalidateProductDetails()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.DELETE_PRODUCT: {\n await Promise.all([revalidateInstanceProducts()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.CREATE_TRANSFER: {\n await Promise.all([revalidateInstanceTransfers()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.DELETE_TRANSFER: {\n await Promise.all([revalidateInstanceTransfers()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.CREATE_DEVICE: {\n await Promise.all([revalidateInstanceOtpDevices()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_DEVICE: {\n await Promise.all([revalidateOtpDeviceDetails()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.DELETE_DEVICE: {\n await Promise.all([revalidateInstanceOtpDevices()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE: {\n await Promise.all([revalidateInstanceTemplates()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE: {\n await Promise.all([revalidateTemplateDetails()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE: {\n await Promise.all([revalidateInstanceTemplates()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK: {\n await Promise.all([revalidateInstanceWebhooks()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK: {\n await Promise.all([revalidateWebhookDetails()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK: {\n await Promise.all([revalidateInstanceWebhooks()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.CREATE_ORDER: {\n await Promise.all([revalidateInstanceOrders()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.UPDATE_ORDER: {\n await Promise.all([revalidateOrderDetails()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.DELETE_ORDER: {\n await Promise.all([revalidateInstanceOrders()]);\n return;\n }\n case TalerMerchantInstanceCacheEviction.LAST:\n // case TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY:{\n // await Promise.all([\n // reva\n // ])\n // return\n // }\n // case TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY:{\n // await Promise.all([\n // ])\n // return\n // }\n // case TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY:{\n // await Promise.all([\n // ])\n // return\n // }\n }\n }\n})();\n", "import 'client-only';\nimport ReactExports, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { serialize, OBJECT, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, createCacheHelper, isUndefined, getTimestamp, UNDEFINED, isFunction, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects } from 'swr/_internal';\nexport { mutate, preload, useSWRConfig } from 'swr/_internal';\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = ReactExports.use || ((promise)=>{\n if (promise.status === 'pending') {\n throw promise;\n } else if (promise.status === 'fulfilled') {\n return promise.value;\n } else if (promise.status === 'rejected') {\n throw promise.reason;\n } else {\n promise.status = 'pending';\n promise.then((v)=>{\n promise.status = 'fulfilled';\n promise.value = v;\n }, (e)=>{\n promise.status = 'rejected';\n promise.reason = e;\n });\n throw promise;\n }\n});\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n // `key` is the identifier of the SWR internal state,\n // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n // All of them are derived from `_key`.\n const [key, fnArg] = serialize(_key);\n // If it's the initial render of this hook.\n const 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 const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(prev[t], current[t])) {\n if (!isUndefined(prev[t])) {\n return false;\n }\n if (!compare(returnedData, current[t])) {\n return false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n return false;\n }\n }\n }\n return true;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n if (!isUndefined(revalidateIfStale)) return revalidateIfStale;\n return true;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n const cachedData = getCache();\n const initialData = getInitialCache();\n const clientSnapshot = getSelectedCache(cachedData);\n const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = clientSnapshot;\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n if (compareResult) {\n // Mentally, we should always return the `memorizedSnapshot` here\n // as there's no change between the new and old snapshots.\n // However, since the `isEqual` function only compares selected fields,\n // the values of the unselected fields might be changed. That's\n // simply because we didn't track them.\n // To support the case in https://github.com/vercel/swr/pull/2576,\n // we need to update these fields in the `memorizedSnapshot` too\n // with direct mutations to ensure the snapshot is always up-to-date\n // even for the unselected fields, but only trigger re-renders when\n // the selected fields are changed.\n memorizedSnapshot.data = newSnapshot.data;\n memorizedSnapshot.isLoading = newSnapshot.isLoading;\n memorizedSnapshot.isValidating = newSnapshot.isValidating;\n memorizedSnapshot.error = newSnapshot.error;\n return memorizedSnapshot;\n } else {\n memorizedSnapshot = newSnapshot;\n return newSnapshot;\n }\n },\n ()=>serverSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined(cachedData) ? fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;\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 const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) 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 mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n [newData, startAt] = FETCH[key];\n newData = await newData;\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 (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n const revalidators = EVENT_REVALIDATORS[key];\n if (revalidators && revalidators[0]) {\n revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n }\n }, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `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 [\n key,\n cache\n ]);\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 const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n let nextFocusRevalidatedAt = 0;\n const onRevalidate = (type, opts = {})=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n return revalidate(opts);\n }\n return;\n };\n const 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 // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation\n if (shouldDoInitialRevalidation) {\n if (isUndefined(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\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 ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n // We only start the 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 (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `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 // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any initial data. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using suspense in SSR.');\n }\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 const req = PRELOAD[key];\n if (!isUndefined(req)) {\n const promise = boundMutate(req);\n use(promise);\n }\n if (isUndefined(error)) {\n const promise = revalidate(WITH_DEDUPE);\n if (!isUndefined(returnedData)) {\n promise.status = 'fulfilled';\n promise.value = true;\n }\n use(promise);\n } else {\n throw error;\n }\n }\n return {\n mutate: boundMutate,\n get data () {\n stateDependencies.data = true;\n return returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n};\nconst SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error, isLoading } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (isLoading) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n", "import React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can 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\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst isPromiseLike = (x)=>isFunction(x.then);\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).\nconst table = new WeakMap();\n// counter of the key\nlet 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// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const constructor = arg && arg.constructor;\n const isDate = constructor == Date;\n let result;\n let 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) 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 const 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 } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n }\n ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the 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 workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || 'Deno' in window;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\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.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nconst FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\nconst ERROR_REVALIDATE_EVENT = 3;\n\nvar events = {\n __proto__: null,\n ERROR_REVALIDATE_EVENT: ERROR_REVALIDATE_EVENT,\n FOCUS_EVENT: FOCUS_EVENT,\n MUTATE_EVENT: MUTATE_EVENT,\n RECONNECT_EVENT: RECONNECT_EVENT\n};\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const revalidate = options.revalidate !== false;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for (const key of it){\n if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n const startRevalidate = ()=>{\n const revalidators = EVENT_REVALIDATORS[key];\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 delete PRELOAD[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](MUTATE_EVENT).then(()=>get().data);\n }\n }\n return get().data;\n };\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 startRevalidate();\n }\n let data = _data;\n let error;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isPromiseLike(data)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((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 if (beforeMutationTs !== MUTATION[key][0]) {\n if (error) throw error;\n return data;\n } else if (error && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data: committedData,\n _c: UNDEFINED\n });\n }\n }\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 const populateCachedData = populateCache(data, committedData);\n set({\n data: populateCachedData,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n } else {\n // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n set({\n data,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n }\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n Promise.resolve(startRevalidate()).then(()=>{\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n });\n // Throw error or return data\n if (error) {\n if (throwOnError) throw error;\n return;\n }\n return data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (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 is bound to\n // the cache.\n // The 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 const 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 const EVENT_REVALIDATORS = {};\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = {};\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for (const fn of subs){\n fn(value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n {},\n {},\n {},\n mutate,\n setter,\n subscribe\n ]);\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 be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\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 }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\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 [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = (currentData, newData)=>stableHash(currentData) == stableHash(newData);\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n 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,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1, fallback: f1 } = a;\n const { use: u2, fallback: f2 } = b;\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\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // initialize the cache only on first access.\n const cacheContextRef = useRef(UNDEFINED);\n if (provider && !cacheContextRef.current) {\n cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n }\n const cacheContext = cacheContextRef.current;\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(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\nconst INFINITE_PREFIX = '$inf$';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const [key, fnArg] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(fnArg);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const [key] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n if (key.startsWith(INFINITE_PREFIX)) {\n // we want the infinite fetcher to be called.\n // handling of the PRELOAD cache happens there.\n return fetcher_(...args);\n }\n const req = PRELOAD[key];\n if (isUndefined(req)) return fetcher_(...args);\n delete PRELOAD[key];\n return req;\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const 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\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { INFINITE_PREFIX, IS_REACT_LEGACY, IS_SERVER, OBJECT, SWRConfig, SWRGlobalState, UNDEFINED, cache, compare, createCacheHelper, defaultConfig, defaultConfigOptions, getTimestamp, hasRequestAnimationFrame, initCache, internalMutate, isDocumentDefined, isFunction, isPromiseLike, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, mutate, noop, normalize, preload, preset, rAF, events as revalidateEvents, serialize, slowConnection, stableHash, subscribeCallback, useIsomorphicLayoutEffect, useSWRConfig, withArgs, withMiddleware };\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';\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n TalerError,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { urlPattern, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { createHashHistory } from \"history\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Route, Router, route } from \"preact-router\";\nimport { useEffect, useErrorBoundary, useState } from \"preact/hooks\";\nimport { Loading } from \"./components/exception/loading.js\";\nimport {\n Menu,\n NotConnectedAppMenu,\n NotificationCard,\n} from \"./components/menu/index.js\";\nimport { useSessionContext } from \"./context/session.js\";\nimport { useInstanceBankAccounts } from \"./hooks/bank.js\";\nimport { useInstanceKYCDetails } from \"./hooks/instance.js\";\nimport { usePreference } from \"./hooks/preference.js\";\nimport InstanceCreatePage from \"./paths/admin/create/index.js\";\nimport InstanceListPage from \"./paths/admin/list/index.js\";\nimport BankAccountCreatePage from \"./paths/instance/accounts/create/index.js\";\nimport BankAccountListPage from \"./paths/instance/accounts/list/index.js\";\nimport BankAccountUpdatePage from \"./paths/instance/accounts/update/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 ValidatorCreatePage from \"./paths/instance/otp_devices/create/index.js\";\nimport ValidatorListPage from \"./paths/instance/otp_devices/list/index.js\";\nimport ValidatorUpdatePage from \"./paths/instance/otp_devices/update/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 TemplateCreatePage from \"./paths/instance/templates/create/index.js\";\nimport TemplateListPage from \"./paths/instance/templates/list/index.js\";\nimport TemplateQrPage from \"./paths/instance/templates/qr/index.js\";\nimport TemplateUpdatePage from \"./paths/instance/templates/update/index.js\";\nimport TemplateUsePage from \"./paths/instance/templates/use/index.js\";\nimport TokenPage from \"./paths/instance/token/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 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 { LoginPage } from \"./paths/login/index.js\";\nimport { NotFoundPage } from \"./paths/notfound/index.js\";\nimport { Settings } from \"./paths/settings/index.js\";\nimport { Notification } from \"./utils/types.js\";\n\nexport enum InstancePaths {\n error = \"/error\",\n settings = \"/settings\",\n token = \"/token\",\n\n bank_list = \"/bank\",\n bank_update = \"/bank/:bid/update\",\n bank_new = \"/bank/new\",\n\n inventory_list = \"/inventory\",\n inventory_update = \"/inventory/:pid/update\",\n inventory_new = \"/inventory/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 otp_devices_list = \"/otp-devices\",\n otp_devices_update = \"/otp-devices/:vid/update\",\n otp_devices_new = \"/otp-devices/new\",\n\n interface = \"/interface\",\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\n// const 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\nexport const privatePages = {\n home: urlPattern(/\\/home/, () => \"#/home\"),\n go: urlPattern(/\\/home/, () => \"#/home\"),\n};\nexport const publicPages = {\n home: urlPattern(/\\/home/, () => \"#/home\"),\n go: urlPattern(/\\/home/, () => \"#/home\"),\n};\n\nconst history = createHashHistory();\nexport function Routing(_p: Props): VNode {\n // const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n\n type GlobalNotifState =\n | (Notification & { to: string | undefined })\n | undefined;\n const [globalNotification, setGlobalNotification] =\n useState<GlobalNotifState>(undefined);\n\n const [error] = useErrorBoundary();\n const [preference] = usePreference();\n\n const now = AbsoluteTime.now();\n\n const instance = useInstanceBankAccounts();\n const accounts =\n !instance || instance instanceof TalerError || instance.type === \"fail\"\n ? undefined\n : instance.body;\n const shouldWarnAboutMissingBankAccounts =\n !state.isAdmin &&\n accounts !== undefined &&\n accounts.accounts.length < 1 &&\n (AbsoluteTime.isNever(preference.hideMissingAccountUntil) ||\n AbsoluteTime.cmp(now, preference.hideMissingAccountUntil) > 1);\n\n const shouldLogin = state.status === \"loggedOut\";\n\n // function ServerErrorRedirectTo(to: InstancePaths | AdminPaths) {\n // return function ServerErrorRedirectToImpl(\n // error: HttpError<TalerErrorDetail>,\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.type === ErrorType.CLIENT || error.type === ErrorType.SERVER\n // ? error.payload.hint\n // : undefined,\n // type: \"ERROR\",\n // to,\n // });\n // }\n // return <Redirect to={to} />;\n // };\n // }\n\n // const LoginPageAccessDeniend = onUnauthorized\n // const LoginPageAccessDenied = () => {\n // return (\n // <Fragment>\n // <NotificationCard\n // notification={{\n // message: i18n.str`Access denied`,\n // description: i18n.str`Session expired or password changed.`,\n // type: \"ERROR\",\n // }}\n // />\n // <LoginPage />\n // </Fragment>\n // );\n // };\n\n // function IfAdminCreateDefaultOr<T>(Next: FunctionComponent<unknown>) {\n // return function IfAdminCreateDefaultOrImpl(props?: T) {\n // if (state.isAdmin && state.instance === DEFAULT_ADMIN_USERNAME) {\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_ADMIN_USERNAME}\n // onConfirm={() => {\n // route(InstancePaths.bank_list);\n // }}\n // />\n // </Fragment>\n // );\n // }\n // if (props) {\n // return <Next {...props} />;\n // }\n // return <Next />;\n // };\n // }\n\n if (shouldLogin) {\n return (\n <Fragment>\n <NotConnectedAppMenu title=\"Welcome!\" />\n <LoginPage />\n </Fragment>\n );\n }\n\n if (shouldWarnAboutMissingBankAccounts) {\n return (\n <Fragment>\n <Menu />\n <BankAccountBanner />\n <BankAccountCreatePage\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n />\n </Fragment>\n );\n }\n\n return (\n <Fragment>\n <Menu />\n <KycBanner />\n <NotificationCard notification={globalNotification} />\n {error && (\n <NotificationCard\n notification={{\n message: \"Internal error, please repot\",\n type: \"ERROR\",\n description: (\n <pre>\n {\n (error instanceof Error\n ? error.stack\n : String(error)) as TranslatedString\n }\n </pre>\n ),\n }}\n />\n )}\n\n <Router\n history={history}\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 {state.isAdmin && (\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 />\n )}\n {state.isAdmin && (\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 {state.isAdmin && (\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 />\n )}\n {/**\n * Update instance page\n */}\n <Route\n path={InstancePaths.settings}\n component={InstanceUpdatePage}\n onBack={() => {\n route(`/`);\n }}\n onConfirm={() => {\n route(`/`);\n }}\n />\n {/**\n * Update instance page\n */}\n <Route\n path={InstancePaths.token}\n component={TokenPage}\n onChange={() => {\n route(`/`);\n }}\n onCancel={() => {\n route(InstancePaths.order_list);\n }}\n />\n {/**\n * Inventory pages\n */}\n <Route\n path={InstancePaths.inventory_list}\n component={ProductListPage}\n onCreate={() => {\n route(InstancePaths.inventory_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.inventory_update.replace(\":pid\", id));\n }}\n />\n <Route\n path={InstancePaths.inventory_update}\n component={ProductUpdatePage}\n onConfirm={() => {\n route(InstancePaths.inventory_list);\n }}\n onBack={() => {\n route(InstancePaths.inventory_list);\n }}\n />\n <Route\n path={InstancePaths.inventory_new}\n component={ProductCreatePage}\n onConfirm={() => {\n route(InstancePaths.inventory_list);\n }}\n onBack={() => {\n route(InstancePaths.inventory_list);\n }}\n />\n {/**\n * Bank pages\n */}\n <Route\n path={InstancePaths.bank_list}\n component={BankAccountListPage}\n onCreate={() => {\n route(InstancePaths.bank_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.bank_update.replace(\":bid\", id));\n }}\n />\n <Route\n path={InstancePaths.bank_update}\n component={BankAccountUpdatePage}\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n onBack={() => {\n route(InstancePaths.bank_list);\n }}\n />\n <Route\n path={InstancePaths.bank_new}\n component={BankAccountCreatePage}\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n onBack={() => {\n route(InstancePaths.bank_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 />\n <Route\n path={InstancePaths.order_details}\n component={OrderDetailsPage}\n onBack={() => {\n route(InstancePaths.order_list);\n }}\n />\n <Route\n path={InstancePaths.order_new}\n component={OrderCreatePage}\n onConfirm={(orderId: string) => {\n route(InstancePaths.order_details.replace(\":oid\", orderId));\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 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 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 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 * Validator pages\n */}\n <Route\n path={InstancePaths.otp_devices_list}\n component={ValidatorListPage}\n onCreate={() => {\n route(InstancePaths.otp_devices_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.otp_devices_update.replace(\":vid\", id));\n }}\n />\n <Route\n path={InstancePaths.otp_devices_update}\n component={ValidatorUpdatePage}\n onConfirm={() => {\n route(InstancePaths.otp_devices_list);\n }}\n onBack={() => {\n route(InstancePaths.otp_devices_list);\n }}\n />\n <Route\n path={InstancePaths.otp_devices_new}\n component={ValidatorCreatePage}\n onConfirm={() => {\n route(InstancePaths.otp_devices_list);\n }}\n onBack={() => {\n route(InstancePaths.otp_devices_list);\n }}\n />\n {/**\n * Templates pages\n */}\n <Route\n path={InstancePaths.templates_list}\n component={TemplateListPage}\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 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 onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n <Route\n path={InstancePaths.templates_qr}\n component={TemplateQrPage}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n\n <Route path={InstancePaths.kyc} component={ListKYCPage} />\n <Route path={InstancePaths.interface} component={Settings} />\n {/**\n * Example pages\n */}\n <Route path=\"/loading\" component={Loading} />\n <Route default component={NotFoundPage} />\n </Router>\n </Fragment>\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 { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <InstanceAdminUpdatePage\n {...rest}\n instanceId={id}\n // onLoadError={(error: HttpError<TalerErrorDetail>) => {\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.type === ErrorType.CLIENT ||\n // error.type === ErrorType.SERVER\n // ? error.payload.hint\n // : undefined,\n // type: \"ERROR\" as const,\n // };\n // return (\n // <Fragment>\n // <NotificationCard notification={notif} />\n // <LoginPage />\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 />\n // </Fragment>\n // );\n // }}\n />\n </Fragment>\n );\n}\n\nfunction BankAccountBanner(): VNode {\n const { i18n } = useTranslationContext();\n\n const [, updatePref] = usePreference();\n const now = AbsoluteTime.now();\n const oneDay = { d_ms: 1000 * 60 * 60 * 24 };\n const tomorrow = AbsoluteTime.addDuration(now, oneDay);\n\n return (\n <NotificationCard\n notification={{\n type: \"INFO\",\n message: i18n.str`You need to associate a bank account to receive revenue.`,\n description: (\n <div>\n <p>\n <i18n.Translate>\n Without this the merchant backend will refuse to create new\n orders.\n </i18n.Translate>\n </p>\n <div class=\"buttons is-right\">\n <button\n class=\"button\"\n onClick={() => updatePref(\"hideMissingAccountUntil\", tomorrow)}\n >\n <i18n.Translate>Hide for today</i18n.Translate>\n </button>\n </div>\n </div>\n ),\n }}\n />\n );\n}\n\nfunction KycBanner(): VNode {\n const kycStatus = useInstanceKYCDetails();\n const { i18n } = useTranslationContext();\n // const today = format(new Date(), dateFormatForSettings(settings));\n const [prefs, updatePref] = usePreference();\n\n const now = AbsoluteTime.now();\n\n const needsToBeShown =\n kycStatus !== undefined &&\n !(kycStatus instanceof TalerError) &&\n kycStatus.type === \"ok\" &&\n !!kycStatus.body;\n\n const hidden = AbsoluteTime.cmp(now, prefs.hideKycUntil) < 1;\n if (hidden || !needsToBeShown) return <Fragment />;\n\n const oneDay = { d_ms: 1000 * 60 * 60 * 24 };\n const tomorrow = AbsoluteTime.addDuration(now, oneDay);\n\n return (\n <NotificationCard\n notification={{\n type: \"WARN\",\n message: \"KYC verification needed\",\n description: (\n <div>\n <p>\n <i18n.Translate>\n Some transfer are on hold until a KYC process is completed. Go\n to the KYC section in the left panel for more information\n </i18n.Translate>\n </p>\n <div class=\"buttons is-right\">\n <button\n class=\"button\"\n onClick={() => updatePref(\"hideKycUntil\", tomorrow)}\n >\n <i18n.Translate>Hide for today</i18n.Translate>\n </button>\n </div>\n </div>\n ),\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", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 \"../../Routing.js\";\nimport { Notification } from \"../../utils/types.js\";\nimport { NavigationBar } from \"./NavigationBar.js\";\nimport { Sidebar } from \"./SideBar.js\";\nimport { useSessionContext } from \"../../context/session.js\";\nimport { useNavigationContext } from \"@gnu-taler/web-util/browser\";\n\nfunction getInstanceTitle(path: string, id: string): string {\n switch (path) {\n case InstancePaths.settings:\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.inventory_list:\n return `${id}: Inventory`;\n case InstancePaths.inventory_new:\n return `${id}: New product`;\n case InstancePaths.inventory_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.otp_devices_list:\n return `${id}: otp devices`;\n case InstancePaths.otp_devices_new:\n return `${id}: New otp devices`;\n case InstancePaths.otp_devices_update:\n return `${id}: Update otp devices`;\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 case InstancePaths.interface:\n return `${id}: Interface`;\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\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(_p: MenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n const { state, deImpersonate } = useSessionContext();\n const { path } = useNavigationContext();\n\n const titleWithSubtitle = !state.isAdmin\n ? getInstanceTitle(path, state.instance)\n : getAdminTitle(path, state.instance);\n\n const isLoggedIn = state.status === \"loggedIn\";\n\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 {isLoggedIn && <Sidebar mobile={mobileOpen} />}\n\n {state.status !== \"loggedOut\" && state.impersonated && (\n <nav\n class=\"level\"\n style={{\n zIndex: 100,\n position: \"fixed\",\n width: \"50%\",\n marginLeft: \"20%\",\n }}\n >\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;{state.instance}&quot;</b>\n .{\" \"}\n <a\n href=\"#/instances\"\n onClick={() => {\n deImpersonate();\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 onShowSettings: () => void;\n onLogout?: () => void;\n isPasswordOk: boolean;\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\ninterface NotConnectedAppMenuProps {\n title: string;\n}\nexport function NotConnectedAppMenu({\n title,\n}: NotConnectedAppMenuProps): 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 </div>\n );\n}\n\nexport function NotYetReadyAppMenu({ title }: NotYetReadyAppMenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n const { state } = useSessionContext();\n\n useEffect(() => {\n document.title = `Taler Backoffice: ${title}`;\n }, [title]);\n\n const isLoggedIn = state.status === \"loggedIn\";\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 {isLoggedIn && <Sidebar mobile={mobileOpen} />}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { h, VNode } from \"preact\";\nimport { Router, route, Route } from \"preact-router\";\nimport InstanceCreatePage from \"./paths/admin/create/index.js\";\nimport InstanceListPage from \"./paths/admin/list/index.js\";\nimport { InstancePaths } from \"./Routing.js\";\n\nexport enum AdminPaths {\n list_instances = \"/instances\",\n new_instance = \"/instance/new\",\n}\n\nexport function AdminRoutes(): VNode {\n return (\n <Router>\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 />\n\n <Route\n path={AdminPaths.new_instance}\n component={InstanceCreatePage}\n onBack={() => route(AdminPaths.list_instances)}\n onConfirm={() => {\n route(InstancePaths.bank_list);\n }}\n\n />\n </Router>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n forceId?: string;\n}\nexport type Entity = TalerMerchantApi.InstanceConfigurationMessage;\n\nexport default function Create({ onBack, onConfirm, forceId }: Props): VNode {\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const { lib } = useSessionContext();\n const { state, logIn } = useSessionContext();\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <CreatePage\n onBack={onBack}\n forceId={forceId}\n onCreate={async (\n d: TalerMerchantApi.InstanceConfigurationMessage,\n ) => {\n if (state.status !== \"loggedIn\") return;\n try {\n await lib.instance.createInstance(state.token, d);\n if (d.auth.token) {\n //if auth has been updated, request a new access token\n const result = await lib.authenticate.createAccessTokenBearer(\n d.auth.token,\n {\n scope: \"write\",\n duration: {\n d_us: \"forever\",\n },\n refreshable: true,\n },\n );\n if (result.type === \"ok\") {\n const { token } = result.body;\n logIn(token);\n }\n }\n onConfirm();\n } catch (ex) {\n if (ex instanceof Error) {\n setNotif({\n message: i18n.str`Failed to create instance`,\n type: \"ERROR\",\n description: ex.message,\n });\n } else {\n console.error(ex);\n }\n }\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n Codec,\n TalerMerchantApi,\n buildCodecForObject,\n codecForString,\n codecForURL,\n codecOptional,\n} from \"@gnu-taler/taler-util\";\nimport {\n buildStorageKey,\n useLocalStorage,\n useMerchantApiContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, VNode, createContext, h } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { mutate } from \"swr\";\nimport { MerchantLib } from \"../../../web-util/lib/context/activity.js\";\n\n/**\n * Has the information to reach and\n * authenticate at the bank's backend.\n */\nexport type SessionState = LoggedIn | LoggedOut;\n\ninterface LoggedIn {\n status: \"loggedIn\";\n\n // is this instance admin? usually \"default\" name\n isAdmin: boolean;\n\n // url where all the request will be made\n // usually this is from where the SPA was loaded\n // unless it's using impersonate feature\n backendUrl: URL;\n\n // instance name\n instance: string;\n\n // session is not the same from where it was loaded\n impersonated: boolean;\n\n //instance access token\n token: AccessToken | undefined;\n}\n\ninterface LoggedOut {\n status: \"loggedOut\";\n backendUrl: URL;\n instance: string;\n isAdmin: boolean;\n token: AccessToken | undefined;\n}\n\ninterface SavedSession {\n backendUrl: URL;\n token: AccessToken | undefined;\n prevToken: AccessToken | undefined;\n}\n\nexport const codecForSessionState = (): Codec<SavedSession> =>\n buildCodecForObject<SavedSession>()\n .property(\"backendUrl\", codecForURL())\n .property(\"token\", codecOptional(codecForString() as Codec<AccessToken>))\n .property(\n \"prevToken\",\n codecOptional(codecForString() as Codec<AccessToken>),\n )\n .build(\"SavedSession\");\n\nfunction inferInstanceName(url: URL) {\n const match = INSTANCE_ID_LOOKUP.exec(url.href);\n return !match || !match[1] ? DEFAULT_ADMIN_USERNAME : match[1];\n}\n\nexport const defaultState = (url: URL): SavedSession => {\n return {\n backendUrl: url,\n token: undefined,\n prevToken: undefined,\n };\n};\n\nexport interface SessionStateHandler {\n lib: MerchantLib;\n config: TalerMerchantApi.VersionResponse;\n\n state: SessionState;\n /**\n * from every state to logout state\n */\n logOut(): void;\n /**\n * from impersonate to loggedIn\n */\n deImpersonate(): void;\n /**\n * from any to loggedIn\n * @param info\n */\n logIn(token: AccessToken | undefined): void;\n /**\n * from loggedIn to impersonate\n * @param info\n */\n impersonate(baseUrl: URL): void;\n}\n\nconst SESSION_STATE_KEY = buildStorageKey(\n \"merchant-session\",\n codecForSessionState(),\n);\n\nexport const DEFAULT_ADMIN_USERNAME = \"default\";\n\nexport const INSTANCE_ID_LOOKUP = /\\/instances\\/([^/]*)\\/?$/;\n\nexport function cleanAllCache(): void {\n mutate(() => true, undefined, { revalidate: false });\n}\n\nconst Context = createContext<SessionStateHandler>(undefined!);\n\nexport const useSessionContext = (): SessionStateHandler => useContext(Context);\n\n/**\n * Creates the session in loggedIn state.\n * Infer the instance name based on the URL.\n * Create the instance of the merchant api http rest.\n * Returns API that handle impersonation.\n * \n * @param param0 \n * @returns \n */\nexport const SessionContextProvider = ({\n children,\n // value,\n}: {\n // value: MerchantUiSettings;\n children: ComponentChildren;\n}): VNode => {\n const {\n lib: rootLib,\n config: rootConfig,\n url: merchantUrl,\n } = useMerchantApiContext();\n const [status, setStatus] = useState<\"loggedIn\" | \"loggedOut\">(\"loggedIn\");\n const [currentConfig, setCurrentConfig] =\n useState<TalerMerchantApi.VersionResponse>();\n const { value: state, update } = useLocalStorage(\n SESSION_STATE_KEY,\n defaultState(merchantUrl),\n );\n\n const currentInstance = inferInstanceName(state.backendUrl);\n\n let lib: MerchantLib;\n let config: TalerMerchantApi.VersionResponse;\n const doingImpersonation = state.backendUrl.href !== merchantUrl.href;\n if (doingImpersonation) {\n /**\n * FIXME: can't impersonate other than local instances\n */\n lib = rootLib.subInstanceApi(inferInstanceName(state.backendUrl));\n\n config = currentConfig ?? rootConfig;\n } else {\n lib = rootLib;\n config = rootConfig;\n }\n\n useEffect(() => {\n // FIXME: handle what happen if the subinstance /config\n // fails\n if (!doingImpersonation) return;\n lib.instance.getConfig().then((resp) => {\n if (resp.type === \"ok\") {\n setCurrentConfig(resp.body);\n }\n });\n }, [state.backendUrl.href]);\n\n const value: SessionStateHandler = {\n state: {\n backendUrl: state.backendUrl,\n token: state.token,\n impersonated: doingImpersonation,\n instance: currentInstance,\n isAdmin: currentInstance === DEFAULT_ADMIN_USERNAME,\n status: status,\n },\n lib,\n config,\n logOut() {\n setStatus(\"loggedOut\");\n update({\n backendUrl: merchantUrl,\n token: undefined,\n prevToken: undefined,\n });\n cleanAllCache();\n },\n deImpersonate() {\n cleanAllCache();\n update({\n backendUrl: merchantUrl,\n token: state.prevToken,\n prevToken: undefined,\n });\n setStatus(\"loggedIn\");\n },\n impersonate(baseUrl) {\n /**\n * FIXME: can't impersonate other than local instances\n */\n update({\n backendUrl: baseUrl,\n token: undefined,\n prevToken: state.token,\n });\n setStatus(\"loggedIn\");\n cleanAllCache();\n },\n logIn(token) {\n cleanAllCache();\n setStatus(\"loggedIn\");\n update({\n backendUrl: state.backendUrl,\n token: token,\n prevToken: state.prevToken,\n });\n },\n };\n\n return h(Context.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Duration,\n TalerMerchantApi,\n createRFC8959AccessTokenPlain,\n} from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/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 { INSTANCE_ID_REGEX } from \"../../../utils/constants.js\";\nimport { undefinedIfEmpty } from \"../../../utils/table.js\";\n\nexport type Entity = Omit<\n Omit<TalerMerchantApi.InstanceConfigurationMessage, \"default_pay_delay\">,\n \"default_wire_transfer_delay\"\n> & {\n auth_token?: string;\n default_pay_delay: Duration;\n default_wire_transfer_delay: Duration;\n};\n\ninterface Props {\n onCreate: (d: TalerMerchantApi.InstanceConfigurationMessage) => Promise<void>;\n onBack?: () => void;\n forceId?: string;\n}\n\nfunction with_defaults(id?: string): Partial<Entity> {\n return {\n id,\n // accounts: [],\n user_type: \"business\",\n use_stefan: true,\n default_pay_delay: { d_ms: 2 * 60 * 60 * 1000 }, // two hours\n default_wire_transfer_delay: { d_ms: 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\n user_type: !value.user_type\n ? i18n.str`required`\n : value.user_type !== \"business\" && value.user_type !== \"individual\"\n ? i18n.str`should be business or individual`\n : undefined,\n // accounts:\n // !value.accounts || !value.accounts.length\n // ? i18n.str`required`\n // : undefinedIfEmpty(\n // value.accounts.map((p) => {\n // return !PAYTO_REGEX.test(p.payto_uri)\n // ? i18n.str`is not valid`\n // : undefined;\n // }),\n // ),\n default_pay_delay: !value.default_pay_delay\n ? i18n.str`required`\n : !!value.default_wire_transfer_delay &&\n value.default_wire_transfer_delay.d_ms !== \"forever\" &&\n value.default_pay_delay.d_ms !== \"forever\" &&\n value.default_pay_delay.d_ms > value.default_wire_transfer_delay.d_ms\n ? i18n.str`pay delay can't be greater than wire transfer delay`\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 Record<string, unknown>)[k] !== undefined,\n );\n\n const submit = (): Promise<void> => {\n // use conversion instead of this\n const newValue = structuredClone(value);\n\n const newToken = newValue.auth_token;\n newValue.auth_token = undefined;\n newValue.auth =\n newToken === null || newToken === undefined\n ? { method: \"external\" }\n : { method: \"token\", token: createRFC8959AccessTokenPlain(newToken) };\n if (!newValue.address) newValue.address = {};\n if (!newValue.jurisdiction) newValue.jurisdiction = {};\n // remove above use conversion\n // schema.validateSync(value, { abortEarly: false })\n newValue.default_pay_delay = Duration.toTalerProtocolDuration(\n newValue.default_pay_delay!,\n ) as any;\n newValue.default_wire_transfer_delay = Duration.toTalerProtocolDuration(\n newValue.default_wire_transfer_delay!,\n ) as any;\n // delete value.default_pay_delay;\n // delete value.default_wire_transfer_delay;\n\n return onCreate(\n newValue as any as TalerMerchantApi.InstanceConfigurationMessage,\n );\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=\"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=\"level\">\n <div class=\"level-item has-text-centered\">\n <h1 class=\"title\">\n <button\n class={\n !isTokenSet\n ? \"button is-danger has-tooltip-bottom\"\n : !value.auth_token\n ? \"button has-tooltip-bottom\"\n : \"button is-info has-tooltip-bottom\"\n }\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 class=\"level\">\n <div class=\"level-item has-text-centered\">\n {!isTokenSet ? (\n <p class=\"is-size-6\">\n <i18n.Translate>\n Access token is not yet configured. This instance can't be\n created.\n </i18n.Translate>\n </p>\n ) : value.auth_token === undefined ? (\n <p class=\"is-size-6\">\n <i18n.Translate>\n No access token. Authorization must be handled externally.\n </i18n.Translate>\n </p>\n ) : (\n <p class=\"is-size-6\">\n <i18n.Translate>\n Access token is set. Authorization is handled by the\n merchant backend.\n </i18n.Translate>\n </p>\n )}\n </div>\n </div>\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={hasErrors || !isTokenSet}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\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\";\nimport { useSessionContext } from \"../../context/session.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 { state } = useSessionContext();\n\n const text = i18n.str`You are updating the access token from instance with id ${state.instance}`;\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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]{1,11}:[0-9][0-9,]*\\.?[0-9,]*$/;\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\nexport const PAGINATED_LIST_SIZE = 5;\n// when doing paginated request, ask for one more\n// and use it to know if there are more to request\nexport const PAGINATED_LIST_REQUEST = PAGINATED_LIST_SIZE + 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\n/**\n * FIXME:\n * USE MEMORY EVENTS INSTEAD OF CONTEXT\n * @deprecated\n */\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useState } from \"preact/hooks\";\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 const [isDirty, setDirty] = useState(false);\n const updateField =\n (field: P) =>\n (value: V): void => {\n setDirty(true);\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 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useSessionContext } from \"../../context/session.js\";\nimport { Entity } from \"../../paths/admin/create/CreatePage.js\";\nimport { Input } from \"../form/Input.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 { InputSelector } from \"../form/InputSelector.js\";\nimport { InputToggle } from \"../form/InputToggle.js\";\nimport { InputWithAddon } from \"../form/InputWithAddon.js\";\nimport { TextField } from \"../form/TextField.js\";\n\nexport function DefaultInstanceFormFields({\n readonlyId,\n showId,\n}: {\n readonlyId?: boolean;\n showId: boolean;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n return (\n <Fragment>\n {showId && (\n <InputWithAddon<Entity>\n name=\"id\"\n addonBefore={new URL(\"instances/\", state.backendUrl.href).href}\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 <TextField name=\"asdasd\" label=\"\">\n <i18n.Translate>\n Choose individual if you don't have or are not required to have legal business permission. \n </i18n.Translate>\n </TextField>\n\n <InputSelector<Entity>\n name=\"user_type\"\n label={i18n.str`Selling as`}\n tooltip={i18n.str`Different type of account can have different rules and requirements.`}\n values={[\"business\", \"individual\"]}\n toStr={(d: string) => {\n return d.toUpperCase();\n }}\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 <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 <InputToggle<Entity>\n name=\"use_stefan\"\n label={i18n.str`Pay transaction fee`}\n tooltip={i18n.str`Assume the cost of the transaction of let the user pay for it.`}\n />\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", "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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}", "import assign from \"../assign/index.js\";\nexport default function cloneObject(object) {\n return assign({}, object);\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MINUTES_IN_DAY = 1440;\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520;\nvar MINUTES_IN_MONTH = 43200;\nvar MINUTES_IN_TWO_MONTHS = 86400;\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * const result = formatDistance(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0),\n * { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\n\nexport default function formatDistance(dirtyDate, dirtyBaseDate, options) {\n var _ref, _options$locale;\n\n requiredArgs(2, arguments);\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\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain formatDistance property');\n }\n\n var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value');\n }\n\n var localizeOptions = assign(cloneObject(options), {\n addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix),\n comparison: comparison\n });\n var dateLeft;\n var dateRight;\n\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate);\n dateRight = toDate(dirtyDate);\n } else {\n dateLeft = toDate(dirtyDate);\n dateRight = toDate(dirtyBaseDate);\n }\n\n var seconds = differenceInSeconds(dateRight, dateLeft);\n var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1000;\n var minutes = Math.round((seconds - offsetInSeconds) / 60);\n var months; // 0 up to 2 mins\n\n if (minutes < 2) {\n if (options !== null && options !== void 0 && options.includeSeconds) {\n if (seconds < 5) {\n return locale.formatDistance('lessThanXSeconds', 5, localizeOptions);\n } else if (seconds < 10) {\n return locale.formatDistance('lessThanXSeconds', 10, localizeOptions);\n } else if (seconds < 20) {\n return locale.formatDistance('lessThanXSeconds', 20, localizeOptions);\n } else if (seconds < 40) {\n return locale.formatDistance('halfAMinute', 0, localizeOptions);\n } else if (seconds < 60) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n } else {\n return locale.formatDistance('xMinutes', 1, localizeOptions);\n }\n } else {\n if (minutes === 0) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n } else {\n return locale.formatDistance('xMinutes', minutes, localizeOptions);\n }\n } // 2 mins up to 0.75 hrs\n\n } else if (minutes < 45) {\n return locale.formatDistance('xMinutes', minutes, localizeOptions); // 0.75 hrs up to 1.5 hrs\n } else if (minutes < 90) {\n return locale.formatDistance('aboutXHours', 1, localizeOptions); // 1.5 hrs up to 24 hrs\n } else if (minutes < MINUTES_IN_DAY) {\n var hours = Math.round(minutes / 60);\n return locale.formatDistance('aboutXHours', hours, localizeOptions); // 1 day up to 1.75 days\n } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n return locale.formatDistance('xDays', 1, localizeOptions); // 1.75 days up to 30 days\n } else if (minutes < MINUTES_IN_MONTH) {\n var days = Math.round(minutes / MINUTES_IN_DAY);\n return locale.formatDistance('xDays', days, localizeOptions); // 1 month up to 2 months\n } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n months = Math.round(minutes / MINUTES_IN_MONTH);\n return locale.formatDistance('aboutXMonths', months, localizeOptions);\n }\n\n months = differenceInMonths(dateRight, dateLeft); // 2 months up to 12 months\n\n if (months < 12) {\n var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH);\n return locale.formatDistance('xMonths', nearestMonth, localizeOptions); // 1 year up to max Date\n } else {\n var monthsSinceStartOfYear = months % 12;\n var years = Math.floor(months / 12); // N years up to 1 years 3 months\n\n if (monthsSinceStartOfYear < 3) {\n return locale.formatDistance('aboutXYears', years, localizeOptions); // N years 3 months up to N years 9 months\n } else if (monthsSinceStartOfYear < 9) {\n return locale.formatDistance('overXYears', years, localizeOptions); // N years 9 months up to N year 12 months\n } else {\n return locale.formatDistance('almostXYears', years + 1, localizeOptions);\n }\n }\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 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { formatDuration, intervalToDuration } from \"date-fns\";\nimport { ComponentChildren, 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\";\nimport { Duration } from \"@gnu-taler/taler-util\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n readonly?: boolean;\n withForever?: boolean;\n side?: ComponentChildren;\n withoutClear?: boolean;\n}\n\nexport function InputDuration<T>({\n name,\n expand,\n placeholder,\n tooltip,\n label,\n help,\n readonly,\n withForever,\n withoutClear,\n side,\n}: Props<keyof T>): VNode {\n const [opened, setOpened] = useState(false);\n const { i18n } = useTranslationContext();\n\n const { error, required, value: anyValue, onChange } = useField<T>(name);\n let strValue = \"\";\n const value: Duration = anyValue\n if (!value) {\n strValue = \"\";\n } else if (value.d_ms === \"forever\") {\n strValue = i18n.str`forever`;\n } else {\n if (value.d_ms === undefined) {\n throw Error(`assertion error: duration should have a d_ms but got '${JSON.stringify(value)}'`)\n }\n strValue = formatDuration(\n intervalToDuration({ start: 0, end: value.d_ms }),\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 is-flex-grow-3\">\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\n <div class=\"is-flex-grow-3\">\n <div class=\"field-body \">\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 </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_ms: \"forever\" } as any)}\n >\n <i18n.Translate>forever</i18n.Translate>\n </button>\n </span>\n )}\n {!readonly && !withoutClear && (\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 {side}\n </div>\n <span>\n {help}\n </span>\n </div>\n\n\n {opened && (\n <SimpleModal onCancel={() => setOpened(false)}>\n <DurationPicker\n days\n hours\n minutes\n value={!value || value.d_ms === \"forever\" ? 0 : value.d_ms}\n onChange={(v) => {\n onChange({ d_ms: v } as any);\n }}\n />\n </SimpleModal>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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;\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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: 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 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 has-icons-right\">\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 onChange(fromStr(e.currentTarget.value));\n }}\n >\n {placeholder && <option>{placeholder}</option>}\n {values.map((v, i) => {\n return (\n <option key={i} value={v} selected={value === v}>\n {toStr(v)}\n </option>\n );\n })}\n </select>\n\n {help}\n </p>\n {required && (\n <span class=\"icon has-text-danger is-right\" style={{height: \"2.5em\"}}>\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 InputToggle<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=\"toggle\" style={{ marginLeft: 4, marginTop: 0 }}>\n <input\n type=\"checkbox\"\n class={toBoolean(value) === undefined ? \"is-indeterminate\" : \"toggle-checkbox\"}\n checked={toBoolean(value)}\n placeholder={placeholder}\n readonly={readonly}\n name={String(name)}\n disabled={readonly}\n onChange={onCheckboxClick}\n />\n <div class={`toggle-switch ${readonly ? \"disabled\" : \"\"}`} style={{ cursor: readonly ? \"default\" : undefined }}></div>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 addonAfterAction?: () => void;\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 addonAfterAction,\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\" : \"\"}${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 {children}\n </p>\n {addonAfter && (\n <div class=\"control\" onClick={addonAfterAction} style={{ cursor: addonAfterAction ? \"pointer\" : undefined }}>\n <a class=\"button is-static\">{addonAfter}</a>\n </div>\n )}\n </div>\n {error && <p class=\"help is-danger\">{error}</p>}\n <span class=\"has-text-grey\">{help}</span>\n </div>\n {expand ? <div>{side}</div> : side}\n </div>\n\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 *\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 | undefined): 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { DeleteModal, PurgeModal } from \"../../../components/modal/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport { useBackendInstances } from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { LoginPage } from \"../../login/index.js\";\nimport { View } from \"./View.js\";\n\ninterface Props {\n onCreate: () => void;\n onUpdate: (id: string) => void;\n instances: TalerMerchantApi.Instance[];\n}\n\nexport default function Instances({\n onCreate,\n onUpdate,\n}: Props): VNode {\n const result = useBackendInstances();\n const [deleting, setDeleting] =\n useState<TalerMerchantApi.Instance | null>(null);\n const [purging, setPurging] =\n useState<TalerMerchantApi.Instance | null>(null);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result.case)\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <View\n instances={result.body.instances}\n onDelete={setDeleting}\n onCreate={onCreate}\n onPurge={setPurging}\n onUpdate={onUpdate}\n selected={!!deleting}\n />\n {deleting && (\n <DeleteModal\n element={deleting}\n onCancel={() => setDeleting(null)}\n onConfirm={async (): Promise<void> => {\n if (state.status !== \"loggedIn\") {\n return;\n }\n try {\n await lib.instance.deleteInstance(state.token, 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 if (state.status !== \"loggedIn\") {\n return;\n }\n try {\n await lib.instance.deleteInstance(state.token, purging.id, { purge: true });\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/*\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 { TalerError, TalerErrorCode, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { NotificationCard } from \"./menu/index.js\";\n\n/**\n * equivalent to ErrorLoading for merchant-backoffice which uses notification-card\n * @param param0 \n * @returns \n */\nexport function ErrorLoadingMerchant({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {\n const { i18n } = useTranslationContext()\n switch (error.errorDetail.code) {\n //////////////////\n // Every error that can be produce in a Http Request\n //////////////////\n case TalerErrorCode.GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`The request reached a timeout, check your connection.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`The request was cancelled.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`The request reached a timeout, check your connection.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {\n const { requestMethod, requestUrl, throttleStats } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`A lot of request were made to the same server and this action was throttled.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {\n const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`The response of the request is malformed.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {\n const { requestMethod, requestUrl } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`Could not complete the request due to a network problem.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {\n const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`Unexpected request error.`,\n description: error.message,\n details: JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)\n }} />\n }\n assertUnreachable(1 as never)\n }\n //////////////////\n // Every other error \n //////////////////\n // case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n // return <Attention type=\"danger\" title={i18n.str``}>\n // </Attention>\n // }\n //////////////////\n // Default message for unhandled case\n //////////////////\n default: {\n return <NotificationCard\n notification={{\n type: \"ERROR\",\n message: i18n.str`Unexpected error.`,\n description: error.message,\n details: JSON.stringify(error.errorDetail, undefined, 2)\n }} />\n }\n }\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\n\nexport function revalidateInstanceDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getCurrentInstanceDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceDetails() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([token]: [AccessToken]) {\n return await instance.getCurrentInstanceDetails(token);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getCurrentInstanceDetails\">,\n TalerHttpError\n >([session.token, \"getCurrentInstanceDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateInstanceKYCDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getCurrentIntanceKycStatus\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceKYCDetails() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([token]: [AccessToken]) {\n return await instance.getCurrentIntanceKycStatus(token, {});\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getCurrentIntanceKycStatus\">,\n TalerHttpError\n >([session.token, \"getCurrentIntanceKycStatus\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n\n\n}\n\nexport function revalidateManagedInstanceDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getInstanceDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useManagedInstanceDetails(instanceId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([token, instanceId]: [AccessToken, string]) {\n return await instance.getInstanceDetails(token, instanceId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getInstanceDetails\">,\n TalerHttpError\n >([session.token, instanceId, \"getInstanceDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateBackendInstances() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listInstances\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useBackendInstances() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([token]: [AccessToken]) {\n return await instance.listInstances(token);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listInstances\">,\n TalerHttpError\n >([session.token, \"listInstances\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, createRFC8959AccessTokenEncoded } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../components/menu/index.js\";\nimport { useSessionContext } from \"../../context/session.js\";\nimport { Notification } from \"../../utils/types.js\";\n\ninterface Props {}\n\nconst tokenRequest = {\n scope: \"write\",\n duration: {\n d_us: \"forever\" as const,\n },\n refreshable: true,\n};\n\nexport function LoginPage(_p: Props): VNode {\n const [token, setToken] = useState(\"\");\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { state, logIn } = useSessionContext();\n const { lib } = useSessionContext();\n\n const { i18n } = useTranslationContext();\n\n async function doLoginImpl() {\n const result = await lib.authenticate.createAccessTokenBearer(\n createRFC8959AccessTokenEncoded(token),\n tokenRequest,\n );\n if (result.type === \"ok\") {\n const { token } = result.body;\n logIn(token);\n return;\n } else {\n switch (result.case) {\n case HttpStatusCode.Unauthorized: {\n setNotif({\n message: \"Your password is incorrect\",\n type: \"ERROR\",\n });\n return;\n }\n case HttpStatusCode.NotFound: {\n setNotif({\n message: \"Your instance not found\",\n type: \"ERROR\",\n });\n return;\n }\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\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>\n Please enter your access token for <b>\"{state.instance}\"</b>.\n </i18n.Translate>\n\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={\"current access token\"}\n name=\"token\"\n onKeyPress={(e) =>\n e.keyCode === 13 ? doLoginImpl() : 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: \"space-between\",\n border: \"1px solid\",\n borderTop: 0,\n }}\n >\n <div />\n <AsyncButton type=\"is-info\" onClick={doLoginImpl}>\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </footer>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n\nfunction AsyncButton({\n onClick,\n disabled,\n type = \"\",\n children,\n}: {\n type?: string;\n disabled?: boolean;\n onClick: () => Promise<void>;\n children: ComponentChildren;\n}): VNode {\n const [running, setRunning] = useState(false);\n return (\n <button\n class={\"button \" + type}\n disabled={disabled || running}\n onClick={() => {\n setRunning(true);\n onClick()\n .then(() => {\n setRunning(false);\n })\n .catch(() => {\n setRunning(false);\n });\n }}\n >\n {children}\n </button>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { CardTable as CardTableActive } from \"./TableActive.js\";\n\ninterface Props {\n instances: TalerMerchantApi.Instance[];\n onCreate: () => void;\n onUpdate: (id: string) => void;\n onDelete: (id: TalerMerchantApi.Instance) => void;\n onPurge: (id: TalerMerchantApi.Instance) => void;\n selected?: boolean;\n}\n\nexport function View({\n instances,\n onCreate,\n onDelete,\n onPurge,\n onUpdate,\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 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { StateUpdater, useEffect, useState } from \"preact/hooks\";\nimport { useSessionContext } from \"../../../context/session.js\";\n\ninterface Props {\n instances: TalerMerchantApi.Instance[];\n onUpdate: (id: string) => void;\n onDelete: (id: TalerMerchantApi.Instance) => void;\n onPurge: (id: TalerMerchantApi.Instance) => void;\n onCreate: () => void;\n selected?: boolean;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onUpdate,\n onPurge,\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 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: TalerMerchantApi.Instance[];\n onUpdate: (id: string) => void;\n onDelete: (id: TalerMerchantApi.Instance) => void;\n onPurge: (id: TalerMerchantApi.Instance) => void;\n rowSelectionHandler: StateUpdater<string[]>;\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 instances,\n onUpdate,\n onDelete,\n onPurge,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const { lib } = useSessionContext();\n const { impersonate } = useSessionContext();\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`}\n onClick={async (_e) => {\n // e.preventDefault();\n const newInstanceApi = lib.subInstanceApi(i.id);\n //not checking /config since this comes from instance list\n impersonate(new URL(newInstanceApi.instance.baseUrl));\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-magnify 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: TalerMerchantApi.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: TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 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 </div>\n </div>\n </div>\n </nav>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useSessionContext } from \"../../context/session.js\";\nimport { useInstanceKYCDetails } from \"../../hooks/instance.js\";\nimport { LangSelector } from \"./LangSelector.js\";\n\n// const GIT_HASH = typeof __GIT_HASH__ !== \"undefined\" ? __GIT_HASH__ : undefined;\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : undefined;\n\ninterface Props {\n mobile?: boolean;\n}\n\nexport function Sidebar({ mobile }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { state, logOut, config } = useSessionContext();\n const kycStatus = useInstanceKYCDetails();\n\n const needKYC =\n kycStatus !== undefined &&\n !(kycStatus instanceof TalerError) &&\n kycStatus.type === \"ok\" &&\n !!kycStatus.body;\n const isLoggedIn = state.status === \"loggedIn\";\n const hasToken = isLoggedIn && state.token !== undefined;\n \n return (\n <aside\n class=\"aside is-placed-left is-expanded\"\n style={{ overflowY: \"scroll\" }}\n >\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 {isLoggedIn ? (\n <Fragment>\n <ul class=\"menu-list\">\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={\"/inventory\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-shopping\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Inventory</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-arrow-left-right\" />\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 {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 <p class=\"menu-label\">\n <i18n.Translate>Configuration</i18n.Translate>\n </p>\n <ul class=\"menu-list\">\n <li>\n <a href={\"/bank\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-bank\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Bank account</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/otp-devices\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-lock\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>OTP Devices</i18n.Translate>\n </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 <li>\n <a href={\"/settings\"} 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={\"/token\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-security\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Access token</i18n.Translate>\n </span>\n </a>\n </li>\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 <a class=\"has-icon is-state-info is-hoverable\" href=\"/interface\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Interface</i18n.Translate>\n </span>\n </a>\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\">{state.backendUrl.hostname}</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\">{state.instance}</span>\n </div>\n </li>\n {state.isAdmin && (\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 {hasToken ? (\n <li>\n <a\n class=\"has-icon is-state-info is-hoverable\"\n onClick={(e): void => {\n logOut();\n e.preventDefault();\n }}\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 ) : undefined}\n </ul>\n </div>\n </aside>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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/*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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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 \"Close\": [\n \"\"\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 acceso 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 \"acceder al token en uso actualmente\"\n ],\n \"New access token\": [\n \"Nuevo token de acceso\"\n ],\n \"next access token to be used\": [\n \"siguiente token de acceso a usar\"\n ],\n \"Repeat access token\": [\n \"Repetir token de acceso\"\n ],\n \"confirm the same access token\": [\n \"confirmar el mismo token de acceso\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"Limpiar el token de acceso significa acceso p\u00FAblico a la instancia\"\n ],\n \"cannot be the same as the old access token\": [\n \"no puede ser igual al anterior token de acceso\"\n ],\n \"You are setting the access token for the new instance\": [\n \"Est\u00E1 estableciendo el token de acceso para la nueva instancia\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"Con el m\u00E9todo de autorizaci\u00F3n externa no se har\u00E1 ninguna revisi\u00F3n por el backend del comerciante\"\n ],\n \"Set external authorization\": [\n \"Establecer autorizaci\u00F3n externa\"\n ],\n \"Set access token\": [\n \"Establecer token de acceso\"\n ],\n \"Operation in progress...\": [\n \"Operaci\u00F3n en progreso...\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"La operaci\u00F3n ser\u00E1 autom\u00E1ticamente cancelada luego de %1$s segundos\"\n ],\n \"Instances\": [\n \"Instancias\"\n ],\n \"Delete\": [\n \"Eliminar\"\n ],\n \"add new instance\": [\n \"agregar nueva instancia\"\n ],\n \"ID\": [\n \"ID\"\n ],\n \"Name\": [\n \"Nombre\"\n ],\n \"Edit\": [\n \"Editar\"\n ],\n \"Purge\": [\n \"Purgar\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"Todav\u00EDa no hay instancias, agregue m\u00E1s presionando el signo +\"\n ],\n \"Only show active instances\": [\n \"Solo mostrar instancias activas\"\n ],\n \"Active\": [\n \"Activo\"\n ],\n \"Only show deleted instances\": [\n \"Mostrar solo instancias eliminadas\"\n ],\n \"Deleted\": [\n \"Eliminado\"\n ],\n \"Show all instances\": [\n \"Mostrar todas las instancias\"\n ],\n \"All\": [\n \"Todo\"\n ],\n \"Instance \\\"%1$s\\\" (ID: %2$s) has been deleted\": [\n \"La instancia '%1$s' (ID: %2$s) fue eliminada\"\n ],\n \"Failed to delete instance\": [\n \"Fallo al eliminar instancia\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"Instance '%1$s' (ID: %2$s) ha sido deshabilitada\"\n ],\n \"Failed to purge instance\": [\n \"Fallo al purgar la instancia\"\n ],\n \"Pending KYC verification\": [\n \"Verificaci\u00F3n KYC pendiente\"\n ],\n \"Timed out\": [\n \"Expirado\"\n ],\n \"Exchange\": [\n \"Exchange\"\n ],\n \"Target account\": [\n \"Cuenta objetivo\"\n ],\n \"KYC URL\": [\n \"URL de KYC\"\n ],\n \"Code\": [\n \"C\u00F3digo\"\n ],\n \"Http Status\": [\n \"Estado http\"\n ],\n \"No pending kyc verification!\": [\n \"\u00A1No hay verificaci\u00F3n kyc pendiente!\"\n ],\n \"change value to unknown date\": [\n \"cambiar valor a fecha desconocida\"\n ],\n \"change value to empty\": [\n \"cambiar valor a vac\u00EDo\"\n ],\n \"clear\": [\n \"limpiar\"\n ],\n \"change value to never\": [\n \"cambiar valor a nunca\"\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 \"buscar productos por su descripci\u00F3n o ID\"\n ],\n \"no products found with that description\": [\n \"no se encontraron productos con esa descripci\u00F3n\"\n ],\n \"You must enter a valid product identifier.\": [\n \"Debe ingresar un identificador de producto v\u00E1lido.\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\u00A1Cantidad debe ser mayor que 0!\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"Esta cantidad excede las existencias restantes. Actualmente, solo quedan %1$s unidades sin reservar en las existencias.\"\n ],\n \"Quantity\": [\n \"Cantidad\"\n ],\n \"how many products will be added\": [\n \"cu\u00E1ntos productos ser\u00E1n agregados\"\n ],\n \"Add from inventory\": [\n \"Agregar del inventario\"\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 \"Ningun impuesto configurado para este producto.\"\n ],\n \"Amount\": [\n \"Monto\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"Impuestos pueden estar en divisas que difieren de la principal divisa usada por el comerciante.\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"Ingrese divisa y valor separado por dos puntos, e.g. &quot;USD:2.3&quot;.\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"Nombre legal del impuesto, e.g. IVA o arancel.\"\n ],\n \"add tax to the tax list\": [\n \"agregar impuesto a la lista de impuestos\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"describa y agregue un producto que no est\u00E1 en la lista de inventarios\"\n ],\n \"Add custom product\": [\n \"Agregue un producto personalizado\"\n ],\n \"Complete information of the product\": [\n \"Complete informaci\u00F3n del producto\"\n ],\n \"Image\": [\n \"Imagen\"\n ],\n \"photo of the product\": [\n \"foto del producto\"\n ],\n \"full product description\": [\n \"descripci\u00F3n completa del producto\"\n ],\n \"Unit\": [\n \"Unidad\"\n ],\n \"name of the product unit\": [\n \"nombre de la unidad del producto\"\n ],\n \"Price\": [\n \"Precio\"\n ],\n \"amount in the current currency\": [\n \"monto de la divisa actual\"\n ],\n \"Taxes\": [\n \"Impuestos\"\n ],\n \"image\": [\n \"imagen\"\n ],\n \"description\": [\n \"descripci\u00F3n\"\n ],\n \"quantity\": [\n \"cantidad\"\n ],\n \"unit price\": [\n \"precio unitario\"\n ],\n \"total price\": [\n \"precio total\"\n ],\n \"required\": [\n \"requerido\"\n ],\n \"not valid\": [\n \"no es un json v\u00E1lido\"\n ],\n \"must be greater than 0\": [\n \"debe ser mayor que 0\"\n ],\n \"not a valid json\": [\n \"no es un json v\u00E1lido\"\n ],\n \"should be in the future\": [\n \"deber\u00EDan ser en el futuro\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"plazo de reembolso no puede ser antes que el plazo de pago\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"el plazo de la transferencia bancaria no puede ser antes que el plazo de reembolso\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"el plazo de la transferencia bancaria no puede ser antes que el plazo de pago\"\n ],\n \"should have a refund deadline\": [\n \"deber\u00EDa tener un plazo de reembolso\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"reembolso autom\u00E1tico no puede ser despu\u00E9s qu el plazo de reembolso\"\n ],\n \"Manage products in order\": [\n \"Manejar productos en orden\"\n ],\n \"Manage list of products in the order.\": [\n \"Manejar lista de productos en la orden.\"\n ],\n \"Remove this product from the order.\": [\n \"Remover este producto de la orden.\"\n ],\n \"Total price\": [\n \"Precio total\"\n ],\n \"total product price added up\": [\n \"precio total de producto agregado\"\n ],\n \"Amount to be paid by the customer\": [\n \"Monto a ser pagado por el cliente\"\n ],\n \"Order price\": [\n \"Precio de la orden\"\n ],\n \"final order price\": [\n \"Precio final de la orden\"\n ],\n \"Summary\": [\n \"Resumen\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"T\u00EDtulo de la orden a ser mostrado al cliente\"\n ],\n \"Shipping and Fulfillment\": [\n \"Env\u00EDo y cumplimiento\"\n ],\n \"Delivery date\": [\n \"Fecha de entrega\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"Plazo para la entrega f\u00EDsica asegurado por el comerciante.\"\n ],\n \"Location\": [\n \"Ubicaci\u00F3n\"\n ],\n \"address where the products will be delivered\": [\n \"direcci\u00F3n a donde los productos ser\u00E1n entregados\"\n ],\n \"Fulfillment URL\": [\n \"URL de cumplimiento\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"URL al cual el usuario ser\u00E1 redirigido luego de pago exitoso.\"\n ],\n \"Taler payment options\": [\n \"Opciones de pago de Taler\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"Sobreescribir pagos por omisi\u00F3n de Taler para esta orden\"\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 \"Plazo l\u00EDmite para que el cliente pague por la oferta antes de que expire. Productos del inventario ser\u00E1n reservados hasta este plazo l\u00EDmite.\"\n ],\n \"Refund deadline\": [\n \"Plazo de reembolso\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"Tiempo hasta el cual la orden puede ser reembolsada por el comerciante.\"\n ],\n \"Wire transfer deadline\": [\n \"Plazo de la transferencia\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"Plazo para que el exchange haga la transferencia.\"\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 \"Tiempo hasta el cual la billetera ser\u00E1 autom\u00E1ticamente revisada por reembolsos win interaci\u00F3n por parte del usuario.\"\n ],\n \"Maximum deposit fee\": [\n \"M\u00E1xima tarifa de dep\u00F3sito\"\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 \"M\u00E1xima tarifa de dep\u00F3sito que el comerciante esta dispuesto a cubir para esta orden. Mayores tarifas de dep\u00F3sito deben ser cubiertas completamente por el consumidor.\"\n ],\n \"Maximum wire fee\": [\n \"M\u00E1xima tarifa de transferencia\"\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 \"d\u00EDas\"\n ],\n \"hours\": [\n \"horas\"\n ],\n \"minutes\": [\n \"minutos\"\n ],\n \"seconds\": [\n \"segundos\"\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 \"\u00A1No se encontraron \u00F3rdenes que emparejen su b\u00FAsqueda!\"\n ],\n \"duplicated\": [\n \"duplicado\"\n ],\n \"invalid format\": [\n \"formato inv\u00E1lido\"\n ],\n \"this value exceed the refundable amount\": [\n \"este monto excede el monto reembolsable\"\n ],\n \"date\": [\n \"fecha\"\n ],\n \"amount\": [\n \"monto\"\n ],\n \"reason\": [\n \"raz\u00F3n\"\n ],\n \"amount to be refunded\": [\n \"monto a ser reembolsado\"\n ],\n \"Max refundable:\": [\n \"M\u00E1ximo reembolzable:\"\n ],\n \"Reason\": [\n \"Raz\u00F3n\"\n ],\n \"Choose one...\": [\n \"Elija uno...\"\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 \"por qu\u00E9 esta orden est\u00E1 siendo reembolsada\"\n ],\n \"more information to give context\": [\n \"m\u00E1s informaci\u00F3n para dar contexto\"\n ],\n \"Contract Terms\": [\n \"T\u00E9rminos de contrato\"\n ],\n \"human-readable description of the whole purchase\": [\n \"descripci\u00F3n legible de toda la compra\"\n ],\n \"total price for the transaction\": [\n \"precio total de la transacci\u00F3n\"\n ],\n \"URL for this purchase\": [\n \"URL para esta compra\"\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 en\"\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 \"Gratis\"\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 \"Siguiente\"\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 \"V\u00E1lido hasta\"\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 \"Asunto\"\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"Estado de orden\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"precio unitario\"\n ],\n \"If specified, this template will create order with the same price\": [\n \"\"\n ],\n \"Minimum age\": [\n \"Edad m\u00EDnima\"\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\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 \"New order for template\": [\n \"cargar viejas transferencias\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"Estado de orden\"\n ],\n \"could not create order from template\": [\n \"No se pudo create el reembolso\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"Monto reembolzado\"\n ],\n \"Default amount\": [\n \"Monto reembolzado\"\n ],\n \"Default summary\": [\n \"Estado de orden\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"cargar nuevas transferencias\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"create qr code for the template\": [\n \"No se pudo create el reembolso\"\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 \"URL\"\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 \"eliminar transferencia seleccionada de la base de datos\"\n ],\n \"load more transfer after the last one\": [\n \"cargue m\u00E1s transferencia luego de la \u00FAltima\"\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 \"debe ser 1 o mayor\"\n ],\n \"max 7 lines\": [\n \"m\u00E1ximo 7 l\u00EDneas\"\n ],\n \"change authorization configuration\": [\n \"cambiar configuraci\u00F3n de autorizaci\u00F3n\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"Necesita completar campos marcados y escoger un m\u00E9todo de autorizaci\u00F3n\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"Esta no es una direcci\u00F3n de bitcoin v\u00E1lida.\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"Esta no es una direcci\u00F3n de Ethereum v\u00E1lida.\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"N\u00FAmeros IBAN usualmente tienen m\u00E1s de 4 d\u00EDgitos\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"N\u00FAmero IBAN usualmente tienen menos de 34 d\u00EDgitos\"\n ],\n \"IBAN country code not found\": [\n \"C\u00F3digo IBAN de pa\u00EDs no encontrado\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"N\u00FAmero IBAN no es v\u00E1lido, la suma de verificaci\u00F3n es incorrecta\"\n ],\n \"Target type\": [\n \"Tipo objetivo\"\n ],\n \"Method to use for wire transfer\": [\n \"M\u00E9todo a usar para la transferencia\"\n ],\n \"Routing\": [\n \"Enrutamiento\"\n ],\n \"Routing number.\": [\n \"N\u00FAmero de enrutamiento.\"\n ],\n \"Account\": [\n \"Cuenta\"\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 \"Interfaz de pago unificado.\"\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 \"URL de sitio web\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"Cuenta bancaria\"\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 \"Jurisdicci\u00F3n para disputas legales con el comerciante.\"\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 \"ID de instancia\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"Limpiar el token de autorizaci\u00F3n significa acceso p\u00FAblico a la instancia\"\n ],\n \"Manage access token\": [\n \"Administrar token de acceso\"\n ],\n \"Failed to create instance\": [\n \"Fallo al 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 \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"Recibimos el mensaje %1$s desde %2$s\"\n ],\n \"Response from server is unreadable, http status: %1$s\": [\n \"\"\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 \"agregar elemento a la lista\"\n ],\n \"add\": [\n \"Agregar\"\n ],\n \"Deleting\": [\n \"Borrando\"\n ],\n \"Changing\": [\n \"Cambiando\"\n ],\n \"Order ID\": [\n \"ID de pedido\"\n ],\n \"Payment URL\": [\n \"URL 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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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 \"Close\": [\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 \"not valid\": [\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 \"just letters and numbers from 2 to 7\": [\n \"\"\n ],\n \"size of the key should be 32\": [\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 \"Fixed summary\": [\n \"\"\n ],\n \"If specified, this template will create order with the same summary\": [\n \"\"\n ],\n \"Fixed price\": [\n \"\"\n ],\n \"If specified, this template will create order with the same price\": [\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 \"Verification algorithm\": [\n \"\"\n ],\n \"Algorithm to use to verify transaction in offline mode\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"generate random secret key\": [\n \"\"\n ],\n \"random\": [\n \"\"\n ],\n \"show secret key\": [\n \"\"\n ],\n \"hide secret key\": [\n \"\"\n ],\n \"hide\": [\n \"\"\n ],\n \"show\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"New order for template\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.\": [\n \"\"\n ],\n \"Fixed amount\": [\n \"\"\n ],\n \"Default amount\": [\n \"\"\n ],\n \"Default summary\": [\n \"\"\n ],\n \"Print\": [\n \"\"\n ],\n \"Setup TOTP\": [\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 \"create qr code for the template\": [\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 \"Diagnostic from %1$s is '%2$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 \"Server response with an error code\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Response from server is unreadable, http status: %1$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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 useMerchantApiContext\n} from \"@gnu-taler/web-util/browser\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface InstanceBankAccountFilter {\n}\n\nexport function revalidateInstanceBankAccounts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listBankAccounts\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceBankAccounts() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n // const [offset, setOffset] = useState<string | undefined>();\n\n async function fetcher([token, _bid]: [AccessToken, string]) {\n return await instance.listBankAccounts(token, {\n // limit: PAGINATED_LIST_REQUEST,\n // offset: bid,\n // order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listBankAccounts\">,\n TalerHttpError\n >([session.token, \"offset\", \"listBankAccounts\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n // return buildPaginatedResult(data.body.accounts, offset, setOffset, (d) => d.h_wire)\n return data;\n}\n\nexport function revalidateBankAccountDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getBankAccountDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useBankAccountDetails(h_wire: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([token, wireId]: [AccessToken, string]) {\n return await instance.getBankAccountDetails(token, wireId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getBankAccountDetails\">,\n TalerHttpError\n >([session.token, h_wire, \"getBankAccountDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Codec,\n buildCodecForObject,\n codecForAbsoluteTime,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n} from \"@gnu-taler/taler-util\";\nimport { buildStorageKey, useLocalStorage } from \"@gnu-taler/web-util/browser\";\n\nexport interface Preferences {\n advanceOrderMode: boolean;\n hideKycUntil: AbsoluteTime;\n hideMissingAccountUntil: AbsoluteTime;\n dateFormat: \"ymd\" | \"dmy\" | \"mdy\";\n}\n\nconst defaultSettings: Preferences = {\n advanceOrderMode: false,\n hideKycUntil: AbsoluteTime.never(),\n hideMissingAccountUntil: AbsoluteTime.never(),\n dateFormat: \"ymd\",\n};\n\nexport const codecForPreferences = (): Codec<Preferences> =>\n buildCodecForObject<Preferences>()\n .property(\"advanceOrderMode\", codecForBoolean())\n .property(\"hideKycUntil\", codecForAbsoluteTime)\n .property(\"hideMissingAccountUntil\", codecForAbsoluteTime)\n .property(\n \"dateFormat\",\n codecForEither(\n codecForConstString(\"ymd\"),\n codecForConstString(\"dmy\"),\n codecForConstString(\"mdy\"),\n ),\n )\n .build(\"Preferences\");\n\nconst PREFERENCES_KEY = buildStorageKey(\n \"merchant-preferences\",\n codecForPreferences(),\n);\n\nexport function usePreference(): [\n Readonly<Preferences>,\n <T extends keyof Preferences>(key: T, value: Preferences[T]) => void,\n (s: Preferences) => void,\n] {\n const { value, update } = useLocalStorage(PREFERENCES_KEY, defaultSettings);\n function updateField<T extends keyof Preferences>(k: T, v: Preferences[T]) {\n const newValue = { ...value, [k]: v };\n update(newValue);\n }\n\n return [value, updateField, update];\n}\n\nexport function dateFormatForSettings(s: Preferences): string {\n switch (s.dateFormat) {\n case \"ymd\":\n return \"yyyy/MM/dd\";\n case \"dmy\":\n return \"dd/MM/yyyy\";\n case \"mdy\":\n return \"MM/dd/yyyy\";\n }\n}\n\nexport function datetimeFormatForSettings(s: Preferences): string {\n return dateFormatForSettings(s) + \" HH:mm:ss\";\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 FacadeCredentials,\n HttpStatusCode,\n OperationFail,\n OperationOk,\n TalerError,\n TalerMerchantApi,\n TalerRevenueHttpClient,\n assertUnreachable,\n opFixedSuccess,\n} from \"@gnu-taler/taler-util\";\nimport {\n BrowserFetchHttpLib,\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = TalerMerchantApi.AccountAddDetails;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateValidator({ onConfirm, onBack }: Props): VNode {\n const { lib: api } = useSessionContext();\n const { state } = useSessionContext();\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={async (request: Entity) => {\n const revenueAPI = !request.credit_facade_url\n ? undefined\n : new URL(\"./\", request.credit_facade_url);\n\n if (revenueAPI) {\n const resp = await testRevenueAPI(\n revenueAPI,\n request.credit_facade_credentials,\n );\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case TestRevenueErrorType.NO_CONFIG: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`,\n });\n return;\n }\n case TestRevenueErrorType.CLIENT_BAD_REQUEST: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Server replied with \"bad request\".`,\n });\n return;\n }\n case TestRevenueErrorType.UNAUTHORIZED: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Unauthorized, try with another credentials.`,\n });\n return;\n }\n case TestRevenueErrorType.NOT_FOUND: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Check facade URL, server replied with \"not found\".`,\n });\n return;\n }\n case TestRevenueErrorType.GENERIC_ERROR: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: resp.detail.hint,\n });\n return;\n }\n default: {\n assertUnreachable(resp.case);\n }\n }\n }\n }\n\n return api.instance\n .addBankAccount(state.token, request)\n .then(() => {\n onConfirm();\n })\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create account`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n\nexport enum TestRevenueErrorType {\n NO_CONFIG,\n CLIENT_BAD_REQUEST,\n UNAUTHORIZED,\n NOT_FOUND,\n GENERIC_ERROR,\n}\n\nexport async function testRevenueAPI(\n revenueAPI: URL,\n creds: FacadeCredentials | undefined,\n): Promise<OperationOk<void> | OperationFail<TestRevenueErrorType>> {\n const api = new TalerRevenueHttpClient(\n revenueAPI.href,\n new BrowserFetchHttpLib(),\n );\n const auth =\n creds === undefined\n ? undefined\n : creds.type === \"none\"\n ? undefined\n : creds.type === \"basic\"\n ? {\n username: creds.username,\n password: creds.password,\n }\n : undefined;\n\n try {\n const config = await api.getConfig(auth);\n\n if (config.type === \"fail\") {\n switch (config.case) {\n case HttpStatusCode.Unauthorized: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.UNAUTHORIZED,\n detail: {\n code: 1,\n },\n };\n }\n case HttpStatusCode.NotFound: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.NO_CONFIG,\n detail: {\n code: 1,\n },\n };\n }\n }\n }\n\n const history = await api.getHistory(auth);\n\n if (history.type === \"fail\") {\n switch (history.case) {\n case HttpStatusCode.BadRequest: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.CLIENT_BAD_REQUEST,\n detail: {\n code: 1,\n },\n };\n }\n case HttpStatusCode.Unauthorized: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.UNAUTHORIZED,\n detail: {\n code: 1,\n },\n };\n }\n case HttpStatusCode.NotFound: {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.NOT_FOUND,\n detail: {\n code: 1,\n },\n };\n }\n }\n }\n } catch (err) {\n if (err instanceof TalerError) {\n return {\n type: \"fail\",\n case: TestRevenueErrorType.GENERIC_ERROR,\n detail: err.errorDetail,\n };\n }\n }\n\n return opFixedSuccess(undefined);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, 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 { InputPaytoForm } from \"../../../../components/form/InputPaytoForm.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\nimport { safeConvertURL } from \"../update/UpdatePage.js\";\n\ntype Entity = TalerMerchantApi.AccountAddDetails & { repeatPassword: string };\n\ninterface Props {\n onCreate: (d: TalerMerchantApi.AccountAddDetails) => Promise<void>;\n onBack?: () => void;\n}\n\nconst accountAuthType = [\"none\", \"basic\"];\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>({});\n const facadeURL = safeConvertURL(state.credit_facade_url);\n const errors: FormErrors<Entity> = {\n payto_uri: !state.payto_uri ? i18n.str`required` : undefined,\n\n credit_facade_credentials: !state.credit_facade_credentials\n ? undefined\n : undefinedIfEmpty({\n username:\n state.credit_facade_credentials.type === \"basic\" &&\n !state.credit_facade_credentials.username\n ? i18n.str`required`\n : undefined,\n password:\n state.credit_facade_credentials.type === \"basic\" &&\n !state.credit_facade_credentials.password\n ? i18n.str`required`\n : undefined,\n }),\n credit_facade_url: !state.credit_facade_url\n ? undefined\n : !facadeURL\n ? i18n.str`Invalid url`\n : !facadeURL.href.endsWith(\"/\")\n ? i18n.str`URL should end with a '/'`\n : facadeURL.searchParams.size > 0\n ? i18n.str`URL should not contain params`\n : facadeURL.hash\n ? i18n.str`URL should not hash param`\n : undefined,\n repeatPassword: !state.credit_facade_credentials\n ? undefined\n : state.credit_facade_credentials.type === \"basic\" &&\n (!state.credit_facade_credentials.password ||\n state.credit_facade_credentials.password !== state.repeatPassword)\n ? i18n.str`is not the same`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as Record<string, unknown>)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n const credit_facade_url = !state.credit_facade_url\n ? undefined\n : facadeURL?.href;\n const credit_facade_credentials:\n | TalerMerchantApi.FacadeCredentials\n | undefined =\n credit_facade_url == undefined\n ? undefined\n : state.credit_facade_credentials?.type === \"basic\"\n ? {\n type: \"basic\",\n password: state.credit_facade_credentials.password,\n username: state.credit_facade_credentials.username,\n }\n : {\n type: \"none\",\n };\n\n return onCreate({\n payto_uri: state.payto_uri!,\n credit_facade_credentials,\n credit_facade_url,\n });\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 <InputPaytoForm<Entity>\n name=\"payto_uri\"\n label={i18n.str`Account`}\n />\n <Input<Entity>\n name=\"credit_facade_url\"\n label={i18n.str`Account info URL`}\n help=\"https://bank.com\"\n expand\n tooltip={i18n.str`From where the merchant can download information about incoming wire transfers to this account`}\n />\n <InputSelector\n name=\"credit_facade_credentials.type\"\n label={i18n.str`Auth type`}\n tooltip={i18n.str`Choose the authentication type for the account info URL`}\n values={accountAuthType}\n toStr={(str) => {\n if (str === \"none\") return \"Without authentication\";\n return \"Username and password\";\n }}\n />\n {state.credit_facade_credentials?.type === \"basic\" ? (\n <Fragment>\n <Input\n name=\"credit_facade_credentials.username\"\n label={i18n.str`Username`}\n tooltip={i18n.str`Username to access the account information.`}\n />\n <Input\n name=\"credit_facade_credentials.password\"\n inputType=\"password\"\n label={i18n.str`Password`}\n tooltip={i18n.str`Password to access the account information.`}\n />\n <Input\n name=\"repeatPassword\"\n inputType=\"password\"\n label={i18n.str`Repeat password`}\n />\n </Fragment>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 {\n parsePaytoUri,\n PaytoUriGeneric,\n stringifyPaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\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\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nexport interface Props<T> extends InputProps<T> {\n isValid?: (e: any) => boolean;\n}\n\n// type Entity = PaytoUriGeneric\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 // params of the payto uri\n params: {\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_path1(\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_path1(\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 * validates\n * bank.com/\n * bank.com\n * bank.com/path\n * bank.com/path/subpath/\n */\nconst DOMAIN_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\\.[a-zA-Z]{2,})+(\\/[a-zA-Z0-9-.]+)*\\/?$/\n\nfunction validateTalerBank_path1(\n addr: string,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): string | undefined {\n console.log(addr, DOMAIN_REGEX.test(addr))\n try {\n const valid = DOMAIN_REGEX.test(addr);\n if (valid) return undefined;\n } catch (e) {\n console.log(e);\n }\n return i18n.str`This is not a valid host.`;\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_path1(\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: Entity = {\n target: noTargetValue,\n params: {},\n};\n\nexport function InputPaytoForm<T>({\n name,\n readonly,\n label,\n tooltip,\n}: Props<keyof T>): VNode {\n const { value: initialValueStr, onChange } = useField<T>(name);\n\n const initialPayto = parsePaytoUri(initialValueStr ?? \"\");\n const paths = !initialPayto ? [] : initialPayto.targetPath.split(\"/\");\n const initialPath1 = paths.length >= 1 ? paths[0] : undefined;\n const initialPath2 = paths.length >= 2 ? paths[1] : undefined;\n const initial: Entity =\n initialPayto === undefined\n ? defaultTarget\n : {\n target: initialPayto.targetType,\n params: initialPayto.params,\n path1: initialPath1,\n path2: initialPath2,\n };\n const [value, setValue] = useState<Partial<Entity>>(initial);\n\n const { i18n } = useTranslationContext();\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_path1(value.path1, i18n)\n : value.target === \"bitcoin\"\n ? validateBitcoin_path1(value.path1, i18n)\n : value.target === \"ethereum\"\n ? validateEthereum_path1(value.path1, i18n)\n : value.target === \"x-taler-bank\"\n ? validateTalerBank_path1(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 params: undefinedIfEmpty({\n \"receiver-name\": !value.params?.[\"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 path1WithSlash = value.path1 && !value.path1.endsWith(\"/\") ? value.path1 + \"/\" : value.path1\n const str =\n hasErrors || !value.target\n ? undefined\n : stringifyPaytoUri({\n targetType: value.target,\n targetPath: value.path2\n ? `${path1WithSlash}${value.path2}`\n : value.path1 ?? \"\",\n params: value.params ?? ({} as any),\n isKnown: false,\n });\n useEffect(() => {\n onChange(str as any);\n }, [str]);\n\n // const submit = useCallback((): void => {\n // // const accounts: TalerMerchantApi.AccountAddDetails[] = paytos;\n // // const alreadyExists =\n // // accounts.findIndex((x) => x.payto_uri === paytoURL) !== -1;\n // // if (!alreadyExists) {\n // const newValue: TalerMerchantApi.AccountAddDetails = {\n // payto_uri: paytoURL,\n // };\n // if (value.auth) {\n // if (value.auth.url) {\n // newValue.credit_facade_url = value.auth.url;\n // }\n // if (value.auth.type === \"none\") {\n // newValue.credit_facade_credentials = {\n // type: \"none\",\n // };\n // }\n // if (value.auth.type === \"basic\") {\n // newValue.credit_facade_credentials = {\n // type: \"basic\",\n // username: value.auth.username ?? \"\",\n // password: value.auth.password ?? \"\",\n // };\n // }\n // }\n // onChange(newValue 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={setValue}\n >\n <InputSelector<Entity>\n name=\"target\"\n label={i18n.str`Account type`}\n tooltip={i18n.str`Method to use for wire transfer`}\n values={targets}\n readonly={readonly}\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 readonly={readonly}\n tooltip={i18n.str`Routing number.`}\n />\n <Input<Entity>\n name=\"path2\"\n label={i18n.str`Account`}\n readonly={readonly}\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 readonly={readonly}\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`IBAN`}\n tooltip={i18n.str`International Bank Account Number.`}\n readonly={readonly}\n placeholder=\"DE1231231231\"\n inputExtra={{ style: { textTransform: \"uppercase\" } }}\n />\n </Fragment>\n )}\n {value.target === \"upi\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n readonly={readonly}\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 readonly={readonly}\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 readonly={readonly}\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 readonly={readonly}\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 readonly={readonly}\n label={i18n.str`Host`}\n fromStr={(v) => {\n if (v.startsWith(\"http\")) {\n try {\n const url = new URL(v);\n return url.host + url.pathname;\n } catch {\n return v;\n }\n }\n return v;\n }}\n tooltip={i18n.str`Bank host.`}\n help={<Fragment>\n <div><i18n.Translate>Without scheme and may include subpath:</i18n.Translate></div>\n <div>bank.com/</div>\n <div>bank.com/path/subpath/</div>\n </Fragment>}\n />\n <Input<Entity>\n name=\"path2\"\n readonly={readonly}\n label={i18n.str`Account`}\n tooltip={i18n.str`Bank account.`}\n />\n </Fragment>\n )}\n\n {/**\n * Show additional fields apart from the payto\n */}\n {value.target !== noTargetValue && (\n <Fragment>\n <Input\n name=\"params.receiver-name\"\n readonly={readonly}\n label={i18n.str`Owner's name`}\n tooltip={i18n.str`Legal name of the person holding the account.`}\n />\n </Fragment>\n )}\n </FormProvider>\n </InputGroup>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, 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 { InputPaytoForm } from \"../../../../components/form/InputPaytoForm.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ntype Entity = TalerMerchantApi.BankAccountEntry & WithId;\n\nconst accountAuthType = [\"unedit\", \"none\", \"basic\"];\ninterface Props {\n onUpdate: (d: TalerMerchantApi.AccountPatchDetails) => Promise<void>;\n onBack?: () => void;\n account: Entity;\n}\n\nexport function UpdatePage({ account, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] =\n useState<Partial<TalerMerchantApi.AccountPatchDetails>>(account);\n\n // @ts-expect-error \"unedit\" is fine since is part of the accountAuthType values\n if (state.credit_facade_credentials?.type === \"unedit\") {\n // we use this to set creds to undefined but server don't get this type\n state.credit_facade_credentials = undefined;\n }\n\n const facadeURL = safeConvertURL(state.credit_facade_url);\n\n const errors: FormErrors<TalerMerchantApi.AccountPatchDetails> = {\n credit_facade_url: !state.credit_facade_url\n ? undefined\n : !facadeURL\n ? i18n.str`Invalid url`\n : !facadeURL.href.endsWith(\"/\")\n ? i18n.str`URL should end with a '/'`\n : facadeURL.searchParams.size > 0\n ? i18n.str`URL should not contain params`\n : facadeURL.hash\n ? i18n.str`URL should not hash param`\n : undefined,\n credit_facade_credentials: undefinedIfEmpty({\n username:\n state.credit_facade_credentials?.type !== \"basic\"\n ? undefined\n : !state.credit_facade_credentials.username\n ? i18n.str`required`\n : undefined,\n\n password:\n state.credit_facade_credentials?.type !== \"basic\"\n ? undefined\n : !state.credit_facade_credentials.password\n ? i18n.str`required`\n : undefined,\n\n repeatPassword:\n state.credit_facade_credentials?.type !== \"basic\"\n ? undefined\n : !(state.credit_facade_credentials as any).repeatPassword\n ? i18n.str`required`\n : (state.credit_facade_credentials as any).repeatPassword !==\n state.credit_facade_credentials.password\n ? i18n.str`doesn't match`\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 const credit_facade_url = !state.credit_facade_url\n ? undefined\n : facadeURL?.href;\n\n const credit_facade_credentials:\n | TalerMerchantApi.FacadeCredentials\n | undefined =\n credit_facade_url == undefined ||\n state.credit_facade_credentials === undefined\n ? undefined\n : state.credit_facade_credentials.type === \"basic\"\n ? {\n type: \"basic\",\n password: state.credit_facade_credentials.password,\n username: state.credit_facade_credentials.username,\n }\n : {\n type: \"none\",\n };\n\n return onUpdate({ credit_facade_credentials, credit_facade_url });\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 Account: <b>{account.id.substring(0, 8)}...</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 <InputPaytoForm<Entity>\n name=\"payto_uri\"\n label={i18n.str`Account`}\n readonly\n />\n <Input<Entity>\n name=\"credit_facade_url\"\n label={i18n.str`Account info URL`}\n help=\"https://bank.com\"\n expand\n tooltip={i18n.str`From where the merchant can download information about incoming wire transfers to this account`}\n />\n <InputSelector\n name=\"credit_facade_credentials.type\"\n label={i18n.str`Auth type`}\n tooltip={i18n.str`Choose the authentication type for the account info URL`}\n values={accountAuthType}\n toStr={(str) => {\n if (str === \"none\") return \"Without authentication\";\n if (str === \"basic\") return \"With authentication\";\n return \"Do not change\";\n }}\n />\n {state.credit_facade_credentials?.type === \"basic\" ? (\n <Fragment>\n <Input\n name=\"credit_facade_credentials.username\"\n label={i18n.str`Username`}\n tooltip={i18n.str`Username to access the account information.`}\n />\n <Input\n name=\"credit_facade_credentials.password\"\n inputType=\"password\"\n label={i18n.str`Password`}\n tooltip={i18n.str`Password to access the account information.`}\n />\n <Input\n name=\"credit_facade_credentials.repeatPassword\"\n inputType=\"password\"\n label={i18n.str`Repeat password`}\n />\n </Fragment>\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//TODO: move to utils\nexport function safeConvertURL(s?: string): URL | undefined {\n if (!s) return 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceBankAccounts } from \"../../../../hooks/bank.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\n\nexport default function ListOtpDevices({\n onCreate,\n onSelect,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib: api } = useSessionContext();\n const { state } = useSessionContext();\n const result = useInstanceBankAccounts();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n {result.body.accounts.length < 1 &&\n <NotificationCard notification={{\n type: \"WARN\",\n message: i18n.str`You need to associate a bank account to receive revenue.`,\n description: i18n.str`Without this the merchant backend will refuse to create new orders.`\n }} />\n }\n <ListPage\n devices={result.body.accounts}\n // onLoadMoreBefore={\n // result.isFirstPage ? undefined: result.loadFirst\n // }\n // onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.h_wire);\n }}\n onDelete={(e: TalerMerchantApi.BankAccountSummaryEntry) => {\n return api.instance.deleteBankAccount(state.token, e.h_wire)\n .then(() =>\n setNotif({\n message: i18n.str`bank account delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the bank account`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n }\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { Link, route } from \"preact-router\";\nimport { NotificationCard } from \"../../components/menu/index.js\";\nimport {\n cleanAllCache,\n DEFAULT_ADMIN_USERNAME,\n useSessionContext,\n} from \"../../context/session.js\";\nimport InstanceCreatePage from \"../../paths/admin/create/index.js\";\nimport { InstancePaths } from \"../../Routing.js\";\n\nexport function NotFoundPage(): VNode {\n return (\n <div>\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\nexport function NotFoundPageOrAdminCreate(): VNode {\n const { state } = useSessionContext();\n const { i18n } = useTranslationContext();\n if (state.isAdmin && state.instance === DEFAULT_ADMIN_USERNAME) {\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_ADMIN_USERNAME}\n onConfirm={() => {\n // we need to clear everything since we take some\n // 404 as \"default instance don't exist\"\n cleanAllCache()\n route(InstancePaths.bank_list);\n }}\n />\n </Fragment>\n );\n }\n\n return <NotFoundPage />\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n devices: TalerMerchantApi.BankAccountSummaryEntry[];\n // onLoadMoreBefore?: () => void;\n // onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: TalerMerchantApi.BankAccountSummaryEntry) => void;\n onSelect: (e: TalerMerchantApi.BankAccountSummaryEntry) => void;\n}\n\nexport function ListPage({\n devices,\n onCreate,\n onDelete,\n onSelect,\n // onLoadMoreBefore,\n // onLoadMoreAfter,\n}: Props): VNode {\n\n return (\n <section class=\"section is-main-section\">\n <CardTable\n accounts={devices.map((o) => ({\n ...o,\n id: String(o.h_wire),\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { parsePaytoUri, PaytoType, PaytoUri, PaytoUriBitcoin, PaytoUriIBAN, PaytoUriTalerBank, PaytoUriUnknown, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\n\ntype Entity = TalerMerchantApi.BankAccountSummaryEntry;\n\ninterface Props {\n accounts: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onCreate: () => void;\n}\n\nexport function CardTable({\n accounts,\n onCreate,\n onDelete,\n onSelect,\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>Bank accounts</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 accounts`}\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 {accounts.length > 0 ? (\n <Table\n accounts={accounts}\n onDelete={onDelete}\n onSelect={onSelect}\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 accounts: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n}\n\nfunction Table({\n accounts,\n onDelete,\n onSelect,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const emptyList: Record<PaytoType | \"unknown\", { parsed: PaytoUri, acc: Entity }[]> = { \"bitcoin\": [], \"x-taler-bank\": [], \"iban\": [], \"unknown\": [], }\n const accountsByType = accounts.reduce((prev, acc) => {\n const parsed = parsePaytoUri(acc.payto_uri)\n if (!parsed) return prev //skip\n if (parsed.targetType !== \"bitcoin\" && parsed.targetType !== \"x-taler-bank\" && parsed.targetType !== \"iban\") {\n prev[\"unknown\"].push({ parsed, acc })\n } else {\n prev[parsed.targetType].push({ parsed, acc })\n }\n return prev\n }, emptyList)\n\n const bitcoinAccounts = accountsByType[\"bitcoin\"]\n const talerbankAccounts = accountsByType[\"x-taler-bank\"]\n const ibanAccounts = accountsByType[\"iban\"]\n const unkownAccounts = accountsByType[\"unknown\"]\n\n\n return (\n <Fragment>\n\n {bitcoinAccounts.length > 0 && <div class=\"table-container\">\n <p class=\"card-header-title\"><i18n.Translate>Bitcoin type accounts</i18n.Translate></p>\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Address</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sewgit 1</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sewgit 2</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {bitcoinAccounts.map(({ parsed, acc }, idx) => {\n const ac = parsed as PaytoUriBitcoin\n return (\n <tr key={idx}>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.targetPath}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.segwitAddrs[0]}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.segwitAddrs[1]}\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 accounts from the database`}\n onClick={() => onDelete(acc)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>}\n\n\n\n {talerbankAccounts.length > 0 && <div class=\"table-container\">\n <p class=\"card-header-title\"><i18n.Translate>Taler type accounts</i18n.Translate></p>\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Host</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Account name</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {talerbankAccounts.map(({ parsed, acc }, idx) => {\n const ac = parsed as PaytoUriTalerBank\n return (\n <tr key={idx}>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.host}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.account}\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 accounts from the database`}\n onClick={() => onDelete(acc)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>}\n\n {ibanAccounts.length > 0 && <div class=\"table-container\">\n <p class=\"card-header-title\"><i18n.Translate>IBAN type accounts</i18n.Translate></p>\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Account name</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>IBAN</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>BIC</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {ibanAccounts.map(({ parsed, acc }, idx) => {\n const ac = parsed as PaytoUriIBAN\n return (\n <tr key={idx}>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.params[\"receiver-name\"]}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.iban}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.bic ?? \"\"}\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 accounts from the database`}\n onClick={() => onDelete(acc)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>}\n\n {unkownAccounts.length > 0 && <div class=\"table-container\">\n <p class=\"card-header-title\"><i18n.Translate>Other type accounts</i18n.Translate></p>\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Type</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Path</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {unkownAccounts.map(({ parsed, acc }, idx) => {\n const ac = parsed as PaytoUriUnknown\n return (\n <tr key={idx}>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.targetType}\n </td>\n <td\n onClick={(): void => onSelect(acc)}\n style={{ cursor: \"pointer\" }}\n >\n {ac.targetPath}\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 accounts from the database`}\n onClick={() => onDelete(acc)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>}\n </Fragment>\n\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-magnify mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no accounts 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useBankAccountDetails } from \"../../../../hooks/bank.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { TestRevenueErrorType, testRevenueAPI } from \"../create/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = TalerMerchantApi.AccountPatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n bid: string;\n}\nexport default function UpdateValidator({\n bid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const { lib: api } = useSessionContext();\n const { state } = useSessionContext();\n const result = useBankAccountDetails(bid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n account={{ ...result.body, id: bid }}\n onBack={onBack}\n onUpdate={async (request) => {\n const revenueAPI = !request.credit_facade_url\n ? undefined\n : new URL(\"./\", request.credit_facade_url);\n\n if (revenueAPI) {\n const resp = await testRevenueAPI(\n revenueAPI,\n request.credit_facade_credentials,\n );\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case TestRevenueErrorType.NO_CONFIG: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`,\n });\n return;\n }\n case TestRevenueErrorType.CLIENT_BAD_REQUEST: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Server replied with \"bad request\".`,\n });\n return;\n }\n case TestRevenueErrorType.UNAUTHORIZED: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Unauthorized, try with another credentials.`,\n });\n return;\n }\n case TestRevenueErrorType.NOT_FOUND: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: i18n.str`Check facade URL, server replied with \"not found\".`,\n });\n return;\n }\n case TestRevenueErrorType.GENERIC_ERROR: {\n setNotif({\n message: i18n.str`Could not create account`,\n type: \"ERROR\",\n description: resp.detail.hint,\n });\n return;\n }\n default: {\n assertUnreachable(resp.case)\n }\n }\n }\n }\n return api.instance.updateBankAccount(state.token, bid, request)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: i18n.str`could not update account`,\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { useInstanceKYCDetails } from \"../../../../hooks/instance.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n}\n\nexport default function ListKYC(_p: Props): VNode {\n const result = useInstanceKYCDetails();\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n /**\n * This component just render known kyc requirements.\n * If query fail then is safe to hide errors.\n */\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.GatewayTimeout: {\n return <div />\n }\n case HttpStatusCode.BadGateway: {\n const status = result.body;\n\n if (!status) {\n return <div>no kyc required</div>;\n }\n return <ListPage status={status} />;\n\n }\n case HttpStatusCode.ServiceUnavailable: {\n return <div />\n }\n case HttpStatusCode.Unauthorized: {\n return <div />\n }\n case HttpStatusCode.NotFound: {\n return <div />;\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n const status = result.body;\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\n\nexport interface Props {\n status: TalerMerchantApi.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: TalerMerchantApi.MerchantAccountKycRedirect[];\n}\n\ninterface TimedOutTableProps {\n entries: TalerMerchantApi.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>Reason</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {entries.map((e, i) => {\n if (e.kyc_url === undefined) {\n // blocked by AML\n return (\n <tr key={i}>\n <td>{e.exchange_url}</td>\n <td>{e.payto_uri}</td>\n <td>\n {e.aml_status === 1 ? (\n <i18n.Translate>\n There is an anti-money laundering process pending to\n complete.\n </i18n.Translate>\n ) : (\n <i18n.Translate>\n The account is frozen due to the anti-money laundering\n rules. Contact the exchange service provider for further\n instructions.\n </i18n.Translate>\n )}\n </td>\n </tr>\n );\n } else {\n // blocked by KYC\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 <i18n.Translate>\n Pending KYC process, click here to complete\n </i18n.Translate>\n </a>\n </td>\n </tr>\n );\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceDetails } from \"../../../../hooks/instance.js\";\nimport { useInstanceProducts } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = {\n request: TalerMerchantApi.PostOrderRequest;\n response: TalerMerchantApi.PostOrderResponse;\n};\ninterface Props {\n onBack?: () => void;\n onConfirm: (id: string) => void;\n}\nexport default function OrderCreate({\n onConfirm,\n onBack,\n}: Props): VNode {\n const { lib } = useSessionContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { state } = useSessionContext();\n const detailsResult = useInstanceDetails();\n const inventoryResult = useInstanceProducts();\n\n if (!detailsResult) return <Loading />\n if (detailsResult instanceof TalerError) {\n return <ErrorLoadingMerchant error={detailsResult} />\n }\n if (detailsResult.type === \"fail\") {\n switch (detailsResult.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n default: {\n assertUnreachable(detailsResult);\n }\n }\n }\n if (!inventoryResult) return <Loading />\n if (inventoryResult instanceof TalerError) {\n return <ErrorLoadingMerchant error={inventoryResult} />\n }\n if (inventoryResult.type === \"fail\") {\n switch (inventoryResult.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(inventoryResult);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <CreatePage\n onBack={onBack}\n onCreate={(request: TalerMerchantApi.PostOrderRequest) => {\n lib.instance.createOrder(state.token, request)\n .then((r) => {\n if (r.type === \"ok\") {\n return onConfirm(r.body.order_id)\n } else {\n setNotif({\n message: \"could not create order\",\n type: \"ERROR\",\n });\n }\n })\n .catch((error) => {\n setNotif({\n message: \"could not create order\",\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n instanceConfig={detailsResult.body}\n instanceInventory={inventoryResult.body}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, OperationOk, TalerHttpError, TalerMerchantApi, TalerMerchantManagementErrorsByMethod, TalerMerchantManagementResultByMethod, opFixedSuccess } from \"@gnu-taler/taler-util\";\nimport { useState } from \"preact/hooks\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\ntype ProductWithId = TalerMerchantApi.ProductDetail & { id: string, serial: number };\nfunction notUndefined(c: ProductWithId | undefined): c is ProductWithId {\n return c !== undefined;\n}\n\nexport function revalidateInstanceProducts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listProductsWithId\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceProducts() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n const [offset, setOffset] = useState<number | undefined>();\n\n async function fetcher([token, bid]: [AccessToken, number]) {\n const list = await instance.listProducts(token, {\n limit: PAGINATED_LIST_REQUEST,\n offset: bid === undefined ? undefined: String(bid),\n order: \"dec\",\n });\n if (list.type !== \"ok\") {\n return list;\n }\n const all: Array<ProductWithId | undefined> = await Promise.all(\n list.body.products.map(async (c) => {\n const r = await instance.getProductDetails(token, c.product_id);\n if (r.type === \"fail\") {\n return undefined;\n }\n return { ...r.body, id: c.product_id, serial: c.product_serial };\n }),\n );\n const products = all.filter(notUndefined);\n\n return opFixedSuccess({ products });\n }\n\n const { data, error } = useSWR<\n OperationOk<{ products: ProductWithId[] }> |\n TalerMerchantManagementErrorsByMethod<\"listProducts\">,\n TalerHttpError\n >([session.token, offset, \"listProductsWithId\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.products, offset, setOffset, (d) => d.serial)\n}\n\nexport function revalidateProductDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getProductDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useProductDetails(productId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([pid, token]: [string, AccessToken]) {\n return await instance.getProductDetails(token, pid);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getProductDetails\">,\n TalerHttpError\n >([productId, session.token, \"getProductDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, OperationOk, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface InstanceWebhookFilter {\n}\n\nexport function revalidateInstanceWebhooks() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listWebhooks\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceWebhooks() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n // const [offset, setOffset] = useState<string | undefined>();\n\n async function fetcher([token, _bid]: [AccessToken, string]) {\n return await instance.listWebhooks(token, {\n // limit: PAGINATED_LIST_REQUEST,\n // offset: bid,\n // order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listWebhooks\">,\n TalerHttpError\n >([session.token, \"offset\", \"listWebhooks\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n // return buildPaginatedResult(data.body.webhooks, offset, setOffset, (d) => d.webhook_id)\n return data;\n}\n\ntype PaginatedResult<T> = OperationOk<T> & {\n isLastPage: boolean;\n isFirstPage: boolean;\n loadNext(): void;\n loadFirst(): void;\n}\n\n//TODO: consider sending this to web-util\nexport function buildPaginatedResult<R, OffId>(data: R[], offset: OffId | undefined, setOffset: (o: OffId | undefined) => void, getId: (r: R) => OffId): PaginatedResult<R[]> {\n\n const isLastPage = data.length < PAGINATED_LIST_REQUEST;\n const isFirstPage = offset === undefined;\n\n const result = structuredClone(data);\n if (result.length == PAGINATED_LIST_REQUEST) {\n result.pop();\n }\n return {\n type: \"ok\",\n body: result,\n isLastPage,\n isFirstPage,\n loadNext: () => {\n if (!result.length) return;\n const id = getId(result[result.length - 1])\n setOffset(id);\n },\n loadFirst: () => {\n setOffset(undefined);\n },\n };\n}\n\n\nexport function revalidateWebhookDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getWebhookDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useWebhookDetails(webhookId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([hookId, token]: [string, AccessToken]) {\n return await instance.getWebhookDetails(token, hookId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getWebhookDetails\">,\n TalerHttpError\n >([webhookId, session.token, \"getWebhookDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountString,\n Amounts,\n Duration,\n TalerMerchantApi,\n TalerProtocolDuration,\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { format, isFuture } from \"date-fns\";\nimport { Fragment, VNode, h } 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 { 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 { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { InputToggle } from \"../../../../components/form/InputToggle.js\";\nimport { InventoryProductForm } from \"../../../../components/product/InventoryProductForm.js\";\nimport { NonInventoryProductFrom } from \"../../../../components/product/NonInventoryProductForm.js\";\nimport { ProductList } from \"../../../../components/product/ProductList.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { usePreference } from \"../../../../hooks/preference.js\";\nimport { rate } from \"../../../../utils/amount.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ninterface Props {\n onCreate: (d: TalerMerchantApi.PostOrderRequest) => void;\n onBack?: () => void;\n instanceConfig: InstanceConfig;\n instanceInventory: (TalerMerchantApi.ProductDetail & WithId)[];\n}\ninterface InstanceConfig {\n use_stefan: boolean;\n default_pay_delay: TalerProtocolDuration;\n default_wire_transfer_delay: TalerProtocolDuration;\n}\n\nfunction with_defaults(\n config: InstanceConfig,\n _currency: string,\n): Partial<Entity> {\n const defaultPayDeadline = Duration.fromTalerProtocolDuration(\n config.default_pay_delay,\n );\n const defaultWireDeadline = Duration.fromTalerProtocolDuration(\n config.default_wire_transfer_delay,\n );\n\n return {\n inventoryProducts: {},\n products: [],\n pricing: {},\n payments: {\n max_fee: undefined,\n createToken: true,\n pay_deadline: defaultPayDeadline,\n refund_deadline: defaultPayDeadline,\n wire_transfer_deadline: defaultWireDeadline,\n },\n shipping: {},\n extra: {},\n };\n}\n\ninterface ProductAndQuantity {\n product: TalerMerchantApi.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?: TalerMerchantApi.Location;\n fullfilment_url?: string;\n}\ninterface Payments {\n refund_deadline: Duration;\n pay_deadline: Duration;\n wire_transfer_deadline: Duration;\n auto_refund_deadline: Duration;\n max_fee?: string;\n createToken: boolean;\n minimum_age?: number;\n}\ninterface Entity {\n inventoryProducts: ProductMap;\n products: TalerMerchantApi.Product[];\n pricing: Partial<Pricing>;\n payments: Partial<Payments>;\n shipping: Partial<Shipping>;\n extra: Record<string, string>;\n}\n\nexport function CreatePage({\n onCreate,\n onBack,\n instanceConfig,\n instanceInventory,\n}: Props): VNode {\n const { config } = useSessionContext();\n const instance_default = with_defaults(instanceConfig, config.currency);\n const [value, valueHandler] = useState(instance_default);\n const zero = Amounts.zeroOfCurrency(config.currency);\n const [settings, updateSettings] = usePreference();\n const inventoryList = Object.values(value.inventoryProducts || {});\n const productList = Object.values(value.products || {});\n\n const { i18n } = useTranslationContext();\n\n const parsedPrice = !value.pricing?.order_price\n ? undefined\n : Amounts.parse(value.pricing.order_price);\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 : !parsedPrice\n ? i18n.str`not valid`\n : Amounts.isZero(parsedPrice)\n ? i18n.str`must be greater than 0`\n : undefined,\n }),\n payments: undefinedIfEmpty({\n refund_deadline: !value.payments?.refund_deadline\n ? undefined\n : value.payments.pay_deadline &&\n Duration.cmp(\n value.payments.refund_deadline,\n value.payments.pay_deadline,\n ) === -1\n ? i18n.str`refund deadline cannot be before pay deadline`\n : value.payments.wire_transfer_deadline &&\n Duration.cmp(\n value.payments.wire_transfer_deadline,\n value.payments.refund_deadline,\n ) === -1\n ? i18n.str`wire transfer deadline cannot be before refund deadline`\n : undefined,\n pay_deadline: !value.payments?.pay_deadline\n ? i18n.str`required`\n : value.payments.wire_transfer_deadline &&\n Duration.cmp(\n value.payments.wire_transfer_deadline,\n value.payments.pay_deadline,\n ) === -1\n ? i18n.str`wire transfer deadline cannot be before pay deadline`\n : undefined,\n wire_transfer_deadline: !value.payments?.wire_transfer_deadline\n ? i18n.str`required`\n : undefined,\n auto_refund_deadline: !value.payments?.auto_refund_deadline\n ? undefined\n : !value.payments?.refund_deadline\n ? i18n.str`should have a refund deadline`\n : Duration.cmp(\n value.payments.refund_deadline,\n value.payments.auto_refund_deadline,\n ) == -1\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 = value as any; //schema.cast(value);\n if (!value.payments) return;\n if (!value.shipping) return;\n\n const request: TalerMerchantApi.PostOrderRequest = {\n order: {\n amount: order.pricing.order_price,\n summary: order.pricing.summary,\n products: productList,\n extra: undefinedIfEmpty(value.extra),\n pay_deadline: AbsoluteTime.toProtocolTimestamp(\n AbsoluteTime.addDuration(\n AbsoluteTime.now(),\n value.payments.pay_deadline!,\n ),\n ),\n wire_transfer_deadline: AbsoluteTime.toProtocolTimestamp(\n AbsoluteTime.addDuration(\n AbsoluteTime.now(),\n value.payments.wire_transfer_deadline!,\n ),\n ),\n refund_deadline: AbsoluteTime.toProtocolTimestamp(\n AbsoluteTime.addDuration(\n AbsoluteTime.now(),\n value.payments.refund_deadline!,\n ),\n ),\n auto_refund: value.payments.auto_refund_deadline\n ? Duration.toTalerProtocolDuration(\n value.payments.auto_refund_deadline,\n )\n : undefined,\n max_fee: value.payments.max_fee as AmountString,\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: TalerMerchantApi.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: TalerMerchantApi.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 TalerMerchantApi.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 ?? 0).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 const [newField, setNewField] = useState(\"\");\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 parsedPrice ?? Amounts.zeroOfCurrency(config.currency),\n totalPrice.amount,\n );\n\n const minAgeByProducts = inventoryList.reduce(\n (cur, prev) =>\n !prev.product.minimum_age || cur > prev.product.minimum_age ? cur : prev.product.minimum_age,\n 0,\n );\n\n // if there is no default pay deadline\n const noDefault_payDeadline =\n !instance_default.payments || !instance_default.payments.pay_deadline;\n // and there is no default wire deadline\n const noDefault_wireDeadline =\n !instance_default.payments ||\n !instance_default.payments.wire_transfer_deadline;\n // user required to set the taler options\n const requiresSomeTalerOptions =\n noDefault_payDeadline || noDefault_wireDeadline;\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"tabs is-toggle is-fullwidth is-small\">\n <ul>\n <li\n class={!settings.advanceOrderMode ? \"is-active\" : \"\"}\n onClick={() => {\n updateSettings(\"advanceOrderMode\", false);\n }}\n >\n <a>\n <span>\n <i18n.Translate>Simple</i18n.Translate>\n </span>\n </a>\n </li>\n <li\n class={settings.advanceOrderMode ? \"is-active\" : \"\"}\n onClick={() => {\n updateSettings(\"advanceOrderMode\", true);\n }}\n >\n <a>\n <span>\n <i18n.Translate>Advanced</i18n.Translate>\n </span>\n </a>\n </li>\n </ul>\n </div>\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 {settings.advanceOrderMode && (\n <NonInventoryProductFrom\n productToEdit={editingProduct}\n onAddProduct={(p) => {\n setEditingProduct(undefined);\n return addNewProduct(p);\n }}\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 {settings.advanceOrderMode && (\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\n {(settings.advanceOrderMode || requiresSomeTalerOptions) && (\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 {(settings.advanceOrderMode || noDefault_payDeadline) && (\n <InputDuration\n name=\"payments.pay_deadline\"\n label={i18n.str`Payment time`}\n help={\n <DeadlineHelp duration={value.payments?.pay_deadline} />\n }\n withForever\n withoutClear\n tooltip={i18n.str`Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.`}\n side={\n <span>\n <button\n class=\"button\"\n onClick={() => {\n const c = {\n ...value,\n payments: {\n ...(value.payments ?? {}),\n pay_deadline:\n instance_default.payments?.pay_deadline,\n },\n };\n valueHandler(c);\n }}\n >\n <i18n.Translate>default</i18n.Translate>\n </button>\n </span>\n }\n />\n )}\n {settings.advanceOrderMode && (\n <InputDuration\n name=\"payments.refund_deadline\"\n label={i18n.str`Refund time`}\n help={\n <DeadlineHelp\n duration={value.payments?.refund_deadline}\n />\n }\n withForever\n withoutClear\n tooltip={i18n.str`Time while the order can be refunded by the merchant. Time starts after the order is created.`}\n side={\n <span>\n <button\n class=\"button\"\n onClick={() => {\n valueHandler({\n ...value,\n payments: {\n ...(value.payments ?? {}),\n refund_deadline:\n instance_default.payments?.refund_deadline,\n },\n });\n }}\n >\n <i18n.Translate>default</i18n.Translate>\n </button>\n </span>\n }\n />\n )}\n {(settings.advanceOrderMode || noDefault_wireDeadline) && (\n <InputDuration\n name=\"payments.wire_transfer_deadline\"\n label={i18n.str`Wire transfer time`}\n help={\n <DeadlineHelp\n duration={value.payments?.wire_transfer_deadline}\n />\n }\n withoutClear\n withForever\n tooltip={i18n.str`Time for the exchange to make the wire transfer. Time starts after the order is created.`}\n side={\n <span>\n <button\n class=\"button\"\n onClick={() => {\n valueHandler({\n ...value,\n payments: {\n ...(value.payments ?? {}),\n wire_transfer_deadline:\n instance_default.payments\n ?.wire_transfer_deadline,\n },\n });\n }}\n >\n <i18n.Translate>default</i18n.Translate>\n </button>\n </span>\n }\n />\n )}\n {settings.advanceOrderMode && (\n <InputDuration\n name=\"payments.auto_refund_deadline\"\n label={i18n.str`Auto-refund time`}\n help={\n <DeadlineHelp\n duration={value.payments?.auto_refund_deadline}\n />\n }\n tooltip={i18n.str`Time until which the wallet will automatically check for refunds without user interaction.`}\n withForever\n />\n )}\n\n {settings.advanceOrderMode && (\n <InputCurrency\n name=\"payments.max_fee\"\n label={i18n.str`Maximum fee`}\n tooltip={i18n.str`Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.`}\n />\n )}\n {settings.advanceOrderMode && (\n <InputToggle\n name=\"payments.createToken\"\n label={i18n.str`Create token`}\n tooltip={i18n.str`If the order ID is easy to guess the token will prevent user to steal orders from others.`}\n />\n )}\n {settings.advanceOrderMode && (\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 : i18n.str`No product with age restriction in this order`\n }\n />\n )}\n </InputGroup>\n )}\n\n {settings.advanceOrderMode && (\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 {Object.keys(value.extra ?? {}).map((key, idx) => {\n return (\n <Input\n name={`extra.${key}`}\n key={String(idx)}\n inputType=\"multiline\"\n label={key}\n tooltip={i18n.str`You must enter a value in JavaScript Object Notation (JSON).`}\n side={\n <button\n class=\"button\"\n onClick={(e) => {\n if (\n value.extra &&\n value.extra[key] !== undefined\n ) {\n delete value.extra[key];\n }\n valueHandler({\n ...value,\n });\n e.preventDefault();\n }}\n >\n remove\n </button>\n }\n />\n );\n })}\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n <i18n.Translate>Custom field name</i18n.Translate>\n <span\n class=\"icon has-tooltip-right\"\n data-tooltip={\"new extra field\"}\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </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 value={newField}\n onChange={(e) => setNewField(e.currentTarget.value)}\n />\n </p>\n </div>\n </div>\n <button\n class=\"button\"\n onClick={(e) => {\n setNewField(\"\");\n valueHandler({\n ...value,\n extra: {\n ...(value.extra ?? {}),\n [newField]: \"\",\n },\n });\n e.preventDefault();\n }}\n >\n add\n </button>\n </div>\n </InputGroup>\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-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): TalerMerchantApi.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 };\n}\n\nfunction DeadlineHelp({ duration }: { duration?: Duration }): VNode {\n const { i18n } = useTranslationContext();\n const [now, setNow] = useState(AbsoluteTime.now());\n useEffect(() => {\n const iid = setInterval(() => {\n setNow(AbsoluteTime.now());\n }, 60 * 1000);\n return () => {\n clearInterval(iid);\n };\n });\n if (!duration) return <i18n.Translate>Disabled</i18n.Translate>;\n const when = AbsoluteTime.addDuration(now, duration);\n if (when.t_ms === \"never\")\n return <i18n.Translate>No deadline</i18n.Translate>;\n return (\n <i18n.Translate>\n Deadline at {format(when.t_ms, \"dd/MM/yy HH:mm\")}\n </i18n.Translate>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useMerchantApiContext } from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\nimport { InputProps } from \"./useField.js\";\nimport { AmountString } from \"@gnu-taler/taler-util\";\nimport { useSessionContext } from \"../../context/session.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 } = useSessionContext();\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?: AmountString) => v?.split(\":\")[1] || \"\"}\n fromStr={(v: string) => (!v ? undefined : `${config.currency}:${v}`)}\n inputExtra={{ min: 0 }}\n >\n {children}\n </InputWithAddon>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { format } from \"date-fns\";\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DatePicker } from \"../picker/DatePicker.js\";\nimport { InputProps, useField } from \"./useField.js\";\nimport { dateFormatForSettings, usePreference } from \"../../hooks/preference.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 side?: ComponentChildren;\n}\n\nexport function InputDate<T>({\n name,\n readonly,\n label,\n placeholder,\n help,\n tooltip,\n expand,\n withTimestampSupport,\n side,\n}: Props<keyof T>): VNode {\n const [opened, setOpened] = useState(false);\n const { i18n } = useTranslationContext();\n const [settings] = usePreference()\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, dateFormatForSettings(settings));\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), dateFormatForSettings(settings));\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 {side}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Component, h } 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 side={side}\n >\n {children}\n </InputWithAddon>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ProductMap } from \"../../paths/instance/orders/create/CreatePage.js\";\nimport { FormErrors, FormProvider } from \"../form/FormProvider.js\";\nimport { InputNumber } from \"../form/InputNumber.js\";\nimport { InputSearchOnList } from \"../form/InputSearchOnList.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\ntype Form = {\n product: TalerMerchantApi.ProductDetail & WithId;\n quantity: number;\n};\n\ninterface Props {\n currentProducts: ProductMap;\n onAddProduct: (\n product: TalerMerchantApi.ProductDetail & WithId,\n quantity: number,\n ) => void;\n inventory: (TalerMerchantApi.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 <InputSearchOnList\n label={i18n.str`Search product`}\n selected={state.product}\n onChange={(p) => setState((v) => ({ ...v, product: p }))}\n list={inventory}\n withImage\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", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport emptyImage from \"../../assets/empty.png\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n\ntype Entity = {\n id: string,\n description: string;\n image?: string;\n extra?: string;\n};\n\nexport interface Props<T extends Entity> {\n selected?: T;\n onChange: (p?: T) => void;\n label: TranslatedString;\n list: T[];\n withImage?: boolean;\n}\n\ninterface Search {\n name: string;\n}\n\nexport function InputSearchOnList<T extends Entity>({\n selected,\n onChange,\n label,\n list,\n withImage,\n}: Props<T>): VNode {\n const [nameForm, setNameForm] = useState<Partial<Search>>({\n name: \"\",\n });\n\n const errors: FormErrors<Search> = {\n name: undefined,\n };\n const { i18n } = useTranslationContext();\n\n if (selected) {\n return (\n <article class=\"media\">\n {withImage &&\n <figure class=\"media-left\">\n <p class=\"image is-128x128\">\n <img src={selected.image ? selected.image : emptyImage} />\n </p>\n </figure>\n }\n <div class=\"media-content\">\n <div class=\"content\">\n <p class=\"media-meta\">\n <i18n.Translate>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<Search>\n errors={errors}\n object={nameForm}\n valueHandler={setNameForm}\n >\n <InputWithAddon<Search>\n name=\"name\"\n label={label}\n tooltip={i18n.str`enter description or id`}\n addonAfter={\n <span class=\"icon\">\n <i class=\"mdi mdi-magnify\" />\n </span>\n }\n >\n <div>\n <DropdownList\n name={nameForm.name}\n list={list}\n onSelect={(p) => {\n setNameForm({ name: \"\" });\n onChange(p);\n }}\n withImage={!!withImage}\n />\n </div>\n </InputWithAddon>\n </FormProvider>\n );\n}\n\ninterface DropdownListProps<T extends Entity> {\n name?: string;\n onSelect: (p: T) => void;\n list: T[];\n withImage: boolean;\n}\n\nfunction DropdownList<T extends Entity>({ name, onSelect, list, withImage }: DropdownListProps<T>) {\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 match found with that description or id\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 {withImage &&\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 }\n <div class=\"media-content\">\n <div class=\"content\">\n <p>\n <strong>{p.id}</strong> {p.extra !== undefined ? <small>{p.extra}</small> : undefined}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountString, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\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 = TalerMerchantApi.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<TalerMerchantApi.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 || \"\") as AmountString,\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: TalerMerchantApi.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<NonInventoryProduct> = {};\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 TalerMerchantApi.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", "// 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { isAfter, isFuture } from \"date-fns\";\nimport * as yup from \"yup\";\nimport { 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 && Amounts.parse(value) !== undefined;\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 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.object().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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { h, VNode } from \"preact\";\nimport { useCallback, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\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\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\nexport interface Props<T> extends InputProps<T> {\n isValid?: (e: any) => boolean;\n}\n\ntype Entity = TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport emptyImage from \"../../assets/empty.png\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\n\ninterface Props {\n list: TalerMerchantApi.Product[];\n actions?: {\n name: string;\n tooltip: string;\n handler: (d: TalerMerchantApi.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 ?? 0\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 TalerMerchantApi,\n} from \"@gnu-taler/taler-util\";\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: TalerMerchantApi.RefundDetails[],\n cur: TalerMerchantApi.RefundDetails,\n): TalerMerchantApi.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 function rate(a: AmountJson, b: AmountJson): number {\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useOrderDetails } from \"../../../../hooks/order.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { DetailPage } from \"./DetailPage.js\";\n\nexport interface Props {\n oid: string;\n onBack: () => void;\n}\n\nexport default function Update({ oid, onBack }: Props): VNode {\n const result = useOrderDetails(oid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib: api } = useSessionContext();\n const { state } = useSessionContext();\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.BadGateway: {\n return <div>Failed to obtain a response from the exchange</div>;\n }\n case HttpStatusCode.GatewayTimeout: {\n return (\n <div>The merchant's interaction with the exchange took too long</div>\n );\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <DetailPage\n onBack={onBack}\n id={oid}\n onRefund={(id, value) => {\n if (state.status !== \"loggedIn\") {\n return;\n }\n api.instance\n .addRefund(state.token, 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.body}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AbsoluteTime, AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\n\n\nexport function revalidateOrderDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getOrderDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useOrderDetails(oderId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([dId, token]: [string, AccessToken]) {\n return await instance.getOrderDetails(token, dId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getOrderDetails\">,\n TalerHttpError\n >([oderId, session.token, \"getOrderDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport interface InstanceOrderFilter {\n paid?: boolean;\n refunded?: boolean;\n wired?: boolean;\n date?: AbsoluteTime;\n position?: string;\n}\n\nexport function revalidateInstanceOrders() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listOrders\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceOrders(\n args?: InstanceOrderFilter,\n updatePosition: (d: string | undefined) => void = () => { },\n) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n // const [offset, setOffset] = useState<string | undefined>(args?.position);\n\n async function fetcher([token, o, p, r, w, d]: [AccessToken, string, boolean, boolean, boolean, AbsoluteTime]) {\n return await instance.listOrders(token, {\n limit: PAGINATED_LIST_REQUEST,\n offset: o,\n order: \"dec\",\n paid: p,\n refunded: r,\n wired: w,\n date: d,\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listOrders\">,\n TalerHttpError\n >([session.token, args?.position, args?.paid, args?.refunded, args?.wired, args?.date, \"listOrders\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.orders, args?.position, updatePosition, (d) => String(d.row_id))\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AmountJson,\n Amounts,\n TalerMerchantApi,\n stringifyRefundUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { format, formatDistance } from \"date-fns\";\nimport { Fragment, VNode, h } 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 { useSessionContext } from \"../../../../context/session.js\";\nimport {\n datetimeFormatForSettings,\n usePreference,\n} from \"../../../../hooks/preference.js\";\nimport { mergeRefunds } from \"../../../../utils/amount.js\";\nimport { RefundModal } from \"../list/Table.js\";\nimport { Event, Timeline } from \"./Timeline.js\";\n\ntype Entity = TalerMerchantApi.MerchantOrderStatusResponse;\ntype CT = TalerMerchantApi.ContractTerms;\n\ninterface Props {\n onBack: () => void;\n selected: Entity;\n id: string;\n onRefund: (id: string, value: TalerMerchantApi.RefundRequest) => void;\n}\n\ntype Paid = TalerMerchantApi.CheckPaymentPaidResponse & {\n refund_taken: string;\n};\ntype Unpaid = TalerMerchantApi.CheckPaymentUnpaidResponse;\ntype Claimed = TalerMerchantApi.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 <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: TalerMerchantApi.CheckPaymentClaimedResponse;\n}) {\n const now = new Date();\n const refundable =\n order.contract_terms.refund_deadline.t_s !== \"never\" &&\n now.getTime() < order.contract_terms.refund_deadline.t_s * 1000;\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\" && refundable) {\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 const [settings] = usePreference();\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\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 {order.contract_terms.timestamp.t_s === \"never\"\n ? \"never\"\n : format(\n new Date(\n order.contract_terms.timestamp.t_s * 1000,\n ),\n datetimeFormatForSettings(settings),\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: TalerMerchantApi.CheckPaymentPaidResponse;\n onRefund: (id: string) => void;\n}) {\n const now = new Date();\n const refundable =\n order.contract_terms.refund_deadline.t_s !== \"never\" &&\n now.getTime() < order.contract_terms.refund_deadline.t_s * 1000;\n\n const events: Event[] = [];\n if (order.contract_terms.refund_deadline.t_s !== \"never\" && refundable) {\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 const ra = !order.refunded ? undefined : Amounts.parse(order.refund_amount);\n const am = Amounts.parseOrThrow(order.contract_terms.amount);\n if (ra && Amounts.cmp(ra, am) === 1) {\n if (order.wire_details && order.wire_details.length) {\n if (order.wire_details.length > 1) {\n let last: TalerMerchantApi.TransactionWireTransfer | null = null;\n let first: TalerMerchantApi.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 (\n first === null ||\n first.execution_time.t_s > w.execution_time.t_s\n ) {\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\n const nextEvent = events.find((e) => {\n return e.when.getTime() > now.getTime();\n });\n\n const [value, valueHandler] = useState<Partial<Paid>>(order);\n const { state } = useSessionContext();\n\n const refundurl = stringifyRefundUri({\n merchantBaseUrl: state.backendUrl.href,\n orderId: order.contract_terms.order_id,\n });\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 }}\n >\n {nextEvent && (\n <p>\n <i18n.Translate>Next event in </i18n.Translate>{\" \"}\n {formatDistance(\n nextEvent.when,\n new Date(),\n // \"yyyy/MM/dd HH:mm:ss\",\n )}\n </p>\n )}\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: TalerMerchantApi.CheckPaymentUnpaidResponse;\n}) {\n const [value, valueHandler] = useState<Partial<Unpaid>>(order);\n const { i18n } = useTranslationContext();\n const [settings] = usePreference();\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 datetimeFormatForSettings(settings),\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", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { VNode, h } 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 { useSessionContext } from \"../../../../context/session.js\";\nimport {\n datetimeFormatForSettings,\n usePreference,\n} from \"../../../../hooks/preference.js\";\nimport { mergeRefunds } from \"../../../../utils/amount.js\";\n\ntype Entity = TalerMerchantApi.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 onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n orders,\n onCreate,\n onRefund,\n onCopyURL,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\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 />\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 onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onSelect,\n onRefund,\n onCopyURL,\n onLoadMoreAfter,\n onLoadMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreference();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button class=\"button is-fullwidth\" onClick={onLoadMoreBefore}>\n <i18n.Translate>load first page</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 datetimeFormatForSettings(settings),\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 class=\"button is-fullwidth\" \n data-tooltip={i18n.str`load more orders after the last one`}\n onClick={onLoadMoreAfter}>\n <i18n.Translate>load next page</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-magnify 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: TalerMerchantApi.RefundRequest) => void;\n order: TalerMerchantApi.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 [settings] = usePreference();\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 } = useSessionContext();\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 Record<string, unknown>)[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 datetimeFormatForSettings(settings),\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)}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\";\nimport { datetimeFormatForSettings, usePreference } from \"../../../../hooks/preference.js\";\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 const [settings] = usePreference();\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\">\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 {e.description !== \"now\" && <p class=\"heading\">{format(e.when, datetimeFormatForSettings(settings))}</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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerError,\n TalerMerchantApi,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { JumpToElementById } from \"../../../../components/form/JumpToElementById.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n InstanceOrderFilter,\n useInstanceOrders,\n useOrderDetails,\n} from \"../../../../hooks/order.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { RefundModal } from \"./Table.js\";\n\ninterface Props {\n onSelect: (id: string) => void;\n onCreate: () => void;\n}\n\nexport default function OrderList({ onCreate, onSelect }: Props): VNode {\n const [filter, setFilter] = useState<InstanceOrderFilter>({ paid: false });\n const [orderToBeRefunded, setOrderToBeRefunded] = useState<\n TalerMerchantApi.OrderHistoryEntry | undefined\n >(undefined);\n\n const setNewDate = (date?: AbsoluteTime): void =>\n setFilter((prev) => ({ ...prev, date }));\n\n const result = useInstanceOrders(filter, (d) =>\n setFilter({ ...filter, position: d }),\n );\n const { lib } = useSessionContext();\n\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n const isNotPaidActive = filter.paid === false ? \"is-active\" : \"\";\n const isPaidActive =\n filter.paid === true && filter.wired === undefined ? \"is-active\" : \"\";\n const isRefundedActive = filter.refunded === true ? \"is-active\" : \"\";\n const isNotWiredActive =\n filter.wired === false && filter.paid === true ? \"is-active\" : \"\";\n const isWiredActive = filter.wired === true ? \"is-active\" : \"\";\n const isAllActive =\n filter.paid === undefined &&\n filter.refunded === undefined &&\n filter.wired === undefined\n ? \"is-active\"\n : \"\";\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n <JumpToElementById\n testIfExist={async (order) => {\n const resp = await lib.instance.getOrderDetails(state.token, order);\n return resp.type === \"ok\";\n }}\n onSelect={onSelect}\n description={i18n.str`jump to order with the given product ID`}\n placeholder={i18n.str`order id`}\n />\n\n <ListPage\n orders={result.body.map((o) => ({ ...o, id: o.order_id }))}\n onLoadMoreBefore={result.isFirstPage ? undefined : result.loadFirst}\n onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\n onSelectOrder={(order) => onSelect(order.id)}\n onRefundOrder={(value) => setOrderToBeRefunded(value)}\n isAllActive={isAllActive}\n isNotWiredActive={isNotWiredActive}\n isWiredActive={isWiredActive}\n isPaidActive={isPaidActive}\n isNotPaidActive={isNotPaidActive}\n isRefundedActive={isRefundedActive}\n jumpToDate={filter.date}\n onSelectDate={setNewDate}\n onCopyURL={async (id) => {\n const resp = await lib.instance.getOrderDetails(state.token, id);\n if (resp.type === \"ok\") {\n if (resp.body.order_status === \"unpaid\") {\n copyToClipboard(resp.body.taler_pay_uri);\n } else {\n if (resp.body.contract_terms.fulfillment_url) {\n copyToClipboard(resp.body.contract_terms.fulfillment_url);\n }\n }\n copyToClipboard(resp.body.order_status);\n }\n }}\n onCreate={onCreate}\n onShowAll={() => setFilter({})}\n onShowNotPaid={() => setFilter({ paid: false })}\n onShowPaid={() => setFilter({ paid: true })}\n onShowRefunded={() => setFilter({ refunded: true })}\n onShowNotWired={() => setFilter({ wired: false, paid: true })}\n onShowWired={() => setFilter({ wired: true })}\n />\n\n {orderToBeRefunded && (\n <RefundModalForTable\n id={orderToBeRefunded.order_id}\n onCancel={() => setOrderToBeRefunded(undefined)}\n onConfirm={(value) => {\n lib.instance\n .addRefund(state.token, 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 />\n )}\n </section>\n );\n}\n\ninterface RefundProps {\n id: string;\n onCancel: () => void;\n onConfirm: (m: TalerMerchantApi.RefundRequest) => void;\n}\n\nfunction RefundModalForTable({ id, onConfirm, onCancel }: RefundProps): VNode {\n const result = useOrderDetails(id);\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.BadGateway: {\n return <div>Failed to obtain a response from the exchange</div>;\n }\n case HttpStatusCode.GatewayTimeout: {\n return (\n <div>The merchant's interaction with the exchange took too long</div>\n );\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <RefundModal\n order={result.body}\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", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\n\nexport function JumpToElementById({ testIfExist, onSelect, placeholder, description }: { placeholder: TranslatedString, description: TranslatedString, testIfExist: (id: string) => Promise<boolean>, onSelect: (id: string) => void }): VNode {\n const { i18n } = useTranslationContext()\n\n const [error, setError] = useState<string | undefined>(\n undefined,\n );\n\n const [id, setId] = useState<string>()\n async function check(currentId: string | undefined): Promise<void> {\n if (!currentId) {\n setError(i18n.str`missing id`);\n return;\n }\n try {\n const exi = await testIfExist(currentId);\n if (exi) {\n onSelect(currentId);\n setError(undefined);\n } else {\n setError(i18n.str`not found`);\n }\n } catch {\n setError(i18n.str`not found`);\n }\n }\n\n return <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={error ? \"input is-danger\" : \"input\"}\n type=\"text\"\n value={id ?? \"\"}\n onChange={(e) => setId(e.currentTarget.value)}\n placeholder={placeholder}\n />\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n <span\n class=\"has-tooltip-bottom\"\n data-tooltip={description}\n >\n <button\n class=\"button\"\n onClick={(e) => check(id)}\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}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DatePicker } from \"../../../../components/picker/DatePicker.js\";\nimport { dateFormatForSettings, usePreference } from \"../../../../hooks/preference.js\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface ListPageProps {\n onShowAll: () => void;\n onShowNotPaid: () => void;\n onShowPaid: () => void;\n onShowRefunded: () => void;\n onShowNotWired: () => void;\n onShowWired: () => void;\n onCopyURL: (id: string) => void;\n isAllActive: string;\n isPaidActive: string;\n isNotPaidActive: string;\n isRefundedActive: string;\n isNotWiredActive: string;\n isWiredActive: string;\n\n jumpToDate?: AbsoluteTime;\n onSelectDate: (date?: AbsoluteTime) => void;\n\n orders: (TalerMerchantApi.OrderHistoryEntry & WithId)[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n\n onSelectOrder: (o: TalerMerchantApi.OrderHistoryEntry & WithId) => void;\n onRefundOrder: (o: TalerMerchantApi.OrderHistoryEntry & WithId) => void;\n onCreate: () => void;\n}\n\nexport function ListPage({\n onLoadMoreAfter,\n onLoadMoreBefore,\n orders,\n isAllActive,\n onSelectOrder,\n onRefundOrder,\n jumpToDate,\n onCopyURL,\n onShowAll,\n onShowPaid,\n onShowNotPaid,\n onShowRefunded,\n onShowNotWired,\n onShowWired,\n onSelectDate,\n isPaidActive,\n isRefundedActive,\n isNotWiredActive,\n onCreate,\n isNotPaidActive,\n isWiredActive,\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 [settings] = usePreference();\n\n return (\n <Fragment>\n <div class=\"columns\">\n <div class=\"column is-two-thirds\">\n <div class=\"tabs\" style={{ overflow: \"inherit\" }}>\n <ul>\n <li class={isNotPaidActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show paid orders`}\n >\n <a onClick={onShowNotPaid}>\n <i18n.Translate>New</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 <li class={isWiredActive}>\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={onShowWired}>\n <i18n.Translate>Completed</i18n.Translate>\n </a>\n </div>\n </li>\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 </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 is-fullwidth\" 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 || jumpToDate.t_ms === \"never\" ? \"\" : format(jumpToDate.t_ms, dateFormatForSettings(settings))}\n placeholder={i18n.str`date (${dateFormatForSettings(settings)})`}\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 is-fullwidth\"\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={(d) => {\n onSelectDate(AbsoluteTime.fromMilliseconds(d.getTime()))\n }}\n />\n\n <CardTable\n orders={orders}\n onCreate={onCreate}\n onCopyURL={onCopyURL}\n onSelect={onSelectOrder}\n onRefund={onRefundOrder}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { CreatedSuccessfully } from \"./CreatedSuccessfully.js\";\n\nexport type Entity = TalerMerchantApi.OtpDeviceAddDetails;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateValidator({ onConfirm, onBack }: Props): VNode {\n const { lib: api } = useSessionContext();\n const { state } = useSessionContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [created, setCreated] = useState<TalerMerchantApi.OtpDeviceAddDetails | null>(null)\n\n if (created) {\n return <CreatedSuccessfully entity={created} onConfirm={onConfirm} />\n }\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: Entity) => {\n return api.instance.addOtpDevice(state.token, request)\n .then((d) => {\n setCreated(request)\n })\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create device`,\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 TalerMerchantApi,\n isRfc3548Base32Charset,\n randomRfc3548Base32Key,\n} from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } 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 { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\n\ntype Entity = TalerMerchantApi.OtpDeviceAddDetails;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nconst algorithms = [0, 1, 2];\nconst algorithmsNames = [\"off\", \"30s 8d TOTP-SHA1\", \"30s 8d eTOTP-SHA1\"];\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>({});\n\n const [showKey, setShowKey] = useState(false);\n\n const errors: FormErrors<Entity> = {\n otp_device_id: !state.otp_device_id\n ? i18n.str`required`\n : !/[a-zA-Z0-9]*/.test(state.otp_device_id)\n ? i18n.str`no valid. only characters and numbers`\n : undefined,\n otp_algorithm: !state.otp_algorithm ? i18n.str`required` : undefined,\n otp_key: !state.otp_key\n ? i18n.str`required`\n : !isRfc3548Base32Charset(state.otp_key)\n ? i18n.str`just letters and numbers from 2 to 7`\n : state.otp_key.length !== 32\n ? i18n.str`size of the key should be 32`\n : undefined,\n otp_device_description: !state.otp_device_description\n ? i18n.str`required`\n : !/[a-zA-Z0-9]*/.test(state.otp_device_description)\n ? i18n.str`no valid. only characters and numbers`\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 <Input<Entity>\n name=\"otp_device_id\"\n label={i18n.str`ID`}\n tooltip={i18n.str`Internal id on the system`}\n />\n <Input<Entity>\n name=\"otp_device_description\"\n label={i18n.str`Descripiton`}\n tooltip={i18n.str`Useful to identify the device physically`}\n />\n <InputSelector<Entity>\n name=\"otp_algorithm\"\n label={i18n.str`Verification algorithm`}\n tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}\n values={algorithms}\n toStr={(v) => algorithmsNames[v]}\n fromStr={(v) => Number(v)}\n />\n {state.otp_algorithm ? (\n <Fragment>\n <InputWithAddon<Entity>\n expand\n name=\"otp_key\"\n label={i18n.str`Device key`}\n inputType={showKey ? \"text\" : \"password\"}\n help=\"Be sure to be very hard to guess or use the random generator\"\n tooltip={i18n.str`Your device need to have exactly the same value`}\n fromStr={(v) => v.toUpperCase()}\n addonAfterAction={() => {\n setShowKey(!showKey);\n }}\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 <button\n data-tooltip={i18n.str`generate random secret key`}\n class=\"button is-info mr-3\"\n onClick={(e) => {\n setState((s) => ({\n ...s,\n otp_key: randomRfc3548Base32Key(),\n }));\n e.preventDefault();\n }}\n >\n <i18n.Translate>random</i18n.Translate>\n </button>\n }\n />\n </Fragment>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport { CreatedSuccessfully as Template } from \"../../../../components/notifications/CreatedSuccessfully.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\ntype Entity = TalerMerchantApi.OtpDeviceAddDetails;\n\ninterface Props {\n entity: Entity;\n onConfirm: () => void;\n}\n\nexport function CreatedSuccessfully({\n entity,\n onConfirm,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n const issuer = state.backendUrl.href;\n const qrText = `otpauth://totp/${state.instance}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key}`;\n const qrTextSafe = `otpauth://totp/${state.instance}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key.substring(0, 6)}...`;\n\n return (\n <Template onConfirm={onConfirm} >\n <p class=\"is-size-5\">\n <i18n.Translate>\n You can scan the next QR code with your device or save the key before continuing.\n </i18n.Translate>\n </p>\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\n readonly\n class=\"input\"\n value={entity.otp_device_id}\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\"><i18n.Translate>Description</i18n.Translate></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.otp_device_description}\n />\n </p>\n </div>\n </div>\n </div>\n <QR\n text={qrText}\n />\n <div\n style={{\n color: \"grey\",\n fontSize: \"small\",\n width: 200,\n textAlign: \"center\",\n margin: \"auto\",\n wordBreak: \"break-all\",\n }}\n >\n {qrTextSafe}\n </div>\n </Template>\n );\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n TalerMerchantApi,\n assertUnreachable\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceOtpDevices } from \"../../../../hooks/otp.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\n\nexport default function ListOtpDevices({ onCreate, onSelect }: Props): VNode {\n // const [position, setPosition] = useState<string | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n const result = useInstanceOtpDevices();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n devices={result.body.otp_devices}\n onLoadMoreBefore={undefined} //result.isFirstPage ? undefined : result.loadFirst}\n onLoadMoreAfter={undefined} //result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.otp_device_id);\n }}\n onDelete={(e: TalerMerchantApi.OtpDeviceEntry) => {\n return lib.instance\n .deleteOtpDevice(state.token, e.otp_device_id)\n .then(() =>\n setNotif({\n message: i18n.str`validator delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the validator`,\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function revalidateInstanceOtpDevices() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listOtpDevices\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceOtpDevices() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n // const [offset, setOffset] = useState<string | undefined>();\n\n async function fetcher([token, _bid]: [AccessToken, string]) {\n return await instance.listOtpDevices(token, {\n // limit: PAGINATED_LIST_REQUEST,\n // offset: bid,\n // order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listOtpDevices\">,\n TalerHttpError\n >([session.token, \"offset\", \"listOtpDevices\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n // return buildPaginatedResult(data.body.otp_devices, offset, setOffset, (d) => d.otp_device_id)\n return data;\n}\n\nexport function revalidateOtpDeviceDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getOtpDeviceDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useOtpDeviceDetails(deviceId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([dId, token]: [string, AccessToken]) {\n return await instance.getOtpDeviceDetails(token, dId);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getOtpDeviceDetails\">,\n TalerHttpError\n >([deviceId, session.token, \"getOtpDeviceDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n devices: TalerMerchantApi.OtpDeviceEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: TalerMerchantApi.OtpDeviceEntry) => void;\n onSelect: (e: TalerMerchantApi.OtpDeviceEntry) => void;\n}\n\nexport function ListPage({\n devices,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreBefore,\n onLoadMoreAfter,\n}: Props): VNode {\n\n return (\n <section class=\"section is-main-section\">\n <CardTable\n devices={devices.map((o) => ({\n ...o,\n id: String(o.otp_device_id),\n }))}\n onCreate={onCreate}\n onDelete={onDelete}\n onSelect={onSelect}\n onLoadMoreBefore={onLoadMoreBefore}\n onLoadMoreAfter={onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\n\ntype Entity = TalerMerchantApi.OtpDeviceEntry;\n\ninterface Props {\n devices: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onCreate: () => void;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n devices,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\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>OTP Devices</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 devices`}\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 {devices.length > 0 ? (\n <Table\n instances={devices}\n onDelete={onDelete}\n onSelect={onSelect}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\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 onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onSelect,\n onLoadMoreBefore,\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 devices before the first one`}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load first page</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.otp_device_id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.otp_device_id}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.device_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 devices from the database`}\n onClick={() => onDelete(i)}\n >\n Delete\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 devices after the last one`}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load next page</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-magnify mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no devices 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n TalerMerchantApi,\n assertUnreachable\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useOtpDeviceDetails } from \"../../../../hooks/otp.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { CreatedSuccessfully } from \"../create/CreatedSuccessfully.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = TalerMerchantApi.OtpDevicePatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n vid: string;\n}\nexport default function UpdateValidator({\n vid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const result = useOtpDeviceDetails(vid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const [keyUpdated, setKeyUpdated] =\n useState<TalerMerchantApi.OtpDeviceAddDetails | null>(null);\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n if (keyUpdated) {\n return <CreatedSuccessfully entity={keyUpdated} onConfirm={onConfirm} />;\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n device={{\n id: vid,\n otp_algorithm: result.body.otp_algorithm,\n otp_device_description: result.body.device_description,\n otp_key: \"\",\n otp_ctr: result.body.otp_ctr,\n }}\n onBack={onBack}\n onUpdate={async (newInfo) => {\n return lib.instance\n .updateOtpDevice(state.token, vid, newInfo)\n .then((d) => {\n if (d.type === \"ok\") {\n if (newInfo.otp_key) {\n setKeyUpdated({\n otp_algorithm: newInfo.otp_algorithm,\n otp_device_description: newInfo.otp_device_description,\n otp_device_id: newInfo.id,\n otp_key: newInfo.otp_key,\n otp_ctr: newInfo.otp_ctr,\n });\n } else {\n onConfirm();\n }\n } else {\n switch(d.case) {\n case HttpStatusCode.NotFound: {\n setNotif({\n message: i18n.str`Could not update template`,\n type: \"ERROR\",\n description: i18n.str`Template id is unknown`,\n });\n break;\n }\n case HttpStatusCode.Conflict: {\n setNotif({\n message: i18n.str`Could not update template`,\n type: \"ERROR\",\n description: i18n.str`The provided information is inconsistent with the current state of the template`,\n });\n break;\n }\n }\n }\n })\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { randomRfc3548Base32Key, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, 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 { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\n\ntype Entity = TalerMerchantApi.OtpDevicePatchDetails & WithId;\n\ninterface Props {\n onUpdate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n device: Entity;\n}\nconst algorithms = [0, 1, 2];\nconst algorithmsNames = [\"off\", \"30s 8d TOTP-SHA1\", \"30s 8d eTOTP-SHA1\"];\nexport function UpdatePage({ device, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>(device);\n const [showKey, setShowKey] = useState(false);\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 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 Device: <b>{device.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=\"otp_device_description\"\n label={i18n.str`Description`}\n tooltip={i18n.str`Useful to identify the device physically`}\n />\n <InputSelector<Entity>\n name=\"otp_algorithm\"\n label={i18n.str`Verification algorithm`}\n tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}\n values={algorithms}\n toStr={(v) => algorithmsNames[v]}\n fromStr={(v) => Number(v)}\n />\n {state.otp_algorithm && state.otp_algorithm > 0 ? (\n <Fragment>\n <InputWithAddon<Entity>\n name=\"otp_key\"\n label={i18n.str`Device key`}\n readonly={state.otp_key === undefined}\n inputType={showKey ? \"text\" : \"password\"}\n help={\n state.otp_key === undefined\n ? \"Not modified\"\n : \"Be sure to be very hard to guess or use the random generator\"\n }\n tooltip={i18n.str`Your device need to have exactly the same value`}\n fromStr={(v) => v.toUpperCase()}\n addonAfterAction={() => {\n setShowKey(!showKey);\n }}\n addonAfter={\n <span\n class=\"icon\"\n onClick={() => {\n setShowKey(!showKey);\n }}\n >\n {showKey ? (\n <i class=\"mdi mdi-eye\" />\n ) : (\n <i class=\"mdi mdi-eye-off\" />\n )}\n </span>\n }\n side={\n state.otp_key === undefined ? (\n <button\n onClick={(e) => {\n setState((s) => ({ ...s, otp_key: \"\" }));\n }}\n class=\"button\"\n >\n change key\n </button>\n ) : (\n <button\n data-tooltip={i18n.str`generate random secret key`}\n class=\"button is-info mr-3\"\n onClick={(e) => {\n setState((s) => ({\n ...s,\n otp_key: randomRfc3548Base32Key(),\n }));\n }}\n >\n <i18n.Translate>random</i18n.Translate>\n </button>\n )\n }\n />\n </Fragment>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = TalerMerchantApi.ProductAddDetail;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\nexport default function CreateProduct({ onConfirm, onBack }: Props): VNode {\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\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: TalerMerchantApi.ProductAddDetail) => {\n return lib.instance.addProduct(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { ProductForm } from \"../../../../components/product/ProductForm.js\";\nimport { useListener } from \"../../../../hooks/listener.js\";\n\ntype Entity = TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountString, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport { useSessionContext } from \"../../context/session.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 = TalerMerchantApi.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\" as AmountString,\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 Record<string, unknown>)[k] !== undefined,\n );\n\n const submit = useCallback((): Entity | undefined => {\n const stock = value.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.stock;\n\n if (typeof value.minimum_age !== \"undefined\" && value.minimum_age < 1) {\n delete value.minimum_age;\n }\n\n return value as TalerMerchantApi.ProductDetail & {\n product_id: string;\n };\n }, [value]);\n\n useEffect(() => {\n onSubscribe(hasErrors ? undefined : submit);\n }, [submit, hasErrors]);\n\n const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\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={new URL(\"product/\", state.backendUrl.href).href}\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 restriction`}\n tooltip={i18n.str`is this product restricted for customer below certain age?`}\n help={i18n.str`minimum age of the buyer`}\n />\n <Input<Entity>\n name=\"unit\"\n label={i18n.str`Unit name`}\n tooltip={i18n.str`unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers`}\n help={i18n.str`exajmple: kg, items or liters`}\n />\n <InputCurrency<Entity>\n name=\"price\"\n label={i18n.str`Price per unit`}\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`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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi, TalerProtocolTimestamp } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h } from \"preact\";\nimport { useLayoutEffect, useState } from \"preact/hooks\";\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?: TalerMerchantApi.Location;\n nextRestock?: TalerProtocolTimestamp;\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 ${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> name=\"address\" label={i18n.str`Warehouse address`}>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { JumpToElementById } from \"../../../../components/form/JumpToElementById.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { ConfirmModal } from \"../../../../components/modal/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n useInstanceProducts\n} from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { CardTable } from \"./Table.js\";\n\ninterface Props {\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\nexport default function ProductList({\n onCreate,\n onSelect,\n}: Props): VNode {\n const result = useInstanceProducts();\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n const [deleting, setDeleting] =\n useState<TalerMerchantApi.ProductDetail & WithId | null>(null);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n <JumpToElementById\n testIfExist={async (id) => {\n const resp = await lib.instance.getProductDetails(state.token, id);\n return resp.type === \"ok\";\n }}\n onSelect={onSelect}\n description={i18n.str`jump to product with the given product ID`}\n placeholder={i18n.str`product id`}\n />\n\n <CardTable\n instances={result.body}\n onLoadMoreBefore={result.isFirstPage ? undefined : result.loadFirst}\n onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onUpdate={async (id, prod) => {\n try {\n await lib.instance.updateProduct(state.token, id, prod);\n setNotif({\n message: i18n.str`product updated successfully`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`could not update the product`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n }\n return\n }}\n onSelect={(product) => onSelect(product.id)}\n onDelete={(prod: TalerMerchantApi.ProductDetail & WithId) =>\n setDeleting(prod)\n }\n />\n\n {deleting && (\n <ConfirmModal\n label={`Delete product`}\n description={`Delete the product \"${deleting.description}\"`}\n danger\n active\n onCancel={() => setDeleting(null)}\n onConfirm={async (): Promise<void> => {\n try {\n await lib.instance.deleteProduct(state.token, deleting.id);\n setNotif({\n message: i18n.str`Product \"${deleting.description}\" (ID: ${deleting.id}) has been deleted`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`Failed to delete product`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n }\n setDeleting(null);\n }}\n >\n <p>\n If you delete the product named <b>&quot;{deleting.description}&quot;</b> (ID:{\" \"}\n <b>{deleting.id}</b>), the stock and related information will be lost\n </p>\n <p class=\"warning\">\n Deleting an product <b>cannot be undone</b>.\n </p>\n </ConfirmModal>\n )}\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountString, Amounts, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { ComponentChildren, Fragment, VNode, h } 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 { dateFormatForSettings, usePreference } from \"../../../../hooks/preference.js\";\n\ntype Entity = TalerMerchantApi.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: TalerMerchantApi.ProductPatchDetail,\n ) => Promise<void>;\n onCreate: () => void;\n selected?: boolean;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onSelect,\n onUpdate,\n onDelete,\n onLoadMoreAfter,\n onLoadMoreBefore\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>Inventory</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 onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\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: TalerMerchantApi.ProductPatchDetail,\n ) => Promise<void>;\n onDelete: (id: Entity) => void;\n rowSelectionHandler: StateUpdater<string | undefined>;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n rowSelection,\n rowSelectionHandler,\n instances,\n onSelect,\n onUpdate,\n onDelete,\n onLoadMoreAfter,\n onLoadMoreBefore\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreference();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button class=\"button is-fullwidth\" onClick={onLoadMoreBefore}>\n <i18n.Translate>load first page</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>Image</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Description</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Price per unit</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Taxes</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sales</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 dateFormatForSettings(settings),\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 maxHeight: \"2em\",\n width: \"auto\",\n height: \"auto\",\n }}\n />\n </td>\n <td\n class=\"has-tooltip-right\"\n data-tooltip={i.description}\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {i.description.length > 30 ? i.description.substring(0, 30) + \"...\" : 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 <span style={{ \"whiteSpace\": \"nowrap\" }}>\n\n {i.total_sold} {i.unit}\n </span>\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(() =>\n rowSelectionHandler(undefined),\n )\n }\n onCancel={() => rowSelectionHandler(undefined)}\n />\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button class=\"button is-fullwidth\" \n data-tooltip={i18n.str`load more products after the last one`}\n onClick={onLoadMoreAfter}>\n <i18n.Translate>load next page</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\ninterface FastProductUpdateFormProps {\n product: Entity;\n onUpdate: (\n data: TalerMerchantApi.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-expanded\">\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 as AmountString,\n })\n }\n >\n <i18n.Translate>Confirm update</i18n.Translate>\n </button>\n </span>\n </div>\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 ${currentStock + value.incoming\n })`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as Record<string,unknown>)[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 as AmountString,\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-magnify 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: TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useProductDetails } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = TalerMerchantApi.ProductAddDetail;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n pid: string;\n}\nexport default function UpdateProduct({\n pid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const result = useProductDetails(pid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n product={{ ...result.body, product_id: pid }}\n onBack={onBack}\n onUpdate={(data) => {\n return lib.instance.updateProduct(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { ProductForm } from \"../../../../components/product/ProductForm.js\";\nimport { useListener } from \"../../../../hooks/listener.js\";\n\ntype Entity = TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = TalerMerchantApi.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateTransfer({ onConfirm, onBack }: Props): VNode {\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\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: TalerMerchantApi.TemplateAddDetails) => {\n return lib.instance.addTemplate(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AmountString,\n Amounts,\n Duration,\n TalerError,\n TalerMerchantApi,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } 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 { InputToggle } from \"../../../../components/form/InputToggle.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\nimport { TextField } from \"../../../../components/form/TextField.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceOtpDevices } from \"../../../../hooks/otp.js\";\n\n// type Entity = TalerMerchantApi.TemplateAddDetails & { type: Steps };\ntype Entity = {\n id?: string;\n description?: string;\n otpId?: string;\n summary?: string;\n amount?: AmountString;\n minimum_age?: number;\n pay_duration?: Duration;\n summary_editable?: boolean;\n amount_editable?: boolean;\n currency_editable?: boolean;\n};\n\ninterface Props {\n onCreate: (d: TalerMerchantApi.TemplateAddDetails) => Promise<void>;\n onBack?: () => void;\n}\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { config } = useSessionContext();\n const {state:session} = useSessionContext();\n const devices = useInstanceOtpDevices();\n\n const [state, setState] = useState<Partial<Entity>>({\n minimum_age: 0,\n pay_duration: {\n d_ms: 1000 * 60 * 30, //30 min\n },\n });\n\n function updateState(up: (s: Partial<Entity>) => Partial<Entity>) {\n setState((old) => {\n const newState = up(old);\n if (!newState.amount_editable) {\n newState.currency_editable = false;\n }\n return newState;\n });\n }\n\n const parsedPrice = !state.amount ? undefined : Amounts.parse(state.amount);\n\n const errors: FormErrors<Entity> = {\n id: !state.id\n ? i18n.str`should not be empty`\n : !/[a-zA-Z0-9]*/.test(state.id)\n ? i18n.str`no valid. only characters and numbers`\n : undefined,\n description: !state.description ? i18n.str`should not be empty` : undefined,\n amount: !state.amount\n ? undefined\n : !parsedPrice\n ? i18n.str`not valid`\n : Amounts.isZero(parsedPrice)\n ? i18n.str`must be greater than 0`\n : undefined,\n minimum_age:\n state.minimum_age && state.minimum_age < 0\n ? i18n.str`should be greater that 0`\n : undefined,\n pay_duration: !state.pay_duration\n ? i18n.str`can't be empty`\n : state.pay_duration.d_ms === \"forever\"\n ? undefined\n : state.pay_duration.d_ms < 1000 //less than one second\n ? i18n.str`to short`\n : undefined,\n };\n\n const cList = Object.values(config.currencies).map((d) => d.name);\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as Record<string, unknown>)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onCreate({\n template_id: state.id!,\n template_description: state.description!,\n template_contract: {\n minimum_age: state.minimum_age!,\n pay_duration: Duration.toTalerProtocolDuration(state.pay_duration!),\n amount: state.amount_editable ? undefined : state.amount,\n summary: state.summary_editable ? undefined : state.summary,\n currency:\n cList.length > 1 && state.currency_editable\n ? undefined\n : config.currency,\n },\n editable_defaults: {\n amount: !state.amount_editable ? undefined : state.amount,\n summary: !state.summary_editable ? undefined : state.summary,\n currency:\n cList.length === 1 || !state.currency_editable\n ? undefined\n : config.currency,\n },\n otp_id: state.otpId!,\n });\n };\n const deviceList =\n !devices || devices instanceof TalerError || devices.type === \"fail\"\n ? []\n : devices.body.otp_devices;\n const deviceMap = deviceList.reduce(\n (prev, cur) => {\n prev[cur.otp_device_id] = cur.device_description as TranslatedString;\n return prev;\n },\n {} as Record<string, TranslatedString>,\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={updateState}\n errors={errors}\n >\n <InputWithAddon<Entity>\n name=\"id\"\n help={\n new URL(`templates/${state.id ?? \"\"}`, session.backendUrl.href).href\n }\n label={i18n.str`Identifier`}\n tooltip={i18n.str`Name of the template in URLs.`}\n />\n <Input<Entity>\n name=\"description\"\n label={i18n.str`Description`}\n help=\"\"\n tooltip={i18n.str`Describe what this template stands for`}\n />\n\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`If specified, this template will create order with the same summary`}\n />\n <InputToggle<Entity>\n name=\"summary_editable\"\n label={i18n.str`Summary is editable`}\n tooltip={i18n.str`Allow the user to change the summary.`}\n />\n\n <InputCurrency<Entity>\n name=\"amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`If specified, this template will create order with the same price`}\n />\n <InputToggle<Entity>\n name=\"amount_editable\"\n label={i18n.str`Amount is editable`}\n tooltip={i18n.str`Allow the user to select the amount to pay.`}\n />\n {cList.length > 1 && (\n <Fragment>\n <InputToggle<Entity>\n name=\"currency_editable\"\n readonly={!state.amount_editable}\n label={i18n.str`Currency is editable`}\n tooltip={i18n.str`Allow the user to change currency.`}\n />\n <TextField name=\"sc\" label={i18n.str`Supported currencies`}>\n <i18n.Translate>supported currencies: {cList.join(\", \")}</i18n.Translate>\n </TextField>\n </Fragment>\n )}\n <InputNumber<Entity>\n name=\"minimum_age\"\n label={i18n.str`Minimum age`}\n help=\"\"\n tooltip={i18n.str`Is this contract restricted to some age?`}\n />\n <InputDuration<Entity>\n name=\"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 {!deviceList.length ? (\n <TextField\n name=\"otpId\"\n label={i18n.str`OTP device`}\n tooltip={i18n.str`Use to verify transaction while offline.`}\n >\n <i18n.Translate>No OTP device.</i18n.Translate>&nbsp;\n <a href=\"/otp-devices/new\">\n <i18n.Translate>Add one first</i18n.Translate>\n </a>\n </TextField>\n ) : (\n <InputSelector<Entity>\n name=\"otpId\"\n label={i18n.str`OTP device`}\n values={[\n undefined,\n ...deviceList.map((e) => e.otp_device_id),\n ]}\n toStr={(v?: string) => {\n if (!v) {\n return i18n.str`No device`;\n }\n return deviceMap[v];\n }}\n tooltip={i18n.str`Use to verify transaction in offline mode.`}\n />\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { JumpToElementById } from \"../../../../components/form/JumpToElementById.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { ConfirmModal } from \"../../../../components/modal/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n useInstanceTemplates\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\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 onCreate,\n onQR,\n onSelect,\n onNewOrder,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib } = useSessionContext();\n const result = useInstanceTemplates();\n const [deleting, setDeleting] =\n useState<TalerMerchantApi.TemplateEntry | null>(null);\n const { state } = useSessionContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n <JumpToElementById\n testIfExist={async (id) => {\n const resp = await lib.instance.getTemplateDetails(state.token, id)\n return resp.type === \"ok\"\n }}\n onSelect={onSelect}\n description={i18n.str`jump to template with the given template ID`}\n placeholder={i18n.str`template id`}\n />\n\n <ListPage\n templates={result.body}\n onLoadMoreBefore={\n result.isFirstPage ? undefined: result.loadFirst\n }\n onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\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: TalerMerchantApi.TemplateEntry) => {\n setDeleting(e)\n }\n }\n />\n\n {deleting && (\n <ConfirmModal\n label={`Delete template`}\n description={`Delete the template \"${deleting.template_description}\"`}\n danger\n active\n onCancel={() => setDeleting(null)}\n onConfirm={async (): Promise<void> => {\n try {\n await lib.instance.deleteTemplate(state.token, deleting.template_id);\n setNotif({\n message: i18n.str`Template \"${deleting.template_description}\" (ID: ${deleting.template_id}) has been deleted`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`Failed to delete template`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n }\n setDeleting(null);\n }}\n >\n <p>\n If you delete the template <b>&quot;{deleting.template_description}&quot;</b> (ID:{\" \"}\n <b>{deleting.template_id}</b>) you may loose information\n </p>\n <p class=\"warning\">\n Deleting an template <b>cannot be undone</b>.\n </p>\n </ConfirmModal>\n )}\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useState } from \"preact/hooks\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\n\nexport interface InstanceTemplateFilter {\n}\n\nexport function revalidateInstanceTemplates() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listTemplates\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceTemplates() {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n const [offset, setOffset] = useState<string | undefined>();\n\n async function fetcher([token, bid]: [AccessToken, string]) {\n return await instance.listTemplates(token, {\n limit: PAGINATED_LIST_REQUEST,\n offset: bid,\n order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listTemplates\">,\n TalerHttpError\n >([session.token, offset, \"listTemplates\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.templates, offset, setOffset, (d) => d.template_id)\n\n}\n\nexport function revalidateTemplateDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getTemplateDetails\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useTemplateDetails(templateId: string) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n async function fetcher([tid, token]: [string, AccessToken]) {\n return await instance.getTemplateDetails(token, tid);\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"getTemplateDetails\">,\n TalerHttpError\n >([templateId, session.token, \"getTemplateDetails\"], fetcher);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n templates: TalerMerchantApi.TemplateEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: TalerMerchantApi.TemplateEntry) => void;\n onSelect: (e: TalerMerchantApi.TemplateEntry) => void;\n onNewOrder: (e: TalerMerchantApi.TemplateEntry) => void;\n onQR: (e: TalerMerchantApi.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\n return (\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 onLoadMoreAfter={onLoadMoreAfter}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\n\ntype Entity = TalerMerchantApi.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 onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n templates,\n onCreate,\n onDelete,\n onSelect,\n onQR,\n onNewOrder,\n onLoadMoreAfter,\n onLoadMoreBefore,\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 />\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 onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onNewOrder,\n onQR,\n onSelect,\n onLoadMoreBefore,\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 onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load first page</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 Use template\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 onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load next page</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-magnify 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport {\n useTemplateDetails\n} from \"../../../../hooks/templates.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { QrPage } from \"./QrPage.js\";\nimport { LoginPage } from \"../../../login/index.js\";\n\nexport type Entity = TalerMerchantApi.TransferInformation;\ninterface Props {\n onBack?: () => void;\n tid: string;\n}\n\nexport default function TemplateQrPage({\n tid,\n onBack,\n}: Props): VNode {\n const result = useTemplateDetails(tid);\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n\n return (\n <QrPage contract={result.body.template_contract} id={tid} onBack={onBack} />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 TalerMerchantApi,\n stringifyPayTemplateUri\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\n// type Entity = TalerMerchantApi.UsingTemplateDetails;\n\ninterface Props {\n contract: TalerMerchantApi.TemplateContractDetails;\n id: string;\n onBack?: () => void;\n}\n\nexport function QrPage({ id: templateId, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n\n // const [state, setState] = useState<Partial<Entity>>({\n // amount: contract.amount,\n // summary: contract.summary,\n // });\n\n // const errors: FormErrors<Entity> = {};\n\n // const fixedAmount = !!contract.amount;\n // const fixedSummary = !!contract.summary;\n\n // const templateParams: Record<string, string> = {};\n // if (!fixedAmount) {\n // if (state.amount) {\n // templateParams.amount = state.amount;\n // } else {\n // templateParams.amount = config.currency;\n // }\n // }\n\n // if (!fixedSummary) {\n // templateParams.summary = state.summary ?? \"\";\n // }\n\n const merchantBaseUrl = state.backendUrl.href;\n\n const payTemplateUri = stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams: {},\n });\n\n return (\n <div>\n <section id=\"printThis\">\n <QR text={payTemplateUri} />\n <pre style={{ textAlign: \"center\" }}>\n <a href={payTemplateUri}>{payTemplateUri}</a>\n </pre>\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 {/* <p class=\"is-size-5 mt-5 mb-5\">\n <i18n.Translate>\n Here you can specify a default value for fields that are not\n fixed. Default values can be edited by the customer before the\n payment.\n </i18n.Translate>\n </p> */}\n\n <p></p>\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\n tooltip={i18n.str`Amount of the order`}\n />\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n readonly\n label={i18n.str`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 </div>\n </div>\n <div class=\"column\" />\n </div>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n useTemplateDetails,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = TalerMerchantApi.TemplatePatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n tid: string;\n}\nexport default function UpdateTemplate({\n tid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n template={{...result.body, id: tid}}\n onBack={onBack}\n onUpdate={(data) => {\n return lib.instance.updateTemplate(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AmountString,\n Amounts,\n Duration,\n TalerError,\n TalerMerchantApi,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } 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 { InputToggle } from \"../../../../components/form/InputToggle.js\";\nimport { TextField } from \"../../../../components/form/TextField.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceOtpDevices } from \"../../../../hooks/otp.js\";\n\ntype Entity = {\n description?: string;\n otpId?: string | null;\n summary?: string;\n amount?: AmountString;\n minimum_age?: number;\n pay_duration?: Duration;\n summary_editable?: boolean;\n amount_editable?: boolean;\n currency_editable?: boolean;\n};\n\ninterface Props {\n onUpdate: (d: TalerMerchantApi.TemplatePatchDetails) => Promise<void>;\n onBack?: () => void;\n template: TalerMerchantApi.TemplateDetails & WithId;\n}\n\nexport function UpdatePage({ template, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { config } = useSessionContext();\n const {state:session} = useSessionContext();\n\n const [state, setState] = useState<Partial<Entity>>({\n description: template.template_description,\n minimum_age: template.template_contract.minimum_age,\n otpId: template.otp_id,\n pay_duration: template.template_contract.pay_duration\n ? Duration.fromTalerProtocolDuration(\n template.template_contract.pay_duration,\n )\n : undefined,\n summary:\n template.editable_defaults?.summary ?? template.template_contract.summary,\n amount:\n template.editable_defaults?.amount ??\n (template.template_contract.amount as AmountString | undefined),\n currency_editable: !!template.editable_defaults?.currency,\n summary_editable: !!template.editable_defaults?.summary,\n amount_editable: !!template.editable_defaults?.amount,\n });\n\n function updateState(up: (s: Partial<Entity>) => Partial<Entity>) {\n setState((old) => {\n const newState = up(old);\n if (!newState.amount_editable) {\n newState.currency_editable = false;\n }\n return newState;\n });\n }\n\n const devices = useInstanceOtpDevices();\n const deviceList =\n !devices || devices instanceof TalerError || devices.type === \"fail\"\n ? []\n : devices.body.otp_devices;\n const deviceMap = deviceList.reduce(\n (prev, cur) => {\n prev[cur.otp_device_id] = cur.device_description as TranslatedString;\n return prev;\n },\n {} as Record<string, TranslatedString>,\n );\n\n const parsedPrice = !state.amount ? undefined : Amounts.parse(state.amount);\n\n const errors: FormErrors<Entity> = {\n description: !state.description ? i18n.str`should not be empty` : undefined,\n amount: !state.amount\n ? undefined\n : !parsedPrice\n ? i18n.str`not valid`\n : Amounts.isZero(parsedPrice)\n ? i18n.str`must be greater than 0`\n : undefined,\n minimum_age:\n state.minimum_age && state.minimum_age < 0\n ? i18n.str`should be greater that 0`\n : undefined,\n pay_duration: !state.pay_duration\n ? i18n.str`can't be empty`\n : state.pay_duration.d_ms === \"forever\"\n ? undefined\n : state.pay_duration.d_ms < 1000 // less than one second\n ? i18n.str`to short`\n : undefined,\n };\n\n const cList = Object.values(config.currencies).map((d) => d.name);\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as Record<string, unknown>)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onUpdate({\n template_description: state.description!,\n template_contract: {\n minimum_age: state.minimum_age!,\n pay_duration: Duration.toTalerProtocolDuration(state.pay_duration!),\n amount: state.amount_editable ? undefined : state.amount,\n summary: state.summary_editable ? undefined : state.summary,\n currency:\n cList.length > 1 && state.currency_editable\n ? undefined\n : config.currency,\n },\n editable_defaults: {\n amount: !state.amount_editable ? undefined : state.amount,\n summary: !state.summary_editable ? undefined : state.summary,\n currency:\n cList.length === 1 || !state.currency_editable\n ? undefined\n : config.currency,\n },\n otp_id: state.otpId!,\n });\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 {new URL(`templates/${template.id}`, session.backendUrl.href).href}\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={updateState}\n errors={errors}\n >\n <Input<Entity>\n name=\"description\"\n label={i18n.str`Description`}\n help=\"\"\n tooltip={i18n.str`Describe what this template stands for`}\n />\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`If specified, this template will create order with the same summary`}\n />\n <InputToggle<Entity>\n name=\"summary_editable\"\n label={i18n.str`Summary is editable`}\n tooltip={i18n.str`Allow the user to change the summary.`}\n />\n <InputCurrency<Entity>\n name=\"amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`If specified, this template will create order with the same price`}\n />\n <InputToggle<Entity>\n name=\"amount_editable\"\n label={i18n.str`Amount is editable`}\n tooltip={i18n.str`Allow the user to select the amount to pay.`}\n />\n {cList.length > 1 && (\n <Fragment>\n <InputToggle<Entity>\n name=\"currency_editable\"\n readonly={!state.amount_editable}\n label={i18n.str`Currency is editable`}\n tooltip={i18n.str`Allow the user to change currency.`}\n />\n <TextField name=\"sc\" label={i18n.str`Supported currencies`}>\n <i18n.Translate>\n supported currencies: {cList.join(\", \")}\n </i18n.Translate>\n </TextField>\n </Fragment>\n )}\n <InputNumber<Entity>\n name=\"minimum_age\"\n label={i18n.str`Minimum age`}\n help=\"\"\n tooltip={i18n.str`Is this contract restricted to some age?`}\n />\n <InputDuration<Entity>\n name=\"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 {!deviceList.length ? (\n <TextField\n name=\"otpId\"\n label={i18n.str`OTP device`}\n tooltip={i18n.str`Use to verify transaction while offline.`}\n >\n <i18n.Translate>No OTP device.</i18n.Translate>&nbsp;\n <a href=\"/otp-devices/new\">\n <i18n.Translate>Add one first</i18n.Translate>\n </a>\n </TextField>\n ) : (\n <InputSelector<Entity>\n name=\"otpId\"\n label={i18n.str`OTP device`}\n values={[\n undefined,\n ...deviceList.map((e) => e.otp_device_id),\n ]}\n toStr={(v?: string) => {\n if (!v) {\n return i18n.str`No device`;\n }\n return deviceMap[v];\n }}\n tooltip={i18n.str`Use to verify transaction in offline mode.`}\n />\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport {\n useTemplateDetails\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UsePage } from \"./UsePage.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\n\nexport type Entity = TalerMerchantApi.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onOrderCreated: (id: string) => void;\n tid: string;\n}\n\nexport default function TemplateUsePage({\n tid,\n onOrderCreated,\n onBack,\n}: Props): VNode {\n const { lib } = useSessionContext();\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <>\n <NotificationCard notification={notif} />\n <UsePage\n template={result.body}\n id={tid}\n onBack={onBack}\n onCreateOrder={(\n request: TalerMerchantApi.UsingTemplateDetails,\n ) => {\n\n return lib.instance.useTemplateCreateOrder(tid, request)\n .then((res) => {\n if (res.type === \"ok\") {\n onOrderCreated(res.body.order_id)\n } else {\n setNotif({\n message: i18n.str`could not create order from template`,\n type: \"ERROR\",\n });\n }\n })\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/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\";\n\ntype Entity = TalerMerchantApi.TemplateContractDetails;\n\ninterface Props {\n id: string;\n template: TalerMerchantApi.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 currency: template.editable_defaults?.currency ?? template.template_contract.currency,\n amount: template.editable_defaults?.amount ?? template.template_contract.amount,\n summary: template.editable_defaults?.summary ?? template.template_contract.summary,\n });\n\n const errors: FormErrors<Entity> = {\n amount:\n !state.amount\n ? i18n.str`Amount is required`\n : undefined,\n summary:\n !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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport { useInstanceDetails } from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { LoginPage } from \"../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../notfound/index.js\";\nimport { DetailPage } from \"./DetailPage.js\";\n\ninterface Props {\n onChange: () => void;\n onCancel: () => void;\n}\n\nexport default function Token({ onChange, onCancel }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { lib } = useSessionContext();\n const { logIn } = useSessionContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const result = useInstanceDetails();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />;\n }\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n const hasToken = result.body.auth.method === \"token\";\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <DetailPage\n onBack={onCancel}\n hasToken={hasToken}\n onClearToken={async (currentToken): Promise<void> => {\n try {\n const resp = await lib.instance.updateCurrentInstanceAuthentication(\n currentToken,\n {\n method: \"external\",\n },\n );\n if (resp.type === \"ok\") {\n onChange();\n } else {\n return setNotif({\n message: i18n.str`Failed to clear token`,\n type: \"ERROR\",\n description: resp.detail.hint,\n });\n }\n } catch (error) {\n if (error instanceof Error) {\n return setNotif({\n message: i18n.str`Failed to clear token`,\n type: \"ERROR\",\n description: error.message,\n });\n }\n }\n }}\n onNewToken={async (currentToken, newToken): Promise<void> => {\n try {\n {\n const resp =\n await lib.instance.updateCurrentInstanceAuthentication(\n currentToken,\n {\n token: newToken,\n method: \"token\",\n },\n );\n if (resp.type === \"fail\") {\n return setNotif({\n message: i18n.str`Failed to set new token`,\n type: \"ERROR\",\n description: resp.detail.hint,\n });\n }\n }\n const resp = await lib.authenticate.createAccessTokenBearer(\n newToken,\n {\n scope: \"write\",\n duration: {\n d_us: \"forever\",\n },\n refreshable: true,\n },\n );\n if (resp.type === \"ok\") {\n logIn(resp.body.token);\n return onChange();\n } else {\n return setNotif({\n message: i18n.str`Failed to set new token`,\n type: \"ERROR\",\n });\n }\n } catch (error) {\n if (error instanceof Error) {\n return setNotif({\n message: i18n.str`Failed to set new token`,\n type: \"ERROR\",\n description: error.message,\n });\n }\n }\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/exception/AsyncButton.js\";\nimport { FormProvider } from \"../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../components/form/Input.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport { AccessToken, createRFC8959AccessTokenPlain } from \"@gnu-taler/taler-util\";\n\ninterface Props {\n hasToken: boolean | undefined;\n onClearToken: (c: AccessToken | undefined) => void;\n onNewToken: (c: AccessToken | undefined, s: AccessToken) => void;\n onBack?: () => void;\n}\n\nexport function DetailPage({\n hasToken,\n onBack,\n onNewToken,\n onClearToken,\n}: Props): 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 errors = {\n old_token:\n hasToken && !form.old_token\n ? i18n.str`you need your access token to perform the operation`\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 Record<string, unknown>)[k] !== undefined,\n );\n\n const { state } = useSessionContext();\n\n const text = i18n.str`You are updating the access token from instance with id \"${state.instance}\"`;\n\n async function submitForm() {\n if (hasErrors) return;\n const oldToken =\n form.old_token !== undefined && hasToken\n ? createRFC8959AccessTokenPlain(form.old_token)\n : undefined;\n const newToken = createRFC8959AccessTokenPlain(form.new_token!);\n onNewToken(oldToken, newToken);\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\">{text}</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n <hr />\n\n {!hasToken && (\n <NotificationCard\n notification={{\n message: i18n.str`This instance doesn't have authentication token.`,\n description: i18n.str`You can leave it empty if there is another layer of security.`,\n type: \"WARN\",\n }}\n />\n )}\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 <Fragment>\n {hasToken && (\n <Fragment>\n <Input<State>\n name=\"old_token\"\n label={i18n.str`Current access token`}\n tooltip={i18n.str`access token currently in use`}\n inputType=\"password\"\n />\n <p>\n <i18n.Translate>\n Clearing the access token will mean public access to the\n instance.\n </i18n.Translate>\n </p>\n <div class=\"buttons is-right mt-5\">\n <button\n class=\"button\"\n onClick={() => {\n if (hasToken) {\n onClearToken(form.old_token ? createRFC8959AccessTokenPlain(form.old_token) : undefined);\n } else {\n onClearToken(undefined);\n }\n }}\n >\n <i18n.Translate>Clear token</i18n.Translate>\n </button>\n </div>\n </Fragment>\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 </Fragment>\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <a class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n )}\n <AsyncButton\n type=\"submit\"\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 change</i18n.Translate>\n </AsyncButton>\n </div>\n </FormProvider>\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceBankAccounts } from \"../../../../hooks/bank.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = TalerMerchantApi.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateTransfer({ onConfirm, onBack }: Props): VNode {\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const instance = useInstanceBankAccounts();\n const accounts =\n !instance || instance instanceof TalerError || instance.type === \"fail\"\n ? []\n : instance.body.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: TalerMerchantApi.TransferInformation) => {\n return lib.instance\n .informWireTransfer(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountString, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } 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 {\n CROCKFORD_BASE32_REGEX,\n URL_REGEX,\n} from \"../../../../utils/constants.js\";\n\ntype Entity = TalerMerchantApi.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\n const [state, setState] = useState<Partial<Entity>>({\n wtid: \"\",\n // payto_uri: ,\n // exchange_url: 'http://exchange.taler:8081/',\n credit_amount: `` as AmountString,\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { useInstanceBankAccounts } from \"../../../../hooks/bank.js\";\nimport { useInstanceTransfers } from \"../../../../hooks/transfer.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\n\ninterface Props {\n onCreate: () => void;\n}\ninterface Form {\n verified?: boolean;\n payto_uri?: string;\n}\n\nexport default function ListTransfer({\n onCreate,\n}: Props): VNode {\n const setFilter = (s?: boolean) => setForm({ ...form, verified: s });\n\n const [position, setPosition] = useState<string | undefined>(undefined);\n\n const instance = useInstanceBankAccounts();\n const accounts = !instance || (instance instanceof TalerError) || instance.type === \"fail\"\n ? []\n : instance.body.accounts.map((a) => a.payto_uri);\n const [form, setForm] = useState<Form>({ payto_uri: \"\" });\n\n const shoulUseDefaultAccount = accounts.length === 1\n useEffect(() => {\n if (shoulUseDefaultAccount) {\n setForm({...form, payto_uri: accounts[0]})\n }\n }, [shoulUseDefaultAccount])\n\n const isVerifiedTransfers = form.verified === true;\n const isNonVerifiedTransfers = form.verified === false;\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) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <ListPage\n accounts={accounts}\n transfers={result.body}\n onLoadMoreBefore={result.isFirstPage ? undefined: result.loadFirst }\n onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onDelete={() => {\n null;\n }}\n onShowAll={() => setFilter(undefined)}\n onShowUnverified={() => setFilter(false)}\n onShowVerified={() => setFilter(true)}\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { PAGINATED_LIST_REQUEST } from \"../utils/constants.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from \"@gnu-taler/taler-util\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useSessionContext } from \"../context/session.js\";\nimport { buildPaginatedResult } from \"./webhooks.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface InstanceTransferFilter {\n payto_uri?: string;\n verified?: boolean;\n position?: string;\n}\n\nexport function revalidateInstanceTransfers() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"listWireTransfers\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useInstanceTransfers(\n args?: InstanceTransferFilter,\n updatePosition: (id: string | undefined) => void = (() => { }),\n) {\n const { state: session } = useSessionContext();\n const { lib: { instance } } = useSessionContext();\n\n // const [offset, setOffset] = useState<string | undefined>(args?.position);\n\n async function fetcher([token, o, p, v]: [AccessToken, string, string, boolean]) {\n return await instance.listWireTransfers(token, {\n paytoURI: p,\n verified: v,\n limit: PAGINATED_LIST_REQUEST,\n offset: o,\n order: \"dec\",\n });\n }\n\n const { data, error } = useSWR<\n TalerMerchantManagementResultByMethod<\"listWireTransfers\">,\n TalerHttpError\n >([session.token, args?.position, args?.payto_uri, args?.verified, \"listWireTransfers\"], fetcher);\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(data.body.transfers, args?.position, updatePosition, (d) => String(d.transfer_serial_id))\n\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { h, VNode } from \"preact\";\nimport { FormProvider } from \"../../../../components/form/FormProvider.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { CardTable } from \"./Table.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\nexport interface Props {\n transfers: TalerMerchantApi.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`Account URI`}\n values={accounts}\n fromStr={(d) => {\n const idx = accounts.indexOf(d)\n if (idx === -1) return undefined;\n return d\n }}\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 onLoadMoreAfter={onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport { datetimeFormatForSettings, usePreference } from \"../../../../hooks/preference.js\";\n\ntype Entity = TalerMerchantApi.TransferDetails & WithId;\n\ninterface Props {\n transfers: Entity[];\n onDelete: (id: Entity) => void;\n onCreate: () => void;\n accounts: string[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n transfers,\n onCreate,\n onDelete,\n onLoadMoreAfter,\n onLoadMoreBefore,\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-arrow-left-right\" />\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 />\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 onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onLoadMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreference();\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 onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load first page</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 datetimeFormatForSettings(settings),\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 transfers after the last one`}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load next page</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-magnify 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, TalerMerchantInstanceHttpClient, TalerMerchantManagementResultByMethod, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../context/session.js\";\nimport {\n useInstanceDetails,\n useManagedInstanceDetails,\n} from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { LoginPage } from \"../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../notfound/index.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<TalerErrorDetail>) => VNode;\n // onUpdateError: (e: HttpError<TalerErrorDetail>) => void;\n}\n\nexport default function Update(props: Props): VNode {\n const { lib } = useSessionContext();\n const updateInstance = lib.instance.updateCurrentInstance.bind(lib.instance)\n const result = useInstanceDetails();\n return CommonUpdate(props, result, updateInstance,);\n}\n\nexport function AdminUpdate(props: Props & { instanceId: string }): VNode {\n const { lib } = useSessionContext();\n const t = lib.subInstanceApi(props.instanceId).instance;\n const updateInstance = t.updateCurrentInstance.bind(t)\n const result = useManagedInstanceDetails(props.instanceId);\n return CommonUpdate(props, result, updateInstance,);\n}\n\n\nfunction CommonUpdate(\n {\n onBack,\n onConfirm,\n }: Props,\n result: TalerMerchantManagementResultByMethod<\"getInstanceDetails\"> | TalerError | undefined,\n updateInstance: typeof TalerMerchantInstanceHttpClient.prototype.updateCurrentInstance,\n): VNode {\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const { state } = useSessionContext();\n\n if (!result) return <Loading />\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />\n }\n if (result.type === \"fail\") {\n switch(result.case) {\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n default: {\n assertUnreachable(result)\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n onBack={onBack}\n isLoading={false}\n selected={result.body}\n onUpdate={(\n d: TalerMerchantApi.InstanceReconfigurationMessage,\n ): Promise<void> => {\n if (state.status !== \"loggedIn\") {\n return Promise.resolve();\n }\n return updateInstance(state.token, d)\n .then(onConfirm)\n .catch((error: Error) =>\n setNotif({\n message: i18n.str`Failed to update 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Duration, TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } 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 { useSessionContext } from \"../../../context/session.js\";\nimport { undefinedIfEmpty } from \"../../../utils/table.js\";\n\nexport type Entity = Omit<Omit<TalerMerchantApi.InstanceReconfigurationMessage, \"default_pay_delay\">, \"default_wire_transfer_delay\"> & {\n default_pay_delay: Duration,\n default_wire_transfer_delay: Duration,\n};\n\n//TalerMerchantApi.InstanceAuthConfigurationMessage\ninterface Props {\n onUpdate: (d: TalerMerchantApi.InstanceReconfigurationMessage) => void;\n selected: TalerMerchantApi.QueryInstancesResponse;\n isLoading: boolean;\n onBack: () => void;\n}\n\nfunction convert(\n from: TalerMerchantApi.QueryInstancesResponse,\n): Entity {\n const { default_pay_delay, default_wire_transfer_delay, ...rest } = from;\n\n const defaults = {\n use_stefan: false,\n default_pay_delay: Duration.fromTalerProtocolDuration(default_pay_delay),\n default_wire_transfer_delay: Duration.fromTalerProtocolDuration(default_wire_transfer_delay),\n };\n return { ...defaults, ...rest };\n}\n\nexport function UpdatePage({\n onUpdate,\n selected,\n onBack,\n}: Props): VNode {\n const { state } = useSessionContext();\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 user_type: !value.user_type\n ? i18n.str`required`\n : value.user_type !== \"business\" && value.user_type !== \"individual\"\n ? i18n.str`should be business or individual`\n : undefined,\n default_pay_delay: !value.default_pay_delay\n ? i18n.str`required`\n : !!value.default_wire_transfer_delay &&\n value.default_wire_transfer_delay.d_ms !== \"forever\" &&\n value.default_pay_delay.d_ms !== \"forever\" &&\n value.default_pay_delay.d_ms > value.default_wire_transfer_delay.d_ms ?\n i18n.str`pay delay can't be greater than wire transfer delay` : 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 = async (): Promise<void> => {\n const { default_pay_delay, default_wire_transfer_delay, ...rest } = value as Required<Entity>;\n const result: TalerMerchantApi.InstanceReconfigurationMessage = {\n default_pay_delay: Duration.toTalerProtocolDuration(default_pay_delay),\n default_wire_transfer_delay: Duration.toTalerProtocolDuration(default_wire_transfer_delay),\n ...rest,\n }\n await onUpdate(result);\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>{state.instance}</b>\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n\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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = TalerMerchantApi.WebhookAddDetails;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateWebhook({ onConfirm, onBack }: Props): VNode {\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: TalerMerchantApi.WebhookAddDetails) => {\n return lib.instance.addWebhook(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, 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 { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\ntype Entity = TalerMerchantApi.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`\n : state.event_type !== \"pay\" && state.event_type !== \"refund\" ? i18n.str`it should be \"pay\" or \"refund\"`\n : 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 <InputSelector\n name=\"event_type\"\n label={i18n.str`Event`}\n values={[\n i18n.str`Choose one...`,\n i18n.str`pay`,\n i18n.str`refund`,\n ]}\n tooltip={i18n.str`The event of the webhook: why the webhook is used`}\n />\n <InputSelector\n name=\"http_method\"\n label={i18n.str`Method`}\n values={[\n i18n.str`Choose one...`,\n i18n.str`GET`,\n i18n.str`POST`,\n i18n.str`PUT`,\n i18n.str`PATCH`,\n i18n.str`HEAD`,\n ]}\n tooltip={i18n.str`Method used by the webhook`}\n />\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\n <p>\n The text below support <a target=\"_blank\" rel=\"noreferrer\" href=\"https://mustache.github.io/mustache.5.html\">mustache</a> template engine. Any string\n between <pre style={{ display: \"inline\", padding: 0 }}>&#123;&#123;</pre> and <pre style={{ display: \"inline\", padding: 0 }}>&#125;&#125;</pre> will\n be replaced with replaced with the value of the corresponding variable.\n </p>\n <p>\n For example <pre style={{ display: \"inline\", padding: 0 }}>&#123;&#123;contract_terms.amount&#125;&#125;</pre> will be replaced\n with the the order's price\n </p>\n <p>\n The short list of variables are:\n </p>\n <div class=\"menu\">\n\n <ul class=\"menu-list\" style={{ listStyleType: \"disc\", marginLeft: 20 }}>\n <li><b>contract_terms.summary:</b> order's description </li>\n <li><b>contract_terms.amount:</b> order's price </li>\n <li><b>order_id:</b> order's unique identification </li>\n {state.event_type === \"refund\" && <Fragment>\n <li><b>refund_amout:</b> the amount that was being refunded</li>\n <li><b>reason:</b> the reason entered by the merchant staff for granting the refund</li>\n <li><b>timestamp:</b> time of the refund in nanoseconds since 1970</li>\n </Fragment>}\n </ul>\n </div>\n {/* <Input<Entity>\n name=\"header_template\"\n label={i18n.str`Http 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`Http 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n TalerError,\n TalerMerchantApi,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport { useInstanceWebhooks } from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\n\nexport default function ListWebhooks({ onCreate, onSelect }: Props): VNode {\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n const result = useInstanceWebhooks();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n webhooks={result.body.webhooks}\n onLoadMoreBefore={undefined} //result.isFirstPage ? undefined : result.loadFirst}\n onLoadMoreAfter={undefined} //result.isLastPage ? undefined : result.loadNext}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.webhook_id);\n }}\n onDelete={(e: TalerMerchantApi.WebhookEntry) => {\n return lib.instance\n .deleteWebhook(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { CardTable } from \"./Table.js\";\nimport { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\nexport interface Props {\n webhooks: TalerMerchantApi.WebhookEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: TalerMerchantApi.WebhookEntry) => void;\n onSelect: (e: TalerMerchantApi.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 onLoadMoreAfter={onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\n\ntype Entity = TalerMerchantApi.WebhookEntry;\n\ninterface Props {\n webhooks: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onCreate: () => void;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n webhooks,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\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 rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\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 onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onSelect,\n onLoadMoreBefore,\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 onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load first page</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 onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load next page</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-magnify 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useTranslationContext\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingMerchant } from \"../../../../components/ErrorLoadingMerchant.js\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { useSessionContext } from \"../../../../context/session.js\";\nimport {\n useWebhookDetails,\n} from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { LoginPage } from \"../../../login/index.js\";\nimport { NotFoundPageOrAdminCreate } from \"../../../notfound/index.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = TalerMerchantApi.WebhookPatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n tid: string;\n}\nexport default function UpdateWebhook({\n tid,\n onConfirm,\n onBack,\n}: Props): VNode {\n const { lib } = useSessionContext();\n const { state } = useSessionContext();\n const result = useWebhookDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (!result) return <Loading />;\n if (result instanceof TalerError) {\n return <ErrorLoadingMerchant error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound: {\n return <NotFoundPageOrAdminCreate />;\n }\n case HttpStatusCode.Unauthorized: {\n return <LoginPage />\n }\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n webhook={{ ...result.body, id: tid }}\n onBack={onBack}\n onUpdate={(data) => {\n return lib.instance.updateWebhook(state.token, 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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/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 { TalerMerchantApi } from \"@gnu-taler/taler-util\";\n\ntype Entity = TalerMerchantApi.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-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useLang, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../components/form/FormProvider.js\";\nimport { InputSelector } from \"../../components/form/InputSelector.js\";\nimport { InputToggle } from \"../../components/form/InputToggle.js\";\nimport { LangSelector } from \"../../components/menu/LangSelector.js\";\nimport { Preferences, usePreference } from \"../../hooks/preference.js\";\nimport { AbsoluteTime } from \"@gnu-taler/taler-util\";\n\nfunction getBrowserLang(): string | undefined {\n if (typeof window === \"undefined\") return 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 Settings({ onClose }: { onClose?: () => void }): VNode {\n const { i18n } = useTranslationContext();\n const borwserLang = getBrowserLang();\n const { update } = useLang(undefined, {});\n\n const [value, , updateValue] = usePreference();\n const errors: FormErrors<Preferences> = {};\n\n function valueHandler(s: (d: Partial<Preferences>) => Partial<Preferences>): void {\n const next = s(value);\n const v: Preferences = {\n advanceOrderMode: next.advanceOrderMode ?? false,\n hideMissingAccountUntil: next.hideMissingAccountUntil ?? AbsoluteTime.never(),\n hideKycUntil: next.hideKycUntil ?? AbsoluteTime.never(),\n dateFormat: next.dateFormat ?? \"ymd\",\n };\n updateValue(v);\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 <div>\n <FormProvider<Preferences>\n name=\"settings\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n <i18n.Translate>Language</i18n.Translate>\n <span\n class=\"icon has-tooltip-right\"\n data-tooltip={\n \"Force language setting instance of taking the browser\"\n }\n >\n <i class=\"mdi mdi-information\" />\n </span>\n </label>\n </div>\n <div class=\"field field-body has-addons is-flex-grow-3\">\n <LangSelector />\n &nbsp;\n {borwserLang !== undefined && (\n <button\n data-tooltip={i18n.str`generate random secret key`}\n class=\"button is-info mr-2\"\n onClick={(e) => {\n update(borwserLang.substring(0, 2));\n e.preventDefault()\n }}\n >\n <i18n.Translate>Set default</i18n.Translate>\n </button>\n )}\n </div>\n </div>\n <InputToggle<Preferences>\n label={i18n.str`Advance order creation`}\n tooltip={i18n.str`Shows more options in the order creation form`}\n name=\"advanceOrderMode\"\n />\n <InputSelector<Preferences>\n name=\"dateFormat\"\n label={i18n.str`Date format`}\n expand={true}\n help={\n value.dateFormat === \"dmy\"\n ? \"31/12/2001\"\n : value.dateFormat === \"mdy\"\n ? \"12/31/2001\"\n : value.dateFormat === \"ymd\"\n ? \"2001/12/31\"\n : \"\"\n }\n toStr={(e) => {\n if (e === \"ymd\") return \"year month day\";\n if (e === \"mdy\") return \"month day year\";\n if (e === \"dmy\") return \"day month year\";\n return \"choose one\";\n }}\n values={[\"ymd\", \"mdy\", \"dmy\"]}\n tooltip={i18n.str`how the date is going to be displayed`}\n />\n </FormProvider>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n {onClose && (\n <section class=\"section is-main-section\">\n <button class=\"button\" onClick={onClose}>\n <i18n.Translate>Close</i18n.Translate>\n </button>\n </section>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { MerchantUiSettings } from \"../settings.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = MerchantUiSettings;\n\nconst initial: MerchantUiSettings = {};\nconst Context = createContext<Type>(initial);\n\nexport const useSettingsContext = (): Type => useContext(Context);\n\nexport const SettingsProvider = ({\n children,\n value,\n}: {\n value: MerchantUiSettings;\n children: ComponentChildren;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Codec,\n buildCodecForObject,\n canonicalizeBaseUrl,\n codecForString,\n codecOptional\n} from \"@gnu-taler/taler-util\";\n\nexport interface MerchantUiSettings {\n // Where merchant backend is localted\n // default: window.origin without \"webui/\"\n backendBaseURL?: string;\n}\n\n/**\n * Global settings for the bank UI.\n */\nconst defaultSettings: MerchantUiSettings = {\n backendBaseURL: buildDefaultBackendBaseURL(),\n};\n\nconst codecForBankUISettings = (): Codec<MerchantUiSettings> =>\n buildCodecForObject<MerchantUiSettings>()\n .property(\"backendBaseURL\", codecOptional(codecForString()))\n .build(\"MerchantUiSettings\");\n\nfunction removeUndefineField<T extends object>(obj: T): T {\n const keys = Object.keys(obj) as Array<keyof T>;\n return keys.reduce((prev, cur) => {\n if (typeof prev[cur] === \"undefined\") {\n delete prev[cur];\n }\n return prev;\n }, obj);\n}\n\nexport function fetchSettings(listener: (s: MerchantUiSettings) => void): void {\n fetch(\"./settings.json\")\n .then((resp) => resp.json())\n .then((json) => codecForBankUISettings().decode(json))\n .then((result) =>\n listener({\n ...defaultSettings,\n ...removeUndefineField(result),\n }),\n )\n .catch((e) => {\n console.log(\"failed to fetch settings\", e);\n listener(defaultSettings);\n });\n}\n\nexport function buildDefaultBackendBaseURL(): string {\n if (typeof window !== \"undefined\") {\n const currentLocation = new URL(\n window.location.pathname,\n window.location.origin,\n ).href;\n /**\n * By default, merchant backend serves the html content\n * from the /webui root. This should cover most of the \n * cases and the rootPath will be the merchant backend\n * URL where the instances are\n */\n return canonicalizeBaseUrl(currentLocation.replace(\"/webui\", \"\"));\n }\n throw Error(\"No default URL\")\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\nif (app) {\n render(<Application />, app);\n} else {\n console.error(\"HTML element with id 'app' not found.\");\n}\n"],
+ "mappings": "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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,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,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,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,CAAC;AAAA,UACtzE,gBAAgB,EAAC,GAAE,CAAC,GAAE,CAAC,EAAC;AAAA,UACxB,YAAY,SAAS,WAAW,KAAKO,OAAM;AACvC,kBAAM,IAAI,MAAM,GAAG;AAAA,UACvB;AAAA,UACA,OAAO,SAAS,MAAM,OAAO;AACzB,gBAAIC,QAAO,MACP,QAAQ,CAAC,CAAC,GACV,SAAS,CAAC,IAAI,GACd,SAAS,CAAC,GACVC,SAAQ,KAAK,OACb,SAAS,IACT,WAAW,GACX,SAAS,GACT,aAAa,GACb,SAAS,GACT,MAAM;AAIV,iBAAK,MAAM,SAAS,KAAK;AACzB,iBAAK,MAAM,KAAK,KAAK;AACrB,iBAAK,GAAG,QAAQ,KAAK;AACrB,gBAAI,OAAO,KAAK,MAAM,UAAU;AAC5B,mBAAK,MAAM,SAAS,CAAC;AACzB,gBAAI,QAAQ,KAAK,MAAM;AACvB,mBAAO,KAAK,KAAK;AAEjB,gBAAI,OAAO,KAAK,GAAG,eAAe;AAC9B,mBAAK,aAAa,KAAK,GAAG;AAE9B,qBAAS,SAAUJ,IAAG;AAClB,oBAAM,SAAS,MAAM,SAAS,IAAEA;AAChC,qBAAO,SAAS,OAAO,SAASA;AAChC,qBAAO,SAAS,OAAO,SAASA;AAAA,YACpC;AAEA,qBAAS,MAAM;AACX,kBAAI;AACJ,sBAAQG,MAAK,MAAM,IAAI,KAAK;AAE5B,kBAAI,OAAO,UAAU,UAAU;AAC3B,wBAAQA,MAAK,SAAS,KAAK,KAAK;AAAA,cACpC;AACA,qBAAO;AAAA,YACX;AAEA,gBAAI,QAAQ,gBAAgB,OAAO,QAAQE,IAAGC,IAAG,QAAM,CAAC,GAAEL,IAAE,KAAI,UAAU;AAC1E,mBAAO,MAAM;AAET,sBAAQ,MAAM,MAAM,SAAO,CAAC;AAG5B,kBAAI,KAAK,eAAe,KAAK,GAAG;AAC5B,yBAAS,KAAK,eAAe,KAAK;AAAA,cACtC,OAAO;AACH,oBAAI,UAAU;AACV,2BAAS,IAAI;AAEjB,yBAASG,OAAM,KAAK,KAAKA,OAAM,KAAK,EAAE,MAAM;AAAA,cAChD;AAGA;AACA,oBAAI,OAAO,WAAW,eAAe,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG;AAE/D,sBAAI,CAAC,YAAY;AAEb,+BAAW,CAAC;AACZ,yBAAKH,MAAKG,OAAM,KAAK;AAAG,0BAAI,KAAK,WAAWH,EAAC,KAAKA,KAAI,GAAG;AACrD,iCAAS,KAAK,MAAI,KAAK,WAAWA,EAAC,IAAE,GAAG;AAAA,sBAC5C;AACA,wBAAI,SAAS;AACb,wBAAI,KAAK,MAAM,cAAc;AACzB,+BAAS,0BAAwB,WAAS,KAAG,QAAM,KAAK,MAAM,aAAa,IAAE,iBAAe,SAAS,KAAK,IAAI,IAAI,YAAY,KAAK,WAAW,MAAM,IAAG;AAAA,oBAC3J,OAAO;AACH,+BAAS,0BAAwB,WAAS,KAAG,mBAC9B,UAAU,IAAY,iBACV,OAAK,KAAK,WAAW,MAAM,KAAK,UAAQ;AAAA,oBACvE;AACA,yBAAK;AAAA,sBAAW;AAAA,sBACZ,EAAC,MAAM,KAAK,MAAM,OAAO,OAAO,KAAK,WAAW,MAAM,KAAK,QAAQ,MAAM,KAAK,MAAM,UAAU,KAAK,OAAO,SAAkB;AAAA,oBAAC;AAAA,kBACrI;AAGA,sBAAI,cAAc,GAAG;AACjB,wBAAI,UAAU,KAAK;AACf,4BAAM,IAAI,MAAM,UAAU,iBAAiB;AAAA,oBAC/C;AAGA,6BAAS,KAAK,MAAM;AACpB,6BAAS,KAAK,MAAM;AACpB,+BAAW,KAAK,MAAM;AACtB,4BAAQ,KAAK,MAAM;AACnB,6BAAS,IAAI;AAAA,kBACjB;AAGA,yBAAO,GAAG;AAEN,wBAAK,OAAO,SAAS,KAAMG,OAAM,KAAK,GAAG;AACrC;AAAA,oBACJ;AACA,wBAAI,SAAS,GAAG;AACZ,4BAAM,IAAI,MAAM,UAAU,iBAAiB;AAAA,oBAC/C;AACA,6BAAS,CAAC;AACV,4BAAQ,MAAM,MAAM,SAAO,CAAC;AAAA,kBAChC;AAEA,mCAAiB;AACjB,2BAAS;AACT,0BAAQ,MAAM,MAAM,SAAO,CAAC;AAC5B,2BAASA,OAAM,KAAK,KAAKA,OAAM,KAAK,EAAE,MAAM;AAC5C,+BAAa;AAAA,gBACjB;AAGA,kBAAI,OAAO,CAAC,aAAa,SAAS,OAAO,SAAS,GAAG;AACjD,sBAAM,IAAI,MAAM,sDAAoD,QAAM,cAAY,MAAM;AAAA,cAChG;AAEA,sBAAQ,OAAO,CAAC,GAAG;AAAA,gBAEf,KAAK;AAGD,wBAAM,KAAK,MAAM;AACjB,yBAAO,KAAK,KAAK,MAAM,MAAM;AAC7B,yBAAO,KAAK,KAAK,MAAM,MAAM;AAC7B,wBAAM,KAAK,OAAO,CAAC,CAAC;AACpB,2BAAS;AACT,sBAAI,CAAC,gBAAgB;AACjB,6BAAS,KAAK,MAAM;AACpB,6BAAS,KAAK,MAAM;AACpB,+BAAW,KAAK,MAAM;AACtB,4BAAQ,KAAK,MAAM;AACnB,wBAAI,aAAa;AACb;AAAA,kBACR,OAAO;AACH,6BAAS;AACT,qCAAiB;AAAA,kBACrB;AACA;AAAA,gBAEJ,KAAK;AAGD,wBAAM,KAAK,aAAa,OAAO,CAAC,CAAC,EAAE,CAAC;AAGpC,wBAAM,IAAI,OAAO,OAAO,SAAO,GAAG;AAElC,wBAAM,KAAK;AAAA,oBACP,YAAY,OAAO,OAAO,UAAQ,OAAK,EAAE,EAAE;AAAA,oBAC3C,WAAW,OAAO,OAAO,SAAO,CAAC,EAAE;AAAA,oBACnC,cAAc,OAAO,OAAO,UAAQ,OAAK,EAAE,EAAE;AAAA,oBAC7C,aAAa,OAAO,OAAO,SAAO,CAAC,EAAE;AAAA,kBACzC;AACA,kBAAAE,KAAI,KAAK,cAAc,KAAK,OAAO,QAAQ,QAAQ,UAAU,KAAK,IAAI,OAAO,CAAC,GAAG,QAAQ,MAAM;AAE/F,sBAAI,OAAOA,OAAM,aAAa;AAC1B,2BAAOA;AAAA,kBACX;AAGA,sBAAI,KAAK;AACL,4BAAQ,MAAM,MAAM,GAAE,KAAG,MAAI,CAAC;AAC9B,6BAAS,OAAO,MAAM,GAAG,KAAG,GAAG;AAC/B,6BAAS,OAAO,MAAM,GAAG,KAAG,GAAG;AAAA,kBACnC;AAEA,wBAAM,KAAK,KAAK,aAAa,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1C,yBAAO,KAAK,MAAM,CAAC;AACnB,yBAAO,KAAK,MAAM,EAAE;AAEpB,6BAAWF,OAAM,MAAM,MAAM,SAAO,CAAC,CAAC,EAAE,MAAM,MAAM,SAAO,CAAC,CAAC;AAC7D,wBAAM,KAAK,QAAQ;AACnB;AAAA,gBAEJ,KAAK;AACD,yBAAO;AAAA,cACf;AAAA,YAEJ;AAEA,mBAAO;AAAA,UACX;AAAA,QAAC;AACD,YAAI,QAAS,WAAU;AAEvB,cAAIG,SAAS;AAAA,YAAC,KAAI;AAAA,YAClB,YAAW,SAAS,WAAW,KAAKL,OAAM;AAClC,kBAAI,KAAK,GAAG,YAAY;AACpB,qBAAK,GAAG,WAAW,KAAKA,KAAI;AAAA,cAChC,OAAO;AACH,sBAAM,IAAI,MAAM,GAAG;AAAA,cACvB;AAAA,YACJ;AAAA,YACJ,UAAS,SAAU,OAAO;AAClB,mBAAK,SAAS;AACd,mBAAK,QAAQ,KAAK,QAAQ,KAAK,OAAO;AACtC,mBAAK,WAAW,KAAK,SAAS;AAC9B,mBAAK,SAAS,KAAK,UAAU,KAAK,QAAQ;AAC1C,mBAAK,iBAAiB,CAAC,SAAS;AAChC,mBAAK,SAAS,EAAC,YAAW,GAAE,cAAa,GAAE,WAAU,GAAE,aAAY,EAAC;AACpE,qBAAO;AAAA,YACX;AAAA,YACJ,OAAM,WAAY;AACV,kBAAI,KAAK,KAAK,OAAO,CAAC;AACtB,mBAAK,UAAQ;AACb,mBAAK;AACL,mBAAK,SAAO;AACZ,mBAAK,WAAS;AACd,kBAAI,QAAQ,GAAG,MAAM,IAAI;AACzB,kBAAI;AAAO,qBAAK;AAChB,mBAAK,SAAS,KAAK,OAAO,MAAM,CAAC;AACjC,qBAAO;AAAA,YACX;AAAA,YACJ,OAAM,SAAU,IAAI;AACZ,mBAAK,SAAS,KAAK,KAAK;AACxB,qBAAO;AAAA,YACX;AAAA,YACJ,MAAK,WAAY;AACT,mBAAK,QAAQ;AACb,qBAAO;AAAA,YACX;AAAA,YACJ,WAAU,WAAY;AACd,kBAAI,OAAO,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,SAAS,KAAK,MAAM,MAAM;AACzE,sBAAQ,KAAK,SAAS,KAAK,QAAM,MAAM,KAAK,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AAAA,YAC7E;AAAA,YACJ,eAAc,WAAY;AAClB,kBAAI,OAAO,KAAK;AAChB,kBAAI,KAAK,SAAS,IAAI;AAClB,wBAAQ,KAAK,OAAO,OAAO,GAAG,KAAG,KAAK,MAAM;AAAA,cAChD;AACA,sBAAQ,KAAK,OAAO,GAAE,EAAE,KAAG,KAAK,SAAS,KAAK,QAAM,KAAK,QAAQ,OAAO,EAAE;AAAA,YAC9E;AAAA,YACJ,cAAa,WAAY;AACjB,kBAAI,MAAM,KAAK,UAAU;AACzB,kBAAIM,KAAI,IAAI,MAAM,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG;AAC1C,qBAAO,MAAM,KAAK,cAAc,IAAI,OAAOA,KAAE;AAAA,YACjD;AAAA,YACJ,MAAK,WAAY;AACT,kBAAI,KAAK,MAAM;AACX,uBAAO,KAAK;AAAA,cAChB;AACA,kBAAI,CAAC,KAAK;AAAQ,qBAAK,OAAO;AAE9B,kBAAI,OACAT,QACA,KACA;AACJ,kBAAI,CAAC,KAAK,OAAO;AACb,qBAAK,SAAS;AACd,qBAAK,QAAQ;AAAA,cACjB;AACA,kBAAI,QAAQ,KAAK,cAAc;AAC/B,uBAASN,KAAE,GAAEA,KAAI,MAAM,QAAQA,MAAK;AAChC,gBAAAM,SAAQ,KAAK,OAAO,MAAM,KAAK,MAAM,MAAMN,EAAC,CAAC,CAAC;AAC9C,oBAAIM,QAAO;AACP,0BAAQA,OAAM,CAAC,EAAE,MAAM,OAAO;AAC9B,sBAAI;AAAO,yBAAK,YAAY,MAAM;AAClC,uBAAK,SAAS;AAAA,oBAAC,YAAY,KAAK,OAAO;AAAA,oBACxB,WAAW,KAAK,WAAS;AAAA,oBACzB,cAAc,KAAK,OAAO;AAAA,oBAC1B,aAAa,QAAQ,MAAM,MAAM,SAAO,CAAC,EAAE,SAAO,IAAI,KAAK,OAAO,cAAcA,OAAM,CAAC,EAAE;AAAA,kBAAM;AAC9G,uBAAK,UAAUA,OAAM,CAAC;AACtB,uBAAK,SAASA,OAAM,CAAC;AACrB,uBAAK,UAAUA;AACf,uBAAK,SAAS,KAAK,OAAO;AAC1B,uBAAK,QAAQ;AACb,uBAAK,SAAS,KAAK,OAAO,MAAMA,OAAM,CAAC,EAAE,MAAM;AAC/C,uBAAK,WAAWA,OAAM,CAAC;AACvB,0BAAQ,KAAK,cAAc,KAAK,MAAM,KAAK,IAAI,MAAM,MAAMN,EAAC,GAAE,KAAK,eAAe,KAAK,eAAe,SAAO,CAAC,CAAC;AAC/G,sBAAI;AAAO,2BAAO;AAAA;AACb;AAAA,gBACT;AAAA,cACJ;AACA,kBAAI,KAAK,WAAW,IAAI;AACpB,uBAAO,KAAK;AAAA,cAChB,OAAO;AACH,qBAAK;AAAA,kBAAW,4BAA0B,KAAK,WAAS,KAAG,2BAAyB,KAAK,aAAa;AAAA,kBAC9F,EAAC,MAAM,IAAI,OAAO,MAAM,MAAM,KAAK,SAAQ;AAAA,gBAAC;AAAA,cACxD;AAAA,YACJ;AAAA,YACJ,KAAI,SAAS,MAAM;AACX,kBAAIa,KAAI,KAAK,KAAK;AAClB,kBAAI,OAAOA,OAAM,aAAa;AAC1B,uBAAOA;AAAA,cACX,OAAO;AACH,uBAAO,KAAK,IAAI;AAAA,cACpB;AAAA,YACJ;AAAA,YACJ,OAAM,SAAS,MAAM,WAAW;AACxB,mBAAK,eAAe,KAAK,SAAS;AAAA,YACtC;AAAA,YACJ,UAAS,SAAS,WAAW;AACrB,qBAAO,KAAK,eAAe,IAAI;AAAA,YACnC;AAAA,YACJ,eAAc,SAAS,gBAAgB;AAC/B,qBAAO,KAAK,WAAW,KAAK,eAAe,KAAK,eAAe,SAAO,CAAC,CAAC,EAAE;AAAA,YAC9E;AAAA,YACJ,UAAS,WAAY;AACb,qBAAO,KAAK,eAAe,KAAK,eAAe,SAAO,CAAC;AAAA,YAC3D;AAAA,YACJ,WAAU,SAAS,MAAM,WAAW;AAC5B,mBAAK,MAAM,SAAS;AAAA,YACxB;AAAA,UAAC;AACL,UAAAC,OAAM,gBAAgB,SAAS,UAAU,IAAG,KAAI,2BAA0B,UAAU;AAEpF,gBAAI,UAAQ;AACZ,oBAAO,2BAA2B;AAAA,cAClC,KAAK;AACL;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAE,uBAAO;AACd;AAAA,cACA,KAAK;AAAG,uBAAO;AACf;AAAA,cACA,KAAK;AAAG,uBAAO;AACf;AAAA,cACA,KAAK;AAAG,uBAAO;AACf;AAAA,cACA,KAAK;AAAG,uBAAO;AACf;AAAA,cACA,KAAK;AAAG,uBAAO;AACf;AAAA,cACA,KAAK;AAAG,uBAAO;AACf;AAAA,cACA,KAAK;AAAG,uBAAO;AACf;AAAA,cACA,KAAK;AAAG,uBAAO;AACf;AAAA,YACA;AAAA,UACA;AACA,UAAAA,OAAM,QAAQ,CAAC,QAAO,wBAAuB,QAAO,SAAQ,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,IAAI;AACzI,UAAAA,OAAM,aAAa,EAAC,WAAU,EAAC,SAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,aAAY,KAAI,EAAC;AAAE,iBAAOA;AAAA,QAAM,EAAG;AACxH,eAAO,QAAQ;AACf,eAAO;AAAA,MACP,EAAG;AAID,UAAI,OAAO,YAAY,aAAa;AAClC,YAAI,OAAO,WAAW,eAAe,OAAO,SAAS;AACnD,oBAAU,OAAO,UAAUZ;AAAA,QAC7B;AACA,gBAAQ,MAAMA;AAAA,MAChB,OACK;AACH,YAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAC9C,iBAAO,WAAW;AAChB,mBAAOA;AAAA,UACT,CAAC;AAAA,QACH;AAEA,aAAK,KAAK,IAAIA;AAAA,MAChB;AAAA,IAEF,GAAG,OAAI;AAAA;AAAA;;;ACz/BSc,SAAAA,EAAOC,IAAKC,IAAAA;AAE3B,WAASC,MAAKD;AAAOD,IAAAA,GAAIE,EAAAA,IAAKD,GAAMC,EAAAA;AACpC,SAA6BF;AAC7B;AAQM,SAASG,EAAWC,IAAAA;AAC1B,MAAIC,KAAaD,GAAKC;AAClBA,EAAAA,MAAYA,GAAWC,YAAYF,EAAAA;AACvC;AEXM,SAASG,EAAcC,IAAMP,IAAOQ,IAAAA;AAC1C,MACCC,IACAC,IACAT,IAHGU,KAAkB,CAAA;AAItB,OAAKV,MAAKD;AACA,aAALC,KAAYQ,KAAMT,GAAMC,EAAAA,IACd,SAALA,KAAYS,KAAMV,GAAMC,EAAAA,IAC5BU,GAAgBV,EAAAA,IAAKD,GAAMC,EAAAA;AAUjC,MAPIW,UAAUC,SAAS,MACtBF,GAAgBH,WACfI,UAAUC,SAAS,IAAIC,EAAMC,KAAKH,WAAW,CAAA,IAAKJ,KAKjC,cAAA,OAARD,MAA2C,QAArBA,GAAKS;AACrC,SAAKf,MAAKM,GAAKS;AAAAA,iBACVL,GAAgBV,EAAAA,MACnBU,GAAgBV,EAAAA,IAAKM,GAAKS,aAAaf,EAAAA;AAK1C,SAAOgB,EAAYV,IAAMI,IAAiBF,IAAKC,IAAK,IAAA;AACpD;AAAA,SAceO,EAAYV,IAAMP,IAAOS,IAAKC,IAAKQ,IAAAA;AAGlD,MAAMC,KAAQ,EACbZ,MAAAA,IACAP,OAAAA,IACAS,KAAAA,IACAC,KAAAA,IACAU,KAAW,MACXC,IAAS,MACTC,KAAQ,GACRC,KAAM,MAKNC,KAAAA,QACAC,KAAY,MACZC,KAAY,MACZC,aAAAA,QACAC,KAAuB,QAAZV,KAAAA,EAAqBW,IAAUX,GAAAA;AAM3C,SAFgB,QAAZA,MAAqC,QAAjBY,EAAQX,SAAeW,EAAQX,MAAMA,EAAAA,GAEtDA;AACP;AAEM,SAASY,IAAAA;AACf,SAAO,EAAEC,SAAS,KAAA;AAClB;AAEM,SAASC,GAASjC,IAAAA;AACxB,SAAOA,GAAMQ;AACb;AAAA,SC7Ee0B,EAAUlC,IAAOmC,IAAAA;AAChCC,OAAKpC,QAAQA,IACboC,KAAKD,UAAUA;AACf;AAAA,SA0EeE,EAAclB,IAAOmB,IAAAA;AACpC,MAAkB,QAAdA;AAEH,WAAOnB,GAAKE,KACTgB,EAAclB,GAADE,IAAgBF,GAAAE,GAAAD,IAAwBmB,QAAQpB,EAAAA,IAAS,CAAA,IACtE;AAIJ,WADIqB,IACGF,KAAanB,GAAAC,IAAgBP,QAAQyB;AAG3C,QAAe,SAFfE,KAAUrB,GAAKC,IAAWkB,EAAAA,MAEa,QAAhBE,GAAAjB;AAItB,aAAOiB,GACPjB;AAQF,SAA4B,cAAA,OAAdJ,GAAMZ,OAAqB8B,EAAclB,EAAAA,IAAS;AAChE;AAsCD,SAASsB,EAAwBtB,IAAAA;AAAjC,MAGWlB,IACJyC;AAHN,MAA+B,SAA1BvB,KAAQA,GAAHE,OAAiD,QAApBF,GAAKM,KAAqB;AAEhE,SADAN,GAAAA,MAAaA,GAAAM,IAAiBkB,OAAO,MAC5B1C,KAAI,GAAGA,KAAIkB,GAAAA,IAAgBN,QAAQZ;AAE3C,UAAa,SADTyC,KAAQvB,GAAAC,IAAgBnB,EAAAA,MACO,QAAdyC,GAAKnB,KAAe;AACxCJ,QAAAA,GAAAI,MAAaJ,GAAKM,IAAYkB,OAAOD,GAAxBnB;AACb;MACA;AAGF,WAAOkB,EAAwBtB,EAAAA;EAC/B;AACD;AAuBM,SAASyB,EAAcC,IAAAA;AAAAA,GAAAA,CAE1BA,GAAAA,QACAA,GAACrB,MAAAA,SACFsB,EAAcC,KAAKF,EAAAA,KAAAA,CAClBG,EAAAA,SACFC,MAAiBnB,EAAQoB,wBAEzBD,IAAenB,EAAQoB,sBACNC,YAAYH,CAAAA;AAE9B;AAGD,SAASA,IAAAA;AAER,WADII,IACIJ,EAAOK,MAAkBP,EAAcjC;AAC9CuC,IAAAA,KAAQN,EAAcQ,KAAK,SAACC,IAAGC,IAAAA;AAAJ,aAAUD,GAAA3B,IAAAN,MAAkBkC,GAA5B5B,IAAAN;IAAA,CAAA,GAC3BwB,IAAgB,CAAA,GAGhBM,GAAMK,KAAK,SAAAZ,IAAAA;AAzFb,UAAyBa,IAMnBC,IACEC,IANHzC,IACH0C,IACAC;AAuFKjB,MAAAA,GAAJrB,QAxFDqC,MADG1C,MADoBuC,KA0FQb,IAzFhCjB,KAAAL,MAECuC,KAAYJ,GAFbK,SAKKJ,KAAc,CAAA,IACZC,KAAW9D,EAAO,CAAA,GAAIqB,EAAAA,GAC5BS,MAAqBT,GAAKS,MAAa,GAEvCoC,EACCF,IACA3C,IACAyC,IACAF,GAAAA,KAAAA,WACAI,GAAUG,iBACU,QAApB9C,GAAKO,MAAsB,CAACmC,EAAAA,IAAU,MACtCF,IACU,QAAVE,KAAiBxB,EAAclB,EAAAA,IAAS0C,IACxC1C,GATDO,GAAAA,GAWAwC,EAAWP,IAAaxC,EAAAA,GAEpBA,GAAKI,OAASsC,MACjBpB,EAAwBtB,EAAAA;IAmExB,CAAA;AAEF;AAAA,SG7LegD,EACfL,IACAM,IACAC,IACAC,IACAC,IACAC,IACAC,IACAd,IACAE,IACAa,IAAAA;AAAAA,MAEIzE,IAAG0E,IAAGf,IAAUgB,IAAYC,IAAQC,IAAeC,IAInDC,KAAeV,MAAkBA,GAAJlD,OAAiC6D,GAE9DC,KAAoBF,GAAYnE;AAGpC,OADAwD,GAAAA,MAA2B,CAAA,GACtBpE,KAAI,GAAGA,KAAImE,GAAavD,QAAQZ;AAgDpC,QAAkB,SA5CjB2E,KAAaP,GAAcjD,IAAWnB,EAAAA,IADrB,SAFlB2E,KAAaR,GAAanE,EAAAA,MAEqB,aAAA,OAAd2E,KACW,OAMtB,YAAA,OAAdA,MACc,YAAA,OAAdA,MAEc,YAAA,OAAdA,KAEoC3D,EAC1C,MACA2D,IACA,MACA,MACAA,EAAAA,IAESO,MAAMC,QAAQR,EAAAA,IACmB3D,EAC1CgB,IACA,EAAEzB,UAAUoE,GAAAA,GACZ,MACA,MACA,IAAA,IAESA,GAAAtD,MAAoB,IAKaL,EAC1C2D,GAAWrE,MACXqE,GAAW5E,OACX4E,GAAWnE,KACXmE,GAAWlE,MAAMkE,GAAWlE,MAAM,MAClCkE,GAEDhD,GAAAA,IAC2CgD,KAK5C;AAaA,UATAA,GAAAvD,KAAqBgD,IACrBO,GAAUtD,MAAU+C,GAAA/C,MAAwB,GAS9B,UAHdsC,KAAWoB,GAAY/E,EAAAA,MAIrB2D,MACAgB,GAAWnE,OAAOmD,GAASnD,OAC3BmE,GAAWrE,SAASqD,GAASrD;AAE9ByE,QAAAA,GAAY/E,EAAAA,IAAAA;;AAIZ,aAAK0E,KAAI,GAAGA,KAAIO,IAAmBP,MAAK;AAIvC,eAHAf,KAAWoB,GAAYL,EAAAA,MAKtBC,GAAWnE,OAAOmD,GAASnD,OAC3BmE,GAAWrE,SAASqD,GAASrD,MAC5B;AACDyE,YAAAA,GAAYL,EAAAA,IAAAA;AACZ;UACA;AACDf,UAAAA,KAAW;QACX;AAMFI,QACCF,IACAc,IALDhB,KAAWA,MAAYyB,GAOtBd,IACAC,IACAC,IACAd,IACAE,IACAa,EAAAA,GAGDG,KAASD,GAATrD,MAEKoD,KAAIC,GAAWlE,QAAQkD,GAASlD,OAAOiE,OACtCI,OAAMA,KAAO,CAAA,IACdnB,GAASlD,OAAKqE,GAAKhC,KAAKa,GAASlD,KAAK,MAAMkE,EAAAA,GAChDG,GAAKhC,KAAK4B,IAAGC,GAAAnD,OAAyBoD,IAAQD,EAAAA,IAGjC,QAAVC,MACkB,QAAjBC,OACHA,KAAgBD,KAIU,cAAA,OAAnBD,GAAWrE,QAClBqE,GAAAxD,QAAyBwC,GAAzBxC,MAEAwD,GAAUpD,MAAYqC,KAASyB,EAC9BV,IACAf,IACAC,EAAAA,IAGDD,KAAS0B,GACRzB,IACAc,IACAhB,IACAoB,IACAH,IACAhB,EAAAA,GAIgC,cAAA,OAAvBQ,GAAe9D,SAQzB8D,GAAA7C,MAA0BqC,OAG3BA,MACAD,GAAQrC,OAASsC,MACjBA,GAAOzD,cAAc0D,OAIrBD,KAASxB,EAAcuB,EAAAA;IAtGvB;AA6GF,OAHAS,GAAA9C,MAAsBuD,IAGjB7E,KAAIiF,IAAmBjF;AACL,YAAlB+E,GAAY/E,EAAAA,KACfuF,EAAQR,GAAY/E,EAAAA,GAAI+E,GAAY/E,EAAAA,CAAAA;AAKtC,MAAI8E;AACH,SAAK9E,KAAI,GAAGA,KAAI8E,GAAKlE,QAAQZ;AAC5BwF,MAAAA,GAASV,GAAK9E,EAAAA,GAAI8E,GAAAA,EAAO9E,EAAAA,GAAI8E,GAAAA,EAAO9E,EAAAA,CAAAA;AAGtC;AAED,SAASqF,EAAgBV,IAAYf,IAAQC,IAAAA;AAI5C,WACK3C,IAHD0B,KAAI+B,GAAHxD,KACDsE,KAAM,GACH7C,MAAK6C,KAAM7C,GAAEhC,QAAQ6E;AAAAA,KACvBvE,KAAQ0B,GAAE6C,EAAAA,OAMbvE,GAAAA,KAAgByD,IAGff,KADwB,cAAA,OAAd1C,GAAMZ,OACP+E,EAAgBnE,IAAO0C,IAAQC,EAAAA,IAE/ByB,GAAWzB,IAAW3C,IAAOA,IAAO0B,IAAG1B,GAAY0C,KAAAA,EAAAA;AAK/D,SAAOA;AACP;AAQe8B,SAAAA,EAAanF,IAAUoF,IAAAA;AAUtC,SATAA,KAAMA,MAAO,CAAA,GACG,QAAZpF,MAAuC,aAAA,OAAZA,OACpB2E,MAAMC,QAAQ5E,EAAAA,IACxBA,GAASiD,KAAK,SAAAf,IAAAA;AACbiD,MAAajD,IAAOkD,EAAAA;EACpB,CAAA,IAEDA,GAAI7C,KAAKvC,EAAAA,IAEHoF;AACP;AAED,SAASL,GACRzB,IACAc,IACAhB,IACAoB,IACAH,IACAhB,IAAAA;AAND,MAQKgC,IAuBGC,IAAiBnB;AAtBxB,MAAA,WAAIC,GAAUpD;AAIbqE,IAAAA,KAAUjB,GAAHpD,KAMPoD,GAAAA,MAAAA;WAEY,QAAZhB,MACAiB,MAAUhB,MACW,QAArBgB,GAAOzE;AAEP2F;AAAO,UAAc,QAAVlC,MAAkBA,GAAOzD,eAAe0D;AAClDA,QAAAA,GAAUkC,YAAYnB,EAAAA,GACtBgB,KAAU;WACJ;AAEN,aACKC,KAASjC,IAAQc,KAAI,IACxBmB,KAASA,GAAOG,gBAAgBtB,KAAIK,GAAYnE,QACjD8D,MAAK;AAEL,cAAImB,MAAUjB;AACb,kBAAMkB;AAGRjC,QAAAA,GAAUoC,aAAarB,IAAQhB,EAAAA,GAC/BgC,KAAUhC;MACV;AAYF,SAAA,WANIgC,KACMA,KAEAhB,GAAOoB;AAIjB;AChTeE,SAAAA,EAAUC,IAAKC,IAAUC,IAAU9B,IAAO+B,IAAAA;AACzD,MAAItG;AAEJ,OAAKA,MAAKqG;AACC,mBAANrG,MAA0B,UAANA,MAAiBA,MAAKoG,MAC7CG,EAAYJ,IAAKnG,IAAG,MAAMqG,GAASrG,EAAAA,GAAIuE,EAAAA;AAIzC,OAAKvE,MAAKoG;AAENE,IAAAA,MAAiC,cAAA,OAAfF,GAASpG,EAAAA,KACvB,eAANA,MACM,UAANA,MACM,YAANA,MACM,cAANA,MACAqG,GAASrG,EAAAA,MAAOoG,GAASpG,EAAAA,KAEzBuG,EAAYJ,IAAKnG,IAAGoG,GAASpG,EAAAA,GAAIqG,GAASrG,EAAAA,GAAIuE,EAAAA;AAGhD;AAED,SAASiC,EAASC,IAAOjG,IAAKkG,IAAAA;AACd,UAAXlG,GAAI,CAAA,IACPiG,GAAMF,YAAY/F,IAAKkG,EAAAA,IAEvBD,GAAMjG,EAAAA,IADa,QAATkG,KACG,KACa,YAAA,OAATA,MAAqBC,EAAmBC,KAAKpG,EAAAA,IACjDkG,KAEAA,KAAQ;AAEtB;AAAA,SAUeH,EAAYJ,IAAKU,IAAMH,IAAOI,IAAUvC,IAAAA;AAAAA,MACnDwC;AAEJC;AAAG,QAAa,YAATH;AACN,UAAoB,YAAA,OAATH;AACVP,QAAAA,GAAIM,MAAMQ,UAAUP;WACd;AAKN,YAJuB,YAAA,OAAZI,OACVX,GAAIM,MAAMQ,UAAUH,KAAW,KAG5BA;AACH,eAAKD,MAAQC;AACNJ,YAAAA,MAASG,MAAQH,MACtBF,EAASL,GAAIM,OAAOI,IAAM,EAAA;AAK7B,YAAIH;AACH,eAAKG,MAAQH;AACPI,YAAAA,MAAYJ,GAAMG,EAAAA,MAAUC,GAASD,EAAAA,KACzCL,EAASL,GAAIM,OAAOI,IAAMH,GAAMG,EAAAA,CAAAA;MAInC;aAGmB,QAAZA,GAAK,CAAA,KAA0B,QAAZA,GAAK,CAAA;AAChCE,MAAAA,KAAaF,QAAUA,KAAOA,GAAKK,QAAQ,YAAY,EAAA,IAGxBL,KAA3BA,GAAKM,YAAAA,KAAiBhB,KAAYU,GAAKM,YAAAA,EAActG,MAAM,CAAA,IACnDgG,GAAKhG,MAAM,CAAA,GAElBsF,GAALiB,MAAqBjB,GAAAiB,IAAiB,CAAA,IACtCjB,GAAAiB,EAAeP,KAAOE,EAAAA,IAAcL,IAEhCA,KACEI,MAEJX,GAAIkB,iBAAiBR,IADLE,KAAaO,IAAoBC,IACbR,EAAAA,IAIrCZ,GAAIqB,oBAAoBX,IADRE,KAAaO,IAAoBC,IACVR,EAAAA;aAErB,8BAATF,IAAoC;AAC9C,UAAItC;AAIHsC,QAAAA,KAAOA,GAAKK,QAAQ,eAAe,GAAA,EAAKA,QAAQ,UAAU,GAAA;eAEjD,WAATL,MACS,WAATA,MACS,WAATA,MAGS,eAATA,MACS,eAATA,MACAA,MAAQV;AAER,YAAA;AACCA,UAAAA,GAAIU,EAAAA,IAAiB,QAATH,KAAgB,KAAKA;AAEjC,gBAAMM;QAAAA,SACES,IAAAA;QAAAA;AAUW,oBAAA,OAAVf,OAES,QAATA,MAAAA,UAAkBA,MAAAA,MAAmBG,GAAKvE,QAAQ,GAAA,IAG5D6D,GAAIuB,gBAAgBb,EAAAA,IAFpBV,GAAIwB,aAAad,IAAMH,EAAAA;IAIxB;AACD;AAOD,SAASa,GAAWE,IAAAA;AACnBtF,OAAAA,EAAgBsF,GAAEnH,OAAAA,KAAO,EAAOuB,EAAQ+F,QAAQ/F,EAAQ+F,MAAMH,EAAAA,IAAKA,EAAAA;AACnE;AAED,SAASH,EAAkBG,IAAAA;AAC1BtF,OAAAiF,EAAgBK,GAAEnH,OAAAA,IAAO,EAAMuB,EAAQ+F,QAAQ/F,EAAQ+F,MAAMH,EAAAA,IAAKA,EAAAA;AAClE;AClIe1D,SAAAA,EACfF,IACAgE,IACAlE,IACAW,IACAC,IACAC,IACAd,IACAE,IACAa,IAAAA;AATeV,MAWX0B,IAoBE7C,IAAGkF,IAAOzB,IAAU0B,IAAUC,IAAUC,IACxC7B,IAKA8B,IACAC,IA6FOnI,IA4BPoI,IACHC,IASSrI,IA6BNmE,IA1LLmE,KAAUT,GAASvH;AAIpB,MAAA,WAAIuH,GAASnG;AAA2B,WAAA;AAGb,UAAvBiC,GAAAlC,QACHgD,KAAcd,GAAHlC,KACXmC,KAASiE,GAAAvG,MAAgBqC,GAAhBrC,KAETuG,GAAApG,MAAsB,MACtB+C,KAAoB,CAACZ,EAAAA,KAGjB6B,KAAM5D,EAAAA,QAAgB4D,GAAIoC,EAAAA;AAE/B,MAAA;AACC/B;AAAO,UAAsB,cAAA,OAAXwC,IAAuB;AA4DxC,YA1DIlC,KAAWyB,GAAS9H,OAKpBmI,MADJzC,KAAM6C,GAAQC,gBACQjE,GAAcmB,GAApCjE,GAAAA,GACI2G,KAAmB1C,KACpByC,KACCA,GAASnI,MAAM2G,QACfjB,GAHsBrE,KAIvBkD,IAGCX,GAAqBnC,MAExByG,MADArF,KAAIiF,GAAQrG,MAAcmC,GAA1BnC,KAC4BJ,KAAwBwB,GACpD4F,OAEI,eAAeF,MAAWA,GAAQG,UAAUC,SAE/Cb,GAAQrG,MAAcoB,KAAI,IAAI0F,GAAQlC,IAAU+B,EAAAA,KAGhDN,GAAArG,MAAsBoB,KAAI,IAAIX,EAAUmE,IAAU+B,EAAAA,GAClDvF,GAAElB,cAAc4G,IAChB1F,GAAE8F,SAASC,IAERT,MAAUA,GAASU,IAAIhG,EAAAA,GAE3BA,GAAE7C,QAAQqG,IACLxD,GAAEiG,UAAOjG,GAAEiG,QAAQ,CAAV,IACdjG,GAAEV,UAAUiG,IACZvF,GAAAA,MAAmB0B,IACnBwD,KAAQlF,GAAArB,MAAAA,MACRqB,GAACnB,MAAoB,CAAA,GACrBmB,GAAAkG,MAAoB,CAAA,IAID,QAAhBlG,GAAAmG,QACHnG,GAAAmG,MAAenG,GAAEiG,QAGsB,QAApCP,GAAQU,6BACPpG,GAAAmG,OAAgBnG,GAAEiG,UACrBjG,GAAAmG,MAAelJ,EAAO,CAAD,GAAK+C,GAALmG,GAAAA,IAGtBlJ,EACC+C,GADKmG,KAELT,GAAQU,yBAAyB5C,IAAUxD,GAA3CmG,GAAAA,CAAAA,IAIF1C,KAAWzD,GAAE7C,OACbgI,KAAWnF,GAAEiG,OAGTf;AAEkC,kBAApCQ,GAAQU,4BACgB,QAAxBpG,GAAEqG,sBAEFrG,GAAEqG,mBAAAA,GAGwB,QAAvBrG,GAAEsG,qBACLtG,GAACnB,IAAkBqB,KAAKF,GAAEsG,iBAAAA;aAErB;AASN,cAPqC,QAApCZ,GAAQU,4BACR5C,OAAaC,MACkB,QAA/BzD,GAAEuG,6BAEFvG,GAAEuG,0BAA0B/C,IAAU+B,EAAAA,GAAAA,CAIpCvF,GACDA,OAA2B,QAA3BA,GAAEwG,yBAAAA,UACFxG,GAAEwG,sBACDhD,IACAxD,GACAuF,KAAAA,EAAAA,KAEFN,GAAAlG,QAAuBgC,GAAvBhC,KACC;AAYD,iBAXAiB,GAAE7C,QAAQqG,IACVxD,GAAEiG,QAAQjG,GAEVmG,KAAIlB,GAAQlG,QAAegC,GAA3BhC,QAA+CiB,GAACrB,MAAAA,QAChDqB,GAAAjB,MAAWkG,IACXA,GAAQvG,MAAQqC,GAAhBrC,KACAuG,GAAQ1G,MAAawC,GACrBkE,KAAAA,GAAA1G,IAAmBkI,QAAQ,SAAAnI,IAAAA;AACtBA,cAAAA,OAAOA,GAAAE,KAAgByG;YAC3B,CAAA,GAEQ7H,KAAI,GAAGA,KAAI4C,GAAAkG,IAAkBlI,QAAQZ;AAC7C4C,cAAAA,GAACnB,IAAkBqB,KAAKF,GAAAkG,IAAkB9I,EAAAA,CAAAA;AAE3C4C,YAAAA,GAACkG,MAAmB,CAAA,GAEhBlG,GAACnB,IAAkBb,UACtB8C,GAAYZ,KAAKF,EAAAA;AAGlB,kBAAMkD;UACN;AAE4B,kBAAzBlD,GAAE0G,uBACL1G,GAAE0G,oBAAoBlD,IAAUxD,GAAAA,KAAcuF,EAAAA,GAGnB,QAAxBvF,GAAE2G,sBACL3G,GAAAnB,IAAmBqB,KAAK,WAAA;AACvBF,YAAAA,GAAE2G,mBAAmBlD,IAAU0B,IAAUC,EAAAA;UACzC,CAAA;QAEF;AASD,YAPApF,GAAEV,UAAUiG,IACZvF,GAAE7C,QAAQqG,IACVxD,GAAAjB,MAAWkG,IACXjF,GAACkB,MAAcD,IAEXuE,KAAavG,EAAjBuB,KACCiF,KAAQ,GACL,eAAeC,MAAWA,GAAQG,UAAUC,QAAQ;AAQvD,eAPA9F,GAAEiG,QAAQjG,GACVA,KAAAA,GAAArB,MAAAA,OAEI6G,MAAYA,GAAWP,EAAAA,GAE3BpC,KAAM7C,GAAE8F,OAAO9F,GAAE7C,OAAO6C,GAAEiG,OAAOjG,GAAEV,OAAAA,GAE1BlC,KAAI,GAAGA,KAAI4C,GAAAkG,IAAkBlI,QAAQZ;AAC7C4C,YAAAA,GAACnB,IAAkBqB,KAAKF,GAAAkG,IAAkB9I,EAAAA,CAAAA;AAE3C4C,UAAAA,GAACkG,MAAmB,CAAA;QACpB;AACA,aAAA;AACClG,YAAAA,GAAAA,MAAAA,OACIwF,MAAYA,GAAWP,EAAAA,GAE3BpC,KAAM7C,GAAE8F,OAAO9F,GAAE7C,OAAO6C,GAAEiG,OAAOjG,GAAEV,OAAAA,GAGnCU,GAAEiG,QAAQjG,GACVmG;UAAAA,SAAQnG,GAAArB,OAAAA,EAAc8G,KAAQ;AAIhCzF,QAAAA,GAAEiG,QAAQjG,GAAVmG,KAEyB,QAArBnG,GAAE4G,oBACLlF,KAAgBzE,EAAOA,EAAO,CAAD,GAAKyE,EAAAA,GAAgB1B,GAAE4G,gBAAAA,CAAAA,IAGhD1B,MAAsC,QAA7BlF,GAAE6G,4BACfzB,KAAWpF,GAAE6G,wBAAwBpD,IAAU0B,EAAAA,IAK5C5D,KADI,QAAPsB,MAAeA,GAAInF,SAAS0B,MAAuB,QAAXyD,GAAIjF,MACLiF,GAAI1F,MAAMQ,WAAWkF,IAE7DvB,EACCL,IACAqB,MAAMC,QAAQhB,EAAAA,IAAgBA,KAAe,CAACA,EAAAA,GAC9C0D,IACAlE,IACAW,IACAC,IACAC,IACAd,IACAE,IACAa,EAAAA,GAGD7B,GAAEF,OAAOmF,GAGTA,KAAAA,GAAApG,MAAsB,MAElBmB,GAAAnB,IAAmBb,UACtB8C,GAAYZ,KAAKF,EAAAA,GAGdqF,OACHrF,GAAC4F,MAAiB5F,GAAAxB,KAAyB,OAG5CwB,GAACtB,MAAAA;MACD;AACqB,gBAArBkD,MACAqD,GAAAlG,QAAuBgC,GAFjBhC,OAINkG,GAAA1G,MAAqBwC,GAArBxC,KACA0G,GAAQvG,MAAQqC,GAChBrC,OACAuG,GAAQvG,MAAQoI,GACf/F,GACAkE,KAAAA,IACAlE,IACAW,IACAC,IACAC,IACAd,IACAe,EAAAA;AAAAA,KAIGgB,KAAM5D,EAAQ8H,WAASlE,GAAIoC,EAAAA;EAYhC,SAXQJ,IAAAA;AACRI,IAAAA,GAAAlG,MAAqB,OAEjB8C,MAAoC,QAArBD,QAClBqD,GAAAvG,MAAgBsC,IAChBiE,GAAQpG,MAAAA,CAAAA,CAAgBgD,IACxBD,GAAkBA,GAAkBlC,QAAQsB,EAAAA,CAAAA,IAAW,OAIxD/B,EAAAP,IAAoBmG,IAAGI,IAAUlE,EAAAA;EACjC;AACD;AAOM,SAASM,EAAWP,IAAakG,IAAAA;AACnC/H,IAAiBA,OAAAA,EAAAL,IAAgBoI,IAAMlG,EAAAA,GAE3CA,GAAYF,KAAK,SAAAZ,IAAAA;AAChB,QAAA;AAECc,MAAAA,KAAcd,GAAdnB,KACAmB,GAACnB,MAAoB,CAAA,GACrBiC,GAAYF,KAAK,SAAAqG,IAAAA;AAEhBA,QAAAA,GAAG/I,KAAK8B,EAAAA;MACR,CAAA;IAGD,SAFQ6E,IAAAA;AACR5F,QAAAP,IAAoBmG,IAAG7E,GAAvBjB,GAAAA;IACA;EACD,CAAA;AACD;AAgBD,SAAS+H,GACRvD,IACA0B,IACAlE,IACAW,IACAC,IACAC,IACAd,IACAe,IAAAA;AARD,MAoBShC,IAsDHqH,IACAC,IAjED1D,KAAW1C,GAAS5D,OACpBqG,KAAWyB,GAAS9H,OACpBiK,KAAWnC,GAASvH,MACpBN,KAAI;AAKR,MAFiB,UAAbgK,OAAoBzF,KAAAA,OAEC,QAArBC;AACH,WAAOxE,KAAIwE,GAAkB5D,QAAQZ;AAMpC,WALMyC,KAAQ+B,GAAkBxE,EAAAA,MAO/B,kBAAkByC,MAAAA,CAAAA,CAAYuH,OAC7BA,KAAWvH,GAAMwH,cAAcD,KAA8B,MAAnBvH,GAAMuH,WAChD;AACD7D,QAAAA,KAAM1D,IACN+B,GAAkBxE,EAAAA,IAAK;AACvB;MACA;;AAIH,MAAW,QAAPmG,IAAa;AAChB,QAAiB,SAAb6D;AAEH,aAAOE,SAASC,eAAe/D,EAAAA;AAI/BD,IAAAA,KADG5B,KACG2F,SAASE,gBACd,8BAEAJ,EAAAA,IAGKE,SAAS7J,cAEd2J,IACA5D,GAASiE,MAAMjE,EAAAA,GAKjB5B,KAAoB,MAEpBC,KAAAA;EACA;AAED,MAAiB,SAAbuF;AAEC3D,IAAAA,OAAaD,MAAc3B,MAAe0B,GAAImE,SAASlE,OAC1DD,GAAImE,OAAOlE;OAEN;AAWN,QATA5B,KAAoBA,MAAqB3D,EAAMC,KAAKqF,GAAIoE,UAAAA,GAIpDT,MAFJzD,KAAW1C,GAAS5D,SAASqF,GAENoF,yBACnBT,KAAU3D,GAASoE,yBAAAA,CAIlB/F,IAAa;AAGjB,UAAyB,QAArBD;AAEH,aADA6B,KAAW,CAAA,GACNrG,KAAI,GAAGA,KAAImG,GAAIsE,WAAW7J,QAAQZ;AACtCqG,UAAAA,GAASF,GAAIsE,WAAWzK,EAAAA,EAAG6G,IAAAA,IAAQV,GAAIsE,WAAWzK,EAAAA,EAAG0G;AAAAA,OAInDqD,MAAWD,QAGZC,OACED,MAAWC,GAAOW,UAAWZ,GAAlBY,UACbX,GAAAW,WAAmBvE,GAAIwE,eAExBxE,GAAIwE,YAAaZ,MAAWA,GAAZW,UAA+B;IAGjD;AAKD,QAHAxE,EAAUC,IAAKC,IAAUC,IAAU9B,IAAOE,EAAAA,GAGtCsF;AACHlC,MAAAA,GAAQ1G,MAAa,CAAA;aAErBnB,KAAI6H,GAAS9H,MAAMQ,UACnB2D,EACCiC,IACAjB,MAAMC,QAAQnF,EAAAA,IAAKA,KAAI,CAACA,EAAAA,GACxB6H,IACAlE,IACAW,IACAC,MAAsB,oBAAbyF,IACTxF,IACAd,IACAc,KACGA,GAAkB,CAAA,IAClBb,GAAAxC,OAAsBiB,EAAcuB,IAAU,CAAA,GACjDc,EAAAA,GAIwB,QAArBD;AACH,WAAKxE,KAAIwE,GAAkB5D,QAAQZ;AACN,gBAAxBwE,GAAkBxE,EAAAA,KAAYC,EAAWuE,GAAkBxE,EAAAA,CAAAA;AAM7DyE,IAAAA,OAEH,WAAW2B,MAAAA,YACVpG,KAAIoG,GAASM,WAKb1G,OAAMmG,GAAIO,SACI,eAAbsD,MAAAA,CAA4BhK,MAIf,aAAbgK,MAAyBhK,OAAMqG,GAASK,UAE1CH,EAAYJ,IAAK,SAASnG,IAAGqG,GAASK,OAAAA,KAAO,GAG7C,aAAaN,MAAAA,YACZpG,KAAIoG,GAASwE,YACd5K,OAAMmG,GAAIyE,WAEVrE,EAAYJ,IAAK,WAAWnG,IAAGqG,GAASuE,SAAAA,KAAS;EAGnD;AAED,SAAOzE;AACP;AAQeX,SAAAA,GAAS/E,IAAKiG,IAAOxF,IAAAA;AACpC,MAAA;AACmB,kBAAA,OAAPT,KAAmBA,GAAIiG,EAAAA,IAC7BjG,GAAIsB,UAAU2E;EAGnB,SAFQe,IAAAA;AACR5F,MAAAP,IAAoBmG,IAAGvG,EAAAA;EACvB;AACD;AAUM,SAASqE,EAAQrE,IAAO2J,IAAaC,IAAAA;AAArC,MACFC,IAuBM/K;AAdV,MARI6B,EAAQ0D,WAAS1D,EAAQ0D,QAAQrE,EAAAA,IAEhC6J,KAAI7J,GAAMT,SACTsK,GAAEhJ,WAAWgJ,GAAEhJ,YAAYb,GAAdI,OACjBkE,GAASuF,IAAG,MAAMF,EAAAA,IAIU,SAAzBE,KAAI7J,GAAHM,MAA8B;AACnC,QAAIuJ,GAAEC;AACL,UAAA;AACCD,QAAAA,GAAEC,qBAAAA;MAGF,SAFQvD,IAAAA;AACR5F,UAAOP,IAAamG,IAAGoD,EAAAA;MACvB;AAGFE,IAAAA,GAAErI,OAAOqI,GAAAjH,MAAe,MACxB5C,GAAKM,MAAAA;EACL;AAED,MAAKuJ,KAAI7J,GAAHC;AACL,SAASnB,KAAI,GAAGA,KAAI+K,GAAEnK,QAAQZ;AACzB+K,MAAAA,GAAE/K,EAAAA,KACLuF,EACCwF,GAAE/K,EAAAA,GACF6K,IACAC,MAAoC,cAAA,OAAf5J,GAAMZ,IAAAA;AAM1BwK,EAAAA,MAA4B,QAAd5J,GAAKI,OACvBrB,EAAWiB,GAADI,GAAAA,GAKXJ,GAAAE,KAAgBF,GAAKI,MAAQJ,GAAAK,MAAAA;AAC7B;AAGD,SAASoH,EAAS5I,IAAO8I,IAAO3G,IAAAA;AAC/B,SAAYR,KAAAA,YAAY3B,IAAOmC,EAAAA;AAC/B;AC5hBM,SAASwG,EAAOxH,IAAO2C,IAAWoH,IAAAA;AAAlC,MAMFxG,IAOAd,IAUAD;AAtBA7B,IAAeA,MAAAA,EAAAT,GAAcF,IAAO2C,EAAAA,GAYpCF,MAPAc,KAAqC,cAAA,OAAhBwG,MAQtB,OACCA,MAAeA,GAAAA,OAA0BpH,GAAAA,KAQzCH,KAAc,CAAA,GAClBK,EACCF,IARD3C,MAAAA,CACGuD,MAAewG,MACjBpH,IAFO1C,MAGMd,EAAc2B,IAAU,MAAM,CAACd,EAAAA,CAAAA,GAS5CyC,MAAYyB,GACZA,GAAAA,WACAvB,GAAUG,iBAAAA,CACTS,MAAewG,KACb,CAACA,EAAAA,IACDtH,KACA,OACAE,GAAUqH,aACVrK,EAAMC,KAAK+C,GAAU0G,UAAAA,IACrB,MACH7G,IAAAA,CACCe,MAAewG,KACbA,KACAtH,KACAA,GACAE,MAAAA,GAAUqH,YACbzG,EAAAA,GAIDR,EAAWP,IAAaxC,EAAAA;AACxB;AAQeoF,SAAAA,GAAQpF,IAAO2C,IAAAA;AAC9B6E,IAAOxH,IAAO2C,IAAWyC,EAAAA;AACzB;AAAA,SChEe6E,EAAajK,IAAOnB,IAAOQ,IAAAA;AAC1C,MACCC,IACAC,IACAT,IAHGU,KAAkBb,EAAO,CAAA,GAAIqB,GAAMnB,KAAAA;AAIvC,OAAKC,MAAKD;AACA,aAALC,KAAYQ,KAAMT,GAAMC,EAAAA,IACd,SAALA,KAAYS,KAAMV,GAAMC,EAAAA,IAC5BU,GAAgBV,EAAAA,IAAKD,GAAMC,EAAAA;AAQjC,SALIW,UAAUC,SAAS,MACtBF,GAAgBH,WACfI,UAAUC,SAAS,IAAIC,EAAMC,KAAKH,WAAW,CAAA,IAAKJ,KAG7CS,EACNE,GAAMZ,MACNI,IACAF,MAAOU,GAAMV,KACbC,MAAOS,GAAMT,KACb,IAAA;AAED;AN7BM,SAAS2K,EAAcC,IAAcC,IAAAA;AAG3C,MAAMpJ,KAAU,EACfV,KAHD8J,KAAY,SAAStL,KAIpBoB,IAAeiK,IAEfE,UAJe,SAINxL,IAAOyL,IAAAA;AAIf,WAAOzL,GAAMQ,SAASiL,EAAAA;EACtB,GAEDC,UAAAA,SAAS1L,IAAAA;AAAAA,QAEH2L,IACAC;AAmCL,WArCKxJ,KAAKqH,oBACLkC,KAAO,CAAA,IACPC,KAAM,CAAV,GACIL,EAAAA,IAAanJ,MAEjBA,KAAKqH,kBAAkB,WAAA;AAAA,aAAMmC;IAAN,GAEvBxJ,KAAKiH,wBAAwB,SAASwC,IAAAA;AACjCzJ,WAAKpC,MAAM2G,UAAUkF,GAAOlF,SAe/BgF,GAAKlI,KAAKb,CAAAA;IAEX,GAEDR,KAAKyG,MAAM,SAAAhG,IAAAA;AACV8I,MAAAA,GAAK5I,KAAKF,EAAAA;AACV,UAAIiJ,KAAMjJ,GAAEoI;AACZpI,MAAAA,GAAEoI,uBAAuB,WAAA;AACxBU,QAAAA,GAAKI,OAAOJ,GAAKpJ,QAAQM,EAAAA,GAAI,CAAA,GACzBiJ,MAAKA,GAAI/K,KAAK8B,EAAAA;MAClB;IACD,IAGK7C,GAAMQ;EACb,EAAA;AASF,SAAQ2B,GAAQuJ,SAAuBvJ,KAAAA,GAAQqJ,SAAShD,cAAcrG;AACtE;IJzCYrB,GCfPgB,GCRFD,GA6FSmK,GC4ETlJ,GAWAG,GCrLOhD,GCFEoF,GACAJ,GACA2B;;;IAFAvB,IAAY,CAAlB;IACMJ,IAAY,CAAA;IACZ2B,IAAqB;ALwBrB9F,QAAQmE,EAAUnE,OCfzBgB,IAAU,EACfP,KUHM,SAAqB0K,IAAO9K,IAAOyC,IAAUsI,IAAAA;AAInD,eAFIxI,IAAWyI,IAAMC,IAEbjL,KAAQA,GAAhBE;AACC,aAAKqC,KAAYvC,GAAHM,QAAAA,CAAyBiC,GAADrC;AACrC,cAAA;AAcC,iBAbA8K,KAAOzI,GAAU/B,gBAE4B,QAAjCwK,GAAKE,6BAChB3I,GAAU4I,SAASH,GAAKE,yBAAyBJ,EAAAA,CAAAA,GACjDG,KAAU1I,GAAHlC,MAG2B,QAA/BkC,GAAU6I,sBACb7I,GAAU6I,kBAAkBN,IAAOC,MAAa,CAAhD,CAAA,GACAE,KAAU1I,GACVlC,MAGG4K;AACH,qBAAQ1I,GAAS+E,MAAiB/E;UAInC,SAFQgE,IAAAA;AACRuE,YAAAA,KAAQvE;UACR;AAIH,YAAMuE;IACN,EAAA,GTpCGpK,IAAU,GA6FDmK,IAAiB,SAAA7K,IAAAA;AAAAA,aACpB,QAATA,MAAAA,WAAiBA,GAAMQ;IADW,GCtEnCO,EAAUwG,UAAU4D,WAAW,SAASE,IAAQC,IAAAA;AAE/C,UAAIC;AAEHA,MAAAA,KADsB,QAAnBtK,KAAA4G,OAA2B5G,KAAAA,QAAoBA,KAAK0G,QACnD1G,KACJ4G,MACI5G,KAAA4G,MAAkBlJ,EAAO,CAAD,GAAKsC,KAAK0G,KAAAA,GAGlB,cAAA,OAAV0D,OAGVA,KAASA,GAAO1M,EAAO,CAAA,GAAI4M,EAAAA,GAAItK,KAAKpC,KAAAA,IAGjCwM,MACH1M,EAAO4M,IAAGF,EAAAA,GAIG,QAAVA,MAEApK,KAAaR,QACZ6K,MACHrK,KAAA2G,IAAqBhG,KAAK0J,EAAAA,GAE3B7J,EAAcR,IAAAA;IAEf,GAQDF,EAAUwG,UAAUiE,cAAc,SAASF,IAAAA;AACtCrK,WAAAA,QAIHA,KAAAb,MAAAA,MACIkL,MAAUrK,KAAsBW,IAAAA,KAAK0J,EAAAA,GACzC7J,EAAcR,IAAAA;IAEf,GAYDF,EAAUwG,UAAUC,SAAS1G,IAyFzBa,IAAgB,CAAA,GA4CpBE,EAAOK,MAAkB,GCtNdpD,IAAI;;;;;AQyHf,SAAS2M,GAAaC,IAAOC,IAAAA;AACxBC,IAAeC,OAClBD,EAAOC,IAAOC,IAAkBJ,IAAOK,MAAeJ,EAAAA,GAEvDI,KAAc;AAOd,MAAMC,KACLF,GAAAG,QACCH,GAAgBG,MAAW,EAC3BC,IAAO,CAAA,GACPL,KAAiB,CAAA,EAAA;AAMnB,SAHIH,MAASM,GAAAA,GAAYG,UACxBH,GAAKE,GAAOE,KAAK,EAAEC,KAAeC,GAAAA,CAAAA,GAE5BN,GAAAE,GAAYR,EAAAA;AACnB;AAKM,SAASa,GAASC,IAAAA;AAExB,SADAT,KAAc,GACPU,GAAWC,IAAgBF,EAAAA;AAClC;AAQM,SAASC,GAAWE,IAASH,IAAcI,IAAAA;AAEjD,MAAMC,KAAYpB,GAAaqB,MAAgB,CAAA;AAE/C,MADAD,GAAUE,IAAWJ,IAAAA,CAChBE,GAALG,QACCH,GAAAX,KAAmB,CACjBU,KAAiDA,GAAKJ,EAAAA,IAA/CE,GAAAA,QAA0BF,EAAAA,GAElC,SAAAS,IAAAA;AACC,QAAMC,KAAeL,GAASM,MAC3BN,GAAAA,IAAqB,CAAA,IACrBA,GAASX,GAAQ,CAAA,GACdkB,KAAYP,GAAUE,EAASG,IAAcD,EAAAA;AAE/CC,IAAAA,OAAiBE,OACpBP,GAASM,MAAc,CAACC,IAAWP,GAAAX,GAAiB,CAAA,CAAA,GACpDW,GAAAG,IAAqBK,SAAS,CAA9B,CAAA;EAED,CAAA,GAGFR,GAAAA,MAAuBf,IAAAA,CAElBA,GAAiBwB,IAAkB;AACvCxB,IAAAA,GAAiBwB,IAAAA;AACjB,QAAMC,KAAUzB,GAAiB0B;AAQjC1B,IAAAA,GAAiB0B,wBAAwB,SAASC,IAAGC,IAAGC,IAAAA;AACvD,UAAA,CAAKd,GAALG,IAAAf;AAAmC,eAAA;AAEnC,UAAM2B,KAAaf,GAAAG,IAAAf,IAAAC,GAAmC2B,OACrD,SAAAC,IAAAA;AAAAA,eAAKA,GADad;MAAA,CAAA;AAMnB,UAHsBY,GAAWG,MAAM,SAAAD,IAAAA;AAAC,eAAA,CAAKA,GAALX;MAAA,CAAA;AAIvC,eAAA,CAAOI,MAAUA,GAAQS,KAAKC,MAAMR,IAAGC,IAAGC,EAAAA;AAM3C,UAAIO,KAAAA;AAUJ,aATAN,GAAWO,QAAQ,SAAAC,IAAAA;AAClB,YAAIA,GAAJjB,KAAyB;AACxB,cAAMD,KAAekB,GAAQlC,GAAQ,CAAA;AACrCkC,UAAAA,GAAAlC,KAAkBkC,GAClBA,KAAAA,GAAAjB,MAAAA,QACID,OAAiBkB,GAAQlC,GAAQ,CAAA,MAAIgC,KAAAA;QACzC;MACD,CAAA,GAAA,EAAA,CAEMA,MAAgBrB,GAASG,IAAYqB,UAAUZ,QAAAA,CACnDF,MACCA,GAAQS,KAAKC,MAAMR,IAAGC,IAAGC,EAAAA;IAG7B;EACD;AAGF,SAAOd,GAASM,OAAeN,GAC/BX;AAAA;AAMeoC,SAAAA,GAAUC,IAAUC,IAAAA;AAEnC,MAAMC,KAAQhD,GAAaqB,MAAgB,CAAA;AAAA,GACtClB,EAAD8C,OAAyBC,GAAYF,GAAaD,KAAAA,EAAAA,MACrDC,GAAAA,KAAeF,IACfE,GAAMG,IAAeJ,IAErB1C,GAAgBG,IAAyBG,IAAAA,KAAKqC,EAAAA;AAE/C;AAMM,SAASI,GAAgBN,IAAUC,IAAAA;AAEzC,MAAMC,KAAQhD,GAAaqB,MAAgB,CAAA;AAAA,GACtClB,EAAD8C,OAAyBC,GAAYF,GAADxC,KAAcuC,EAAAA,MACrDC,GAAAvC,KAAeqC,IACfE,GAAMG,IAAeJ,IAErB1C,GAAgBD,IAAkBO,KAAKqC,EAAAA;AAExC;AAEM,SAASK,GAAOC,IAAAA;AAEtB,SADAhD,KAAc,GACPiD,EAAQ,WAAA;AAAO,WAAA,EAAEC,SAASF,GAAAA;EAAlB,GAAmC,CAAA,CAAA;AAClD;AAOeG,SAAAA,GAAoBC,IAAKC,IAAcZ,IAAAA;AACtDzC,EAAAA,KAAc,GACd8C,GACC,WAAA;AACC,WAAkB,cAAA,OAAPM,MACVA,GAAIC,GAAAA,CAAAA,GACG,WAAA;AAAA,aAAMD,GAAI,IAAA;IAAV,KACGA,MACVA,GAAIF,UAAUG,GAAAA,GACP,WAAA;AAAA,aAAOD,GAAIF,UAAU;IAArB,KAAA;EAER,GACO,QAART,KAAeA,KAAOA,GAAKa,OAAOF,EAAAA,CAAAA;AAEnC;AAMeH,SAAAA,EAAQM,IAASd,IAAAA;AAEhC,MAAMC,KAAQhD,GAAaqB,MAAgB,CAAA;AAC3C,SAAI6B,GAAYF,GAAaD,KAAAA,EAAAA,KAC5BC,GAAKpC,MAAiBiD,GAAAA,GACtBb,GAAMG,IAAeJ,IACrBC,GAAK5C,MAAYyD,IACVb,GAAPpC,OAGMoC,GAAAA;AACP;AAMec,SAAAA,GAAYhB,IAAUC,IAAAA;AAErC,SADAzC,KAAc,GACPiD,EAAQ,WAAA;AAAA,WAAMT;EAAN,GAAgBC,EAAAA;AAC/B;AAKegB,SAAAA,GAAWC,IAAAA;AAC1B,MAAMC,KAAW5D,GAAiB2D,QAAQA,GAA1CzC,GAAAA,GAKMyB,KAAQhD,GAAaqB,MAAgB,CAAA;AAK3C,SADA2B,GAAKd,IAAY8B,IACZC,MAEe,QAAhBjB,GAAKvC,OACRuC,GAAAvC,KAAAA,MACAwD,GAASC,IAAI7D,EAAAA,IAEP4D,GAASrB,MAAMuB,SANAH,GAEtBvD;AAKA;AAMM,SAAS2D,GAAcD,IAAOE,IAAAA;AAChClE,IAAQiE,iBACXjE,EAAQiE,cAAcC,KAAYA,GAAUF,EAAAA,IAASA,EAAAA;AAEtD;AAKeG,SAAAA,GAAiBC,IAAAA;AAEhC,MAAMvB,KAAQhD,GAAaqB,MAAgB,EAAA,GACrCmD,KAAW1D,GAAAA;AAQjB,SAPAkC,GAAKvC,KAAU8D,IACVlE,GAAiBoE,sBACrBpE,GAAiBoE,oBAAoB,SAACC,IAAKC,IAAAA;AACtC3B,IAAAA,GAAAA,MAAcA,GAAKvC,GAAQiE,IAAKC,EAAAA,GACpCH,GAAS,CAAA,EAAGE,EAAAA;EACZ,IAEK,CACNF,GAAS,CAAA,GACT,WAAA;AACCA,IAAAA,GAAS,CAAA,EAAA,MAAGI;EACZ,CAAA;AAEF;AAEM,SAASC,IAAAA;AACf,MAAM7B,KAAQhD,GAAaqB,MAAgB,EAAA;AAC3C,MAAA,CAAK2B,GAALvC,IAAmB;AAIlB,aADIqE,KAAOzE,GAAH0E,KACQ,SAATD,MAAAA,CAAkBA,GAADE,OAAgC,SAAjBF,GAAAA;AACtCA,MAAAA,KAAOA,GACPrE;AAED,QAAIwE,KAAOH,GAAAE,QAAeF,GAAIE,MAAS,CAAC,GAAG,CAAA;AAC3ChC,IAAAA,GAAAA,KAAe,MAAMiC,GAAK,CAAA,IAAK,MAAMA,GAAK,CAAA;EAC1C;AAED,SAAOjC,GACPvC;AAAA;AAID,SAASyE,KAAAA;AAER,WADIC,IACIA,KAAYC,GAAkBC,MAAAA;AACrC,QAAKF,GAAAA,OAAyBA,GAA9B3E;AACA,UAAA;AACC2E,QAAAA,GAAS3E,IAAyBkC,IAAAA,QAAQ4C,EAAAA,GAC1CH,GAAS3E,IAAyBkC,IAAAA,QAAQ6C,EAAAA,GAC1CJ,GAAS3E,IAA2BJ,MAAA,CAAA;MAIpC,SAHQoF,IAAAA;AACRL,QAAAA,GAAS3E,IAA2BJ,MAAA,CAAA,GACpCD,EAAOsF,IAAaD,IAAGL,GAAAA,GAAAA;MACvB;AAEF;AAcD,SAASO,GAAe5C,IAAAA;AACvB,MAOI6C,IAPEC,KAAO,WAAA;AACZC,iBAAaC,EAAAA,GACTC,MAASC,qBAAqBL,EAAAA,GAClCM,WAAWnD,EAAAA;EACX,GACKgD,KAAUG,WAAWL,IA5YR,GAAA;AA+YfG,EAAAA,OACHJ,KAAMO,sBAAsBN,EAAAA;AAE7B;AAmBD,SAASN,GAAca,IAAAA;AAGtB,MAAMC,KAAO/F,IACTgG,KAAUF,GAAd5E;AACsB,gBAAA,OAAX8E,OACVF,GAAAA,MAAAA,QACAE,GAAAA,IAGDhG,KAAmB+F;AACnB;AAMD,SAASb,GAAaY,IAAAA;AAGrB,MAAMC,KAAO/F;AACb8F,EAAAA,GAAI5E,MAAY4E,GAAAA,GAAAA,GAChB9F,KAAmB+F;AACnB;AAMD,SAASlD,GAAYoD,IAASC,IAAAA;AAC7B,SAAA,CACED,MACDA,GAAQ5F,WAAW6F,GAAQ7F,UAC3B6F,GAAQC,KAAK,SAACC,IAAKxG,IAAAA;AAAUwG,WAAAA,OAAQH,GAAQrG,EAAAA;EAAhC,CAAA;AAEd;AAED,SAASgB,GAAewF,IAAKC,IAAAA;AAC5B,SAAmB,cAAA,OAALA,KAAkBA,GAAED,EAAAA,IAAOC;AACzC;IAleGrF,IAGAhB,IAGAsG,IAiBAC,IAdAtG,IAGA8E,IAEAvE,IAEAgG,IACAC,IACAC,IACAC,IACAC,IA4XAlB;;;;AAhZJ,IASIzF,KAAc;AATlB,IAYI8E,KAAoB,CAAA;AAZxB,IAcIvE,KAAQ,CAAA;AAdZ,IAgBIgG,KAAgB1G,EAAAA;AAhBpB,IAiBI2G,KAAkB3G,EAAAA;AAjBtB,IAkBI4G,KAAe5G,EAAQ+G;AAlB3B,IAmBIF,KAAY7G,EAAhBoB;AAnBA,IAoBI0F,KAAmB9G,EAAQgH;AAK/BhH,MAAAiH,MAAgB,SAAAC,IAAAA;AACfhH,MAAAA,KAAmB,MACfwG,MAAeA,GAAcQ,EAAAA;IACjC,GAEDlH,EAAAA,MAAkB,SAAAkH,IAAAA;AACbP,MAAAA,MAAiBA,GAAgBO,EAAAA,GAGrChG,KAAe;AAEf,UAAMd,MAHNF,KAAmBgH,GAAnB9F,KAAAA;AAIIhB,MAAAA,OACCoG,OAAsBtG,MACzBE,GAAKH,MAAmB,CAAA,GACxBC,GAAgBD,MAAoB,CAAA,GACpCG,GAAKE,GAAOiC,QAAQ,SAAAC,IAAAA;AACfA,QAAAA,GAAqBjB,QACxBiB,GAAAlC,KAAkBkC,GAAlBjB,MAEDiB,GAAAA,MAAyB9B,IACzB8B,GAAAjB,MAAsBiB,GAASQ,IAAAA;MAC/B,CAAA,MAED5C,GAAKH,IAAiBsC,QAAQ4C,EAAAA,GAC9B/E,GAAKH,IAAiBsC,QAAQ6C,EAAAA,GAC9BhF,GAAKH,MAAmB,CAAA,KAG1BuG,KAAoBtG;IACpB,GAEDF,EAAQ+G,SAAS,SAAAG,IAAAA;AACZN,MAAAA,MAAcA,GAAaM,EAAAA;AAE/B,UAAMnF,KAAImF,GAAV9F;AACIW,MAAAA,MAAKA,GAAAA,QACJA,GAAA1B,IAAAJ,IAA0BM,WAoXR,MApX2B0E,GAAkBzE,KAAKuB,EAAAA,KAoX7C0E,OAAYzG,EAAQ+F,2BAC/CU,KAAUzG,EAAQ+F,0BACNR,IAAgBR,EAAAA,IArX5BhD,GAAC1B,IAAAA,GAAekC,QAAQ,SAAAC,IAAAA;AACnBA,QAAAA,GAASQ,MACZR,GAAAA,MAAiBA,GAASQ,IAEvBR,GAAA/B,QAA2BC,OAC9B8B,GAAAA,KAAkBA,GAClB/B,MACD+B,GAASQ,IAAAA,QACTR,GAAA/B,MAAyBC;MACzB,CAAA,IAEF8F,KAAoBtG,KAAmB;IACvC,GAEDF,EAAAoB,MAAkB,SAAC8F,IAAOC,IAAAA;AACzBA,MAAAA,GAAYd,KAAK,SAAArB,IAAAA;AAChB,YAAA;AACCA,UAAAA,GAAA/E,IAA2BsC,QAAQ4C,EAAAA,GACnCH,GAAA/E,MAA6B+E,GAAS/E,IAAkBgC,OAAO,SAAAmC,IAAAA;AAC9DA,mBAAAA,CAAAA,GAAA9D,MAAY8E,GAAahB,EAAAA;UADuC,CAAA;QASjE,SANQiB,IAAAA;AACR8B,UAAAA,GAAYd,KAAK,SAAAtE,IAAAA;AACZA,YAAAA,GAAoBA,QAAAA,GAAAA,MAAqB,CAAA;UAC7C,CAAA,GACDoF,KAAc,CAAA,GACdnH,EAAAsF,IAAoBD,IAAGL,GACvBJ,GAAAA;QAAA;MACD,CAAA,GAEGiC,MAAWA,GAAUK,IAAOC,EAAAA;IAChC,GAEDnH,EAAQgH,UAAU,SAAAE,IAAAA;AACbJ,MAAAA,MAAkBA,GAAiBI,EAAAA;AAEvC,UAEKE,IAFCrF,KAAImF,GAAH9F;AACHW,MAAAA,MAAKA,GAAT1B,QAEC0B,GAAC1B,IAAAA,GAAekC,QAAQ,SAAAT,IAAAA;AACvB,YAAA;AACCqD,UAAAA,GAAcrD,EAAAA;QAGd,SAFQuD,IAAAA;AACR+B,UAAAA,KAAa/B;QACb;MACD,CAAA,GACDtD,GAAA1B,MAAAA,QACI+G,MAAYpH,EAAOsF,IAAa8B,IAAYrF,GAAAA,GAAAA;IAEjD;AAgSD,IAAI6D,KAA0C,cAAA,OAAzBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5YLsB,SAAAA,GAAOC,IAAKC,IAAAA;AAC3B,WAASC,MAAKD;AAAOD,IAAAA,GAAIE,EAAAA,IAAKD,GAAMC,EAAAA;AACpC,SAA6BF;AAC7B;AAQeG,SAAAA,GAAeC,IAAGC,IAAAA;AACjC,WAASH,MAAKE;AAAG,QAAU,eAANF,MAAAA,EAAsBA,MAAKG;AAAI,aAAA;AACpD,WAASH,MAAKG;AAAG,QAAU,eAANH,MAAoBE,GAAEF,EAAAA,MAAOG,GAAEH,EAAAA;AAAI,aAAA;AACxD,SAAA;AACA;AAaM,SAASI,EAAGC,IAAGC,IAAAA;AACrB,SAAQD,OAAMC,OAAY,MAAND,MAAW,IAAIA,MAAM,IAAIC,OAAQD,MAAMA,MAAKC,MAAMA;AACtE;AC/BeC,SAAAA,GAAcC,IAAAA;AAC7BC,OAAKV,QAAQS;AACb;ACEM,SAASE,EAAKC,IAAGC,IAAAA;AACvB,WAASC,GAAaC,IAAAA;AACrB,QAAIC,KAAMN,KAAKV,MAAMgB,KACjBC,KAAYD,MAAOD,GAAUC;AAKjC,WAAA,CAJKC,MAAaD,OACjBA,GAAIE,OAAOF,GAAI,IAAA,IAASA,GAAIG,UAAU,OAGlCN,KAAAA,CAIGA,GAASH,KAAKV,OAAOe,EAAAA,KAAAA,CAAeE,KAHpCf,GAAeQ,KAAKV,OAAOe,EAAAA;EAInC;AAED,WAASK,GAAOpB,IAAAA;AAEf,WADAU,KAAKW,wBAAwBP,IACtBQ,EAAcV,IAAGZ,EAAAA;EACxB;AAID,SAHAoB,GAAOG,cAAc,WAAWX,GAAEW,eAAeX,GAAEY,QAAQ,KAC3DJ,GAAOK,UAAUC,mBAAAA,MACjBN,GAAAA,MAAAA,MACOA;AACP;ACjBA,SASeO,GAAWC,IAAAA;AAC1B,WAASC,GAAU7B,IAAAA;AAClB,QAAI8B,KAAQhC,GAAO,CAAD,GAAKE,EAAAA;AAEvB,WAAA,OADO8B,GAAMd,KACNY,GAAGE,IAAO9B,GAAMgB,OAAO,IAAA;EAC9B;AAYD,SATAa,GAAUE,WAAWC,IAKrBH,GAAUI,SAASJ,IAEnBA,GAAUJ,UAAUC,mBAAmBG,GAASK,MAAAA,MAChDL,GAAUN,cAAc,iBAAiBK,GAAGL,eAAeK,GAAGJ,QAAQ,KAC/DK;AACP;AEAD,SAASM,GAAcC,IAAOC,IAAgBC,IAAAA;AAyB7C,SAxBIF,OACCA,GAAKG,OAAeH,GAAAA,IAAAA,QACvBA,GAAKG,IAA0BC,IAAAA,GAAAA,QAAQ,SAAAC,IAAAA;AACR,kBAAA,OAAnBA,GAAPF,OAAsCE,GAAMF,IAAAA;EAChD,CAAA,GAEDH,GAAKG,IAAsBG,MAAA,OAIJ,SADxBN,KAAQtC,GAAO,CAAD,GAAKsC,EAAAA,GACVG,QACJH,GAAKG,IAAAA,QAA2BD,OACnCF,GAAAG,IAAAI,MAA8BN,KAE/BD,GAAAA,MAAmB,OAGpBA,GAAKQ,MACJR,GAAAQ,OACAR,GAAAQ,IAAgBC,IAAI,SAAAC,IAAAA;AAAAA,WACnBX,GAAcW,IAAOT,IAAgBC,EAAAA;EADb,CAAA,IAKpBF;AACP;AAED,SAASW,EAAeX,IAAOC,IAAgBW,IAAAA;AAoB9C,SAnBIZ,OACHA,GAAKa,MAAa,MAClBb,GAAKQ,MACJR,GAAAA,OACAA,GAAAQ,IAAgBC,IAAI,SAAAC,IAAAA;AAAK,WACxBC,EAAeD,IAAOT,IAAgBW,EAAAA;EADd,CAAA,GAItBZ,GAAAA,OACCA,GAAAG,IAAAI,QAAgCN,OAC/BD,GAAYc,OACfF,GAAeG,aAAaf,GAAYA,KAAAA,GACxCgB,GAAAA,GACDhB,GAAKG,IAAAA,MAAAA,MACLH,GAAKG,IAAyBS,MAAAA,MAK1BZ;AACP;AAGeiB,SAAAA,KAAAA;AAEf3C,OAAA4C,MAA+B,GAC/B5C,KAAK6C,IAAc,MACnB7C,KAAAA,MAA2B;AAC3B;AAmIM,SAAS8C,GAAUpB,IAAAA;AAEzB,MAAIqB,KAAYrB,GAAHsB,GAAAnB;AACb,SAAOkB,MAAaA,GAAJE,OAA4BF,GAAAA,IAAqBrB,EAAAA;AACjE;AAAA,SAEewB,GAAKC,IAAAA;AACpB,MAAIC,IACAL,IACAM;AAEJ,WAASC,GAAKhE,IAAAA;AAab,QAZK8D,OACJA,KAAOD,GAAAA,GACFI,KACJ,SAAAC,IAAAA;AACCT,MAAAA,KAAYS,GAAQC,WAAWD;IAC/B,GACD,SAAAE,IAAAA;AACCL,MAAAA,KAAQK;IACR,CAAA,GAICL;AACH,YAAMA;AAGP,QAAA,CAAKN;AACJ,YAAMK;AAGP,WAAOxC,EAAcmC,IAAWzD,EAAAA;EAChC;AAID,SAFAgE,GAAKzC,cAAc,QACnByC,GAAI9B,MAAAA,MACG8B;AACP;ACpQeK,SAAAA,KAAAA;AACf3D,OAAK4D,IAAQ,MACb5D,KAAK6D,IAAO;AACZ;ACPD,SAASC,GAAgBxE,IAAAA;AAExB,SADAU,KAAK+D,kBAAkB,WAAA;AAAA,WAAMzE,GAAM0E;EAAZ,GAChB1E,GAAM2E;AACb;AASD,SAASC,GAAO5E,IAAAA;AACf,MAAM6E,KAAQnE,MACVoE,KAAY9E,GAAM+E;AAEtBF,EAAAA,GAAMG,uBAAuB,WAAA;AAC5B/C,MAAO,MAAM4C,GAAMI,CAAAA,GACnBJ,GAAMI,IAAQ,MACdJ,GAAME,IAAa;EACnB,GAIGF,GAAME,KAAcF,GAAME,MAAeD,MAC5CD,GAAMG,qBAAAA,GAKHhF,GAAJiD,OACM4B,GAAMI,MACVJ,GAAME,IAAaD,IAGnBD,GAAMI,IAAQ,EACbC,UAAU,GACVC,YAAYL,IACZM,YAAY,CAAA,GACZC,aAAYvC,SAAAA,IAAAA;AACXpC,SAAK0E,WAAWE,KAAKxC,EAAAA,GACrB+B,GAAME,EAAWM,YAAYvC,EAAAA;EAC7B,GACDK,cARa,SAQAL,IAAOyC,IAAAA;AACnB7E,SAAK0E,WAAWE,KAAKxC,EAAAA,GACrB+B,GAAME,EAAWM,YAAYvC,EAAAA;EAC7B,GACD0C,aAAY1C,SAAAA,IAAAA;AACXpC,SAAK0E,WAAWK,OAAO/E,KAAK0E,WAAWM,QAAQ5C,EAAAA,MAAW,GAAG,CAAA,GAC7D+B,GAAME,EAAWS,YAAY1C,EAAAA;EAC7B,EAAA,IAKHb,EACCX,EAAckD,IAAiB,EAAEE,SAASG,GAAMH,QAAAA,GAAW1E,GAA9CiD,GAAAA,GACb4B,GAAMI,CAAAA,KAKCJ,GAAMI,KACdJ,GAAMG,qBAAAA;AAEP;AAOM,SAASW,GAAavD,IAAO0C,IAAAA;AACnC,MAAMc,KAAKtE,EAAcsD,IAAQ,EAAE3B,KAAQb,IAAO2C,GAAYD,GAAAA,CAAAA;AAE9D,SADAc,GAAGC,gBAAgBf,IACZc;AACP;ACnBM,SAAS3D,GAAOG,IAAO0D,IAAQC,IAAAA;AAUrC,SAPwB,QAApBD,GAAAlD,QACHkD,GAAOE,cAAc,KAGtBC,EAAa7D,IAAO0D,EAAAA,GACG,cAAA,OAAZC,MAAwBA,GAAAA,GAE5B3D,KAAQA,GAAmBG,MAAA;AAClC;AAEe2D,SAAAA,GAAQ9D,IAAO0D,IAAQC,IAAAA;AAItC,SAHAI,GAAc/D,IAAO0D,EAAAA,GACE,cAAA,OAAZC,MAAwBA,GAAAA,GAE5B3D,KAAQA,GAAmBG,MAAA;AAClC;AAWD,SAAS6D,IAAAA;AAET;AAAA,SAASC,KAAAA;AACR,SAAO3F,KAAK4F;AACZ;AAED,SAASC,IAAAA;AACR,SAAO7F,KAAK8F;AACZ;ACxDD,SAASC,GAAcC,IAAAA;AACtB,SAAOpF,EAAcqF,KAAK,MAAMD,EAAAA;AAChC;AAOD,SAASE,GAAeC,IAAAA;AACvB,SAAA,CAAA,CAASA,MAAWA,GAAQ9E,aAAa+E;AACzC;AASD,SAASC,GAAaF,IAAAA;AACrB,SAAKD,GAAeC,EAAAA,IACbG,EAAmBC,MAAM,MAAMC,SAAAA,IADDL;AAErC;AAOD,SAASM,GAAuBrC,IAAAA;AAC/B,SAAA,CAAA,CAAIA,GAAJlC,QACCqD,EAAa,MAAMnB,EAAAA,GAAAA;AAIpB;AAOD,SAASsC,GAAY3D,IAAAA;AACpB,SACEA,OACCA,GAAU4D,QAAgC,MAAvB5D,GAAUyB,YAAkBzB,OACjD;AAED;AA2BkB6D,SAEHC,GAAgBC,IAAAA;AAC/BA,EAAAA,GAAAA;AACA;AAAA,SAEeC,GAAiBC,IAAAA;AAChC,SAAOA;AACP;AAEeC,SAAAA,KAAAA;AACf,SAAO,CAAA,OAAQJ,EAAAA;AACf;AAIiCK,SAMlBC,GAAqBC,IAAWC,IAAAA;AAC/C,MAAMC,KAAQD,GAAAA,GAEdE,KAAqCC,GAAS,EAC7CC,GAAW,EAAEzE,IAAQsE,IAAOI,GAAcL,GAAAA,EAAAA,CAAAA,GADlCI,KAAAA,GAAAA,CAAAA,EAAAA,GAAaE,KAAAA,GAAAA,CAAAA;AAyBtB,SArBAT,GAAgB,WAAA;AACfO,IAAAA,GAAAzE,KAAmBsE,IACnBG,GAAUC,IAAeL,IAEpB1H,EAAG8H,GAAAA,IAAkBJ,GAAAA,CAAAA,KACzBM,GAAY,EAAEF,GAAAA,GAAAA,CAAAA;EAEf,GAAE,CAACL,IAAWE,IAAOD,EAAAA,CAAAA,GAEtBO,GAAU,WAAA;AAKT,WAJKjI,EAAG8H,GAAkBA,IAAAA,GAAUC,EAAAA,CAAAA,KACnCC,GAAY,EAAEF,GAAAA,GAAAA,CAAAA,GAGRL,GAAU,WAAA;AACXzH,QAAG8H,GAADzE,IAAmByE,GAAUC,EAAAA,CAAAA,KACnCC,GAAY,EAAEF,GAAAA,GAAAA,CAAAA;IAEf,CAAA;EACD,GAAE,CAACL,EAAAA,CAAAA,GAEGE;AACP;INvKGO,IASSvG,ICVPwG,IAMOC,ICLPC,IAqBAC,ICNAC,GEVO9B,IAIP+B,IAEAC,IAKAC,IA+DFC,GAsIAC,IAnHAC,IAOAC,IA6GEC,IAYOC,IChMPC,IAiEAC,IAWAC,IAMAC,KAgBOC,IAoEEC;;;;;;;AP1Kd,KDxBDnJ,GAAciB,YAAY,IAAImI,KAENC,uBAAAA,MACxBrJ,GAAciB,UAAUJ,wBAAwB,SAASrB,IAAO8J,IAAAA;AAC/D,aAAO5J,GAAeQ,KAAKV,OAAOA,EAAAA,KAAUE,GAAeQ,KAAKoJ,OAAOA,EAAAA;IACvE;AEXD,IAAIvB,KAAcwB,EAAlBC;AACAD,MAAAC,MAAgB,SAAA5H,IAAAA;AACXA,MAAAA,GAAMsE,QAAQtE,GAAMsE,KAApBxE,OAAuCE,GAAMpB,QAChDoB,GAAMpC,MAAMgB,MAAMoB,GAAMpB,KACxBoB,GAAMpB,MAAM,OAETuH,MAAaA,GAAYnG,EAAAA;IAC7B;AAEYJ,IAAAA,KACM,eAAA,OAAViI,UACPA,OAAOC,OACPD,OAAOC,IAAI,mBAAA,KACZ;ACdD,IAAM1B,KAAQ,SAAC7D,IAAU/C,IAAAA;AACxB,aAAgB,QAAZ+C,KAAyB,OACtBwF,EAAaA,EAAaxF,EAAAA,EAAU9B,IAAIjB,EAAAA,CAAAA;IAC/C;AAHD,IAMa6G,KAAW,EACvB5F,KAAK2F,IACLhG,SAASgG,IACT4B,OAHuB,SAGjBzF,IAAAA;AACL,aAAOA,KAAWwF,EAAaxF,EAAAA,EAAU0F,SAAS;IAClD,GACDC,MAAAA,SAAK3F,IAAAA;AACJ,UAAM4F,KAAaJ,EAAaxF,EAAAA;AAChC,UAA0B,MAAtB4F,GAAWF;AAAc,cAAM;AACnC,aAAOE,GAAW,CAAA;IAClB,GACDC,SAASL,EAAAA;AAjBV,ICCMzB,KAAgBqB,EAAH7G;AACnB6G,MAAA7G,MAAsB,SAASa,IAAO0G,IAAUC,IAAUC,IAAAA;AACzD,UAAI5G,GAAME;AAKT,iBAHIR,IACArB,KAAQqI,IAEJrI,KAAQA,GAAAA;AACf,eAAKqB,KAAYrB,GAAbG,QAAkCkB,GAAtClB;AAMC,mBALqB,QAAjBkI,GAAQvH,QACXuH,GAAAvH,MAAgBwH,GAChBD,KAAAA,GAAA7H,MAAqB8H,GAArB9H,MAGMa,GAASlB,IAAkBwB,IAAO0G,EAAAA;;AAI5C/B,MAAAA,GAAc3E,IAAO0G,IAAUC,IAAUC,EAAAA;IACzC;AAED,IAAMhC,KAAaoB,EAAQa;AAC3Bb,MAAQa,UAAU,SAASxI,IAAAA;AAE1B,UAAMqB,KAAYrB,GAAlBG;AACIkB,MAAAA,MAAaA,GAAJoH,OACZpH,GAAAoH,IAAAA,GAOGpH,MAAAA,SAAarB,GAAA0I,QAChB1I,GAAMsE,OAAO,OAGViC,MAAYA,GAAWvG,EAAAA;IAC3B,IAgEDiB,GAAS5B,YAAY,IAAImI,KAOarH,MAAA,SAASwI,IAASC,IAAAA;AACvD,UAAMC,KAAsBD,GAAHzI,KAGnB3B,KAAIF;AAEW,cAAjBE,GAAE2C,MACL3C,GAAE2C,IAAc,CAAA,IAEjB3C,GAAE2C,EAAY+B,KAAK2F,EAAAA;AAEnB,UAAMrC,KAAUpF,GAAU5C,GAADqC,GAAAA,GAErBiI,KAAAA,OACEC,KAAa,WAAA;AACdD,QAAAA,OAEJA,KAAAA,MACAD,GAAAJ,MAAiC,MAE7BjC,KACHA,GAAQwC,EAAAA,IAERA,GAAAA;MAED;AAEDH,MAAAA,GAAAJ,MAAiCM;AAEjC,UAAMC,KAAuB,WAAA;AAC5B,YAAA,CAAA,EAAOxK,GAAP0C,KAAkC;AAGjC,cAAI1C,GAAEkJ,MAAkBnG,KAAA;AACvB,gBAAM0H,KAAiBzK,GAAEkJ,MAAAA;AACzBlJ,YAAAA,GAAAqC,IAAAL,IAAmB,CAAA,IAAKG,EACvBsI,IACAA,GACAA,IAAAA,KAAAA,GAAAA,IAAAA,GAAAA;UAED;AAID,cAAI7H;AACJ,eAHA5C,GAAE0K,SAAS,EAAE3H,KAAa/C,GAACoJ,MAAuB,KAAA,CAAA,GAG1CxG,KAAY5C,GAAE2C,EAAYgI,IAAAA;AACjC/H,YAAAA,GAAU6E,YAAAA;QAEX;MACD,GAOKmD,KAAAA,SAAeR,GAAAF;AAChBlK,MAAAA,GAAA0C,SAAgCkI,MACpC5K,GAAE0K,SAAS,EAAE3H,KAAa/C,GAAAoJ,MAAwBpJ,GAAAqC,IAAAL,IAAmB,CAAA,EAAA,CAAA,GAEtEmI,GAAQ9G,KAAKkH,IAAYA,EAAAA;IACzB,GAED9H,GAAS5B,UAAUuD,uBAAuB,WAAA;AACzCtE,WAAK6C,IAAc,CAAA;IACnB,GAODF,GAAS5B,UAAUQ,SAAS,SAASjC,IAAO8J,IAAAA;AAC3C,UAAIpJ,KAA0BsJ,KAAA;AAI7B,YAAItJ,KAAuBuC,IAAAL,KAAA;AAC1B,cAAMP,KAAiBoJ,SAASnK,cAAc,KAAA,GACxCoK,KAAoBhL,KAAAuC,IAAAL,IAAsB,CAAA,EAAhDL;AACA7B,eAAAA,IAAAA,IAAsB,CAAA,IAAKyB,GAC1BzB,KADuCsJ,KAEvC3H,IACCqJ,GAAAC,MAAuCD,GAAvC/I,GAAAA;QAEF;AAEDjC,aAAAsJ,MAA2B;MAC3B;AAID,UAAM4B,KACL9B,GAAAnG,OAAoBrC,EAAcgG,IAAU,MAAMtH,GAAM4L,QAAAA;AAGzD,aAFIA,OAAUA,GAAAA,MAAsB,OAE7B,CACNtK,EAAcgG,IAAU,MAAMwC,GAAKnG,MAAc,OAAO3D,GAAM2E,QAAAA,GAC9DiH,EAAAA;IAED;AClMD,IAAMhD,IAAU,SAACiD,IAAM/I,IAAOgJ,IAAAA;AAc7B,UAAA,EAbMA,GAdgB,CAAA,MAcSA,GAfR,CAAA,KAqBtBD,GAAKtH,EAAKwH,OAAOjJ,EAAAA,GAQhB+I,GAAK7L,MAAMgM,gBACmB,QAA9BH,GAAK7L,MAAMgM,YAAY,CAAA,KAAA,CAAcH,GAAKtH,EAAK0H;AASjD,aADAH,KAAOD,GAAKvH,GACLwH,MAAM;AACZ,iBAAOA,GAAKzB,SAAS;AACpByB,YAAAA,GAAKP,IAAAA,EAALO;AAED,cAAIA,GA1CiB,CAAA,IA0CMA,GA3CL,CAAA;AA4CrB;AAEDD,UAAAA,GAAKvH,IAAQwH,KAAOA,GA5CJ,CAAA;QA6ChB;IACD;AC6BA,KDxBDzH,GAAa5C,YAAY,IAAImI,KAEOjG,MAAA,SAASb,IAAAA;AAC5C,UAAM+I,KAAOnL,MACPwL,KAAY1I,GAAUqI,GAA5B5I,GAAAA,GAEI6I,KAAOD,GAAKtH,EAAK4H,IAAIrJ,EAAAA;AAGzB,aAFAgJ,GA5DuB,CAAA,KAAA,SA8DhBM,IAAAA;AACN,YAAMC,KAAmB,WAAA;AACnBR,UAAAA,GAAK7L,MAAMgM,eAKfF,GAAKxG,KAAK8G,EAAAA,GACVxD,EAAQiD,IAAM/I,IAAOgJ,EAAAA,KAHrBM,GAAAA;QAKD;AACGF,QAAAA,KACHA,GAAUG,EAAAA,IAEVA,GAAAA;MAED;IACD,GAEDhI,GAAa5C,UAAUQ,SAAS,SAASjC,IAAAA;AACxCU,WAAK4D,IAAQ,MACb5D,KAAK6D,IAAO,oBAAI+H;AAEhB,UAAM3H,KAAWwF,EAAanK,GAAM2E,QAAAA;AAChC3E,MAAAA,GAAMgM,eAAwC,QAAzBhM,GAAMgM,YAAY,CAAA,KAI1CrH,GAAS4H,QAAAA;AAIV,eAAStM,KAAI0E,GAAS0F,QAAQpK;AAY7BS,aAAK6D,EAAKiI,IAAI7H,GAAS1E,EAAAA,GAAKS,KAAK4D,IAAQ,CAAC,GAAG,GAAG5D,KAAK4D,CAAAA,CAAAA;AAEtD,aAAOtE,GAAM2E;IACb,GAEDN,GAAa5C,UAAUgL,qBAAqBpI,GAAa5C,UAAUiL,oBAAoB,WAAA;AAAW,UAAA7H,KAAAnE;AAOjGA,WAAK6D,EAAK/B,QAAQ,SAACsJ,IAAMhJ,IAAAA;AACxB8F,UAAQ/D,IAAM/B,IAAOgJ,EAAAA;MACrB,CAAA;IACD;AAAA,IErHYhF,KACM,eAAA,OAAVmD,UAAyBA,OAAOC,OAAOD,OAAOC,IAAI,eAAA,KAC1D;AFmHA,IEjHKrB,KAAc;AFiHnB,IE/GKC,KAA6B,eAAA,OAAb2C;AF+GrB,IE1GK1C,KAAoB,SAAArC,IAAAA;AACzB,cAAkB,eAAA,OAAVuD,UAA4C,YAAA,OAAZA,OAAAA,IACrC,iBACA,eACD0C,KAAKjG,EAAAA;IAJsB;AAO9BkD,MAAUnI,UAAUC,mBAAmB,CAAvC,GASA,CACC,sBACA,6BACA,qBAAA,EACCc,QAAQ,SAAAoK,IAAAA;AACTC,aAAOC,eAAelD,EAAUnI,WAAWmL,IAAK,EAC/CG,cAAAA,MACAZ,KAAM,WAAA;AACL,eAAOzL,KAAK,YAAYkM,EAAAA;MACxB,GACDJ,KAL+C,SAK3CQ,IAAAA;AACHH,eAAOC,eAAepM,MAAMkM,IAAK,EAChCG,cAAAA,MACAE,UAAAA,MACAjF,OAAOgF,GAAAA,CAAAA;MAER,EAAA,CAAA;IAEF,CAAA;AA6BD,IAAIhE,IAAee,EAAQmD;AAC3BnD,MAAQmD,QAAQ,SAAA9I,IAAAA;AAKf,aAJI4E,MAAc5E,KAAI4E,EAAa5E,EAAAA,IACnCA,GAAE+I,UAAU/G,GACZhC,GAAEiC,uBAAuBA,IACzBjC,GAAEmC,qBAAqBA,GACfnC,GAAEgJ,cAAchJ;IACxB;AAYD,IAAI8E,KAAsB,EACzB6D,cAAAA,MACAZ,KAFyB,WAAA;AAGxB,aAAYkB,KAAAA;IACZ,EAAA;AAJF,IAOIlE,KAAeY,EAAQ3H;AAC3B2H,MAAQ3H,QAAQ,SAAAA,IAAAA;AACf,UAAIsE,KAAOtE,GAAMsE,MACb1G,KAAQoC,GAAMpC,OACdsN,KAAkBtN;AAGtB,UAAoB,YAAA,OAAT0G,IAAmB;AAC7B,YAAM6G,KAAAA,OAAmB7G,GAAKhB,QAAQ,GAAA;AAGtC,iBAASzF,MAFTqN,KAAkB,CAAlB,GAEctN,IAAO;AACpB,cAAIgI,KAAQhI,GAAMC,EAAAA;AAEd6I,UAAAA,MAAgB,eAAN7I,MAA6B,eAATyG,MAGjB,YAANzG,MAAiB,kBAAkBD,MAAkB,QAATgI,OAKhD,mBAAN/H,MACA,WAAWD,MACI,QAAfA,GAAMgI,QAIN/H,KAAI,UACY,eAANA,MAAAA,SAAoB+H,KAM9BA,KAAQ,KACE,iBAAiB2E,KAAK1M,EAAAA,IAChCA,KAAI,eAEJ,6BAA6B0M,KAAK1M,KAAIyG,EAAAA,KAAAA,CACrCqC,GAAkB/I,GAAM0G,IAAAA,IAEzBzG,KAAI,YACM,aAAa0M,KAAK1M,EAAAA,IAC5BA,KAAI,cACM,YAAY0M,KAAK1M,EAAAA,IAC3BA,KAAI,eACM,mCAAmC0M,KAAK1M,EAAAA,IAClDA,KAAIA,GAAEuN,YAAAA,IACID,MAAoB1E,GAAY8D,KAAK1M,EAAAA,IAC/CA,KAAIA,GAAEwN,QAAQ,aAAa,KAAA,EAAOD,YAAAA,IACd,SAAVxF,OACVA,KAAAA,SAKG,aAAa2E,KAAK1M,EAAAA,MACrBA,KAAIA,GAAEuN,YAAAA,GACFF,GAAgBrN,EAAAA,MACnBA,KAAI,oBAINqN,GAAgBrN,EAAAA,IAAK+H;QACrB;AAIQ,oBAARtB,MACA4G,GAAgBI,YAChBC,MAAMC,QAAQN,GAAgBtF,KAAAA,MAG9BsF,GAAgBtF,QAAQmC,EAAanK,GAAM2E,QAAAA,EAAUnC,QAAQ,SAAAM,IAAAA;AAC5DA,UAAAA,GAAM9C,MAAM6N,WAAAA,MACXP,GAAgBtF,MAAMtC,QAAQ5C,GAAM9C,MAAMgI,KAAAA;QAC3C,CAAA,IAIU,YAARtB,MAAoD,QAAhC4G,GAAgBQ,iBACvCR,GAAgBtF,QAAQmC,EAAanK,GAAM2E,QAAAA,EAAUnC,QAAQ,SAAAM,IAAAA;AAE3DA,UAAAA,GAAM9C,MAAM6N,WADTP,GAAgBI,WAAAA,MAElBJ,GAAgBQ,aAAapI,QAAQ5C,GAAM9C,MAAMgI,KAAAA,IAGjDsF,GAAgBQ,gBAAgBhL,GAAM9C,MAAMgI;QAE9C,CAAA,IAGF5F,GAAMpC,QAAQsN,IAEVtN,GAAMqN,SAASrN,GAAM+N,cACxB7E,GAAoB8E,aAAa,eAAehO,IACzB,QAAnBA,GAAM+N,cAAmBT,GAAgBD,QAAQrN,GAAM+N,YAC3DlB,OAAOC,eAAeQ,IAAiB,aAAapE,EAAAA;MAErD;AAED9G,MAAAA,GAAML,WAAW+E,IAEbqC,MAAcA,GAAa/G,EAAAA;IAC/B;AAID,IAAMgH,KAAkBW,EAAHkE;AACrBlE,MAAAkE,MAAkB,SAAS7L,IAAAA;AACtBgH,YACHA,GAAgBhH,EAAAA,GAEjB6G,KAAmB7G,GACnBG;IAAA;AAMY8G,IAAAA,KAAqD,EACjE6E,wBAAwB,EACvB/M,SAAS,EACRgN,aAAYzJ,SAAAA,IAAAA;AACX,aAAOuE,GAAAmF,IAAgC1J,GAAhCnC,GAAAA,EAA6CvC,MAAMgI;IAC1D,EAAA,EAAA,EAAA;AALSqB,IChMPC,KAAU;AAiEVC,IAAAA,KAA0B,SAACxD,IAAUsI,IAAAA;AAAQtI,aAAAA,GAASsI,EAAAA;IAA5B;AAA1B9E,IAWAC,KAAY,SAACzD,IAAUsI,IAAAA;AAAAA,aAAQtI,GAASsI,EAAAA;IAA5B;AAXZ9E,IAiBAE,MAAanC;AAgBNoC,IAAAA,KAAqB9B;AAoElC,IAAe+B,KAAA,EACdzB,UAAAA,IACAoG,OAAAA,GACAC,YAAAA,IACAjG,WAAAA,IACAV,iBAAAA,IACA8B,oBAAAA,IACA/B,eAAAA,IACAF,kBAAAA,IACAI,sBAAAA,IACAN,iBAAAA,IACAiH,QAAAA,IACAC,qBAAAA,IACAC,SAAAA,GACAC,aAAAA,IACAC,YAAAA,IACAC,eAAAA,IACAvF,SAvLe,UAwLfb,UAAAA,IACAxG,QAAAA,IACAiE,SAAAA,IACAiB,wBAAAA,IACAxB,cAAAA,IACArE,eAAAA,GACAwN,eAAAA,GACArI,eAAAA,IACAM,cAAAA,IACAgI,WAAAA,GACAzH,UAAAA,IACAV,gBAAAA,IACAQ,aAAAA,IACAwC,WAAAA,GACApJ,eAAAA,IACAG,MAAAA,GACAgB,YAAAA,IACA6H,WAAAA,IACAD,yBAAAA,IACAE,YAAAA,KACApG,UAAAA,IACAgB,cAAAA,IACAT,MAAAA,IACAyF,oDAAAA,GAAAA;;;;;ACpPD;AAAA;AAAA;AASa,QAAI2F,KAAE;AAAiB,aAASC,GAAEC,IAAEC,IAAE;AAAC,aAAOD,OAAIC,OAAI,MAAID,MAAG,IAAEA,OAAI,IAAEC,OAAID,OAAIA,MAAGC,OAAIA;AAAA,IAAC;AAAC,QAAIC,KAAE,eAAa,OAAO,OAAO,KAAG,OAAO,KAAGH;AAA9C,QAAgDI,KAAEL,GAAE;AAApD,QAA6DM,KAAEN,GAAE;AAAjE,QAA2EO,KAAEP,GAAE;AAA/E,QAA+FQ,KAAER,GAAE;AAAc,aAASS,GAAEP,IAAEC,IAAE;AAAC,UAAIO,KAAEP,GAAE,GAAEQ,KAAEN,GAAE,EAAC,MAAK,EAAC,OAAMK,IAAE,aAAYP,GAAC,EAAC,CAAC,GAAES,KAAED,GAAE,CAAC,EAAE,MAAKE,KAAEF,GAAE,CAAC;AAAE,MAAAJ,GAAE,WAAU;AAAC,QAAAK,GAAE,QAAMF;AAAE,QAAAE,GAAE,cAAYT;AAAE,QAAAW,GAAEF,EAAC,KAAGC,GAAE,EAAC,MAAKD,GAAC,CAAC;AAAA,MAAC,GAAE,CAACV,IAAEQ,IAAEP,EAAC,CAAC;AAAE,MAAAG,GAAE,WAAU;AAAC,QAAAQ,GAAEF,EAAC,KAAGC,GAAE,EAAC,MAAKD,GAAC,CAAC;AAAE,eAAOV,GAAE,WAAU;AAAC,UAAAY,GAAEF,EAAC,KAAGC,GAAE,EAAC,MAAKD,GAAC,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC,GAAE,CAACV,EAAC,CAAC;AAAE,MAAAM,GAAEE,EAAC;AAAE,aAAOA;AAAA,IAAC;AAClc,aAASI,GAAEZ,IAAE;AAAC,UAAIC,KAAED,GAAE;AAAY,MAAAA,KAAEA,GAAE;AAAM,UAAG;AAAC,YAAIQ,KAAEP,GAAE;AAAE,eAAM,CAACC,GAAEF,IAAEQ,EAAC;AAAA,MAAC,SAAOC,IAAE;AAAC,eAAM;AAAA,MAAE;AAAA,IAAC;AAAC,aAASI,GAAEb,IAAEC,IAAE;AAAC,aAAOA,GAAE;AAAA,IAAC;AAAC,QAAIa,KAAE,gBAAc,OAAO,UAAQ,gBAAc,OAAO,OAAO,YAAU,gBAAc,OAAO,OAAO,SAAS,gBAAcD,KAAEN;AAAE,YAAQ,uBAAqB,WAAST,GAAE,uBAAqBA,GAAE,uBAAqBgB;AAAA;AAAA;;;ACV1U;AAAA;AAAA;AAEA,QAAI,MAAuC;AACzC,aAAO,UAAU;AAAA,IACnB,OAAO;AACL,aAAO,UAAU;AAAA,IACnB;AAAA;AAAA;;;ACNA;AAAA;AACA,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAUjC,aAAS,QAAQC,SAAQ,KAAK;AAC5B,aAAOA,WAAU,QAAQ,eAAe,KAAKA,SAAQ,GAAG;AAAA,IAC1D;AAEA,WAAO,UAAU;AAAA;AAAA;;;AClBjB;AAAA;AAuBA,QAAI,UAAU,MAAM;AAEpB,WAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA;AACA,QAAI,aAAa,OAAO,UAAU,YAAY,UAAU,OAAO,WAAW,UAAU;AAEpF,WAAO,UAAU;AAAA;AAAA;;;ACHjB;AAAA;AAAA,QAAI,aAAa;AAGjB,QAAI,WAAW,OAAO,QAAQ,YAAY,QAAQ,KAAK,WAAW,UAAU;AAG5E,QAAI,OAAO,cAAc,YAAY,SAAS,aAAa,EAAE;AAE7D,WAAO,UAAU;AAAA;AAAA;;;ACRjB;AAAA;AAAA,QAAI,OAAO;AAGX,QAAIC,UAAS,KAAK;AAElB,WAAO,UAAUA;AAAA;AAAA;;;ACLjB;AAAA;AAAA,QAAIC,UAAS;AAGb,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAOjC,QAAI,uBAAuB,YAAY;AAGvC,QAAI,iBAAiBA,UAASA,QAAO,cAAc;AASnD,aAAS,UAAU,OAAO;AACxB,UAAI,QAAQ,eAAe,KAAK,OAAO,cAAc,GACjD,MAAM,MAAM,cAAc;AAE9B,UAAI;AACF,cAAM,cAAc,IAAI;AACxB,YAAI,WAAW;AAAA,MACjB,SAASC,IAAG;AAAA,MAAC;AAEb,UAAI,SAAS,qBAAqB,KAAK,KAAK;AAC5C,UAAI,UAAU;AACZ,YAAI,OAAO;AACT,gBAAM,cAAc,IAAI;AAAA,QAC1B,OAAO;AACL,iBAAO,MAAM,cAAc;AAAA,QAC7B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC7CjB;AAAA;AACA,QAAI,cAAc,OAAO;AAOzB,QAAI,uBAAuB,YAAY;AASvC,aAAS,eAAe,OAAO;AAC7B,aAAO,qBAAqB,KAAK,KAAK;AAAA,IACxC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACrBjB;AAAA;AAAA,QAAIC,UAAS;AAAb,QACI,YAAY;AADhB,QAEI,iBAAiB;AAGrB,QAAI,UAAU;AAAd,QACI,eAAe;AAGnB,QAAI,iBAAiBA,UAASA,QAAO,cAAc;AASnD,aAAS,WAAW,OAAO;AACzB,UAAI,SAAS,MAAM;AACjB,eAAO,UAAU,SAAY,eAAe;AAAA,MAC9C;AACA,aAAQ,kBAAkB,kBAAkB,OAAO,KAAK,IACpD,UAAU,KAAK,IACf,eAAe,KAAK;AAAA,IAC1B;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC3BjB;AAAA;AAwBA,aAAS,aAAa,OAAO;AAC3B,aAAO,SAAS,QAAQ,OAAO,SAAS;AAAA,IAC1C;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC5BjB;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,eAAe;AAGnB,QAAI,YAAY;AAmBhB,aAAS,SAAS,OAAO;AACvB,aAAO,OAAO,SAAS,YACpB,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,IACjD;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC5BjB;AAAA;AAAA,QAAI,UAAU;AAAd,QACI,WAAW;AAGf,QAAI,eAAe;AAAnB,QACI,gBAAgB;AAUpB,aAAS,MAAM,OAAOC,SAAQ;AAC5B,UAAI,QAAQ,KAAK,GAAG;AAClB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,OAAO;AAClB,UAAI,QAAQ,YAAY,QAAQ,YAAY,QAAQ,aAChD,SAAS,QAAQ,SAAS,KAAK,GAAG;AACpC,eAAO;AAAA,MACT;AACA,aAAO,cAAc,KAAK,KAAK,KAAK,CAAC,aAAa,KAAK,KAAK,KACzDA,WAAU,QAAQ,SAAS,OAAOA,OAAM;AAAA,IAC7C;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC5BjB;AAAA;AAyBA,aAASC,UAAS,OAAO;AACvB,UAAI,OAAO,OAAO;AAClB,aAAO,SAAS,SAAS,QAAQ,YAAY,QAAQ;AAAA,IACvD;AAEA,WAAO,UAAUA;AAAA;AAAA;;;AC9BjB;AAAA;AAAA,QAAI,aAAa;AAAjB,QACIC,YAAW;AAGf,QAAI,WAAW;AAAf,QACI,UAAU;AADd,QAEI,SAAS;AAFb,QAGI,WAAW;AAmBf,aAASC,YAAW,OAAO;AACzB,UAAI,CAACD,UAAS,KAAK,GAAG;AACpB,eAAO;AAAA,MACT;AAGA,UAAI,MAAM,WAAW,KAAK;AAC1B,aAAO,OAAO,WAAW,OAAO,UAAU,OAAO,YAAY,OAAO;AAAA,IACtE;AAEA,WAAO,UAAUC;AAAA;AAAA;;;ACpCjB;AAAA;AAAA,QAAI,OAAO;AAGX,QAAI,aAAa,KAAK,oBAAoB;AAE1C,WAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA;AAAA,QAAI,aAAa;AAGjB,QAAI,aAAc,WAAW;AAC3B,UAAI,MAAM,SAAS,KAAK,cAAc,WAAW,QAAQ,WAAW,KAAK,YAAY,EAAE;AACvF,aAAO,MAAO,mBAAmB,MAAO;AAAA,IAC1C,EAAE;AASF,aAAS,SAAS,MAAM;AACtB,aAAO,CAAC,CAAC,cAAe,cAAc;AAAA,IACxC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA;AACA,QAAI,YAAY,SAAS;AAGzB,QAAI,eAAe,UAAU;AAS7B,aAAS,SAAS,MAAM;AACtB,UAAI,QAAQ,MAAM;AAChB,YAAI;AACF,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B,SAASC,IAAG;AAAA,QAAC;AACb,YAAI;AACF,iBAAQ,OAAO;AAAA,QACjB,SAASA,IAAG;AAAA,QAAC;AAAA,MACf;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA;AAAA,QAAIC,cAAa;AAAjB,QACI,WAAW;AADf,QAEIC,YAAW;AAFf,QAGI,WAAW;AAMf,QAAI,eAAe;AAGnB,QAAI,eAAe;AAGnB,QAAI,YAAY,SAAS;AAAzB,QACI,cAAc,OAAO;AAGzB,QAAI,eAAe,UAAU;AAG7B,QAAI,iBAAiB,YAAY;AAGjC,QAAI,aAAa;AAAA,MAAO,MACtB,aAAa,KAAK,cAAc,EAAE,QAAQ,cAAc,MAAM,EAC7D,QAAQ,0DAA0D,OAAO,IAAI;AAAA,IAChF;AAUA,aAAS,aAAa,OAAO;AAC3B,UAAI,CAACA,UAAS,KAAK,KAAK,SAAS,KAAK,GAAG;AACvC,eAAO;AAAA,MACT;AACA,UAAI,UAAUD,YAAW,KAAK,IAAI,aAAa;AAC/C,aAAO,QAAQ,KAAK,SAAS,KAAK,CAAC;AAAA,IACrC;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC9CjB;AAAA;AAQA,aAASE,UAASC,SAAQ,KAAK;AAC7B,aAAOA,WAAU,OAAO,SAAYA,QAAO,GAAG;AAAA,IAChD;AAEA,WAAO,UAAUD;AAAA;AAAA;;;ACZjB;AAAA;AAAA,QAAI,eAAe;AAAnB,QACIE,YAAW;AAUf,aAAS,UAAUC,SAAQ,KAAK;AAC9B,UAAI,QAAQD,UAASC,SAAQ,GAAG;AAChC,aAAO,aAAa,KAAK,IAAI,QAAQ;AAAA,IACvC;AAEA,WAAO,UAAU;AAAA;AAAA;;;AChBjB;AAAA;AAAA,QAAI,YAAY;AAGhB,QAAI,eAAe,UAAU,QAAQ,QAAQ;AAE7C,WAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA;AAAA,QAAI,eAAe;AASnB,aAAS,YAAY;AACnB,WAAK,WAAW,eAAe,aAAa,IAAI,IAAI,CAAC;AACrD,WAAK,OAAO;AAAA,IACd;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA;AAUA,aAAS,WAAW,KAAK;AACvB,UAAI,SAAS,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,SAAS,GAAG;AACtD,WAAK,QAAQ,SAAS,IAAI;AAC1B,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AChBjB;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,iBAAiB;AAGrB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAWjC,aAAS,QAAQ,KAAK;AACpB,UAAI,OAAO,KAAK;AAChB,UAAI,cAAc;AAChB,YAAI,SAAS,KAAK,GAAG;AACrB,eAAO,WAAW,iBAAiB,SAAY;AAAA,MACjD;AACA,aAAO,eAAe,KAAK,MAAM,GAAG,IAAI,KAAK,GAAG,IAAI;AAAA,IACtD;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAWjC,aAAS,QAAQ,KAAK;AACpB,UAAI,OAAO,KAAK;AAChB,aAAO,eAAgB,KAAK,GAAG,MAAM,SAAa,eAAe,KAAK,MAAM,GAAG;AAAA,IACjF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,iBAAiB;AAYrB,aAAS,QAAQ,KAAK,OAAO;AAC3B,UAAI,OAAO,KAAK;AAChB,WAAK,QAAQ,KAAK,IAAI,GAAG,IAAI,IAAI;AACjC,WAAK,GAAG,IAAK,gBAAgB,UAAU,SAAa,iBAAiB;AACrE,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,aAAa;AADjB,QAEI,UAAU;AAFd,QAGI,UAAU;AAHd,QAII,UAAU;AASd,aAAS,KAAK,SAAS;AACrB,UAAI,QAAQ,IACR,SAAS,WAAW,OAAO,IAAI,QAAQ;AAE3C,WAAK,MAAM;AACX,aAAO,EAAE,QAAQ,QAAQ;AACvB,YAAI,QAAQ,QAAQ,KAAK;AACzB,aAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,MAC7B;AAAA,IACF;AAGA,SAAK,UAAU,QAAQ;AACvB,SAAK,UAAU,QAAQ,IAAI;AAC3B,SAAK,UAAU,MAAM;AACrB,SAAK,UAAU,MAAM;AACrB,SAAK,UAAU,MAAM;AAErB,WAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA;AAOA,aAAS,iBAAiB;AACxB,WAAK,WAAW,CAAC;AACjB,WAAK,OAAO;AAAA,IACd;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACZjB;AAAA;AAgCA,aAAS,GAAG,OAAO,OAAO;AACxB,aAAO,UAAU,SAAU,UAAU,SAAS,UAAU;AAAA,IAC1D;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpCjB;AAAA;AAAA,QAAI,KAAK;AAUT,aAAS,aAAaC,QAAO,KAAK;AAChC,UAAI,SAASA,OAAM;AACnB,aAAO,UAAU;AACf,YAAI,GAAGA,OAAM,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG;AAC7B,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,aAAa,MAAM;AAGvB,QAAI,SAAS,WAAW;AAWxB,aAAS,gBAAgB,KAAK;AAC5B,UAAI,OAAO,KAAK,UACZ,QAAQ,aAAa,MAAM,GAAG;AAElC,UAAI,QAAQ,GAAG;AACb,eAAO;AAAA,MACT;AACA,UAAI,YAAY,KAAK,SAAS;AAC9B,UAAI,SAAS,WAAW;AACtB,aAAK,IAAI;AAAA,MACX,OAAO;AACL,eAAO,KAAK,MAAM,OAAO,CAAC;AAAA,MAC5B;AACA,QAAE,KAAK;AACP,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AClCjB;AAAA;AAAA,QAAI,eAAe;AAWnB,aAAS,aAAa,KAAK;AACzB,UAAI,OAAO,KAAK,UACZ,QAAQ,aAAa,MAAM,GAAG;AAElC,aAAO,QAAQ,IAAI,SAAY,KAAK,KAAK,EAAE,CAAC;AAAA,IAC9C;AAEA,WAAO,UAAU;AAAA;AAAA;;;AClBjB;AAAA;AAAA,QAAI,eAAe;AAWnB,aAAS,aAAa,KAAK;AACzB,aAAO,aAAa,KAAK,UAAU,GAAG,IAAI;AAAA,IAC5C;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA;AAAA,QAAI,eAAe;AAYnB,aAAS,aAAa,KAAK,OAAO;AAChC,UAAI,OAAO,KAAK,UACZ,QAAQ,aAAa,MAAM,GAAG;AAElC,UAAI,QAAQ,GAAG;AACb,UAAE,KAAK;AACP,aAAK,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,MACxB,OAAO;AACL,aAAK,KAAK,EAAE,CAAC,IAAI;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA;AAAA,QAAI,iBAAiB;AAArB,QACI,kBAAkB;AADtB,QAEI,eAAe;AAFnB,QAGI,eAAe;AAHnB,QAII,eAAe;AASnB,aAAS,UAAU,SAAS;AAC1B,UAAI,QAAQ,IACR,SAAS,WAAW,OAAO,IAAI,QAAQ;AAE3C,WAAK,MAAM;AACX,aAAO,EAAE,QAAQ,QAAQ;AACvB,YAAI,QAAQ,QAAQ,KAAK;AACzB,aAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,MAC7B;AAAA,IACF;AAGA,cAAU,UAAU,QAAQ;AAC5B,cAAU,UAAU,QAAQ,IAAI;AAChC,cAAU,UAAU,MAAM;AAC1B,cAAU,UAAU,MAAM;AAC1B,cAAU,UAAU,MAAM;AAE1B,WAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,OAAO;AAGX,QAAIC,OAAM,UAAU,MAAM,KAAK;AAE/B,WAAO,UAAUA;AAAA;AAAA;;;ACNjB;AAAA;AAAA,QAAI,OAAO;AAAX,QACI,YAAY;AADhB,QAEIC,OAAM;AASV,aAAS,gBAAgB;AACvB,WAAK,OAAO;AACZ,WAAK,WAAW;AAAA,QACd,QAAQ,IAAI;AAAA,QACZ,OAAO,KAAKA,QAAO;AAAA,QACnB,UAAU,IAAI;AAAA,MAChB;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA;AAOA,aAAS,UAAU,OAAO;AACxB,UAAI,OAAO,OAAO;AAClB,aAAQ,QAAQ,YAAY,QAAQ,YAAY,QAAQ,YAAY,QAAQ,YACvE,UAAU,cACV,UAAU;AAAA,IACjB;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA;AAAA,QAAI,YAAY;AAUhB,aAAS,WAAWC,MAAK,KAAK;AAC5B,UAAI,OAAOA,KAAI;AACf,aAAO,UAAU,GAAG,IAChB,KAAK,OAAO,OAAO,WAAW,WAAW,MAAM,IAC/C,KAAK;AAAA,IACX;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAAA,QAAI,aAAa;AAWjB,aAAS,eAAe,KAAK;AAC3B,UAAI,SAAS,WAAW,MAAM,GAAG,EAAE,QAAQ,EAAE,GAAG;AAChD,WAAK,QAAQ,SAAS,IAAI;AAC1B,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAAA,QAAI,aAAa;AAWjB,aAAS,YAAY,KAAK;AACxB,aAAO,WAAW,MAAM,GAAG,EAAE,IAAI,GAAG;AAAA,IACtC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA;AAAA,QAAI,aAAa;AAWjB,aAAS,YAAY,KAAK;AACxB,aAAO,WAAW,MAAM,GAAG,EAAE,IAAI,GAAG;AAAA,IACtC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA;AAAA,QAAI,aAAa;AAYjB,aAAS,YAAY,KAAK,OAAO;AAC/B,UAAI,OAAO,WAAW,MAAM,GAAG,GAC3B,OAAO,KAAK;AAEhB,WAAK,IAAI,KAAK,KAAK;AACnB,WAAK,QAAQ,KAAK,QAAQ,OAAO,IAAI;AACrC,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACrBjB;AAAA;AAAA,QAAI,gBAAgB;AAApB,QACI,iBAAiB;AADrB,QAEI,cAAc;AAFlB,QAGI,cAAc;AAHlB,QAII,cAAc;AASlB,aAAS,SAAS,SAAS;AACzB,UAAI,QAAQ,IACR,SAAS,WAAW,OAAO,IAAI,QAAQ;AAE3C,WAAK,MAAM;AACX,aAAO,EAAE,QAAQ,QAAQ;AACvB,YAAI,QAAQ,QAAQ,KAAK;AACzB,aAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,MAC7B;AAAA,IACF;AAGA,aAAS,UAAU,QAAQ;AAC3B,aAAS,UAAU,QAAQ,IAAI;AAC/B,aAAS,UAAU,MAAM;AACzB,aAAS,UAAU,MAAM;AACzB,aAAS,UAAU,MAAM;AAEzB,WAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA;AAAA,QAAI,WAAW;AAGf,QAAI,kBAAkB;AA8CtB,aAAS,QAAQ,MAAM,UAAU;AAC/B,UAAI,OAAO,QAAQ,cAAe,YAAY,QAAQ,OAAO,YAAY,YAAa;AACpF,cAAM,IAAI,UAAU,eAAe;AAAA,MACrC;AACA,UAAI,WAAW,WAAW;AACxB,YAAI,OAAO,WACP,MAAM,WAAW,SAAS,MAAM,MAAM,IAAI,IAAI,KAAK,CAAC,GACpDC,SAAQ,SAAS;AAErB,YAAIA,OAAM,IAAI,GAAG,GAAG;AAClB,iBAAOA,OAAM,IAAI,GAAG;AAAA,QACtB;AACA,YAAI,SAAS,KAAK,MAAM,MAAM,IAAI;AAClC,iBAAS,QAAQA,OAAM,IAAI,KAAK,MAAM,KAAKA;AAC3C,eAAO;AAAA,MACT;AACA,eAAS,QAAQ,KAAK,QAAQ,SAAS;AACvC,aAAO;AAAA,IACT;AAGA,YAAQ,QAAQ;AAEhB,WAAO,UAAU;AAAA;AAAA;;;ACxEjB;AAAA;AAAA,QAAI,UAAU;AAGd,QAAI,mBAAmB;AAUvB,aAAS,cAAc,MAAM;AAC3B,UAAI,SAAS,QAAQ,MAAM,SAAS,KAAK;AACvC,YAAIC,OAAM,SAAS,kBAAkB;AACnC,UAAAA,OAAM,MAAM;AAAA,QACd;AACA,eAAO;AAAA,MACT,CAAC;AAED,UAAIA,SAAQ,OAAO;AACnB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA;AAAA,QAAI,gBAAgB;AAGpB,QAAI,aAAa;AAGjB,QAAI,eAAe;AASnB,QAAI,eAAe,cAAc,SAASC,SAAQ;AAChD,UAAI,SAAS,CAAC;AACd,UAAIA,QAAO,WAAW,CAAC,MAAM,IAAY;AACvC,eAAO,KAAK,EAAE;AAAA,MAChB;AACA,MAAAA,QAAO,QAAQ,YAAY,SAASC,QAAOC,SAAQ,OAAO,WAAW;AACnE,eAAO,KAAK,QAAQ,UAAU,QAAQ,cAAc,IAAI,IAAKA,WAAUD,MAAM;AAAA,MAC/E,CAAC;AACD,aAAO;AAAA,IACT,CAAC;AAED,WAAO,UAAU;AAAA;AAAA;;;AC1BjB;AAAA;AASA,aAAS,SAASE,QAAO,UAAU;AACjC,UAAI,QAAQ,IACR,SAASA,UAAS,OAAO,IAAIA,OAAM,QACnC,SAAS,MAAM,MAAM;AAEzB,aAAO,EAAE,QAAQ,QAAQ;AACvB,eAAO,KAAK,IAAI,SAASA,OAAM,KAAK,GAAG,OAAOA,MAAK;AAAA,MACrD;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA;AAAA,QAAIC,UAAS;AAAb,QACI,WAAW;AADf,QAEI,UAAU;AAFd,QAGI,WAAW;AAGf,QAAI,WAAW,IAAI;AAGnB,QAAI,cAAcA,UAASA,QAAO,YAAY;AAA9C,QACIC,kBAAiB,cAAc,YAAY,WAAW;AAU1D,aAAS,aAAa,OAAO;AAE3B,UAAI,OAAO,SAAS,UAAU;AAC5B,eAAO;AAAA,MACT;AACA,UAAI,QAAQ,KAAK,GAAG;AAElB,eAAO,SAAS,OAAO,YAAY,IAAI;AAAA,MACzC;AACA,UAAI,SAAS,KAAK,GAAG;AACnB,eAAOA,kBAAiBA,gBAAe,KAAK,KAAK,IAAI;AAAA,MACvD;AACA,UAAI,SAAU,QAAQ;AACtB,aAAQ,UAAU,OAAQ,IAAI,SAAU,CAAC,WAAY,OAAO;AAAA,IAC9D;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpCjB;AAAA;AAAA,QAAI,eAAe;AAuBnB,aAASC,UAAS,OAAO;AACvB,aAAO,SAAS,OAAO,KAAK,aAAa,KAAK;AAAA,IAChD;AAEA,WAAO,UAAUA;AAAA;AAAA;;;AC3BjB;AAAA;AAAA,QAAI,UAAU;AAAd,QACI,QAAQ;AADZ,QAEI,eAAe;AAFnB,QAGIC,YAAW;AAUf,aAAS,SAAS,OAAOC,SAAQ;AAC/B,UAAI,QAAQ,KAAK,GAAG;AAClB,eAAO;AAAA,MACT;AACA,aAAO,MAAM,OAAOA,OAAM,IAAI,CAAC,KAAK,IAAI,aAAaD,UAAS,KAAK,CAAC;AAAA,IACtE;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,eAAe;AAGnB,QAAI,UAAU;AASd,aAAS,gBAAgB,OAAO;AAC9B,aAAO,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,IACrD;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAAA,QAAI,kBAAkB;AAAtB,QACI,eAAe;AAGnB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAGjC,QAAI,uBAAuB,YAAY;AAoBvC,QAAI,cAAc,gBAAgB,2BAAW;AAAE,aAAO;AAAA,IAAW,EAAE,CAAC,IAAI,kBAAkB,SAAS,OAAO;AACxG,aAAO,aAAa,KAAK,KAAK,eAAe,KAAK,OAAO,QAAQ,KAC/D,CAAC,qBAAqB,KAAK,OAAO,QAAQ;AAAA,IAC9C;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACnCjB;AAAA;AACA,QAAI,mBAAmB;AAGvB,QAAI,WAAW;AAUf,aAAS,QAAQ,OAAO,QAAQ;AAC9B,UAAI,OAAO,OAAO;AAClB,eAAS,UAAU,OAAO,mBAAmB;AAE7C,aAAO,CAAC,CAAC,WACN,QAAQ,YACN,QAAQ,YAAY,SAAS,KAAK,KAAK,OACrC,QAAQ,MAAM,QAAQ,KAAK,KAAK,QAAQ;AAAA,IACjD;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACxBjB;AAAA;AACA,QAAI,mBAAmB;AA4BvB,aAAS,SAAS,OAAO;AACvB,aAAO,OAAO,SAAS,YACrB,QAAQ,MAAM,QAAQ,KAAK,KAAK,SAAS;AAAA,IAC7C;AAEA,WAAO,UAAU;AAAA;AAAA;;;AClCjB;AAAA;AAAA,QAAI,WAAW;AAGf,QAAI,WAAW,IAAI;AASnB,aAAS,MAAM,OAAO;AACpB,UAAI,OAAO,SAAS,YAAY,SAAS,KAAK,GAAG;AAC/C,eAAO;AAAA,MACT;AACA,UAAI,SAAU,QAAQ;AACtB,aAAQ,UAAU,OAAQ,IAAI,SAAU,CAAC,WAAY,OAAO;AAAA,IAC9D;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA;AAAA,QAAI,WAAW;AAAf,QACI,cAAc;AADlB,QAEI,UAAU;AAFd,QAGI,UAAU;AAHd,QAII,WAAW;AAJf,QAKI,QAAQ;AAWZ,aAAS,QAAQE,SAAQ,MAAM,SAAS;AACtC,aAAO,SAAS,MAAMA,OAAM;AAE5B,UAAI,QAAQ,IACR,SAAS,KAAK,QACd,SAAS;AAEb,aAAO,EAAE,QAAQ,QAAQ;AACvB,YAAI,MAAM,MAAM,KAAK,KAAK,CAAC;AAC3B,YAAI,EAAE,SAASA,WAAU,QAAQ,QAAQA,SAAQ,GAAG,IAAI;AACtD;AAAA,QACF;AACA,QAAAA,UAASA,QAAO,GAAG;AAAA,MACrB;AACA,UAAI,UAAU,EAAE,SAAS,QAAQ;AAC/B,eAAO;AAAA,MACT;AACA,eAASA,WAAU,OAAO,IAAIA,QAAO;AACrC,aAAO,CAAC,CAAC,UAAU,SAAS,MAAM,KAAK,QAAQ,KAAK,MAAM,MACvD,QAAQA,OAAM,KAAK,YAAYA,OAAM;AAAA,IAC1C;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACtCjB;AAAA;AAAA,QAAI,UAAU;AAAd,QACI,UAAU;AA6Bd,aAASC,KAAIC,SAAQ,MAAM;AACzB,aAAOA,WAAU,QAAQ,QAAQA,SAAQ,MAAM,OAAO;AAAA,IACxD;AAEA,WAAO,UAAUD;AAAA;AAAA;;;AClCjB;AAAA;AAAA,QAAI,YAAY;AAEhB,QAAI,iBAAkB,WAAW;AAC/B,UAAI;AACF,YAAI,OAAO,UAAU,QAAQ,gBAAgB;AAC7C,aAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,eAAO;AAAA,MACT,SAASE,IAAG;AAAA,MAAC;AAAA,IACf,EAAE;AAEF,WAAO,UAAU;AAAA;AAAA;;;ACVjB;AAAA;AAAA,QAAI,iBAAiB;AAWrB,aAAS,gBAAgBC,SAAQ,KAAK,OAAO;AAC3C,UAAI,OAAO,eAAe,gBAAgB;AACxC,uBAAeA,SAAQ,KAAK;AAAA,UAC1B,gBAAgB;AAAA,UAChB,cAAc;AAAA,UACd,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AAAA,MACH,OAAO;AACL,QAAAA,QAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACxBjB;AAAA;AAOA,aAAS,cAAc,WAAW;AAChC,aAAO,SAASC,SAAQ,UAAU,UAAU;AAC1C,YAAI,QAAQ,IACR,WAAW,OAAOA,OAAM,GACxB,QAAQ,SAASA,OAAM,GACvB,SAAS,MAAM;AAEnB,eAAO,UAAU;AACf,cAAI,MAAM,MAAM,YAAY,SAAS,EAAE,KAAK;AAC5C,cAAI,SAAS,SAAS,GAAG,GAAG,KAAK,QAAQ,MAAM,OAAO;AACpD;AAAA,UACF;AAAA,QACF;AACA,eAAOA;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACxBjB;AAAA;AAAA,QAAI,gBAAgB;AAapB,QAAI,UAAU,cAAc;AAE5B,WAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA;AASA,aAAS,UAAUC,IAAG,UAAU;AAC9B,UAAI,QAAQ,IACR,SAAS,MAAMA,EAAC;AAEpB,aAAO,EAAE,QAAQA,IAAG;AAClB,eAAO,KAAK,IAAI,SAAS,KAAK;AAAA,MAChC;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA;AAaA,aAAS,YAAY;AACnB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAAA,QAAI,OAAO;AAAX,QACI,YAAY;AAGhB,QAAI,cAAc,OAAO,WAAW,YAAY,WAAW,CAAC,QAAQ,YAAY;AAGhF,QAAI,aAAa,eAAe,OAAO,UAAU,YAAY,UAAU,CAAC,OAAO,YAAY;AAG3F,QAAI,gBAAgB,cAAc,WAAW,YAAY;AAGzD,QAAIC,UAAS,gBAAgB,KAAK,SAAS;AAG3C,QAAI,iBAAiBA,UAASA,QAAO,WAAW;AAmBhD,QAAI,WAAW,kBAAkB;AAEjC,WAAO,UAAU;AAAA;AAAA;;;ACrCjB;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,WAAW;AADf,QAEI,eAAe;AAGnB,QAAI,UAAU;AAAd,QACI,WAAW;AADf,QAEI,UAAU;AAFd,QAGI,UAAU;AAHd,QAII,WAAW;AAJf,QAKI,UAAU;AALd,QAMI,SAAS;AANb,QAOI,YAAY;AAPhB,QAQI,YAAY;AARhB,QASI,YAAY;AAThB,QAUI,SAAS;AAVb,QAWI,YAAY;AAXhB,QAYI,aAAa;AAEjB,QAAI,iBAAiB;AAArB,QACI,cAAc;AADlB,QAEI,aAAa;AAFjB,QAGI,aAAa;AAHjB,QAII,UAAU;AAJd,QAKI,WAAW;AALf,QAMI,WAAW;AANf,QAOI,WAAW;AAPf,QAQI,kBAAkB;AARtB,QASI,YAAY;AAThB,QAUI,YAAY;AAGhB,QAAI,iBAAiB,CAAC;AACtB,mBAAe,UAAU,IAAI,eAAe,UAAU,IACtD,eAAe,OAAO,IAAI,eAAe,QAAQ,IACjD,eAAe,QAAQ,IAAI,eAAe,QAAQ,IAClD,eAAe,eAAe,IAAI,eAAe,SAAS,IAC1D,eAAe,SAAS,IAAI;AAC5B,mBAAe,OAAO,IAAI,eAAe,QAAQ,IACjD,eAAe,cAAc,IAAI,eAAe,OAAO,IACvD,eAAe,WAAW,IAAI,eAAe,OAAO,IACpD,eAAe,QAAQ,IAAI,eAAe,OAAO,IACjD,eAAe,MAAM,IAAI,eAAe,SAAS,IACjD,eAAe,SAAS,IAAI,eAAe,SAAS,IACpD,eAAe,MAAM,IAAI,eAAe,SAAS,IACjD,eAAe,UAAU,IAAI;AAS7B,aAAS,iBAAiB,OAAO;AAC/B,aAAO,aAAa,KAAK,KACvB,SAAS,MAAM,MAAM,KAAK,CAAC,CAAC,eAAe,WAAW,KAAK,CAAC;AAAA,IAChE;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC3DjB;AAAA;AAOA,aAAS,UAAU,MAAM;AACvB,aAAO,SAAS,OAAO;AACrB,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA;AAAA,QAAI,aAAa;AAGjB,QAAI,cAAc,OAAO,WAAW,YAAY,WAAW,CAAC,QAAQ,YAAY;AAGhF,QAAI,aAAa,eAAe,OAAO,UAAU,YAAY,UAAU,CAAC,OAAO,YAAY;AAG3F,QAAI,gBAAgB,cAAc,WAAW,YAAY;AAGzD,QAAI,cAAc,iBAAiB,WAAW;AAG9C,QAAI,WAAY,WAAW;AACzB,UAAI;AAEF,YAAI,QAAQ,cAAc,WAAW,WAAW,WAAW,QAAQ,MAAM,EAAE;AAE3E,YAAI,OAAO;AACT,iBAAO;AAAA,QACT;AAGA,eAAO,eAAe,YAAY,WAAW,YAAY,QAAQ,MAAM;AAAA,MACzE,SAASC,IAAG;AAAA,MAAC;AAAA,IACf,EAAE;AAEF,WAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA;AAAA,QAAI,mBAAmB;AAAvB,QACI,YAAY;AADhB,QAEI,WAAW;AAGf,QAAI,mBAAmB,YAAY,SAAS;AAmB5C,QAAI,eAAe,mBAAmB,UAAU,gBAAgB,IAAI;AAEpE,WAAO,UAAU;AAAA;AAAA;;;AC1BjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,cAAc;AADlB,QAEI,UAAU;AAFd,QAGI,WAAW;AAHf,QAII,UAAU;AAJd,QAKI,eAAe;AAGnB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAUjC,aAAS,cAAc,OAAO,WAAW;AACvC,UAAI,QAAQ,QAAQ,KAAK,GACrB,QAAQ,CAAC,SAAS,YAAY,KAAK,GACnC,SAAS,CAAC,SAAS,CAAC,SAAS,SAAS,KAAK,GAC3C,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,aAAa,KAAK,GAC1D,cAAc,SAAS,SAAS,UAAU,QAC1C,SAAS,cAAc,UAAU,MAAM,QAAQ,MAAM,IAAI,CAAC,GAC1D,SAAS,OAAO;AAEpB,eAAS,OAAO,OAAO;AACrB,aAAK,aAAa,eAAe,KAAK,OAAO,GAAG,MAC5C,EAAE;AAAA,SAEC,OAAO;AAAA,QAEN,WAAW,OAAO,YAAY,OAAO;AAAA,QAErC,WAAW,OAAO,YAAY,OAAO,gBAAgB,OAAO;AAAA,QAE7D,QAAQ,KAAK,MAAM,KAClB;AACN,iBAAO,KAAK,GAAG;AAAA,QACjB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AChDjB;AAAA;AACA,QAAI,cAAc,OAAO;AASzB,aAAS,YAAY,OAAO;AAC1B,UAAI,OAAO,SAAS,MAAM,aACtB,QAAS,OAAO,QAAQ,cAAc,KAAK,aAAc;AAE7D,aAAO,UAAU;AAAA,IACnB;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAQA,aAAS,QAAQ,MAAM,WAAW;AAChC,aAAO,SAAS,KAAK;AACnB,eAAO,KAAK,UAAU,GAAG,CAAC;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA;AAAA,QAAI,UAAU;AAGd,QAAI,aAAa,QAAQ,OAAO,MAAM,MAAM;AAE5C,WAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA;AAAA,QAAI,cAAc;AAAlB,QACI,aAAa;AAGjB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AASjC,aAAS,SAASC,SAAQ;AACxB,UAAI,CAAC,YAAYA,OAAM,GAAG;AACxB,eAAO,WAAWA,OAAM;AAAA,MAC1B;AACA,UAAI,SAAS,CAAC;AACd,eAAS,OAAO,OAAOA,OAAM,GAAG;AAC9B,YAAI,eAAe,KAAKA,SAAQ,GAAG,KAAK,OAAO,eAAe;AAC5D,iBAAO,KAAK,GAAG;AAAA,QACjB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA;AAAA,QAAIC,cAAa;AAAjB,QACI,WAAW;AA2Bf,aAAS,YAAY,OAAO;AAC1B,aAAO,SAAS,QAAQ,SAAS,MAAM,MAAM,KAAK,CAACA,YAAW,KAAK;AAAA,IACrE;AAEA,WAAO,UAAU;AAAA;AAAA;;;AChCjB;AAAA;AAAA,QAAI,gBAAgB;AAApB,QACI,WAAW;AADf,QAEI,cAAc;AA8BlB,aAAS,KAAKC,SAAQ;AACpB,aAAO,YAAYA,OAAM,IAAI,cAAcA,OAAM,IAAI,SAASA,OAAM;AAAA,IACtE;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpCjB;AAAA;AAAA,QAAI,UAAU;AAAd,QACI,OAAO;AAUX,aAAS,WAAWC,SAAQ,UAAU;AACpC,aAAOA,WAAU,QAAQA,SAAQ,UAAU,IAAI;AAAA,IACjD;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA;AAAA,QAAI,YAAY;AAShB,aAAS,aAAa;AACpB,WAAK,WAAW,IAAI;AACpB,WAAK,OAAO;AAAA,IACd;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA;AASA,aAAS,YAAY,KAAK;AACxB,UAAI,OAAO,KAAK,UACZ,SAAS,KAAK,QAAQ,EAAE,GAAG;AAE/B,WAAK,OAAO,KAAK;AACjB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AASA,aAAS,SAAS,KAAK;AACrB,aAAO,KAAK,SAAS,IAAI,GAAG;AAAA,IAC9B;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA;AASA,aAAS,SAAS,KAAK;AACrB,aAAO,KAAK,SAAS,IAAI,GAAG;AAAA,IAC9B;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACIC,OAAM;AADV,QAEI,WAAW;AAGf,QAAI,mBAAmB;AAYvB,aAAS,SAAS,KAAK,OAAO;AAC5B,UAAI,OAAO,KAAK;AAChB,UAAI,gBAAgB,WAAW;AAC7B,YAAI,QAAQ,KAAK;AACjB,YAAI,CAACA,QAAQ,MAAM,SAAS,mBAAmB,GAAI;AACjD,gBAAM,KAAK,CAAC,KAAK,KAAK,CAAC;AACvB,eAAK,OAAO,EAAE,KAAK;AACnB,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,WAAW,IAAI,SAAS,KAAK;AAAA,MAC3C;AACA,WAAK,IAAI,KAAK,KAAK;AACnB,WAAK,OAAO,KAAK;AACjB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjCjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,aAAa;AADjB,QAEI,cAAc;AAFlB,QAGI,WAAW;AAHf,QAII,WAAW;AAJf,QAKI,WAAW;AASf,aAAS,MAAM,SAAS;AACtB,UAAI,OAAO,KAAK,WAAW,IAAI,UAAU,OAAO;AAChD,WAAK,OAAO,KAAK;AAAA,IACnB;AAGA,UAAM,UAAU,QAAQ;AACxB,UAAM,UAAU,QAAQ,IAAI;AAC5B,UAAM,UAAU,MAAM;AACtB,UAAM,UAAU,MAAM;AACtB,UAAM,UAAU,MAAM;AAEtB,WAAO,UAAU;AAAA;AAAA;;;AC1BjB;AAAA;AACA,QAAI,iBAAiB;AAYrB,aAAS,YAAY,OAAO;AAC1B,WAAK,SAAS,IAAI,OAAO,cAAc;AACvC,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AClBjB;AAAA;AASA,aAAS,YAAY,OAAO;AAC1B,aAAO,KAAK,SAAS,IAAI,KAAK;AAAA,IAChC;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA;AAAA,QAAI,WAAW;AAAf,QACI,cAAc;AADlB,QAEI,cAAc;AAUlB,aAAS,SAAS,QAAQ;AACxB,UAAI,QAAQ,IACR,SAAS,UAAU,OAAO,IAAI,OAAO;AAEzC,WAAK,WAAW,IAAI;AACpB,aAAO,EAAE,QAAQ,QAAQ;AACvB,aAAK,IAAI,OAAO,KAAK,CAAC;AAAA,MACxB;AAAA,IACF;AAGA,aAAS,UAAU,MAAM,SAAS,UAAU,OAAO;AACnD,aAAS,UAAU,MAAM;AAEzB,WAAO,UAAU;AAAA;AAAA;;;AC1BjB;AAAA;AAUA,aAAS,UAAUC,QAAO,WAAW;AACnC,UAAI,QAAQ,IACR,SAASA,UAAS,OAAO,IAAIA,OAAM;AAEvC,aAAO,EAAE,QAAQ,QAAQ;AACvB,YAAI,UAAUA,OAAM,KAAK,GAAG,OAAOA,MAAK,GAAG;AACzC,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA;AAQA,aAAS,SAASC,QAAO,KAAK;AAC5B,aAAOA,OAAM,IAAI,GAAG;AAAA,IACtB;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACZjB;AAAA;AAAA,QAAI,WAAW;AAAf,QACI,YAAY;AADhB,QAEI,WAAW;AAGf,QAAI,uBAAuB;AAA3B,QACI,yBAAyB;AAe7B,aAAS,YAAYC,QAAO,OAAO,SAAS,YAAY,WAAW,OAAO;AACxE,UAAI,YAAY,UAAU,sBACtB,YAAYA,OAAM,QAClB,YAAY,MAAM;AAEtB,UAAI,aAAa,aAAa,EAAE,aAAa,YAAY,YAAY;AACnE,eAAO;AAAA,MACT;AAEA,UAAI,aAAa,MAAM,IAAIA,MAAK;AAChC,UAAI,aAAa,MAAM,IAAI,KAAK;AAChC,UAAI,cAAc,YAAY;AAC5B,eAAO,cAAc,SAAS,cAAcA;AAAA,MAC9C;AACA,UAAI,QAAQ,IACR,SAAS,MACT,OAAQ,UAAU,yBAA0B,IAAI,aAAW;AAE/D,YAAM,IAAIA,QAAO,KAAK;AACtB,YAAM,IAAI,OAAOA,MAAK;AAGtB,aAAO,EAAE,QAAQ,WAAW;AAC1B,YAAI,WAAWA,OAAM,KAAK,GACtB,WAAW,MAAM,KAAK;AAE1B,YAAI,YAAY;AACd,cAAI,WAAW,YACX,WAAW,UAAU,UAAU,OAAO,OAAOA,QAAO,KAAK,IACzD,WAAW,UAAU,UAAU,OAAOA,QAAO,OAAO,KAAK;AAAA,QAC/D;AACA,YAAI,aAAa,QAAW;AAC1B,cAAI,UAAU;AACZ;AAAA,UACF;AACA,mBAAS;AACT;AAAA,QACF;AAEA,YAAI,MAAM;AACR,cAAI,CAAC,UAAU,OAAO,SAASC,WAAU,UAAU;AAC7C,gBAAI,CAAC,SAAS,MAAM,QAAQ,MACvB,aAAaA,aAAY,UAAU,UAAUA,WAAU,SAAS,YAAY,KAAK,IAAI;AACxF,qBAAO,KAAK,KAAK,QAAQ;AAAA,YAC3B;AAAA,UACF,CAAC,GAAG;AACN,qBAAS;AACT;AAAA,UACF;AAAA,QACF,WAAW,EACL,aAAa,YACX,UAAU,UAAU,UAAU,SAAS,YAAY,KAAK,IACzD;AACL,mBAAS;AACT;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAQ,EAAED,MAAK;AACrB,YAAM,QAAQ,EAAE,KAAK;AACrB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACnFjB;AAAA;AAAA,QAAI,OAAO;AAGX,QAAIE,cAAa,KAAK;AAEtB,WAAO,UAAUA;AAAA;AAAA;;;ACLjB;AAAA;AAOA,aAAS,WAAWC,MAAK;AACvB,UAAI,QAAQ,IACR,SAAS,MAAMA,KAAI,IAAI;AAE3B,MAAAA,KAAI,QAAQ,SAAS,OAAO,KAAK;AAC/B,eAAO,EAAE,KAAK,IAAI,CAAC,KAAK,KAAK;AAAA,MAC/B,CAAC;AACD,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAOA,aAAS,WAAWC,MAAK;AACvB,UAAI,QAAQ,IACR,SAAS,MAAMA,KAAI,IAAI;AAE3B,MAAAA,KAAI,QAAQ,SAAS,OAAO;AAC1B,eAAO,EAAE,KAAK,IAAI;AAAA,MACpB,CAAC;AACD,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAAA,QAAIC,UAAS;AAAb,QACIC,cAAa;AADjB,QAEI,KAAK;AAFT,QAGI,cAAc;AAHlB,QAII,aAAa;AAJjB,QAKI,aAAa;AAGjB,QAAI,uBAAuB;AAA3B,QACI,yBAAyB;AAG7B,QAAI,UAAU;AAAd,QACI,UAAU;AADd,QAEI,WAAW;AAFf,QAGI,SAAS;AAHb,QAII,YAAY;AAJhB,QAKI,YAAY;AALhB,QAMI,SAAS;AANb,QAOI,YAAY;AAPhB,QAQI,YAAY;AAEhB,QAAI,iBAAiB;AAArB,QACI,cAAc;AAGlB,QAAI,cAAcD,UAASA,QAAO,YAAY;AAA9C,QACI,gBAAgB,cAAc,YAAY,UAAU;AAmBxD,aAAS,WAAWE,SAAQ,OAAO,KAAK,SAAS,YAAY,WAAW,OAAO;AAC7E,cAAQ,KAAK;AAAA,QACX,KAAK;AACH,cAAKA,QAAO,cAAc,MAAM,cAC3BA,QAAO,cAAc,MAAM,YAAa;AAC3C,mBAAO;AAAA,UACT;AACA,UAAAA,UAASA,QAAO;AAChB,kBAAQ,MAAM;AAAA,QAEhB,KAAK;AACH,cAAKA,QAAO,cAAc,MAAM,cAC5B,CAAC,UAAU,IAAID,YAAWC,OAAM,GAAG,IAAID,YAAW,KAAK,CAAC,GAAG;AAC7D,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QAET,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAGH,iBAAO,GAAG,CAACC,SAAQ,CAAC,KAAK;AAAA,QAE3B,KAAK;AACH,iBAAOA,QAAO,QAAQ,MAAM,QAAQA,QAAO,WAAW,MAAM;AAAA,QAE9D,KAAK;AAAA,QACL,KAAK;AAIH,iBAAOA,WAAW,QAAQ;AAAA,QAE5B,KAAK;AACH,cAAIC,WAAU;AAAA,QAEhB,KAAK;AACH,cAAI,YAAY,UAAU;AAC1B,UAAAA,aAAYA,WAAU;AAEtB,cAAID,QAAO,QAAQ,MAAM,QAAQ,CAAC,WAAW;AAC3C,mBAAO;AAAA,UACT;AAEA,cAAI,UAAU,MAAM,IAAIA,OAAM;AAC9B,cAAI,SAAS;AACX,mBAAO,WAAW;AAAA,UACpB;AACA,qBAAW;AAGX,gBAAM,IAAIA,SAAQ,KAAK;AACvB,cAAI,SAAS,YAAYC,SAAQD,OAAM,GAAGC,SAAQ,KAAK,GAAG,SAAS,YAAY,WAAW,KAAK;AAC/F,gBAAM,QAAQ,EAAED,OAAM;AACtB,iBAAO;AAAA,QAET,KAAK;AACH,cAAI,eAAe;AACjB,mBAAO,cAAc,KAAKA,OAAM,KAAK,cAAc,KAAK,KAAK;AAAA,UAC/D;AAAA,MACJ;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC/GjB;AAAA;AAQA,aAAS,UAAUE,QAAO,QAAQ;AAChC,UAAI,QAAQ,IACR,SAAS,OAAO,QAChB,SAASA,OAAM;AAEnB,aAAO,EAAE,QAAQ,QAAQ;AACvB,QAAAA,OAAM,SAAS,KAAK,IAAI,OAAO,KAAK;AAAA,MACtC;AACA,aAAOA;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,UAAU;AAad,aAAS,eAAeC,SAAQ,UAAU,aAAa;AACrD,UAAI,SAAS,SAASA,OAAM;AAC5B,aAAO,QAAQA,OAAM,IAAI,SAAS,UAAU,QAAQ,YAAYA,OAAM,CAAC;AAAA,IACzE;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA;AASA,aAAS,YAAYC,QAAO,WAAW;AACrC,UAAI,QAAQ,IACR,SAASA,UAAS,OAAO,IAAIA,OAAM,QACnC,WAAW,GACX,SAAS,CAAC;AAEd,aAAO,EAAE,QAAQ,QAAQ;AACvB,YAAI,QAAQA,OAAM,KAAK;AACvB,YAAI,UAAU,OAAO,OAAOA,MAAK,GAAG;AAClC,iBAAO,UAAU,IAAI;AAAA,QACvB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACxBjB;AAAA;AAkBA,aAAS,YAAY;AACnB,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA;AAAA,QAAI,cAAc;AAAlB,QACI,YAAY;AAGhB,QAAI,cAAc,OAAO;AAGzB,QAAI,uBAAuB,YAAY;AAGvC,QAAI,mBAAmB,OAAO;AAS9B,QAAI,aAAa,CAAC,mBAAmB,YAAY,SAASC,SAAQ;AAChE,UAAIA,WAAU,MAAM;AAClB,eAAO,CAAC;AAAA,MACV;AACA,MAAAA,UAAS,OAAOA,OAAM;AACtB,aAAO,YAAY,iBAAiBA,OAAM,GAAG,SAAS,QAAQ;AAC5D,eAAO,qBAAqB,KAAKA,SAAQ,MAAM;AAAA,MACjD,CAAC;AAAA,IACH;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA;AAAA,QAAI,iBAAiB;AAArB,QACI,aAAa;AADjB,QAEI,OAAO;AASX,aAAS,WAAWC,SAAQ;AAC1B,aAAO,eAAeA,SAAQ,MAAM,UAAU;AAAA,IAChD;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA;AAAA,QAAI,aAAa;AAGjB,QAAI,uBAAuB;AAG3B,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAejC,aAAS,aAAaC,SAAQ,OAAO,SAAS,YAAY,WAAW,OAAO;AAC1E,UAAI,YAAY,UAAU,sBACtB,WAAW,WAAWA,OAAM,GAC5B,YAAY,SAAS,QACrB,WAAW,WAAW,KAAK,GAC3B,YAAY,SAAS;AAEzB,UAAI,aAAa,aAAa,CAAC,WAAW;AACxC,eAAO;AAAA,MACT;AACA,UAAI,QAAQ;AACZ,aAAO,SAAS;AACd,YAAI,MAAM,SAAS,KAAK;AACxB,YAAI,EAAE,YAAY,OAAO,QAAQ,eAAe,KAAK,OAAO,GAAG,IAAI;AACjE,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,aAAa,MAAM,IAAIA,OAAM;AACjC,UAAI,aAAa,MAAM,IAAI,KAAK;AAChC,UAAI,cAAc,YAAY;AAC5B,eAAO,cAAc,SAAS,cAAcA;AAAA,MAC9C;AACA,UAAI,SAAS;AACb,YAAM,IAAIA,SAAQ,KAAK;AACvB,YAAM,IAAI,OAAOA,OAAM;AAEvB,UAAI,WAAW;AACf,aAAO,EAAE,QAAQ,WAAW;AAC1B,cAAM,SAAS,KAAK;AACpB,YAAI,WAAWA,QAAO,GAAG,GACrB,WAAW,MAAM,GAAG;AAExB,YAAI,YAAY;AACd,cAAI,WAAW,YACX,WAAW,UAAU,UAAU,KAAK,OAAOA,SAAQ,KAAK,IACxD,WAAW,UAAU,UAAU,KAAKA,SAAQ,OAAO,KAAK;AAAA,QAC9D;AAEA,YAAI,EAAE,aAAa,SACV,aAAa,YAAY,UAAU,UAAU,UAAU,SAAS,YAAY,KAAK,IAClF,WACD;AACL,mBAAS;AACT;AAAA,QACF;AACA,qBAAa,WAAW,OAAO;AAAA,MACjC;AACA,UAAI,UAAU,CAAC,UAAU;AACvB,YAAI,UAAUA,QAAO,aACjB,UAAU,MAAM;AAGpB,YAAI,WAAW,YACV,iBAAiBA,WAAU,iBAAiB,UAC7C,EAAE,OAAO,WAAW,cAAc,mBAAmB,WACnD,OAAO,WAAW,cAAc,mBAAmB,UAAU;AACjE,mBAAS;AAAA,QACX;AAAA,MACF;AACA,YAAM,QAAQ,EAAEA,OAAM;AACtB,YAAM,QAAQ,EAAE,KAAK;AACrB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACzFjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,OAAO;AAGX,QAAIC,YAAW,UAAU,MAAM,UAAU;AAEzC,WAAO,UAAUA;AAAA;AAAA;;;ACNjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,OAAO;AAGX,QAAIC,WAAU,UAAU,MAAM,SAAS;AAEvC,WAAO,UAAUA;AAAA;AAAA;;;ACNjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,OAAO;AAGX,QAAIC,OAAM,UAAU,MAAM,KAAK;AAE/B,WAAO,UAAUA;AAAA;AAAA;;;ACNjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,OAAO;AAGX,QAAIC,WAAU,UAAU,MAAM,SAAS;AAEvC,WAAO,UAAUA;AAAA;AAAA;;;ACNjB;AAAA;AAAA,QAAIC,YAAW;AAAf,QACIC,OAAM;AADV,QAEIC,WAAU;AAFd,QAGIC,OAAM;AAHV,QAIIC,WAAU;AAJd,QAKI,aAAa;AALjB,QAMI,WAAW;AAGf,QAAI,SAAS;AAAb,QACI,YAAY;AADhB,QAEI,aAAa;AAFjB,QAGI,SAAS;AAHb,QAII,aAAa;AAEjB,QAAI,cAAc;AAGlB,QAAI,qBAAqB,SAASJ,SAAQ;AAA1C,QACI,gBAAgB,SAASC,IAAG;AADhC,QAEI,oBAAoB,SAASC,QAAO;AAFxC,QAGI,gBAAgB,SAASC,IAAG;AAHhC,QAII,oBAAoB,SAASC,QAAO;AASxC,QAAI,SAAS;AAGb,QAAKJ,aAAY,OAAO,IAAIA,UAAS,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,eACxDC,QAAO,OAAO,IAAIA,MAAG,KAAK,UAC1BC,YAAW,OAAOA,SAAQ,QAAQ,CAAC,KAAK,cACxCC,QAAO,OAAO,IAAIA,MAAG,KAAK,UAC1BC,YAAW,OAAO,IAAIA,UAAO,KAAK,YAAa;AAClD,eAAS,SAAS,OAAO;AACvB,YAAI,SAAS,WAAW,KAAK,GACzB,OAAO,UAAU,YAAY,MAAM,cAAc,QACjD,aAAa,OAAO,SAAS,IAAI,IAAI;AAEzC,YAAI,YAAY;AACd,kBAAQ,YAAY;AAAA,YAClB,KAAK;AAAoB,qBAAO;AAAA,YAChC,KAAK;AAAe,qBAAO;AAAA,YAC3B,KAAK;AAAmB,qBAAO;AAAA,YAC/B,KAAK;AAAe,qBAAO;AAAA,YAC3B,KAAK;AAAmB,qBAAO;AAAA,UACjC;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACzDjB;AAAA;AAAA,QAAI,QAAQ;AAAZ,QACI,cAAc;AADlB,QAEI,aAAa;AAFjB,QAGI,eAAe;AAHnB,QAII,SAAS;AAJb,QAKI,UAAU;AALd,QAMI,WAAW;AANf,QAOI,eAAe;AAGnB,QAAI,uBAAuB;AAG3B,QAAI,UAAU;AAAd,QACI,WAAW;AADf,QAEI,YAAY;AAGhB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAgBjC,aAAS,gBAAgBC,SAAQ,OAAO,SAAS,YAAY,WAAW,OAAO;AAC7E,UAAI,WAAW,QAAQA,OAAM,GACzB,WAAW,QAAQ,KAAK,GACxB,SAAS,WAAW,WAAW,OAAOA,OAAM,GAC5C,SAAS,WAAW,WAAW,OAAO,KAAK;AAE/C,eAAS,UAAU,UAAU,YAAY;AACzC,eAAS,UAAU,UAAU,YAAY;AAEzC,UAAI,WAAW,UAAU,WACrB,WAAW,UAAU,WACrB,YAAY,UAAU;AAE1B,UAAI,aAAa,SAASA,OAAM,GAAG;AACjC,YAAI,CAAC,SAAS,KAAK,GAAG;AACpB,iBAAO;AAAA,QACT;AACA,mBAAW;AACX,mBAAW;AAAA,MACb;AACA,UAAI,aAAa,CAAC,UAAU;AAC1B,kBAAU,QAAQ,IAAI;AACtB,eAAQ,YAAY,aAAaA,OAAM,IACnC,YAAYA,SAAQ,OAAO,SAAS,YAAY,WAAW,KAAK,IAChE,WAAWA,SAAQ,OAAO,QAAQ,SAAS,YAAY,WAAW,KAAK;AAAA,MAC7E;AACA,UAAI,EAAE,UAAU,uBAAuB;AACrC,YAAI,eAAe,YAAY,eAAe,KAAKA,SAAQ,aAAa,GACpE,eAAe,YAAY,eAAe,KAAK,OAAO,aAAa;AAEvE,YAAI,gBAAgB,cAAc;AAChC,cAAI,eAAe,eAAeA,QAAO,MAAM,IAAIA,SAC/C,eAAe,eAAe,MAAM,MAAM,IAAI;AAElD,oBAAU,QAAQ,IAAI;AACtB,iBAAO,UAAU,cAAc,cAAc,SAAS,YAAY,KAAK;AAAA,QACzE;AAAA,MACF;AACA,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AACA,gBAAU,QAAQ,IAAI;AACtB,aAAO,aAAaA,SAAQ,OAAO,SAAS,YAAY,WAAW,KAAK;AAAA,IAC1E;AAEA,WAAO,UAAU;AAAA;AAAA;;;AClFjB;AAAA;AAAA,QAAI,kBAAkB;AAAtB,QACI,eAAe;AAgBnB,aAAS,YAAY,OAAO,OAAO,SAAS,YAAY,OAAO;AAC7D,UAAI,UAAU,OAAO;AACnB,eAAO;AAAA,MACT;AACA,UAAI,SAAS,QAAQ,SAAS,QAAS,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,KAAK,GAAI;AACpF,eAAO,UAAU,SAAS,UAAU;AAAA,MACtC;AACA,aAAO,gBAAgB,OAAO,OAAO,SAAS,YAAY,aAAa,KAAK;AAAA,IAC9E;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC3BjB;AAAA;AAAA,QAAI,QAAQ;AAAZ,QACI,cAAc;AAGlB,QAAI,uBAAuB;AAA3B,QACI,yBAAyB;AAY7B,aAAS,YAAYC,SAAQ,QAAQ,WAAW,YAAY;AAC1D,UAAI,QAAQ,UAAU,QAClB,SAAS,OACT,eAAe,CAAC;AAEpB,UAAIA,WAAU,MAAM;AAClB,eAAO,CAAC;AAAA,MACV;AACA,MAAAA,UAAS,OAAOA,OAAM;AACtB,aAAO,SAAS;AACd,YAAI,OAAO,UAAU,KAAK;AAC1B,YAAK,gBAAgB,KAAK,CAAC,IACnB,KAAK,CAAC,MAAMA,QAAO,KAAK,CAAC,CAAC,IAC1B,EAAE,KAAK,CAAC,KAAKA,UACf;AACJ,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO,EAAE,QAAQ,QAAQ;AACvB,eAAO,UAAU,KAAK;AACtB,YAAI,MAAM,KAAK,CAAC,GACZ,WAAWA,QAAO,GAAG,GACrB,WAAW,KAAK,CAAC;AAErB,YAAI,gBAAgB,KAAK,CAAC,GAAG;AAC3B,cAAI,aAAa,UAAa,EAAE,OAAOA,UAAS;AAC9C,mBAAO;AAAA,UACT;AAAA,QACF,OAAO;AACL,cAAI,QAAQ,IAAI;AAChB,cAAI,YAAY;AACd,gBAAI,SAAS,WAAW,UAAU,UAAU,KAAKA,SAAQ,QAAQ,KAAK;AAAA,UACxE;AACA,cAAI,EAAE,WAAW,SACT,YAAY,UAAU,UAAU,uBAAuB,wBAAwB,YAAY,KAAK,IAChG,SACD;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC7DjB;AAAA;AAAA,QAAIC,YAAW;AAUf,aAAS,mBAAmB,OAAO;AACjC,aAAO,UAAU,SAAS,CAACA,UAAS,KAAK;AAAA,IAC3C;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA;AAAA,QAAI,qBAAqB;AAAzB,QACI,OAAO;AASX,aAAS,aAAaC,SAAQ;AAC5B,UAAI,SAAS,KAAKA,OAAM,GACpB,SAAS,OAAO;AAEpB,aAAO,UAAU;AACf,YAAI,MAAM,OAAO,MAAM,GACnB,QAAQA,QAAO,GAAG;AAEtB,eAAO,MAAM,IAAI,CAAC,KAAK,OAAO,mBAAmB,KAAK,CAAC;AAAA,MACzD;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACvBjB;AAAA;AASA,aAAS,wBAAwB,KAAK,UAAU;AAC9C,aAAO,SAASC,SAAQ;AACtB,YAAIA,WAAU,MAAM;AAClB,iBAAO;AAAA,QACT;AACA,eAAOA,QAAO,GAAG,MAAM,aACpB,aAAa,UAAc,OAAO,OAAOA,OAAM;AAAA,MACpD;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA;AAAA,QAAI,cAAc;AAAlB,QACI,eAAe;AADnB,QAEI,0BAA0B;AAS9B,aAAS,YAAY,QAAQ;AAC3B,UAAI,YAAY,aAAa,MAAM;AACnC,UAAI,UAAU,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC,GAAG;AAC5C,eAAO,wBAAwB,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;AAAA,MACjE;AACA,aAAO,SAASC,SAAQ;AACtB,eAAOA,YAAW,UAAU,YAAYA,SAAQ,QAAQ,SAAS;AAAA,MACnE;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACrBjB;AAAA;AAAA,QAAI,WAAW;AAAf,QACI,QAAQ;AAUZ,aAAS,QAAQC,SAAQ,MAAM;AAC7B,aAAO,SAAS,MAAMA,OAAM;AAE5B,UAAI,QAAQ,GACR,SAAS,KAAK;AAElB,aAAOA,WAAU,QAAQ,QAAQ,QAAQ;AACvC,QAAAA,UAASA,QAAO,MAAM,KAAK,OAAO,CAAC,CAAC;AAAA,MACtC;AACA,aAAQ,SAAS,SAAS,SAAUA,UAAS;AAAA,IAC/C;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACvBjB;AAAA;AAAA,QAAI,UAAU;AA2Bd,aAAS,IAAIC,SAAQ,MAAM,cAAc;AACvC,UAAI,SAASA,WAAU,OAAO,SAAY,QAAQA,SAAQ,IAAI;AAC9D,aAAO,WAAW,SAAY,eAAe;AAAA,IAC/C;AAEA,WAAO,UAAU;AAAA;AAAA;;;AChCjB;AAAA;AAQA,aAAS,UAAUC,SAAQ,KAAK;AAC9B,aAAOA,WAAU,QAAQ,OAAO,OAAOA,OAAM;AAAA,IAC/C;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACZjB;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,UAAU;AA4Bd,aAAS,MAAMC,SAAQ,MAAM;AAC3B,aAAOA,WAAU,QAAQ,QAAQA,SAAQ,MAAM,SAAS;AAAA,IAC1D;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjCjB;AAAA;AAAA,QAAI,cAAc;AAAlB,QACI,MAAM;AADV,QAEI,QAAQ;AAFZ,QAGI,QAAQ;AAHZ,QAII,qBAAqB;AAJzB,QAKI,0BAA0B;AAL9B,QAMI,QAAQ;AAGZ,QAAI,uBAAuB;AAA3B,QACI,yBAAyB;AAU7B,aAAS,oBAAoB,MAAM,UAAU;AAC3C,UAAI,MAAM,IAAI,KAAK,mBAAmB,QAAQ,GAAG;AAC/C,eAAO,wBAAwB,MAAM,IAAI,GAAG,QAAQ;AAAA,MACtD;AACA,aAAO,SAASC,SAAQ;AACtB,YAAI,WAAW,IAAIA,SAAQ,IAAI;AAC/B,eAAQ,aAAa,UAAa,aAAa,WAC3C,MAAMA,SAAQ,IAAI,IAClB,YAAY,UAAU,UAAU,uBAAuB,sBAAsB;AAAA,MACnF;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;AChCjB;AAAA;AAgBA,aAAS,SAAS,OAAO;AACvB,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA;AAOA,aAAS,aAAa,KAAK;AACzB,aAAO,SAASC,SAAQ;AACtB,eAAOA,WAAU,OAAO,SAAYA,QAAO,GAAG;AAAA,MAChD;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA;AAAA,QAAI,UAAU;AASd,aAAS,iBAAiB,MAAM;AAC9B,aAAO,SAASC,SAAQ;AACtB,eAAO,QAAQA,SAAQ,IAAI;AAAA,MAC7B;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA;AAAA,QAAI,eAAe;AAAnB,QACI,mBAAmB;AADvB,QAEI,QAAQ;AAFZ,QAGI,QAAQ;AAwBZ,aAAS,SAAS,MAAM;AACtB,aAAO,MAAM,IAAI,IAAI,aAAa,MAAM,IAAI,CAAC,IAAI,iBAAiB,IAAI;AAAA,IACxE;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA;AAAA,QAAI,cAAc;AAAlB,QACI,sBAAsB;AAD1B,QAEI,WAAW;AAFf,QAGI,UAAU;AAHd,QAII,WAAW;AASf,aAAS,aAAa,OAAO;AAG3B,UAAI,OAAO,SAAS,YAAY;AAC9B,eAAO;AAAA,MACT;AACA,UAAI,SAAS,MAAM;AACjB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,SAAS,UAAU;AAC5B,eAAO,QAAQ,KAAK,IAChB,oBAAoB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IACtC,YAAY,KAAK;AAAA,MACvB;AACA,aAAO,SAAS,KAAK;AAAA,IACvB;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC9BjB;AAAA;AAAA,QAAI,kBAAkB;AAAtB,QACI,aAAa;AADjB,QAEI,eAAe;AA8BnB,aAASC,WAAUC,SAAQ,UAAU;AACnC,UAAI,SAAS,CAAC;AACd,iBAAW,aAAa,UAAU,CAAC;AAEnC,iBAAWA,SAAQ,SAAS,OAAO,KAAKA,SAAQ;AAC9C,wBAAgB,QAAQ,KAAK,SAAS,OAAO,KAAKA,OAAM,CAAC;AAAA,MAC3D,CAAC;AACD,aAAO;AAAA,IACT;AAEA,WAAO,UAAUD;AAAA;AAAA;;;AC1CjB;AAAA;AAAA;AAKA,aAAS,MAAM,SAAS;AACtB,WAAK,WAAW;AAChB,WAAK,MAAM;AAAA,IACb;AACA,UAAM,UAAU,QAAQ,WAAY;AAClC,WAAK,QAAQ;AACb,WAAK,UAAU,uBAAO,OAAO,IAAI;AAAA,IACnC;AACA,UAAM,UAAU,MAAM,SAAU,KAAK;AACnC,aAAO,KAAK,QAAQ,GAAG;AAAA,IACzB;AACA,UAAM,UAAU,MAAM,SAAU,KAAK,OAAO;AAC1C,WAAK,SAAS,KAAK,YAAY,KAAK,MAAM;AAC1C,UAAI,EAAE,OAAO,KAAK;AAAU,aAAK;AAEjC,aAAQ,KAAK,QAAQ,GAAG,IAAI;AAAA,IAC9B;AAEA,QAAI,cAAc;AAAlB,QACE,cAAc;AADhB,QAEE,mBAAmB;AAFrB,QAGE,kBAAkB;AAHpB,QAIE,qBAAqB;AAJvB,QAKE,iBAAiB;AAEnB,QAAI,YAAY,IAAI,MAAM,cAAc;AAAxC,QACE,WAAW,IAAI,MAAM,cAAc;AADrC,QAEE,WAAW,IAAI,MAAM,cAAc;AAIrC,WAAO,UAAU;AAAA,MACf;AAAA,MAEA,OAAOE;AAAA,MAEP;AAAA,MAEA,QAAQ,SAAU,MAAM;AACtB,YAAI,QAAQ,cAAc,IAAI;AAE9B,eACE,SAAS,IAAI,IAAI,KACjB,SAAS,IAAI,MAAM,SAAS,OAAO,KAAK,OAAO;AAC7C,cAAI,QAAQ;AACZ,cAAI,MAAM,MAAM;AAChB,cAAI,OAAO;AAEX,iBAAO,QAAQ,MAAM,GAAG;AACtB,gBAAI,OAAO,MAAM,KAAK;AACtB,gBACE,SAAS,eACT,SAAS,iBACT,SAAS,aACT;AACA,qBAAO;AAAA,YACT;AAEA,mBAAO,KAAK,MAAM,OAAO,CAAC;AAAA,UAC5B;AACA,eAAK,MAAM,KAAK,CAAC,IAAI;AAAA,QACvB,CAAC;AAAA,MAEL;AAAA,MAEA,QAAQ,SAAU,MAAM,MAAM;AAC5B,YAAI,QAAQ,cAAc,IAAI;AAC9B,eACE,SAAS,IAAI,IAAI,KACjB,SAAS,IAAI,MAAM,SAASC,QAAO,MAAM;AACvC,cAAI,QAAQ,GACV,MAAM,MAAM;AACd,iBAAO,QAAQ,KAAK;AAClB,gBAAI,QAAQ,QAAQ,CAAC;AAAM,qBAAO,KAAK,MAAM,OAAO,CAAC;AAAA;AAChD;AAAA,UACP;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MAEL;AAAA,MAEA,MAAM,SAAU,UAAU;AACxB,eAAO,SAAS,OAAO,SAAU,MAAM,MAAM;AAC3C,iBACE,QACC,SAAS,IAAI,KAAK,YAAY,KAAK,IAAI,IACpC,MAAM,OAAO,OACZ,OAAO,MAAM,MAAM;AAAA,QAE5B,GAAG,EAAE;AAAA,MACP;AAAA,MAEA,SAAS,SAAU,MAAM,IAAI,SAAS;AACpC,QAAAC,SAAQ,MAAM,QAAQ,IAAI,IAAI,OAAOF,OAAM,IAAI,GAAG,IAAI,OAAO;AAAA,MAC/D;AAAA,IACF;AAEA,aAAS,cAAc,MAAM;AAC3B,aACE,UAAU,IAAI,IAAI,KAClB,UAAU;AAAA,QACR;AAAA,QACAA,OAAM,IAAI,EAAE,IAAI,SAAU,MAAM;AAC9B,iBAAO,KAAK,QAAQ,oBAAoB,IAAI;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IAEJ;AAEA,aAASA,OAAM,MAAM;AACnB,aAAO,KAAK,MAAM,WAAW,KAAK,CAAC,EAAE;AAAA,IACvC;AAEA,aAASE,SAAQ,OAAO,MAAM,SAAS;AACrC,UAAI,MAAM,MAAM,QACd,MACA,KACA,SACA;AAEF,WAAK,MAAM,GAAG,MAAM,KAAK,OAAO;AAC9B,eAAO,MAAM,GAAG;AAEhB,YAAI,MAAM;AACR,cAAI,eAAe,IAAI,GAAG;AACxB,mBAAO,MAAM,OAAO;AAAA,UACtB;AAEA,sBAAY,SAAS,IAAI;AACzB,oBAAU,CAAC,aAAa,QAAQ,KAAK,IAAI;AAEzC,eAAK,KAAK,SAAS,MAAM,WAAW,SAAS,KAAK,KAAK;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAEA,aAAS,SAAS,KAAK;AACrB,aACE,OAAO,QAAQ,YAAY,OAAO,CAAC,KAAK,GAAG,EAAE,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM;AAAA,IAE5E;AAEA,aAAS,iBAAiB,MAAM;AAC9B,aAAO,KAAK,MAAM,gBAAgB,KAAK,CAAC,KAAK,MAAM,WAAW;AAAA,IAChE;AAEA,aAAS,gBAAgB,MAAM;AAC7B,aAAO,gBAAgB,KAAK,IAAI;AAAA,IAClC;AAEA,aAAS,eAAe,MAAM;AAC5B,aAAO,CAAC,SAAS,IAAI,MAAM,iBAAiB,IAAI,KAAK,gBAAgB,IAAI;AAAA,IAC3E;AAAA;AAAA;;;AC7JA;AAAA;AAYA,aAAS,YAAYC,QAAO,UAAU,aAAa,WAAW;AAC5D,UAAI,QAAQ,IACR,SAASA,UAAS,OAAO,IAAIA,OAAM;AAEvC,UAAI,aAAa,QAAQ;AACvB,sBAAcA,OAAM,EAAE,KAAK;AAAA,MAC7B;AACA,aAAO,EAAE,QAAQ,QAAQ;AACvB,sBAAc,SAAS,aAAaA,OAAM,KAAK,GAAG,OAAOA,MAAK;AAAA,MAChE;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA;AAOA,aAAS,eAAeC,SAAQ;AAC9B,aAAO,SAAS,KAAK;AACnB,eAAOA,WAAU,OAAO,SAAYA,QAAO,GAAG;AAAA,MAChD;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA;AAAA,QAAI,iBAAiB;AAGrB,QAAI,kBAAkB;AAAA;AAAA,MAEpB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAC1E,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAC1E,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAC1E,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAC1E,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MACnC,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA;AAAA,MAER,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAC1B,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AA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K;MACL,OAAO;IACT;EACF;EACA,UAAU;IACR,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;IACZ,iBAAiB;EACnB;EACA,kBAAkB;IAChB,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,UAAU;IACR,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,OAAO;IACL,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,cAAc;IACZ,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,SAAS;IACP,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,YAAY;IACV,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,c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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", "fn", "p", "e", "split", "isValid", "max", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "self", "table", "a", "r", "lexer", "c", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "this", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "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", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "createContext", "defaultValue", "contextId", "Consumer", "contextValue", "Provider", "subs", "ctx", "_props", "old", "splice", "isValidElement", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "getHookState", "index", "type", "options", "__h", "currentComponent", "currentHook", "hooks", "__H", "__", "length", "push", "__V", "EMPTY", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "currentIndex", "_reducer", "__c", "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", "useImperativeHandle", "ref", "createHandle", "concat", "factory", "useCallback", "useContext", "context", "provider", "sub", "value", "useDebugValue", "formatter", "useErrorBoundary", "cb", "errState", "componentDidCatch", "err", "errorInfo", "undefined", "useId", "root", "__v", "__m", "mask", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "invokeCleanup", "invokeEffect", "e", "__e", "afterNextFrame", "raf", "done", "clearTimeout", "timeout", "HAS_RAF", "cancelAnimationFrame", "setTimeout", "requestAnimationFrame", "hook", "comp", "cleanup", "oldArgs", "newArgs", "some", "arg", "f", "previousComponent", "prevRaf", "oldBeforeDiff", "oldBeforeRender", "oldAfterDiff", "oldCommit", "oldBeforeUnmount", "diffed", "unmount", "__b", "vnode", "commitQueue", "hasErrored", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "is", "x", "y", "PureComponent", "p", "this", "memo", "c", "comparer", "shouldUpdate", "nextProps", "ref", "updateRef", "call", "current", "Memoed", "shouldComponentUpdate", "createElement", "displayName", "name", "prototype", "isReactComponent", "forwardRef", "fn", "Forwarded", "clone", "$$typeof", "REACT_FORWARD_SYMBOL", "render", "__f", "detachedClone", "vnode", "detachedParent", "parentDom", "__c", "forEach", "effect", "__H", "__P", "__k", "map", "child", "removeOriginal", "originalParent", "__v", "__e", "insertBefore", "__d", "Suspense", "__u", "_suspenders", "suspended", "component", "__", "__a", "lazy", "loader", "prom", "error", "Lazy", "then", "exports", "default", "e", "SuspenseList", "_next", "_map", "ContextProvider", "getChildContext", "context", "children", "Portal", "_this", "container", "_container", "componentWillUnmount", "_temp", "nodeType", "parentNode", "childNodes", "appendChild", "push", "before", "removeChild", "splice", "indexOf", "createPortal", "el", "containerInfo", "parent", "callback", "textContent", "preactRender", "hydrate", "preactHydrate", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "createFactory", "type", "bind", "isValidElement", "element", "REACT_ELEMENT_TYPE", "cloneElement", "preactCloneElement", "apply", "arguments", "unmountComponentAtNode", "findDOMNode", "base", "Fragment", "startTransition", "cb", "useDeferredValue", "val", "useTransition", "useLayoutEffect", "useSyncExternalStore", "subscribe", "getSnapshot", "value", "_useState", "useState", "_instance", "_getSnapshot", "forceUpdate", "useEffect", "oldDiffHook", "mapFn", "Children", "oldCatchError", "oldUnmount", "resolve", "CAMEL_PROPS", "IS_DOM", "onChangeInputType", "oldEventHook", "currentComponent", "classNameDescriptor", "oldVNodeHook", "oldBeforeRender", "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", "version", "unstable_batchedUpdates", "flushSync", "StrictMode", "useInsertionEffect", "index", "Component", "isPureReactComponent", "state", "options", "__b", "Symbol", "for", "toChildArray", "count", "length", "only", "normalized", "toArray", "newVNode", "oldVNode", "errorInfo", "unmount", "__R", "__h", "promise", "suspendingVNode", "suspendingComponent", "resolved", "onResolved", "onSuspensionComplete", "suspendedVNode", "setState", "pop", "wasHydrating", "document", "detachedComponent", "__O", "fallback", "list", "node", "delete", "revealOrder", "size", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "reverse", "set", "componentDidUpdate", "componentDidMount", "test", "key", "Object", "defineProperty", "configurable", "v", "writable", "event", "persist", "nativeEvent", "class", "normalizedProps", "nonCustomElement", "toLowerCase", "replace", "multiple", "Array", "isArray", "selected", "defaultValue", "className", "enumerable", "__r", "ReactCurrentDispatcher", "readContext", "__n", "arg", "useId", "useReducer", "useRef", "useImperativeHandle", "useMemo", "useCallback", "useContext", "useDebugValue", "createContext", "createRef", "e", "h", "a", "b", "k", "l", "m", "n", "p", "q", "d", "f", "c", "g", "r", "t", "u", "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", "r", "i", "x", "n", "h", "l", "y", "d", "x", "y", "r", "a", "i", "o", "v", "c", "p", "q", "b", "t", "n", "j", "m", "d", "t2", "t3", "t22", "b2", "b3", "b4", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "s", "r", "x", "i", "j", "k", "r", "p", "q", "t", "s", "m", "n", "i", "t", "h", "p", "q", "i", "n", "b", "h", "fn", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "timer", "CancellationToken", "a", "r", "n", "x", "c", "a2", "x2", "a", "b", "n", "r", "s", "r2", "i", "names", "normal", "small", "array", "fn", "string", "counter", "k", "i", "n", "j", "w", "t", "m", "q", "string", "i", "c", "a", "b", "R", "n", "counter", "number", "e", "base", "res", "v", "URL", "URLSearchParams", "x", "URL", "e", "s", "i", "s2", "LogLevel", "m", "e", "location", "c", "p", "x", "d", "map", "i", "x", "c", "e", "s", "n", "x", "c", "x", "c", "e", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "TalerPreciseTimestamp", "now", "t", "s", "TalerProtocolTimestamp", "t2", "Duration", "d", "now", "s", "i", "d2", "n", "AbsoluteTime", "t2", "difference", "t", "at", "x", "c", "x", "c", "DenomKeyType", "t", "DenominationPubKey", "p2", "ExchangeProtocolVersion", "MerchantProtocolVersion", "n", "a", "d", "v", "N", "i", "j", "s", "c", "p", "hash", "d", "logger", "n", "TalerSignaturePurpose", "WalletAccountMergeFlags", "c", "p", "x", "bigint", "Edx25519", "L", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "decode", "encode", "p", "i", "d", "encode", "decode", "p", "prefix", "x", "c", "p", "s", "URLSearchParams", "v", "k", "logger", "Headers", "r", "m", "v", "k", "e", "e", "r", "s", "error", "x", "c", "s", "p", "r", "TalerUriType", "TalerUriAction", "string", "q", "URLSearchParams", "v", "k", "URL", "codecForURL", "codecForURL", "TalerCorebankApi", "MonitorTimeframeParam", "TanChannel", "TalerExchangeApi", "AmlState", "TalerMerchantApi", "TokenFamilyKind", "HttpStatusCode", "LibtoolVersion", "compare", "v", "logger", "logger", "now", "d", "s", "ReserveTransactionType", "logger", "logger", "CreditDebitIndicator", "encodings", "a", "b", "c", "d", "i", "logger", "ContractTermsUtil", "i", "x", "h", "k", "e", "hash", "d", "c", "e", "e", "err", "x", "fnutil", "f", "x", "TransactionMajorState", "TransactionMinorState", "TransactionAction", "TransactionType", "WithdrawalType", "DenomLossEventType", "PaymentStatus", "TransactionAmountMode", "BalanceFlag", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "ExchangeUpdateStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "ProviderPaymentType", "TalerBankConversionCacheEviction", "compare", "TalerCoreBankCacheEviction", "TalerMerchantInstanceCacheEviction", "TalerMerchantManagementCacheEviction", "compare", "ChallengerCacheEviction", "compare", "TalerExchangeCacheEviction", "logger", "strings", "s", "i", "c", "i", "x", "n", "c", "s", "NotificationType", "ObservabilityEventType", "e", "encTable", "d", "v", "s", "c", "logger", "h", "v", "k", "_", "p", "h", "e", "match", "l", "initial", "storage", "storage", "error", "d", "logger", "RequestThrottler", "Duration", "DEFAULT_REQUEST_TIMEOUT_MS", "TalerError", "TalerErrorCode", "encodeBody", "getDefaultHeaders", "Headers", "e", "format", "string", "object", "array", "number", "_typeof", "obj", "date", "defaultOptions", "MILLISECONDS_IN_WEEK", "formatDistance", "formatRelative", "ordinalNumber", "number", "valueCallback", "_typeof", "obj", "o", "p", "_setPrototypeOf", "self", "e", "_getPrototypeOf", "i", "Setter", "ValueSetter", "set", "_classCallCheck", "_defineProperties", "i", "_createClass", "Parser", "match", "_typeof", "obj", "_inherits", "_setPrototypeOf", "o", "p", "_createSuper", "_isNativeReflectConstruct", "_getPrototypeOf", "_possibleConstructorReturn", "self", "_assertThisInitialized", "e", "_defineProperty", "EraParser", "parse", "set", "date", "n", "YearParser", "valueCallback", "LocalWeekYearParser", "ISOWeekYearParser", "ExtendedYearParser", "QuarterParser", "StandAloneQuarterParser", "MonthParser", "StandAloneMonthParser", "LocalWeekParser", "ISOWeekParser", "DateParser", "DayOfYearParser", "defaultOptions", "DayParser", "LocalDayParser", "StandAloneLocalDayParser", "ISODayParser", "AMPMParser", "AMPMMidnightParser", "DayPeriodParser", "Hour1to12Parser", "Hour0to23Parser", "Hour0To11Parser", "Hour1To24Parser", "MinuteParser", "SecondParser", "FractionOfSecondParser", "ISOTimezoneWithZParser", "ISOTimezoneParser", "TimestampSecondsParser", "TimestampMillisecondsParser", "parsers", "formatDistanceLocale", "formatDistance", "formatDistance_default", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "formatLong_default", "formatRelativeLocale", "formatRelative", "formatRelative_default", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "number", "localize", "argumentCallback", "localize_default", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "valueCallback", "match_default", "locale", "date", "Context", "createContext", "initial", "useEffect", "h", "useContext", "createContext", "createContext", "useContext", "CONFIG_FAIL_TRY_AGAIN_MS", "useState", "VERSION", "useEffect", "LibtoolVersion", "error", "TalerError", "h", "ObservableHttpClientLibrary", "TalerAuthenticationHttpClient", "createContext", "Context", "createContext", "useContext", "useState", "path", "params", "useEffect", "h", "Context", "createContext", "h", "Context", "__export", "p", "h", "e", "createContext", "v", "a", "b", "x", "isDate", "cache", "f", "h", "s", "error", "set", "mutate", "fn", "_", "u2", "f2", "q", "fn", "use", "middleware", "i", "use", "v", "e", "cache", "compare", "_", "t", "cachedData", "T", "error", "now", "timer", "x", "SWRConfig", "i", "i", "k", "n", "invariant", "prefix", "hash", "location", "e", "location", "fn", "invariant", "encodePath", "decodePath", "path", "history", "a", "b", "encodedPath", "location", "n", "const", "EMPTY", "i", "route", "let", "c", "p", "r", "a", "b", "e", "t", "Router", "super", "canRoute", "routeTo", "location", "this", "match", "Context", "q", "p", "h", "s", "object", "errors", "FormContext", "e", "q", "errors", "object", "p", "value", "defaultToString", "f", "defaultFromString", "v", "initial", "names", "f", "v", "error", "e", "i18n", "p", "p", "i18n", "errors", "k", "fn", "p", "error", "i18n", "toInteger", "number", "requiredArgs", "_typeof", "obj", "toDate", "requiredArgs", "requiredArgs", "date", "toDate", "toInteger", "requiredArgs", "date", "toDate", "toInteger", "_typeof", "obj", "add", "requiredArgs", "toInteger", "date", "toDate", "requiredArgs", "toDate", "toInteger", "defaultOptions", "getDefaultOptions", "date", "requiredArgs", "date", "toDate", "requiredArgs", "requiredArgs", "toDate", "daysInYear", "maxTime", "millisecondsInMinute", "millisecondsInHour", "minTime", "maxTime", "secondsInHour", "secondsInDay", "secondsInHour", "secondsInWeek", "secondsInYear", "daysInYear", "secondsInMonth", "secondsInQuarter", "_typeof", "obj", "requiredArgs", "requiredArgs", "date", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "difference", "requiredArgs", "toDate", "requiredArgs", "millisecondsInHour", "requiredArgs", "millisecondsInMinute", "requiredArgs", "date", "toDate", "requiredArgs", "date", "toDate", "requiredArgs", "date", "toDate", "requiredArgs", "toDate", "difference", "requiredArgs", "requiredArgs", "toDate", "difference", "requiredArgs", "toInteger", "MILLISECONDS_IN_DAY", "requiredArgs", "date", "toDate", "difference", "startOfUTCISOWeek", "requiredArgs", "date", "toDate", "getUTCISOWeekYear", "requiredArgs", "date", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "requiredArgs", "getUTCISOWeekYear", "date", "startOfUTCISOWeek", "MILLISECONDS_IN_WEEK", "getUTCISOWeek", "requiredArgs", "date", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "startOfUTCWeek", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "date", "toDate", "getUTCWeekYear", "requiredArgs", "date", "toDate", "defaultOptions", "getDefaultOptions", "toInteger", "startOfUTCWeek", "startOfUTCWeekYear", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "getUTCWeekYear", "date", "startOfUTCWeek", "MILLISECONDS_IN_WEEK", "getUTCWeek", "requiredArgs", "date", "toDate", "startOfUTCWeek", "startOfUTCWeekYear", "number", "y", "date", "M", "d", "a", "h", "H", "m", "s", "S", "formatters", "G", "date", "localize", "y", "Y", "getUTCWeekYear", "R", "getUTCISOWeekYear", "u", "Q", "q", "M", "L", "w", "getUTCWeek", "I", "getUTCISOWeek", "d", "D", "E", "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", "formatDistanceLocale", "formatDistance", "formatDistance_default", "buildFormatLongFn", "format", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "buildFormatLongFn", "formatRelativeLocale", "formatRelative", "formatRelative_default", "buildLocalizeFn", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "number", "localize", "buildLocalizeFn", "argumentCallback", "localize_default", "buildMatchFn", "string", "findIndex", "findKey", "object", "array", "buildMatchPatternFn", "string", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "buildMatchPatternFn", "valueCallback", "buildMatchFn", "match_default", "formatDistance_default", "formatRelative_default", "localize_default", "match_default", "requiredArgs", "defaultOptions", "getDefaultOptions", "locale", "toInteger", "toDate", "assign", "object", "object", "assign", "formatDistance", "requiredArgs", "defaultOptions", "getDefaultOptions", "locale", "assign", "toDate", "defaultOptions", "getDefaultOptions", "locale", "format", "delimiter", "m", "requiredArgs", "toDate", "add", "requiredArgs", "date", "toDate", "requiredArgs", "toDate", "i18n", "initial", "p", "e", "n", "p", "i18n", "error", "name", "value", "v", "f", "readField", "object", "p", "error", "_", "i18n", "p", "e", "f", "b", "i18n", "p", "v", "defaultToString", "f", "defaultFromString", "v", "error", "e", "i", "f", "v", "error", "c", "defaultToString", "f", "defaultFromString", "v", "error", "e", "error", "i18n", "p", "d", "v", "p", "i18n", "errors", "k", "p", "i18n", "d", "error", "i18n", "useSWR", "error", "error", "useSWR", "instanceId", "p", "i18n", "token", "e", "AsyncButton", "p", "h", "i18n", "e", "i", "p", "i18n", "i", "p", "i18n", "error", "e", "s", "p", "l", "i18n", "e", "p", "h", "p", "n", "useSWR", "error", "k", "v", "s", "i18n", "e", "code", "number", "initial", "p", "errors", "k", "h", "v", "i18n", "p", "errors", "k", "s", "e", "accountAuthType", "CreatePage", "i18n", "p", "errors", "k", "p", "i18n", "CreatePage", "error", "history", "i18n", "p", "CardTable", "p", "i18n", "Table", "EmptyTable", "CardTable", "o", "i18n", "p", "e", "error", "p", "i18n", "error", "ListPage", "i18n", "EmptyTable", "e", "i", "status", "ListPage", "useSWR", "error", "useSWR", "c", "p", "r", "error", "d", "v", "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", "fn", "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", "recursive", "_", "fn", "mapKeys", "camelCase", "snakeCase", "base", "mapValues", "create", "_extends", "i", "create", "v", "errors", "recursive", "path", "_", "a", "base", "p", "v", "create", "d", "p", "errors", "k", "T", "i18n", "v", "i", "f", "p", "h", "i18n", "initial", "errors", "T", "k", "InputNumber", "i18n", "a", "i", "a", "b", "r", "with_defaults", "CreatePage", "p", "i18n", "errors", "k", "v", "h", "e", "c", "InputNumber", "now", "p", "CreatePage", "r", "error", "useSWR", "error", "o", "p", "r", "w", "d", "CardTable", "p", "i18n", "Table", "o", "EmptyTable", "i", "r", "c", "errors", "k", "d", "e", "events", "a", "b", "p", "h", "i", "i18n", "now", "events", "p", "e", "w", "formatDistance", "p", "i18n", "error", "i18n", "error", "p", "e", "ListPage", "i18n", "p", "d", "CardTable", "p", "date", "d", "i18n", "ListPage", "o", "error", "CreatePage", "i18n", "p", "errors", "k", "v", "e", "s", "_", "h", "qrcode", "CreatedSuccessfully", "i18n", "CreateValidator", "p", "i18n", "CreatedSuccessfully", "CreatePage", "d", "error", "useSWR", "error", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "ListPage", "CardTable", "o", "ListOtpDevices", "i18n", "p", "ListPage", "e", "error", "algorithms", "algorithmsNames", "UpdatePage", "i18n", "p", "errors", "k", "v", "e", "s", "UpdateValidator", "p", "i18n", "CreatedSuccessfully", "UpdatePage", "d", "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", "errors", "k", "InputNumber", "c", "ProductList", "p", "i18n", "CardTable", "error", "UpdatePage", "i18n", "ProductForm", "p", "i18n", "UpdatePage", "error", "CreatePage", "i18n", "p", "errors", "d", "k", "InputNumber", "e", "v", "p", "i18n", "CreatePage", "error", "useSWR", "p", "error", "d", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "ListPage", "CardTable", "o", "i18n", "p", "ListPage", "e", "error", "i18n", "UpdatePage", "i18n", "p", "errors", "d", "k", "InputNumber", "e", "v", "p", "i18n", "UpdatePage", "error", "i18n", "p", "errors", "k", "p", "i18n", "error", "DetailPage", "p", "i18n", "errors", "k", "i18n", "p", "DetailPage", "error", "resp", "CreatePage", "i18n", "p", "errors", "k", "CreateTransfer", "p", "i18n", "a", "CreatePage", "error", "useSWR", "o", "p", "v", "error", "d", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "ListPage", "i18n", "d", "CardTable", "o", "s", "p", "a", "h", "ListPage", "v", "convert", "UpdatePage", "p", "i18n", "errors", "k", "Update", "t", "p", "i18n", "UpdatePage", "d", "error", "CreatePage", "i18n", "p", "errors", "k", "p", "i18n", "CreatePage", "error", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "ListPage", "i18n", "CardTable", "o", "i18n", "p", "ListPage", "e", "error", "validMethod", "UpdatePage", "i18n", "p", "errors", "k", "p", "i18n", "UpdatePage", "error", "getBrowserLang", "i18n", "errors", "s", "v", "e", "history", "p", "error", "P", "now", "e", "Update", "ProductList", "CreateTransfer", "ListOtpDevices", "UpdateValidator", "CreateValidator", "h", "i18n", "initial", "Context", "Context", "defaultSettings", "e", "p", "h", "SWRConfig", "e", "map", "i18n"]
}
diff --git a/bank/index.css b/bank/index.css
index 3d311c4fb..bc4888884 100644
--- a/bank/index.css
+++ b/bank/index.css
@@ -1360,9 +1360,6 @@ select {
.border-b {
border-bottom-width: 1px;
}
-.border-l-0 {
- border-left-width: 0px;
-}
.border-r-0 {
border-right-width: 0px;
}
diff --git a/bank/index.css.map b/bank/index.css.map
index 3d8e2c8d9..eb5856c5e 100644
--- a/bank/index.css.map
+++ b/bank/index.css.map
@@ -1,7 +1,7 @@
{
"version": 3,
"sources": ["../../src/scss/main.css"],
- "sourcesContent": ["/*\n! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n border-radius: 0px;\n padding-top: 0.5rem;\n padding-right: 0.75rem;\n padding-bottom: 0.5rem;\n padding-left: 0.75rem;\n font-size: 1rem;\n line-height: 1.5rem;\n --tw-shadow: 0 0 #0000;\n}\n\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n border-color: #2563eb;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n color: #6b7280;\n opacity: 1;\n}\n\ninput::placeholder,textarea::placeholder {\n color: #6b7280;\n opacity: 1;\n}\n\n::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n}\n\n::-webkit-date-and-time-value {\n min-height: 1.5em;\n}\n\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\n padding-top: 0;\n padding-bottom: 0;\n}\n\nselect {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n}\n\n[multiple] {\n background-image: initial;\n background-position: initial;\n background-repeat: unset;\n background-size: initial;\n padding-right: 0.75rem;\n -webkit-print-color-adjust: unset;\n print-color-adjust: unset;\n}\n\n[type='checkbox'],[type='radio'] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 0;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n display: inline-block;\n vertical-align: middle;\n background-origin: border-box;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n flex-shrink: 0;\n height: 1rem;\n width: 1rem;\n color: #2563eb;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n --tw-shadow: 0 0 #0000;\n}\n\n[type='checkbox'] {\n border-radius: 0px;\n}\n\n[type='radio'] {\n border-radius: 100%;\n}\n\n[type='checkbox']:focus,[type='radio']:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n}\n\n[type='checkbox']:checked,[type='radio']:checked {\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n[type='checkbox']:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n}\n\n[type='radio']:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\n border-color: transparent;\n background-color: currentColor;\n}\n\n[type='checkbox']:indeterminate {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\");\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\n border-color: transparent;\n background-color: currentColor;\n}\n\n[type='file'] {\n background: unset;\n border-color: inherit;\n border-width: 0;\n border-radius: 0;\n padding: 0;\n font-size: unset;\n line-height: inherit;\n}\n\n[type='file']:focus {\n outline: 1px solid ButtonText;\n outline: 1px auto -webkit-focus-ring-color;\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.\\!container {\n width: 100% !important;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .\\!container {\n max-width: 640px !important;\n }\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .\\!container {\n max-width: 768px !important;\n }\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .\\!container {\n max-width: 1024px !important;\n }\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .\\!container {\n max-width: 1280px !important;\n }\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .\\!container {\n max-width: 1536px !important;\n }\n\n .container {\n max-width: 1536px;\n }\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.pointer-events-auto {\n pointer-events: auto;\n}\n.visible {\n visibility: visible;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.-inset-0 {\n inset: -0px;\n}\n.-inset-0\\.5 {\n inset: -0.125rem;\n}\n.-inset-1 {\n inset: -0.25rem;\n}\n.-inset-2 {\n inset: -0.5rem;\n}\n.-inset-2\\.5 {\n inset: -0.625rem;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-x-0 {\n left: 0px;\n right: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-\\[15px\\] {\n left: -15px;\n}\n.-top-\\[21px\\] {\n top: -21px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-1\\/2 {\n bottom: 50%;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-\\[calc\\(50\\%-1px\\)\\] {\n left: calc(50% - 1px);\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-14 {\n top: 3.5rem;\n}\n.isolate {\n isolation: isolate;\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.col-span-full {\n grid-column: 1 / -1;\n}\n.m-0 {\n margin: 0px;\n}\n.m-1 {\n margin: 0.25rem;\n}\n.m-1\\.5 {\n margin: 0.375rem;\n}\n.-mx-4 {\n margin-left: -1rem;\n margin-right: -1rem;\n}\n.-my-2 {\n margin-top: -0.5rem;\n margin-bottom: -0.5rem;\n}\n.mx-8 {\n margin-left: 2rem;\n margin-right: 2rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-0 {\n margin-top: 0px;\n margin-bottom: 0px;\n}\n.my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.my-auto {\n margin-top: auto;\n margin-bottom: auto;\n}\n.-ml-1 {\n margin-left: -0.25rem;\n}\n.-ml-10 {\n margin-left: -2.5rem;\n}\n.-ml-px {\n margin-left: -1px;\n}\n.-mr-px {\n margin-right: -1px;\n}\n.-mt-1 {\n margin-top: -0.25rem;\n}\n.-mt-2 {\n margin-top: -0.5rem;\n}\n.-mt-32 {\n margin-top: -8rem;\n}\n.-mt-5 {\n margin-top: -1.25rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-5 {\n margin-bottom: 1.25rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-6 {\n margin-left: 1.5rem;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mr-4 {\n margin-right: 1rem;\n}\n.mr-auto {\n margin-right: auto;\n}\n.mt-0 {\n margin-top: 0px;\n}\n.mt-0\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-10 {\n margin-top: 2.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-5 {\n margin-top: 1.25rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.box-content {\n box-sizing: content-box;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.table-row {\n display: table-row;\n}\n.flow-root {\n display: flow-root;\n}\n.grid {\n display: grid;\n}\n.contents {\n display: contents;\n}\n.\\!hidden {\n display: none !important;\n}\n.hidden {\n display: none;\n}\n.h-0 {\n height: 0px;\n}\n.h-0\\.5 {\n height: 0.125rem;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-1\\.5 {\n height: 0.375rem;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2\\/5 {\n height: 40%;\n}\n.h-24 {\n height: 6rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-\\[260px\\] {\n height: 260px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[4px\\] {\n height: 4px;\n}\n.h-\\[56px\\] {\n height: 56px;\n}\n.h-\\[6px\\] {\n height: 6px;\n}\n.h-full {\n height: 100%;\n}\n.max-h-60 {\n max-height: 15rem;\n}\n.min-h-\\[305px\\] {\n min-height: 305px;\n}\n.min-h-full {\n min-height: 100%;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-1\\.5 {\n width: 0.375rem;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-11 {\n width: 2.75rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-4\\/5 {\n width: 80%;\n}\n.w-44 {\n width: 11rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-56 {\n width: 14rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-\\[260px\\] {\n width: 260px;\n}\n.w-\\[2px\\] {\n width: 2px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[4px\\] {\n width: 4px;\n}\n.w-\\[6px\\] {\n width: 6px;\n}\n.w-auto {\n width: auto;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[310px\\] {\n min-width: 310px;\n}\n.min-w-fit {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.min-w-full {\n min-width: 100%;\n}\n.max-w-2xl {\n max-width: 42rem;\n}\n.max-w-7xl {\n max-width: 80rem;\n}\n.max-w-\\[325px\\] {\n max-width: 325px;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.max-w-xs {\n max-width: 20rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-none {\n flex: none;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.grow {\n flex-grow: 1;\n}\n.origin-\\[center_bottom_0\\] {\n transform-origin: center bottom 0;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-0 {\n --tw-rotate: 0deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.animate-\\[show-up-clock_350ms_linear\\] {\n animation: show-up-clock 350ms linear;\n}\n@keyframes pulse {\n\n 50% {\n opacity: .5;\n }\n}\n.animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-wrap {\n flex-wrap: wrap;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.items-baseline {\n align-items: baseline;\n}\n.items-stretch {\n align-items: stretch;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.justify-around {\n justify-content: space-around;\n}\n.justify-evenly {\n justify-content: space-evenly;\n}\n.gap-px {\n gap: 1px;\n}\n.gap-x-0 {\n -moz-column-gap: 0px;\n column-gap: 0px;\n}\n.gap-x-0\\.5 {\n -moz-column-gap: 0.125rem;\n column-gap: 0.125rem;\n}\n.gap-x-1 {\n -moz-column-gap: 0.25rem;\n column-gap: 0.25rem;\n}\n.gap-x-1\\.5 {\n -moz-column-gap: 0.375rem;\n column-gap: 0.375rem;\n}\n.gap-x-3 {\n -moz-column-gap: 0.75rem;\n column-gap: 0.75rem;\n}\n.gap-x-6 {\n -moz-column-gap: 1.5rem;\n column-gap: 1.5rem;\n}\n.gap-x-8 {\n -moz-column-gap: 2rem;\n column-gap: 2rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-3 {\n row-gap: 0.75rem;\n}\n.gap-y-4 {\n row-gap: 1rem;\n}\n.gap-y-6 {\n row-gap: 1.5rem;\n}\n.gap-y-7 {\n row-gap: 1.75rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.-space-y-px > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(-1px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(-1px * var(--tw-space-y-reverse));\n}\n.space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-10 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.divide-x > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-x-reverse: 0;\n border-right-width: calc(1px * var(--tw-divide-x-reverse));\n border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\n}\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n.divide-gray-900\\/10 > :not([hidden]) ~ :not([hidden]) {\n border-color: rgb(17 24 39 / 0.1);\n}\n.self-center {\n align-self: center;\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-pre {\n white-space: pre;\n}\n.whitespace-break-spaces {\n white-space: break-spaces;\n}\n.break-words {\n overflow-wrap: break-word;\n}\n.break-all {\n word-break: break-all;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[100\\%\\] {\n border-radius: 100%;\n}\n.rounded-\\[50\\%\\] {\n border-radius: 50%;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-none {\n border-radius: 0px;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.rounded-b-lg {\n border-bottom-right-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n.rounded-l-lg {\n border-top-left-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n.rounded-l-md {\n border-top-left-radius: 0.375rem;\n border-bottom-left-radius: 0.375rem;\n}\n.rounded-l-none {\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.rounded-r-lg {\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n}\n.rounded-r-md {\n border-top-right-radius: 0.375rem;\n border-bottom-right-radius: 0.375rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.rounded-t-sm {\n border-top-left-radius: 0.125rem;\n border-top-right-radius: 0.125rem;\n}\n.rounded-bl-md {\n border-bottom-left-radius: 0.375rem;\n}\n.rounded-br-md {\n border-bottom-right-radius: 0.375rem;\n}\n.rounded-tl-md {\n border-top-left-radius: 0.375rem;\n}\n.rounded-tr-md {\n border-top-right-radius: 0.375rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[14px\\] {\n border-width: 14px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-l-0 {\n border-left-width: 0px;\n}\n.border-r-0 {\n border-right-width: 0px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-2 {\n border-top-width: 2px;\n}\n.border-solid {\n border-style: solid;\n}\n.border-dashed {\n border-style: dashed;\n}\n.border-none {\n border-style: none;\n}\n.border-\\[\\#3b71ca\\] {\n --tw-border-opacity: 1;\n border-color: rgb(59 113 202 / var(--tw-border-opacity));\n}\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-border-opacity));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity));\n}\n.border-gray-900\\/10 {\n border-color: rgb(17 24 39 / 0.1);\n}\n.border-gray-900\\/25 {\n border-color: rgb(17 24 39 / 0.25);\n}\n.border-indigo-200 {\n --tw-border-opacity: 1;\n border-color: rgb(199 210 254 / var(--tw-border-opacity));\n}\n.border-indigo-400 {\n --tw-border-opacity: 1;\n border-color: rgb(129 140 248 / var(--tw-border-opacity));\n}\n.border-indigo-600 {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-opacity-25 {\n --tw-border-opacity: 0.25;\n}\n.bg-\\[\\#00000012\\] {\n background-color: #00000012;\n}\n.bg-\\[\\#3b71ca\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(59 113 202 / var(--tw-bg-opacity));\n}\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n.bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity));\n}\n.bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity));\n}\n.bg-indigo-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity));\n}\n.bg-indigo-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity));\n}\n.bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n.bg-slate-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-yellow-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity));\n}\n.bg-opacity-75 {\n --tw-bg-opacity: 0.75;\n}\n.fill-green-500 {\n fill: #22c55e;\n}\n.stroke-gray-700\\/50 {\n stroke: rgb(55 65 81 / 0.5);\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-1\\.5 {\n padding: 0.375rem;\n}\n.p-12 {\n padding: 3rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-\\[12px\\] {\n padding-left: 12px;\n padding-right: 12px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-3\\.5 {\n padding-top: 0.875rem;\n padding-bottom: 0.875rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.pb-32 {\n padding-bottom: 8rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-1 {\n padding-left: 0.25rem;\n}\n.pl-10 {\n padding-left: 2.5rem;\n}\n.pl-16 {\n padding-left: 4rem;\n}\n.pl-2 {\n padding-left: 0.5rem;\n}\n.pl-3 {\n padding-left: 0.75rem;\n}\n.pl-4 {\n padding-left: 1rem;\n}\n.pr-10 {\n padding-right: 2.5rem;\n}\n.pr-12 {\n padding-right: 3rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pr-9 {\n padding-right: 2.25rem;\n}\n.pt-10 {\n padding-top: 2.5rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-5 {\n padding-top: 1.25rem;\n}\n.pt-6 {\n padding-top: 1.5rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-middle {\n vertical-align: middle;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n}\n.text-\\[1\\.1rem\\] {\n font-size: 1.1rem;\n}\n.text-\\[18px\\] {\n font-size: 18px;\n}\n.text-\\[3\\.75rem\\] {\n font-size: 3.75rem;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.lowercase {\n text-transform: lowercase;\n}\n.leading-10 {\n line-height: 2.5rem;\n}\n.leading-5 {\n line-height: 1.25rem;\n}\n.leading-6 {\n line-height: 1.5rem;\n}\n.leading-7 {\n line-height: 1.75rem;\n}\n.leading-9 {\n line-height: 2.25rem;\n}\n.leading-\\[1\\.2\\] {\n line-height: 1.2;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.text-\\[\\#ffffff8a\\] {\n color: #ffffff8a;\n}\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity));\n}\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity));\n}\n.text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity));\n}\n.text-indigo-200 {\n --tw-text-opacity: 1;\n color: rgb(199 210 254 / var(--tw-text-opacity));\n}\n.text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity));\n}\n.text-indigo-900 {\n --tw-text-opacity: 1;\n color: rgb(49 46 129 / var(--tw-text-opacity));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.text-red-900 {\n --tw-text-opacity: 1;\n color: rgb(127 29 29 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.underline-offset-2 {\n text-underline-offset: 2px;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-\\[\\.54\\] {\n opacity: .54;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-1 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-inset {\n --tw-ring-inset: inset;\n}\n.ring-black {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n.ring-gray-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));\n}\n.ring-gray-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n.ring-gray-600 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(75 85 99 / var(--tw-ring-opacity));\n}\n.ring-gray-900\\/5 {\n --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n.ring-indigo-600 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.ring-red-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(252 165 165 / var(--tw-ring-opacity));\n}\n.ring-opacity-5 {\n --tw-ring-opacity: 0.05;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.delay-1000 {\n transition-delay: 1000ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.selection\\:bg-transparent *::-moz-selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent *::selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent::-moz-selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent::selection {\n background-color: transparent;\n}\n.placeholder\\:text-gray-400::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.placeholder\\:text-gray-400::placeholder {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.placeholder\\:text-red-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity));\n}\n.placeholder\\:text-red-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity));\n}\n.last\\:border-none:last-child {\n border-style: none;\n}\n.focus-within\\:z-10:focus-within {\n z-index: 10;\n}\n.focus-within\\:outline-none:focus-within {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-within\\:ring-2:focus-within {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-within\\:ring-indigo-600:focus-within {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.focus-within\\:ring-offset-2:focus-within {\n --tw-ring-offset-width: 2px;\n}\n.hover\\:bg-\\[\\#00000026\\]:hover {\n background-color: #00000026;\n}\n.hover\\:bg-blue-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-500\\/20:hover {\n background-color: rgb(107 114 128 / 0.2);\n}\n.hover\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity));\n}\n.hover\\:bg-green-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(34 197 94 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n.hover\\:bg-red-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.hover\\:bg-opacity-75:hover {\n --tw-bg-opacity: 0.75;\n}\n.hover\\:text-blue-600:hover {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n.hover\\:text-gray-400:hover {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.hover\\:text-gray-500:hover {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.hover\\:text-gray-700:hover {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-500:hover {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-600:hover {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-900:hover {\n --tw-text-opacity: 1;\n color: rgb(49 46 129 / var(--tw-text-opacity));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:text-yellow-600:hover {\n --tw-text-opacity: 1;\n color: rgb(202 138 4 / var(--tw-text-opacity));\n}\n.hover\\:opacity-70:hover {\n opacity: 0.7;\n}\n.hover\\:outline-none:hover {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.hover\\:ring-indigo-500:hover {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n.focus\\:z-10:focus {\n z-index: 10;\n}\n.focus\\:border-indigo-500:focus {\n --tw-border-opacity: 1;\n border-color: rgb(99 102 241 / var(--tw-border-opacity));\n}\n.focus\\:bg-\\[\\#00000026\\]:focus {\n background-color: #00000026;\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-inset:focus {\n --tw-ring-inset: inset;\n}\n.focus\\:ring-indigo-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n.focus\\:ring-indigo-600:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.focus\\:ring-red-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity));\n}\n.focus\\:ring-white:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus\\:ring-offset-indigo-600:focus {\n --tw-ring-offset-color: #4f46e5;\n}\n.focus-visible\\:outline:focus-visible {\n outline-style: solid;\n}\n.focus-visible\\:outline-2:focus-visible {\n outline-width: 2px;\n}\n.focus-visible\\:outline-offset-0:focus-visible {\n outline-offset: 0px;\n}\n.focus-visible\\:outline-offset-2:focus-visible {\n outline-offset: 2px;\n}\n.focus-visible\\:outline-blue-600:focus-visible {\n outline-color: #2563eb;\n}\n.focus-visible\\:outline-gray-600:focus-visible {\n outline-color: #4b5563;\n}\n.focus-visible\\:outline-green-600:focus-visible {\n outline-color: #16a34a;\n}\n.focus-visible\\:outline-indigo-600:focus-visible {\n outline-color: #4f46e5;\n}\n.focus-visible\\:outline-red-500:focus-visible {\n outline-color: #ef4444;\n}\n.focus-visible\\:outline-red-600:focus-visible {\n outline-color: #dc2626;\n}\n.active\\:ring-2:active {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.active\\:ring-indigo-600:active {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.active\\:ring-offset-2:active {\n --tw-ring-offset-width: 2px;\n}\n.disabled\\:cursor-default:disabled {\n cursor: default;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:bg-gray-100:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.disabled\\:bg-gray-200:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.disabled\\:bg-gray-300:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.disabled\\:bg-gray-50:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.disabled\\:text-gray-500:disabled {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n.disabled\\:ring-gray-200:disabled {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));\n}\n.group[open] .group-open\\:rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group:hover .group-hover\\:flex {\n display: flex;\n}\n.group:hover .group-hover\\:border-indigo-600 {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.group:hover .group-hover\\:stroke-gray-700\\/75 {\n stroke: rgb(55 65 81 / 0.75);\n}\n.group:hover .group-hover\\:text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity));\n}\n.group.attention-low .group-\\[\\.attention-low\\]\\:bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.group.attention-low .group-\\[\\.attention-low\\]\\:bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:bg-yellow-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(202 138 4 / var(--tw-bg-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-800 {\n --tw-text-opacity: 1;\n color: rgb(153 27 27 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity));\n}\n.data-\\[checked\\=true\\]\\:z-10[data-checked=true] {\n z-index: 10;\n}\n.data-\\[selected\\=false\\]\\:hidden[data-selected=false] {\n display: none;\n}\n.data-\\[enabled\\=false\\]\\:translate-x-0[data-enabled=false] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[status\\=ok\\]\\:scale-y-0[data-status=ok] {\n --tw-scale-y: 0;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[disabled\\=false\\]\\:cursor-pointer[data-disabled=false] {\n cursor: pointer;\n}\n.data-\\[timed\\=true\\]\\:rounded-b-none[data-timed=true] {\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.data-\\[checked\\=true\\]\\:border-indigo-200[data-checked=true] {\n --tw-border-opacity: 1;\n border-color: rgb(199 210 254 / var(--tw-border-opacity));\n}\n.data-\\[enabled\\=true\\]\\:border-indigo-600[data-enabled=true] {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.data-\\[checked\\=true\\]\\:bg-indigo-50[data-checked=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity));\n}\n.data-\\[disabled\\=true\\]\\:bg-gray-200[data-disabled=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[enabled\\=false\\]\\:bg-gray-200[data-enabled=false] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[month\\=false\\]\\:bg-gray-100[data-month=false] {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.data-\\[month\\=true\\]\\:bg-white[data-month=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.data-\\[negative\\=true\\]\\:bg-red-100[data-negative=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:\\!bg-blue-400[data-selected=true] {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(96 165 250 / var(--tw-bg-opacity)) !important;\n}\n.data-\\[selected\\=true\\]\\:bg-\\[\\#3b71ca\\][data-selected=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(59 113 202 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:bg-indigo-500[data-selected=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n.data-\\[status\\=fail\\]\\:bg-red-200[data-status=fail] {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity));\n}\n.data-\\[status\\=ok\\]\\:bg-green-200[data-status=ok] {\n --tw-bg-opacity: 1;\n background-color: rgb(187 247 208 / var(--tw-bg-opacity));\n}\n.data-\\[today\\=true\\]\\:bg-red-300[data-today=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(252 165 165 / var(--tw-bg-opacity));\n}\n.data-\\[left\\=true\\]\\:text-left[data-left=true] {\n text-align: left;\n}\n.data-\\[selected\\=true\\]\\:font-normal[data-selected=true] {\n font-weight: 400;\n}\n.data-\\[today\\=true\\]\\:font-semibold[data-today=true] {\n font-weight: 600;\n}\n.data-\\[checked\\=true\\]\\:text-indigo-600[data-checked=true] {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.data-\\[checked\\=true\\]\\:text-indigo-900[data-checked=true] {\n --tw-text-opacity: 1;\n color: rgb(49 46 129 / var(--tw-text-opacity));\n}\n.data-\\[month\\=true\\]\\:text-gray-900[data-month=true] {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.data-\\[negative\\=false\\]\\:text-green-600[data-negative=false] {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity));\n}\n.data-\\[negative\\=true\\]\\:text-red-600[data-negative=true] {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity));\n}\n.data-\\[negative\\=true\\]\\:text-red-700[data-negative=true] {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.data-\\[selected\\=true\\]\\:text-gray-900[data-selected=true] {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.data-\\[selected\\=true\\]\\:text-white[data-selected=true] {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.data-\\[enabled\\=true\\]\\:ring-2[data-enabled=true] {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.data-\\[selected\\=true\\]\\:ring-2[data-selected=true] {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.data-\\[enabled\\=true\\]\\:ring-indigo-600[data-enabled=true] {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.data-\\[error\\=true\\]\\:ring-red-500[data-error=true] {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity));\n}\n.data-\\[selected\\=true\\]\\:ring-indigo-600[data-selected=true] {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.data-\\[month\\=true\\]\\:hover\\:bg-gray-200:hover[data-month=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:hover\\:\\!bg-blue-300:hover[data-selected=true] {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(147 197 253 / var(--tw-bg-opacity)) !important;\n}\n.data-\\[today\\=true\\]\\:hover\\:bg-red-200:hover[data-today=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity));\n}\n:is([dir=\"rtl\"] .rtl\\:\\!left-auto) {\n left: auto !important;\n}\n:is([dir=\"rtl\"] .rtl\\:\\!origin-\\[50\\%_50\\%_0\\]) {\n transform-origin: 50% 50% 0 !important;\n}\n@media (prefers-color-scheme: dark) {\n\n .dark\\:bg-zinc-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(113 113 122 / var(--tw-bg-opacity));\n }\n\n .dark\\:bg-zinc-600\\/50 {\n background-color: rgb(82 82 91 / 0.5);\n }\n\n .dark\\:bg-zinc-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(63 63 70 / var(--tw-bg-opacity));\n }\n}\n@media (min-width: 640px) {\n\n .sm\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n\n .sm\\:col-span-5 {\n grid-column: span 5 / span 5;\n }\n\n .sm\\:col-span-6 {\n grid-column: span 6 / span 6;\n }\n\n .sm\\:-mx-6 {\n margin-left: -1.5rem;\n margin-right: -1.5rem;\n }\n\n .sm\\:mx-0 {\n margin-left: 0px;\n margin-right: 0px;\n }\n\n .sm\\:mx-auto {\n margin-left: auto;\n margin-right: auto;\n }\n\n .sm\\:my-8 {\n margin-top: 2rem;\n margin-bottom: 2rem;\n }\n\n .sm\\:ml-16 {\n margin-left: 4rem;\n }\n\n .sm\\:ml-6 {\n margin-left: 1.5rem;\n }\n\n .sm\\:mt-0 {\n margin-top: 0px;\n }\n\n .sm\\:mt-5 {\n margin-top: 1.25rem;\n }\n\n .sm\\:mt-6 {\n margin-top: 1.5rem;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:inline {\n display: inline;\n }\n\n .sm\\:flex {\n display: flex;\n }\n\n .sm\\:table-cell {\n display: table-cell;\n }\n\n .sm\\:grid {\n display: grid;\n }\n\n .sm\\:hidden {\n display: none;\n }\n\n .sm\\:w-96 {\n width: 24rem;\n }\n\n .sm\\:w-full {\n width: 100%;\n }\n\n .sm\\:max-w-sm {\n max-width: 24rem;\n }\n\n .sm\\:flex-auto {\n flex: 1 1 auto;\n }\n\n .sm\\:flex-none {\n flex: none;\n }\n\n .sm\\:flex-shrink-0 {\n flex-shrink: 0;\n }\n\n .sm\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n }\n\n .sm\\:flex-nowrap {\n flex-wrap: nowrap;\n }\n\n .sm\\:items-start {\n align-items: flex-start;\n }\n\n .sm\\:items-center {\n align-items: center;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:justify-between {\n justify-content: space-between;\n }\n\n .sm\\:gap-4 {\n gap: 1rem;\n }\n\n .sm\\:gap-x-4 {\n -moz-column-gap: 1rem;\n column-gap: 1rem;\n }\n\n .sm\\:rounded-lg {\n border-radius: 0.5rem;\n }\n\n .sm\\:rounded-none {\n border-radius: 0px;\n }\n\n .sm\\:rounded-xl {\n border-radius: 0.75rem;\n }\n\n .sm\\:p-6 {\n padding: 1.5rem;\n }\n\n .sm\\:p-8 {\n padding: 2rem;\n }\n\n .sm\\:px-0 {\n padding-left: 0px;\n padding-right: 0px;\n }\n\n .sm\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .sm\\:pl-0 {\n padding-left: 0px;\n }\n\n .sm\\:pl-3 {\n padding-left: 0.75rem;\n }\n\n .sm\\:pr-0 {\n padding-right: 0px;\n }\n\n .sm\\:text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .sm\\:leading-6 {\n line-height: 1.5rem;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n\n .md\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .md\\:divide-x > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-x-reverse: 0;\n border-right-width: calc(1px * var(--tw-divide-x-reverse));\n border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\n }\n\n .md\\:divide-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(0px * var(--tw-divide-y-reverse));\n }\n}\n@media (min-width: 1024px) {\n\n .lg\\:-mx-8 {\n margin-left: -2rem;\n margin-right: -2rem;\n }\n\n .lg\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n}\n"],
- "mappings": "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AACA,CAAC;AACC,YAAU;AACZ;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,QAAM;AACN,SAAO;AACT;AACA,CAAC;AACC,OAAK;AACL,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM,KAAK,IAAI,EAAE;AACnB;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,eAAa,KAAK,EAAE,EAAE,KAAK;AAC7B;AACA,CAAC;AACC,eAAa,EAAE,EAAE;AACnB;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACP,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AA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CC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,UAAQ,IAAI,GAAG,GAAG,GAAG,EAAE;AACzB;AACA,CAAC;AACC,iBAAe;AACZ,cAAY;AACjB;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI;AACzB;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,GA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",
+ "sourcesContent": ["/*\n! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n\n[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n border-radius: 0px;\n padding-top: 0.5rem;\n padding-right: 0.75rem;\n padding-bottom: 0.5rem;\n padding-left: 0.75rem;\n font-size: 1rem;\n line-height: 1.5rem;\n --tw-shadow: 0 0 #0000;\n}\n\n[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n border-color: #2563eb;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n color: #6b7280;\n opacity: 1;\n}\n\ninput::placeholder,textarea::placeholder {\n color: #6b7280;\n opacity: 1;\n}\n\n::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n}\n\n::-webkit-date-and-time-value {\n min-height: 1.5em;\n}\n\n::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {\n padding-top: 0;\n padding-bottom: 0;\n}\n\nselect {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n}\n\n[multiple] {\n background-image: initial;\n background-position: initial;\n background-repeat: unset;\n background-size: initial;\n padding-right: 0.75rem;\n -webkit-print-color-adjust: unset;\n print-color-adjust: unset;\n}\n\n[type='checkbox'],[type='radio'] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 0;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n display: inline-block;\n vertical-align: middle;\n background-origin: border-box;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n flex-shrink: 0;\n height: 1rem;\n width: 1rem;\n color: #2563eb;\n background-color: #fff;\n border-color: #6b7280;\n border-width: 1px;\n --tw-shadow: 0 0 #0000;\n}\n\n[type='checkbox'] {\n border-radius: 0px;\n}\n\n[type='radio'] {\n border-radius: 100%;\n}\n\n[type='checkbox']:focus,[type='radio']:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #2563eb;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n}\n\n[type='checkbox']:checked,[type='radio']:checked {\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n[type='checkbox']:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n}\n\n[type='radio']:checked {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");\n}\n\n[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {\n border-color: transparent;\n background-color: currentColor;\n}\n\n[type='checkbox']:indeterminate {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e\");\n border-color: transparent;\n background-color: currentColor;\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {\n border-color: transparent;\n background-color: currentColor;\n}\n\n[type='file'] {\n background: unset;\n border-color: inherit;\n border-width: 0;\n border-radius: 0;\n padding: 0;\n font-size: unset;\n line-height: inherit;\n}\n\n[type='file']:focus {\n outline: 1px solid ButtonText;\n outline: 1px auto -webkit-focus-ring-color;\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.\\!container {\n width: 100% !important;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .\\!container {\n max-width: 640px !important;\n }\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .\\!container {\n max-width: 768px !important;\n }\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .\\!container {\n max-width: 1024px !important;\n }\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .\\!container {\n max-width: 1280px !important;\n }\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .\\!container {\n max-width: 1536px !important;\n }\n\n .container {\n max-width: 1536px;\n }\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.pointer-events-auto {\n pointer-events: auto;\n}\n.visible {\n visibility: visible;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.-inset-0 {\n inset: -0px;\n}\n.-inset-0\\.5 {\n inset: -0.125rem;\n}\n.-inset-1 {\n inset: -0.25rem;\n}\n.-inset-2 {\n inset: -0.5rem;\n}\n.-inset-2\\.5 {\n inset: -0.625rem;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-x-0 {\n left: 0px;\n right: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-\\[15px\\] {\n left: -15px;\n}\n.-top-\\[21px\\] {\n top: -21px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-1\\/2 {\n bottom: 50%;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-\\[calc\\(50\\%-1px\\)\\] {\n left: calc(50% - 1px);\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-14 {\n top: 3.5rem;\n}\n.isolate {\n isolation: isolate;\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.col-span-full {\n grid-column: 1 / -1;\n}\n.m-0 {\n margin: 0px;\n}\n.m-1 {\n margin: 0.25rem;\n}\n.m-1\\.5 {\n margin: 0.375rem;\n}\n.-mx-4 {\n margin-left: -1rem;\n margin-right: -1rem;\n}\n.-my-2 {\n margin-top: -0.5rem;\n margin-bottom: -0.5rem;\n}\n.mx-8 {\n margin-left: 2rem;\n margin-right: 2rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-0 {\n margin-top: 0px;\n margin-bottom: 0px;\n}\n.my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.my-auto {\n margin-top: auto;\n margin-bottom: auto;\n}\n.-ml-1 {\n margin-left: -0.25rem;\n}\n.-ml-10 {\n margin-left: -2.5rem;\n}\n.-ml-px {\n margin-left: -1px;\n}\n.-mr-px {\n margin-right: -1px;\n}\n.-mt-1 {\n margin-top: -0.25rem;\n}\n.-mt-2 {\n margin-top: -0.5rem;\n}\n.-mt-32 {\n margin-top: -8rem;\n}\n.-mt-5 {\n margin-top: -1.25rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-5 {\n margin-bottom: 1.25rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-6 {\n margin-left: 1.5rem;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mr-4 {\n margin-right: 1rem;\n}\n.mr-auto {\n margin-right: auto;\n}\n.mt-0 {\n margin-top: 0px;\n}\n.mt-0\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-10 {\n margin-top: 2.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-5 {\n margin-top: 1.25rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.box-content {\n box-sizing: content-box;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.table-row {\n display: table-row;\n}\n.flow-root {\n display: flow-root;\n}\n.grid {\n display: grid;\n}\n.contents {\n display: contents;\n}\n.\\!hidden {\n display: none !important;\n}\n.hidden {\n display: none;\n}\n.h-0 {\n height: 0px;\n}\n.h-0\\.5 {\n height: 0.125rem;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-1\\.5 {\n height: 0.375rem;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2\\/5 {\n height: 40%;\n}\n.h-24 {\n height: 6rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-\\[260px\\] {\n height: 260px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[4px\\] {\n height: 4px;\n}\n.h-\\[56px\\] {\n height: 56px;\n}\n.h-\\[6px\\] {\n height: 6px;\n}\n.h-full {\n height: 100%;\n}\n.max-h-60 {\n max-height: 15rem;\n}\n.min-h-\\[305px\\] {\n min-height: 305px;\n}\n.min-h-full {\n min-height: 100%;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-1\\.5 {\n width: 0.375rem;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-11 {\n width: 2.75rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-4\\/5 {\n width: 80%;\n}\n.w-44 {\n width: 11rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-56 {\n width: 14rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-\\[260px\\] {\n width: 260px;\n}\n.w-\\[2px\\] {\n width: 2px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[4px\\] {\n width: 4px;\n}\n.w-\\[6px\\] {\n width: 6px;\n}\n.w-auto {\n width: auto;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[310px\\] {\n min-width: 310px;\n}\n.min-w-fit {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.min-w-full {\n min-width: 100%;\n}\n.max-w-2xl {\n max-width: 42rem;\n}\n.max-w-7xl {\n max-width: 80rem;\n}\n.max-w-\\[325px\\] {\n max-width: 325px;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.max-w-xs {\n max-width: 20rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-none {\n flex: none;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.grow {\n flex-grow: 1;\n}\n.origin-\\[center_bottom_0\\] {\n transform-origin: center bottom 0;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-0 {\n --tw-rotate: 0deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.animate-\\[show-up-clock_350ms_linear\\] {\n animation: show-up-clock 350ms linear;\n}\n@keyframes pulse {\n\n 50% {\n opacity: .5;\n }\n}\n.animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-wrap {\n flex-wrap: wrap;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.items-baseline {\n align-items: baseline;\n}\n.items-stretch {\n align-items: stretch;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.justify-around {\n justify-content: space-around;\n}\n.justify-evenly {\n justify-content: space-evenly;\n}\n.gap-px {\n gap: 1px;\n}\n.gap-x-0 {\n -moz-column-gap: 0px;\n column-gap: 0px;\n}\n.gap-x-0\\.5 {\n -moz-column-gap: 0.125rem;\n column-gap: 0.125rem;\n}\n.gap-x-1 {\n -moz-column-gap: 0.25rem;\n column-gap: 0.25rem;\n}\n.gap-x-1\\.5 {\n -moz-column-gap: 0.375rem;\n column-gap: 0.375rem;\n}\n.gap-x-3 {\n -moz-column-gap: 0.75rem;\n column-gap: 0.75rem;\n}\n.gap-x-6 {\n -moz-column-gap: 1.5rem;\n column-gap: 1.5rem;\n}\n.gap-x-8 {\n -moz-column-gap: 2rem;\n column-gap: 2rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-3 {\n row-gap: 0.75rem;\n}\n.gap-y-4 {\n row-gap: 1rem;\n}\n.gap-y-6 {\n row-gap: 1.5rem;\n}\n.gap-y-7 {\n row-gap: 1.75rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.-space-y-px > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(-1px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(-1px * var(--tw-space-y-reverse));\n}\n.space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-10 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.divide-x > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-x-reverse: 0;\n border-right-width: calc(1px * var(--tw-divide-x-reverse));\n border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\n}\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n.divide-gray-900\\/10 > :not([hidden]) ~ :not([hidden]) {\n border-color: rgb(17 24 39 / 0.1);\n}\n.self-center {\n align-self: center;\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-pre {\n white-space: pre;\n}\n.whitespace-break-spaces {\n white-space: break-spaces;\n}\n.break-words {\n overflow-wrap: break-word;\n}\n.break-all {\n word-break: break-all;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[100\\%\\] {\n border-radius: 100%;\n}\n.rounded-\\[50\\%\\] {\n border-radius: 50%;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-none {\n border-radius: 0px;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.rounded-b-lg {\n border-bottom-right-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n.rounded-l-lg {\n border-top-left-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n.rounded-l-md {\n border-top-left-radius: 0.375rem;\n border-bottom-left-radius: 0.375rem;\n}\n.rounded-l-none {\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.rounded-r-lg {\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n}\n.rounded-r-md {\n border-top-right-radius: 0.375rem;\n border-bottom-right-radius: 0.375rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.rounded-t-sm {\n border-top-left-radius: 0.125rem;\n border-top-right-radius: 0.125rem;\n}\n.rounded-bl-md {\n border-bottom-left-radius: 0.375rem;\n}\n.rounded-br-md {\n border-bottom-right-radius: 0.375rem;\n}\n.rounded-tl-md {\n border-top-left-radius: 0.375rem;\n}\n.rounded-tr-md {\n border-top-right-radius: 0.375rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[14px\\] {\n border-width: 14px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-r-0 {\n border-right-width: 0px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-2 {\n border-top-width: 2px;\n}\n.border-solid {\n border-style: solid;\n}\n.border-dashed {\n border-style: dashed;\n}\n.border-none {\n border-style: none;\n}\n.border-\\[\\#3b71ca\\] {\n --tw-border-opacity: 1;\n border-color: rgb(59 113 202 / var(--tw-border-opacity));\n}\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-border-opacity));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity));\n}\n.border-gray-900\\/10 {\n border-color: rgb(17 24 39 / 0.1);\n}\n.border-gray-900\\/25 {\n border-color: rgb(17 24 39 / 0.25);\n}\n.border-indigo-200 {\n --tw-border-opacity: 1;\n border-color: rgb(199 210 254 / var(--tw-border-opacity));\n}\n.border-indigo-400 {\n --tw-border-opacity: 1;\n border-color: rgb(129 140 248 / var(--tw-border-opacity));\n}\n.border-indigo-600 {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-opacity-25 {\n --tw-border-opacity: 0.25;\n}\n.bg-\\[\\#00000012\\] {\n background-color: #00000012;\n}\n.bg-\\[\\#3b71ca\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(59 113 202 / var(--tw-bg-opacity));\n}\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n.bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity));\n}\n.bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity));\n}\n.bg-indigo-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity));\n}\n.bg-indigo-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity));\n}\n.bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n.bg-slate-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-yellow-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity));\n}\n.bg-opacity-75 {\n --tw-bg-opacity: 0.75;\n}\n.fill-green-500 {\n fill: #22c55e;\n}\n.stroke-gray-700\\/50 {\n stroke: rgb(55 65 81 / 0.5);\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-1\\.5 {\n padding: 0.375rem;\n}\n.p-12 {\n padding: 3rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-\\[12px\\] {\n padding-left: 12px;\n padding-right: 12px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-3\\.5 {\n padding-top: 0.875rem;\n padding-bottom: 0.875rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.pb-32 {\n padding-bottom: 8rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-1 {\n padding-left: 0.25rem;\n}\n.pl-10 {\n padding-left: 2.5rem;\n}\n.pl-16 {\n padding-left: 4rem;\n}\n.pl-2 {\n padding-left: 0.5rem;\n}\n.pl-3 {\n padding-left: 0.75rem;\n}\n.pl-4 {\n padding-left: 1rem;\n}\n.pr-10 {\n padding-right: 2.5rem;\n}\n.pr-12 {\n padding-right: 3rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pr-9 {\n padding-right: 2.25rem;\n}\n.pt-10 {\n padding-top: 2.5rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-5 {\n padding-top: 1.25rem;\n}\n.pt-6 {\n padding-top: 1.5rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-middle {\n vertical-align: middle;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n}\n.text-\\[1\\.1rem\\] {\n font-size: 1.1rem;\n}\n.text-\\[18px\\] {\n font-size: 18px;\n}\n.text-\\[3\\.75rem\\] {\n font-size: 3.75rem;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.lowercase {\n text-transform: lowercase;\n}\n.leading-10 {\n line-height: 2.5rem;\n}\n.leading-5 {\n line-height: 1.25rem;\n}\n.leading-6 {\n line-height: 1.5rem;\n}\n.leading-7 {\n line-height: 1.75rem;\n}\n.leading-9 {\n line-height: 2.25rem;\n}\n.leading-\\[1\\.2\\] {\n line-height: 1.2;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.text-\\[\\#ffffff8a\\] {\n color: #ffffff8a;\n}\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity));\n}\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity));\n}\n.text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity));\n}\n.text-indigo-200 {\n --tw-text-opacity: 1;\n color: rgb(199 210 254 / var(--tw-text-opacity));\n}\n.text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity));\n}\n.text-indigo-900 {\n --tw-text-opacity: 1;\n color: rgb(49 46 129 / var(--tw-text-opacity));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.text-red-900 {\n --tw-text-opacity: 1;\n color: rgb(127 29 29 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.underline-offset-2 {\n text-underline-offset: 2px;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-\\[\\.54\\] {\n opacity: .54;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-1 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-inset {\n --tw-ring-inset: inset;\n}\n.ring-black {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n.ring-gray-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));\n}\n.ring-gray-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n.ring-gray-600 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(75 85 99 / var(--tw-ring-opacity));\n}\n.ring-gray-900\\/5 {\n --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n.ring-indigo-600 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.ring-red-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(252 165 165 / var(--tw-ring-opacity));\n}\n.ring-opacity-5 {\n --tw-ring-opacity: 0.05;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.delay-1000 {\n transition-delay: 1000ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.selection\\:bg-transparent *::-moz-selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent *::selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent::-moz-selection {\n background-color: transparent;\n}\n.selection\\:bg-transparent::selection {\n background-color: transparent;\n}\n.placeholder\\:text-gray-400::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.placeholder\\:text-gray-400::placeholder {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.placeholder\\:text-red-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity));\n}\n.placeholder\\:text-red-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity));\n}\n.last\\:border-none:last-child {\n border-style: none;\n}\n.focus-within\\:z-10:focus-within {\n z-index: 10;\n}\n.focus-within\\:outline-none:focus-within {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-within\\:ring-2:focus-within {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-within\\:ring-indigo-600:focus-within {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.focus-within\\:ring-offset-2:focus-within {\n --tw-ring-offset-width: 2px;\n}\n.hover\\:bg-\\[\\#00000026\\]:hover {\n background-color: #00000026;\n}\n.hover\\:bg-blue-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.hover\\:bg-gray-500\\/20:hover {\n background-color: rgb(107 114 128 / 0.2);\n}\n.hover\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity));\n}\n.hover\\:bg-green-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(34 197 94 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n.hover\\:bg-indigo-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n.hover\\:bg-red-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.hover\\:bg-opacity-75:hover {\n --tw-bg-opacity: 0.75;\n}\n.hover\\:text-blue-600:hover {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n.hover\\:text-gray-400:hover {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n.hover\\:text-gray-500:hover {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.hover\\:text-gray-700:hover {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-500:hover {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-600:hover {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.hover\\:text-indigo-900:hover {\n --tw-text-opacity: 1;\n color: rgb(49 46 129 / var(--tw-text-opacity));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:text-yellow-600:hover {\n --tw-text-opacity: 1;\n color: rgb(202 138 4 / var(--tw-text-opacity));\n}\n.hover\\:opacity-70:hover {\n opacity: 0.7;\n}\n.hover\\:outline-none:hover {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.hover\\:ring-indigo-500:hover {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n.focus\\:z-10:focus {\n z-index: 10;\n}\n.focus\\:border-indigo-500:focus {\n --tw-border-opacity: 1;\n border-color: rgb(99 102 241 / var(--tw-border-opacity));\n}\n.focus\\:bg-\\[\\#00000026\\]:focus {\n background-color: #00000026;\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-inset:focus {\n --tw-ring-inset: inset;\n}\n.focus\\:ring-indigo-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));\n}\n.focus\\:ring-indigo-600:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.focus\\:ring-red-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity));\n}\n.focus\\:ring-white:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus\\:ring-offset-indigo-600:focus {\n --tw-ring-offset-color: #4f46e5;\n}\n.focus-visible\\:outline:focus-visible {\n outline-style: solid;\n}\n.focus-visible\\:outline-2:focus-visible {\n outline-width: 2px;\n}\n.focus-visible\\:outline-offset-0:focus-visible {\n outline-offset: 0px;\n}\n.focus-visible\\:outline-offset-2:focus-visible {\n outline-offset: 2px;\n}\n.focus-visible\\:outline-blue-600:focus-visible {\n outline-color: #2563eb;\n}\n.focus-visible\\:outline-gray-600:focus-visible {\n outline-color: #4b5563;\n}\n.focus-visible\\:outline-green-600:focus-visible {\n outline-color: #16a34a;\n}\n.focus-visible\\:outline-indigo-600:focus-visible {\n outline-color: #4f46e5;\n}\n.focus-visible\\:outline-red-500:focus-visible {\n outline-color: #ef4444;\n}\n.focus-visible\\:outline-red-600:focus-visible {\n outline-color: #dc2626;\n}\n.active\\:ring-2:active {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.active\\:ring-indigo-600:active {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.active\\:ring-offset-2:active {\n --tw-ring-offset-width: 2px;\n}\n.disabled\\:cursor-default:disabled {\n cursor: default;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:bg-gray-100:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.disabled\\:bg-gray-200:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.disabled\\:bg-gray-300:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.disabled\\:bg-gray-50:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.disabled\\:text-gray-500:disabled {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n.disabled\\:ring-gray-200:disabled {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));\n}\n.group[open] .group-open\\:rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.group:hover .group-hover\\:flex {\n display: flex;\n}\n.group:hover .group-hover\\:border-indigo-600 {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.group:hover .group-hover\\:stroke-gray-700\\/75 {\n stroke: rgb(55 65 81 / 0.75);\n}\n.group:hover .group-hover\\:text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity));\n}\n.group.attention-low .group-\\[\\.attention-low\\]\\:bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.group.attention-low .group-\\[\\.attention-low\\]\\:bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:bg-yellow-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(202 138 4 / var(--tw-bg-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.group.attention-danger .group-\\[\\.attention-danger\\]\\:text-red-800 {\n --tw-text-opacity: 1;\n color: rgb(153 27 27 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity));\n}\n.group.attention-info .group-\\[\\.attention-info\\]\\:text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity));\n}\n.group.attention-success .group-\\[\\.attention-success\\]\\:text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity));\n}\n.group.attention-warning .group-\\[\\.attention-warning\\]\\:text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity));\n}\n.data-\\[checked\\=true\\]\\:z-10[data-checked=true] {\n z-index: 10;\n}\n.data-\\[selected\\=false\\]\\:hidden[data-selected=false] {\n display: none;\n}\n.data-\\[enabled\\=false\\]\\:translate-x-0[data-enabled=false] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[status\\=ok\\]\\:scale-y-0[data-status=ok] {\n --tw-scale-y: 0;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[disabled\\=false\\]\\:cursor-pointer[data-disabled=false] {\n cursor: pointer;\n}\n.data-\\[timed\\=true\\]\\:rounded-b-none[data-timed=true] {\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.data-\\[checked\\=true\\]\\:border-indigo-200[data-checked=true] {\n --tw-border-opacity: 1;\n border-color: rgb(199 210 254 / var(--tw-border-opacity));\n}\n.data-\\[enabled\\=true\\]\\:border-indigo-600[data-enabled=true] {\n --tw-border-opacity: 1;\n border-color: rgb(79 70 229 / var(--tw-border-opacity));\n}\n.data-\\[checked\\=true\\]\\:bg-indigo-50[data-checked=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity));\n}\n.data-\\[disabled\\=true\\]\\:bg-gray-200[data-disabled=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[enabled\\=false\\]\\:bg-gray-200[data-enabled=false] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[month\\=false\\]\\:bg-gray-100[data-month=false] {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n.data-\\[month\\=true\\]\\:bg-white[data-month=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.data-\\[negative\\=true\\]\\:bg-red-100[data-negative=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:\\!bg-blue-400[data-selected=true] {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(96 165 250 / var(--tw-bg-opacity)) !important;\n}\n.data-\\[selected\\=true\\]\\:bg-\\[\\#3b71ca\\][data-selected=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(59 113 202 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:bg-indigo-500[data-selected=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n.data-\\[status\\=fail\\]\\:bg-red-200[data-status=fail] {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity));\n}\n.data-\\[status\\=ok\\]\\:bg-green-200[data-status=ok] {\n --tw-bg-opacity: 1;\n background-color: rgb(187 247 208 / var(--tw-bg-opacity));\n}\n.data-\\[today\\=true\\]\\:bg-red-300[data-today=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(252 165 165 / var(--tw-bg-opacity));\n}\n.data-\\[left\\=true\\]\\:text-left[data-left=true] {\n text-align: left;\n}\n.data-\\[selected\\=true\\]\\:font-normal[data-selected=true] {\n font-weight: 400;\n}\n.data-\\[today\\=true\\]\\:font-semibold[data-today=true] {\n font-weight: 600;\n}\n.data-\\[checked\\=true\\]\\:text-indigo-600[data-checked=true] {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity));\n}\n.data-\\[checked\\=true\\]\\:text-indigo-900[data-checked=true] {\n --tw-text-opacity: 1;\n color: rgb(49 46 129 / var(--tw-text-opacity));\n}\n.data-\\[month\\=true\\]\\:text-gray-900[data-month=true] {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.data-\\[negative\\=false\\]\\:text-green-600[data-negative=false] {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity));\n}\n.data-\\[negative\\=true\\]\\:text-red-600[data-negative=true] {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity));\n}\n.data-\\[negative\\=true\\]\\:text-red-700[data-negative=true] {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity));\n}\n.data-\\[selected\\=true\\]\\:text-gray-900[data-selected=true] {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.data-\\[selected\\=true\\]\\:text-white[data-selected=true] {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.data-\\[enabled\\=true\\]\\:ring-2[data-enabled=true] {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.data-\\[selected\\=true\\]\\:ring-2[data-selected=true] {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.data-\\[enabled\\=true\\]\\:ring-indigo-600[data-enabled=true] {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.data-\\[error\\=true\\]\\:ring-red-500[data-error=true] {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity));\n}\n.data-\\[selected\\=true\\]\\:ring-indigo-600[data-selected=true] {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n.data-\\[month\\=true\\]\\:hover\\:bg-gray-200:hover[data-month=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity));\n}\n.data-\\[selected\\=true\\]\\:hover\\:\\!bg-blue-300:hover[data-selected=true] {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(147 197 253 / var(--tw-bg-opacity)) !important;\n}\n.data-\\[today\\=true\\]\\:hover\\:bg-red-200:hover[data-today=true] {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity));\n}\n:is([dir=\"rtl\"] .rtl\\:\\!left-auto) {\n left: auto !important;\n}\n:is([dir=\"rtl\"] .rtl\\:\\!origin-\\[50\\%_50\\%_0\\]) {\n transform-origin: 50% 50% 0 !important;\n}\n@media (prefers-color-scheme: dark) {\n\n .dark\\:bg-zinc-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(113 113 122 / var(--tw-bg-opacity));\n }\n\n .dark\\:bg-zinc-600\\/50 {\n background-color: rgb(82 82 91 / 0.5);\n }\n\n .dark\\:bg-zinc-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(63 63 70 / var(--tw-bg-opacity));\n }\n}\n@media (min-width: 640px) {\n\n .sm\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n\n .sm\\:col-span-5 {\n grid-column: span 5 / span 5;\n }\n\n .sm\\:col-span-6 {\n grid-column: span 6 / span 6;\n }\n\n .sm\\:-mx-6 {\n margin-left: -1.5rem;\n margin-right: -1.5rem;\n }\n\n .sm\\:mx-0 {\n margin-left: 0px;\n margin-right: 0px;\n }\n\n .sm\\:mx-auto {\n margin-left: auto;\n margin-right: auto;\n }\n\n .sm\\:my-8 {\n margin-top: 2rem;\n margin-bottom: 2rem;\n }\n\n .sm\\:ml-16 {\n margin-left: 4rem;\n }\n\n .sm\\:ml-6 {\n margin-left: 1.5rem;\n }\n\n .sm\\:mt-0 {\n margin-top: 0px;\n }\n\n .sm\\:mt-5 {\n margin-top: 1.25rem;\n }\n\n .sm\\:mt-6 {\n margin-top: 1.5rem;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:inline {\n display: inline;\n }\n\n .sm\\:flex {\n display: flex;\n }\n\n .sm\\:table-cell {\n display: table-cell;\n }\n\n .sm\\:grid {\n display: grid;\n }\n\n .sm\\:hidden {\n display: none;\n }\n\n .sm\\:w-96 {\n width: 24rem;\n }\n\n .sm\\:w-full {\n width: 100%;\n }\n\n .sm\\:max-w-sm {\n max-width: 24rem;\n }\n\n .sm\\:flex-auto {\n flex: 1 1 auto;\n }\n\n .sm\\:flex-none {\n flex: none;\n }\n\n .sm\\:flex-shrink-0 {\n flex-shrink: 0;\n }\n\n .sm\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n }\n\n .sm\\:flex-nowrap {\n flex-wrap: nowrap;\n }\n\n .sm\\:items-start {\n align-items: flex-start;\n }\n\n .sm\\:items-center {\n align-items: center;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:justify-between {\n justify-content: space-between;\n }\n\n .sm\\:gap-4 {\n gap: 1rem;\n }\n\n .sm\\:gap-x-4 {\n -moz-column-gap: 1rem;\n column-gap: 1rem;\n }\n\n .sm\\:rounded-lg {\n border-radius: 0.5rem;\n }\n\n .sm\\:rounded-none {\n border-radius: 0px;\n }\n\n .sm\\:rounded-xl {\n border-radius: 0.75rem;\n }\n\n .sm\\:p-6 {\n padding: 1.5rem;\n }\n\n .sm\\:p-8 {\n padding: 2rem;\n }\n\n .sm\\:px-0 {\n padding-left: 0px;\n padding-right: 0px;\n }\n\n .sm\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .sm\\:pl-0 {\n padding-left: 0px;\n }\n\n .sm\\:pl-3 {\n padding-left: 0.75rem;\n }\n\n .sm\\:pr-0 {\n padding-right: 0px;\n }\n\n .sm\\:text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .sm\\:leading-6 {\n line-height: 1.5rem;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n\n .md\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .md\\:divide-x > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-x-reverse: 0;\n border-right-width: calc(1px * var(--tw-divide-x-reverse));\n border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\n }\n\n .md\\:divide-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(0px * var(--tw-divide-y-reverse));\n }\n}\n@media (min-width: 1024px) {\n\n .lg\\:-mx-8 {\n margin-left: -2rem;\n margin-right: -2rem;\n }\n\n .lg\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n}\n"],
+ "mappings": "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AACA,CAAC;AACC,YAAU;AACZ;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,QAAM;AACN,SAAO;AACT;AACA,CAAC;AACC,OAAK;AACL,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,QAAM,KAAK,IAAI,EAAE;AACnB;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,eAAa,KAAK,EAAE,EAAE,KAAK;AAC7B;AACA,CAAC;AACC,eAAa,EAAE,EAAE;AACnB;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACP,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,QAAM,EAAE,EAAE;AACZ;AACA,CAAC;AACC,QAAM,EAAE,EAAE;AACZ;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,oBAAkB,OAAO,OAAO;AAClC;AACA,CAAC;AACC,oBAAkB;AAClB,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;AACA,CAAC;AACC,oBAAkB;AAClB,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;AACA,CAAC;AACC,oBAAkB;AAClB,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;AACA,CAAC;AACC,eAAa;AACb,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;AACA,CAAC;AACC,eAAa;AACb,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;AACA,CAAC;AACC,aAAW,UAAU,IAAI,iBAAiB,EAAE,IAAI,mBAAmB,OAAO,IAAI,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,cAAc,OAAO,IAAI,eAAe,OAAO,IAAI;AACnL;AACA,CAAC;AACC,aAAW,cAAc,MAAM;AACjC;AACA,WAAW;AAET;AACE,aAAS;AACX;AACF;AACA,CAAC;AACC,aAAW,MAAM,GAAG,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG;AACnD;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,uBAAqB;AAClB,oBAAkB;AACb,eAAa;AACvB;AACA,CAAC;AACC,yBAAuB,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;AAC7C;AACA,CAAC;AACC,yBAAuB,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;AAC7C;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,OAAK;AACP;AACA,CAAC;AACC,mBAAiB;AACZ,cAAY;AACnB;AACA,CAAC;AACC,mBAAiB;AACZ,cAAY;AACnB;AACA,CAAC;AACC,mBAAiB;AACZ,cAAY;AACnB;AACA,CAAC;AACC,mBAAiB;AACZ,cAAY;AACnB;AACA,CAAC;AACC,mBAAiB;AACZ,cAAY;AACnB;AACA,CAAC;AACC,mBAAiB;AACZ,cAAY;AACnB;AACA,CAAC;AACC,mBAAiB;AACZ,cAAY;AACnB;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACpC,wBAAsB;AACtB,cAAY,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI;AACrC,iBAAe,KAAK,KAAK,EAAE,IAAI;AACjC;AACA,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AAClC,wBAAsB;AACtB,gBAAc,KAAK,KAAK,EAAE,IAAI;AAC9B,eAAa,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI;AACxC;AACA,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AAClC,wBAAsB;AACtB,cAAY,KAAK,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI;AACxC,iBAAe,KAAK,QAAQ,EAAE,IAAI;AACpC;AACA,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACnC,wBAAsB;AACtB,cAAY,KAAK,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI;AACvC,iBAAe,KAAK,OAAO,EAAE,IAAI;AACnC;AACA,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AAClC,wBAAsB;AACtB,cAAY,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI;AACrC,iBAAe,KAAK,KAAK,EAAE,IAAI;AACjC;AACA,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AAClC,wBAAsB;AACtB,cAAY,KAAK,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI;AACvC,iBAAe,KAAK,OAAO,EAAE,IAAI;AACnC;AACA,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACjC,yBAAuB;AACvB,sBAAoB,KAAK,IAAI,EAAE,IAAI;AACnC,qBAAmB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI;AAC7C;AACA,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACjC,yBAAuB;AACvB,oBAAkB,KAAK,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI;AAC1C,uBAAqB,KAAK,IAAI,EAAE,IAAI;AACtC;AACA,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACxC,uBAAqB;AACrB,gBAAc,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACtC;AACA,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACxC,uBAAqB;AACrB,gBAAc,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACtC;AACA,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACxC,uBAAqB;AACrB,gBAAc,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACtC;AACA,CAAC,oBAAoB,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5C,gBAAc,IAAI,GAAG,GAAG,GAAG,EAAE;AAC/B;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,YAAU;AACZ;AACA,CAAC;AACC,YAAU;AACZ;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,YAAU;AACV,iBAAe;AACf,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,8BAA4B;AAC5B,6BAA2B;AAC7B;AACA,CAAC;AACC,0BAAwB;AACxB,6BAA2B;AAC7B;AACA,CAAC;AACC,0BAAwB;AACxB,6BAA2B;AAC7B;AACA,CAAC;AACC,0BAAwB;AACxB,6BAA2B;AAC7B;AACA,CAAC;AACC,2BAAyB;AACzB,8BAA4B;AAC9B;AACA,CAAC;AACC,2BAAyB;AACzB,8BAA4B;AAC9B;AACA,CAAC;AACC,0BAAwB;AACxB,2BAAyB;AAC3B;AACA,CAAC;AACC,0BAAwB;AACxB,2BAAyB;AAC3B;AACA,CAAC;AACC,6BAA2B;AAC7B;AACA,CAAC;AACC,8BAA4B;AAC9B;AACA,CAAC;AACC,0BAAwB;AAC1B;AACA,CAAC;AACC,2BAAyB;AAC3B;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,uBAAqB;AACvB;AACA,CAAC;AACC,sBAAoB;AACtB;AACA,CAAC;AACC,sBAAoB;AACtB;AACA,CAAC;AACC,oBAAkB;AACpB;AACA,CAAC;AACC,oBAAkB;AACpB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,uBAAqB;AACrB,gBAAc,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AACrC;AACA,CAAC;AACC,uBAAqB;AACrB,gBAAc,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACtC;AACA,CAAC;AACC,uBAAqB;AACrB,gBAAc,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACtC;AACA,CAAC;AACC,uBAAqB;AACrB,gBAAc,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACtC;AACA,CAAC;AACC,gBAAc,IAAI,GAAG,GAAG,GAAG,EAAE;AAC/B;AACA,CAAC;AACC,gBAAc,IAAI,GAAG,GAAG,GAAG,EAAE;AAC/B;AACA,CAAC;AACC,uBAAqB;AACrB,gBAAc,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACtC;AACA,CAAC;AACC,uBAAqB;AACrB,gBAAc,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AACtC;AACA,CAAC;AACC,uBAAqB;AACrB,gBAAc,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACpC;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,uBAAqB;AACvB;AACA,CAAC;AACC,oBAAkB;AACpB;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI;AACpC;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI;AACzC;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACxC;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI;AACxC;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AACxC;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI;AACxC;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,oBAAkB;AACpB;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACjB,oBAAkB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI;AAC1C;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAAC;AACC,QAAM;AACR;AACA,CAAC;AACC,UAAQ,IAAI,GAAG,GAAG,GAAG,EAAE;AACzB;AACA,CAAC;AACC,iBAAe;AACZ,cAAY;AACjB;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,gBAAc;AACd,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACb,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,gBAAc;AAChB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,aAAW;AACX,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI;AACzB;AACA,CAAC;AACC,qBAAmB;AACnB,SAAO,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI;AAC7B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",
"names": []
}
diff --git a/bank/index.js b/bank/index.js
index 3c1e2e280..080c97a90 100644
--- a/bank/index.js
+++ b/bank/index.js
@@ -96,12 +96,12 @@ var require_BigInteger = __commonJS({
v3.length = i5 + 1;
}
function createArray(length) {
- var x6 = new Array(length);
+ var x5 = new Array(length);
var i5 = -1;
while (++i5 < length) {
- x6[i5] = 0;
+ x5[i5] = 0;
}
- return x6;
+ return x5;
}
function truncate(n2) {
if (n2 > 0)
@@ -310,18 +310,18 @@ var require_BigInteger = __commonJS({
}
return r3;
}
- function shiftLeft(x6, n2) {
+ function shiftLeft(x5, n2) {
var r3 = [];
while (n2-- > 0)
r3.push(0);
- return r3.concat(x6);
+ return r3.concat(x5);
}
- function multiplyKaratsuba(x6, y5) {
- var n2 = Math.max(x6.length, y5.length);
+ function multiplyKaratsuba(x5, y5) {
+ var n2 = Math.max(x5.length, y5.length);
if (n2 <= 30)
- return multiplyLong(x6, y5);
+ return multiplyLong(x5, y5);
n2 = Math.ceil(n2 / 2);
- var b4 = x6.slice(n2), a5 = x6.slice(0, n2), d5 = y5.slice(n2), c4 = y5.slice(0, n2);
+ var b4 = x5.slice(n2), a5 = x5.slice(0, n2), d5 = y5.slice(n2), c4 = y5.slice(0, n2);
var ac = multiplyKaratsuba(a5, c4), bd = multiplyKaratsuba(b4, d5), abcd = multiplyKaratsuba(addAny(a5, b4), addAny(c4, d5));
var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n2)), shiftLeft(bd, 2 * n2));
trim(product);
@@ -577,7 +577,7 @@ var require_BigInteger = __commonJS({
};
SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
BigInteger.prototype.pow = function(v3) {
- var n2 = parseValue(v3), a5 = this.value, b4 = n2.value, value, x6, y5;
+ var n2 = parseValue(v3), a5 = this.value, b4 = n2.value, value, x5, y5;
if (b4 === 0)
return Integer[1];
if (a5 === 0)
@@ -595,17 +595,17 @@ var require_BigInteger = __commonJS({
if (isPrecise(value = Math.pow(a5, b4)))
return new SmallInteger(truncate(value));
}
- x6 = this;
+ x5 = this;
y5 = Integer[1];
while (true) {
if (b4 & true) {
- y5 = y5.times(x6);
+ y5 = y5.times(x5);
--b4;
}
if (b4 === 0)
break;
b4 /= 2;
- x6 = x6.square();
+ x5 = x5.square();
}
return y5;
};
@@ -624,17 +624,17 @@ var require_BigInteger = __commonJS({
return n2.isEven() ? Integer[1] : Integer[-1];
if (n2.isNegative())
return new NativeBigInt(_0);
- var x6 = this;
+ var x5 = this;
var y5 = Integer[1];
while (true) {
if ((b4 & _1) === _1) {
- y5 = y5.times(x6);
+ y5 = y5.times(x5);
--b4;
}
if (b4 === _0)
break;
b4 /= _22;
- x6 = x6.square();
+ x5 = x5.square();
}
return y5;
};
@@ -833,21 +833,21 @@ var require_BigInteger = __commonJS({
return true;
}
function millerRabinTest(n2, a5) {
- var nPrev = n2.prev(), b4 = nPrev, r3 = 0, d5, t4, i5, x6;
+ var nPrev = n2.prev(), b4 = nPrev, r3 = 0, d5, t4, i5, x5;
while (b4.isEven())
b4 = b4.divide(2), r3++;
next:
for (i5 = 0; i5 < a5.length; i5++) {
if (n2.lesser(a5[i5]))
continue;
- x6 = bigInt(a5[i5]).modPow(b4, n2);
- if (x6.isUnit() || x6.equals(nPrev))
+ x5 = bigInt(a5[i5]).modPow(b4, n2);
+ if (x5.isUnit() || x5.equals(nPrev))
continue;
for (d5 = r3 - 1; d5 != 0; d5--) {
- x6 = x6.square().mod(n2);
- if (x6.isUnit())
+ x5 = x5.square().mod(n2);
+ if (x5.isUnit())
return false;
- if (x6.equals(nPrev))
+ if (x5.equals(nPrev))
continue next;
}
return false;
@@ -980,10 +980,10 @@ var require_BigInteger = __commonJS({
return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
};
NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;
- function bitwise(x6, y5, fn2) {
+ function bitwise(x5, y5, fn2) {
y5 = parseValue(y5);
- var xSign = x6.isNegative(), ySign = y5.isNegative();
- var xRem = xSign ? x6.not() : x6, yRem = ySign ? y5.not() : y5;
+ var xSign = x5.isNegative(), ySign = y5.isNegative();
+ var xRem = xSign ? x5.not() : x5, yRem = ySign ? y5.not() : y5;
var xDigit = 0, yDigit = 0;
var xDivMod = null, yDivMod = null;
var result = [];
@@ -1032,8 +1032,8 @@ var require_BigInteger = __commonJS({
NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;
var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;
function roughLOB(n2) {
- var v3 = n2.value, x6 = typeof v3 === "number" ? v3 | LOBMASK_I : typeof v3 === "bigint" ? v3 | BigInt(LOBMASK_I) : v3[0] + v3[1] * BASE | LOBMASK_BI;
- return x6 & -x6;
+ var v3 = n2.value, x5 = typeof v3 === "number" ? v3 | LOBMASK_I : typeof v3 === "bigint" ? v3 | BigInt(LOBMASK_I) : v3[0] + v3[1] * BASE | LOBMASK_BI;
+ return x5 & -x5;
}
function integerLogarithm(value, base2) {
if (base2.compareTo(value) <= 0) {
@@ -1236,8 +1236,8 @@ var require_BigInteger = __commonJS({
}
function toBaseString(n2, base2, alphabet) {
var arr = toBase(n2, base2);
- return (arr.isNegative ? "-" : "") + arr.value.map(function(x6) {
- return stringify(x6, alphabet);
+ return (arr.isNegative ? "-" : "") + arr.value.map(function(x5) {
+ return stringify(x5, alphabet);
}).join("");
}
BigInteger.prototype.toArray = function(radix) {
@@ -1286,9 +1286,9 @@ var require_BigInteger = __commonJS({
};
function parseStringValue(v3) {
if (isPrecise(+v3)) {
- var x6 = +v3;
- if (x6 === truncate(x6))
- return supportsNativeBigInt ? new NativeBigInt(BigInt(x6)) : new SmallInteger(x6);
+ var x5 = +v3;
+ if (x5 === truncate(x5))
+ return supportsNativeBigInt ? new NativeBigInt(BigInt(x5)) : new SmallInteger(x5);
throw new Error("Invalid integer: " + v3);
}
var sign = v3[0] === "-";
@@ -1367,8 +1367,8 @@ var require_BigInteger = __commonJS({
Integer.min = min;
Integer.gcd = gcd;
Integer.lcm = lcm;
- Integer.isInstance = function(x6) {
- return x6 instanceof BigInteger || x6 instanceof SmallInteger || x6 instanceof NativeBigInt;
+ Integer.isInstance = function(x5) {
+ return x5 instanceof BigInteger || x5 instanceof SmallInteger || x5 instanceof NativeBigInt;
};
Integer.randBetween = randBetween;
Integer.fromArray = function(digits, base2, isNegative) {
@@ -1474,8 +1474,8 @@ var require_jed = __commonJS({
if ({}.toString.call(sArr) != "[object Array]") {
sArr = [].slice.call(arguments, 0);
}
- return (sArr && sArr.length ? Jed2.sprintf : function(x6) {
- return x6;
+ return (sArr && sArr.length ? Jed2.sprintf : function(x5) {
+ return x5;
})(
this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val),
sArr
@@ -2263,23 +2263,23 @@ function g() {
});
}
function w(n2, l3, u4, i4, t4, o3, r3, c4, s5, a5) {
- var h5, y5, d5, k5, b4, g4, w5, x6 = i4 && i4.__k || e, C3 = x6.length;
+ var h5, y5, d5, k5, b4, g4, w5, x5 = i4 && i4.__k || e, C3 = x5.length;
for (u4.__k = [], h5 = 0; h5 < l3.length; h5++)
if (null != (k5 = u4.__k[h5] = null == (k5 = l3[h5]) || "boolean" == typeof k5 ? null : "string" == typeof k5 || "number" == typeof k5 || "bigint" == typeof k5 ? v(null, k5, null, null, k5) : Array.isArray(k5) ? v(p2, { children: k5 }, null, null, null) : k5.__b > 0 ? v(k5.type, k5.props, k5.key, k5.ref ? k5.ref : null, k5.__v) : k5)) {
- if (k5.__ = u4, k5.__b = u4.__b + 1, null === (d5 = x6[h5]) || d5 && k5.key == d5.key && k5.type === d5.type)
- x6[h5] = void 0;
+ if (k5.__ = u4, k5.__b = u4.__b + 1, null === (d5 = x5[h5]) || d5 && k5.key == d5.key && k5.type === d5.type)
+ x5[h5] = void 0;
else
for (y5 = 0; y5 < C3; y5++) {
- if ((d5 = x6[y5]) && k5.key == d5.key && k5.type === d5.type) {
- x6[y5] = void 0;
+ if ((d5 = x5[y5]) && k5.key == d5.key && k5.type === d5.type) {
+ x5[y5] = void 0;
break;
}
d5 = null;
}
- j(n2, k5, d5 = d5 || f, t4, o3, r3, c4, s5, a5), b4 = k5.__e, (y5 = k5.ref) && d5.ref != y5 && (w5 || (w5 = []), d5.ref && w5.push(d5.ref, null, k5), w5.push(y5, k5.__c || b4, k5)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k5.type && k5.__k === d5.__k ? k5.__d = s5 = m(k5, s5, n2) : s5 = A2(n2, k5, d5, x6, b4, s5), "function" == typeof u4.type && (u4.__d = s5)) : s5 && d5.__e == s5 && s5.parentNode != n2 && (s5 = _(d5));
+ j(n2, k5, d5 = d5 || f, t4, o3, r3, c4, s5, a5), b4 = k5.__e, (y5 = k5.ref) && d5.ref != y5 && (w5 || (w5 = []), d5.ref && w5.push(d5.ref, null, k5), w5.push(y5, k5.__c || b4, k5)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k5.type && k5.__k === d5.__k ? k5.__d = s5 = m(k5, s5, n2) : s5 = A2(n2, k5, d5, x5, b4, s5), "function" == typeof u4.type && (u4.__d = s5)) : s5 && d5.__e == s5 && s5.parentNode != n2 && (s5 = _(d5));
}
for (u4.__e = g4, h5 = C3; h5--; )
- null != x6[h5] && N(x6[h5], x6[h5]);
+ null != x5[h5] && N(x5[h5], x5[h5]);
if (w5)
for (h5 = 0; h5 < w5.length; h5++)
M2(w5[h5], w5[++h5], w5[++h5]);
@@ -2289,9 +2289,9 @@ function m(n2, l3, u4) {
(i4 = t4[o3]) && (i4.__ = n2, l3 = "function" == typeof i4.type ? m(i4, l3, u4) : A2(u4, i4, i4, t4, i4.__e, l3));
return l3;
}
-function x2(n2, l3) {
+function x(n2, l3) {
return l3 = l3 || [], null == n2 || "boolean" == typeof n2 || (Array.isArray(n2) ? n2.some(function(n3) {
- x2(n3, l3);
+ x(n3, l3);
}) : l3.push(n2)), l3;
}
function A2(n2, l3, u4, i4, t4, o3) {
@@ -2355,17 +2355,17 @@ function T(n2) {
this.l[n2.type + true](l.event ? l.event(n2) : n2);
}
function j(n2, u4, i4, t4, o3, r3, f3, e4, c4) {
- var a5, h5, v3, y5, _3, k5, b4, g4, m5, x6, A5, C3, $3, H5, I5, T5 = u4.type;
+ var a5, h5, v3, y5, _3, k5, b4, g4, m5, x5, A5, C3, $3, H5, I5, T5 = u4.type;
if (void 0 !== u4.constructor)
return null;
null != i4.__h && (c4 = i4.__h, e4 = u4.__e = i4.__e, u4.__h = null, r3 = [e4]), (a5 = l.__b) && a5(u4);
try {
n:
if ("function" == typeof T5) {
- if (g4 = u4.props, m5 = (a5 = T5.contextType) && t4[a5.__c], x6 = a5 ? m5 ? m5.props.value : a5.__ : t4, i4.__c ? b4 = (h5 = u4.__c = i4.__c).__ = h5.__E : ("prototype" in T5 && T5.prototype.render ? u4.__c = h5 = new T5(g4, x6) : (u4.__c = h5 = new d(g4, x6), h5.constructor = T5, h5.render = O), m5 && m5.sub(h5), h5.props = g4, h5.state || (h5.state = {}), h5.context = x6, h5.__n = t4, v3 = h5.__d = true, h5.__h = [], h5._sb = []), null == h5.__s && (h5.__s = h5.state), null != T5.getDerivedStateFromProps && (h5.__s == h5.state && (h5.__s = s({}, h5.__s)), s(h5.__s, T5.getDerivedStateFromProps(g4, h5.__s))), y5 = h5.props, _3 = h5.state, v3)
+ if (g4 = u4.props, m5 = (a5 = T5.contextType) && t4[a5.__c], x5 = a5 ? m5 ? m5.props.value : a5.__ : t4, i4.__c ? b4 = (h5 = u4.__c = i4.__c).__ = h5.__E : ("prototype" in T5 && T5.prototype.render ? u4.__c = h5 = new T5(g4, x5) : (u4.__c = h5 = new d(g4, x5), h5.constructor = T5, h5.render = O), m5 && m5.sub(h5), h5.props = g4, h5.state || (h5.state = {}), h5.context = x5, h5.__n = t4, v3 = h5.__d = true, h5.__h = [], h5._sb = []), null == h5.__s && (h5.__s = h5.state), null != T5.getDerivedStateFromProps && (h5.__s == h5.state && (h5.__s = s({}, h5.__s)), s(h5.__s, T5.getDerivedStateFromProps(g4, h5.__s))), y5 = h5.props, _3 = h5.state, v3)
null == T5.getDerivedStateFromProps && null != h5.componentWillMount && h5.componentWillMount(), null != h5.componentDidMount && h5.__h.push(h5.componentDidMount);
else {
- if (null == T5.getDerivedStateFromProps && g4 !== y5 && null != h5.componentWillReceiveProps && h5.componentWillReceiveProps(g4, x6), !h5.__e && null != h5.shouldComponentUpdate && false === h5.shouldComponentUpdate(g4, h5.__s, x6) || u4.__v === i4.__v) {
+ if (null == T5.getDerivedStateFromProps && g4 !== y5 && null != h5.componentWillReceiveProps && h5.componentWillReceiveProps(g4, x5), !h5.__e && null != h5.shouldComponentUpdate && false === h5.shouldComponentUpdate(g4, h5.__s, x5) || u4.__v === i4.__v) {
for (h5.props = g4, h5.state = h5.__s, u4.__v !== i4.__v && (h5.__d = false), h5.__v = u4, u4.__e = i4.__e, u4.__k = i4.__k, u4.__k.forEach(function(n3) {
n3 && (n3.__ = u4);
}), A5 = 0; A5 < h5._sb.length; A5++)
@@ -2373,11 +2373,11 @@ function j(n2, u4, i4, t4, o3, r3, f3, e4, c4) {
h5._sb = [], h5.__h.length && f3.push(h5);
break n;
}
- null != h5.componentWillUpdate && h5.componentWillUpdate(g4, h5.__s, x6), null != h5.componentDidUpdate && h5.__h.push(function() {
+ null != h5.componentWillUpdate && h5.componentWillUpdate(g4, h5.__s, x5), null != h5.componentDidUpdate && h5.__h.push(function() {
h5.componentDidUpdate(y5, _3, k5);
});
}
- if (h5.context = x6, h5.props = g4, h5.__v = u4, h5.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T5 && T5.prototype.render) {
+ if (h5.context = x5, h5.props = g4, h5.__v = u4, h5.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T5 && T5.prototype.render) {
for (h5.state = h5.__s, h5.__d = false, C3 && C3(u4), a5 = h5.render(h5.props, h5.state, h5.context), H5 = 0; H5 < h5._sb.length; H5++)
h5.__h.push(h5._sb[H5]);
h5._sb = [];
@@ -2594,7 +2594,7 @@ function q2(n2) {
var u4 = r2.context[n2.__c], i4 = d2(t2++, 9);
return i4.c = n2, u4 ? (null == i4.__ && (i4.__ = true, u4.sub(r2)), u4.props.value) : n2.__;
}
-function x3(t4, r3) {
+function x2(t4, r3) {
l.useDebugValue && l.useDebugValue(r3 ? r3(t4) : t4);
}
function P2(n2) {
@@ -2730,7 +2730,7 @@ __export(compat_module_exports, {
unstable_batchedUpdates: () => sn,
useCallback: () => T2,
useContext: () => q2,
- useDebugValue: () => x3,
+ useDebugValue: () => x2,
useDeferredValue: () => pn,
useEffect: () => h2,
useErrorBoundary: () => P2,
@@ -2889,7 +2889,7 @@ function _n(n2, t4) {
});
}, [n2]), e4;
}
-var x4, N2, A4, O2, T3, I3, W, z3, B3, H2, Z2, G, X2, nn, tn, en, rn, un, sn, hn, vn2, yn, bn;
+var x3, N2, A4, O2, T3, I3, W, z3, B3, H2, Z2, G, X2, nn, tn, en, rn, un, sn, hn, vn2, yn, bn;
var init_compat_module = __esm({
"../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/dist/compat.module.js"() {
init_preact_module();
@@ -2899,22 +2899,22 @@ var init_compat_module = __esm({
(w3.prototype = new d()).isPureReactComponent = true, w3.prototype.shouldComponentUpdate = function(n2, t4) {
return C2(this.props, n2) || C2(this.state, t4);
};
- x4 = l.__b;
+ x3 = l.__b;
l.__b = function(n2) {
- n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x4 && x4(n2);
+ n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x3 && x3(n2);
};
N2 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911;
A4 = function(n2, t4) {
- return null == n2 ? null : x2(x2(n2).map(t4));
+ return null == n2 ? null : x(x(n2).map(t4));
};
O2 = { map: A4, forEach: A4, count: function(n2) {
- return n2 ? x2(n2).length : 0;
+ return n2 ? x(n2).length : 0;
}, only: function(n2) {
- var t4 = x2(n2);
+ var t4 = x(n2);
if (1 !== t4.length)
throw "Children.only";
return t4[0];
- }, toArray: x2 };
+ }, toArray: x };
T3 = l.__e;
l.__e = function(n2, t4, e4, r3) {
if (n2.then) {
@@ -2980,7 +2980,7 @@ var init_compat_module = __esm({
};
}, V2.prototype.render = function(n2) {
this.u = null, this.o = /* @__PURE__ */ new Map();
- var t4 = x2(n2.children);
+ var t4 = x(n2.children);
n2.revealOrder && "b" === n2.revealOrder[0] && t4.reverse();
for (var e4 = t4.length; e4--; )
this.o.set(t4[e4], this.u = [1, 0, this.u]);
@@ -3020,9 +3020,9 @@ var init_compat_module = __esm({
var l3 = e4[i4];
H2 && "children" === i4 && "noscript" === t4 || "value" === i4 && "defaultValue" in e4 && null == l3 || ("defaultValue" === i4 && "value" in e4 && null == e4.value ? i4 = "value" : "download" === i4 && true === l3 ? l3 = "" : /ondoubleclick/i.test(i4) ? i4 = "ondblclick" : /^onchange(textarea|input)/i.test(i4 + t4) && !Z2(e4.type) ? i4 = "oninput" : /^onfocus$/i.test(i4) ? i4 = "onfocusin" : /^onblur$/i.test(i4) ? i4 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i4) ? i4 = i4.toLowerCase() : o3 && B3.test(i4) ? i4 = i4.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : null === l3 && (l3 = void 0), /^oninput$/i.test(i4) && (i4 = i4.toLowerCase(), u4[i4] && (i4 = "oninputCapture")), u4[i4] = l3);
}
- "select" == t4 && u4.multiple && Array.isArray(u4.value) && (u4.value = x2(e4.children).forEach(function(n3) {
+ "select" == t4 && u4.multiple && Array.isArray(u4.value) && (u4.value = x(e4.children).forEach(function(n3) {
n3.props.selected = -1 != u4.value.indexOf(n3.props.value);
- })), "select" == t4 && null != u4.defaultValue && (u4.value = x2(e4.children).forEach(function(n3) {
+ })), "select" == t4 && null != u4.defaultValue && (u4.value = x(e4.children).forEach(function(n3) {
n3.props.selected = u4.multiple ? -1 != u4.defaultValue.indexOf(n3.props.value) : u4.defaultValue == n3.props.value;
})), n2.props = u4, e4.class != e4.className && (nn.enumerable = "className" in e4, null != e4.className && (u4.class = e4.className), Object.defineProperty(u4, "className", nn));
}
@@ -3044,7 +3044,7 @@ var init_compat_module = __esm({
};
vn2 = p2;
yn = s2;
- bn = { useState: p3, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A3, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x3, version: "17.0.2", Children: O2, render: Y2, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p2, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn2, Suspense: D3, SuspenseList: V2, lazy: M3, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn };
+ bn = { useState: p3, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A3, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x2, version: "17.0.2", Children: O2, render: Y2, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p2, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn2, Suspense: D3, SuspenseList: V2, lazy: M3, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn };
}
});
@@ -3500,9 +3500,9 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max = size - margin;
- return createDataURL(size, size, function(x6, y5) {
- if (min <= x6 && x6 < max && min <= y5 && y5 < max) {
- var c4 = Math.floor((x6 - min) / cellSize);
+ return createDataURL(size, size, function(x5, y5) {
+ if (min <= x5 && x5 < max && min <= y5 && y5 < max) {
+ var c4 = Math.floor((x5 - min) / cellSize);
var r3 = Math.floor((y5 - min) / cellSize);
return _this.isDark(r3, c4) ? 0 : 1;
} else {
@@ -3563,7 +3563,7 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max = size - margin;
- var y5, x6, r1, r22, p4;
+ var y5, x5, r1, r22, p4;
var blocks = {
"\u2588\u2588": "\u2588",
"\u2588 ": "\u2580",
@@ -3580,12 +3580,12 @@ var require_qrcode = __commonJS({
for (y5 = 0; y5 < size; y5 += 2) {
r1 = Math.floor((y5 - min) / cellSize);
r22 = Math.floor((y5 + 1 - min) / cellSize);
- for (x6 = 0; x6 < size; x6 += 1) {
+ for (x5 = 0; x5 < size; x5 += 1) {
p4 = "\u2588";
- if (min <= x6 && x6 < max && min <= y5 && y5 < max && _this.isDark(r1, Math.floor((x6 - min) / cellSize))) {
+ if (min <= x5 && x5 < max && min <= y5 && y5 < max && _this.isDark(r1, Math.floor((x5 - min) / cellSize))) {
p4 = " ";
}
- if (min <= x6 && x6 < max && min <= y5 + 1 && y5 + 1 < max && _this.isDark(r22, Math.floor((x6 - min) / cellSize))) {
+ if (min <= x5 && x5 < max && min <= y5 + 1 && y5 + 1 < max && _this.isDark(r22, Math.floor((x5 - min) / cellSize))) {
p4 += " ";
} else {
p4 += "\u2588";
@@ -3609,7 +3609,7 @@ var require_qrcode = __commonJS({
var size = _this.getModuleCount() * cellSize + margin * 2;
var min = margin;
var max = size - margin;
- var y5, x6, r3, p4;
+ var y5, x5, r3, p4;
var white = Array(cellSize + 1).join("\u2588\u2588");
var black = Array(cellSize + 1).join(" ");
var ascii = "";
@@ -3617,9 +3617,9 @@ var require_qrcode = __commonJS({
for (y5 = 0; y5 < size; y5 += 1) {
r3 = Math.floor((y5 - min) / cellSize);
line = "";
- for (x6 = 0; x6 < size; x6 += 1) {
+ for (x5 = 0; x5 < size; x5 += 1) {
p4 = 1;
- if (min <= x6 && x6 < max && min <= y5 && y5 < max && _this.isDark(r3, Math.floor((x6 - min) / cellSize))) {
+ if (min <= x5 && x5 < max && min <= y5 && y5 < max && _this.isDark(r3, Math.floor((x5 - min) / cellSize))) {
p4 = 0;
}
line += p4 ? white : black;
@@ -4615,8 +4615,8 @@ var require_qrcode = __commonJS({
var _height = height;
var _data = new Array(width * height);
var _this = {};
- _this.setPixel = function(x6, y5, pixel) {
- _data[y5 * _width + x6] = pixel;
+ _this.setPixel = function(x5, y5, pixel) {
+ _data[y5 * _width + x5] = pixel;
};
_this.write = function(out) {
out.writeString("GIF87a");
@@ -4741,8 +4741,8 @@ var require_qrcode = __commonJS({
var createDataURL = function(width, height, getPixel) {
var gif = gifImage(width, height);
for (var y5 = 0; y5 < height; y5 += 1) {
- for (var x6 = 0; x6 < width; x6 += 1) {
- gif.setPixel(x6, y5, getPixel(x6, y5));
+ for (var x5 = 0; x5 < width; x5 += 1) {
+ gif.setPixel(x5, y5, getPixel(x5, y5));
}
}
var b4 = byteArrayOutputStream();
@@ -4812,7 +4812,7 @@ var gf = function(init = []) {
r3[i4] = init[i4];
return r3;
};
-var randombytes = function(x6, n2) {
+var randombytes = function(x5, n2) {
throw new Error("no PRNG");
};
var _9 = new Uint8Array(32);
@@ -4910,24 +4910,24 @@ var I = gf([
9344,
11139
]);
-function ts64(x6, i4, h5, l3) {
- x6[i4] = h5 >> 24 & 255;
- x6[i4 + 1] = h5 >> 16 & 255;
- x6[i4 + 2] = h5 >> 8 & 255;
- x6[i4 + 3] = h5 & 255;
- x6[i4 + 4] = l3 >> 24 & 255;
- x6[i4 + 5] = l3 >> 16 & 255;
- x6[i4 + 6] = l3 >> 8 & 255;
- x6[i4 + 7] = l3 & 255;
-}
-function vn(x6, xi, y5, yi, n2) {
+function ts64(x5, i4, h5, l3) {
+ x5[i4] = h5 >> 24 & 255;
+ x5[i4 + 1] = h5 >> 16 & 255;
+ x5[i4 + 2] = h5 >> 8 & 255;
+ x5[i4 + 3] = h5 & 255;
+ x5[i4 + 4] = l3 >> 24 & 255;
+ x5[i4 + 5] = l3 >> 16 & 255;
+ x5[i4 + 6] = l3 >> 8 & 255;
+ x5[i4 + 7] = l3 & 255;
+}
+function vn(x5, xi, y5, yi, n2) {
let i4, d5 = 0;
for (i4 = 0; i4 < n2; i4++)
- d5 |= x6[xi + i4] ^ y5[yi + i4];
+ d5 |= x5[xi + i4] ^ y5[yi + i4];
return (1 & d5 - 1 >>> 8) - 1;
}
-function crypto_verify_32(x6, xi, y5, yi) {
- return vn(x6, xi, y5, yi, 32);
+function crypto_verify_32(x5, xi, y5, yi) {
+ return vn(x5, xi, y5, yi, 32);
}
var sigma = new Uint8Array([
101,
@@ -5918,7 +5918,7 @@ function crypto_hashblocks_hl(hh, hl, m5, n2) {
function crypto_hash(out, m5, n2) {
const hh = new Int32Array(8);
const hl = new Int32Array(8);
- const x6 = new Uint8Array(256);
+ const x5 = new Uint8Array(256);
const b4 = n2;
hh[0] = 1779033703;
hh[1] = 3144134277;
@@ -5939,12 +5939,12 @@ function crypto_hash(out, m5, n2) {
crypto_hashblocks_hl(hh, hl, m5, n2);
n2 %= 128;
for (let i4 = 0; i4 < n2; i4++)
- x6[i4] = m5[b4 - n2 + i4];
- x6[n2] = 128;
+ x5[i4] = m5[b4 - n2 + i4];
+ x5[n2] = 128;
n2 = 256 - 128 * (n2 < 112 ? 1 : 0);
- x6[n2 - 9] = 0;
- ts64(x6, n2 - 8, b4 / 536870912 | 0, b4 << 3);
- crypto_hashblocks_hl(hh, hl, x6, n2);
+ x5[n2 - 9] = 0;
+ ts64(x5, n2 - 8, b4 / 536870912 | 0, b4 << 3);
+ crypto_hashblocks_hl(hh, hl, x5, n2);
for (let i4 = 0; i4 < 8; i4++)
ts64(out, 8 * i4, hh[i4], hl[i4]);
return 0;
@@ -5998,15 +5998,15 @@ var HashState = class {
finish() {
const out = new Uint8Array(64);
let n2 = this.p;
- const x6 = new Uint8Array(256);
+ const x5 = new Uint8Array(256);
const b4 = this.total;
for (let i4 = 0; i4 < n2; i4++)
- x6[i4] = this.next[i4];
- x6[n2] = 128;
+ x5[i4] = this.next[i4];
+ x5[n2] = 128;
n2 = 256 - 128 * (n2 < 112 ? 1 : 0);
- x6[n2 - 9] = 0;
- ts64(x6, n2 - 8, b4 / 536870912 | 0, b4 << 3);
- crypto_hashblocks_hl(this.hh, this.hl, x6, n2);
+ x5[n2 - 9] = 0;
+ ts64(x5, n2 - 8, b4 / 536870912 | 0, b4 << 3);
+ crypto_hashblocks_hl(this.hh, this.hl, x5, n2);
for (let i4 = 0; i4 < 8; i4++)
ts64(out, 8 * i4, this.hh[i4], this.hl[i4]);
return out;
@@ -6103,38 +6103,38 @@ var L = new Float64Array([
0,
16
]);
-function modL(r3, x6) {
+function modL(r3, x5) {
let carry, i4, j4, k5;
for (i4 = 63; i4 >= 32; --i4) {
carry = 0;
for (j4 = i4 - 32, k5 = i4 - 12; j4 < k5; ++j4) {
- x6[j4] += carry - 16 * x6[i4] * L[j4 - (i4 - 32)];
- carry = Math.floor((x6[j4] + 128) / 256);
- x6[j4] -= carry * 256;
+ x5[j4] += carry - 16 * x5[i4] * L[j4 - (i4 - 32)];
+ carry = Math.floor((x5[j4] + 128) / 256);
+ x5[j4] -= carry * 256;
}
- x6[j4] += carry;
- x6[i4] = 0;
+ x5[j4] += carry;
+ x5[i4] = 0;
}
carry = 0;
for (j4 = 0; j4 < 32; j4++) {
- x6[j4] += carry - (x6[31] >> 4) * L[j4];
- carry = x6[j4] >> 8;
- x6[j4] &= 255;
+ x5[j4] += carry - (x5[31] >> 4) * L[j4];
+ carry = x5[j4] >> 8;
+ x5[j4] &= 255;
}
for (j4 = 0; j4 < 32; j4++)
- x6[j4] -= carry * L[j4];
+ x5[j4] -= carry * L[j4];
for (i4 = 0; i4 < 32; i4++) {
- x6[i4 + 1] += x6[i4] >> 8;
- r3[i4] = x6[i4] & 255;
+ x5[i4 + 1] += x5[i4] >> 8;
+ r3[i4] = x5[i4] & 255;
}
}
function reduce(r3) {
- const x6 = new Float64Array(64);
+ const x5 = new Float64Array(64);
for (let i4 = 0; i4 < 64; i4++)
- x6[i4] = r3[i4];
+ x5[i4] = r3[i4];
for (let i4 = 0; i4 < 64; i4++)
r3[i4] = 0;
- modL(r3, x6);
+ modL(r3, x5);
}
function unpackpos(r3, p4) {
const q5 = [gf(), gf(), gf(), gf()];
@@ -6254,19 +6254,19 @@ function hash(msg) {
function setPRNG(fn2) {
randombytes = fn2;
}
-function crypto_core_ed25519_scalar_reduce(x6) {
- const len = x6.length;
+function crypto_core_ed25519_scalar_reduce(x5) {
+ const len = x5.length;
const z5 = new Float64Array(64);
for (let i4 = 0; i4 < len; i4++)
- z5[i4] = x6[i4];
+ z5[i4] = x5[i4];
const o3 = new Uint8Array(32);
modL(o3, z5);
return o3;
}
-function crypto_core_ed25519_scalar_sub(x6, y5) {
+function crypto_core_ed25519_scalar_sub(x5, y5) {
const z5 = new Float64Array(64);
for (let i4 = 0; i4 < 32; i4++) {
- z5[i4] = x6[i4] - y5[i4];
+ z5[i4] = x5[i4] - y5[i4];
}
const o3 = new Uint8Array(32);
modL(o3, z5);
@@ -6292,7 +6292,7 @@ function crypto_edx25519_sign_detached(m5, skx, pkx) {
const h5 = new Uint8Array(64);
const r3 = new Uint8Array(64);
let i4, j4;
- const x6 = new Float64Array(64);
+ const x5 = new Float64Array(64);
const p4 = [gf(), gf(), gf(), gf()];
const sm = new Uint8Array(n2 + 64);
for (i4 = 0; i4 < n2; i4++)
@@ -6308,15 +6308,15 @@ function crypto_edx25519_sign_detached(m5, skx, pkx) {
crypto_hash(h5, sm, n2 + 64);
reduce(h5);
for (i4 = 0; i4 < 64; i4++)
- x6[i4] = 0;
+ x5[i4] = 0;
for (i4 = 0; i4 < 32; i4++)
- x6[i4] = r3[i4];
+ x5[i4] = r3[i4];
for (i4 = 0; i4 < 32; i4++) {
for (j4 = 0; j4 < 32; j4++) {
- x6[i4 + j4] += h5[i4] * skx[j4];
+ x5[i4 + j4] += h5[i4] * skx[j4];
}
}
- modL(sm.subarray(32), x6);
+ modL(sm.subarray(32), x5);
return sm.subarray(0, 64);
}
function crypto_edx25519_sign_detached_verify(msg, sig, publicKey) {
@@ -6339,14 +6339,14 @@ function crypto_edx25519_sign_detached_verify(msg, sig, publicKey) {
function loadBrowserPrng() {
const cr = typeof self !== "undefined" ? self.crypto || self.msCrypto : null;
const QUOTA = 65536;
- setPRNG(function(x6, n2) {
+ setPRNG(function(x5, n2) {
let i4;
const v3 = new Uint8Array(n2);
for (i4 = 0; i4 < n2; i4 += QUOTA) {
cr.getRandomValues(v3.subarray(i4, i4 + Math.min(n2 - i4, QUOTA)));
}
for (i4 = 0; i4 < n2; i4++)
- x6[i4] = v3[i4];
+ x5[i4] = v3[i4];
for (i4 = 0; i4 < v3.length; i4++)
v3[i4] = 0;
});
@@ -6665,6 +6665,13 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED"] = 2173] = "MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING"] = 2174] = "MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED"] = 2175] = "MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING"] = 2176] = "MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS"] = 2177] = "MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_INPUT_TOKENS_MISMATCH"] = 2178] = "MERCHANT_POST_ORDERS_ID_PAY_INPUT_TOKENS_MISMATCH";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ISSUE_SIG_INVALID"] = 2179] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ISSUE_SIG_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_USE_SIG_INVALID"] = 2180] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_USE_SIG_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH"] = 2181] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH"] = 2182] = "MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH"] = 2200] = "MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID"] = 2201] = "MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_TOKEN_FAMILY_CONFLICT"] = 2225] = "MERCHANT_POST_TOKEN_FAMILY_CONFLICT";
@@ -6709,6 +6716,7 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT"] = 2530] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID"] = 2531] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT"] = 2532] = "MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN"] = 2533] = "MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN"] = 2550] = "MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR"] = 2551] = "MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS"] = 2552] = "MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS";
@@ -6750,6 +6758,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS"] = 2910] = "MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS";
TalerErrorCode2[TalerErrorCode2["AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID"] = 3100] = "AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED"] = 3101] = "AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED";
+ TalerErrorCode2[TalerErrorCode2["AUDITOR_RESOURCE_NOT_FOUND"] = 3102] = "AUDITOR_RESOURCE_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["AUDITOR_URI_MISSING_PATH_COMPONENT"] = 3103] = "AUDITOR_URI_MISSING_PATH_COMPONENT";
TalerErrorCode2[TalerErrorCode2["BANK_SAME_ACCOUNT"] = 5101] = "BANK_SAME_ACCOUNT";
TalerErrorCode2[TalerErrorCode2["BANK_UNALLOWED_DEBIT"] = 5102] = "BANK_UNALLOWED_DEBIT";
TalerErrorCode2[TalerErrorCode2["BANK_NEGATIVE_NUMBER_AMOUNT"] = 5103] = "BANK_NEGATIVE_NUMBER_AMOUNT";
@@ -6794,6 +6804,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["BANK_CHALLENGE_NOT_FOUND"] = 5143] = "BANK_CHALLENGE_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["BANK_TAN_CHALLENGE_EXPIRED"] = 5144] = "BANK_TAN_CHALLENGE_EXPIRED";
TalerErrorCode2[TalerErrorCode2["BANK_NON_ADMIN_SET_TAN_CHANNEL"] = 5145] = "BANK_NON_ADMIN_SET_TAN_CHANNEL";
+ TalerErrorCode2[TalerErrorCode2["BANK_NON_ADMIN_SET_MIN_CASHOUT"] = 5146] = "BANK_NON_ADMIN_SET_MIN_CASHOUT";
+ TalerErrorCode2[TalerErrorCode2["BANK_CONVERSION_AMOUNT_TO_SMALL"] = 5147] = "BANK_CONVERSION_AMOUNT_TO_SMALL";
TalerErrorCode2[TalerErrorCode2["SYNC_ACCOUNT_UNKNOWN"] = 6100] = "SYNC_ACCOUNT_UNKNOWN";
TalerErrorCode2[TalerErrorCode2["SYNC_BAD_IF_NONE_MATCH"] = 6101] = "SYNC_BAD_IF_NONE_MATCH";
TalerErrorCode2[TalerErrorCode2["SYNC_BAD_IF_MATCH"] = 6102] = "SYNC_BAD_IF_MATCH";
@@ -6915,6 +6927,7 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["DONAU_GENERIC_KEYS_MISSING"] = 8607] = "DONAU_GENERIC_KEYS_MISSING";
TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_SIGNATURE_INVALID"] = 8608] = "DONAU_CHARITY_SIGNATURE_INVALID";
TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_NOT_FOUND"] = 8609] = "DONAU_CHARITY_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["DONAU_EXCEEDING_DONATION_LIMIT"] = 8610] = "DONAU_EXCEEDING_DONATION_LIMIT";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_GENERIC_ERROR"] = 9e3] = "LIBEUFIN_NEXUS_GENERIC_ERROR";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION"] = 9001] = "LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_SANDBOX_GENERIC_ERROR"] = 9500] = "LIBEUFIN_SANDBOX_GENERIC_ERROR";
@@ -7144,14 +7157,14 @@ var Amount = class _Amount {
};
function codecForAmountString() {
return {
- decode(x6, c4) {
- if (typeof x6 !== "string") {
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x6}`);
+ decode(x5, c4) {
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
}
- if (Amounts.parse(x6) === void 0) {
- throw new DecodingError(`invalid amount at ${renderContext(c4)} got "${x6}"`);
+ if (Amounts.parse(x5) === void 0) {
+ throw new DecodingError(`invalid amount at ${renderContext(c4)} got "${x5}"`);
}
- return x6;
+ return x5;
}
};
}
@@ -7213,7 +7226,7 @@ var Amounts = class _Amounts {
if (amounts.length <= 0) {
throw Error("can't sum zero amounts");
}
- const jsonAmounts = amounts.map((x6) => _Amounts.jsonifyAmount(x6));
+ const jsonAmounts = amounts.map((x5) => _Amounts.jsonifyAmount(x5));
return _Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));
}
static sumOrZero(currency, amounts) {
@@ -7223,7 +7236,7 @@ var Amounts = class _Amounts {
saturated: false
};
}
- const jsonAmounts = amounts.map((x6) => _Amounts.jsonifyAmount(x6));
+ const jsonAmounts = amounts.map((x5) => _Amounts.jsonifyAmount(x5));
return _Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));
}
/**
@@ -7248,8 +7261,8 @@ var Amounts = class _Amounts {
};
}
let fraction = firstJ.fraction % amountFractionalBase;
- for (const x6 of rest) {
- const xJ = _Amounts.jsonifyAmount(x6);
+ for (const x5 of rest) {
+ const xJ = _Amounts.jsonifyAmount(x5);
if (xJ.currency.toUpperCase() !== currency.toUpperCase()) {
throw Error(`Mismatched currency: ${xJ.currency} and ${currency}`);
}
@@ -7461,26 +7474,26 @@ var Amounts = class _Amounts {
saturated: false
};
}
- let x6 = a5;
+ let x5 = a5;
let acc = _Amounts.zeroOfCurrency(a5.currency);
while (n2 > 1) {
if (n2 % 2 == 0) {
n2 = n2 / 2;
} else {
n2 = (n2 - 1) / 2;
- const r23 = _Amounts.add(acc, x6);
+ const r23 = _Amounts.add(acc, x5);
if (r23.saturated) {
return r23;
}
acc = r23.amount;
}
- const r22 = _Amounts.add(x6, x6);
+ const r22 = _Amounts.add(x5, x5);
if (r22.saturated) {
return r22;
}
- x6 = r22.amount;
+ x5 = r22.amount;
}
- return _Amounts.add(acc, x6);
+ return _Amounts.add(acc, x5);
}
/**
* Check if the argument is a valid amount in string form.
@@ -9383,13 +9396,13 @@ function canonicalizeBaseUrl(url) {
if (!url.startsWith("http") && !url.startsWith("https")) {
url = "https://" + url;
}
- const x6 = new URL2(url);
- if (!x6.pathname.endsWith("/")) {
- x6.pathname = x6.pathname + "/";
+ const x5 = new URL2(url);
+ if (!x5.pathname.endsWith("/")) {
+ x5.pathname = x5.pathname + "/";
}
- x6.search = "";
- x6.hash = "";
- return x6.href;
+ x5.search = "";
+ x5.hash = "";
+ return x5.href;
}
function canonicalJson(obj) {
obj = JSON.parse(JSON.stringify(obj));
@@ -9427,8 +9440,8 @@ function strcmp(s1, s22) {
}
return 0;
}
-function j2s(x6) {
- return JSON.stringify(x6, void 0, 2);
+function j2s(x5) {
+ return JSON.stringify(x5, void 0, 2);
}
// ../taler-util/lib/logging.js
@@ -9674,11 +9687,11 @@ var ObjectCodecBuilder = class {
/**
* Define a property for the object.
*/
- property(x6, codec) {
+ property(x5, codec) {
if (!codec) {
throw Error("inner codec must be defined");
}
- this.propList.push({ name: x6, codec });
+ this.propList.push({ name: x5, codec });
return this;
}
/**
@@ -9690,18 +9703,18 @@ var ObjectCodecBuilder = class {
build(objectDisplayName) {
const propList = this.propList;
return {
- decode(x6, c4) {
+ decode(x5, c4) {
if (!c4) {
c4 = {
path: [`(${objectDisplayName})`]
};
}
- if (typeof x6 !== "object") {
- throw new DecodingError(`expected object for ${objectDisplayName} at ${renderContext(c4)} but got ${typeof x6}`);
+ if (typeof x5 !== "object") {
+ throw new DecodingError(`expected object for ${objectDisplayName} at ${renderContext(c4)} but got ${typeof x5}`);
}
const obj = {};
for (const prop of propList) {
- const propRawVal = x6[prop.name];
+ const propRawVal = x5[prop.name];
const propVal = prop.codec.decode(propRawVal, joinContext(c4, prop.name));
obj[prop.name] = propVal;
}
@@ -9737,13 +9750,13 @@ var UnionCodecBuilder = class {
const discriminator = this.discriminator;
const baseCodec = this.baseCodec;
return {
- decode(x6, c4) {
+ decode(x5, c4) {
if (!c4) {
c4 = {
path: [`(${objectDisplayName})`]
};
}
- const d5 = x6[discriminator];
+ const d5 = x5[discriminator];
if (d5 === void 0) {
throw new DecodingError(`expected tag for ${objectDisplayName} at ${renderContext(c4)}.${String(discriminator)}`);
}
@@ -9751,9 +9764,9 @@ var UnionCodecBuilder = class {
if (!alt) {
throw new DecodingError(`unknown tag for ${objectDisplayName} ${d5} at ${renderContext(c4)}.${String(discriminator)}`);
}
- const altDecoded = alt.codec.decode(x6);
+ const altDecoded = alt.codec.decode(x5);
if (baseCodec) {
- const baseDecoded = baseCodec.decode(x6, c4);
+ const baseDecoded = baseCodec.decode(x5, c4);
return { ...baseDecoded, ...altDecoded };
} else {
return altDecoded;
@@ -9778,13 +9791,13 @@ function codecForMap(innerCodec) {
throw Error("inner codec must be defined");
}
return {
- decode(x6, c4) {
+ decode(x5, c4) {
const map2 = {};
- if (typeof x6 !== "object") {
+ if (typeof x5 !== "object") {
throw new DecodingError(`expected object at ${renderContext(c4)}`);
}
- for (const i4 in x6) {
- map2[i4] = innerCodec.decode(x6[i4], joinContext(c4, `[${i4}]`));
+ for (const i4 in x5) {
+ map2[i4] = innerCodec.decode(x5[i4], joinContext(c4, `[${i4}]`));
}
return map2;
}
@@ -9795,13 +9808,13 @@ function codecForList(innerCodec) {
throw Error("inner codec must be defined");
}
return {
- decode(x6, c4) {
+ decode(x5, c4) {
const arr = [];
- if (!Array.isArray(x6)) {
+ if (!Array.isArray(x5)) {
throw new DecodingError(`expected array at ${renderContext(c4)}`);
}
- for (const i4 in x6) {
- arr.push(innerCodec.decode(x6[i4], joinContext(c4, `[${i4}]`)));
+ for (const i4 in x5) {
+ arr.push(innerCodec.decode(x5[i4], joinContext(c4, `[${i4}]`)));
}
return arr;
}
@@ -9809,82 +9822,81 @@ function codecForList(innerCodec) {
}
function codecForNumber() {
return {
- decode(x6, c4) {
- if (typeof x6 === "number") {
- return x6;
+ decode(x5, c4) {
+ if (typeof x5 === "number") {
+ return x5;
}
- throw new DecodingError(`expected number at ${renderContext(c4)} but got ${typeof x6}`);
+ throw new DecodingError(`expected number at ${renderContext(c4)} but got ${typeof x5}`);
}
};
}
function codecForBoolean() {
return {
- decode(x6, c4) {
- if (typeof x6 === "boolean") {
- return x6;
+ decode(x5, c4) {
+ if (typeof x5 === "boolean") {
+ return x5;
}
- throw new DecodingError(`expected boolean at ${renderContext(c4)} but got ${typeof x6}`);
+ throw new DecodingError(`expected boolean at ${renderContext(c4)} but got ${typeof x5}`);
}
};
}
function codecForString() {
return {
- decode(x6, c4) {
- if (typeof x6 === "string") {
- return x6;
+ decode(x5, c4) {
+ if (typeof x5 === "string") {
+ return x5;
}
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x6}`);
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
}
};
}
function codecForAny() {
return {
- decode(x6, c4) {
- return x6;
+ decode(x5, c4) {
+ return x5;
}
};
}
function codecForConstString(s5) {
return {
- decode(x6, c4) {
- if (x6 === s5) {
- return x6;
+ decode(x5, c4) {
+ if (x5 === s5) {
+ return x5;
}
- if (typeof x6 !== "string") {
- throw new DecodingError(`expected string constant "${s5}" at ${renderContext(c4)} but got ${typeof x6}`);
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string constant "${s5}" at ${renderContext(c4)} but got ${typeof x5}`);
}
- throw new DecodingError(`expected string constant "${s5}" at ${renderContext(c4)} but got string value "${x6}"`);
+ throw new DecodingError(`expected string constant "${s5}" at ${renderContext(c4)} but got string value "${x5}"`);
}
};
}
function codecOptional(innerCodec) {
return {
- decode(x6, c4) {
- if (x6 === void 0 || x6 === null) {
+ decode(x5, c4) {
+ if (x5 === void 0 || x5 === null) {
return void 0;
}
- return innerCodec.decode(x6, c4);
+ return innerCodec.decode(x5, c4);
}
};
}
function codecForEither(...alts) {
return {
- decode(x6, c4) {
+ decode(x5, c4) {
for (const alt of alts) {
try {
- return alt.decode(x6, c4);
+ return alt.decode(x5, c4);
} catch (e4) {
continue;
}
}
if (logger.shouldLogTrace()) {
- logger.trace(`offending value: ${j2s(x6)}`);
+ logger.trace(`offending value: ${j2s(x5)}`);
}
throw new DecodingError(`No alternative matched at at ${renderContext(c4)}`);
}
};
}
-var x = codecForEither(codecForString(), codecForNumber());
// ../taler-util/lib/sha256.js
var digestLength = 32;
@@ -10634,11 +10646,11 @@ function durationMul(d5, n2) {
return { d_ms: Math.round(d5.d_ms * n2) };
}
var codecForAbsoluteTime = {
- decode(x6, c4) {
- if (x6 === void 0) {
+ decode(x5, c4) {
+ if (x5 === void 0) {
throw Error(`got undefined and expected absolute time at ${renderContext(c4)}`);
}
- const t_ms = x6.t_ms;
+ const t_ms = x5.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
return { t_ms: "never", [opaque_AbsoluteTime]: true };
@@ -10650,11 +10662,11 @@ var codecForAbsoluteTime = {
}
};
var codecForTimestamp = {
- decode(x6, c4) {
- if (x6 === void 0) {
+ decode(x5, c4) {
+ if (x5 === void 0) {
throw Error(`got undefined and expected timestamp at ${renderContext(c4)}`);
}
- const t_ms = x6.t_ms;
+ const t_ms = x5.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
return { t_s: "never" };
@@ -10662,7 +10674,7 @@ var codecForTimestamp = {
} else if (typeof t_ms === "number") {
return { t_s: Math.floor(t_ms / 1e3) };
}
- const t_s = x6.t_s;
+ const t_s = x5.t_s;
if (typeof t_s === "string") {
if (t_s === "never") {
return { t_s: "never" };
@@ -10973,9 +10985,9 @@ var SignaturePurposeBuilder = class {
function buildSigPS(purposeNum) {
return new SignaturePurposeBuilder(purposeNum);
}
-function bigintToNaclArr(x6, size) {
+function bigintToNaclArr(x5, size) {
const byteArr = new Uint8Array(size);
- const arr = x6.toArray(256).value.reverse();
+ const arr = x5.toArray(256).value.reverse();
byteArr.set(arr, 0);
return byteArr;
}
@@ -11143,10 +11155,10 @@ var AgeRestriction;
return {
commitment: {
mask: ageMask,
- publicKeys: pubs.map((x6) => encodeCrock(x6))
+ publicKeys: pubs.map((x5) => encodeCrock(x5))
},
proof: {
- privateKeys: privs.map((x6) => encodeCrock(x6))
+ privateKeys: privs.map((x5) => encodeCrock(x5))
}
};
}
@@ -11183,10 +11195,10 @@ var AgeRestriction;
return {
commitment: {
mask: ageMask,
- publicKeys: pubs.map((x6) => encodeCrock(x6))
+ publicKeys: pubs.map((x5) => encodeCrock(x5))
},
proof: {
- privateKeys: privs.map((x6) => encodeCrock(x6))
+ privateKeys: privs.map((x5) => encodeCrock(x5))
}
};
}
@@ -11217,10 +11229,10 @@ var AgeRestriction;
return {
commitment: {
mask: commitmentProof.commitment.mask,
- publicKeys: newPubs.map((x6) => encodeCrock(x6))
+ publicKeys: newPubs.map((x5) => encodeCrock(x5))
},
proof: {
- privateKeys: newPrivs.map((x6) => encodeCrock(x6))
+ privateKeys: newPrivs.map((x5) => encodeCrock(x5))
}
};
}
@@ -11464,14 +11476,14 @@ function generateFakeSegwitAddress(reservePub, addr) {
// ../taler-util/lib/payto.js
function codecForPaytoString() {
return {
- decode(x6, c4) {
- if (typeof x6 !== "string") {
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x6}`);
+ decode(x5, c4) {
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
}
- if (!x6.startsWith(paytoPfx)) {
- throw new DecodingError(`expected start with payto at ${renderContext(c4)} but got "${x6}"`);
+ if (!x5.startsWith(paytoPfx)) {
+ throw new DecodingError(`expected start with payto at ${renderContext(c4)} but got "${x5}"`);
}
- return x6;
+ return x5;
}
};
}
@@ -11698,6 +11710,34 @@ async function readSuccessResponseJsonOrErrorCode(httpResponse, codec) {
response: parsedResponse
};
}
+async function readResponseJsonOrErrorCode(httpResponse, codec) {
+ let respJson;
+ try {
+ respJson = await httpResponse.json();
+ } catch (e4) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e4.toString()
+ }, "Couldn't parse JSON format from response");
+ }
+ let parsedResponse;
+ try {
+ parsedResponse = codec.decode(respJson);
+ } catch (e4) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e4.toString()
+ }, "Response invalid");
+ }
+ return {
+ isError: !(httpResponse.status >= 200 && httpResponse.status < 300),
+ response: parsedResponse
+ };
+}
function throwUnexpectedRequestError(httpResponse, talerErrorResponse) {
throw TalerError.fromDetail(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, {
requestUrl: httpResponse.requestUrl,
@@ -11754,7 +11794,7 @@ function opEmptySuccess(resp) {
return { type: "ok", body: void 0 };
}
async function opKnownAlternativeFailure(resp, s5, codec) {
- const body = await readSuccessResponseJsonOrThrow(resp, codec);
+ const body = (await readResponseJsonOrErrorCode(resp, codec)).response;
return { type: "fail", case: s5, body };
}
async function opKnownHttpFailure(s5, resp) {
@@ -11776,14 +11816,14 @@ function opUnknownFailure(resp, error2) {
// ../taler-util/lib/taleruri.js
function codecForTalerUriString() {
return {
- decode(x6, c4) {
- if (typeof x6 !== "string") {
- throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x6}`);
+ decode(x5, c4) {
+ if (typeof x5 !== "string") {
+ throw new DecodingError(`expected string at ${renderContext(c4)} but got ${typeof x5}`);
}
- if (parseTalerUri(x6) === void 0) {
- throw new DecodingError(`invalid taler URI at ${renderContext(c4)} but got "${x6}"`);
+ if (parseTalerUri(x5) === void 0) {
+ throw new DecodingError(`invalid taler URI at ${renderContext(c4)} but got "${x5}"`);
}
- return x6;
+ return x5;
}
};
}
@@ -11929,7 +11969,7 @@ function parseTalerUri(string) {
const actionStart = https ? 8 : 13;
const actionEnd = string.indexOf("/", actionStart + 1);
const action = string.substring(actionStart, actionEnd);
- const found = Object.values(TalerUriAction).find((x6) => x6 === action);
+ const found = Object.values(TalerUriAction).find((x5) => x5 === action);
if (!found)
return void 0;
return parsers[found](string);
@@ -12224,17 +12264,20 @@ function getUrlInfo(baseUrl, params = {}) {
}
// ../taler-util/lib/http-client/types.js
+function createRFC8959AccessTokenEncoded(token) {
+ return token.startsWith("secret-token:") ? token : `secret-token:${encodeURIComponent(token)}`;
+}
var codecForAccessToken = codecForString;
var codecForTokenSuccessResponse = () => buildCodecForObject().property("access_token", codecForAccessToken()).property("expiration", codecForTimestamp).build("TalerAuthentication.TokenSuccessResponse");
var codecForTokenSuccessResponseMerchant = () => buildCodecForObject().property("token", codecForAccessToken()).property("expiration", codecForTimestamp).build("TalerAuthentication.TokenSuccessResponseMerchant");
var codecForCurrencySpecificiation = () => buildCodecForObject().property("name", codecForString()).property("num_fractional_input_digits", codecForNumber()).property("num_fractional_normal_digits", codecForNumber()).property("num_fractional_trailing_zero_digits", codecForNumber()).property("alt_unit_names", codecForMap(codecForString())).build("CurrencySpecification");
-var codecForCoreBankConfig = () => buildCodecForObject().property("name", codecForConstString("libeufin-bank")).property("version", codecForString()).property("bank_name", codecForString()).property("allow_conversion", codecForBoolean()).property("allow_registrations", codecForBoolean()).property("allow_deletions", codecForBoolean()).property("allow_edit_name", codecForBoolean()).property("allow_edit_cashout_payto_uri", codecForBoolean()).property("default_debit_threshold", codecForAmountString()).property("currency", codecForString()).property("currency_specification", codecForCurrencySpecificiation()).property("supported_tan_channels", codecForList(codecForEither(codecForConstString(TalerCorebankApi.TanChannel.SMS), codecForConstString(TalerCorebankApi.TanChannel.EMAIL)))).property("wire_type", codecForString()).build("TalerCorebankApi.Config");
+var codecForCoreBankConfig = () => buildCodecForObject().property("name", codecForConstString("libeufin-bank")).property("version", codecForString()).property("bank_name", codecForString()).property("base_url", codecForString()).property("allow_conversion", codecForBoolean()).property("allow_registrations", codecForBoolean()).property("allow_deletions", codecForBoolean()).property("allow_edit_name", codecForBoolean()).property("allow_edit_cashout_payto_uri", codecForBoolean()).property("default_debit_threshold", codecForAmountString()).property("currency", codecForString()).property("currency_specification", codecForCurrencySpecificiation()).property("supported_tan_channels", codecForList(codecForEither(codecForConstString(TalerCorebankApi.TanChannel.SMS), codecForConstString(TalerCorebankApi.TanChannel.EMAIL)))).property("wire_type", codecForString()).build("TalerCorebankApi.Config");
var codecForBalance = () => buildCodecForObject().property("amount", codecForAmountString()).property("credit_debit_indicator", codecForEither(codecForConstString("credit"), codecForConstString("debit"))).build("TalerCorebankApi.Balance");
var codecForPublicAccount = () => buildCodecForObject().property("username", codecForString()).property("balance", codecForBalance()).property("payto_uri", codecForPaytoString()).property("is_taler_exchange", codecForBoolean()).property("row_id", codecOptional(codecForNumber())).build("TalerCorebankApi.PublicAccount");
var codecForPublicAccountsResponse = () => buildCodecForObject().property("public_accounts", codecForList(codecForPublicAccount())).build("TalerCorebankApi.PublicAccountsResponse");
-var codecForAccountMinimalData = () => buildCodecForObject().property("username", codecForString()).property("name", codecForString()).property("payto_uri", codecForPaytoString()).property("balance", codecForBalance()).property("debit_threshold", codecForAmountString()).property("is_public", codecForBoolean()).property("is_taler_exchange", codecForBoolean()).property("row_id", codecOptional(codecForNumber())).build("TalerCorebankApi.AccountMinimalData");
+var codecForAccountMinimalData = () => buildCodecForObject().property("username", codecForString()).property("name", codecForString()).property("payto_uri", codecForPaytoString()).property("balance", codecForBalance()).property("row_id", codecForNumber()).property("debit_threshold", codecForAmountString()).property("min_cashout", codecOptional(codecForAmountString())).property("is_public", codecForBoolean()).property("is_taler_exchange", codecForBoolean()).property("status", codecOptional(codecForEither(codecForConstString("active"), codecForConstString("deleted")))).build("TalerCorebankApi.AccountMinimalData");
var codecForListBankAccountsResponse = () => buildCodecForObject().property("accounts", codecForList(codecForAccountMinimalData())).build("TalerCorebankApi.ListBankAccountsResponse");
-var codecForAccountData = () => buildCodecForObject().property("name", codecForString()).property("balance", codecForBalance()).property("payto_uri", codecForPaytoString()).property("debit_threshold", codecForAmountString()).property("contact_data", codecOptional(codecForChallengeContactData())).property("cashout_payto_uri", codecOptional(codecForPaytoString())).property("is_public", codecForBoolean()).property("is_taler_exchange", codecForBoolean()).property("tan_channel", codecOptional(codecForEither(codecForConstString(TalerCorebankApi.TanChannel.SMS), codecForConstString(TalerCorebankApi.TanChannel.EMAIL)))).build("TalerCorebankApi.AccountData");
+var codecForAccountData = () => buildCodecForObject().property("name", codecForString()).property("balance", codecForBalance()).property("payto_uri", codecForPaytoString()).property("debit_threshold", codecForAmountString()).property("min_cashout", codecOptional(codecForAmountString())).property("contact_data", codecOptional(codecForChallengeContactData())).property("cashout_payto_uri", codecOptional(codecForPaytoString())).property("is_public", codecForBoolean()).property("is_taler_exchange", codecForBoolean()).property("tan_channel", codecOptional(codecForEither(codecForConstString(TalerCorebankApi.TanChannel.SMS), codecForConstString(TalerCorebankApi.TanChannel.EMAIL)))).property("status", codecOptional(codecForEither(codecForConstString("active"), codecForConstString("deleted")))).build("TalerCorebankApi.AccountData");
var codecForChallengeContactData = () => buildCodecForObject().property("email", codecOptional(codecForString())).property("phone", codecOptional(codecForString())).build("TalerCorebankApi.ChallengeContactData");
var codecForWithdrawalPublicInfo = () => buildCodecForObject().property("status", codecForEither(codecForConstString("pending"), codecForConstString("selected"), codecForConstString("aborted"), codecForConstString("confirmed"))).property("amount", codecForAmountString()).property("username", codecForString()).property("selected_reserve_pub", codecOptional(codecForString())).property("selected_exchange_account", codecOptional(codecForPaytoString())).build("TalerCorebankApi.WithdrawalPublicInfo");
var codecForBankAccountTransactionsResponse = () => buildCodecForObject().property("transactions", codecForList(codecForBankAccountTransactionInfo())).build("TalerCorebankApi.BankAccountTransactionsResponse");
@@ -12259,7 +12302,7 @@ var codecForConversionInfo = () => buildCodecForObject().property("cashin_fee",
var codecForConversionBankConfig = () => buildCodecForObject().property("name", codecForConstString("taler-conversion-info")).property("version", codecForString()).property("regional_currency", codecForString()).property("regional_currency_specification", codecForCurrencySpecificiation()).property("fiat_currency", codecForString()).property("fiat_currency_specification", codecForCurrencySpecificiation()).property("conversion_rate", codecForConversionInfo()).build("ConversionBankConfig.IntegrationConfig");
var codecForDecimalNumber = codecForString;
var TalerCorebankApi;
-(function(TalerCorebankApi7) {
+(function(TalerCorebankApi8) {
let MonitorTimeframeParam;
(function(MonitorTimeframeParam2) {
MonitorTimeframeParam2[MonitorTimeframeParam2["hour"] = 0] = "hour";
@@ -12267,12 +12310,12 @@ var TalerCorebankApi;
MonitorTimeframeParam2[MonitorTimeframeParam2["month"] = 2] = "month";
MonitorTimeframeParam2[MonitorTimeframeParam2["year"] = 3] = "year";
MonitorTimeframeParam2[MonitorTimeframeParam2["decade"] = 4] = "decade";
- })(MonitorTimeframeParam = TalerCorebankApi7.MonitorTimeframeParam || (TalerCorebankApi7.MonitorTimeframeParam = {}));
+ })(MonitorTimeframeParam = TalerCorebankApi8.MonitorTimeframeParam || (TalerCorebankApi8.MonitorTimeframeParam = {}));
let TanChannel3;
(function(TanChannel4) {
TanChannel4["SMS"] = "sms";
TanChannel4["EMAIL"] = "email";
- })(TanChannel3 = TalerCorebankApi7.TanChannel || (TalerCorebankApi7.TanChannel = {}));
+ })(TanChannel3 = TalerCorebankApi8.TanChannel || (TalerCorebankApi8.TanChannel = {}));
})(TalerCorebankApi || (TalerCorebankApi = {}));
var TalerExchangeApi;
(function(TalerExchangeApi2) {
@@ -12568,31 +12611,31 @@ var ContractTermsUtil;
}
} else if (typeof dup === "object" && dup != null) {
if (typeof dup.$forgettable === "object") {
- for (const x6 of Object.keys(dup.$forgettable)) {
- if (!pred([...path, x6])) {
+ for (const x5 of Object.keys(dup.$forgettable)) {
+ if (!pred([...path, x5])) {
continue;
}
if (!dup.$forgotten) {
dup.$forgotten = {};
}
- if (!dup.$forgotten[x6]) {
- const membValCanon = stringToBytes(canonicalJson(scrub(dup[x6])) + "\0");
- const membSalt = stringToBytes(dup.$forgettable[x6] + "\0");
+ if (!dup.$forgotten[x5]) {
+ const membValCanon = stringToBytes(canonicalJson(scrub(dup[x5])) + "\0");
+ const membSalt = stringToBytes(dup.$forgettable[x5] + "\0");
const h5 = kdf(64, membValCanon, membSalt, new Uint8Array([]));
- dup.$forgotten[x6] = encodeCrock(h5);
+ dup.$forgotten[x5] = encodeCrock(h5);
}
- delete dup[x6];
- delete dup.$forgettable[x6];
+ delete dup[x5];
+ delete dup.$forgettable[x5];
}
if (Object.keys(dup.$forgettable).length === 0) {
delete dup.$forgettable;
}
}
- for (const x6 of Object.keys(dup)) {
- if (x6.startsWith("$")) {
+ for (const x5 of Object.keys(dup)) {
+ if (x5.startsWith("$")) {
continue;
}
- dup[x6] = forgetAllImpl(dup[x6], [...path, x6], pred);
+ dup[x5] = forgetAllImpl(dup[x5], [...path, x5], pred);
}
}
return dup;
@@ -12620,11 +12663,11 @@ var ContractTermsUtil;
}
}
}
- for (const x6 of Object.keys(dup)) {
- if (x6.startsWith("$")) {
+ for (const x5 of Object.keys(dup)) {
+ if (x5.startsWith("$")) {
continue;
}
- dup[x6] = saltForgettable(dup[x6]);
+ dup[x5] = saltForgettable(dup[x5]);
}
}
return dup;
@@ -12645,7 +12688,7 @@ var ContractTermsUtil;
return true;
}
if (Array.isArray(anyJson)) {
- return anyJson.every((x6) => validateForgettable(x6));
+ return anyJson.every((x5) => validateForgettable(x5));
}
if (typeof anyJson === "object") {
for (const k5 of Object.keys(anyJson)) {
@@ -12790,7 +12833,7 @@ function getErrorDetailFromException(e4) {
const err = makeErrorDetail(TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION, {}, `unexpected exception (not an exception, ${excString})`);
return err;
}
-function assertUnreachable(x6) {
+function assertUnreachable(x5) {
throw new Error("Didn't expect to get here");
}
@@ -12798,8 +12841,8 @@ function assertUnreachable(x6) {
var fnutil;
(function(fnutil2) {
function all(arr, f3) {
- for (const x6 of arr) {
- if (!f3(x6)) {
+ for (const x5 of arr) {
+ if (!f3(x5)) {
return false;
}
}
@@ -12807,8 +12850,8 @@ var fnutil;
}
fnutil2.all = all;
function any(arr, f3) {
- for (const x6 of arr) {
- if (f3(x6)) {
+ for (const x5 of arr) {
+ if (f3(x5)) {
return true;
}
}
@@ -12869,6 +12912,7 @@ var TransactionMinorState;
TransactionMinorState2["RefundAvailable"] = "refund-available";
TransactionMinorState2["AcceptRefund"] = "accept-refund";
TransactionMinorState2["PaidByOther"] = "paid-by-other";
+ TransactionMinorState2["CompletedByOtherWallet"] = "completed-by-other-wallet";
})(TransactionMinorState || (TransactionMinorState = {}));
var TransactionAction;
(function(TransactionAction2) {
@@ -12886,7 +12930,6 @@ var TransactionType;
TransactionType2["Payment"] = "payment";
TransactionType2["Refund"] = "refund";
TransactionType2["Refresh"] = "refresh";
- TransactionType2["Reward"] = "reward";
TransactionType2["Deposit"] = "deposit";
TransactionType2["PeerPushDebit"] = "peer-push-debit";
TransactionType2["PeerPushCredit"] = "peer-push-credit";
@@ -13054,7 +13097,7 @@ var ProviderPaymentType;
// ../taler-util/lib/http-client/utils.js
function makeBearerTokenAuthHeader(token) {
- return `Bearer secret-token:${token}`;
+ return `Bearer ${token}`;
}
function addPaginationParams(url, pagination) {
if (!pagination)
@@ -13076,6 +13119,23 @@ function addLongPollingParam(url, param) {
var nullEvictor = {
notifySuccess: () => Promise.resolve()
};
+var IdempotencyRetry = class _IdempotencyRetry {
+ constructor(timesLeft, maxTimesLeft) {
+ this.timesLeft = timesLeft;
+ this.maxTries = maxTimesLeft;
+ this.uid = encodeCrock(getRandomBytes(32));
+ }
+ static tryFiveTimes() {
+ return new _IdempotencyRetry(5, 5);
+ }
+ next() {
+ const left = this.timesLeft - 1;
+ if (left <= 0) {
+ return void 0;
+ }
+ return new _IdempotencyRetry(left, this.maxTries);
+ }
+};
// ../taler-util/lib/http-client/bank-conversion.js
var TalerBankConversionCacheEviction;
@@ -13380,6 +13440,8 @@ var TalerCoreBankHttpClient = class {
return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:
return opKnownTalerFailure(details.code, details);
+ case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:
return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:
@@ -13463,6 +13525,8 @@ var TalerCoreBankHttpClient = class {
return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:
return opKnownTalerFailure(details.code, details);
+ case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:
return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_MISSING_TAN_INFO:
@@ -13644,8 +13708,11 @@ var TalerCoreBankHttpClient = class {
* https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions
*
*/
- async createTransaction(auth, body, cid) {
+ async createTransaction(auth, body, idempotencyCheck, cid) {
const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);
+ if (idempotencyCheck) {
+ body.request_uid = idempotencyCheck.uid;
+ }
const resp = await this.httpLib.fetch(url.href, {
method: "POST",
headers: {
@@ -13676,6 +13743,12 @@ var TalerCoreBankHttpClient = class {
return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_UNALLOWED_DEBIT:
return opKnownTalerFailure(details.code, details);
+ case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:
+ if (!idempotencyCheck) {
+ return opKnownTalerFailure(details.code, details);
+ }
+ const nextRetry = idempotencyCheck.next();
+ return this.createTransaction(auth, body, nextRetry, cid);
default:
return opUnknownFailure(resp, details);
}
@@ -13830,6 +13903,8 @@ var TalerCoreBankHttpClient = class {
switch (details.code) {
case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:
return opKnownTalerFailure(details.code, details);
+ case TalerErrorCode.BANK_CONVERSION_AMOUNT_TO_SMALL:
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_BAD_CONVERSION:
return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_UNALLOWED_DEBIT:
@@ -14110,6 +14185,18 @@ var TalerMerchantManagementCacheEviction;
TalerMerchantManagementCacheEviction2[TalerMerchantManagementCacheEviction2["DELETE_INSTANCE"] = 28] = "DELETE_INSTANCE";
})(TalerMerchantManagementCacheEviction || (TalerMerchantManagementCacheEviction = {}));
+// ../taler-util/lib/http-client/challenger.js
+var ChallengerCacheEviction;
+(function(ChallengerCacheEviction2) {
+ ChallengerCacheEviction2[ChallengerCacheEviction2["CREATE_CHALLENGE"] = 0] = "CREATE_CHALLENGE";
+})(ChallengerCacheEviction || (ChallengerCacheEviction = {}));
+
+// ../taler-util/lib/http-client/exchange.js
+var TalerExchangeCacheEviction;
+(function(TalerExchangeCacheEviction2) {
+ TalerExchangeCacheEviction2[TalerExchangeCacheEviction2["CREATE_DESCISION"] = 0] = "CREATE_DESCISION";
+})(TalerExchangeCacheEviction || (TalerExchangeCacheEviction = {}));
+
// ../taler-util/lib/i18n.js
var jedLib = __toESM(require_jed(), 1);
var logger9 = new Logger("i18n/index.ts");
@@ -14158,13 +14245,13 @@ function replacePlaceholderWithValues(translation, childArray) {
const tr = translation.split(/%(\d+)\$s/);
const placeholderChildren = [];
for (let i4 = 0; i4 < childArray.length; i4++) {
- const x6 = childArray[i4];
- if (x6 === void 0) {
+ const x5 = childArray[i4];
+ if (x5 === void 0) {
continue;
- } else if (typeof x6 === "string") {
+ } else if (typeof x5 === "string") {
continue;
} else {
- placeholderChildren.push(x6);
+ placeholderChildren.push(x5);
}
}
const result = [];
@@ -14210,6 +14297,7 @@ var NotificationType;
NotificationType2["TransactionStateTransition"] = "transaction-state-transition";
NotificationType2["WithdrawalOperationTransition"] = "withdrawal-operation-transition";
NotificationType2["ExchangeStateTransition"] = "exchange-state-transition";
+ NotificationType2["Idle"] = "idle";
NotificationType2["TaskObservabilityEvent"] = "task-observability-event";
NotificationType2["RequestObservabilityEvent"] = "request-observability-event";
})(NotificationType || (NotificationType = {}));
@@ -14457,6 +14545,10 @@ init_hooks_module();
init_preact_module();
init_hooks_module();
init_preact_module();
+init_hooks_module();
+init_preact_module();
+init_hooks_module();
+init_preact_module();
init_preact_module();
init_preact_module();
init_hooks_module();
@@ -14476,19 +14568,17 @@ init_preact_module();
init_hooks_module();
init_preact_module();
init_preact_module();
-init_hooks_module();
-init_compat_module();
init_preact_module();
init_hooks_module();
init_preact_module();
-init_preact_module();
+init_hooks_module();
init_preact_module();
init_preact_module();
init_preact_module();
init_hooks_module();
init_preact_module();
+init_compat_module();
init_preact_module();
-init_hooks_module();
init_preact_module();
init_preact_module();
init_preact_module();
@@ -14502,6 +14592,7 @@ init_preact_module();
init_preact_module();
init_preact_module();
init_preact_module();
+init_preact_module();
init_hooks_module();
var __defProp2 = Object.defineProperty;
var __export2 = (target, all) => {
@@ -14848,10 +14939,10 @@ var GLOBAL_NOTIFICATION_TIMEOUT = Duration.fromSpec({
seconds: 5
});
function updateInStorage(n2) {
- const h41 = hash3(n2);
+ const h43 = hash3(n2);
const mem = storage3.get(NOTIFICATION_KEY) ?? /* @__PURE__ */ new Map();
const newState = new Map(mem);
- newState.set(h41, n2);
+ newState.set(h43, n2);
storage3.set(NOTIFICATION_KEY, newState);
}
function notify(notif) {
@@ -15390,6 +15481,7 @@ var BrowserFetchHttpLib = class {
const requestHeader = options?.headers;
const requestTimeout = options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);
const requestCancel = options?.cancellationToken;
+ const requestRedirect = options?.redirect;
const parsedUrl = new URL(requestUrl);
if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {
throw TalerError.fromDetail(
@@ -15438,7 +15530,8 @@ var BrowserFetchHttpLib = class {
headers: requestHeadersMap,
body: myBody,
method: requestMethod,
- signal: controller.signal
+ signal: controller.signal,
+ redirect: requestRedirect
});
if (timeoutId) {
clearTimeout(timeoutId);
@@ -15541,15 +15634,12 @@ function findMatch(pagesMap, pageList, path, params) {
const found = pagesMap[name].pattern.exec(path);
if (found !== null) {
const values = {};
- Object.entries(params).forEach(([key, value]) => {
- values[key] = value;
- });
if (found.groups !== void 0) {
Object.entries(found.groups).forEach(([key, value]) => {
values[key] = value;
});
}
- return { name, parent: pagesMap, values };
+ return { name, parent: pagesMap, values, params };
}
}
return void 0;
@@ -22839,20 +22929,25 @@ function buildBankApiClient(url, evictors) {
cancelRequest: httpLib.cancelRequest
};
}
+var ChallengerContext = B(void 0);
var MerchantContext = B(void 0);
+var ExchangeContext = B(void 0);
+var Context3 = B(void 0);
+var useNavigationContext = () => q2(Context3);
function useCurrentLocation(pagesMap) {
const pageList = Object.keys(pagesMap);
const { path, params } = useNavigationContext();
return findMatch(pagesMap, pageList, path, params);
}
-var Context3 = B(void 0);
-var useNavigationContext = () => q2(Context3);
function getPathAndParamsFromWindow() {
const path = typeof window !== "undefined" ? window.location.hash.substring(1) : "/";
const params = {};
if (typeof window !== "undefined") {
for (const [key, value] of new URLSearchParams(window.location.search)) {
- params[key] = value;
+ if (!params[key]) {
+ params[key] = [];
+ }
+ params[key].push(value);
}
}
return { path, params };
@@ -22939,8 +23034,8 @@ function compose(hook, viewMap) {
return ComposedComponent;
}
return (p4) => {
- const h41 = withHook(() => hook(p4));
- return h41();
+ const h43 = withHook(() => hook(p4));
+ return h43();
};
}
function recursive(hook) {
@@ -22956,8 +23051,8 @@ function recursive(hook) {
return ComposedComponent;
}
return (p4) => {
- const h41 = withHook(() => hook(p4));
- return h41();
+ const h43 = withHook(() => hook(p4));
+ return h43();
};
}
function saveVNodeForInspection(obj) {
@@ -23313,56 +23408,66 @@ function Button({
}) {
const { i18n: i18n2 } = useTranslationContext();
const [running, setRunning] = p3(false);
- return /* @__PURE__ */ h("button", { ...rest, disabled: disabled || running, onClick: (e22) => {
- e22.preventDefault();
- if (!handler) {
- return;
- }
- setRunning(true);
- handler.onClick().then((resp) => {
- if (resp) {
- if (resp.type === "ok") {
- const result = resp;
- const msg = handler.onOperationSuccess(result);
- if (msg) {
- notifyInfo(msg);
- }
- }
- if (resp.type === "fail") {
- const error2 = resp;
- const title = handler.onOperationFail(error2);
- handler.onNotification({
- title,
- type: "error",
- description: error2.detail.hint,
- debug: error2.detail,
- when: AbsoluteTime.now()
- });
+ return /* @__PURE__ */ h(
+ "button",
+ {
+ ...rest,
+ disabled: disabled || running,
+ onClick: (e22) => {
+ e22.preventDefault();
+ if (!handler) {
+ return;
}
- }
- if (handler.onOperationComplete) {
- handler.onOperationComplete();
- }
- setRunning(false);
- }).catch((error2) => {
- console.error(error2);
- if (error2 instanceof TalerError) {
- handler.onNotification(buildUnifiedRequestErrorMessage(i18n2, error2));
- } else {
- const description = error2 instanceof Error ? error2.message : String(error2);
- handler.onNotification({
- title: i18n2.str`Operation failed`,
- type: "error",
- description,
- when: AbsoluteTime.now()
+ setRunning(true);
+ handler.onClick().then((resp) => {
+ if (resp) {
+ if (resp.type === "ok") {
+ const result = resp;
+ const msg = handler.onOperationSuccess(result);
+ if (msg) {
+ notifyInfo(msg);
+ }
+ }
+ if (resp.type === "fail") {
+ const d32 = "detail" in resp ? resp.detail : void 0;
+ const title = !handler.onOperationFail ? "Unexpected error." : handler.onOperationFail(resp);
+ handler.onNotification({
+ title,
+ type: "error",
+ description: d32 && d32.hint ? d32.hint : void 0,
+ debug: d32,
+ when: AbsoluteTime.now()
+ });
+ }
+ }
+ if (handler.onOperationComplete) {
+ handler.onOperationComplete();
+ }
+ setRunning(false);
+ }).catch((error2) => {
+ console.error(error2);
+ if (error2 instanceof TalerError) {
+ handler.onNotification(
+ buildUnifiedRequestErrorMessage(i18n2, error2)
+ );
+ } else {
+ const description = error2 instanceof Error ? error2.message : String(error2);
+ handler.onNotification({
+ title: i18n2.str`Operation failed`,
+ type: "error",
+ description,
+ when: AbsoluteTime.now()
+ });
+ }
+ if (handler.onOperationComplete) {
+ handler.onOperationComplete();
+ }
+ setRunning(false);
});
}
- if (handler.onOperationComplete) {
- handler.onOperationComplete();
- }
- setRunning(false);
- });
- } }, running ? /* @__PURE__ */ h(Wait, null) : children);
+ },
+ running ? /* @__PURE__ */ h(Wait, null) : children
+ );
}
function Wait() {
return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("style", null, `
@@ -23419,7 +23524,7 @@ function AttentionByType({ msg }) {
}, timeout: GLOBAL_NOTIFICATION_TIMEOUT });
}
}
-var FormContext = B({});
+var FormContext = B(void 0);
// src/app.tsx
init_preact_module();
@@ -24246,7 +24351,7 @@ var useSWRHandler = (_key, fetcher, config) => {
refreshWhenOffline,
key
]);
- x3(returnedData);
+ x2(returnedData);
if (suspense && isUndefined(data) && key) {
if (!IS_REACT_LEGACY && IS_SERVER) {
throw new Error("Fallback data is required when using suspense in SSR.");
@@ -24706,12 +24811,13 @@ function PaytoWireTransferForm({
}
const puri = payto_uri;
const sAmount = sendingAmount;
- await handleError(async () => {
+ await handleError(async function createTransactionHandleError() {
const request = {
payto_uri: puri,
amount: sAmount
};
- const resp = await api.createTransaction(credentials, request);
+ const check = IdempotencyRetry.tryFiveTimes();
+ const resp = await api.createTransaction(credentials, request, check);
mutate(() => true);
if (resp.type === "fail") {
switch (resp.case) {
@@ -24771,6 +24877,15 @@ function PaytoWireTransferForm({
debug: resp.detail,
when: AbsoluteTime.now()
});
+ case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED: {
+ return notify2({
+ type: "error",
+ title: i18n2.str`Tried to create the transaction ${check.maxTries} times with different UID but failed.`,
+ description: resp.detail.hint,
+ debug: resp.detail,
+ when: AbsoluteTime.now()
+ });
+ }
case HttpStatusCode.Accepted: {
updateBankState("currentChallenge", {
operation: "create-transaction",
@@ -28277,6 +28392,8 @@ function RegistrationForm({
return i18n2.str`Authentication channel is not supported.`;
case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:
return i18n2.str`Only admin is allow to set debt limit.`;
+ case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:
+ return i18n2.str`Only the administrator can change the minimun cashout limit.`;
case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:
return i18n2.str`Only admin can create accounts with second factor authentication.`;
}
@@ -28512,7 +28629,7 @@ function LoginForm({
refreshable: true
}),
(result) => {
- session.logIn({ username, token: result.body.access_token });
+ session.logIn({ username, token: createRFC8959AccessTokenEncoded(result.body.access_token) });
},
(fail) => {
switch (fail.case) {
@@ -28939,7 +29056,7 @@ function useComponentState2({
amount,
subject
};
- }).filter((x6) => x6 !== void 0);
+ }).filter((x5) => x5 !== void 0);
return {
status: "ready",
error: void 0,
@@ -30082,7 +30199,7 @@ var formatters2 = {
}
},
// Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
- x: function x5(date, token, _localize, options) {
+ x: function x4(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
switch (token) {
@@ -32510,8 +32627,8 @@ var AccountPage = utils_exports.compose(
// src/pages/BankFrame.tsx
init_preact_module();
init_hooks_module();
-var GIT_HASH = true ? "de32e0217c54f26a54813f56c378155bcacf4416" : void 0;
-var VERSION = true ? "0.9.3-dev.29" : void 0;
+var GIT_HASH = true ? "6fd830ad57fe12ce6acac453f523dcf00f71a5bb" : void 0;
+var VERSION = true ? "0.10.7" : void 0;
function BankFrame({
children,
account,
@@ -33559,7 +33676,7 @@ function SolveChallengePage({
case "update-password":
return await api.updatePassword(creds, ch2.request, ch2.id);
case "create-transaction":
- return await api.createTransaction(creds, ch2.request, ch2.id);
+ return await api.createTransaction(creds, ch2.request, void 0, ch2.id);
case "confirm-withdrawal":
return await api.confirmWithdrawalById(creds, ch2.request, ch2.id);
case "create-cashout":
@@ -34302,6 +34419,7 @@ init_hooks_module();
function CreateCashout({
account: accountName,
onAuthorizationRequired,
+ onCashout,
focus,
routeHere,
routeClose
@@ -34317,8 +34435,7 @@ function CreateCashout({
const [, updateBankState] = useBankState();
const {
lib: { bank: api },
- config,
- hints
+ config
} = useBankCoreApiContext();
const [form, setForm] = p3({ isDebit: true });
const [notification, notify2, handleError] = useLocalNotification();
@@ -34369,11 +34486,6 @@ function CreateCashout({
if (!conversionInfo) {
return /* @__PURE__ */ h("div", null, "conversion enabled but server replied without conversion_rate");
}
- const account = {
- balance: Amounts.parseOrThrow(resultAccount.body.balance.amount),
- balanceIsDebit: resultAccount.body.balance.credit_debit_indicator == "debit",
- debitThreshold: Amounts.parseOrThrow(resultAccount.body.debit_threshold)
- };
const {
fiat_currency,
regional_currency,
@@ -34382,6 +34494,12 @@ function CreateCashout({
} = info.body;
const regionalZero = Amounts.zeroOfCurrency(regional_currency);
const fiatZero = Amounts.zeroOfCurrency(fiat_currency);
+ const account = {
+ balance: Amounts.parseOrThrow(resultAccount.body.balance.amount),
+ balanceIsDebit: resultAccount.body.balance.credit_debit_indicator == "debit",
+ debitThreshold: Amounts.parseOrThrow(resultAccount.body.debit_threshold),
+ minCashout: resultAccount.body.min_cashout === void 0 ? regionalZero : Amounts.parseOrThrow(resultAccount.body.min_cashout)
+ };
const limit = account.balanceIsDebit ? Amounts.sub(account.debitThreshold, account.balance).amount : Amounts.add(account.balance, account.debitThreshold).amount;
const zeroCalc = {
debit: regionalZero,
@@ -34416,28 +34534,30 @@ function CreateCashout({
}
const errors2 = undefinedIfEmpty({
subject: !form.subject ? i18n2.str`Required` : void 0,
- amount: !form.amount ? i18n2.str`Required` : !inputAmount ? i18n2.str`Invalid` : Amounts.cmp(limit, calc.debit) === -1 ? i18n2.str`Balance is not enough` : form.isDebit && Amounts.cmp(inputAmount, conversionInfo.cashout_min_amount) < 1 ? i18n2.str`Needs to be higher than ${Amounts.stringifyValueWithSpec(
+ amount: !form.amount ? i18n2.str`Required` : !inputAmount ? i18n2.str`Invalid` : Amounts.cmp(limit, calc.debit) === -1 ? i18n2.str`Balance is not enough` : calculationResult === "amount-is-too-small" ? i18n2.str`Amount needs to be higher` : Amounts.cmp(calc.debit, conversionInfo.cashout_min_amount) < 0 ? i18n2.str`No account can't cashout less than ${Amounts.stringifyValueWithSpec(
Amounts.parseOrThrow(conversionInfo.cashout_min_amount),
regional_currency_specification
- ).normal}` : calculationResult === "amount-is-too-small" ? i18n2.str`Amount needs to be higher` : Amounts.isZero(calc.credit) ? i18n2.str`The total transfer at destination will be zero` : void 0
+ ).normal}` : Amounts.cmp(calc.debit, account.minCashout) < 0 ? i18n2.str`Your account can't cashout less than ${Amounts.stringifyValueWithSpec(
+ Amounts.parseOrThrow(account.minCashout),
+ regional_currency_specification
+ ).normal}` : Amounts.isZero(calc.credit) ? i18n2.str`The total transfer at destination will be zero` : void 0
});
const trimmedAmountStr = form.amount?.trim();
async function createCashout() {
const request_uid = encodeCrock(getRandomBytes(32));
await handleError(async () => {
- const validChannel = config.supported_tan_channels.length === 0 || form.channel;
- if (!creds || !form.subject || !validChannel)
+ if (!creds || !form.subject)
return;
const request = {
request_uid,
amount_credit: Amounts.stringify(calc.credit),
amount_debit: Amounts.stringify(calc.debit),
- subject: form.subject,
- tan_channel: form.channel
+ subject: form.subject
};
const resp = await api.createCashout(creds, request);
if (resp.type === "ok") {
notifyInfo(i18n2.str`Cashout created`);
+ onCashout();
} else {
switch (resp.case) {
case HttpStatusCode.Accepted: {
@@ -34498,6 +34618,14 @@ function CreateCashout({
debug: resp.detail,
when: AbsoluteTime.now()
});
+ case TalerErrorCode.BANK_CONVERSION_AMOUNT_TO_SMALL:
+ return notify2({
+ type: "error",
+ title: i18n2.str`The amount is less than the minimum allowed.`,
+ description: resp.detail.hint,
+ debug: resp.detail,
+ when: AbsoluteTime.now()
+ });
case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:
return notify2({
type: "error",
@@ -34739,6 +34867,7 @@ function CreateCashout({
function CashoutListForAccount({
account,
onAuthorizationRequired,
+ onCashout,
routeCreateCashout,
routeCashoutDetails,
routeMyAccountCashout,
@@ -34767,6 +34896,7 @@ function CashoutListForAccount({
focus: true,
routeHere: routeCreateCashout,
routeClose,
+ onCashout,
onAuthorizationRequired,
account
}
@@ -34801,6 +34931,9 @@ function AccountForm({
debit_threshold: Amounts.stringifyValue(
template?.debit_threshold ?? config.default_debit_threshold
),
+ min_cashout: Amounts.stringifyValue(
+ template?.min_cashout ?? `${config.currency}:0`
+ ),
isExchange: template?.is_taler_exchange,
isPublic: template?.is_public,
name: template?.name ?? "",
@@ -34817,19 +34950,25 @@ function AccountForm({
const isCashoutEnabled = config.allow_conversion;
const editableCashout = purpose === "create" || purpose === "update" && (config.allow_edit_cashout_payto_uri || userIsAdmin);
const editableThreshold = userIsAdmin && (purpose === "create" || purpose === "update");
+ const editableMinCashout = userIsAdmin && (purpose === "create" || purpose === "update");
const editableAccount = purpose === "create" && userIsAdmin;
function updateForm(newForm) {
- const trimmedAmountStr = newForm.debit_threshold?.trim();
- const parsedAmount = Amounts.parse(
- `${config.currency}:${trimmedAmountStr}`
+ const trimmedMinCashoutStr = newForm.min_cashout?.trim();
+ const parsedMinCashout = Amounts.parse(
+ `${config.currency}:${trimmedMinCashoutStr}`
+ );
+ const trimmedDebitThresholdStr = newForm.debit_threshold?.trim();
+ const parsedDebitThreshold = Amounts.parse(
+ `${config.currency}:${trimmedDebitThresholdStr}`
);
const errors3 = undefinedIfEmpty({
cashout_payto_uri: !newForm.cashout_payto_uri ? void 0 : !editableCashout ? void 0 : !newForm.cashout_payto_uri ? void 0 : cashoutPaytoType === "iban" ? validateIBAN(newForm.cashout_payto_uri, i18n2) : cashoutPaytoType === "x-taler-bank" ? validateTalerBank(newForm.cashout_payto_uri, i18n2) : void 0,
payto_uri: !newForm.payto_uri ? void 0 : !editableAccount ? void 0 : !newForm.payto_uri ? void 0 : paytoType === "iban" ? validateIBAN(newForm.payto_uri, i18n2) : paytoType === "x-taler-bank" ? validateTalerBank(newForm.payto_uri, i18n2) : void 0,
email: !newForm.email ? void 0 : !EMAIL_REGEX.test(newForm.email) ? i18n2.str`Doesn't have the pattern of an email` : void 0,
phone: !newForm.phone ? void 0 : !newForm.phone.startsWith("+") ? i18n2.str`Should start with +` : !REGEX_JUST_NUMBERS_REGEX.test(newForm.phone) ? i18n2.str`Phone number can't have other than numbers` : void 0,
- debit_threshold: !editableThreshold ? void 0 : !trimmedAmountStr ? void 0 : !parsedAmount ? i18n2.str`Not valid` : void 0,
- name: !editableName ? void 0 : !newForm.name ? i18n2.str`Required` : void 0,
+ debit_threshold: !editableThreshold ? void 0 : !trimmedDebitThresholdStr ? void 0 : !parsedDebitThreshold ? i18n2.str`Not valid` : void 0,
+ min_cashout: !editableMinCashout ? void 0 : !trimmedMinCashoutStr ? void 0 : !parsedMinCashout ? i18n2.str`Not valid` : void 0,
+ name: !editableName ? void 0 : purpose === "update" && newForm.name === void 0 ? void 0 : !newForm.name ? i18n2.str`Required` : void 0,
username: !editableUsername ? void 0 : !newForm.username ? i18n2.str`Required` : void 0
});
setErrors(errors3);
@@ -34873,7 +35012,8 @@ function AccountForm({
assertUnreachable(paytoType);
}
const internalURI = !internal ? void 0 : stringifyPaytoUri(internal);
- const threshold = !parsedAmount ? void 0 : Amounts.stringify(parsedAmount);
+ const threshold = !parsedDebitThreshold ? void 0 : Amounts.stringify(parsedDebitThreshold);
+ const minCashout = !parsedMinCashout ? void 0 : Amounts.stringify(parsedMinCashout);
switch (purpose) {
case "create": {
const callback = onChange;
@@ -34886,6 +35026,7 @@ function AccountForm({
phone: !newForm.phone ? void 0 : newForm.phone
}),
debit_threshold: threshold ?? config.default_debit_threshold,
+ min_cashout: minCashout,
cashout_payto_uri: cashoutURI,
payto_uri: internalURI,
is_public: newForm.isPublic,
@@ -34904,6 +35045,7 @@ function AccountForm({
phone: !newForm.phone ? void 0 : newForm.phone
}),
debit_threshold: threshold,
+ min_cashout: minCashout,
is_public: newForm.isPublic,
name: newForm.name,
tan_channel: newForm.tan_channel === "remove" ? null : newForm.tan_channel
@@ -35109,7 +35251,32 @@ function AccountForm({
message: errors2?.debit_threshold ? String(errors2?.debit_threshold) : void 0,
isDirty: form.debit_threshold !== void 0
}
- ), /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-500" }, /* @__PURE__ */ h(i18n2.Translate, null, "How much the balance can go below zero."))), /* @__PURE__ */ h("div", { class: "sm:col-span-5" }, /* @__PURE__ */ h("div", { class: "flex items-center justify-between" }, /* @__PURE__ */ h("span", { class: "flex flex-grow flex-col" }, /* @__PURE__ */ h(
+ ), /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-500" }, /* @__PURE__ */ h(i18n2.Translate, null, "How much the balance can go below zero."))), /* @__PURE__ */ h("div", { class: "sm:col-span-5" }, /* @__PURE__ */ h(
+ "label",
+ {
+ for: "minCashout",
+ class: "block text-sm font-medium leading-6 text-gray-900"
+ },
+ i18n2.str`Minimum cashout`
+ ), /* @__PURE__ */ h(
+ InputAmount,
+ {
+ name: "minCashout",
+ left: true,
+ currency: config.currency,
+ value: form.min_cashout ?? defaultValue.min_cashout,
+ onChange: !editableMinCashout ? void 0 : (e4) => {
+ form.min_cashout = e4;
+ updateForm(structuredClone(form));
+ }
+ }
+ ), /* @__PURE__ */ h(
+ ShowInputErrorLabel,
+ {
+ message: errors2?.min_cashout ? String(errors2?.min_cashout) : void 0,
+ isDirty: form.min_cashout !== void 0
+ }
+ ), /* @__PURE__ */ h("p", { class: "mt-2 text-sm text-gray-500" }, /* @__PURE__ */ h(i18n2.Translate, null, "Custom minimum cashout amount for this account."))), /* @__PURE__ */ h("div", { class: "sm:col-span-5" }, /* @__PURE__ */ h("div", { class: "flex items-center justify-between" }, /* @__PURE__ */ h("span", { class: "flex flex-grow flex-col" }, /* @__PURE__ */ h(
"span",
{
class: "text-sm text-black font-medium leading-6 ",
@@ -35314,6 +35481,15 @@ function ShowAccountDetails({
when: AbsoluteTime.now()
});
}
+ case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT: {
+ return notify2({
+ type: "error",
+ title: i18n2.str`Only the administrator can change the minimun cashout limit.`,
+ description: resp.detail.hint,
+ debug: resp.detail,
+ when: AbsoluteTime.now()
+ });
+ }
default:
assertUnreachable(resp);
}
@@ -36102,7 +36278,7 @@ function Metrics({
class: "block w-full rounded-md border-gray-300 focus:border-indigo-500 focus:ring-indigo-500",
onChange: (e4) => {
setMetricType(
- e4.currentTarget.value
+ parseInt(e4.currentTarget.value, 10)
);
}
},
@@ -36460,6 +36636,15 @@ function CreateNewAccount({
debug: resp.detail,
when: AbsoluteTime.now()
});
+ case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT: {
+ return notify2({
+ type: "error",
+ title: i18n2.str`Only the administrator can change the minimun cashout limit.`,
+ description: resp.detail.hint,
+ debug: resp.detail,
+ when: AbsoluteTime.now()
+ });
+ }
default:
assertUnreachable(resp);
}
@@ -37996,7 +38181,7 @@ function PublicRounting({
refreshable: true
});
if (resp.type === "ok") {
- onLoggedUser(username, resp.body.access_token);
+ onLoggedUser(username, createRFC8959AccessTokenEncoded(resp.body.access_token));
} else {
switch (resp.case) {
case HttpStatusCode.Unauthorized:
@@ -38242,6 +38427,7 @@ function PrivateRouting({
routeMyAccountDetails: privatePages.myAccountDetails,
routeMyAccountPassword: privatePages.myAccountPassword,
routeConversionConfig: privatePages.conversionConfig,
+ onCashout: () => navigateTo(privatePages.home.url({})),
onAuthorizationRequired: () => navigateTo(privatePages.solveSecondFactor.url({}))
}
);
@@ -38305,6 +38491,7 @@ function PrivateRouting({
routeMyAccountDetails: privatePages.myAccountDetails,
routeMyAccountPassword: privatePages.myAccountPassword,
routeConversionConfig: privatePages.conversionConfig,
+ onCashout: () => navigateTo(privatePages.home.url({})),
onAuthorizationRequired: () => navigateTo(privatePages.solveSecondFactor.url({})),
routeClose: privatePages.home
}
@@ -38352,6 +38539,7 @@ function PrivateRouting({
account: username,
routeHere: privatePages.cashoutCreate,
onAuthorizationRequired: () => navigateTo(privatePages.solveSecondFactor.url({})),
+ onCashout: () => navigateTo(privatePages.home.url({})),
routeClose: privatePages.home
}
);
@@ -40578,10 +40766,10 @@ var defaultSettings = {
allowRandomAccountCreation: false,
topNavSites: {}
};
-var codecForBankUISettings = () => buildCodecForObject().property("backendBaseURL", codecOptional(codecForString())).property("allowRandomAccountCreation", codecOptional(codecForBoolean())).property(
+var codecForUISettings = () => buildCodecForObject().property("backendBaseURL", codecOptional(codecForString())).property("allowRandomAccountCreation", codecOptional(codecForBoolean())).property(
"simplePasswordForRandomAccounts",
codecOptional(codecForBoolean())
-).property("iconLinkURL", codecOptional(codecForString())).property("topNavSites", codecOptional(codecForMap(codecForString()))).build("BankUiSettings");
+).property("iconLinkURL", codecOptional(codecForString())).property("topNavSites", codecOptional(codecForMap(codecForString()))).build("UiSettings");
function removeUndefineField(obj) {
const keys = Object.keys(obj);
return keys.reduce((prev, cur) => {
@@ -40592,7 +40780,7 @@ function removeUndefineField(obj) {
}, obj);
}
function fetchSettings(listener) {
- fetch("./settings.json").then((resp) => resp.json()).then((json) => codecForBankUISettings().decode(json)).then(
+ fetch("./settings.json").then((resp) => resp.json()).then((json) => codecForUISettings().decode(json)).then(
(result) => listener({
...defaultSettings,
...removeUndefineField(result)
diff --git a/bank/index.js.map b/bank/index.js.map
index 7c874372e..2ba312ec3 100644
--- a/bank/index.js.map
+++ b/bank/index.js.map
@@ -1,7 +1,7 @@
{
"version": 3,
- "sources": ["../../../../node_modules/.pnpm/big-integer@1.6.52/node_modules/big-integer/BigInteger.js", "../../../../node_modules/.pnpm/jed@1.1.1/node_modules/jed/jed.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", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/util.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/PureComponent.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/memo.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/forwardRef.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/Children.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense-list.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/portals.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/render.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/index.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/index.js", "../../../../node_modules/.pnpm/qrcode-generator@1.4.4/node_modules/qrcode-generator/qrcode.js", "../../../taler-util/src/nacl-fast.ts", "../../../taler-util/src/prng-browser.ts", "../../../taler-util/src/taler-error-codes.ts", "../../../taler-util/src/CancellationToken.ts", "../../../taler-util/src/amounts.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/logging.ts", "../../../taler-util/src/codec.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/bech32.ts", "../../../taler-util/src/segwit_addr.ts", "../../../taler-util/src/bitcoin.ts", "../../../taler-util/src/payto.ts", "../../../taler-util/src/http-common.ts", "../../../taler-util/src/operation.ts", "../../../taler-util/src/taleruri.ts", "../../../taler-util/src/http-client/types.ts", "../../../taler-util/src/http-status-codes.ts", "../../../taler-util/src/http-impl.missing.ts", "../../../taler-util/src/http.ts", "../../../taler-util/src/libtool-version.ts", "../../../taler-util/src/MerchantApiClient.ts", "../../../taler-util/src/RequestThrottler.ts", "../../../taler-util/src/ReserveTransaction.ts", "../../../taler-util/src/TaskThrottler.ts", "../../../taler-util/src/bank-api-client.ts", "../../../taler-util/src/base64.ts", "../../../taler-util/src/contract-terms.ts", "../../../taler-util/src/errors.ts", "../../../taler-util/src/fnutils.ts", "../../../taler-util/src/transactions-types.ts", "../../../taler-util/src/wallet-types.ts", "../../../taler-util/src/http-client/utils.ts", "../../../taler-util/src/http-client/bank-conversion.ts", "../../../taler-util/src/http-client/authentication.ts", "../../../taler-util/src/http-client/bank-core.ts", "../../../taler-util/src/http-client/merchant.ts", "../../../taler-util/src/i18n.ts", "../../../taler-util/src/iban.ts", "../../../taler-util/src/notifications.ts", "../../../taler-util/src/observability.ts", "../../../taler-util/src/timer.ts", "../../../taler-util/src/transaction-test-data.ts", "../../../taler-util/src/index.browser.ts", "../../../web-util/src/hooks/useLocalStorage.ts", "../../../web-util/src/utils/observable.ts", "../../../web-util/src/hooks/useLang.ts", "../../../web-util/src/hooks/useMemoryStorage.ts", "../../../web-util/src/hooks/useNotifications.ts", "../../../web-util/src/hooks/useAsyncAsHook.ts", "../../../web-util/src/utils/base64.ts", "../../../web-util/src/utils/request.ts", "../../../web-util/src/utils/http-impl.browser.ts", "../../../web-util/src/utils/http-impl.sw.ts", "../../../web-util/src/utils/route.ts", "../../../web-util/src/context/api.ts", "../../../web-util/src/context/translation.ts", "../../../../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/_lib/buildLocalizeFn/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/_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/startOfWeek/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/constants/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameDay/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/endOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/eachDayOfInterval/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfWeek/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/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/en-US/_lib/localize/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/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMinutes/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getSeconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Setter.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/constants.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/utils.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCDay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISODay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subDays/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/sub/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/index.js", "../../../web-util/src/context/bank-api.ts", "../../../web-util/src/context/activity.ts", "../../../web-util/src/context/merchant-api.ts", "../../../web-util/src/context/navigation.ts", "../../../web-util/src/context/wallet-integration.ts", "../../../web-util/src/components/utils.ts", "../../../web-util/src/components/Attention.tsx", "../../../web-util/src/components/CopyButton.tsx", "../../../web-util/src/components/ErrorLoading.tsx", "../../../web-util/src/components/LangSelector.tsx", "../../../web-util/src/components/Loading.tsx", "../../../web-util/src/components/Header.tsx", "../../../web-util/src/components/Footer.tsx", "../../../web-util/src/components/Button.tsx", "../../../web-util/src/components/ShowInputErrorLabel.tsx", "../../../web-util/src/components/NotificationBanner.tsx", "../../../web-util/src/components/ToastBanner.tsx", "../../../web-util/src/forms/Calendar.tsx", "../../../web-util/src/forms/Caption.tsx", "../../../web-util/src/forms/InputLine.tsx", "../../../web-util/src/forms/useField.ts", "../../../web-util/src/forms/FormProvider.tsx", "../../../web-util/src/forms/DefaultForm.tsx", "../../../web-util/src/forms/forms.ts", "../../../web-util/src/forms/Group.tsx", "../../../web-util/src/forms/InputAbsoluteTime.tsx", "../../../web-util/src/forms/Dialog.tsx", "../../../web-util/src/forms/InputAmount.tsx", "../../../web-util/src/forms/InputArray.tsx", "../../../web-util/src/forms/InputChoiceHorizontal.tsx", "../../../web-util/src/forms/InputChoiceStacked.tsx", "../../../web-util/src/forms/InputFile.tsx", "../../../web-util/src/forms/InputInteger.tsx", "../../../web-util/src/forms/InputSelectMultiple.tsx", "../../../web-util/src/forms/InputSelectOne.tsx", "../../../web-util/src/forms/InputText.tsx", "../../../web-util/src/forms/InputTextArea.tsx", "../../../web-util/src/forms/InputToggle.tsx", "../../../web-util/src/forms/TimePicker.tsx", "../../../web-util/src/stories.tsx", "../../src/app.tsx", "../../../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/core/dist/index.mjs", "../../../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/_internal/dist/index.mjs", "../../src/Routing.tsx", "../../src/hooks/session.ts", "../../src/components/ErrorLoadingWithDebug.tsx", "../../src/hooks/preferences.ts", "../../src/pages/LoginForm.tsx", "../../src/utils.ts", "../../src/pages/PaytoWireTransferForm.tsx", "../../src/hooks/bank-state.ts", "../../src/pages/RegistrationPage.tsx", "../../src/context/settings.ts", "../../src/pages/rnd.ts", "../../src/hooks/account.ts", "../../src/pages/AccountPage/state.ts", "../../src/pages/AccountPage/views.tsx", "../../src/components/Transactions/state.ts", "../../../../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/formatISO/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/subDays/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/sub/index.js", "../../src/components/Transactions/views.tsx", "../../src/components/Time.tsx", "../../src/components/Transactions/index.ts", "../../src/pages/PaymentOptions.tsx", "../../src/pages/WalletWithdrawForm.tsx", "../../src/pages/OperationState/state.ts", "../../src/pages/OperationState/views.tsx", "../../src/components/QR.tsx", "../../src/pages/WithdrawalConfirmationQuestion.tsx", "../../src/pages/OperationState/index.ts", "../../src/pages/AccountPage/index.ts", "../../src/pages/BankFrame.tsx", "../../src/pages/PublicHistoriesPage.tsx", "../../src/pages/ShowNotifications.tsx", "../../src/pages/SolveChallengePage.tsx", "../../src/hooks/regional.ts", "../../src/pages/WithdrawalQRCode.tsx", "../../src/pages/QrCodeSection.tsx", "../../src/pages/WireTransfer.tsx", "../../src/pages/WithdrawalOperationPage.tsx", "../../src/pages/account/CashoutListForAccount.tsx", "../../src/components/Cashouts/state.ts", "../../src/components/Cashouts/views.tsx", "../../src/components/Cashouts/index.ts", "../../src/pages/ProfileNavigation.tsx", "../../src/pages/regional/CreateCashout.tsx", "../../src/pages/account/ShowAccountDetails.tsx", "../../src/pages/admin/AccountForm.tsx", "../../src/pages/account/UpdateAccountPassword.tsx", "../../src/pages/admin/AdminHome.tsx", "../../src/pages/admin/AccountList.tsx", "../../src/pages/admin/CreateNewAccount.tsx", "../../src/pages/admin/DownloadStats.tsx", "../../src/pages/admin/RemoveAccount.tsx", "../../src/pages/regional/ConversionConfig.tsx", "../../src/hooks/form.ts", "../../src/pages/regional/ShowCashoutDetails.tsx", "../../src/i18n/strings.ts", "../../src/settings.ts", "../../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 || alphabet) 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 || alphabet) 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", "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", "/**\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", "/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\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", "// 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 * An error response did not include an error code in the format expected by the client. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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. Details should be in the local logs. Check if you are using the latest available version or file a report with the developers.\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 in the expected format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 * The operation timed out. Trying again might help. Check the network connection.\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 protocol version given by the server does not follow the required format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 the right data format, but the content did not satisfy the protocol. Please file a bug report.\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 an option is set to an invalid value. Check the logs and fix the local 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 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. Please file a bug report.\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 token used by the client to authorize the request does not grant the required permissions for the request. Check the requirements and obtain a suitable authorization token to proceed.\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 GENERIC_TOKEN_PERMISSION_INSUFFICIENT = 16,\n\n\n /**\n * The HTTP method used is invalid for this endpoint. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you used the correct URL and/or file a report with the developers of the client software.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 were malformed and caused the server to not be able to handle the request. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check that you are using the correct syntax as of RFC 8905 and/or that you entered the bank account number correctly.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 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 body in the request could not be decompressed by the server. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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_COMPRESSION_INVALID = 28,\n\n\n /**\n * The currency involved in the operation is not acceptable for this server. Check your configuration and make sure the currency specified for a given service provider is one of the currencies supported by that provider.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\n * Returned with an HTTP status code of #MHD_HTTP_CONTENT_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 refused the request due to lack of proper 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 GENERIC_UNAUTHORIZED = 40,\n\n\n /**\n * The service refused the request as the given authorization token is unknown.\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 GENERIC_TOKEN_UNKNOWN = 41,\n\n\n /**\n * The service refused the request as the given authorization token expired.\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 GENERIC_TOKEN_EXPIRED = 42,\n\n\n /**\n * The service refused the request as the given authorization token is malformed.\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 GENERIC_TOKEN_MALFORMED = 43,\n\n\n /**\n * The service refused the request due to lack of proper rights on the resource.\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 GENERIC_FORBIDDEN = 44,\n\n\n /**\n * The service failed initialize its connection to the database. The system administrator should check that the service has permissions to access the database and that the database is running.\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. The system administrator should check that the database is running.\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. The system administrator should check that the database is running and review the service logs.\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. The system administrator should check that the database is running and review the service logs.\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 unrecoverable error trying to commit a transaction to the database. The system administrator should check that the database is running and review the service logs.\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; it should only happen if some client maliciously tries to create conflicting concurrent transactions. It could also be a sign of a missing index. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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). Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. The system administrator should check if the resource files are installed in the correct location and are readable to the 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 GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply. The system administrator should investigate the logs and check if the templates are well-formed.\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 coin is not known to the exchange (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_GENERIC_COIN_UNKNOWN = 1019,\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 failed to start a KYC attribute conversion helper process. It is likely configured incorrectly.\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_KYC_CONVERTER_FAILED = 1037,\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 client provided an unknown commitment for an age-withdraw 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 EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN = 1161,\n\n\n /**\n * The total sum of amounts from the denominations did overflow.\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_AGE_WITHDRAW_AMOUNT_OVERFLOW = 1162,\n\n\n /**\n * The total sum of value and fees from the denominations differs from the committed amount with fees.\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_AGE_WITHDRAW_AMOUNT_INCORRECT = 1163,\n\n\n /**\n * The original commitment differs from the calculated hash\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_AGE_WITHDRAW_REVEAL_INVALID_HASH = 1164,\n\n\n /**\n * The maximum age in the commitment is too large for the reserve\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_MAXIMUM_AGE_TOO_LARGE = 1165,\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 coin 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_COIN_HISTORY_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_RESERVE_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 * Withdrawal from the reserve requires age restriction to be set.\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_AGE_RESTRICTION_REQUIRED = 1681,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys or the helpers had no denominations (properly) configured.\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_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_BAD_GATEWAY (502).\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 * TOTP key 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_TOTP_KEY_INVALID = 1980,\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 reward ID is unknown. This could happen if the reward 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_REWARD_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 backend could not find the OTP device(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_OTP_DEVICE_UNKNOWN = 2021,\n\n\n /**\n * The account 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_ACCOUNT_UNKNOWN = 2022,\n\n\n /**\n * The wire hash 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 MERCHANT_GENERIC_H_WIRE_MALFORMED = 2023,\n\n\n /**\n * The currency specified in the operation does not work with the current state of the given resource.\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_GENERIC_CURRENCY_MISMATCH = 2024,\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_BAD_REQUEST (400).\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_BAD_REQUEST (400).\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 exchange does not support the selected bank account of the merchant. Likely the merchant had stale data on the bank accounts of the exchange and thus selected an inappropriate exchange when making the offer.\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_WIRE_METHOD_UNSUPPORTED = 2175,\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 * A token family with this ID but conflicting data 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_POST_TOKEN_FAMILY_CONFLICT = 2225,\n\n\n /**\n * The backend is unaware of a token family with the given ID.\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_PATCH_TOKEN_FAMILY_NOT_FOUND = 2226,\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 are waiting for the exchange to provide us with key material before checking the wire transfer.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS = 2258,\n\n\n /**\n * We are waiting for the exchange to provide us with the list of aggregated transactions.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST = 2259,\n\n\n /**\n * The endpoint indicated in the wire transfer does not belong to a GNU Taler exchange.\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_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE = 2260,\n\n\n /**\n * The exchange indicated in the wire transfer claims to know nothing about the wire transfer.\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_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND = 2261,\n\n\n /**\n * The interaction with the exchange is delayed due to rate limiting.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED = 2262,\n\n\n /**\n * We experienced a transient failure in our interaction with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE = 2263,\n\n\n /**\n * The response from the exchange was unacceptable and should be reviewed with an auditor.\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_EXCHANGE_TRANSFERS_HARD_FAILURE = 2264,\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_REWARD_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_REWARD_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_REWARD_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The reward 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_REWARD_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_REWARD_PICKUP_AMOUNT_EXCEEDS_REWARD_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_REWARD_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The merchant instance has no active bank accounts configured. However, at least one bank account must be available to create 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 merchant backend failed to obtain the current local time.\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; likely 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 * A conflicting order (sharing the same order identifier) already exists at this merchant backend instance.\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 order creation request is invalid because the given 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 order creation request is invalid because the delivery date given 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 order creation request is invalid because a wire deadline of \"never\" 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_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The order creation request is invalid because the given payment deadline 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 order creation request is invalid because the given refund deadline 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 * The backend does not trust any exchange that would allow funds to be wired to any bank account of this instance using the wire method specified with the order. Note that right now, we do not support the use of exchange bank accounts with mandatory currency conversion.\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_NO_EXCHANGES_FOR_WIRE_METHOD = 2509,\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. Deletion may work later after the offer has expired if it remains unpaid.\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 exceeds the original price paid by the customer.\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 * Only paid orders can be refunded, and the frontend specified an unpaid order to issue a refund for.\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 ever 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 amount transferred differs between what was submitted and what the exchange claimed.\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_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS = 2563,\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 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 MERCHANT_PRIVATE_ACCOUNT_DELETE_UNKNOWN_ACCOUNT = 2626,\n\n\n /**\n * The bank account specified in the request already exists at the merchant.\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_ACCOUNT_EXISTS = 2627,\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 requested exchange does not allow rewards.\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_REWARDS_NOT_ALLOWED = 2701,\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 rewards 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_REWARD_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the rewards 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_REWARD_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the reward, and it was configured for rewardping. However, the funds remaining are insufficient to cover the reward, 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_REWARD_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the reward.\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_REWARD_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 * The OTP device 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_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS = 2851,\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 * 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 client tried to register a new account under a reserved username (like 'admin' for example).\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_RESERVED_USERNAME_CONFLICT = 5120,\n\n\n /**\n * The client tried to register a new account with an username 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 BANK_REGISTER_USERNAME_REUSE = 5121,\n\n\n /**\n * The client tried to register a new account with a payto:// URI 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 BANK_REGISTER_PAYTO_URI_REUSE = 5122,\n\n\n /**\n * The client tried to delete an account with a non null 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 BANK_ACCOUNT_BALANCE_NOT_ZERO = 5123,\n\n\n /**\n * The client tried to create a transaction or an operation that credit an unknown account.\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_UNKNOWN_CREDITOR = 5124,\n\n\n /**\n * The client tried to create a transaction or an operation that debit an unknown account.\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_UNKNOWN_DEBTOR = 5125,\n\n\n /**\n * The client tried to perform an action prohibited for exchange accounts.\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_ACCOUNT_IS_EXCHANGE = 5126,\n\n\n /**\n * The client tried to perform an action reserved for exchange accounts.\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_ACCOUNT_IS_NOT_EXCHANGE = 5127,\n\n\n /**\n * Received currency conversion is wrong.\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_BAD_CONVERSION = 5128,\n\n\n /**\n * The account referenced in this operation is missing tan info for the chosen channel.\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_MISSING_TAN_INFO = 5129,\n\n\n /**\n * The client attempted to confirm a transaction with incomplete info.\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_INCOMPLETE = 5130,\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 BANK_TAN_RATE_LIMITED = 5131,\n\n\n /**\n * This TAN channel is not supported.\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 BANK_TAN_CHANNEL_NOT_SUPPORTED = 5132,\n\n\n /**\n * Failed to send TAN using the helper script. Either script is not found, or script timeout, or script 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 BANK_TAN_CHANNEL_SCRIPT_FAILED = 5133,\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 BANK_TAN_CHALLENGE_FAILED = 5134,\n\n\n /**\n * A non-admin user has tried to change their legal 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_NON_ADMIN_PATCH_LEGAL_NAME = 5135,\n\n\n /**\n * A non-admin user has tried to change their debt limit.\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_NON_ADMIN_PATCH_DEBT_LIMIT = 5136,\n\n\n /**\n * A non-admin user has tried to change their password whihout providing the current 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 BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD = 5137,\n\n\n /**\n * Provided old password does not match current password.\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_PATCH_BAD_OLD_PASSWORD = 5138,\n\n\n /**\n * An admin user has tried to become an 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 BANK_PATCH_ADMIN_EXCHANGE = 5139,\n\n\n /**\n * A non-admin user has tried to change their cashout account.\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_NON_ADMIN_PATCH_CASHOUT = 5140,\n\n\n /**\n * A non-admin user has tried to change their contact info.\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_NON_ADMIN_PATCH_CONTACT = 5141,\n\n\n /**\n * The client tried to create a transaction that credit the admin account.\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_ADMIN_CREDITOR = 5142,\n\n\n /**\n * The referenced challenge 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_CHALLENGE_NOT_FOUND = 5143,\n\n\n /**\n * The referenced challenge has expired.\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_TAN_CHALLENGE_EXPIRED = 5144,\n\n\n /**\n * A non-admin user has tried to create an account with 2fa.\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_NON_ADMIN_SET_TAN_CHANNEL = 5145,\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_CONTENT_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_CONTENT_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 a reward) 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_REWARD_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 * The exchange's self-reported base URL does not match the one that the wallet is using.\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_BASE_URL_MISMATCH = 7030,\n\n\n /**\n * The order has already been paid 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_PAID = 7031,\n\n\n /**\n * An exchange that is required for some request is currently 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_EXCHANGE_UNAVAILABLE = 7032,\n\n\n /**\n * An exchange entry is still used by the exchange, thus it can't be deleted without purging.\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_ENTRY_USED = 7033,\n\n\n /**\n * The wallet database is unavailable and the wallet thus is not operational.\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_DB_UNAVAILABLE = 7034,\n\n\n /**\n * A taler:// URI is malformed and 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_TALER_URI_MALFORMED = 7035,\n\n\n /**\n * A wallet-core request was cancelled and thus can't provide a 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_CORE_REQUEST_CANCELLED = 7036,\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_CONTENT_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 * The Donau failed to perform the operation as it could not find the private keys. This is a problem with the Donau 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 DONAU_GENERIC_KEYS_MISSING = 8607,\n\n\n /**\n * The signature of the charity key 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 DONAU_CHARITY_SIGNATURE_INVALID = 8608,\n\n\n /**\n * The charity 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 DONAU_CHARITY_NOT_FOUND = 8609,\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 * The client is unknown or unauthorized.\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 CHALLENGER_GENERIC_CLIENT_UNKNOWN = 9750,\n\n\n /**\n * The client is not authorized to use the given redirect URI.\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 CHALLENGER_GENERIC_CLIENT_FORBIDDEN_BAD_REDIRECT_URI = 9751,\n\n\n /**\n * The service failed to execute its helper process to send the challenge.\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 CHALLENGER_HELPER_EXEC_FAILED = 9752,\n\n\n /**\n * The grant is unknown to the service (it could also have 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 CHALLENGER_GRANT_UNKNOWN = 9753,\n\n\n /**\n * The code given is not even well-formed.\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 CHALLENGER_CLIENT_FORBIDDEN_BAD_CODE = 9754,\n\n\n /**\n * The service is not aware of the referenced validation process.\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 CHALLENGER_GENERIC_VALIDATION_UNKNOWN = 9755,\n\n\n /**\n * The code given 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 CHALLENGER_CLIENT_FORBIDDEN_INVALID_CODE = 9756,\n\n\n /**\n * Too many attempts have been made, validation is temporarily disabled for this address.\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 CHALLENGER_TOO_MANY_ATTEMPTS = 9757,\n\n\n /**\n * The PIN code provided is incorrect.\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 CHALLENGER_INVALID_PIN = 9758,\n\n\n /**\n * The token cannot be valid as no address was ever provided by the client.\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 CHALLENGER_MISSING_ADDRESS = 9759,\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", "/*\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) 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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n renderContext,\n} from \"./codec.js\";\nimport { CurrencySpecification } from \"./index.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 * Separator character between integer and fractional\n */\nexport const FRAC_SEPARATOR = \".\";\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\n/**\n * Immutable amount.\n */\nexport class Amount {\n static from(a: AmountLike): Amount {\n return new Amount(Amounts.parseOrThrow(a), 0);\n }\n\n static zeroOfCurrency(currency: string): Amount {\n return new Amount(Amounts.zeroOfCurrency(currency), 0);\n }\n\n add(...a: AmountLike[]): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.add(this.val, ...a);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n mult(n: number): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.mult(this, n);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n toJson(): AmountJson {\n return { ...this.val };\n }\n\n toString(): AmountString {\n return Amounts.stringify(this.val);\n }\n\n private constructor(\n private val: AmountJson,\n private saturated: number,\n ) {}\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 function codecForAmountString(): Codec<AmountString> {\n return {\n decode(x: any, c?: Context): AmountString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (Amounts.parse(x) === undefined) {\n throw new DecodingError(\n `invalid amount at ${renderContext(c)} got \"${x}\"`,\n );\n }\n return x as AmountString;\n },\n };\n}\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 = string | AmountString | AmountJson | Amount;\n\nexport interface DivmodResult {\n quotient: number;\n remainder: AmountJson;\n}\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 if (amt instanceof Amount) {\n return amt.toJson();\n }\n return amt;\n }\n\n static divmod(a1: AmountLike, a2: AmountLike): DivmodResult {\n const am1 = Amounts.jsonifyAmount(a1);\n const am2 = Amounts.jsonifyAmount(a2);\n if (am1.currency != am2.currency) {\n throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);\n }\n\n const x1 =\n BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);\n const x2 =\n BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);\n\n const quotient = x1 / x2;\n const remainderScaled = x1 % x2;\n\n return {\n quotient: Number(quotient),\n remainder: {\n currency: am1.currency,\n value: Number(remainderScaled / BigInt(amountFractionalBase)),\n fraction: Number(remainderScaled % BigInt(amountFractionalBase)),\n },\n };\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 * Check whether a string is a valid currency for a Taler amount.\n */\n static isCurrency(s: string): boolean {\n return /^[a-zA-Z]{1,11}$/.test(s);\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n *\n * Currency name size limit is 11 of ASCII letters\n * Fraction size limit is 8\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z]{1,11}):([0-9]+)([.][0-9]{1,8})?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || FRAC_SEPARATOR + \"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 (s instanceof Amount) {\n return s.toJson();\n }\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 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 multiplied 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): AmountString {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}` as AmountString;\n }\n\n static amountHasSameCurrency(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 isSameCurrency(curr1: string, curr2: string): boolean {\n return curr1.toLowerCase() === curr2.toLowerCase();\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 + FRAC_SEPARATOR;\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 static stringifyValueWithSpec(\n value: AmountJson,\n spec: CurrencySpecification,\n ): { currency: string; normal: string; small?: string } {\n const strValue = Amounts.stringifyValue(value);\n const pos = strValue.indexOf(FRAC_SEPARATOR);\n const originalPosition = pos < 0 ? strValue.length : pos;\n\n let currency = value.currency;\n const names = Object.keys(spec.alt_unit_names);\n let FRAC_POS_NEW_POSITION = originalPosition;\n //find symbol\n //FIXME: this should be based on a cache to speed up\n if (names.length > 0) {\n let unitIndex: string = \"0\"; //default entry by DD51\n names.forEach((index) => {\n const i = Number.parseInt(index, 10);\n if (Number.isNaN(i)) return; //skip\n if (originalPosition - i <= 0) return; //too big\n if (originalPosition - i < FRAC_POS_NEW_POSITION) {\n FRAC_POS_NEW_POSITION = originalPosition - i;\n unitIndex = index;\n }\n });\n currency = spec.alt_unit_names[unitIndex];\n }\n\n if (originalPosition === FRAC_POS_NEW_POSITION) {\n const { normal, small } = splitNormalAndSmall(\n strValue,\n originalPosition,\n spec,\n );\n return { currency, normal, small };\n }\n\n const intPart = strValue.substring(0, originalPosition);\n const fracPArt = strValue.substring(originalPosition + 1);\n //indexSize is always smaller than originalPosition\n const newValue =\n intPart.substring(0, FRAC_POS_NEW_POSITION) +\n FRAC_SEPARATOR +\n intPart.substring(FRAC_POS_NEW_POSITION) +\n fracPArt;\n const { normal, small } = splitNormalAndSmall(\n newValue,\n FRAC_POS_NEW_POSITION,\n spec,\n );\n return { currency, normal, small };\n }\n}\n\nfunction splitNormalAndSmall(\n decimal: string,\n fracSeparatorIndex: number,\n spec: CurrencySpecification,\n): { normal: string; small?: string } {\n let normal: string;\n let small: string | undefined;\n if (\n decimal.length - fracSeparatorIndex - 1 >\n spec.num_fractional_normal_digits\n ) {\n const limit = fracSeparatorIndex + spec.num_fractional_normal_digits + 1;\n normal = decimal.substring(0, limit);\n small = decimal.substring(limit);\n } else {\n normal = decimal;\n small = undefined;\n }\n return { normal, small };\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 //Include URL type for \"url\" and \"base\" params.\n constructor(url: string | URL, base?: string | URL) {\n let parsedBase = null;\n if (base !== undefined) {\n if (base instanceof URL) {\n base = base.href;\n }\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n if (url instanceof URL) {\n url = url.href;\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) 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\nlet globalLogLevel = LogLevel.Info;\nconst byTagLogLevel: Record<string, LogLevel> = {};\n\nlet nativeLogging: boolean = false;\n\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString\nError.prototype.toString = function () {\n if (\n this === null ||\n (typeof this !== \"object\" && typeof this !== \"function\")\n ) {\n throw new TypeError();\n }\n let name = this.name;\n name = name === undefined ? \"Error\" : `${name}`;\n let msg = this.message;\n msg = msg === undefined ? \"\" : `${msg}`;\n\n let cause = \"\";\n if (\"cause\" in this) {\n cause = `\\n Caused by: ${this.cause}`;\n }\n return `${name}: ${msg}${cause}`;\n};\n\nexport function getGlobalLogLevel(): string {\n return globalLogLevel;\n}\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nexport function enableNativeLogging() {\n nativeLogging = true;\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 writeNativeLog(\n message: any,\n tag: string,\n level: number,\n args: any[],\n): void {\n const logFn = (globalThis as any).__nativeLog;\n if (logFn) {\n let m: string;\n if (args.length == 0) {\n m = message;\n } else {\n m = message + \" \" + args.toString();\n }\n logFn(level, tag, message);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 2, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 3, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 4, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 1, args);\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", "/*\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\nimport { j2s } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\nconst logger = new Logger(\"codec.ts\");\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 * Return a codec for a value that must be a string.\n */\nexport function codecForStringURL(shouldEndWithSlash?: boolean): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return x;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\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 if (logger.shouldLogTrace()) {\n logger.trace(`offending value: ${j2s(x)}`);\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\n\nconst x = codecForEither(codecForString(), codecForNumber());\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 reuse 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 * as argon2 from \"./argon2.js\";\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\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\nimport { AmountLike, Amounts } from \"./amounts.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 hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n ): 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 async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n if (tart) {\n return tart.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\n }\n return await argon2.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\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 global/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 public 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 public 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\n/**\n * This makes the assumption that the uint64 fits a float,\n * which should be true for all Taler protocol messages.\n */\nexport function bufferForUint64(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(8);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n if (n < 0 || !Number.isInteger(n)) {\n throw Error(\"non-negative integer expected\");\n }\n dv.setBigUint64(0, BigInt(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 MERCHANT_REFUND = 1102,\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 WALLET_PURSE_DELETE = 1220,\n WALLET_COIN_HISTORY = 1209,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n TALER_SIGNATURE_AML_DECISION = 1350,\n TALER_SIGNATURE_AML_QUERY = 1351,\n TALER_SIGNATURE_MASTER_AML_KEY = 1017,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport 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 const PublishedAgeRestrictionBaseKey: Edx25519PublicKey = decodeCrock(\n \"CH0VKFDZ2GWRWHQBBGEK9MWV5YDQVJ0RXEE0KYT3NMB69F0R96TG\",\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 < numPrivs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-commitment\"),\n salt: bufferForUint32(i),\n });\n\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n privs.push(priv);\n }\n\n for (let i = numPrivs; i < numPubs; i++) {\n const deriveSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-factor\"),\n salt: bufferForUint32(i),\n });\n const pub = await Edx25519.publicKeyDerive(\n PublishedAgeRestrictionBaseKey,\n deriveSeed,\n );\n pubs.push(pub);\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!\nexport type 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\nexport async 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\nexport async 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 nonce: EncryptionNonce,\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(nonce, key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n nonce: EncryptionNonce,\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(nonce, 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\nexport function amountToBuffer(amount: AmountLike): Uint8Array {\n const amountJ = Amounts.jsonifyAmount(amount);\n const buffer = new ArrayBuffer(8 + 4 + 12);\n const dvbuf = new DataView(buffer);\n const u8buf = new Uint8Array(buffer);\n const curr = stringToBytes(amountJ.currency);\n if (typeof dvbuf.setBigUint64 !== \"undefined\") {\n dvbuf.setBigUint64(0, BigInt(amountJ.value));\n } else {\n const arr = bigint(amountJ.value).toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n dvbuf.setUint8(offset++, arr[i]);\n }\n }\n dvbuf.setUint32(8, amountJ.fraction);\n u8buf.set(curr, 8 + 4);\n\n return u8buf;\n}\n\nexport function timestampRoundedToBuffer(\n ts: TalerProtocolTimestamp,\n): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.t_s) * BigInt(1000 * 1000);\n v.setBigUint64(0, s);\n } else {\n const s =\n ts.t_s === \"never\" ? bigint.zero : bigint(ts.t_s).multiply(1000 * 1000);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n\nexport function durationRoundedToBuffer(ts: TalerProtocolDuration): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.d_us);\n v.setBigUint64(0, s);\n } else {\n const s = ts.d_us === \"forever\" ? bigint.zero : bigint(ts.d_us);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\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, Context, renderContext } from \"./codec.js\";\n\ndeclare const flavor_AbsoluteTime: unique symbol;\ndeclare const flavor_TalerProtocolTimestamp: unique symbol;\ndeclare const flavor_TalerPreciseTimestamp: unique symbol;\n\nconst opaque_AbsoluteTime: unique symbol = Symbol(\"opaque_AbsoluteTime\");\n\n// FIXME: Make this opaque!\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n\n readonly _flavor?: typeof flavor_AbsoluteTime;\n\n // Make the type opaque, we only want our constructors\n // to able to create an AbsoluteTime value.\n [opaque_AbsoluteTime]: true;\n}\n\nexport interface TalerProtocolTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n readonly _flavor?: typeof flavor_TalerProtocolTimestamp;\n}\n\n/**\n * Precise timestamp, typically used in the wallet-core\n * API but not in other Taler APIs so far.\n */\nexport interface TalerPreciseTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n /**\n * Optional microsecond offset (non-negative integer).\n */\n readonly off_us?: number;\n\n readonly _flavor?: typeof flavor_TalerPreciseTimestamp;\n}\n\nexport namespace TalerPreciseTimestamp {\n export function now(): TalerPreciseTimestamp {\n const absNow = AbsoluteTime.now();\n return AbsoluteTime.toPreciseTimestamp(absNow);\n }\n\n export function round(t: TalerPreciseTimestamp): TalerProtocolTimestamp {\n return {\n t_s: t.t_s,\n };\n }\n\n export function fromSeconds(s: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(s),\n off_us: Math.floor((s - Math.floor(s)) / 1000 / 1000),\n };\n }\n\n export function fromMilliseconds(ms: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(ms / 1000),\n off_us: Math.floor((ms - Math.floor(ms / 1000) * 1000) * 1000),\n };\n }\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toProtocolTimestamp(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 isNever(t: TalerProtocolTimestamp): boolean {\n return t.t_s === \"never\";\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\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\n/**\n * Timeshift in milliseconds.\n */\nlet timeshift = 0;\n\n/**\n * Set timetravel offset in milliseconds.\n *\n * Use carefully and only for testing.\n */\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function toMilliseconds(d: Duration): number {\n if (d.d_ms === \"forever\") {\n return Number.MAX_VALUE;\n }\n return d.d_ms;\n }\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 /**\n * Compare two durations. Returns 0 when equal, -1 when a < b\n * and +1 when a > b.\n */\n export function cmp(d1: Duration, d2: Duration): 1 | 0 | -1 {\n if (d1.d_ms === \"forever\") {\n if (d2.d_ms === \"forever\") {\n return 0;\n }\n return 1;\n }\n if (d2.d_ms === \"forever\") {\n return -1;\n }\n if (d1.d_ms == d2.d_ms) {\n return 0;\n }\n if (d1.d_ms > d2.d_ms) {\n return 1;\n }\n return -1;\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 function fromSpec(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\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: Math.floor(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 fromMilliseconds(ms: number): Duration {\n return {\n d_ms: ms,\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 getStampMsNow(): number {\n return new Date().getTime();\n }\n\n export function getStampMsNever(): number {\n return Number.MAX_SAFE_INTEGER;\n }\n\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromMilliseconds(ms: number): AbsoluteTime {\n return {\n t_ms: ms,\n [opaque_AbsoluteTime]: true,\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, [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\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 isNever(t: AbsoluteTime): boolean {\n return t.t_ms === \"never\";\n }\n\n export function fromProtocolTimestamp(\n t: TalerProtocolTimestamp,\n ): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return {\n t_ms: t.t_s * 1000,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromStampMs(stampMs: number): AbsoluteTime {\n return {\n t_ms: stampMs,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromPreciseTimestamp(t: TalerPreciseTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n const offsetUs = t.off_us ?? 0;\n return {\n t_ms: t.t_s * 1000 + Math.floor(offsetUs / 1000),\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function toStampMs(at: AbsoluteTime): number {\n if (at.t_ms === \"never\") {\n return Number.MAX_SAFE_INTEGER;\n }\n return at.t_ms;\n }\n\n export function toPreciseTimestamp(at: AbsoluteTime): TalerPreciseTimestamp {\n if (at.t_ms == \"never\") {\n return {\n t_s: \"never\",\n };\n }\n const t_s = Math.floor(at.t_ms / 1000);\n const off_us = Math.floor(1000 * (at.t_ms - t_s * 1000));\n return {\n t_s,\n off_us,\n };\n }\n\n export function toProtocolTimestamp(\n at: AbsoluteTime,\n ): 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\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: t1.t_ms + d.d_ms, [opaque_AbsoluteTime]: true };\n }\n\n /**\n * Get the remaining duration until {@param t1}.\n *\n * If {@param t1} already happened, the remaining duration\n * is zero.\n */\n export function remaining(t1: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return Duration.getForever();\n }\n const stampNow = now();\n if (stampNow.t_ms === \"never\") {\n throw Error(\"invariant violated\");\n }\n return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_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\", [opaque_AbsoluteTime]: true };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms), [opaque_AbsoluteTime]: true };\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 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 if (x === undefined) {\n throw Error(`got undefined and expected absolute time at ${renderContext(c)}`);\n }\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms, [opaque_AbsoluteTime]: true };\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 if (x === undefined) {\n throw Error(`got undefined and expected timestamp at ${renderContext(c)}`);\n }\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 protocol timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForPreciseTimestamp: Codec<TalerPreciseTimestamp> = {\n decode(x: any, c?: Context): TalerPreciseTimestamp {\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 throw Error(`expected precise 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 { Amounts, codecForAmountString } from \"./amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecForStringURL,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport {\n CurrencySpecification,\n codecForCurrencySpecificiation,\n codecForEither,\n codecForProduct,\n} from \"./index.js\";\nimport { Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForDuration,\n codecForTimestamp,\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 // The exchange's base URL.\n url: string;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKeyString;\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: EddsaPublicKeyString;\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 // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\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?: InternationalizedString;\n\n // The number of units of the product to deliver to the customer.\n quantity?: Integer;\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?: ImageDataUrl;\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 // The hash of the merchant instance's wire details.\n h_wire: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: TalerProtocolDuration;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: InternationalizedString;\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: string;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: TalerProtocolTimestamp;\n\n // More info about the merchant, see below.\n merchant: MerchantInfo;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: string;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: TalerProtocolTimestamp;\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: ExchangeHandle[];\n\n // List of products that are part of the purchase (see Product).\n products?: Product[];\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: TalerProtocolTimestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // Time when this contract was generated.\n timestamp: TalerProtocolTimestamp;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional, but either fulfillment_url\n // or fulfillment_message must be specified in every\n // contract terms.\n //\n // If a non-unique fulfillment URL is used, a customer can only\n // buy the order once and will be redirected to a previous purchase\n // when trying to buy an order with the same fulfillment URL a second\n // time. This is useful for digital goods that a customer only needs\n // to buy once but should be able to repeatedly download.\n //\n // For orders where the customer is expected to be able to make\n // repeated purchases (for equivalent goods), the fulfillment URL\n // should be made unique for every order. The easiest way to do\n // this is to include a unique order ID in the fulfillment URL.\n //\n // When POSTing to the merchant, the placeholder text \"${ORDER_ID}\"\n // is be replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL). Note that this placeholder can only be used once.\n // Front-ends may use other means to generate a unique fulfillment URL.\n fulfillment_url?: string;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: InternationalizedString;\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: string;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n // Must really be an Object (not a string, integer, float or array).\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\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 * 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 * Canonical, public base URL of the exchange.\n */\n base_url: string;\n\n currency: string;\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 accounts: ExchangeWireAccount[];\n\n wire_fees: { [methodName: string]: WireFeesJson[] };\n\n denominations: DenomGroup[];\n}\n\nexport type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n\nexport interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n\n // XOR of all the SHA-512 hash values of the denominations' public keys\n // in this group. Note that for hashing, the binary format of the\n // public keys is used, and not their base32 encoding.\n hash: HashCodeString;\n}\n\nexport interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignatureString;\n\n // When does the denomination key become valid?\n stamp_start: TalerProtocolTimestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: TalerProtocolTimestamp;\n\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n}\n\nexport type RsaPublicKeySring = string;\nexport type AgeMask = number;\nexport type ImageDataUrl = string;\n\n/**\n * 32-byte value representing a point on Curve25519.\n */\nexport type Cs25519Point = string;\n\nexport interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\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\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 status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\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 RewardPickupGetResponse {\n reward_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 pos_confirmation?: 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 // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected or pending.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Deprecated field use status instead\n // The transfer has been confirmed and registered by the bank.\n // Does not guarantee that the funds have arrived at the exchange already.\n transfer_done: boolean;\n}\n\nexport const codeForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\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\ndeclare const __amount_str: unique symbol;\nexport type AmountString = string & { [__amount_str]: true };\n// export 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 codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\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\", codecForAmountString())\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\", codecForAmountString())\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\", codecForAmountString())\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 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\n// FIXME: Validate properly!\nexport const codecForNgDenominations: Codec<DenomGroup> = codecForAny();\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\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 .property(\"accounts\", codecForList(codecForExchangeWireAccount()))\n .property(\"wire_fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .property(\"denominations\", codecForList(codecForNgDenominations))\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 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(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\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 codecForRewardPickupGetResponse =\n (): Codec<RewardPickupGetResponse> =>\n buildCodecForObject<RewardPickupGetResponse>()\n .property(\"reward_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 codecForExchangeWithdrawBatchResponse =\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 .property(\"pos_confirmation\", codecOptional(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 codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\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 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 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\ninterface DepositConfirmationSignature {\n // The EdDSA signature of `TALER_DepositConfirmationPS` using a current\n // `signing key of the exchange <sign-key-priv>` 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: EddsaSignatureString;\n}\n\nexport interface BatchDepositSuccess {\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 // `Public EdDSA key of the exchange <sign-key-pub>` 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: EddsaPublicKeyString;\n\n // Array of deposit confirmation signatures from the exchange\n // Entries must be in the same order the coins were given\n // in the batch deposit request.\n exchange_sig: EddsaSignatureString;\n}\n\nexport const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> =>\n buildCodecForObject<BatchDepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"BatchDepositSuccess\");\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\n/**\n * @deprecated batch deposit should be used.\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 type WireSalt = string;\n\nexport interface ExchangeBatchDepositRequest {\n // The merchant's account details.\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: WireSalt;\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 // The list of coins that are going to be deposited with this Request.\n coins: BatchDepositRequestCoin[];\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 <merchant-pub>`, so that the client can identify the\n // merchant for refund requests.\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 batch-deposit.\n // This might be a refund, auction or escrow policy.\n policy?: any;\n}\n\nexport interface BatchDepositRequestCoin {\n // EdDSA public key of the coin being deposited.\n coin_pub: EddsaPublicKeyString;\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 // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: Amounts;\n\n // Signature over `TALER_DepositRequestPS`, made by the customer with the\n // `coin's private key <coin-priv>`.\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\nexport interface ExchangeRefundRequest {\n // Amount to be refunded, can be a fraction of the\n // coin's total deposit value (including deposit fee);\n // must be larger than the refund fee.\n refund_amount: AmountString;\n\n // SHA-512 hash of the contact of the merchant with the customer.\n h_contract_terms: HashCodeString;\n\n // 64-bit transaction id of the refund transaction between merchant and customer.\n rtransaction_id: number;\n\n // EdDSA public key of the merchant.\n merchant_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the merchant over a\n // TALER_RefundRequestPS with purpose\n // TALER_SIGNATURE_MERCHANT_REFUND\n // affirming the refund.\n merchant_sig: EddsaPublicKeyString;\n}\n\nexport interface ExchangeRefundSuccessResponse {\n // The EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND over\n // a TALER_RecoupRefreshConfirmationPS\n // 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\nexport const codecForExchangeRefundSuccessResponse =\n (): Codec<ExchangeRefundSuccessResponse> =>\n buildCodecForObject<ExchangeRefundSuccessResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .build(\"ExchangeRefundSuccessResponse\");\n\nexport type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n\nexport interface DenyAllAccountRestriction {\n type: \"deny\";\n}\n\n// Accounts interacting with this type of account\n// restriction must have a payto://-URI matching\n// the given regex.\nexport interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: InternationalizedString;\n}\n\nexport interface ExchangeWireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: string;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignatureString;\n\n // Display label wallets should use to show this\n // bank account.\n // Since protocol **v19**.\n bank_label?: string;\n priority?: number;\n}\n\nexport const codecForExchangeWireAccount = (): Codec<ExchangeWireAccount> =>\n buildCodecForObject<ExchangeWireAccount>()\n .property(\"conversion_url\", codecOptional(codecForStringURL()))\n .property(\"credit_restrictions\", codecForList(codecForAny()))\n .property(\"debit_restrictions\", codecForList(codecForAny()))\n .property(\"master_sig\", codecForString())\n .property(\"payto_uri\", codecForString())\n .property(\"bank_label\", codecOptional(codecForString()))\n .property(\"priority\", codecOptional(codecForNumber()))\n .build(\"WireAccount\");\n\nexport type Integer = number;\n\nexport interface BankConversionInfoConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n regional_currency: string;\n\n fiat_currency: string;\n\n // Currency used by this bank.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency_specification: CurrencySpecification;\n}\n\nexport const codecForBankConversionInfoConfig =\n (): Codec<BankConversionInfoConfig> =>\n buildCodecForObject<BankConversionInfoConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"fiat_currency\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .build(\"BankConversionInfoConfig\");\n\nexport interface DenominationExpiredMessage {\n // Taler error code. Note that beyond\n // expiration this message format is also\n // used if the key is not yet valid, or\n // has been revoked.\n code: number;\n\n // Signature by the exchange over a\n // TALER_DenominationExpiredAffirmationPS.\n // Must have purpose TALER_SIGNATURE_EXCHANGE_AFFIRM_DENOM_EXPIRED.\n exchange_sig: EddsaSignatureString;\n\n // Public key of the exchange used to create\n // the 'exchange_sig.\n exchange_pub: EddsaPublicKeyString;\n\n // Hash of the denomination public key that is unknown.\n h_denom_pub: HashCodeString;\n\n // When was the signature created.\n timestamp: TalerProtocolTimestamp;\n\n // What kind of operation was requested that now\n // failed?\n oper: string;\n}\n\nexport const codecForDenominationExpiredMessage = () =>\n buildCodecForObject<DenominationExpiredMessage>()\n .property(\"code\", codecForNumber())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"oper\", codecForString())\n .build(\"DenominationExpiredMessage\");\n\nexport interface CoinHistoryResponse {\n // Current balance of the coin.\n balance: AmountString;\n\n // Hash of the coin's denomination.\n h_denom_pub: HashCodeString;\n\n // Transaction history for the coin.\n history: any[];\n}\n\nexport const codecForCoinHistoryResponse = () =>\n buildCodecForObject<CoinHistoryResponse>()\n .property(\"balance\", codecForAmountString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"history\", codecForAny())\n .build(\"CoinHistoryResponse\");\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 { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { URLSearchParams } from \"./url.js\";\n\nexport type PaytoUri =\n | PaytoUriUnknown\n | PaytoUriIBAN\n | PaytoUriTalerBank\n | PaytoUriBitcoin;\n\ndeclare const __payto_str: unique symbol;\nexport type PaytoString = string & { [__payto_str]: true };\n\nexport function codecForPaytoString(): Codec<PaytoString> {\n return {\n decode(x: any, c?: Context): PaytoString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (!x.startsWith(paytoPfx)) {\n throw new DecodingError(\n `expected start with payto at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as PaytoString;\n },\n };\n}\n\nexport interface PaytoUriGeneric {\n targetType: PaytoType | 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 address: string;\n segwitAddrs: Array<string>;\n}\n\nconst paytoPfx = \"payto://\";\n\nexport type PaytoType = \"iban\" | \"bitcoin\" | \"x-taler-bank\";\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: PaytoType,\n first: string,\n second?: string,\n): PaytoUriGeneric {\n switch (type) {\n case \"bitcoin\": {\n const uppercased = first.toUpperCase();\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetType: \"bitcoin\",\n targetPath: first,\n address: uppercased,\n params: {},\n segwitAddrs: !second ? [] : generateFakeSegwitAddress(second, first),\n };\n return result;\n }\n case \"iban\": {\n const uppercased = first.toUpperCase();\n const result: PaytoUriIBAN = {\n isKnown: true,\n targetType: \"iban\",\n iban: uppercased,\n params: {},\n targetPath: !second ? uppercased : `${second}/${uppercased}`,\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): PaytoString {\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 as PaytoString;\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].toUpperCase();\n }\n if (parts.length === 2) {\n bic = parts[0];\n iban = parts[1].toUpperCase();\n } else {\n iban = targetPath.toUpperCase();\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 uppercased = targetType.toUpperCase();\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetPath,\n targetType,\n address: uppercased,\n params,\n segwitAddrs,\n };\n\n return result;\n }\n return {\n targetPath,\n targetType,\n params,\n isKnown: false,\n };\n}\n\nexport function talerPaytoFromExchangeReserve(\n exchangeBaseUrl: string,\n reservePub: string,\n): string {\n const url = new URL(exchangeBaseUrl);\n let proto: string;\n if (url.protocol === \"http:\") {\n proto = \"taler-reserve-http\";\n } else if (url.protocol === \"https:\") {\n proto = \"taler-reserve\";\n } else {\n throw Error(`unsupported exchange base URL protocol (${url.protocol})`);\n }\n\n let path = url.pathname;\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n return `payto://${proto}/${url.host}${url.pathname}${reservePub}`;\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 type { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport {\n TalerError,\n base64FromArrayBuffer,\n makeErrorDetail,\n stringToBytes,\n} from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AbsoluteTime, Duration } 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\" | \"PATCH\" | \"PUT\" | \"GET\" | \"DELETE\";\n headers?: { [name: string]: string | undefined };\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 * How to handle redirects.\n * Same semantics as WHATWG fetch.\n */\n redirect?: \"follow\" | \"error\" | \"manual\";\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 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\n/**\n * Read Taler error details from an HTTP response.\n */\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const contentType = httpResponse.headers.get(\"content-type\");\n if (contentType !== \"application/json\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n contentType: contentType || \"<null>\",\n },\n \"Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.\",\n );\n }\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\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 let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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 expectSuccessResponseOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (httpResponse.status >= 200 && httpResponse.status <= 299) {\n return;\n }\n const errResp = await readTalerErrorResponse(httpResponse);\n throwUnexpectedRequestError(httpResponse, errResp);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 = AbsoluteTime.fromMilliseconds(expiryDateMs);\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 * Only allow HTTPS connections, not plain http.\n */\n requireTls?: boolean;\n printAsCurl?: 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/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport {\n HttpResponse,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http-common.js\";\nimport {\n Codec,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TalerErrorDetail,\n} from \"./index.js\";\n\ntype OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =\n ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;\n\nexport type OperationResult<Body, ErrorEnum, K = never> =\n | OperationOk<Body>\n | OperationAlternative<ErrorEnum, any>\n | OperationFail<ErrorEnum>\n | OperationFailWithBodyOrNever<ErrorEnum, K>;\n\nexport function isOperationOk<T, E>(\n c: OperationResult<T, E>,\n): c is OperationOk<T> {\n return c.type === \"ok\";\n}\n\nexport function isOperationFail<T, E>(\n c: OperationResult<T, E>,\n): c is OperationFail<E> {\n return c.type === \"fail\";\n}\n\n/**\n * successful operation\n */\nexport interface OperationOk<BodyT> {\n type: \"ok\";\n\n /**\n * Parsed response body.\n */\n body: BodyT;\n}\n\n/**\n * unsuccessful operation, see details\n */\nexport interface OperationFail<T> {\n type: \"fail\";\n\n /**\n * Error case (either HTTP status code or TalerErrorCode)\n */\n case: T;\n\n detail: TalerErrorDetail;\n}\n\n/**\n * unsuccessful operation, see body\n */\nexport interface OperationAlternative<T, B> {\n type: \"fail\";\n\n case: T;\n body: B;\n}\n\nexport interface OperationFailWithBody<B> {\n type: \"fail\";\n\n case: keyof B;\n body: B[OperationFailWithBody<B>[\"case\"]];\n}\n\nexport async function opSuccessFromHttp<T>(\n resp: HttpResponse,\n codec: Codec<T>,\n): Promise<OperationOk<T>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"ok\" as const, body };\n}\n\n/**\n * Success case, but instead of the body we're returning a fixed response\n * to the client.\n */\nexport function opFixedSuccess<T>(body: T): OperationOk<T> {\n return { type: \"ok\" as const, body };\n}\n\nexport function opEmptySuccess(resp: HttpResponse): OperationOk<void> {\n return { type: \"ok\" as const, body: void 0 };\n}\n\nexport async function opKnownFailureWithBody<B>(\n case_: keyof B,\n body: B[typeof case_],\n): Promise<OperationFailWithBody<B>> {\n return { type: \"fail\", case: case_, body };\n}\n\nexport async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(\n resp: HttpResponse,\n s: T,\n codec: Codec<B>,\n): Promise<OperationAlternative<T, B>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"fail\", case: s, body };\n}\n\nexport async function opKnownHttpFailure<T extends HttpStatusCode>(\n s: T,\n resp: HttpResponse,\n): Promise<OperationFail<T>> {\n const detail = await readTalerErrorResponse(resp);\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opKnownTalerFailure<T extends TalerErrorCode>(\n s: T,\n detail: TalerErrorDetail,\n): OperationFail<T> {\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: resp.requestUrl,\n requestMethod: resp.requestMethod,\n httpStatusCode: resp.status,\n errorResponse: error,\n },\n `Unexpected HTTP status ${resp.status} in response`,\n );\n}\n\n/**\n * Convenience function to throw an error if the operation is not a success.\n */\nexport function narrowOpSuccessOrThrow<Body, ErrorEnum>(\n opName: string,\n opRes: OperationResult<Body, ErrorEnum>,\n): asserts opRes is OperationOk<Body> {\n if (opRes.type !== \"ok\") {\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR,\n {\n operation: opName,\n error: String(opRes.case),\n detail: \"detail\" in opRes ? opRes.detail : undefined,\n },\n `Operation ${opName} failed: ${String(opRes.case)}`,\n );\n }\n}\n\nexport type ResultByMethod<\n TT extends object,\n p extends keyof TT,\n> = TT[p] extends (...args: any[]) => infer Ret\n ? Ret extends Promise<infer Result>\n ? Result extends OperationResult<any, any>\n ? Result\n : never\n : never //api always use Promises\n : never; //error cases just for functions\n\nexport type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<\n ResultByMethod<TT, p>,\n OperationOk<any>\n>;\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\n/**\n * @fileoverview\n * Construction and parsing of taler:// URIs.\n * Specification: https://lsd.gnunet.org/lsd0006/\n */\n\n/**\n * Imports.\n */\nimport { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { opFixedSuccess, opKnownTalerFailure } from \"./operation.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { URL, URLSearchParams } from \"./url.js\";\n/**\n * A parsed taler URI.\n */\nexport type TalerUri =\n | PayUriResult\n | PayTemplateUriResult\n | DevExperimentUri\n | PayPullUriResult\n | PayPushUriResult\n | BackupRestoreUri\n | RefundUriResult\n | WithdrawUriResult\n | WithdrawExchangeUri\n | AddExchangeUri;\n\ndeclare const __action_str: unique symbol;\nexport type TalerUriString = string & { [__action_str]: true };\n\nexport function codecForTalerUriString(): Codec<TalerUriString> {\n return {\n decode(x: any, c?: Context): TalerUriString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (parseTalerUri(x) === undefined) {\n throw new DecodingError(\n `invalid taler URI at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as TalerUriString;\n },\n };\n}\n\nexport interface PayUriResult {\n type: TalerUriAction.Pay;\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken?: string;\n noncePriv?: string;\n}\n\nexport type TemplateParams = {\n amount?: string;\n summary?: string;\n};\n\nexport interface PayTemplateUriResult {\n type: TalerUriAction.PayTemplate;\n merchantBaseUrl: string;\n templateId: string;\n templateParams: TemplateParams;\n}\n\nexport interface WithdrawUriResult {\n type: TalerUriAction.Withdraw;\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n type: TalerUriAction.Refund;\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface PayPushUriResult {\n type: TalerUriAction.PayPush;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n type: TalerUriAction.PayPull;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n type: TalerUriAction.DevExperiment;\n devExperimentId: string;\n}\n\nexport interface BackupRestoreUri {\n type: TalerUriAction.Restore;\n walletRootPriv: string;\n providers: Array<string>;\n}\n\nexport interface WithdrawExchangeUri {\n type: TalerUriAction.WithdrawExchange;\n exchangeBaseUrl: string;\n exchangePub?: string;\n amount?: AmountString;\n}\n\nexport interface AddExchangeUri {\n type: TalerUriAction.AddExchange;\n exchangeBaseUrl: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"withdraw\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 const result: WithdrawUriResult = {\n type: TalerUriAction.Withdraw,\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n withdrawalOperationId: withdrawId,\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const r = parseWithdrawUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseAddExchangeUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"add-exchange\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 p = [host, ...pathSegments].join(\"/\");\n\n const result: AddExchangeUri = {\n type: TalerUriAction.AddExchange,\n exchangeBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseAddExchangeUri(s: string): AddExchangeUri | undefined {\n const r = parseAddExchangeUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * @deprecated use TalerUriAction\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\nexport enum TalerUriAction {\n Pay = \"pay\",\n Withdraw = \"withdraw\",\n Refund = \"refund\",\n PayPull = \"pay-pull\",\n PayPush = \"pay-push\",\n PayTemplate = \"pay-template\",\n Restore = \"restore\",\n DevExperiment = \"dev-experiment\",\n WithdrawExchange = \"withdraw-exchange\",\n AddExchange = \"add-exchange\",\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\nfunction parseProtoInfoWithError(s: string, action: string) {\n if (\n !s.toLowerCase().startsWith(\"taler://\") &&\n !s.toLowerCase().startsWith(\"taler+http://\")\n ) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return opFixedSuccess({\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n });\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return opFixedSuccess({\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n });\n } else {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n}\n\ntype Parser = (s: string) => TalerUri | undefined;\nconst parsers: { [A in TalerUriAction]: Parser } = {\n [TalerUriAction.Pay]: parsePayUri,\n [TalerUriAction.PayPull]: parsePayPullUri,\n [TalerUriAction.PayPush]: parsePayPushUri,\n [TalerUriAction.PayTemplate]: parsePayTemplateUri,\n [TalerUriAction.Restore]: parseRestoreUri,\n [TalerUriAction.Refund]: parseRefundUri,\n [TalerUriAction.Withdraw]: parseWithdrawUri,\n [TalerUriAction.DevExperiment]: parseDevExperimentUri,\n [TalerUriAction.WithdrawExchange]: parseWithdrawExchangeUri,\n [TalerUriAction.AddExchange]: parseAddExchangeUri,\n};\n\nexport function parseTalerUri(string: string): TalerUri | undefined {\n const https = string.startsWith(\"taler://\");\n const http = string.startsWith(\"taler+http://\");\n if (!https && !http) return undefined;\n const actionStart = https ? 8 : 13;\n const actionEnd = string.indexOf(\"/\", actionStart + 1);\n const action = string.substring(actionStart, actionEnd);\n const found = Object.values(TalerUriAction).find((x) => x === action);\n if (!found) return undefined;\n return parsers[found](string);\n}\n\nexport function stringifyTalerUri(uri: TalerUri): string {\n switch (uri.type) {\n case TalerUriAction.DevExperiment: {\n return stringifyDevExperimentUri(uri);\n }\n case TalerUriAction.Pay: {\n return stringifyPayUri(uri);\n }\n case TalerUriAction.PayPull: {\n return stringifyPayPullUri(uri);\n }\n case TalerUriAction.PayPush: {\n return stringifyPayPushUri(uri);\n }\n case TalerUriAction.PayTemplate: {\n return stringifyPayTemplateUri(uri);\n }\n case TalerUriAction.Restore: {\n return stringifyRestoreUri(uri);\n }\n case TalerUriAction.Refund: {\n return stringifyRefundUri(uri);\n }\n case TalerUriAction.Withdraw: {\n return stringifyWithdrawUri(uri);\n }\n case TalerUriAction.WithdrawExchange: {\n return stringifyWithdrawExchange(uri);\n }\n case TalerUriAction.AddExchange: {\n return stringifyAddExchange(uri);\n }\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 type: TalerUriAction.Pay,\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n uriString: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(uriString, TalerUriAction.PayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi.rest.split(\"?\");\n\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n\n const q = new URLSearchParams(c[1] ?? \"\");\n const params: Record<string, string> = {};\n q.forEach((v, k) => {\n params[k] = v;\n });\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayTemplate,\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPush);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPush,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPull);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPull,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parseWithdrawExchangeUri(\n s: string,\n): WithdrawExchangeUri | undefined {\n const pi = parseProtoInfo(s, \"withdraw-exchange\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 1) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;\n const pathSegments = parts.slice(1, parts.length - 1);\n const hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n const q = new URLSearchParams(c[1] ?? \"\");\n const amount = (q.get(\"a\") ?? undefined) as AmountString | undefined;\n\n return {\n type: TalerUriAction.WithdrawExchange,\n exchangeBaseUrl,\n exchangePub: exchangePub != \"\" ? exchangePub : undefined,\n amount,\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.Refund,\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 parts = c[0].split(\"/\");\n return {\n type: TalerUriAction.DevExperiment,\n devExperimentId: parts[0],\n };\n}\n\nexport function parseRestoreUri(uri: string): BackupRestoreUri | undefined {\n const pi = parseProtoInfo(uri, \"restore\");\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\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<string>();\n parts[1].split(\",\").map((name) => {\n const url = canonicalizeBaseUrl(\n `${pi.innerProto}://${decodeURIComponent(name)}/`,\n );\n providers.push(url);\n });\n return {\n type: TalerUriAction.Restore,\n walletRootPriv,\n providers,\n };\n}\n\n// ================================================\n// To string functions\n// ================================================\n\nexport function stringifyPayUri({\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n}: Omit<PayUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, {\n c: claimToken,\n n: noncePriv,\n });\n return `${proto}://pay/${path}${orderId}/${sessionId}${query}`;\n}\n\nexport function stringifyPayPullUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPullUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://pay-pull/${path}${contractPriv}`;\n}\n\nexport function stringifyPayPushUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPushUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n\n return `${proto}://pay-push/${path}${contractPriv}`;\n}\n\nexport function stringifyRestoreUri({\n providers,\n walletRootPriv,\n}: Omit<BackupRestoreUri, \"type\">): string {\n const list = providers\n .map((url) => `${encodeURIComponent(new URL(url).href)}`)\n .join(\",\");\n return `taler://restore/${walletRootPriv}/${list}`;\n}\n\nexport function stringifyWithdrawExchange({\n exchangeBaseUrl,\n exchangePub,\n amount,\n}: Omit<WithdrawExchangeUri, \"type\">): string {\n const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {\n a: amount,\n });\n return `${proto}://withdraw-exchange/${path}${exchangePub ?? \"\"}${query}`;\n}\n\nexport function stringifyAddExchange({\n exchangeBaseUrl,\n}: Omit<AddExchangeUri, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://add-exchange/${path}`;\n}\n\nexport function stringifyDevExperimentUri({\n devExperimentId,\n}: Omit<DevExperimentUri, \"type\">): string {\n return `taler://dev-experiment/${devExperimentId}`;\n}\n\nexport function stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams,\n}: Omit<PayTemplateUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, templateParams);\n return `${proto}://pay-template/${path}${templateId}${query}`;\n}\n\nexport function stringifyRefundUri({\n merchantBaseUrl,\n orderId,\n}: Omit<RefundUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(merchantBaseUrl);\n return `${proto}://refund/${path}${orderId}/`;\n}\n\nexport function stringifyWithdrawUri({\n bankIntegrationApiBaseUrl,\n withdrawalOperationId,\n}: Omit<WithdrawUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(bankIntegrationApiBaseUrl);\n return `${proto}://withdraw/${path}${withdrawalOperationId}`;\n}\n\n/**\n * Use baseUrl to defined http or https\n * create path using host+port+pathname\n * use params to create a query parameter string or empty\n */\nfunction getUrlInfo(\n baseUrl: string,\n params: Record<string, string | undefined> = {},\n): { proto: string; path: string; query: string } {\n const url = new URL(baseUrl);\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 URL protocol in ${baseUrl}`);\n }\n let path = url.hostname;\n if (url.port) {\n path = path + \":\" + url.port;\n }\n if (url.pathname) {\n path = path + url.pathname;\n }\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n const qp = new URLSearchParams();\n let withParams = false;\n Object.entries(params).forEach(([name, value]) => {\n if (value !== undefined) {\n withParams = true;\n qp.append(name, value);\n }\n });\n const query = withParams ? \"?\" + qp.toString() : \"\";\n\n return { proto, path, query };\n}\n", "import { deprecate } from \"util\";\nimport { codecForAmountString } from \"../amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"../codec.js\";\nimport { PaytoString, codecForPaytoString } from \"../payto.js\";\nimport {\n AmountString,\n codecForInternationalizedString,\n codecForLocation,\n} from \"../taler-types.js\";\nimport { TalerUriString, codecForTalerUriString } from \"../taleruri.js\";\nimport {\n AbsoluteTime,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n} from \"../time.js\";\n\nexport type UserAndPassword = {\n username: string;\n password: string;\n};\n\nexport type UserAndToken = {\n username: string;\n token: AccessToken;\n};\n\ndeclare const opaque_OfficerAccount: unique symbol;\nexport type LockedAccount = string & { [opaque_OfficerAccount]: true };\n\ndeclare const opaque_OfficerId: unique symbol;\nexport type OfficerId = string & { [opaque_OfficerId]: true };\n\ndeclare const opaque_OfficerSigningKey: unique symbol;\nexport type SigningKey = Uint8Array & { [opaque_OfficerSigningKey]: true };\n\nexport interface OfficerAccount {\n id: OfficerId;\n signingKey: SigningKey;\n}\n\nexport type PaginationParams = {\n /**\n * row identifier as the starting point of the query\n */\n offset?: string;\n /**\n * max number of element in the result response\n * always greater than 0\n */\n limit?: number;\n /**\n * order\n */\n order?: \"asc\" | \"dec\";\n};\n\nexport type LongPollParams = {\n /**\n * milliseconds the server should wait for at least one result to be shown\n */\n timeoutMs?: number;\n};\n///\n/// HASH\n///\n\n// 64-byte hash code.\ntype HashCode = string;\n\ntype PaytoHash = string;\n\ntype AmlOfficerPublicKeyP = string;\n\n// 32-byte hash code.\ntype ShortHashCode = string;\n\n// 16-byte salt.\ntype WireSalt = string;\n\ntype SHA256HashCode = ShortHashCode;\n\ntype SHA512HashCode = HashCode;\n\n// 32-byte nonce value, must only be used once.\ntype CSNonce = string;\n\n// 32-byte nonce value, must only be used once.\ntype RefreshMasterSeed = string;\n\n// 32-byte value representing a point on Curve25519.\ntype Cs25519Point = string;\n\n// 32-byte value representing a scalar multiplier\n// for scalar operations on points on Curve25519.\ntype Cs25519Scalar = string;\n\n///\n/// KEYS\n///\n\n// 16-byte access token used to authorize access.\ntype ClaimToken = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPublicKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPrivateKey = string;\n\n// Edx25519 public keys are points on Curve25519 and represented using the\n// standard 256 bits Ed25519 compact format converted to Crockford\n// Base32.\ntype Edx25519PublicKey = string;\n\n// Edx25519 private keys are always points on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype Edx25519PrivateKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePublicKey = string;\n\n// Point on Curve25519 represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype CsRPublic = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePrivateKey = string;\n\ntype CoinPublicKey = EddsaPublicKey;\n\n// RSA public key converted to Crockford Base32.\ntype RsaPublicKey = string;\n\ntype Integer = number;\n\ntype WireTransferIdentifierRawP = string;\n// Subset of numbers: Integers in the\n// inclusive range 0 .. (2^53 - 1).\ntype SafeUint64 = number;\n\n// The string must be a data URL according to RFC 2397\n// with explicit mediatype and base64 parameters.\n//\n// data:<mediatype>;base64,<data>\n//\n// Supported mediatypes are image/jpeg and image/png.\n// Invalid strings will be rejected by the wallet.\ntype ImageDataUrl = string;\n\ntype WadId = string;\n\ntype Timestamp = TalerProtocolTimestamp;\n\ntype RelativeTime = TalerProtocolDuration;\n\nexport interface LoginToken {\n token: AccessToken;\n expiration: Timestamp;\n}\n\ndeclare const __ac_token: unique symbol;\nexport type AccessToken = string & {\n [__ac_token]: true;\n};\n\ndeclare const __officer_signature: unique symbol;\nexport type OfficerSignature = string & {\n [__officer_signature]: true;\n};\n\nexport namespace TalerAuthentication {\n export interface TokenRequest {\n // Service-defined scope for the token.\n // Typical scopes would be \"readonly\" or \"readwrite\".\n scope: string;\n\n // Server may impose its own upper bound\n // on the token validity duration\n duration?: RelativeTime;\n\n // Is the token refreshable into a new token during its\n // validity?\n // Refreshable tokens effectively provide indefinite\n // access if they are refreshed in time.\n refreshable?: boolean;\n }\n\n export interface TokenSuccessResponse {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n access_token: AccessToken;\n }\n export interface TokenSuccessResponseMerchant {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n token: AccessToken;\n }\n}\n\n// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html\nexport interface CurrencySpecification {\n // Name of the currency.\n name: string;\n\n // how many digits the user may enter after the decimal_separator\n num_fractional_input_digits: Integer;\n\n // Number of fractional digits to render in normal font and size.\n num_fractional_normal_digits: Integer;\n\n // Number of fractional digits to render always, if needed by\n // padding with zeros.\n num_fractional_trailing_zero_digits: Integer;\n\n // map of powers of 10 to alternative currency names / symbols, must\n // always have an entry under \"0\" that defines the base name,\n // e.g. \"0 => \u20AC\" or \"3 => k\u20AC\". For BTC, would be \"0 => BTC, -3 => mBTC\".\n // Communicates the currency symbol to be used.\n alt_unit_names: { [log10: string]: string };\n}\n\n//FIXME: implement this codec\nexport const codecForAccessToken = codecForString as () => Codec<AccessToken>;\nexport const codecForTokenSuccessResponse =\n (): Codec<TalerAuthentication.TokenSuccessResponse> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponse>()\n .property(\"access_token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponse\");\n\nexport const codecForTokenSuccessResponseMerchant =\n (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()\n .property(\"token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponseMerchant\");\n\nexport const codecForCurrencySpecificiation =\n (): Codec<CurrencySpecification> =>\n buildCodecForObject<CurrencySpecification>()\n .property(\"name\", codecForString())\n .property(\"num_fractional_input_digits\", codecForNumber())\n .property(\"num_fractional_normal_digits\", codecForNumber())\n .property(\"num_fractional_trailing_zero_digits\", codecForNumber())\n .property(\"alt_unit_names\", codecForMap(codecForString()))\n .build(\"CurrencySpecification\");\n\nexport const codecForIntegrationBankConfig =\n (): Codec<TalerCorebankApi.IntegrationConfig> =>\n buildCodecForObject<TalerCorebankApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .build(\"TalerCorebankApi.IntegrationConfig\");\n\nexport const codecForCoreBankConfig = (): Codec<TalerCorebankApi.Config> =>\n buildCodecForObject<TalerCorebankApi.Config>()\n .property(\"name\", codecForConstString(\"libeufin-bank\"))\n .property(\"version\", codecForString())\n .property(\"bank_name\", codecForString())\n .property(\"allow_conversion\", codecForBoolean())\n .property(\"allow_registrations\", codecForBoolean())\n .property(\"allow_deletions\", codecForBoolean())\n .property(\"allow_edit_name\", codecForBoolean())\n .property(\"allow_edit_cashout_payto_uri\", codecForBoolean())\n .property(\"default_debit_threshold\", codecForAmountString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"supported_tan_channels\",\n codecForList(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\"wire_type\", codecForString())\n .build(\"TalerCorebankApi.Config\");\n\n//FIXME: implement this codec\nexport const codecForURN = codecForString;\n\nexport const codecForExchangeConfigInfo =\n (): Codec<TalerMerchantApi.ExchangeConfigInfo> =>\n buildCodecForObject<TalerMerchantApi.ExchangeConfigInfo>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"master_pub\", codecForString())\n .build(\"TalerMerchantApi.ExchangeConfigInfo\");\n\nexport const codecForMerchantConfig =\n (): Codec<TalerMerchantApi.VersionResponse> =>\n buildCodecForObject<TalerMerchantApi.VersionResponse>()\n .property(\"name\", codecForConstString(\"taler-merchant\"))\n .property(\"currency\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currencies\", codecForMap(codecForCurrencySpecificiation()))\n .property(\"exchanges\", codecForList(codecForExchangeConfigInfo()))\n .build(\"TalerMerchantApi.VersionResponse\");\n\nexport const codecForClaimResponse =\n (): Codec<TalerMerchantApi.ClaimResponse> =>\n buildCodecForObject<TalerMerchantApi.ClaimResponse>()\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.ClaimResponse\");\n\nexport const codecForPaymentResponse =\n (): Codec<TalerMerchantApi.PaymentResponse> =>\n buildCodecForObject<TalerMerchantApi.PaymentResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForStatusPaid = (): Codec<TalerMerchantApi.StatusPaid> =>\n buildCodecForObject<TalerMerchantApi.StatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refunded\", codecForBoolean())\n .property(\"type\", codecForConstString(\"paid\"))\n .build(\"TalerMerchantApi.StatusPaid\");\n\nexport const codecForStatusGoto =\n (): Codec<TalerMerchantApi.StatusGotoResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusGotoResponse>()\n .property(\"public_reorder_url\", codecForURL())\n .property(\"type\", codecForConstString(\"goto\"))\n .build(\"TalerMerchantApi.StatusGotoResponse\");\n\nexport const codecForStatusStatusUnpaid =\n (): Codec<TalerMerchantApi.StatusUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusUnpaidResponse>()\n .property(\"type\", codecForConstString(\"unpaid\"))\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForPaidRefundStatusResponse =\n (): Codec<TalerMerchantApi.PaidRefundStatusResponse> =>\n buildCodecForObject<TalerMerchantApi.PaidRefundStatusResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"refunded\", codecForBoolean())\n .build(\"TalerMerchantApi.PaidRefundStatusResponse\");\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse =\n (): Codec<TalerMerchantApi.AbortResponse> =>\n buildCodecForObject<TalerMerchantApi.AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForWalletRefundResponse =\n (): Codec<TalerMerchantApi.WalletRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.WalletRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantCoinRefundStatus\");\n\nexport const codecForQueryInstancesResponse =\n (): Codec<TalerMerchantApi.QueryInstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.QueryInstancesResponse>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"merchant_pub\", codecForString())\n .property(\"address\", codecForLocation())\n .property(\"jurisdiction\", codecForLocation())\n .property(\"use_stefan\", codecForBoolean())\n .property(\"default_wire_transfer_delay\", codecForDuration)\n .property(\"default_pay_delay\", codecForDuration)\n .property(\n \"auth\",\n buildCodecForObject<{\n method: \"external\" | \"token\";\n }>()\n .property(\n \"method\",\n codecForEither(\n codecForConstString(\"token\"),\n codecForConstString(\"external\"),\n ),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse.auth\"),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse\");\n\nexport const codecForAccountKycRedirects =\n (): Codec<TalerMerchantApi.AccountKycRedirects> =>\n buildCodecForObject<TalerMerchantApi.AccountKycRedirects>()\n .property(\n \"pending_kycs\",\n codecForList(codecForMerchantAccountKycRedirect()),\n )\n .property(\"timeout_kycs\", codecForList(codecForExchangeKycTimeout()))\n\n .build(\"TalerMerchantApi.AccountKycRedirects\");\n\nexport const codecForMerchantAccountKycRedirect =\n (): Codec<TalerMerchantApi.MerchantAccountKycRedirect> =>\n buildCodecForObject<TalerMerchantApi.MerchantAccountKycRedirect>()\n .property(\"kyc_url\", codecForURL())\n .property(\"aml_status\", codecForNumber())\n .property(\"exchange_url\", codecForURL())\n .property(\"payto_uri\", codecForPaytoString())\n .build(\"TalerMerchantApi.MerchantAccountKycRedirect\");\n\nexport const codecForExchangeKycTimeout =\n (): Codec<TalerMerchantApi.ExchangeKycTimeout> =>\n buildCodecForObject<TalerMerchantApi.ExchangeKycTimeout>()\n .property(\"exchange_url\", codecForURL())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .build(\"TalerMerchantApi.ExchangeKycTimeout\");\n\nexport const codecForAccountAddResponse =\n (): Codec<TalerMerchantApi.AccountAddResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountAddResponse>()\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .build(\"TalerMerchantApi.AccountAddResponse\");\n\nexport const codecForAccountsSummaryResponse =\n (): Codec<TalerMerchantApi.AccountsSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountsSummaryResponse>()\n .property(\"accounts\", codecForList(codecForBankAccountSummaryEntry()))\n .build(\"TalerMerchantApi.AccountsSummaryResponse\");\n\nexport const codecForBankAccountSummaryEntry =\n (): Codec<TalerMerchantApi.BankAccountSummaryEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountSummaryEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .build(\"TalerMerchantApi.BankAccountSummaryEntry\");\n\nexport const codecForBankAccountEntry =\n (): Codec<TalerMerchantApi.BankAccountEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .property(\"credit_facade_url\", codecOptional(codecForURL()))\n .property(\"active\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.BankAccountEntry\");\n\nexport const codecForInventorySummaryResponse =\n (): Codec<TalerMerchantApi.InventorySummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.InventorySummaryResponse>()\n .property(\"products\", codecForList(codecForInventoryEntry()))\n .build(\"TalerMerchantApi.InventorySummaryResponse\");\n\nexport const codecForInventoryEntry =\n (): Codec<TalerMerchantApi.InventoryEntry> =>\n buildCodecForObject<TalerMerchantApi.InventoryEntry>()\n .property(\"product_id\", codecForString())\n .property(\"product_serial\", codecForNumber())\n .build(\"TalerMerchantApi.InventoryEntry\");\n\nexport const codecForProductDetail =\n (): Codec<TalerMerchantApi.ProductDetail> =>\n buildCodecForObject<TalerMerchantApi.ProductDetail>()\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"unit\", codecForString())\n .property(\"price\", codecForAmountString())\n .property(\"image\", codecForString())\n .property(\"taxes\", codecForList(codecForTax()))\n .property(\"address\", codecForLocation())\n .property(\"next_restock\", codecForTimestamp)\n .property(\"total_stock\", codecForNumber())\n .property(\"total_sold\", codecForNumber())\n .property(\"total_lost\", codecForNumber())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"TalerMerchantApi.ProductDetail\");\n\nexport const codecForTax = (): Codec<TalerMerchantApi.Tax> =>\n buildCodecForObject<TalerMerchantApi.Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForAmountString())\n .build(\"TalerMerchantApi.Tax\");\n\nexport const codecForPostOrderResponse =\n (): Codec<TalerMerchantApi.PostOrderResponse> =>\n buildCodecForObject<TalerMerchantApi.PostOrderResponse>()\n .property(\"order_id\", codecForString())\n .property(\"token\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.PostOrderResponse\");\n\nexport const codecForOutOfStockResponse =\n (): Codec<TalerMerchantApi.OutOfStockResponse> =>\n buildCodecForObject<TalerMerchantApi.OutOfStockResponse>()\n .property(\"product_id\", codecForString())\n .property(\"available_quantity\", codecForNumber())\n .property(\"requested_quantity\", codecForNumber())\n .property(\"restock_expected\", codecForTimestamp)\n .build(\"TalerMerchantApi.OutOfStockResponse\");\n\nexport const codecForOrderHistory = (): Codec<TalerMerchantApi.OrderHistory> =>\n buildCodecForObject<TalerMerchantApi.OrderHistory>()\n .property(\"orders\", codecForList(codecForOrderHistoryEntry()))\n .build(\"TalerMerchantApi.OrderHistory\");\n\nexport const codecForOrderHistoryEntry =\n (): Codec<TalerMerchantApi.OrderHistoryEntry> =>\n buildCodecForObject<TalerMerchantApi.OrderHistoryEntry>()\n .property(\"order_id\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"refundable\", codecForBoolean())\n .property(\"paid\", codecForBoolean())\n .build(\"TalerMerchantApi.OrderHistoryEntry\");\n\nexport const codecForMerchant = (): Codec<TalerMerchantApi.Merchant> =>\n buildCodecForObject<TalerMerchantApi.Merchant>()\n .property(\"name\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"TalerMerchantApi.MerchantInfo\");\n\nexport const codecForExchange = (): Codec<TalerMerchantApi.Exchange> =>\n buildCodecForObject<TalerMerchantApi.Exchange>()\n .property(\"master_pub\", codecForString())\n .property(\"priority\", codecForNumber())\n .property(\"url\", codecForString())\n .build(\"TalerMerchantApi.Exchange\");\n\nexport const codecForContractTerms =\n (): Codec<TalerMerchantApi.ContractTerms> =>\n buildCodecForObject<TalerMerchantApi.ContractTerms>()\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(\n \"summary_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"merchant\", codecForMerchant())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchange()))\n .property(\"products\", codecForList(codecForProduct()))\n .property(\"extra\", codecForAny())\n .build(\"TalerMerchantApi.ContractTerms\");\n\nexport const codecForProduct = (): Codec<TalerMerchantApi.Product> =>\n buildCodecForObject<TalerMerchantApi.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(codecForAmountString()))\n .property(\"image\", codecOptional(codecForString()))\n .property(\"taxes\", codecOptional(codecForList(codecForTax())))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .build(\"TalerMerchantApi.Product\");\n\nexport const codecForCheckPaymentPaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentPaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentPaidResponse>()\n .property(\"order_status\", codecForConstString(\"paid\"))\n .property(\"refunded\", codecForBoolean())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"wired\", codecForBoolean())\n .property(\"deposit_total\", codecForAmountString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"wire_reports\", codecForList(codecForTransactionWireReport()))\n .property(\"wire_details\", codecForList(codecForTransactionWireTransfer()))\n .property(\"refund_details\", codecForList(codecForRefundDetails()))\n .property(\"order_status_url\", codecForURL())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentUnpaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentUnpaidResponse>()\n .property(\"order_status\", codecForConstString(\"unpaid\"))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .property(\"creation_time\", codecForTimestamp)\n .property(\"summary\", codecForString())\n .property(\"total_amount\", codecForAmountString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"already_paid_fulfillment_url\", codecOptional(codecForString()))\n .property(\"order_status_url\", codecForString())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentClaimedResponse =\n (): Codec<TalerMerchantApi.CheckPaymentClaimedResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentClaimedResponse>()\n .property(\"order_status\", codecForConstString(\"claimed\"))\n .property(\"contract_terms\", codecForContractTerms())\n .build(\"TalerMerchantApi.CheckPaymentClaimedResponse\");\n\nexport const codecForMerchantOrderPrivateStatusResponse =\n (): Codec<TalerMerchantApi.MerchantOrderStatusResponse> =>\n buildCodecForUnion<TalerMerchantApi.MerchantOrderStatusResponse>()\n .discriminateOn(\"order_status\")\n .alternative(\"paid\", codecForCheckPaymentPaidResponse())\n .alternative(\"unpaid\", codecForCheckPaymentUnpaidResponse())\n .alternative(\"claimed\", codecForCheckPaymentClaimedResponse())\n .build(\"TalerMerchantApi.MerchantOrderStatusResponse\");\n\nexport const codecForRefundDetails =\n (): Codec<TalerMerchantApi.RefundDetails> =>\n buildCodecForObject<TalerMerchantApi.RefundDetails>()\n .property(\"reason\", codecForString())\n .property(\"pending\", codecForBoolean())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .build(\"TalerMerchantApi.RefundDetails\");\n\nexport const codecForTransactionWireTransfer =\n (): Codec<TalerMerchantApi.TransactionWireTransfer> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireTransfer>()\n .property(\"exchange_url\", codecForURL())\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"confirmed\", codecForBoolean())\n .build(\"TalerMerchantApi.TransactionWireTransfer\");\n\nexport const codecForTransactionWireReport =\n (): Codec<TalerMerchantApi.TransactionWireReport> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireReport>()\n .property(\"code\", codecForNumber())\n .property(\"hint\", codecForString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"coin_pub\", codecForString())\n .build(\"TalerMerchantApi.TransactionWireReport\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<TalerMerchantApi.MerchantRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.MerchantRefundResponse>()\n .property(\"taler_refund_uri\", codecForTalerUriString())\n .property(\"h_contract\", codecForString())\n .build(\"TalerMerchantApi.MerchantRefundResponse\");\n\nexport const codecForTansferList = (): Codec<TalerMerchantApi.TransferList> =>\n buildCodecForObject<TalerMerchantApi.TransferList>()\n .property(\"transfers\", codecForList(codecForTransferDetails()))\n .build(\"TalerMerchantApi.TransferList\");\n\nexport const codecForTransferDetails =\n (): Codec<TalerMerchantApi.TransferDetails> =>\n buildCodecForObject<TalerMerchantApi.TransferDetails>()\n .property(\"credit_amount\", codecForAmountString())\n .property(\"wtid\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"exchange_url\", codecForURL())\n .property(\"transfer_serial_id\", codecForNumber())\n .property(\"execution_time\", codecOptional(codecForTimestamp))\n .property(\"verified\", codecOptional(codecForBoolean()))\n .property(\"confirmed\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.TransferDetails\");\n\nexport const codecForOtpDeviceSummaryResponse =\n (): Codec<TalerMerchantApi.OtpDeviceSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceSummaryResponse>()\n .property(\"otp_devices\", codecForList(codecForOtpDeviceEntry()))\n .build(\"TalerMerchantApi.OtpDeviceSummaryResponse\");\n\nexport const codecForOtpDeviceEntry =\n (): Codec<TalerMerchantApi.OtpDeviceEntry> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceEntry>()\n .property(\"otp_device_id\", codecForString())\n .property(\"device_description\", codecForString())\n .build(\"TalerMerchantApi.OtpDeviceEntry\");\n\nexport const codecForOtpDeviceDetails =\n (): Codec<TalerMerchantApi.OtpDeviceDetails> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceDetails>()\n .property(\"device_description\", codecForString())\n .property(\"otp_algorithm\", codecForNumber())\n .property(\"otp_ctr\", codecOptional(codecForNumber()))\n .property(\"otp_timestamp\", codecForNumber())\n .property(\"otp_code\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.OtpDeviceDetails\");\n\nexport const codecForTemplateSummaryResponse =\n (): Codec<TalerMerchantApi.TemplateSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.TemplateSummaryResponse>()\n .property(\"templates\", codecForList(codecForTemplateEntry()))\n .build(\"TalerMerchantApi.TemplateSummaryResponse\");\n\nexport const codecForTemplateEntry =\n (): Codec<TalerMerchantApi.TemplateEntry> =>\n buildCodecForObject<TalerMerchantApi.TemplateEntry>()\n .property(\"template_id\", codecForString())\n .property(\"template_description\", codecForString())\n .build(\"TalerMerchantApi.TemplateEntry\");\n\nexport const codecForTemplateDetails =\n (): Codec<TalerMerchantApi.TemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateDetails>()\n .property(\"template_description\", codecForString())\n .property(\"otp_id\", codecOptional(codecForString()))\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\"editable_defaults\", codecOptional(codecForTemplateContractDetailsDefaults()))\n .build(\"TalerMerchantApi.TemplateDetails\");\n\nexport const codecForTemplateContractDetails =\n (): Codec<TalerMerchantApi.TemplateContractDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetails>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecForNumber())\n .property(\"pay_duration\", codecForDuration)\n .build(\"TalerMerchantApi.TemplateContractDetails\");\n\nexport const codecForTemplateContractDetailsDefaults =\n (): Codec<TalerMerchantApi.TemplateContractDetailsDefaults> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetailsDefaults>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .property(\"pay_duration\", codecOptional(codecForDuration))\n .build(\"TalerMerchantApi.TemplateContractDetailsDefaults\");\n\nexport const codecForWalletTemplateDetails =\n (): Codec<TalerMerchantApi.WalletTemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.WalletTemplateDetails>()\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\"editable_defaults\", codecOptional(codecForTemplateContractDetailsDefaults()))\n .build(\"TalerMerchantApi.WalletTemplateDetails\");\n\nexport const codecForWebhookSummaryResponse =\n (): Codec<TalerMerchantApi.WebhookSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.WebhookSummaryResponse>()\n .property(\"webhooks\", codecForList(codecForWebhookEntry()))\n .build(\"TalerMerchantApi.WebhookSummaryResponse\");\n\nexport const codecForWebhookEntry = (): Codec<TalerMerchantApi.WebhookEntry> =>\n buildCodecForObject<TalerMerchantApi.WebhookEntry>()\n .property(\"webhook_id\", codecForString())\n .property(\"event_type\", codecForString())\n .build(\"TalerMerchantApi.WebhookEntry\");\n\nexport const codecForWebhookDetails =\n (): Codec<TalerMerchantApi.WebhookDetails> =>\n buildCodecForObject<TalerMerchantApi.WebhookDetails>()\n .property(\"event_type\", codecForString())\n .property(\"url\", codecForString())\n .property(\"http_method\", codecForString())\n .property(\"header_template\", codecOptional(codecForString()))\n .property(\"body_template\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.WebhookDetails\");\n\nexport const codecForTokenFamilyKind =\n (): Codec<TalerMerchantApi.TokenFamilyKind> =>\n codecForEither(\n codecForConstString(\"discount\"),\n codecForConstString(\"subscription\"),\n ) as any; //FIXME: create a codecForEnum\nexport const codecForTokenFamilyDetails =\n (): Codec<TalerMerchantApi.TokenFamilyDetails> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilyDetails>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"duration\", codecForDuration)\n .property(\"kind\", codecForTokenFamilyKind())\n .property(\"issued\", codecForNumber())\n .property(\"redeemed\", codecForNumber())\n .build(\"TalerMerchantApi.TokenFamilyDetails\");\n\nexport const codecForTokenFamiliesList =\n (): Codec<TalerMerchantApi.TokenFamiliesList> =>\n buildCodecForObject<TalerMerchantApi.TokenFamiliesList>()\n .property(\"token_families\", codecForList(codecForTokenFamilySummary()))\n .build(\"TalerMerchantApi.TokenFamiliesList\");\n\nexport const codecForTokenFamilySummary =\n (): Codec<TalerMerchantApi.TokenFamilySummary> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilySummary>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"kind\", codecForTokenFamilyKind())\n .build(\"TalerMerchantApi.TokenFamilySummary\");\n\nexport const codecForInstancesResponse =\n (): Codec<TalerMerchantApi.InstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.InstancesResponse>()\n .property(\"instances\", codecForList(codecForInstance()))\n .build(\"TalerMerchantApi.InstancesResponse\");\n\nexport const codecForInstance = (): Codec<TalerMerchantApi.Instance> =>\n buildCodecForObject<TalerMerchantApi.Instance>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"id\", codecForString())\n .property(\"merchant_pub\", codecForString())\n .property(\"payment_targets\", codecForList(codecForString()))\n .property(\"deleted\", codecForBoolean())\n .build(\"TalerMerchantApi.Instance\");\n\nexport const codecForExchangeConfig =\n (): Codec<TalerExchangeApi.ExchangeVersionResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeVersionResponse>()\n .property(\"version\", codecForString())\n .property(\"name\", codecForConstString(\"taler-exchange\"))\n .property(\"implementation\", codecOptional(codecForURN()))\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"supported_kyc_requirements\", codecForList(codecForString()))\n .build(\"TalerExchangeApi.ExchangeVersionResponse\");\n\nexport const codecForExchangeKeys =\n (): Codec<TalerExchangeApi.ExchangeKeysResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeKeysResponse>()\n .property(\"version\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"TalerExchangeApi.ExchangeKeysResponse\");\n\nconst codecForBalance = (): Codec<TalerCorebankApi.Balance> =>\n buildCodecForObject<TalerCorebankApi.Balance>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"credit_debit_indicator\",\n codecForEither(\n codecForConstString(\"credit\"),\n codecForConstString(\"debit\"),\n ),\n )\n .build(\"TalerCorebankApi.Balance\");\n\nconst codecForPublicAccount = (): Codec<TalerCorebankApi.PublicAccount> =>\n buildCodecForObject<TalerCorebankApi.PublicAccount>()\n .property(\"username\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.PublicAccount\");\n\nexport const codecForPublicAccountsResponse =\n (): Codec<TalerCorebankApi.PublicAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.PublicAccountsResponse>()\n .property(\"public_accounts\", codecForList(codecForPublicAccount()))\n .build(\"TalerCorebankApi.PublicAccountsResponse\");\n\nexport const codecForAccountMinimalData =\n (): Codec<TalerCorebankApi.AccountMinimalData> =>\n buildCodecForObject<TalerCorebankApi.AccountMinimalData>()\n .property(\"username\", codecForString())\n .property(\"name\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"balance\", codecForBalance())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.AccountMinimalData\");\n\nexport const codecForListBankAccountsResponse =\n (): Codec<TalerCorebankApi.ListBankAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.ListBankAccountsResponse>()\n .property(\"accounts\", codecForList(codecForAccountMinimalData()))\n .build(\"TalerCorebankApi.ListBankAccountsResponse\");\n\nexport const codecForAccountData = (): Codec<TalerCorebankApi.AccountData> =>\n buildCodecForObject<TalerCorebankApi.AccountData>()\n .property(\"name\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"contact_data\", codecOptional(codecForChallengeContactData()))\n .property(\"cashout_payto_uri\", codecOptional(codecForPaytoString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"tan_channel\",\n codecOptional(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountData\");\n\nexport const codecForChallengeContactData =\n (): Codec<TalerCorebankApi.ChallengeContactData> =>\n buildCodecForObject<TalerCorebankApi.ChallengeContactData>()\n .property(\"email\", codecOptional(codecForString()))\n .property(\"phone\", codecOptional(codecForString()))\n .build(\"TalerCorebankApi.ChallengeContactData\");\n\nexport const codecForWithdrawalPublicInfo =\n (): Codec<TalerCorebankApi.WithdrawalPublicInfo> =>\n buildCodecForObject<TalerCorebankApi.WithdrawalPublicInfo>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"username\", codecForString())\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\n \"selected_exchange_account\",\n codecOptional(codecForPaytoString()),\n )\n .build(\"TalerCorebankApi.WithdrawalPublicInfo\");\n\nexport const codecForBankAccountTransactionsResponse =\n (): Codec<TalerCorebankApi.BankAccountTransactionsResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionsResponse>()\n .property(\n \"transactions\",\n codecForList(codecForBankAccountTransactionInfo()),\n )\n .build(\"TalerCorebankApi.BankAccountTransactionsResponse\");\n\nexport const codecForBankAccountTransactionInfo =\n (): Codec<TalerCorebankApi.BankAccountTransactionInfo> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionInfo>()\n .property(\"creditor_payto_uri\", codecForPaytoString())\n .property(\"debtor_payto_uri\", codecForPaytoString())\n .property(\"amount\", codecForAmountString())\n .property(\n \"direction\",\n codecForEither(\n codecForConstString(\"debit\"),\n codecForConstString(\"credit\"),\n ),\n )\n .property(\"subject\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"date\", codecForTimestamp)\n .build(\"TalerCorebankApi.BankAccountTransactionInfo\");\n\nexport const codecForCreateTransactionResponse =\n (): Codec<TalerCorebankApi.CreateTransactionResponse> =>\n buildCodecForObject<TalerCorebankApi.CreateTransactionResponse>()\n .property(\"row_id\", codecForNumber())\n .build(\"TalerCorebankApi.CreateTransactionResponse\");\n\nexport const codecForRegisterAccountResponse =\n (): Codec<TalerCorebankApi.RegisterAccountResponse> =>\n buildCodecForObject<TalerCorebankApi.RegisterAccountResponse>()\n .property(\"internal_payto_uri\", codecForPaytoString())\n .build(\"TalerCorebankApi.RegisterAccountResponse\");\n\nexport const codecForBankAccountCreateWithdrawalResponse =\n (): Codec<TalerCorebankApi.BankAccountCreateWithdrawalResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountCreateWithdrawalResponse>()\n .property(\"taler_withdraw_uri\", codecForTalerUriString())\n .property(\"withdrawal_id\", codecForString())\n .build(\"TalerCorebankApi.BankAccountCreateWithdrawalResponse\");\n\nexport const codecForCashoutPending =\n (): Codec<TalerCorebankApi.CashoutResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutResponse>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutPending\");\n\nexport const codecForCashoutConversionResponse =\n (): Codec<TalerBankConversionApi.CashoutConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashoutConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashoutConversionResponse\");\n\nexport const codecForCashinConversionResponse =\n (): Codec<TalerBankConversionApi.CashinConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashinConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashinConversionResponse\");\n\nexport const codecForCashouts = (): Codec<TalerCorebankApi.Cashouts> =>\n buildCodecForObject<TalerCorebankApi.Cashouts>()\n .property(\"cashouts\", codecForList(codecForCashoutInfo()))\n .build(\"TalerCorebankApi.Cashouts\");\n\nexport const codecForCashoutInfo = (): Codec<TalerCorebankApi.CashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.CashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutInfo\");\n\nexport const codecForGlobalCashouts =\n (): Codec<TalerCorebankApi.GlobalCashouts> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashouts>()\n .property(\"cashouts\", codecForList(codecForGlobalCashoutInfo()))\n .build(\"TalerCorebankApi.GlobalCashouts\");\n\nexport const codecForGlobalCashoutInfo =\n (): Codec<TalerCorebankApi.GlobalCashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .property(\"username\", codecForString())\n .build(\"TalerCorebankApi.GlobalCashoutInfo\");\n\nexport const codecForCashoutStatusResponse =\n (): Codec<TalerCorebankApi.CashoutStatusResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutStatusResponse>()\n .property(\"amount_debit\", codecForAmountString())\n .property(\"amount_credit\", codecForAmountString())\n .property(\"subject\", codecForString())\n .property(\"creation_time\", codecForTimestamp)\n .build(\"TalerCorebankApi.CashoutStatusResponse\");\n\nexport const codecForConversionRatesResponse =\n (): Codec<TalerCorebankApi.ConversionRatesResponse> =>\n buildCodecForObject<TalerCorebankApi.ConversionRatesResponse>()\n .property(\"buy_at_ratio\", codecForDecimalNumber())\n .property(\"buy_in_fee\", codecForDecimalNumber())\n .property(\"sell_at_ratio\", codecForDecimalNumber())\n .property(\"sell_out_fee\", codecForDecimalNumber())\n .build(\"TalerCorebankApi.ConversionRatesResponse\");\n\nexport const codecForMonitorResponse =\n (): Codec<TalerCorebankApi.MonitorResponse> =>\n buildCodecForUnion<TalerCorebankApi.MonitorResponse>()\n .discriminateOn(\"type\")\n .alternative(\"no-conversions\", codecForMonitorNoConversion())\n .alternative(\"with-conversions\", codecForMonitorWithCashout())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForMonitorNoConversion =\n (): Codec<TalerCorebankApi.MonitorNoConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorNoConversion>()\n .property(\"type\", codecForConstString(\"no-conversions\"))\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorJustPayouts\");\n\nexport const codecForMonitorWithCashout =\n (): Codec<TalerCorebankApi.MonitorWithConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorWithConversion>()\n .property(\"type\", codecForConstString(\"with-conversions\"))\n .property(\"cashinCount\", codecForNumber())\n .property(\"cashinFiatVolume\", codecForAmountString())\n .property(\"cashinRegionalVolume\", codecForAmountString())\n .property(\"cashoutCount\", codecForNumber())\n .property(\"cashoutFiatVolume\", codecForAmountString())\n .property(\"cashoutRegionalVolume\", codecForAmountString())\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorWithCashout\");\n\nexport const codecForBankVersion =\n (): Codec<TalerBankIntegrationApi.BankVersion> =>\n buildCodecForObject<TalerBankIntegrationApi.BankVersion>()\n .property(\"currency\", codecForCurrencyName())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForLibtoolVersion())\n .build(\"TalerBankIntegrationApi.BankVersion\");\n\nexport const codecForBankWithdrawalOperationStatus =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"sender_wire\", codecOptional(codecForPaytoString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .property(\"wire_types\", codecForList(codecForString()))\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\"selected_exchange_account\", codecOptional(codecForString()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationStatus\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationPostResponse\");\n\nexport const codecForRevenueConfig = (): Codec<TalerRevenueApi.RevenueConfig> =>\n buildCodecForObject<TalerRevenueApi.RevenueConfig>()\n .property(\"name\", codecForConstString(\"taler-revenue\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"TalerRevenueApi.RevenueConfig\");\n\nexport const codecForRevenueIncomingHistory =\n (): Codec<TalerRevenueApi.RevenueIncomingHistory> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForRevenueIncomingBankTransaction()),\n )\n .build(\"TalerRevenueApi.MerchantIncomingHistory\");\n\nexport const codecForRevenueIncomingBankTransaction =\n (): Codec<TalerRevenueApi.RevenueIncomingBankTransaction> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"row_id\", codecForNumber())\n .property(\"subject\", codecForString())\n .build(\"TalerRevenueApi.RevenueIncomingBankTransaction\");\n\nexport const codecForTransferResponse =\n (): Codec<TalerWireGatewayApi.TransferResponse> =>\n buildCodecForObject<TalerWireGatewayApi.TransferResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.TransferResponse\");\n\nexport const codecForIncomingHistory =\n (): Codec<TalerWireGatewayApi.IncomingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForIncomingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.IncomingHistory\");\n\nexport const codecForIncomingBankTransaction =\n (): Codec<TalerWireGatewayApi.IncomingBankTransaction> =>\n buildCodecForUnion<TalerWireGatewayApi.IncomingBankTransaction>()\n .discriminateOn(\"type\")\n .alternative(\"RESERVE\", codecForIncomingReserveTransaction())\n .alternative(\"WAD\", codecForIncomingWadTransaction())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForIncomingReserveTransaction =\n (): Codec<TalerWireGatewayApi.IncomingReserveTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingReserveTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"reserve_pub\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"RESERVE\"))\n .build(\"TalerWireGatewayApi.IncomingReserveTransaction\");\n\nexport const codecForIncomingWadTransaction =\n (): Codec<TalerWireGatewayApi.IncomingWadTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingWadTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"origin_exchange_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"WAD\"))\n .property(\"wad_id\", codecForString())\n .build(\"TalerWireGatewayApi.IncomingWadTransaction\");\n\nexport const codecForOutgoingHistory =\n (): Codec<TalerWireGatewayApi.OutgoingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingHistory>()\n .property(\"debit_account\", codecForPaytoString())\n .property(\n \"outgoing_transactions\",\n codecForList(codecForOutgoingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.OutgoingHistory\");\n\nexport const codecForOutgoingBankTransaction =\n (): Codec<TalerWireGatewayApi.OutgoingBankTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"exchange_base_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"wtid\", codecForString())\n .build(\"TalerWireGatewayApi.OutgoingBankTransaction\");\n\nexport const codecForAddIncomingResponse =\n (): Codec<TalerWireGatewayApi.AddIncomingResponse> =>\n buildCodecForObject<TalerWireGatewayApi.AddIncomingResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.AddIncomingResponse\");\n\nexport const codecForAmlRecords = (): Codec<TalerExchangeApi.AmlRecords> =>\n buildCodecForObject<TalerExchangeApi.AmlRecords>()\n .property(\"records\", codecForList(codecForAmlRecord()))\n .build(\"TalerExchangeApi.PublicAccountsResponse\");\n\nexport const codecForAmlRecord = (): Codec<TalerExchangeApi.AmlRecord> =>\n buildCodecForObject<TalerExchangeApi.AmlRecord>()\n .property(\"current_state\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .property(\"rowid\", codecForNumber())\n .property(\"threshold\", codecForAmountString())\n .build(\"TalerExchangeApi.AmlRecord\");\n\nexport const codecForAmlDecisionDetails =\n (): Codec<TalerExchangeApi.AmlDecisionDetails> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetails>()\n .property(\"aml_history\", codecForList(codecForAmlDecisionDetail()))\n .property(\"kyc_attributes\", codecForList(codecForKycDetail()))\n .build(\"TalerExchangeApi.AmlDecisionDetails\");\n\nexport const codecForAmlDecisionDetail =\n (): Codec<TalerExchangeApi.AmlDecisionDetail> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetail>()\n .property(\"justification\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"new_threshold\", codecForAmountString())\n .property(\"decider_pub\", codecForString())\n .build(\"TalerExchangeApi.AmlDecisionDetail\");\n\nexport const codecForChallenge = (): Codec<TalerCorebankApi.Challenge> =>\n buildCodecForObject<TalerCorebankApi.Challenge>()\n .property(\"challenge_id\", codecForNumber())\n .build(\"TalerCorebankApi.Challenge\");\n\nexport const codecForTanTransmission =\n (): Codec<TalerCorebankApi.TanTransmission> =>\n buildCodecForObject<TalerCorebankApi.TanTransmission>()\n .property(\n \"tan_channel\",\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n )\n .property(\"tan_info\", codecForString())\n .build(\"TalerCorebankApi.TanTransmission\");\n\ninterface KycDetail {\n provider_section: string;\n attributes?: Object;\n collection_time: Timestamp;\n expiration_time: Timestamp;\n}\nexport const codecForKycDetail = (): Codec<TalerExchangeApi.KycDetail> =>\n buildCodecForObject<TalerExchangeApi.KycDetail>()\n .property(\"provider_section\", codecForString())\n .property(\"attributes\", codecOptional(codecForAny()))\n .property(\"collection_time\", codecForTimestamp)\n .property(\"expiration_time\", codecForTimestamp)\n .build(\"TalerExchangeApi.KycDetail\");\n\nexport const codecForAmlDecision = (): Codec<TalerExchangeApi.AmlDecision> =>\n buildCodecForObject<TalerExchangeApi.AmlDecision>()\n .property(\"justification\", codecForString())\n .property(\"new_threshold\", codecForAmountString())\n .property(\"h_payto\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"officer_sig\", codecForString())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"kyc_requirements\", codecOptional(codecForList(codecForString())))\n .build(\"TalerExchangeApi.AmlDecision\");\n\n// version: string;\n\n// // Name of the API.\n// name: \"taler-conversion-info\";\n\n// // Currency used by this bank.\n// regional_currency: string;\n\n// // How the bank SPA should render this currency.\n// regional_currency_specification: CurrencySpecification;\n\n// // External currency used during conversion.\n// fiat_currency: string;\n\n// // How the bank SPA should render this currency.\n// fiat_currency_specification: CurrencySpecification;\n\n// Extra conversion rate information.\n// // Only present if server opts in to report the static conversion rate.\n// conversion_info?: {\n\n// // Fee to subtract after applying the cashin ratio.\n// cashin_fee: AmountString;\n\n// // Fee to subtract after applying the cashout ratio.\n// cashout_fee: AmountString;\n\n// // Minimum amount authorised for cashin, in fiat before conversion\n// cashin_min_amount: AmountString;\n\n// // Minimum amount authorised for cashout, in regional before conversion\n// cashout_min_amount: AmountString;\n\n// // Smallest possible regional amount, converted amount is rounded to this amount\n// cashin_tiny_amount: AmountString;\n\n// // Smallest possible fiat amount, converted amount is rounded to this amount\n// cashout_tiny_amount: AmountString;\n\n// // Rounding mode used during cashin conversion\n// cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n// // Rounding mode used during cashout conversion\n// cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n// }\nexport const codecForConversionInfo =\n (): Codec<TalerBankConversionApi.ConversionInfo> =>\n buildCodecForObject<TalerBankConversionApi.ConversionInfo>()\n .property(\"cashin_fee\", codecForAmountString())\n .property(\"cashin_min_amount\", codecForAmountString())\n .property(\"cashin_ratio\", codecForDecimalNumber())\n .property(\n \"cashin_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashin_tiny_amount\", codecForAmountString())\n .property(\"cashout_fee\", codecForAmountString())\n .property(\"cashout_min_amount\", codecForAmountString())\n .property(\"cashout_ratio\", codecForDecimalNumber())\n .property(\n \"cashout_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashout_tiny_amount\", codecForAmountString())\n .build(\"ConversionBankConfig.ConversionInfo\");\n\nexport const codecForConversionBankConfig =\n (): Codec<TalerBankConversionApi.IntegrationConfig> =>\n buildCodecForObject<TalerBankConversionApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .property(\"fiat_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n\n .property(\"conversion_rate\", codecForConversionInfo())\n .build(\"ConversionBankConfig.IntegrationConfig\");\n\n// export const codecFor =\n// (): Codec<TalerWireGatewayApi.PublicAccountsResponse> =>\n// buildCodecForObject<TalerWireGatewayApi.PublicAccountsResponse>()\n// .property(\"\", codecForString())\n// .build(\"TalerWireGatewayApi.PublicAccountsResponse\");\n\ntype EmailAddress = string;\ntype PhoneNumber = string;\ntype EddsaSignature = string;\n// base32 encoded RSA blinded signature.\ntype BlindedRsaSignature = string;\ntype Base32 = string;\n\ntype DecimalNumber = string;\ntype RsaSignature = string;\ntype Float = number;\ntype LibtoolVersion = string;\n// The type of a coin's blinded envelope depends on the cipher that is used\n// for signing with a denomination key.\ntype CoinEnvelope = RSACoinEnvelope | CSCoinEnvelope;\n// For denomination signatures based on RSA, the planchet is just a blinded\n// coin's public EdDSA key.\ninterface RSACoinEnvelope {\n cipher: \"RSA\" | \"RSA+age_restricted\";\n rsa_blinded_planchet: string; // Crockford Base32 encoded\n}\n// For denomination signatures based on Blind Clause-Schnorr, the planchet\n// consists of the public nonce and two Curve25519 scalars which are two\n// blinded challenges in the Blinded Clause-Schnorr signature scheme.\n// See https://taler.net/papers/cs-thesis.pdf for details.\ninterface CSCoinEnvelope {\n cipher: \"CS\" | \"CS+age_restricted\";\n cs_nonce: string; // Crockford Base32 encoded\n cs_blinded_c0: string; // Crockford Base32 encoded\n cs_blinded_c1: string; // Crockford Base32 encoded\n}\n// Secret for blinding/unblinding.\n// An RSA blinding secret, which is basically\n// a 256-bit nonce, converted to Crockford Base32.\ntype DenominationBlindingKeyP = string;\n\n//FIXME: implement this codec\nconst codecForURL = codecForString;\n//FIXME: implement this codec\nconst codecForLibtoolVersion = codecForString;\n//FIXME: implement this codec\nconst codecForCurrencyName = codecForString;\n//FIXME: implement this codec\nconst codecForDecimalNumber = codecForString;\n\nexport type WithdrawalOperationStatus =\n | \"pending\"\n | \"selected\"\n | \"aborted\"\n | \"confirmed\";\n\nexport namespace TalerWireGatewayApi {\n export interface TransferResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n\n export interface TransferRequest {\n // Nonce to make the request idempotent. Requests with the same\n // transaction_uid that differ in any of the other fields\n // are rejected.\n request_uid: HashCode;\n\n // Amount to transfer.\n amount: AmountString;\n\n // Base URL of the exchange. Shall be included by the bank gateway\n // in the appropriate section of the wire transfer details.\n exchange_base_url: string;\n\n // Wire transfer identifier chosen by the exchange,\n // used by the merchant to identify the Taler order(s)\n // associated with this wire transfer.\n wtid: ShortHashCode;\n\n // The recipient's account identifier as a payto URI.\n credit_account: PaytoString;\n }\n\n export interface IncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: IncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if incoming transaction is empty\n credit_account?: PaytoString;\n }\n\n // Union discriminated by the \"type\" field.\n export type IncomingBankTransaction =\n | IncomingReserveTransaction\n | IncomingWadTransaction;\n\n export interface IncomingReserveTransaction {\n type: \"RESERVE\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // The reserve public key extracted from the transaction details.\n reserve_pub: EddsaPublicKey;\n }\n\n export interface IncomingWadTransaction {\n type: \"WAD\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n credit_account: PaytoString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // Base URL of the exchange that originated the wad.\n origin_exchange_url: string;\n\n // The reserve public key extracted from the transaction details.\n wad_id: WadId;\n }\n\n export interface OutgoingHistory {\n // Array of outgoing transactions.\n outgoing_transactions: OutgoingBankTransaction[];\n\n // Payto URI to identify the sender of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if outgoing transactions is empty\n debit_account?: PaytoString;\n }\n\n export interface OutgoingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n credit_account: PaytoString;\n\n // The wire transfer ID in the outgoing transaction.\n wtid: ShortHashCode;\n\n // Base URL of the exchange.\n exchange_base_url: string;\n }\n\n export interface AddIncomingRequest {\n // Amount to transfer.\n amount: AmountString;\n\n // Reserve public key that is included in the wire transfer details\n // to identify the reserve that is being topped up.\n reserve_pub: EddsaPublicKey;\n\n // Account (as payto URI) that makes the wire transfer to the exchange.\n // Usually this account must be created by the test harness before this API is\n // used. An exception is the \"exchange-fakebank\", where any debit account can be\n // specified, as it is automatically created.\n debit_account: PaytoString;\n }\n\n export interface AddIncomingResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n}\n\nexport namespace TalerRevenueApi {\n export interface RevenueConfig {\n // Name of the API.\n name: \"taler-revenue\";\n\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this gateway.\n currency: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface RevenueIncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: RevenueIncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n credit_account: string;\n }\n\n export interface RevenueIncomingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: string;\n\n // The wire transfer subject.\n subject: string;\n }\n}\n\nexport namespace TalerBankConversionApi {\n export interface ConversionInfo {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n }\n\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n // Currency used by this bank.\n regional_currency: string;\n\n // How the bank SPA should render this currency.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency: string;\n\n // How the bank SPA should render this currency.\n fiat_currency_specification: CurrencySpecification;\n\n // Extra conversion rate information.\n // Only present if server opts in to report the static conversion rate.\n conversion_rate: ConversionInfo;\n }\n\n export interface CashinConversionResponse {\n // Amount that the user will get deducted from their fiat\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their regional\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export interface CashoutConversionResponse {\n // Amount that the user will get deducted from their regional\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their fiat\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export type RoundingMode = \"zero\" | \"up\" | \"nearest\";\n\n export interface ConversionRate {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: RoundingMode;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: RoundingMode;\n }\n}\nexport namespace TalerBankIntegrationApi {\n export interface BankVersion {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification?: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n\n export interface BankWithdrawalOperationStatus {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Bank account of the customer that is withdrawing, as a\n // payto URI.\n sender_wire?: PaytoString;\n\n // Suggestion for an exchange given by the bank.\n suggested_exchange?: string;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Wire transfer types supported by the bank.\n wire_types: string[];\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: string;\n }\n\n export interface BankWithdrawalOperationPostRequest {\n // Reserve public key.\n reserve_pub: string;\n\n // Payto address of the exchange selected for the withdrawal.\n selected_exchange: PaytoString;\n }\n\n export interface BankWithdrawalOperationPostResponse {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: Omit<\"pending\", WithdrawalOperationStatus>;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n }\n}\nexport namespace TalerCorebankApi {\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n export interface Config {\n // Name of this API, always \"taler-corebank\".\n name: \"libeufin-bank\";\n // name: \"taler-corebank\";\n\n // API version in the form $n:$n:$n\n version: string;\n\n // Bank display name to be used in user interfaces.\n // For consistency use \"Taler Bank\" if missing.\n // @since v4, will become mandatory in the next version.\n bank_name: string;\n\n // If 'true' the server provides local currency conversion support\n // If 'false' some parts of the API are not supported and return 501\n allow_conversion: boolean;\n\n // If 'true' anyone can register\n // If 'false' only the admin can\n allow_registrations: boolean;\n\n // If 'true' account can delete themselves\n // If 'false' only the admin can delete accounts\n allow_deletions: boolean;\n\n // If 'true' anyone can edit their name\n // If 'false' only admin can\n allow_edit_name: boolean;\n\n // If 'true' anyone can edit their cashout account\n // If 'false' only the admin\n allow_edit_cashout_payto_uri: boolean;\n\n // Default debt limit for newly created accounts\n default_debit_threshold: AmountString;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // TAN channels supported by the server\n supported_tan_channels: TanChannel[];\n\n // Wire transfer type supported by the bank.\n // Default to 'iban' is missing\n // @since v4, may become mandatory in the future.\n wire_type: string;\n }\n\n export interface BankAccountCreateWithdrawalRequest {\n // Amount to withdraw.\n amount: AmountString;\n }\n export interface BankAccountCreateWithdrawalResponse {\n // ID of the withdrawal, can be used to view/modify the withdrawal operation.\n withdrawal_id: string;\n\n // URI that can be passed to the wallet to initiate the withdrawal.\n taler_withdraw_uri: TalerUriString;\n }\n export interface WithdrawalPublicInfo {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Account username\n username: string;\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: PaytoString;\n }\n\n export interface BankAccountTransactionsResponse {\n transactions: BankAccountTransactionInfo[];\n }\n\n export interface BankAccountTransactionInfo {\n creditor_payto_uri: PaytoString;\n debtor_payto_uri: PaytoString;\n\n amount: AmountString;\n direction: \"debit\" | \"credit\";\n\n subject: string;\n\n // Transaction unique ID. Matches\n // $transaction_id from the URI.\n row_id: number;\n date: Timestamp;\n }\n\n export interface CreateTransactionRequest {\n // Address in the Payto format of the wire transfer receiver.\n // It needs at least the 'message' query string parameter.\n payto_uri: PaytoString;\n\n // Transaction amount (in the $currency:x.y format), optional.\n // However, when not given, its value must occupy the 'amount'\n // query string parameter of the 'payto' field. In case it\n // is given in both places, the paytoUri's takes the precedence.\n amount?: AmountString;\n }\n\n export interface CreateTransactionResponse {\n // ID identifying the transaction being created\n row_id: Integer;\n }\n\n export interface RegisterAccountResponse {\n // Internal payto URI of this bank account.\n internal_payto_uri: PaytoString;\n }\n\n export interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n contact_data?: ChallengeContactData;\n\n // 'payto' address of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n cashout_payto_uri?: PaytoString;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: PaytoString;\n\n // If present, set the max debit allowed for this user\n // Only admin can set this property.\n debit_threshold?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n // Only admin can set this property, other user can reconfig their account\n // after creation.\n tan_channel?: TanChannel;\n }\n\n export interface ChallengeContactData {\n // E-Mail address\n email?: EmailAddress;\n\n // Phone number.\n phone?: PhoneNumber;\n }\n\n export interface AccountReconfiguration {\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n // Only admin can change this property.\n contact_data?: ChallengeContactData;\n\n // 'payto' URI of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n // Only admin can change this property if not allowed in config\n cashout_payto_uri?: PaytoString;\n\n // If present, change the legal name associated with $username.\n // Only admin can change this property if not allowed in config\n name?: string;\n\n // Make this account visible to anyone?\n is_public?: boolean;\n\n // If present, change the max debit allowed for this user\n // Only admin can change this property.\n debit_threshold?: AmountString;\n\n //FIX: missing in SPEC\n // If present, enables 2FA and set the TAN channel used for challenges\n tan_channel?: TanChannel | null;\n }\n\n export interface AccountPasswordChange {\n // New password.\n new_password: string;\n // Old password. If present, check that the old password matches.\n // Optional for admin account.\n old_password?: string;\n }\n\n export interface PublicAccountsResponse {\n public_accounts: PublicAccount[];\n }\n export interface PublicAccount {\n // Username of the account\n username: string;\n\n // Internal payto URI of this bank account.\n payto_uri: string;\n\n // Current balance of the account\n balance: Balance;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface ListBankAccountsResponse {\n accounts: AccountMinimalData[];\n }\n export interface Balance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n }\n export interface AccountMinimalData {\n // Username\n username: string;\n\n // Legal name of the account owner.\n name: string;\n\n // Internal payto URI of this bank account.\n payto_uri: PaytoString;\n\n // current balance of the account\n balance: Balance;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: Balance;\n\n // payto://-URI of the account.\n payto_uri: PaytoString;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: PaytoString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Is 2FA enabled and what channel is used for challenges?\n tan_channel?: TanChannel;\n }\n\n export interface CashoutRequest {\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n request_uid: ShortHashCode;\n\n // Optional subject to associate to the\n // cashout operation. This data will appear\n // as the incoming wire transfer subject in\n // the user's fiat bank account.\n subject?: string;\n\n // That is the plain amount that the user specified\n // to cashout. Its $currency is the (regional) currency of the\n // bank instance.\n amount_debit: AmountString;\n\n // That is the amount that will effectively be\n // transferred by the bank to the user's bank\n // account, that is external to the regional currency.\n // It is expressed in the fiat currency and\n // is calculated after the cashout fee and the\n // exchange rate. See the /cashout-rates call.\n // The client needs to calculate this amount\n // correctly based on the amount_debit and the cashout rate,\n // otherwise the request will fail.\n amount_credit: AmountString;\n }\n\n export interface CashoutResponse {\n // ID identifying the operation being created\n cashout_id: number;\n }\n\n /**\n * @deprecated since 4, use 2fa\n */\n export interface CashoutConfirmRequest {\n // the TAN that confirms $CASHOUT_ID.\n tan: string;\n }\n\n export interface Cashouts {\n // Every string represents a cash-out operation ID.\n cashouts: CashoutInfo[];\n }\n\n export interface CashoutInfo {\n cashout_id: number;\n /**\n * @deprecated since 4, use new 2fa\n */\n status?: \"pending\" | \"aborted\" | \"confirmed\";\n }\n export interface GlobalCashouts {\n // Every string represents a cash-out operation ID.\n cashouts: GlobalCashoutInfo[];\n }\n export interface GlobalCashoutInfo {\n cashout_id: number;\n username: string;\n }\n\n export interface CashoutStatusResponse {\n // Amount debited to the internal\n // regional currency bank account.\n amount_debit: AmountString;\n\n // Amount credited to the external bank account.\n amount_credit: AmountString;\n\n // Transaction subject.\n subject: string;\n\n // Time when the cashout was created.\n creation_time: Timestamp;\n }\n\n export interface ConversionRatesResponse {\n // Exchange rate to buy the local currency from the external one\n buy_at_ratio: DecimalNumber;\n\n // Exchange rate to sell the local currency for the external one\n sell_at_ratio: DecimalNumber;\n\n // Fee to subtract after applying the buy ratio.\n buy_in_fee: DecimalNumber;\n\n // Fee to subtract after applying the sell ratio.\n sell_out_fee: DecimalNumber;\n }\n\n export enum MonitorTimeframeParam {\n hour,\n day,\n month,\n year,\n decade,\n }\n\n export type MonitorResponse = MonitorNoConversion | MonitorWithConversion;\n\n // Monitoring stats when conversion is not supported\n export interface MonitorNoConversion {\n type: \"no-conversions\";\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n // Monitoring stats when conversion is supported\n export interface MonitorWithConversion {\n type: \"with-conversions\";\n\n // How many cashin operations were confirmed by a\n // wallet owner. Note: wallet owners\n // are NOT required to be customers of the libeufin-bank.\n cashinCount: number;\n\n // Overall regional currency that has been paid by the regional admin account\n // to regional bank accounts to fulfill all the confirmed cashin operations.\n cashinRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid to the fiat admin account\n // by fiat bank accounts to fulfill all the confirmed cashin operations.\n cashinFiatVolume: AmountString;\n\n // How many cashout operations were confirmed.\n cashoutCount: number;\n\n // Overall regional currency that has been paid to the regional admin account\n // by fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid by the fiat admin account\n // to fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutFiatVolume: AmountString;\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n export interface TanTransmission {\n // Channel of the last successful transmission of the TAN challenge.\n tan_channel: TanChannel;\n\n // Info of the last successful transmission of the TAN challenge.\n tan_info: string;\n }\n\n export interface Challenge {\n // Unique identifier of the challenge to solve to run this protected\n // operation.\n challenge_id: number;\n }\n\n export interface ChallengeSolve {\n // The TAN code that solves $CHALLENGE_ID\n tan: string;\n }\n\n export enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n }\n}\n\nexport namespace TalerExchangeApi {\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n export interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: AmountString;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: AmountString;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n export interface AmlDecision {\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: AmountString;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n export interface ExchangeVersionResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-exchange\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v18, may become mandatory in the future.\n implementation?: string;\n\n // Currency supported by this exchange, given\n // as a currency code (\"USD\" or \"EUR\").\n currency: string;\n\n // How wallets should render this currency.\n currency_specification: CurrencySpecification;\n\n // Names of supported KYC requirements.\n supported_kyc_requirements: string[];\n }\n\n export type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n // Account restriction that disables this type of\n // account for the indicated operation categorically.\n export interface DenyAllAccountRestriction {\n type: \"deny\";\n }\n // Accounts interacting with this type of account\n // restriction must have a payto://-URI matching\n // the given regex.\n export interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: { [lang_tag: string]: string };\n }\n\n export interface WireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: PaytoString;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignature;\n }\n\n export interface ExchangeKeysResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // The exchange's base URL.\n base_url: string;\n\n // The exchange's currency or asset unit.\n currency: string;\n\n /**\n * FIXME: PARTIALLY IMPLEMENTED!!\n */\n\n // How wallets should render this currency.\n // currency_specification: CurrencySpecification;\n\n // // Absolute cost offset for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // stefan_abs: AmountString;\n\n // // Factor to multiply the logarithm of the amount\n // // with to (over) approximate fees payable by amount.\n // // Note that the total to be paid is first to be\n // // divided by the smallest denomination to obtain\n // // the value that the logarithm is to be taken of.\n // stefan_log: AmountString;\n\n // // Linear cost factor for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // //\n // // Note that this is a scalar, as it is multiplied\n // // with the actual amount.\n // stefan_lin: Float;\n\n // // Type of the asset. \"fiat\", \"crypto\", \"regional\"\n // // or \"stock\". Wallets should adjust their UI/UX\n // // based on this value.\n // asset_type: string;\n\n // // Array of wire accounts operated by the exchange for\n // // incoming wire transfers.\n // accounts: WireAccount[];\n\n // // Object mapping names of wire methods (i.e. \"iban\" or \"x-taler-bank\")\n // // to wire fees.\n // wire_fees: { method: AggregateTransferFee[] };\n\n // // List of exchanges that this exchange is partnering\n // // with to enable wallet-to-wallet transfers.\n // wads: ExchangePartner[];\n\n // // Set to true if this exchange allows the use\n // // of reserves for rewards.\n // // @deprecated in protocol v18.\n // rewards_allowed: false;\n\n // // EdDSA master public key of the exchange, used to sign entries\n // // in denoms and signkeys.\n // master_public_key: EddsaPublicKey;\n\n // // Relative duration until inactive reserves are closed;\n // // not signed (!), can change without notice.\n // reserve_closing_delay: RelativeTime;\n\n // // Threshold amounts beyond which wallet should\n // // trigger the KYC process of the issuing\n // // exchange. Optional option, if not given there is no limit.\n // // Currency must match currency.\n // wallet_balance_limit_without_kyc?: AmountString[];\n\n // // Denominations offered by this exchange\n // denominations: DenomGroup[];\n\n // // Compact EdDSA signature (binary-only) over the\n // // contatentation of all of the master_sigs (in reverse\n // // chronological order by group) in the arrays under\n // // \"denominations\". Signature of TALER_ExchangeKeySetPS\n // exchange_sig: EddsaSignature;\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 signkeys. It is given\n // // explicitly as the client might otherwise be confused by clock skew as to\n // // which signing key was used for the exchange_sig.\n // exchange_pub: EddsaPublicKey;\n\n // // Denominations for which the exchange currently offers/requests recoup.\n // recoup: Recoup[];\n\n // // Array of globally applicable fees by time range.\n // global_fees: GlobalFees[];\n\n // // The date when the denomination keys were last updated.\n // list_issue_date: Timestamp;\n\n // // Auditors of the exchange.\n // auditors: AuditorKeys[];\n\n // // The exchange's signing keys.\n // signkeys: SignKey[];\n\n // // Optional field with a dictionary of (name, object) pairs defining the\n // // supported and enabled extensions, such as age_restriction.\n // extensions?: { name: ExtensionManifest };\n\n // // Signature by the exchange master key of the SHA-256 hash of the\n // // normalized JSON-object of field extensions, if it was set.\n // // The signature has purpose TALER_SIGNATURE_MASTER_EXTENSIONS.\n // extensions_sig?: EddsaSignature;\n }\n\n interface ExtensionManifest {\n // The criticality of the extension MUST be provided. It has the same\n // semantics as \"critical\" has for extensions in X.509:\n // - if \"true\", the client must \"understand\" the extension before\n // proceeding,\n // - if \"false\", clients can safely skip extensions they do not\n // understand.\n // (see https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)\n critical: boolean;\n\n // The version information MUST be provided in Taler's protocol version\n // ranges notation, see\n // https://docs.taler.net/core/api-common.html#protocol-version-ranges\n version: LibtoolVersion;\n\n // Optional configuration object, defined by the feature itself\n config?: object;\n }\n\n interface SignKey {\n // The actual exchange's EdDSA signing public key.\n key: EddsaPublicKey;\n\n // Initial validity date for the signing key.\n stamp_start: Timestamp;\n\n // Date when the exchange will stop using the signing key, allowed to overlap\n // slightly with the next signing key's validity to allow for clock skew.\n stamp_expire: Timestamp;\n\n // Date when all signatures made by the signing key expire and should\n // henceforth no longer be considered valid in legal disputes.\n stamp_end: Timestamp;\n\n // Signature over key and stamp_expire by the exchange master key.\n // Signature of TALER_ExchangeSigningKeyValidityPS.\n // Must have purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.\n master_sig: EddsaSignature;\n }\n\n interface AuditorKeys {\n // The auditor's EdDSA signing public key.\n auditor_pub: EddsaPublicKey;\n\n // The auditor's URL.\n auditor_url: string;\n\n // The auditor's name (for humans).\n auditor_name: string;\n\n // An array of denomination keys the auditor affirms with its signature.\n // Note that the message only includes the hash of the public key, while the\n // signature is actually over the expanded information including expiration\n // times and fees. The exact format is described below.\n denomination_keys: AuditorDenominationKey[];\n }\n interface AuditorDenominationKey {\n // Hash of the public RSA key used to sign coins of the respective\n // denomination. Note that the auditor's signature covers more than just\n // the hash, but this other information is already provided in denoms and\n // thus not repeated here.\n denom_pub_h: HashCode;\n\n // Signature of TALER_ExchangeKeyValidityPS.\n auditor_sig: EddsaSignature;\n }\n\n interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: Timestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: Timestamp;\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: RelativeTime;\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: Integer;\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: RelativeTime;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: EddsaSignature;\n }\n\n interface Recoup {\n // Hash of the public key of the denomination that is being revoked under\n // emergency protocol (see /recoup).\n h_denom_pub: HashCode;\n\n // We do not include any signature here, as the primary use-case for\n // this emergency involves the exchange having lost its signing keys,\n // so such a signature here would be pretty worthless. However, the\n // exchange will not honor /recoup requests unless they are for\n // denomination keys listed here.\n }\n\n interface AggregateTransferFee {\n // Per transfer wire transfer fee.\n wire_fee: AmountString;\n\n // Per transfer closing fee.\n closing_fee: AmountString;\n\n // What date (inclusive) does this fee go into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n start_date: Timestamp;\n\n // What date (exclusive) does this fee stop going into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n end_date: Timestamp;\n\n // Signature of TALER_MasterWireFeePS with\n // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.\n sig: EddsaSignature;\n }\n\n interface ExchangePartner {\n // Base URL of the partner exchange.\n partner_base_url: string;\n\n // Public master key of the partner exchange.\n partner_master_pub: EddsaPublicKey;\n\n // Per exchange-to-exchange transfer (wad) fee.\n wad_fee: AmountString;\n\n // Exchange-to-exchange wad (wire) transfer frequency.\n wad_frequency: RelativeTime;\n\n // When did this partnership begin (under these conditions)?\n start_date: Timestamp;\n\n // How long is this partnership expected to last?\n end_date: Timestamp;\n\n // Signature using the exchange's offline key over\n // TALER_WadPartnerSignaturePS\n // with purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS.\n master_sig: EddsaSignature;\n }\n\n type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n\n // Binary representation of the age groups.\n // The bits set in the mask mark the edges at the beginning of a next age\n // group. F.e. for the age groups\n // 0-7, 8-9, 10-11, 12-13, 14-15, 16-17, 18-21, 21-*\n // the following bits are set:\n //\n // 31 24 16 8 0\n // | | | | |\n // oooooooo oo1oo1o1 o1o1o1o1 ooooooo1\n //\n // A value of 0 means that the exchange does not support the extension for\n // age-restriction.\n type AgeMask = Integer;\n\n interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n // Common attributes for all denomination groups\n interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n }\n interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignature;\n\n // When does the denomination key become valid?\n stamp_start: Timestamp;\n\n // When is it no longer possible to withdraw coins\n // of this denomination?\n stamp_expire_withdraw: Timestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_deposit: Timestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: Timestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n }\n type DenominationKey = RsaDenominationKey | CSDenominationKey;\n interface RsaDenominationKey {\n cipher: \"RSA\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // RSA public key\n rsa_public_key: RsaPublicKey;\n }\n interface CSDenominationKey {\n cipher: \"CS\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // Public key of the denomination.\n cs_public_key: Cs25519Point;\n }\n}\n\nexport namespace TalerMerchantApi {\n export interface VersionResponse {\n // libtool-style representation of the Merchant protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-merchant\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since **v8**, may become mandatory in the future.\n implementation?: string;\n\n // Default (!) currency supported by this backend.\n // This is the currency that the backend should\n // suggest by default to the user when entering\n // amounts. See currencies for a list of\n // supported currencies and how to render them.\n currency: string;\n\n // How services should render currencies supported\n // by this backend. Maps\n // currency codes (e.g. \"EUR\" or \"KUDOS\") to\n // the respective currency specification.\n // All currencies in this map are supported by\n // the backend. Note that the actual currency\n // specifications are a *hint* for applications\n // that would like *advice* on how to render amounts.\n // Applications *may* ignore the currency specification\n // if they know how to render currencies that they are\n // used with.\n currencies: { [currency: string]: CurrencySpecification };\n\n // Array of exchanges trusted by the merchant.\n // Since protocol **v6**.\n exchanges: ExchangeConfigInfo[];\n }\n\n export interface ExchangeConfigInfo {\n // Base URL of the exchange REST API.\n base_url: string;\n\n // Currency for which the merchant is configured\n // to trust the exchange.\n // May not be the one the exchange actually uses,\n // but is the only one we would trust this exchange for.\n currency: string;\n\n // Offline master public key of the exchange. The\n // /keys data must be signed with this public\n // key for us to trust it.\n master_pub: EddsaPublicKey;\n }\n export interface ClaimRequest {\n // Nonce to identify the wallet that claimed the order.\n nonce: string;\n\n // Token that authorizes the wallet to claim the order.\n // *Optional* as the merchant may not have required it\n // (create_token set to false in PostOrderRequest).\n token?: ClaimToken;\n }\n\n export interface ClaimResponse {\n // Contract terms of the claimed order\n contract_terms: ContractTerms;\n\n // Signature by the merchant over the contract terms.\n sig: EddsaSignature;\n }\n\n export interface PaymentResponse {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Text to be shown to the point-of-sale staff as a proof of\n // payment.\n pos_confirmation?: string;\n }\n\n export interface PaymentStatusRequestParams {\n // Hash of the order\u2019s contract terms (this is used to\n // authenticate the wallet/customer in case\n // $ORDER_ID is guessable).\n // Required once an order was claimed.\n contractTermHash?: string;\n // Authorizes the request via the claim token that\n // was returned in the PostOrderResponse. Used with\n // unclaimed orders only. Whether token authorization is\n // required is determined by the merchant when the\n // frontend creates the order.\n claimToken?: string;\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // If specified, the merchant backend will wait up to\n // timeout_ms milliseconds for completion of the payment\n // before sending the HTTP response. A client must never\n // rely on this behavior, as the merchant backend may return\n // a response immediately.\n timeout?: number;\n // If set to \u201Cyes\u201D, poll for the order\u2019s pending refunds\n // to be picked up. timeout_ms specifies how long we\n // will wait for the refund.\n awaitRefundObtained?: boolean;\n // Indicates that we are polling for a refund above the\n // given AMOUNT. timeout_ms will specify how long we\n // will wait for the refund.\n refund?: AmountString;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface GetKycStatusRequestParams {\n // If specified, the KYC check should return\n // the KYC status only for this wire account.\n // Otherwise, for all wire accounts.\n wireHash?: string;\n // If specified, the KYC check should return\n // the KYC status only for the given exchange.\n // Otherwise, for all exchanges we interacted with.\n exchangeURL?: string;\n // If specified, the merchant will wait up to\n // timeout_ms milliseconds for the exchanges to\n // confirm completion of the KYC process(es).\n timeout?: number;\n }\n export interface GetOtpDeviceRequestParams {\n // Timestamp in seconds to use when calculating\n // the current OTP code of the device. Since protocol v10.\n faketime?: number;\n // Price to use when calculating the current OTP\n // code of the device. Since protocol v10.\n price?: AmountString;\n }\n export interface GetOrderRequestParams {\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // Timeout in milliseconds to wait for a payment if\n // the answer would otherwise be negative (long polling).\n timeout?: number;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface ListWireTransferRequestParams {\n // Filter for transfers to the given bank account\n // (subject and amount MUST NOT be given in the payto URI).\n paytoURI?: string;\n // Filter for transfers executed before the given timestamp.\n before?: number;\n // Filter for transfers executed after the given timestamp.\n after?: number;\n // At most return the given number of results. Negative for\n // descending in execution time, positive for ascending in\n // execution time. Default is -20.\n limit?: number;\n // Starting transfer_serial_id for an iteration.\n offset?: string;\n // Filter transfers by verification status.\n verified?: boolean;\n order?: \"asc\" | \"dec\";\n }\n export interface ListOrdersRequestParams {\n // If set to yes, only return paid orders, if no only\n // unpaid orders. Do not give (or use \u201Call\u201D) to see all\n // orders regardless of payment status.\n paid?: boolean;\n // If set to yes, only return refunded orders, if no only\n // unrefunded orders. Do not give (or use \u201Call\u201D) to see\n // all orders regardless of refund status.\n refunded?: boolean;\n // If set to yes, only return wired orders, if no only\n // orders with missing wire transfers. Do not give (or\n // use \u201Call\u201D) to see all orders regardless of wire transfer\n // status.\n wired?: boolean;\n // At most return the given number of results. Negative\n // for descending by row ID, positive for ascending by\n // row ID. Default is 20. Since protocol v12.\n limit?: number;\n // Non-negative date in seconds after the UNIX Epoc, see delta\n // for its interpretation. If not specified, we default to the\n // oldest or most recent entry, depending on delta.\n date?: AbsoluteTime;\n // Starting product_serial_id for an iteration.\n // Since protocol v12.\n offset?: string;\n // Timeout in milliseconds to wait for additional orders if the\n // answer would otherwise be negative (long polling). Only useful\n // if delta is positive. Note that the merchant MAY still return\n // a response that contains fewer than delta orders.\n timeout?: number;\n // Since protocol v6. Filters by session ID.\n sessionId?: string;\n // Since protocol v6. Filters by fulfillment URL.\n fulfillmentUrl?: string;\n\n order?: \"asc\" | \"dec\";\n }\n\n export interface PayRequest {\n // The coins used to make the payment.\n coins: CoinPaySig[];\n\n // Custom inputs from the wallet for the contract.\n wallet_data?: Object;\n\n // The session for which the payment is made (or replayed).\n // Only set for session-based payments.\n session_id?: string;\n }\n export interface CoinPaySig {\n // Signature by the coin.\n coin_sig: EddsaSignature;\n\n // Public key of the coin being spent.\n coin_pub: EddsaPublicKey;\n\n // Signature made by the denomination public key.\n ub_sig: RsaSignature;\n\n // The hash of the denomination public key associated with this coin.\n h_denom: HashCode;\n\n // The amount that is subtracted from this coin with this payment.\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n }\n\n export interface StatusPaid {\n type: \"paid\";\n\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 export interface StatusGotoResponse {\n type: \"goto\";\n // The client should go to the reorder URL, there a fresh\n // order might be created as this one is taken by another\n // customer or wallet (or repurchase detection logic may\n // apply).\n public_reorder_url: string;\n }\n export interface StatusUnpaidResponse {\n type: \"unpaid\";\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n fulfillment_url?: string;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n }\n\n export interface PaidRefundStatusResponse {\n // Text to be shown to the point-of-sale staff as a proof of\n // payment (present only if reusable OTP algorithm is used).\n pos_confirmation?: string;\n\n // True if the order has been subjected to\n // refunds. False if it was simply paid.\n refunded: boolean;\n }\n export interface PaidRequest {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer and to enable signature verification without\n // database access).\n h_contract: HashCode;\n\n // Hash over custom inputs from the wallet for the contract.\n wallet_data_hash?: HashCode;\n\n // Session id for which the payment is proven.\n session_id: string;\n }\n\n export 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: HashCode;\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 interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKey;\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 export 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 export type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n // Details about why a refund failed.\n export 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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\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.\n export 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: EddsaSignature;\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: EddsaPublicKey;\n }\n\n export interface WalletRefundRequest {\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer).\n h_contract: HashCode;\n }\n export interface WalletRefundResponse {\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Successful refunds for this payment, empty array for none.\n refunds: MerchantCoinRefundStatus[];\n\n // Public key of the merchant.\n merchant_pub: EddsaPublicKey;\n }\n export type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n // Details about why a refund failed.\n export interface MerchantCoinRefundFailureStatus {\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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\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.\n export interface MerchantCoinRefundSuccessStatus {\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: EddsaSignature;\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: EddsaPublicKey;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\n }\n\n interface RewardInformation {\n // Exchange from which the reward will be withdrawn. Needed by the\n // wallet to determine denominations, fees, etc.\n exchange_url: string;\n\n // URL where to go after obtaining the reward.\n next_url: string;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n // Note that rewards that have expired MAY also result in a 404 response.\n expiration: Timestamp;\n }\n\n interface RewardPickupRequest {\n // List of planchets the wallet wants to use for the reward.\n planchets: PlanchetDetail[];\n }\n interface PlanchetDetail {\n // Hash of the denomination's public key (hashed to reduce\n // bandwidth consumption).\n denom_pub_hash: HashCode;\n\n // Coin's blinded public key.\n coin_ev: CoinEnvelope;\n }\n interface RewardResponse {\n // Blind RSA signatures over the planchets.\n // The order of the signatures matches the planchets list.\n blind_sigs: BlindSignature[];\n }\n interface BlindSignature {\n // The (blind) RSA signature. Still needs to be unblinded.\n blind_sig: BlindedRsaSignature;\n }\n\n export interface InstanceConfigurationMessage {\n // Name of the merchant instance to create (will become $INSTANCE).\n // Must match the regex ^[A-Za-z0-9][A-Za-z0-9_.@-]+$.\n id: string;\n\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Authentication settings for this instance\n auth: InstanceAuthConfigurationMessage;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstanceAuthConfigurationMessage {\n // Type of authentication.\n // \"external\": The mechant backend does not do\n // any authentication checks. Instead an API\n // gateway must do the authentication.\n // \"token\": The merchant checks an auth token.\n // See \"token\" for details.\n method: \"external\" | \"token\";\n\n // For method \"token\", this field is mandatory.\n // The token MUST begin with the string \"secret-token:\".\n // After the auth token has been set (with method \"token\"),\n // the value must be provided in a \"Authorization: Bearer $token\"\n // header.\n token?: string;\n }\n\n export interface InstanceReconfigurationMessage {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstancesResponse {\n // List of instances that are present in the backend (see Instance).\n instances: Instance[];\n }\n\n export interface Instance {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Merchant instance this response is about ($INSTANCE).\n id: string;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // List of the payment targets supported by this instance. Clients can\n // specify the desired payment target in /order requests. Note that\n // front-ends do not have to support wallets selecting payment targets.\n payment_targets: string[];\n\n // Has this instance been deleted (but not purged)?\n deleted: boolean;\n }\n\n export interface QueryInstancesResponse {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n\n // Authentication configuration.\n // Does not contain the token when token auth is configured.\n auth: {\n method: \"external\" | \"token\";\n };\n }\n\n export interface AccountKycRedirects {\n // Array of pending KYCs.\n pending_kycs: MerchantAccountKycRedirect[];\n\n // Array of exchanges with no reply.\n timeout_kycs: ExchangeKycTimeout[];\n }\n\n export interface MerchantAccountKycRedirect {\n // URL that the user should open in a browser to\n // proceed with the KYC process (as returned\n // by the exchange's /kyc-check/ endpoint).\n // Optional, missing if the account is blocked\n // due to AML and not due to KYC.\n kyc_url?: string;\n\n // AML status of the account.\n aml_status: Integer;\n\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Our bank wire account this is about.\n payto_uri: PaytoString;\n }\n\n export interface ExchangeKycTimeout {\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Numeric error code indicating errors the exchange\n // returned, or TALER_EC_INVALID for none.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information about the KYC status.\n // 0 if there was no response at all.\n exchange_http_status: number;\n }\n\n export interface AccountAddDetails {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export type FacadeCredentials =\n | NoFacadeCredentials\n | BasicAuthFacadeCredentials;\n export interface NoFacadeCredentials {\n type: \"none\";\n }\n export interface BasicAuthFacadeCredentials {\n type: \"basic\";\n\n // Username to use to authenticate\n username: string;\n\n // Password to use to authenticate\n password: string;\n }\n export interface AccountAddResponse {\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n }\n\n export interface AccountPatchDetails {\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n // If the argument is omitted, the old credentials\n // are simply preserved.\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export interface AccountsSummaryResponse {\n // List of accounts that are known for the instance.\n accounts: BankAccountSummaryEntry[];\n }\n\n // TODO: missing in docs\n export interface BankAccountSummaryEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n }\n export interface BankAccountEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // true if this account is active,\n // false if it is historic.\n active?: boolean;\n }\n\n export interface ProductAddDetail {\n // Product ID to use.\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface ProductPatchDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost?: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface InventorySummaryResponse {\n // List of products that are present in the inventory.\n products: InventoryEntry[];\n }\n\n export interface InventoryEntry {\n // Product identifier, as found in the product.\n product_id: string;\n // product_serial_id of the product in the database.\n product_serial: Integer;\n }\n\n export interface ProductDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that have already been sold.\n total_sold: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost: Integer;\n\n // Identifies where the product is in stock.\n address: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years).\n minimum_age?: Integer;\n }\n export interface LockRequest {\n // UUID that identifies the frontend performing the lock\n // Must be unique for the lifetime of the lock.\n lock_uuid: string;\n\n // How long does the frontend intend to hold the lock?\n duration: RelativeTime;\n\n // How many units should be locked?\n quantity: Integer;\n }\n\n export interface PostOrderRequest {\n // The order must at least contain the minimal\n // order detail, but can override all.\n order: Order;\n\n // If set, the backend will then set the refund deadline to the current\n // time plus the specified delay. If it's not set, refunds will not be\n // possible.\n refund_delay?: RelativeTime;\n\n // Specifies the payment target preferred by the client. Can be used\n // to select among the various (active) wire methods supported by the instance.\n payment_target?: string;\n\n // Specifies that some products are to be included in the\n // order from the inventory. For these inventory management\n // is performed (so the products must be in stock) and\n // details are completed from the product data of the backend.\n inventory_products?: MinimalInventoryProduct[];\n\n // Specifies a lock identifier that was used to\n // lock a product in the inventory. Only useful if\n // inventory_products is set. Used in case a frontend\n // reserved quantities of the individual products while\n // the shopping cart was being built. Multiple UUIDs can\n // be used in case different UUIDs were used for different\n // products (i.e. in case the user started with multiple\n // shopping sessions that were combined during checkout).\n lock_uuids?: string[];\n\n // Should a token for claiming the order be generated?\n // False can make sense if the ORDER_ID is sufficiently\n // high entropy to prevent adversarial claims (like it is\n // if the backend auto-generates one). Default is 'true'.\n create_token?: boolean;\n\n // OTP device ID to associate with the order.\n // This parameter is optional.\n otp_id?: string;\n }\n\n type Order = MinimalOrderDetail | ContractTerms;\n\n interface MinimalOrderDetail {\n // Amount to be paid by the customer.\n amount: AmountString;\n\n // Short summary of the order.\n summary: string;\n\n // See documentation of fulfillment_url in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n // When creating an order, the fulfillment URL can\n // contain ${ORDER_ID} which will be substituted with the\n // order ID of the newly created order.\n fulfillment_url?: string;\n\n // See documentation of fulfillment_message in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n }\n\n interface MinimalInventoryProduct {\n // Which product is requested (here mandatory!).\n product_id: string;\n\n // How many units of the product are requested.\n quantity: Integer;\n }\n\n export interface PostOrderResponse {\n // Order ID of the response that was just created.\n order_id: string;\n\n // Token that authorizes the wallet to claim the order.\n // Provided only if \"create_token\" was set to 'true'\n // in the request.\n token?: ClaimToken;\n }\n export interface OutOfStockResponse {\n // Product ID of an out-of-stock item.\n product_id: string;\n\n // Requested quantity.\n requested_quantity: Integer;\n\n // Available quantity (must be below requested_quantity).\n available_quantity: Integer;\n\n // When do we expect the product to be again in stock?\n // Optional, not given if unknown.\n restock_expected?: Timestamp;\n }\n\n export interface OrderHistory {\n // Timestamp-sorted array of all orders matching the query.\n // The order of the sorting depends on the sign of delta.\n orders: OrderHistoryEntry[];\n }\n export interface OrderHistoryEntry {\n // Order ID of the transaction related to this entry.\n order_id: string;\n\n // Row ID of the order in the database.\n row_id: number;\n\n // When the order was created.\n timestamp: Timestamp;\n\n // The amount of money the order is for.\n amount: AmountString;\n\n // The summary of the order.\n summary: string;\n\n // Whether some part of the order is refundable,\n // that is the refund deadline has not yet expired\n // and the total amount refunded so far is below\n // the value of the original transaction.\n refundable: boolean;\n\n // Whether the order has been paid or not.\n paid: boolean;\n }\n\n export type MerchantOrderStatusResponse =\n | CheckPaymentPaidResponse\n | CheckPaymentClaimedResponse\n | CheckPaymentUnpaidResponse;\n export interface CheckPaymentPaidResponse {\n // The customer paid for this contract.\n order_status: \"paid\";\n\n // Was the payment refunded (even partially)?\n refunded: boolean;\n\n // True if there are any approved refunds that the wallet has\n // not yet obtained.\n refund_pending: boolean;\n\n // Did the exchange wire us the funds?\n wired: boolean;\n\n // Total amount the exchange deposited into our bank account\n // for this contract, excluding fees.\n deposit_total: AmountString;\n\n // Numeric error code indicating errors the exchange\n // encountered tracking the wire transfer for this purchase (before\n // we even got to specific coin issues).\n // 0 if there were no issues.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information to track the wire transfer for this purchase.\n // 0 if there were no issues.\n exchange_http_status: number;\n\n // Total amount that was refunded, 0 if refunded is false.\n refund_amount: AmountString;\n\n // Contract terms.\n contract_terms: ContractTerms;\n\n // The wire transfer status from the exchange for this order if\n // available, otherwise empty array.\n wire_details: TransactionWireTransfer[];\n\n // Reports about trouble obtaining wire transfer details,\n // empty array if no trouble were encountered.\n wire_reports: TransactionWireReport[];\n\n // The refund details for this order. One entry per\n // refunded coin; empty array if there are no refunds.\n refund_details: RefundDetails[];\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n }\n export interface CheckPaymentClaimedResponse {\n // A wallet claimed the order, but did not yet pay for the contract.\n order_status: \"claimed\";\n\n // Contract terms.\n contract_terms: ContractTerms;\n }\n export interface CheckPaymentUnpaidResponse {\n // The order was neither claimed nor paid.\n order_status: \"unpaid\";\n\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // when was the order created\n creation_time: Timestamp;\n\n // Order summary text.\n summary: string;\n\n // Total amount of the order (to be paid by the customer).\n total_amount: AmountString;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n\n // Fulfillment URL of an already paid order. Only given if under this\n // session an already paid order with a fulfillment URL exists.\n already_paid_fulfillment_url?: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n\n // We do we NOT return the contract terms here because they may not\n // exist in case the wallet did not yet claim them.\n }\n export interface RefundDetails {\n // Reason given for the refund.\n reason: string;\n\n // Set to true if a refund is still available for the wallet for this payment.\n pending: boolean;\n\n // When was the refund approved.\n timestamp: Timestamp;\n\n // Total amount that was refunded (minus a refund fee).\n amount: AmountString;\n }\n export interface TransactionWireTransfer {\n // Responsible exchange.\n exchange_url: string;\n\n // 32-byte wire transfer identifier.\n wtid: Base32;\n\n // Execution time of the wire transfer.\n execution_time: Timestamp;\n\n // Total amount that has been wire transferred\n // to the merchant.\n amount: AmountString;\n\n // Was this transfer confirmed by the merchant via the\n // POST /transfers API, or is it merely claimed by the exchange?\n confirmed: boolean;\n }\n export interface TransactionWireReport {\n // Numerical error code.\n code: number;\n\n // Human-readable error description.\n hint: string;\n\n // Numerical error code from the exchange.\n exchange_code: number;\n\n // HTTP status code received from the exchange.\n exchange_http_status: number;\n\n // Public key of the coin for which we got the exchange error.\n coin_pub: CoinPublicKey;\n }\n\n export interface ForgetRequest {\n // Array of valid JSON paths to forgettable fields in the order's\n // contract terms.\n fields: string[];\n }\n\n export interface RefundRequest {\n // Amount to be refunded.\n refund: AmountString;\n\n // Human-readable refund justification.\n reason: string;\n }\n export interface MerchantRefundResponse {\n // URL (handled by the backend) that the wallet should access to\n // trigger refund processing.\n // taler://refund/...\n taler_refund_uri: string;\n\n // Contract hash that a client may need to authenticate an\n // HTTP request to obtain the above URI in a wallet-friendly way.\n h_contract: HashCode;\n }\n\n export interface TransferInformation {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n }\n\n export interface TransferList {\n // List of all the transfers that fit the filter that we know.\n transfers: TransferDetails[];\n }\n export interface TransferDetails {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n\n // Serial number identifying the transfer in the merchant backend.\n // Used for filtering via offset.\n transfer_serial_id: number;\n\n // Time of the execution of the wire transfer by the exchange, according to the exchange\n // Only provided if we did get an answer from the exchange.\n execution_time?: Timestamp;\n\n // True if we checked the exchange's answer and are happy with it.\n // False if we have an answer and are unhappy, missing if we\n // do not have an answer from the exchange.\n verified?: boolean;\n\n // True if the merchant uses the POST /transfers API to confirm\n // that this wire transfer took place (and it is thus not\n // something merely claimed by the exchange).\n confirmed?: boolean;\n }\n\n interface ReserveCreateRequest {\n // Amount that the merchant promises to put into the reserve.\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for rewards.\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\".\n wire_method: string;\n }\n interface ReserveCreateConfirmation {\n // Public key identifying the reserve.\n reserve_pub: EddsaPublicKey;\n\n // Wire accounts of the exchange where to transfer the funds.\n accounts: TalerExchangeApi.WireAccount[];\n }\n\n interface RewardReserveStatus {\n // Array of all known reserves (possibly empty!).\n reserves: ReserveStatusEntry[];\n }\n interface ReserveStatusEntry {\n // Public key of the reserve.\n reserve_pub: EddsaPublicKey;\n\n // Timestamp when it was established.\n creation_time: Timestamp;\n\n // Timestamp when it expires.\n expiration_time: Timestamp;\n\n // Initial amount as per reserve creation call.\n merchant_initial_amount: AmountString;\n\n // Initial amount as per exchange, 0 if exchange did\n // not confirm reserve creation yet.\n exchange_initial_amount: AmountString;\n\n // Amount picked up so far.\n pickup_amount: AmountString;\n\n // Amount approved for rewards that exceeds the pickup_amount.\n committed_amount: AmountString;\n\n // Is this reserve active (false if it was deleted but not purged)?\n active: boolean;\n }\n\n interface ReserveDetail {\n // Timestamp when it was established.\n creation_time: Timestamp;\n\n // Timestamp when it expires.\n expiration_time: Timestamp;\n\n // Initial amount as per reserve creation call.\n merchant_initial_amount: AmountString;\n\n // Initial amount as per exchange, 0 if exchange did\n // not confirm reserve creation yet.\n exchange_initial_amount: AmountString;\n\n // Amount picked up so far.\n pickup_amount: AmountString;\n\n // Amount approved for rewards that exceeds the pickup_amount.\n committed_amount: AmountString;\n\n // Array of all rewards created by this reserves (possibly empty!).\n // Only present if asked for explicitly.\n rewards?: RewardStatusEntry[];\n\n // Is this reserve active (false if it was deleted but not purged)?\n active: boolean;\n\n // Array of wire accounts of the exchange that could\n // be used to fill the reserve, can be NULL\n // if the reserve is inactive or was already filled\n accounts?: TalerExchangeApi.WireAccount[];\n\n // URL of the exchange hosting the reserve,\n // NULL if the reserve is inactive\n exchange_url: string;\n }\n interface RewardStatusEntry {\n // Unique identifier for the reward.\n reward_id: HashCode;\n\n // Total amount of the reward that can be withdrawn.\n total_amount: AmountString;\n\n // Human-readable reason for why the reward was granted.\n reason: string;\n }\n\n interface RewardCreateRequest {\n // Amount that the customer should be rewarded.\n amount: AmountString;\n\n // Justification for giving the reward.\n justification: string;\n\n // URL that the user should be directed to after receiving the reward,\n // will be included in the reward_token.\n next_url: string;\n }\n interface RewardCreateConfirmation {\n // Unique reward identifier for the reward that was created.\n reward_id: HashCode;\n\n // taler://reward URI for the reward.\n taler_reward_uri: string;\n\n // URL that will directly trigger processing\n // the reward when the browser is redirected to it.\n reward_status_url: string;\n\n // When does the reward expire?\n reward_expiration: Timestamp;\n }\n\n interface RewardDetails {\n // Amount that we authorized for this reward.\n total_authorized: AmountString;\n\n // Amount that was picked up by the user already.\n total_picked_up: AmountString;\n\n // Human-readable reason given when authorizing the reward.\n reason: string;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n expiration: Timestamp;\n\n // Reserve public key from which the reward is funded.\n reserve_pub: EddsaPublicKey;\n\n // Array showing the pickup operations of the wallet (possibly empty!).\n // Only present if asked for explicitly.\n pickups?: PickupDetail[];\n }\n interface PickupDetail {\n // Unique identifier for the pickup operation.\n pickup_id: HashCode;\n\n // Number of planchets involved.\n num_planchets: Integer;\n\n // Total amount requested for this pickup_id.\n requested_amount: AmountString;\n }\n\n interface RewardsResponse {\n // List of rewards that are present in the backend.\n rewards: Reward[];\n }\n interface Reward {\n // ID of the reward in the backend database.\n row_id: number;\n\n // Unique identifier for the reward.\n reward_id: HashCode;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n }\n\n export interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n // \"NONE\" or 0: No algorithm (no pos confirmation will be generated)\n // \"TOTP_WITHOUT_PRICE\" or 1: Without amounts (typical OTP device)\n // \"TOTP_WITH_PRICE\" or 2: With amounts (special-purpose OTP device)\n // The \"String\" variants are supported @since protocol **v7**.\n otp_algorithm: Integer | string;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDevicePatchDetails {\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDeviceSummaryResponse {\n // Array of devices that are present in our backend.\n otp_devices: OtpDeviceEntry[];\n }\n export interface OtpDeviceEntry {\n // Device identifier.\n otp_device_id: string;\n\n // Human-readable description for the device.\n device_description: string;\n }\n\n export interface OtpDeviceDetails {\n // Human-readable description for the device.\n device_description: string;\n\n // Algorithm for computing the POS confirmation.\n //\n // Currently, the following numbers are defined:\n // 0: None\n // 1: TOTP without price\n // 2: TOTP with price\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n\n // Current time for time-based OTP devices.\n // Will match the faketime argument of the\n // query if one was present, otherwise the current\n // time at the backend.\n //\n // Available since protocol **v10**.\n otp_timestamp: Integer;\n\n // Current OTP confirmation string of the device.\n // Matches exactly the string that would be returned\n // as part of a payment confirmation for the given\n // amount and time (so may contain multiple OTP codes).\n //\n // If the otp_algorithm is time-based, the code is\n // returned for the current time, or for the faketime\n // if a TIMESTAMP query argument was provided by the client.\n //\n // When using OTP with counters, the counter is **NOT**\n // increased merely because this endpoint created\n // an OTP code (this is a GET request, after all!).\n //\n // If the otp_algorithm requires an amount, the\n // amount argument must be specified in the\n // query, otherwise the otp_code is not\n // generated.\n //\n // This field is *optional* in the response, as it is\n // only provided if we could compute it based on the\n // otp_algorithm and matching client query arguments.\n //\n // Available since protocol **v10**.\n otp_code?: string;\n }\n export interface TemplateAddDetails {\n // Template ID to use.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n\n }\n export interface TemplateContractDetails {\n // Human-readable summary for the template.\n summary?: string;\n\n // Required currency for payments to the template.\n // The user may specify any amount, but it must be\n // in this currency.\n // This parameter is optional and should not be present\n // if \"amount\" is given.\n currency?: string;\n\n // The price is imposed by the merchant and cannot be changed by the customer.\n // This parameter is optional.\n amount?: AmountString;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age: Integer;\n\n // The time the customer need to pay before his order will be deleted.\n // It is deleted if the customer did not pay and if the duration is over.\n pay_duration: RelativeTime;\n }\n\n export interface TemplateContractDetailsDefaults {\n summary?: string;\n\n currency?: string;\n\n amount?: AmountString;\n\n minimum_age?: Integer;\n\n pay_duration?: RelativeTime;\n }\n export interface TemplatePatchDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n\n }\n\n export interface TemplateSummaryResponse {\n // List of templates that are present in our backend.\n templates: TemplateEntry[];\n }\n\n export interface TemplateEntry {\n // Template identifier, as found in the template.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n }\n\n export interface WalletTemplateDetails {\n // Hard-coded information about the contrac terms\n // for this template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface UsingTemplateDetails {\n // Summary of the template\n summary?: string;\n\n // The amount entered by the customer.\n amount?: AmountString;\n }\n\n export interface WebhookAddDetails {\n // Webhook ID to use.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookPatchDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookSummaryResponse {\n // Return webhooks that are present in our backend.\n webhooks: WebhookEntry[];\n }\n\n export interface WebhookEntry {\n // Webhook identifier, as found in the webhook.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n }\n\n export interface WebhookDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface TokenFamilyCreateRequest {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n // If not specified, merchant backend will use the current time.\n valid_after?: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export enum TokenFamilyKind {\n Discount = \"discount\",\n Subscription = \"subscription\",\n }\n\n export interface TokenFamilyUpdateRequest {\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n }\n\n export interface TokenFamiliesList {\n // All configured token families of this instance.\n token_families: TokenFamilySummary[];\n }\n\n export interface TokenFamilySummary {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export interface TokenFamilyDetails {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n\n // How many tokens have been issued for this family.\n issued: Integer;\n\n // How many tokens have been redeemed for this family.\n redeemed: Integer;\n }\n export interface ContractTerms {\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: { [lang_tag: string]: string };\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: AmountString;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional. When POSTing to the\n // merchant, the placeholder \"${ORDER_ID}\" will be\n // replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL).\n // Note that this placeholder can only be used once.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: { [lang_tag: string]: string };\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: AmountString;\n\n // List of products that are part of the purchase (see Product).\n products: Product[];\n\n // Time when this contract was generated.\n timestamp: Timestamp;\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: Timestamp;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: Timestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: Timestamp;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: EddsaPublicKey;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // More info about the merchant, see below.\n merchant: Merchant;\n\n // The hash of the merchant instance's wire details.\n h_wire: HashCode;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: Exchange[];\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: Timestamp;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: RelativeTime;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\n }\n\n export 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?: Integer;\n\n // 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?: ImageDataUrl;\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?: Timestamp;\n }\n\n export interface Tax {\n // The name of the tax.\n name: string;\n\n // Amount paid in tax.\n tax: AmountString;\n }\n export interface Merchant {\n // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\n }\n // Delivery location, loosely modeled as a subset of\n // ISO20022's PostalAddress25.\n export 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 interface Auditor {\n // Official name.\n name: string;\n\n // Auditor's public key.\n auditor_pub: EddsaPublicKey;\n\n // Base URL of the auditor.\n url: string;\n }\n export interface Exchange {\n // The exchange's base URL.\n url: string;\n\n // How much would the merchant like to use this exchange.\n // The wallet should use a suitable exchange with high\n // priority. The following priority values are used, but\n // it should be noted that they are NOT in any way normative.\n //\n // 0: likely it will not work (recently seen with account\n // restriction that would be bad for this merchant)\n // 512: merchant does not know, might be down (merchant\n // did not yet get /wire response).\n // 1024: good choice (recently confirmed working)\n priority: Integer;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKey;\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 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\n/**\n * Imports.\n */\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http.js\";\n\n/**\n * Implementation of the HTTP request library interface for node.\n */\nexport class HttpLibImpl implements HttpRequestLibrary {\n fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n throw new Error(\"Method not implemented.\");\n }\n}\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 * Helpers for doing XMLHttpRequest-s that are based on ES6 promises.\n * Allows for easy mocking for test cases.\n *\n * The API is inspired by the HTML5 fetch API.\n */\n\n/**\n * Imports\n */\n\nimport * as impl from \"#http-impl\";\nimport * as common from \"./http-common.js\";\n\nexport * from \"./http-common.js\";\n\nexport function createPlatformHttpLib(\n args?: common.HttpLibArgs,\n): common.HttpRequestLibrary {\n return new impl.HttpLibImpl(args);\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) 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 { codecForAny } from \"./codec.js\";\nimport {\n TalerMerchantApi,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n} from \"./http-client/types.js\";\nimport { HttpStatusCode } from \"./http-status-codes.js\";\nimport {\n createPlatformHttpLib,\n expectSuccessResponseOrThrow,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http.js\";\nimport { FacadeCredentials } from \"./libeufin-api-types.js\";\nimport { LibtoolVersion } from \"./libtool-version.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n MerchantInstancesResponse,\n MerchantPostOrderRequest,\n MerchantPostOrderResponse,\n MerchantTemplateAddDetails,\n codecForMerchantPostOrderResponse,\n} from \"./merchant-api-types.js\";\nimport {\n FailCasesByMethod,\n OperationFail,\n OperationOk,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"./operation.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { TalerProtocolDuration } from \"./time.js\";\n\nconst logger = new Logger(\"MerchantApiClient.ts\");\n\n// FIXME: Explain!\nexport type TalerMerchantResultByMethod<prop extends keyof MerchantApiClient> =\n ResultByMethod<MerchantApiClient, prop>;\n\n// FIXME: Explain!\nexport type TalerMerchantErrorsByMethod<prop extends keyof MerchantApiClient> =\n FailCasesByMethod<MerchantApiClient, prop>;\n\nexport interface MerchantAuthConfiguration {\n method: \"external\" | \"token\";\n token?: string;\n}\n\n// FIXME: Why do we need this? Describe / fix!\nexport interface PartialMerchantInstanceConfig {\n auth?: MerchantAuthConfiguration;\n id: string;\n name: string;\n paytoUris: string[];\n address?: unknown;\n jurisdiction?: unknown;\n defaultWireTransferDelay?: TalerProtocolDuration;\n defaultPayDelay?: TalerProtocolDuration;\n}\n\nexport interface CreateMerchantTippingReserveRequest {\n // Amount that the merchant promises to put into the reserve\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for tipping\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\"\n wire_method: string;\n}\n\nexport interface DeleteTippingReserveArgs {\n reservePub: string;\n purge?: boolean;\n}\n\ninterface MerchantBankAccount {\n // The payto:// URI where the wallet will send coins.\n payto_uri: string;\n\n // Optional base URL for a facade where the\n // merchant backend can see incoming wire\n // transfers to reconcile its accounting\n // with that of the exchange. Used by\n // taler-merchant-wirewatch.\n credit_facade_url?: string;\n\n // Credentials for accessing the credit facade.\n credit_facade_credentials?: FacadeCredentials;\n}\n\nexport interface MerchantInstanceConfig {\n auth: MerchantAuthConfiguration;\n id: string;\n name: string;\n address: unknown;\n jurisdiction: unknown;\n use_stefan: boolean;\n default_wire_transfer_delay: TalerProtocolDuration;\n default_pay_delay: TalerProtocolDuration;\n}\n\nexport interface PrivateOrderStatusQuery {\n instance?: string;\n orderId: string;\n sessionId?: string;\n}\n\nexport interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A base64-encoded key\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: number;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: number;\n}\n\n/**\n * Client for the GNU Taler merchant backend.\n */\nexport class MerchantApiClient {\n /**\n * Base URL for the particular instance that this merchant API client\n * is for.\n */\n private baseUrl: string;\n\n readonly auth: MerchantAuthConfiguration;\n\n public readonly PROTOCOL_VERSION = \"6:0:2\";\n\n constructor(\n baseUrl: string,\n options: { auth?: MerchantAuthConfiguration } = {},\n ) {\n this.baseUrl = baseUrl;\n\n this.auth = options?.auth ?? {\n method: \"external\",\n };\n }\n\n httpClient = createPlatformHttpLib();\n\n async changeAuth(auth: MerchantAuthConfiguration): Promise<void> {\n const url = new URL(\"private/auth\", this.baseUrl);\n const res = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: auth,\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(res);\n }\n\n async getPrivateInstanceInfo(): Promise<any> {\n const url = new URL(\"private\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n return await resp.json();\n }\n\n async deleteInstance(instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(resp);\n }\n\n async createInstance(req: MerchantInstanceConfig): Promise<void> {\n const url = new URL(\"management/instances\", this.baseUrl);\n await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n }\n\n async getInstances(): Promise<MerchantInstancesResponse> {\n const url = new URL(\"management/instances\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getInstanceFullDetails(instanceId: string): Promise<any> {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n try {\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return resp.json();\n } catch (e) {\n throw e;\n }\n }\n\n async createOrder(\n req: MerchantPostOrderRequest,\n ): Promise<MerchantPostOrderResponse> {\n let url = new URL(\"private/orders\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantPostOrderResponse(),\n );\n }\n\n async deleteOrder(req: { orderId: string; force?: boolean }): Promise<void> {\n let url = new URL(`private/orders/${req.orderId}`, this.baseUrl);\n if (req.force) {\n url.searchParams.set(\"force\", \"yes\");\n }\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n if (resp.status !== 204) {\n throw Error(`failed to delete order (status ${resp.status})`);\n }\n }\n\n async queryPrivateOrderStatus(\n query: PrivateOrderStatusQuery,\n ): Promise<TalerMerchantApi.MerchantOrderStatusResponse> {\n const reqUrl = new URL(`private/orders/${query.orderId}`, this.baseUrl);\n if (query.sessionId) {\n reqUrl.searchParams.set(\"session_id\", query.sessionId);\n }\n const resp = await this.httpClient.fetch(reqUrl.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n }\n\n async giveRefund(r: {\n instance: string;\n orderId: string;\n amount: string;\n justification: string;\n }): Promise<{ talerRefundUri: string }> {\n const reqUrl = new URL(`private/orders/${r.orderId}/refund`, this.baseUrl);\n const resp = await this.httpClient.fetch(reqUrl.href, {\n method: \"POST\",\n body: {\n refund: r.amount,\n reason: r.justification,\n },\n });\n const respBody = await resp.json();\n return {\n talerRefundUri: respBody.taler_refund_uri,\n };\n }\n\n async createTemplate(req: MerchantTemplateAddDetails) {\n let url = new URL(\"private/templates\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async getTemplate(templateId: string) {\n let url = new URL(`private/templates/${templateId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAny());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig(): Promise<OperationOk<TalerMerchantApi.VersionResponse>> {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async createOtpDevice(\n req: OtpDeviceAddDetails,\n ): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>> {\n let url = new URL(\"private/otp-devices\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n private makeAuthHeader(): Record<string, string> {\n switch (this.auth.method) {\n case \"external\":\n return {};\n case \"token\":\n return {\n Authorization: `Bearer ${this.auth.token}`,\n };\n }\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 TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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", "/*\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 { codecForAmountString } from \"./amounts.js\";\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\", codecForAmountString())\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\", codecForAmountString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"closing_fee\", codecForAmountString())\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\", codecForAmountString())\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 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, Duration } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\n/**\n * Logger.\n */\nconst logger = new Logger(\"OperationThrottler.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 task.\n */\nclass TaskState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n 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 TaskThrottler {\n private perTaskInfo: { [taskId: string]: TaskState } = {};\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): TaskState {\n const s = this.perTaskInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perTaskInfo[origin] = new TaskState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(taskId: string): boolean {\n for (let [k, v] of Object.entries(this.perTaskInfo)) {\n // Remove throttled tasks that haven't seen an update in more than one hour.\n if (\n Duration.cmp(\n AbsoluteTime.difference(v.lastUpdate, AbsoluteTime.now()),\n Duration.fromSpec({ hours: 1 }),\n ) > 1\n ) {\n delete this.perTaskInfo[k];\n }\n }\n return this.getState(taskId).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(taskId: string): Record<string, unknown> {\n const state = this.getState(taskId);\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", "/*\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 * Client for the Taler (demo-)bank.\n */\n\n/**\n * Imports.\n */\nimport {\n AmountString,\n base64FromArrayBuffer,\n buildCodecForObject,\n Codec,\n codecForAny,\n codecForString,\n encodeCrock,\n getRandomBytes,\n HttpStatusCode,\n j2s,\n Logger,\n opEmptySuccess,\n opKnownHttpFailure,\n opUnknownFailure,\n stringToBytes,\n TalerError,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n checkSuccessResponseOrThrow,\n createPlatformHttpLib,\n HttpRequestLibrary,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"bank-api-client.ts\");\n\nexport enum CreditDebitIndicator {\n Credit = \"credit\",\n Debit = \"debit\",\n}\n\nexport interface BankAccountBalanceResponse {\n balance: {\n amount: AmountString;\n credit_debit_indicator: CreditDebitIndicator;\n };\n}\n\nexport interface BankUser {\n username: string;\n password: string;\n accountPaytoUri: string;\n}\n\nexport interface WithdrawalOperationInfo {\n withdrawal_id: string;\n taler_withdraw_uri: string;\n}\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nfunction makeBasicAuthHeader(username: string, password: string): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\nconst codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>\n buildCodecForObject<WithdrawalOperationInfo>()\n .property(\"withdrawal_id\", codecForString())\n .property(\"taler_withdraw_uri\", codecForString())\n .build(\"WithdrawalOperationInfo\");\n\nexport interface BankAccessApiClientArgs {\n auth?: { username: string; password: string };\n httpClient?: HttpRequestLibrary;\n}\n\nexport interface BankAccessApiCreateTransactionRequest {\n amount: AmountString;\n paytoUri: string;\n}\n\nexport class WireGatewayApiClientArgs {\n auth?: {\n username: string;\n password: string;\n };\n httpClient?: HttpRequestLibrary;\n}\n\n/**\n * This API look like it belongs to harness\n * but it will be nice to have in utils to be used by others\n */\nexport class WireGatewayApiClient {\n httpLib;\n\n constructor(\n private baseUrl: string,\n private args: WireGatewayApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n private makeAuthHeader(): Record<string, string> {\n const auth = this.args.auth;\n if (auth) {\n return {\n Authorization: makeBasicAuthHeader(auth.username, auth.password),\n };\n }\n return {};\n }\n\n async adminAddIncoming(params: {\n amount: string;\n reservePub: string;\n debitAccountPayto: string;\n }): Promise<void> {\n let url = new URL(`admin/add-incoming`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount: params.amount,\n reserve_pub: params.reservePub,\n debit_account: params.debitAccountPayto,\n },\n headers: this.makeAuthHeader(),\n });\n logger.info(`add-incoming response status: ${resp.status}`);\n await checkSuccessResponseOrThrow(resp);\n }\n}\n\nexport interface ChallengeContactData {\n // E-Mail address\n email?: string;\n\n // Phone number.\n phone?: string;\n}\n\nexport interface AccountBalance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n}\n\nexport interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n challenge_contact_data?: ChallengeContactData;\n\n // 'payto' address pointing a bank account\n // external to the libeufin-bank.\n // Payments will be sent to this bank account\n // when the user wants to convert the local currency\n // back to fiat currency outside libeufin-bank.\n cashout_payto_uri?: string;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: string;\n}\n\nexport interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: AccountBalance;\n\n // payto://-URI of the account.\n payto_uri: string;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: string;\n}\n\nexport interface ConfirmWithdrawalArgs {\n withdrawalOperationId: string;\n}\n\n/**\n * Client for the Taler corebank API.\n */\nexport class TalerCorebankApiClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n private baseUrl: string,\n private args: BankAccessApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n setAuth(auth: { username: string; password: string }) {\n this.args.auth = auth;\n }\n\n private makeAuthHeader(): Record<string, string> {\n if (!this.args.auth) {\n return {};\n }\n const authHeaderValue = makeBasicAuthHeader(\n this.args.auth.username,\n this.args.auth.password,\n );\n return {\n Authorization: authHeaderValue,\n };\n }\n\n async getAccountBalance(\n username: string,\n ): Promise<BankAccountBalanceResponse> {\n const url = new URL(`accounts/${username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getTransactions(username: string): Promise<void> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"GET\",\n headers: {\n ...this.makeAuthHeader(),\n },\n });\n\n const res = await readSuccessResponseJsonOrThrow(resp, codecForAny());\n logger.info(`result: ${j2s(res)}`);\n }\n\n async createTransaction(\n username: string,\n req: BankAccessApiCreateTransactionRequest,\n ): Promise<any> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n return await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async registerAccountExtended(req: RegisterAccountRequest): Promise<void> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n }\n\n /**\n * Register a new account and return information about it.\n *\n * This is a helper, as it does both the registration and the\n * account info query.\n */\n async registerAccount(username: string, password: string): Promise<BankUser> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n username,\n password,\n name: username,\n },\n headers: this.makeAuthHeader(),\n });\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n // FIXME: Corebank should directly return this info!\n const infoUrl = new URL(`accounts/${username}`, this.baseUrl);\n const infoResp = await this.httpLib.fetch(infoUrl.href, {\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n });\n // FIXME: Validate!\n const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(\n infoResp,\n codecForAny(),\n );\n return {\n password,\n username,\n accountPaytoUri: acctInfo.payto_uri,\n };\n }\n\n async createRandomBankUser(): Promise<BankUser> {\n const username = \"user-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n const password = \"pw-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n return await this.registerAccount(username, password);\n }\n\n async createWithdrawalOperation(\n user: string,\n amount: string,\n ): Promise<WithdrawalOperationInfo> {\n const url = new URL(`accounts/${user}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount,\n },\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForWithdrawalOperationInfo(),\n );\n }\n\n async confirmWithdrawalOperation(\n username: string,\n wopi: ConfirmWithdrawalArgs,\n ) {\n const url = new URL(\n `accounts/${username}/withdrawals/${wopi.withdrawalOperationId}/confirm`,\n this.baseUrl,\n );\n logger.info(`confirming withdrawal operation via ${url.href}`);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async abortWithdrawalOperation(wopi: WithdrawalOperationInfo): Promise<void> {\n const url = new URL(\n `withdrawals/${wopi.withdrawal_id}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n}\n", "// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then\n// use window.btoa' step. According to my tests, this appears to be a faster approach:\n// http://jsperf.com/encoding-xhr-image-data/5\n\n/*\nMIT LICENSE\nCopyright 2011 Jon Leighton\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function base64FromArrayBuffer(arrayBuffer: ArrayBuffer): string {\n var base64 = \"\";\n var encodings =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n var bytes = new Uint8Array(arrayBuffer);\n var byteLength = bytes.byteLength;\n var byteRemainder = byteLength % 3;\n var mainLength = byteLength - byteRemainder;\n\n var a, b, c, d;\n var chunk;\n\n // Main loop deals with bytes in chunks of 3\n for (var i = 0; i < mainLength; i = i + 3) {\n // Combine the three bytes into a single integer\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n\n // Use bitmasks to extract 6-bit segments from the triplet\n a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12\n c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6\n d = chunk & 63; // 63 = 2^6 - 1\n\n // Convert the raw binary segments to the appropriate ASCII encoding\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n }\n\n // Deal with the remaining bytes and padding\n if (byteRemainder == 1) {\n chunk = bytes[mainLength];\n\n a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n\n // Set the 4 least significant bits to zero\n b = (chunk & 3) << 4; // 3 = 2^2 - 1\n\n base64 += encodings[a] + encodings[b] + \"==\";\n } else if (byteRemainder == 2) {\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n\n a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4\n\n // Set the 2 least significant bits to zero\n c = (chunk & 15) << 2; // 15 = 2^4 - 1\n\n base64 += encodings[a] + encodings[b] + encodings[c] + \"=\";\n }\n\n return base64;\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\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) 2019-2020 Taler Systems SA\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Classes and helpers for error handling specific to wallet operations.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport {\n AbsoluteTime,\n CancellationToken,\n PaymentInsufficientBalanceDetails,\n TalerErrorCode,\n TalerErrorDetail,\n TransactionType,\n} from \"@gnu-taler/taler-util\";\n\ntype empty = Record<string, never>;\n\nexport interface DetailsMap {\n [TalerErrorCode.WALLET_PENDING_OPERATION_FAILED]: {\n innerError: TalerErrorDetail;\n transactionId?: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT]: {\n exchangeBaseUrl: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE]: {\n exchangeProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK]: empty;\n [TalerErrorCode.WALLET_REWARD_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_ORDER_ALREADY_CLAIMED]: {\n orderId: string;\n claimUrl: string;\n };\n [TalerErrorCode.WALLET_ORDER_ALREADY_PAID]: {\n orderId: string;\n fulfillmentUrl: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_MALFORMED]: empty;\n [TalerErrorCode.WALLET_CONTRACT_TERMS_SIGNATURE_INVALID]: {\n merchantPub: string;\n orderId: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_BASE_URL_MISMATCH]: {\n baseUrlForDownload: string;\n baseUrlFromContractTerms: string;\n };\n [TalerErrorCode.WALLET_INVALID_TALER_PAY_URI]: {\n talerPayUri: string;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n errorResponse?: any;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION]: {\n stack?: string;\n };\n [TalerErrorCode.WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE]: {\n bankProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN]: {\n operation: string;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED]: {\n requestUrl: string;\n requestMethod: string;\n throttleStats: Record<string, unknown>;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.WALLET_NETWORK_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n };\n [TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n validationError?: string;\n /**\n * Content type of the response, usually only specified if not the\n * expected content type.\n */\n contentType?: string;\n };\n [TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR]: {\n operation: string;\n error: string;\n detail: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: {\n numErrors: number;\n errorsPerCoin: Record<number, TalerErrorDetail>;\n };\n [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: {\n lastError?: TalerErrorDetail;\n };\n [TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR]: {\n httpStatusCode: number;\n };\n [TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR]: {\n requestError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_ERROR]: {\n innerError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_BAD_REQUEST]: {\n detail: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED]: {\n kycUrl: string;\n };\n [TalerErrorCode.WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_REFRESH_GROUP_INCOMPLETE]: {\n numErrors: number;\n /**\n * Errors, can be truncated.\n */\n errors: TalerErrorDetail[];\n };\n [TalerErrorCode.WALLET_EXCHANGE_BASE_URL_MISMATCH]: {\n urlWallet: string;\n urlExchange: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_UNAVAILABLE]: {\n exchangeBaseUrl: string;\n innerError: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_DB_UNAVAILABLE]: {\n innerError: TalerErrorDetail | undefined;\n };\n}\n\ntype ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : empty;\n\nexport function makeErrorDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n): TalerErrorDetail {\n if (!hint && !(detail as any).hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return { code, when, hint, ...detail };\n}\n\nexport function makePendingOperationFailedError(\n innerError: TalerErrorDetail,\n tag: TransactionType,\n uid: string,\n): TalerError {\n return TalerError.fromDetail(TalerErrorCode.WALLET_PENDING_OPERATION_FAILED, {\n innerError,\n transactionId: `${tag}:${uid}`,\n });\n}\n\nexport function summarizeTalerErrorDetail(ed: TalerErrorDetail): string {\n const errName = TalerErrorCode[ed.code] ?? \"<unknown>\";\n return `Error (${ed.code}/${errName})`;\n}\n\nfunction getDefaultHint(code: number): string {\n const errName = TalerErrorCode[code];\n if (errName) {\n return `Error (${errName})`;\n } else {\n return `Error (<unknown>)`;\n }\n}\n\nexport class TalerProtocolViolationError extends Error {\n constructor(hint?: string) {\n let msg: string;\n if (hint) {\n msg = `Taler protocol violation error (${hint})`;\n } else {\n msg = `Taler protocol violation error`;\n }\n super(msg);\n Object.setPrototypeOf(this, TalerProtocolViolationError.prototype);\n }\n}\n\n// compute a subset of TalerError, just for http request\ntype HttpErrors =\n | TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT\n | TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED\n | TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE\n | TalerErrorCode.WALLET_NETWORK_ERROR\n | TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR;\n\ntype TalerHttpErrorsDetails = {\n [code in HttpErrors]: TalerError<DetailsMap[code]>;\n};\n\nexport type TalerHttpError =\n TalerHttpErrorsDetails[keyof TalerHttpErrorsDetails];\n\nexport class TalerError<T = any> extends Error {\n errorDetail: TalerErrorDetail & T;\n cause: Error | undefined;\n private constructor(d: TalerErrorDetail & T, cause?: Error) {\n super(d.hint ?? `Error (code ${d.code})`);\n this.errorDetail = d;\n this.cause = cause;\n Object.setPrototypeOf(this, TalerError.prototype);\n }\n\n static fromDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n cause?: Error,\n ): TalerError {\n if (!hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return new TalerError<unknown>({ code, when, hint, ...detail }, cause);\n }\n\n static fromUncheckedDetail(d: TalerErrorDetail, c?: Error): TalerError {\n return new TalerError<unknown>({ ...d }, c);\n }\n\n static fromException(e: any): TalerError {\n const errDetail = getErrorDetailFromException(e);\n return new TalerError(errDetail, e);\n }\n\n hasErrorCode<C extends keyof DetailsMap>(\n code: C,\n ): this is TalerError<DetailsMap[C]> {\n return this.errorDetail.code === code;\n }\n\n toString(): string {\n return `TalerError: ${JSON.stringify(this.errorDetail)}`;\n }\n}\n\n/**\n * Convert an exception (or anything that was thrown) into\n * a TalerErrorDetail object.\n */\nexport function getErrorDetailFromException(e: any): TalerErrorDetail {\n if (e instanceof TalerError) {\n return e.errorDetail;\n }\n if (e instanceof CancellationToken.CancellationError) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_CORE_REQUEST_CANCELLED,\n {},\n );\n return err;\n }\n if (e instanceof Error) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {\n stack: e.stack,\n },\n `unexpected exception (message: ${e.message})`,\n );\n return err;\n }\n // Something was thrown that is not even an exception!\n // Try to stringify it.\n let excString: string;\n try {\n excString = e.toString();\n } catch (e) {\n // Something went horribly wrong.\n excString = \"can't stringify exception\";\n }\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {},\n `unexpected exception (not an exception, ${excString})`,\n );\n return err;\n}\n\nexport function assertUnreachable(x: never): never {\n throw new Error(\"Didn't expect to get here\");\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 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 {\n Codec,\n buildCodecForObject,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport {\n AmountString,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n} from \"./taler-types.js\";\nimport { TalerPreciseTimestamp, TalerProtocolTimestamp } from \"./time.js\";\nimport {\n RefreshReason,\n ScopeInfo,\n TalerErrorDetail,\n TransactionIdStr,\n TransactionStateFilter,\n WithdrawalExchangeAccountDetails,\n codecForScopeInfo,\n} from \"./wallet-types.js\";\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n *\n * it will be removed in next release\n *\n * @deprecated use scopeInfo\n */\n currency?: string;\n\n /**\n * return only transactions in the given scopeInfo\n */\n scopeInfo?: ScopeInfo;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * Sort order of the transaction items.\n * By default, items are sorted ascending by their\n * main timestamp.\n *\n * ascending: ascending by timestamp, but pending transactions first\n * descending: ascending by timestamp, but pending transactions first\n * stable-ascending: ascending by timestamp, with pending transactions amidst other transactions\n * (stable in the sense of: pending transactions don't jump around)\n */\n sort?: \"ascending\" | \"descending\" | \"stable-ascending\";\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n\n filterByState?: TransactionStateFilter;\n}\n\nexport interface TransactionState {\n major: TransactionMajorState;\n minor?: TransactionMinorState;\n}\n\nexport enum TransactionMajorState {\n // No state, only used when reporting transitions into the initial state\n None = \"none\",\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Suspended = \"suspended\",\n Dialog = \"dialog\",\n SuspendedAborting = \"suspended-aborting\",\n Failed = \"failed\",\n Expired = \"expired\",\n // Only used for the notification, never in the transaction history\n Deleted = \"deleted\",\n}\n\nexport enum TransactionMinorState {\n // Placeholder until D37 is fully implemented\n Unknown = \"unknown\",\n Deposit = \"deposit\",\n KycRequired = \"kyc\",\n AmlRequired = \"aml\",\n MergeKycRequired = \"merge-kyc\",\n Track = \"track\",\n SubmitPayment = \"submit-payment\",\n RebindSession = \"rebind-session\",\n Refresh = \"refresh\",\n Pickup = \"pickup\",\n AutoRefund = \"auto-refund\",\n User = \"user\",\n Bank = \"bank\",\n Exchange = \"exchange\",\n ClaimProposal = \"claim-proposal\",\n CheckRefund = \"check-refund\",\n CreatePurse = \"create-purse\",\n DeletePurse = \"delete-purse\",\n RefreshExpired = \"refresh-expired\",\n Ready = \"ready\",\n Merge = \"merge\",\n Repurchase = \"repurchase\",\n BankRegisterReserve = \"bank-register-reserve\",\n BankConfirmTransfer = \"bank-confirm-transfer\",\n WithdrawCoins = \"withdraw-coins\",\n ExchangeWaitReserve = \"exchange-wait-reserve\",\n AbortingBank = \"aborting-bank\",\n Aborting = \"aborting\",\n Refused = \"refused\",\n Withdraw = \"withdraw\",\n MerchantOrderProposed = \"merchant-order-proposed\",\n Proposed = \"proposed\",\n RefundAvailable = \"refund-available\",\n AcceptRefund = \"accept-refund\",\n PaidByOther = \"paid-by-other\",\n}\n\nexport enum TransactionAction {\n Delete = \"delete\",\n Suspend = \"suspend\",\n Resume = \"resume\",\n Abort = \"abort\",\n Fail = \"fail\",\n Retry = \"retry\",\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: TalerPreciseTimestamp;\n\n /**\n * Transaction state, as per DD37.\n */\n txState: TransactionState;\n\n /**\n * Possible transitions based on the current state.\n */\n txActions: TransactionAction[];\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 /**\n * If the transaction minor state is in KycRequired this field is going to\n * have the location where the user need to go to complete KYC information.\n */\n kycUrl?: string;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionReward\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit\n | TransactionInternalWithdrawal\n | TransactionRecoup\n | TransactionDenomLoss;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n InternalWithdrawal = \"internal-withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Reward = \"reward\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n Recoup = \"recoup\",\n DenomLoss = \"denom-loss\",\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 * @deprecated in favor of exchangeCreditAccounts\n */\n exchangePaytoUris: string[];\n\n exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\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 exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\n}\n\nexport enum DenomLossEventType {\n DenomExpired = \"denom-expired\",\n DenomVanished = \"denom-vanished\",\n DenomUnoffered = \"denom-unoffered\",\n}\n\n/**\n * A transaction to indicate financial loss due to denominations\n * that became unusable for deposits.\n */\nexport interface TransactionDenomLoss extends TransactionCommon {\n type: TransactionType.DenomLoss;\n lossEventType: DenomLossEventType;\n exchangeBaseUrl: string;\n}\n\n/**\n * A withdrawal transaction (either bank-integrated or manual).\n */\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\n/**\n * Internal withdrawal operation, only reported on request.\n *\n * Some transactions (peer-*-credit) internally do a withdrawal,\n * but only the peer-*-credit transaction is reported.\n *\n * The internal withdrawal transaction allows to access the details of\n * the underlying withdrawal for testing/debugging.\n *\n * It is usually not reported, so that amounts of transactions properly\n * add up, since the amountEffecive of the withdrawal is already reported\n * in the peer-*-credit transaction.\n */\nexport interface TransactionInternalWithdrawal extends TransactionCommon {\n type: TransactionType.InternalWithdrawal;\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 * Only available in the right state.\n */\n talerUri: string | undefined;\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 * Only present if the transaction is in a state where the other party can\n * 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\n/**\n * The exchange revoked a key and the wallet recoups funds.\n */\nexport interface TransactionRecoup extends TransactionCommon {\n type: TransactionType.Recoup;\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 * 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 /**\n * Does this purchase has an pos validation\n */\n posConfirmation: string | undefined;\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 * 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\n/**\n * Summary information about the payment that we got a refund for.\n */\nexport interface RefundPaymentInfo {\n summary: string;\n summary_i18n?: InternationalizedString;\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\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 // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n paymentInfo: RefundPaymentInfo | undefined;\n}\n\nexport interface TransactionReward extends TransactionCommon {\n type: TransactionType.Reward;\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\nexport interface DepositTransactionTrackingState {\n // Raw wire transfer identifier of the deposit.\n wireTransferId: string;\n // When was the wire transfer given to the bank.\n timestampExecuted: TalerProtocolTimestamp;\n // Total amount transfer for this wtid (including fees)\n amountRaw: AmountString;\n // Wire fee amount for this exchange\n wireFee: 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 trackingState: Array<DepositTransactionTrackingState>;\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 interface WithdrawalTransactionByURIRequest {\n talerWithdrawUri: string;\n}\n\nexport const codecForWithdrawalTransactionByURIRequest =\n (): Codec<WithdrawalTransactionByURIRequest> =>\n buildCodecForObject<WithdrawalTransactionByURIRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .build(\"WithdrawalTransactionByURIRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"scopeInfo\", codecOptional(codecForScopeInfo()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\n \"sort\",\n codecOptional(\n codecForEither(\n codecForConstString(\"ascending\"),\n codecForConstString(\"descending\"),\n codecForConstString(\"stable-ascending\"),\n ),\n ),\n )\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(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n\nexport interface ListAssociatedRefreshesRequest {\n transactionId: string;\n}\n\nexport const codecForListAssociatedRefreshesRequest =\n (): Codec<ListAssociatedRefreshesRequest> =>\n buildCodecForObject<ListAssociatedRefreshesRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ListAssociatedRefreshesRequest\");\n\nexport interface ListAssociatedRefreshesResponse {\n transactionIds: string[];\n}\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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n renderContext,\n} from \"./codec.js\";\nimport {\n CurrencySpecification,\n TemplateParams,\n WithdrawalOperationStatus,\n} from \"./index.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 AccountRestriction,\n AmountString,\n AuditorDenomSig,\n CoinEnvelope,\n DenomKeyType,\n DenominationPubKey,\n ExchangeAuditor,\n ExchangeWireAccount,\n InternationalizedString,\n MerchantContractTerms,\n MerchantInfo,\n PeerContractTerms,\n UnblindedSignature,\n codecForExchangeWireAccount,\n codecForMerchantContractTerms,\n codecForPeerContractTerms,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n TalerPreciseTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForPreciseTimestamp,\n codecForTimestamp,\n} from \"./time.js\";\nimport {\n OrderShortInfo,\n TransactionState,\n TransactionType,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\ndeclare const __txId: unique symbol;\nexport type TransactionIdStr = `txn:${string}:${string}` & { [__txId]: true };\n\n/**\n * Identifier for a pending task in the wallet.\n */\ndeclare const __pndId: unique symbol;\nexport type PendingIdStr = `pnd:${string}:${string}` & { [__pndId]: true };\n\ndeclare const __tmbId: unique symbol;\nexport type TombstoneIdStr = `tmb:${string}:${string}` & { [__tmbId]: true };\n\nfunction codecForTransactionIdStr(): Codec<TransactionIdStr> {\n return {\n decode(x: any, c?: Context): TransactionIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as TransactionIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForPendingIdStr(): Codec<PendingIdStr> {\n return {\n decode(x: any, c?: Context): PendingIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as PendingIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForTombstoneIdStr(): Codec<TombstoneIdStr> {\n return {\n decode(x: any, c?: Context): TombstoneIdStr {\n if (typeof x === \"string\" && x.startsWith(\"tmb:\")) {\n return x as TombstoneIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"tmb:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\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\n/**\n * How the amount should be interpreted in a transaction\n * Effective = how the balance is change\n * Raw = effective amount without fee\n *\n * Depending on the transaction, raw can be higher than effective\n */\nexport enum TransactionAmountMode {\n Effective = \"effective\",\n Raw = \"raw\",\n}\n\nexport type GetPlanForOperationRequest =\n | GetPlanForWithdrawRequest\n | GetPlanForDepositRequest;\n// | GetPlanForPushDebitRequest\n// | GetPlanForPullCreditRequest\n// | GetPlanForPaymentRequest\n// | GetPlanForTipRequest\n// | GetPlanForRefundRequest\n// | GetPlanForPullDebitRequest\n// | GetPlanForPushCreditRequest;\n\ninterface GetPlanForWalletInitiatedOperation {\n instructedAmount: AmountString;\n mode: TransactionAmountMode;\n}\n\nexport interface ConvertAmountRequest {\n amount: AmountString;\n type: TransactionAmountMode;\n}\n\nexport const codecForConvertAmountRequest =\n buildCodecForObject<ConvertAmountRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"type\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .build(\"ConvertAmountRequest\");\n\nexport interface GetAmountRequest {\n currency: string;\n}\n\nexport const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetAmountRequest\");\n\ninterface GetPlanToCompleteOperation {\n instructedAmount: AmountString;\n}\n\nconst codecForGetPlanForWalletInitiatedOperation = <\n T extends GetPlanForWalletInitiatedOperation,\n>() =>\n buildCodecForObject<T>()\n .property(\n \"mode\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .property(\"instructedAmount\", codecForAmountString());\n\ninterface GetPlanForWithdrawRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Withdrawal;\n exchangeUrl?: string;\n}\ninterface GetPlanForDepositRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Deposit;\n account: string; //payto string\n}\ninterface GetPlanForPushDebitRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPushDebit;\n}\n\ninterface GetPlanForPullCreditRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPullCredit;\n exchangeUrl: string;\n}\n\nconst codecForGetPlanForWithdrawRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForWithdrawRequest>()\n .property(\"type\", codecForConstString(TransactionType.Withdrawal))\n .property(\"exchangeUrl\", codecOptional(codecForString()))\n .build(\"GetPlanForWithdrawRequest\");\n\nconst codecForGetPlanForDepositRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForDepositRequest>()\n .property(\"type\", codecForConstString(TransactionType.Deposit))\n .property(\"account\", codecForString())\n .build(\"GetPlanForDepositRequest\");\n\nconst codecForGetPlanForPushDebitRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPushDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushDebit))\n .build(\"GetPlanForPushDebitRequest\");\n\nconst codecForGetPlanForPullCreditRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPullCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullCredit))\n .property(\"exchangeUrl\", codecForString())\n .build(\"GetPlanForPullCreditRequest\");\n\ninterface GetPlanForPaymentRequest extends GetPlanToCompleteOperation {\n type: TransactionType.Payment;\n wireMethod: string;\n ageRestriction: number;\n maxDepositFee: AmountString;\n}\n\n// interface GetPlanForTipRequest extends GetPlanForOperationBase {\n// type: TransactionType.Tip;\n// }\n// interface GetPlanForRefundRequest extends GetPlanForOperationBase {\n// type: TransactionType.Refund;\n// }\ninterface GetPlanForPullDebitRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPullDebit;\n}\ninterface GetPlanForPushCreditRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPushCredit;\n}\n\nconst codecForGetPlanForPaymentRequest =\n buildCodecForObject<GetPlanForPaymentRequest>()\n .property(\"type\", codecForConstString(TransactionType.Payment))\n .property(\"maxDepositFee\", codecForAmountString())\n .build(\"GetPlanForPaymentRequest\");\n\nconst codecForGetPlanForPullDebitRequest =\n buildCodecForObject<GetPlanForPullDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullDebit))\n .build(\"GetPlanForPullDebitRequest\");\n\nconst codecForGetPlanForPushCreditRequest =\n buildCodecForObject<GetPlanForPushCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushCredit))\n .build(\"GetPlanForPushCreditRequest\");\n\nexport const codecForGetPlanForOperationRequest =\n (): Codec<GetPlanForOperationRequest> =>\n buildCodecForUnion<GetPlanForOperationRequest>()\n .discriminateOn(\"type\")\n .alternative(\n TransactionType.Withdrawal,\n codecForGetPlanForWithdrawRequest,\n )\n .alternative(TransactionType.Deposit, codecForGetPlanForDepositRequest)\n // .alternative(\n // TransactionType.PeerPushDebit,\n // codecForGetPlanForPushDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPullCredit,\n // codecForGetPlanForPullCreditRequest,\n // )\n // .alternative(TransactionType.Payment, codecForGetPlanForPaymentRequest)\n // .alternative(\n // TransactionType.PeerPullDebit,\n // codecForGetPlanForPullDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPushCredit,\n // codecForGetPlanForPushCreditRequest,\n // )\n .build(\"GetPlanForOperationRequest\");\n\nexport interface GetPlanForOperationResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n counterPartyAmount?: AmountString;\n details: any;\n}\n\nexport const codecForGetPlanForOperationResponse =\n (): Codec<GetPlanForOperationResponse> =>\n buildCodecForObject<GetPlanForOperationResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .property(\"details\", codecForAny())\n .property(\"counterPartyAmount\", codecOptional(codecForAmountString()))\n .build(\"GetPlanForOperationResponse\");\n\nexport interface AmountResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n}\n\nexport const codecForAmountResponse = (): Codec<AmountResponse> =>\n buildCodecForObject<AmountResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .build(\"AmountResponse\");\n\nexport enum BalanceFlag {\n IncomingKyc = \"incoming-kyc\",\n IncomingAml = \"incoming-aml\",\n IncomingConfirmation = \"incoming-confirmation\",\n OutgoingKyc = \"outgoing-kyc\",\n}\n\nexport interface WalletBalance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n /**\n * Does the balance for this currency have a pending\n * transaction?\n *\n * @deprecated use flags and pendingIncoming/pendingOutgoing instead\n */\n hasPendingTransactions: boolean;\n\n /**\n * Is there a transaction that requires user input?\n *\n * @deprecated use flags instead\n */\n requiresUserInput: boolean;\n\n flags: BalanceFlag[];\n}\n\nexport const codecForScopeInfoGlobal = (): Codec<ScopeInfoGlobal> =>\n buildCodecForObject<ScopeInfoGlobal>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Global))\n .build(\"ScopeInfoGlobal\");\n\nexport const codecForScopeInfoExchange = (): Codec<ScopeInfoExchange> =>\n buildCodecForObject<ScopeInfoExchange>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Exchange))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoExchange\");\n\nexport const codecForScopeInfoAuditor = (): Codec<ScopeInfoAuditor> =>\n buildCodecForObject<ScopeInfoAuditor>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Auditor))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoAuditor\");\n\nexport const codecForScopeInfo = (): Codec<ScopeInfo> =>\n buildCodecForUnion<ScopeInfo>()\n .discriminateOn(\"type\")\n .alternative(ScopeType.Global, codecForScopeInfoGlobal())\n .alternative(ScopeType.Exchange, codecForScopeInfoExchange())\n .alternative(ScopeType.Auditor, codecForScopeInfoAuditor())\n .build(\"ScopeInfo\");\n\nexport interface GetCurrencySpecificationRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForGetCurrencyInfoRequest =\n (): Codec<GetCurrencySpecificationRequest> =>\n buildCodecForObject<GetCurrencySpecificationRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"GetCurrencySpecificationRequest\");\n\nexport interface ListExchangesForScopedCurrencyRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForListExchangesForScopedCurrencyRequest =\n (): Codec<ListExchangesForScopedCurrencyRequest> =>\n buildCodecForObject<ListExchangesForScopedCurrencyRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"ListExchangesForScopedCurrencyRequest\");\n\nexport interface GetCurrencySpecificationResponse {\n currencySpecification: CurrencySpecification;\n}\n\nexport interface BuiltinExchange {\n exchangeBaseUrl: string;\n currencyHint: string;\n}\n\nexport interface PartialWalletRunConfig {\n builtin?: Partial<WalletRunConfig[\"builtin\"]>;\n testing?: Partial<WalletRunConfig[\"testing\"]>;\n features?: Partial<WalletRunConfig[\"features\"]>;\n}\n\nexport interface WalletRunConfig {\n /**\n * Initialization values useful for a complete startup.\n *\n * These are values may be overridden by different wallets\n */\n builtin: {\n exchanges: BuiltinExchange[];\n };\n\n /**\n * Unsafe options which it should only be used to create\n * testing environment.\n */\n testing: {\n /**\n * Allow withdrawal of denominations even though they are about to expire.\n */\n denomselAllowLate: boolean;\n devModeActive: boolean;\n insecureTrustExchange: boolean;\n preventThrottling: boolean;\n skipDefaults: boolean;\n emitObservabilityEvents?: boolean;\n };\n\n /**\n * Configurations values that may be safe to show to the user\n */\n features: {\n allowHttp: boolean;\n };\n}\n\nexport interface InitRequest {\n config?: PartialWalletRunConfig;\n}\n\nexport const codecForInitRequest = (): Codec<InitRequest> =>\n buildCodecForObject<InitRequest>()\n .property(\"config\", codecForAny())\n .build(\"InitRequest\");\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 ScopeInfoGlobal = { type: ScopeType.Global; currency: string };\nexport type ScopeInfoExchange = {\n type: ScopeType.Exchange;\n currency: string;\n url: string;\n};\nexport type ScopeInfoAuditor = {\n type: ScopeType.Auditor;\n currency: string;\n url: string;\n};\n\nexport type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;\n\nexport interface BalancesResponse {\n balances: WalletBalance[];\n}\n\nexport const codecForBalance = (): Codec<WalletBalance> =>\n buildCodecForObject<WalletBalance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForAmountString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForAmountString())\n .property(\"pendingOutgoing\", codecForAmountString())\n .property(\"requiresUserInput\", codecForBoolean())\n .property(\"flags\", codecForAny()) // FIXME\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 * Coin was lost as the denomination is not usable anymore.\n */\n DenomLoss = \"denom-loss\",\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: AmountString;\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: TransactionIdStr;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: TransactionIdStr;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecOptional(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\", codecForTransactionIdStr())\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\", codecForTransactionIdStr())\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 * @deprecated use transactionId instead\n */\n walletRewardId: string;\n\n /**\n * Tip transaction ID.\n */\n transactionId: TransactionIdStr;\n\n /**\n * Has the tip already been accepted?\n */\n accepted: boolean;\n\n /**\n * Amount that the merchant gave.\n */\n rewardAmountRaw: AmountString;\n\n /**\n * Amount that arrived at the wallet.\n * Might be lower than the raw amount due to fees.\n */\n rewardAmountEffective: 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: TransactionIdStr;\n next_url?: string;\n}\n\nexport const codecForPrepareTipResult = (): Codec<PrepareTipResult> =>\n buildCodecForObject<PrepareTipResult>()\n .property(\"accepted\", codecForBoolean())\n .property(\"rewardAmountRaw\", codecForAmountString())\n .property(\"rewardAmountEffective\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"expirationTimestamp\", codecForTimestamp)\n .property(\"walletRewardId\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"PrepareRewardResult\");\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(\"transactionId\", codecForTransactionIdStr())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\nexport interface BalanceDetails {}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PaymentInsufficientBalanceDetails {\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 balanceReceiverAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceReceiverDepositable: AmountString;\n\n balanceExchangeDepositable: AmountString;\n\n /**\n * Maximum effective amount that the wallet can spend,\n * when all fees are paid by the wallet.\n */\n maxEffectiveSpendAmount: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n balanceExchangeDepositable: AmountString;\n balanceAgeAcceptable: AmountString;\n balanceReceiverAcceptable: AmountString;\n balanceReceiverDepositable: AmountString;\n maxEffectiveSpendAmount: AmountString;\n /**\n * Exchange doesn't have global fees configured for the relevant year,\n * p2p payments aren't possible.\n */\n missingGlobalFees: boolean;\n };\n };\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PaymentInsufficientBalanceDetails> =>\n buildCodecForObject<PaymentInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceReceiverAcceptable\", codecForAmountString())\n .property(\"balanceReceiverDepositable\", codecForAmountString())\n .property(\"balanceExchangeDepositable\", codecForAmountString())\n .property(\"perExchange\", codecForAny())\n .property(\"maxEffectiveSpendAmount\", 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(\"transactionId\", codecForTransactionIdStr())\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\", codecOptional(codecForAmountString()))\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecForString())\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\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 transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId instead\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: AmountString;\n talerUri: string;\n balanceDetails: PaymentInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n transactionId: TransactionIdStr;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: AmountString;\n amountEffective: AmountString | undefined;\n contractTermsHash: string;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n talerUri: string;\n}\n\nexport interface BankWithdrawDetails {\n status: WithdrawalOperationStatus;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n operationId: string;\n apiBaseUrl: string;\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: TransactionIdStr;\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 AbortDeposit = \"abort-deposit\",\n AbortPeerPushDebit = \"abort-peer-push-debit\",\n AbortPeerPullDebit = \"abort-peer-pull-debit\",\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 * 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 ExchangesShortListResponse {\n exchanges: ShortExchangeListItem[];\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n implementationSemver: string;\n implementationGitHash: string;\n\n /**\n * Wallet-core protocol version supported by this implementation\n * of the API (\"server\" version).\n */\n version: string;\n exchange: string;\n merchant: string;\n\n bankIntegrationApiRange: string;\n bankConversionApiRange: string;\n corebankApiRange: string;\n\n /**\n * @deprecated as bank was split into multiple APIs with separate versioning\n */\n bank: string;\n\n /**\n * @deprecated\n */\n hash: string | undefined;\n\n /**\n * @deprecated will be removed\n */\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\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\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeWireAccount[];\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 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(codecForExchangeWireAccount()))\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 auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n Pending = \"pending\",\n Proposed = \"proposed\",\n Accepted = \"accepted\",\n}\n\nexport enum ExchangeEntryStatus {\n Preset = \"preset\",\n Ephemeral = \"ephemeral\",\n Used = \"used\",\n}\n\nexport enum ExchangeUpdateStatus {\n Initial = \"initial\",\n InitialUpdate = \"initial-update\",\n Suspended = \"suspended\",\n UnavailableUpdate = \"unavailable-update\",\n Ready = \"ready\",\n ReadyUpdate = \"ready-update\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\nexport interface ShortExchangeListItem {\n exchangeBaseUrl: string;\n}\n\n/**\n * Info about an exchange entry in the wallet.\n */\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n masterPub: string | undefined;\n currency: string;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n ageRestrictionOptions: number[];\n\n /**\n * P2P payments are disabled with this exchange\n * (e.g. because no global fees are configured).\n */\n peerPaymentsDisabled: boolean;\n\n /**\n * Set to true if this exchange doesn't charge any fees.\n */\n noFees: boolean;\n\n scopeInfo: ScopeInfo;\n\n lastUpdateTimestamp: TalerPreciseTimestamp | undefined;\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\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(\"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(\"masterPub\", codecOptional(codecForString()))\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeEntryStatus\", codecForAny())\n .property(\"exchangeUpdateStatus\", codecForAny())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .property(\"scopeInfo\", codecForScopeInfo())\n .property(\"lastUpdateErrorInfo\", codecForAny())\n .property(\"lastUpdateTimestamp\", codecOptional(codecForPreciseTimestamp))\n .property(\"noFees\", codecForBoolean())\n .property(\"peerPaymentsDisabled\", codecForBoolean())\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 * @deprecated in favor of withdrawalAccountsList\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\n\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawalDetailsForAmount {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n *\n * @deprecated the client should query the exchange entry instead\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 * Number of coins that would be used for withdrawal.\n *\n * The UIs should warn if this number is too high (roughly at >100).\n */\n numCoins: number;\n\n /**\n * Ways to pay the exchange.\n *\n * @deprecated in favor of withdrawalAccountsList\n */\n paytoUris: string[];\n\n /**\n * Ways to pay the exchange, including accounts that require currency conversion.\n */\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\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 * Scope info of the currency withdrawn.\n */\n scopeInfo: ScopeInfo;\n}\n\nexport interface DenomSelItem {\n denomPubHash: string;\n count: number;\n /**\n * Number of denoms/planchets to skip, because\n * a re-denomination effectively deleted them.\n */\n skip?: number;\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: DenomSelItem[];\n earliestDepositExpiration: TalerProtocolTimestamp;\n hasDenomWithAgeRestriction: boolean;\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 exchangeCreditAccountDetails: WithdrawalExchangeAccountDetails[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\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 scopeInfo: ScopeInfo;\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 /**\n * Language of the returned content.\n *\n * If missing, language is unknown.\n */\n contentLanguage: string | undefined;\n\n /**\n * Available languages as advertised by the exchange.\n */\n tosAvailableLanguages: string[];\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: AmountString;\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\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: AmountString;\n amountToSpend: AmountString;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"IntegrationTestArgs\");\n\nexport interface IntegrationTestV2Args {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n}\n\nexport const codecForIntegrationTestV2Args = (): Codec<IntegrationTestV2Args> =>\n buildCodecForObject<IntegrationTestV2Args>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"IntegrationTestV2Args\");\n\nexport interface GetExchangeEntryByUrlRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeEntryByUrlRequest =\n (): Codec<GetExchangeEntryByUrlRequest> =>\n buildCodecForObject<GetExchangeEntryByUrlRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"GetExchangeEntryByUrlRequest\");\n\nexport type GetExchangeEntryByUrlResponse = ExchangeListItem;\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use a separate API call to start a forced exchange update instead\n */\n forceUpdate?: boolean;\n\n masterPub?: string;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .property(\"masterPub\", codecOptional(codecForString()))\n .build(\"AddExchangeRequest\");\n\nexport interface UpdateExchangeEntryRequest {\n exchangeBaseUrl: string;\n force?: boolean;\n}\n\nexport const codecForUpdateExchangeEntryRequest =\n (): Codec<UpdateExchangeEntryRequest> =>\n buildCodecForObject<UpdateExchangeEntryRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"force\", codecOptional(codecForBoolean()))\n .build(\"UpdateExchangeEntryRequest\");\n\nexport interface GetExchangeResourcesRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeResourcesRequest =\n (): Codec<GetExchangeResourcesRequest> =>\n buildCodecForObject<GetExchangeResourcesRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"GetExchangeResourcesRequest\");\n\nexport interface GetExchangeResourcesResponse {\n hasResources: boolean;\n}\n\nexport interface DeleteExchangeRequest {\n exchangeBaseUrl: string;\n purge?: boolean;\n}\n\nexport const codecForDeleteExchangeRequest = (): Codec<DeleteExchangeRequest> =>\n buildCodecForObject<DeleteExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"purge\", codecOptional(codecForBoolean()))\n .build(\"DeleteExchangeRequest\");\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 acceptLanguage?: string;\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .property(\"acceptLanguage\", codecOptional(codecForString()))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n}\n\nexport const codecForAcceptManualWithdrawalRequest =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * ID provided by the client to cancel the request.\n *\n * If the same request is made again with the same clientCancellationId,\n * all previous requests are cancelled.\n *\n * The cancelled request will receive an error response with\n * an error code that indicates the cancellation.\n *\n * The cancellation is best-effort, responses might still arrive.\n */\n clientCancellationId?: string;\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\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"clientCancellationId\", codecOptional(codecForString()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ForgetExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForgetExchangeTosRequest =\n (): Codec<ForgetExchangeTosRequest> =>\n buildCodecForObject<ForgetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"ForgetExchangeTosRequest\");\n\nexport interface AcceptRefundRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<AcceptRefundRequest> =>\n buildCodecForObject<AcceptRefundRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AcceptRefundRequest\");\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 notifyChangeFromPendingTimeoutMs?: number;\n}\n\nexport const codecForGetWithdrawalDetailsForUri =\n (): Codec<GetWithdrawalDetailsForUriRequest> =>\n buildCodecForObject<GetWithdrawalDetailsForUriRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\n \"notifyChangeFromPendingTimeoutMs\",\n codecOptional(codecForNumber()),\n )\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 SharePaymentRequest {\n merchantBaseUrl: string;\n orderId: string;\n}\nexport const codecForSharePaymentRequest = (): Codec<SharePaymentRequest> =>\n buildCodecForObject<SharePaymentRequest>()\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"orderId\", codecForString())\n .build(\"SharePaymentRequest\");\n\nexport interface SharePaymentResult {\n privatePayUri: string;\n}\nexport const codecForSharePaymentResult = (): Codec<SharePaymentResult> =>\n buildCodecForObject<SharePaymentResult>()\n .property(\"privatePayUri\", codecForString())\n .build(\"SharePaymentResult\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams?: TemplateParams;\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 /**\n * @deprecated use transactionId instead\n */\n proposalId?: string;\n transactionId?: TransactionIdStr;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\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}\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: AmountString;\n /**\n * Corebank API base URL.\n */\n corebankApiBaseUrl: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\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\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"corebankApiBaseUrl\", codecForString())\n .build(\"WithdrawTestBalanceRequest\");\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 RefreshCoinSpec {\n coinPub: string;\n amount?: AmountString;\n}\n\nexport const codecForRefreshCoinSpec = (): Codec<RefreshCoinSpec> =>\n buildCodecForObject<RefreshCoinSpec>()\n .property(\"amount\", codecForAmountString())\n .property(\"coinPub\", codecForString())\n .build(\"ForceRefreshRequest\");\n\nexport interface ForceRefreshRequest {\n refreshCoinSpecs: RefreshCoinSpec[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"refreshCoinSpecs\", codecForList(codecForRefreshCoinSpec()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport interface StartRefundQueryForUriResponse {\n /**\n * Transaction id of the *payment* where the refund query was started.\n */\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface StartRefundQueryRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForStartRefundQueryRequest =\n (): Codec<StartRefundQueryRequest> =>\n buildCodecForObject<StartRefundQueryRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"StartRefundQueryRequest\");\n\nexport interface PrepareRewardRequest {\n talerRewardUri: string;\n}\n\nexport const codecForPrepareRewardRequest = (): Codec<PrepareRewardRequest> =>\n buildCodecForObject<PrepareRewardRequest>()\n .property(\"talerRewardUri\", codecForString())\n .build(\"PrepareRewardRequest\");\n\nexport interface AcceptRewardRequest {\n /**\n * @deprecated use transactionId\n */\n walletRewardId?: string;\n /**\n * it will be required when \"walletRewardId\" is removed\n */\n transactionId?: TransactionIdStr;\n}\n\nexport const codecForAcceptTipRequest = (): Codec<AcceptRewardRequest> =>\n buildCodecForObject<AcceptRewardRequest>()\n .property(\"walletRewardId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"AcceptRewardRequest\");\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForFailTransactionRequest =\n (): Codec<FailTransactionRequest> =>\n buildCodecForObject<FailTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"FailTransactionRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForResumeTransaction = (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AbortTransactionRequest\");\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n /**\n * Pre-allocated transaction ID.\n * Allows clients to easily handle notifications\n * that occur while the operation has been created but\n * before the creation request has returned.\n */\n transactionId?: TransactionIdStr;\n depositPaytoUri: string;\n amount: AmountString;\n}\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 fees: DepositGroupFees;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: TransactionIdStr;\n}\n\nexport interface TxIdResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawUriInfoResponse {\n operationId: string;\n status: WithdrawalOperationStatus;\n confirmTransferUrl?: string;\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"operationId\", codecForString())\n .property(\"confirmTransferUrl\", codecOptional(codecForString()))\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\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 TestingListTasksForTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface TestingListTasksForTransactionsResponse {\n taskIdList: string[];\n}\n\nexport const codecForTestingListTasksForTransactionRequest =\n (): Codec<TestingListTasksForTransactionRequest> =>\n buildCodecForObject<TestingListTasksForTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"TestingListTasksForTransactionRequest\");\n\nexport interface DeleteTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\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: TransactionIdStr;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: TransactionIdStr;\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: TransactionIdStr;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: TransactionIdStr;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: TalerPreciseTimestamp;\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 ActiveTask {\n id: string;\n transaction: TransactionIdStr | undefined;\n firstTry: AbsoluteTime | undefined;\n nextTry: AbsoluteTime | undefined;\n counter: number | undefined;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport interface GetActiveTasks {\n tasks: ActiveTask[];\n}\n\nexport const codecForActiveTask = (): Codec<ActiveTask> =>\n buildCodecForObject<ActiveTask>()\n .property(\"id\", codecForString())\n .property(\"transaction\", codecOptional(codecForTransactionIdStr()))\n .property(\"counter\", codecForNumber())\n .property(\"firstTry\", codecForAbsoluteTime)\n .property(\"nextTry\", codecForAbsoluteTime)\n .property(\"lastError\", codecForTalerErrorDetail())\n .build(\"ActiveTask\");\n\nexport const codecForGetActiveTasks = (): Codec<GetActiveTasks> =>\n buildCodecForObject<GetActiveTasks>()\n .property(\"tasks\", codecForList(codecForActiveTask()))\n .build(\"GetActiveTasks\");\n\nexport interface ImportDbRequest {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDbRequest> =>\n buildCodecForObject<ImportDbRequest>()\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 /**\n * Number of coins used for the payment.\n */\n numCoins: number;\n}\n\nexport interface SelectedCoin {\n denomPubHash: string;\n coinPub: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\nexport interface SelectedProspectiveCoin {\n denomPubHash: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n coins: SelectedCoin[];\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 ProspectivePayCoinSelection {\n prospectiveCoins: SelectedProspectiveCoin[];\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 exchangeBaseUrl: string;\n /**\n * Maximum expiration date, based on how close the coins\n * used for the payment are to expiry.\n *\n * The value is based on when the wallet would typically\n * automatically refresh the coins on its own, leaving enough\n * time to get a refund for the push payment and refresh the\n * coin.\n */\n maxExpirationDate: TalerProtocolTimestamp;\n}\n\nexport interface InitiatePeerPushDebitRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushDebitResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n transactionId: TransactionIdStr;\n}\n\nexport const codecForInitiatePeerPushDebitRequest =\n (): Codec<InitiatePeerPushDebitRequest> =>\n buildCodecForObject<InitiatePeerPushDebitRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushDebitRequest\");\n\nexport interface PreparePeerPushCreditRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n transactionId: TransactionIdStr;\n\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use transaction ID instead.\n */\n peerPushCreditId: string;\n\n /**\n * @deprecated\n */\n amount: AmountString;\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 peerPullDebitId: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCreditRequest> =>\n buildCodecForObject<PreparePeerPushCreditRequest>()\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 transactionId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n transactionId: TransactionIdStr;\n}\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(\"transactionId\", codecForTransactionIdStr())\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\n /**\n * Number of coins that will be used,\n * can be used by the UI to warn if excessively large.\n */\n numCoins: number;\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 * @deprecated since it's not necessarily valid yet until the tx is in the right state\n */\n talerUri: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport interface ValidateIbanRequest {\n iban: string;\n}\n\nexport const codecForValidateIbanRequest = (): Codec<ValidateIbanRequest> =>\n buildCodecForObject<ValidateIbanRequest>()\n .property(\"iban\", codecForString())\n .build(\"ValidateIbanRequest\");\n\nexport interface ValidateIbanResponse {\n valid: boolean;\n}\n\nexport const codecForValidateIbanResponse = (): Codec<ValidateIbanResponse> =>\n buildCodecForObject<ValidateIbanResponse>()\n .property(\"valid\", codecForBoolean())\n .build(\"ValidateIbanResponse\");\n\nexport type TransactionStateFilter = \"nonfinal\";\n\nexport interface TransactionRecordFilter {\n onlyState?: TransactionStateFilter;\n onlyCurrency?: string;\n}\n\nexport interface StoredBackupList {\n storedBackups: {\n name: string;\n }[];\n}\n\nexport interface CreateStoredBackupResponse {\n name: string;\n}\n\nexport interface RecoverStoredBackupRequest {\n name: string;\n}\n\nexport interface DeleteStoredBackupRequest {\n name: string;\n}\n\nexport const codecForDeleteStoredBackupRequest =\n (): Codec<DeleteStoredBackupRequest> =>\n buildCodecForObject<DeleteStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"DeleteStoredBackupRequest\");\n\nexport const codecForRecoverStoredBackupRequest =\n (): Codec<RecoverStoredBackupRequest> =>\n buildCodecForObject<RecoverStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"RecoverStoredBackupRequest\");\n\nexport interface TestingSetTimetravelRequest {\n offsetMs: number;\n}\n\nexport const codecForTestingSetTimetravelRequest =\n (): Codec<TestingSetTimetravelRequest> =>\n buildCodecForObject<TestingSetTimetravelRequest>()\n .property(\"offsetMs\", codecForNumber())\n .build(\"TestingSetTimetravelRequest\");\n\nexport interface AllowedAuditorInfo {\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport interface AllowedExchangeInfo {\n exchangeBaseUrl: string;\n exchangePub: string;\n}\n\n/**\n * Data extracted from the contract terms that is relevant for payment\n * processing in the wallet.\n */\nexport interface WalletContractData {\n /**\n * Fulfillment URL, or the empty string if the order has no fulfillment URL.\n *\n * Stored as a non-nullable string as we use this field for IndexedDB indexing.\n */\n fulfillmentUrl: string;\n\n contractTermsHash: string;\n fulfillmentMessage?: string;\n fulfillmentMessageI18n?: InternationalizedString;\n merchantSig: string;\n merchantPub: string;\n merchant: MerchantInfo;\n amount: AmountString;\n orderId: string;\n merchantBaseUrl: string;\n summary: string;\n summaryI18n: { [lang_tag: string]: string } | undefined;\n autoRefund: TalerProtocolDuration | undefined;\n payDeadline: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n allowedExchanges: AllowedExchangeInfo[];\n timestamp: TalerProtocolTimestamp;\n wireMethod: string;\n wireInfoHash: string;\n maxDepositFee: AmountString;\n minimumAge?: number;\n}\n\nexport interface TestingWaitTransactionRequest {\n transactionId: TransactionIdStr;\n txState: TransactionState;\n}\n\nexport interface TestingGetDenomStatsRequest {\n exchangeBaseUrl: string;\n}\n\nexport interface TestingGetDenomStatsResponse {\n numKnown: number;\n numOffered: number;\n numLost: number;\n}\n\nexport const codecForTestingGetDenomStatsRequest =\n (): Codec<TestingGetDenomStatsRequest> =>\n buildCodecForObject<TestingGetDenomStatsRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"TestingGetDenomStatsRequest\");\n\nexport interface WithdrawalExchangeAccountDetails {\n /**\n * Payto URI to credit the exchange.\n *\n * Depending on whether the (manual!) withdrawal is accepted or just\n * being checked, this already includes the subject with the\n * reserve public key.\n */\n paytoUri: string;\n\n /**\n * Status that indicates whether the account can be used\n * by the user to send funds for a withdrawal.\n *\n * ok: account should be shown to the user\n * error: account should not be shown to the user, UIs might render the error (in conversionError),\n * especially in dev mode.\n */\n status: \"ok\" | \"error\";\n\n /**\n * Transfer amount. Might be in a different currency than the requested\n * amount for withdrawal.\n *\n * Absent if this is a conversion account and the conversion failed.\n */\n transferAmount?: AmountString;\n\n /**\n * Currency specification for the external currency.\n *\n * Only included if this account requires a currency conversion.\n */\n currencySpecification?: CurrencySpecification;\n\n /**\n * Further restrictions for sending money to the\n * exchange.\n */\n creditRestrictions?: AccountRestriction[];\n\n /**\n * Label given to the account or the account's bank by the exchange.\n */\n bankLabel?: string;\n\n /*\n * Display priority assigned to this bank account by the exchange.\n */\n priority?: number;\n\n /**\n * Error that happened when attempting to request the conversion rate.\n */\n conversionError?: TalerErrorDetail;\n}\n\nexport interface PrepareWithdrawExchangeRequest {\n /**\n * A taler://withdraw-exchange URI.\n */\n talerUri: string;\n}\n\nexport const codecForPrepareWithdrawExchangeRequest =\n (): Codec<PrepareWithdrawExchangeRequest> =>\n buildCodecForObject<PrepareWithdrawExchangeRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PrepareWithdrawExchangeRequest\");\n\nexport interface PrepareWithdrawExchangeResponse {\n /**\n * Base URL of the exchange that already existed\n * or was ephemerally added as an exchange entry to\n * the wallet.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount from the taler://withdraw-exchange URI.\n * Only present if specified in the URI.\n */\n amount?: AmountString;\n}\n\nexport interface ExchangeEntryState {\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n}\n\nexport interface ListGlobalCurrencyAuditorsResponse {\n auditors: {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n }[];\n}\n\nexport interface ListGlobalCurrencyExchangesResponse {\n exchanges: {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n }[];\n}\n\nexport interface AddGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForAddGlobalCurrencyExchangeRequest =\n (): Codec<AddGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<AddGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"AddGlobalCurrencyExchangeRequest\");\n\nexport interface RemoveGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyExchangeRequest =\n (): Codec<RemoveGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"RemoveGlobalCurrencyExchangeRequest\");\n\nexport interface AddGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForAddGlobalCurrencyAuditorRequest =\n (): Codec<AddGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<AddGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForString())\n .property(\"auditorPub\", codecForString())\n .build(\"AddGlobalCurrencyAuditorRequest\");\n\nexport interface RemoveGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyAuditorRequest =\n (): Codec<RemoveGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForString())\n .property(\"auditorPub\", codecForString())\n .build(\"RemoveGlobalCurrencyAuditorRequest\");\n\nexport interface RetryLoopOpts {\n /**\n * Stop the retry loop when all lifeness-giving pending operations\n * are done.\n *\n * Defaults to false.\n */\n stopWhenDone?: boolean;\n}\n\n/**\n * Information about one provider.\n *\n * We don't store the account key here,\n * as that's derived from the wallet root key.\n */\nexport interface ProviderInfo {\n active: boolean;\n syncProviderBaseUrl: string;\n name: string;\n terms?: BackupProviderTerms;\n /**\n * Last communication issue with the provider.\n */\n lastError?: TalerErrorDetail;\n lastSuccessfulBackupTimestamp?: TalerPreciseTimestamp;\n lastAttemptedBackupTimestamp?: TalerPreciseTimestamp;\n paymentProposalIds: string[];\n backupProblem?: BackupProblem;\n paymentStatus: ProviderPaymentStatus;\n}\n\nexport interface BackupProviderTerms {\n supportedProtocolVersion: string;\n annualFee: AmountString;\n storageLimitInMegabytes: number;\n}\n\nexport type BackupProblem =\n | BackupUnreadableProblem\n | BackupConflictingDeviceProblem;\n\nexport interface BackupUnreadableProblem {\n type: \"backup-unreadable\";\n}\n\nexport interface BackupConflictingDeviceProblem {\n type: \"backup-conflicting-device\";\n otherDeviceId: string;\n myDeviceId: string;\n backupTimestamp: AbsoluteTime;\n}\n\nexport type ProviderPaymentStatus =\n | ProviderPaymentTermsChanged\n | ProviderPaymentPaid\n | ProviderPaymentInsufficientBalance\n | ProviderPaymentUnpaid\n | ProviderPaymentPending;\n\nexport enum ProviderPaymentType {\n Unpaid = \"unpaid\",\n Pending = \"pending\",\n InsufficientBalance = \"insufficient-balance\",\n Paid = \"paid\",\n TermsChanged = \"terms-changed\",\n}\n\nexport interface ProviderPaymentUnpaid {\n type: ProviderPaymentType.Unpaid;\n}\n\nexport interface ProviderPaymentInsufficientBalance {\n type: ProviderPaymentType.InsufficientBalance;\n amount: AmountString;\n}\n\nexport interface ProviderPaymentPending {\n type: ProviderPaymentType.Pending;\n talerUri?: string;\n}\n\nexport interface ProviderPaymentPaid {\n type: ProviderPaymentType.Paid;\n paidUntil: AbsoluteTime;\n}\n\nexport interface ProviderPaymentTermsChanged {\n type: ProviderPaymentType.TermsChanged;\n paidUntil: AbsoluteTime;\n oldTerms: BackupProviderTerms;\n newTerms: BackupProviderTerms;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport interface SyncTermsOfServiceResponse {\n // maximum backup size supported\n storage_limit_in_megabytes: number;\n\n // Fee for an account, per year.\n annual_fee: AmountString;\n\n // protocol version supported by the server,\n // for now always \"0.0\".\n version: string;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport const codecForSyncTermsOfServiceResponse =\n (): Codec<SyncTermsOfServiceResponse> =>\n buildCodecForObject<SyncTermsOfServiceResponse>()\n .property(\"storage_limit_in_megabytes\", codecForNumber())\n .property(\"annual_fee\", codecForAmountString())\n .property(\"version\", codecForString())\n .build(\"SyncTermsOfServiceResponse\");\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { base64FromArrayBuffer } from \"../base64.js\";\nimport { stringToBytes } from \"../taler-crypto.js\";\nimport { AccessToken, LongPollParams, PaginationParams } from \"./types.js\";\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\n/**\n * rfc8959\n * @param token\n * @returns\n */\nexport function makeBearerTokenAuthHeader(token: AccessToken): string {\n return `Bearer secret-token:${token}`;\n}\n\n/**\n * https://bugs.gnunet.org/view.php?id=7949\n */\nexport function addPaginationParams(url: URL, pagination?: PaginationParams) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"start\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"delta\", String(order * limit));\n}\n\nexport function addMerchantPaginationParams(\n url: URL,\n pagination?: PaginationParams,\n) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"offset\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"limit\", String(order * limit));\n}\n\nexport function addLongPollingParam(url: URL, param?: LongPollParams) {\n if (!param) return;\n if (param.timeoutMs) {\n url.searchParams.set(\"long_poll_ms\", String(param.timeoutMs));\n }\n}\n\nexport interface CacheEvictor<T> {\n notifySuccess: (op: T) => Promise<void>;\n}\n\nexport const nullEvictor: CacheEvictor<unknown> = {\n notifySuccess: () => Promise.resolve(),\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { AmountJson, Amounts } from \"../amounts.js\";\nimport { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport { TalerErrorCode } from \"../taler-error-codes.js\";\nimport { codecForTalerErrorDetail } from \"../wallet-types.js\";\nimport {\n AccessToken,\n TalerBankConversionApi,\n codecForCashinConversionResponse,\n codecForCashoutConversionResponse,\n codecForConversionBankConfig,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerBankConversionResultByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = ResultByMethod<TalerBankConversionHttpClient, prop>;\nexport type TalerBankConversionErrorsByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;\n\nexport enum TalerBankConversionCacheEviction {\n UPDATE_RATE,\n}\n\n/**\n * The API is used by the wallets.\n */\nexport class TalerBankConversionHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForConversionBankConfig());\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate\n *\n */\n async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) {\n const url = new URL(`cashin-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashinConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate\n *\n */\n async getCashoutRate(conversion: {\n debit?: AmountJson;\n credit?: AmountJson;\n }) {\n const url = new URL(`cashout-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate\n *\n */\n async updateConversionRate(\n auth: AccessToken,\n body: TalerBankConversionApi.ConversionRate,\n ) {\n const url = new URL(`conversion-rate`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerBankConversionCacheEviction.UPDATE_RATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\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 * Imports.\n */\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n makeBasicAuthHeader,\n readTalerErrorResponse,\n} from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n TalerAuthentication,\n codecForTokenSuccessResponse,\n codecForTokenSuccessResponseMerchant,\n} from \"./types.js\";\nimport { makeBearerTokenAuthHeader } from \"./utils.js\";\n\nexport class TalerAuthenticationHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n * @returns\n */\n async createAccessTokenBasic(\n username: string,\n password: string,\n body: TalerAuthentication.TokenRequest,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenSuccessResponse());\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n *\n * @returns\n */\n async createAccessTokenBearer(\n token: string,\n body: TalerAuthentication.TokenRequest,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token as AccessToken),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenSuccessResponseMerchant());\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async deleteAccessToken(token: AccessToken) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n LibtoolVersion,\n LongPollParams,\n TalerErrorCode,\n codecForChallenge,\n codecForTalerErrorDetail,\n codecForTanTransmission,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opKnownTalerFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n PaginationParams,\n TalerCorebankApi,\n UserAndToken,\n WithdrawalOperationStatus,\n codecForAccountData,\n codecForBankAccountCreateWithdrawalResponse,\n codecForBankAccountTransactionInfo,\n codecForBankAccountTransactionsResponse,\n codecForCashoutPending,\n codecForCashoutStatusResponse,\n codecForCashouts,\n codecForCoreBankConfig,\n codecForCreateTransactionResponse,\n codecForGlobalCashouts,\n codecForListBankAccountsResponse,\n codecForMonitorResponse,\n codecForPublicAccountsResponse,\n codecForRegisterAccountResponse,\n codecForWithdrawalPublicInfo,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n addLongPollingParam,\n addPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerCoreBankResultByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = ResultByMethod<TalerCoreBankHttpClient, prop>;\nexport type TalerCoreBankErrorsByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;\n\nexport enum TalerCoreBankCacheEviction {\n DELETE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_ACCOUNT,\n UPDATE_PASSWORD,\n CREATE_TRANSACTION,\n CONFIRM_WITHDRAWAL,\n ABORT_WITHDRAWAL,\n CREATE_WITHDRAWAL,\n CREATE_CASHOUT,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerCoreBankHttpClient {\n public readonly PROTOCOL_VERSION = \"4:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCoreBankConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // ACCOUNTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts\n *\n */\n async createAccount(\n auth: AccessToken | undefined,\n body: TalerCorebankApi.RegisterAccountRequest,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n const headers: Record<string, string> = {};\n if (auth) {\n headers.Authorization = makeBearerTokenAuthHeader(auth);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers: headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n TalerCoreBankCacheEviction.CREATE_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForRegisterAccountResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-corebank.html#delete--accounts-$USERNAME\n *\n */\n async deleteAccount(auth: UserAndToken, cid?: string) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME\n *\n */\n async updateAccount(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountReconfiguration,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME-auth\n *\n */\n async updatePassword(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountPasswordChange,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/auth`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--public-accounts\n *\n */\n async getPublicAccounts(\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`public-accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForPublicAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ public_accounts: [] });\n case HttpStatusCode.NotFound:\n return opFixedSuccess({ public_accounts: [] });\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts\n *\n */\n async getAccounts(\n auth: AccessToken,\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForListBankAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ accounts: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME\n *\n */\n async getAccount(auth: UserAndToken) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountData());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // TRANSACTIONS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions\n *\n */\n async getTransactions(\n auth: UserAndToken,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountTransactionsResponse(),\n );\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ transactions: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions-$TRANSACTION_ID\n *\n */\n async getTransactionById(auth: UserAndToken, txid: number) {\n const url = new URL(\n `accounts/${auth.username}/transactions/${String(txid)}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountTransactionInfo());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions\n *\n */\n async createTransaction(\n auth: UserAndToken,\n body: TalerCorebankApi.CreateTransactionRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCreateTransactionResponse());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // WITHDRAWALS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals\n *\n */\n async createWithdrawal(\n auth: UserAndToken,\n body: TalerCorebankApi.BankAccountCreateWithdrawalRequest,\n ) {\n const url = new URL(`accounts/${auth.username}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountCreateWithdrawalResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-confirm\n *\n */\n async confirmWithdrawalById(auth: UserAndToken, wid: string, cid?: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-abort\n *\n */\n async abortWithdrawalById(auth: UserAndToken, wid: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--withdrawals-$WITHDRAWAL_ID\n *\n */\n async getWithdrawalById(\n wid: string,\n params?: {\n old_state?: WithdrawalOperationStatus;\n } & LongPollParams,\n ) {\n const url = new URL(`withdrawals/${wid}`, this.baseUrl);\n addLongPollingParam(url, params);\n if (params) {\n url.searchParams.set(\n \"old_state\",\n !params.old_state ? \"pending\" : params.old_state,\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWithdrawalPublicInfo());\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // CASHOUTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts\n *\n */\n async createCashout(\n auth: UserAndToken,\n body: TalerCorebankApi.CashoutRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutPending());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts-$CASHOUT_ID\n *\n */\n async getCashoutById(auth: UserAndToken, cid: number) {\n const url = new URL(\n `accounts/${auth.username}/cashouts/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutStatusResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts\n *\n */\n async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--cashouts\n *\n */\n async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {\n const url = new URL(`cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForGlobalCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // 2FA\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID\n *\n */\n async sendChallenge(auth: UserAndToken, cid: string) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTanTransmission());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID-confirm\n *\n */\n async confirmChallenge(\n auth: UserAndToken,\n cid: string,\n body: TalerCorebankApi.ChallengeSolve,\n ) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // MONITOR\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--monitor\n *\n */\n async getMonitor(\n auth: AccessToken,\n params: {\n timeframe?: TalerCorebankApi.MonitorTimeframeParam;\n date?: AbsoluteTime;\n } = {},\n ) {\n const url = new URL(`monitor`, this.baseUrl);\n if (params.timeframe) {\n url.searchParams.set(\n \"timeframe\",\n TalerCorebankApi.MonitorTimeframeParam[params.timeframe],\n );\n }\n if (params.date) {\n const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);\n if (seconds !== \"never\") {\n url.searchParams.set(\"date_s\", String(seconds));\n }\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMonitorResponse());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Others API\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getIntegrationAPI(): URL {\n return new URL(`taler-integration/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getWireGatewayAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-wire-gateway/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getRevenueAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getAuthenticationAPI(username: string): URL {\n return new URL(`accounts/${username}/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getConversionInfoAPI(): URL {\n return new URL(`conversion-info/`, this.baseUrl);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n FailCasesByMethod,\n HttpStatusCode,\n LibtoolVersion,\n PaginationParams,\n ResultByMethod,\n TalerMerchantApi,\n codecForAbortResponse,\n codecForAccountAddResponse,\n codecForAccountKycRedirects,\n codecForAccountsSummaryResponse,\n codecForBankAccountEntry,\n codecForClaimResponse,\n codecForInstancesResponse,\n codecForInventorySummaryResponse,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n codecForMerchantRefundResponse,\n codecForOrderHistory,\n codecForOtpDeviceDetails,\n codecForOtpDeviceSummaryResponse,\n codecForOutOfStockResponse,\n codecForPaidRefundStatusResponse,\n codecForPaymentResponse,\n codecForPostOrderResponse,\n codecForProductDetail,\n codecForQueryInstancesResponse,\n codecForStatusGoto,\n codecForStatusPaid,\n codecForStatusStatusUnpaid,\n codecForTansferList,\n codecForTemplateDetails,\n codecForTemplateSummaryResponse,\n codecForTokenFamiliesList,\n codecForTokenFamilyDetails,\n codecForWalletRefundResponse,\n codecForWalletTemplateDetails,\n codecForWebhookDetails,\n codecForWebhookSummaryResponse,\n opEmptySuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n HttpResponse,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport { opSuccessFromHttp, opUnknownFailure } from \"../operation.js\";\nimport {\n CacheEvictor,\n addMerchantPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerMerchantInstanceResultByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = ResultByMethod<TalerMerchantInstanceHttpClient, prop>;\nexport type TalerMerchantInstanceErrorsByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = FailCasesByMethod<TalerMerchantInstanceHttpClient, prop>;\n\nexport enum TalerMerchantInstanceCacheEviction {\n CREATE_ORDER,\n UPDATE_ORDER,\n DELETE_ORDER,\n UPDATE_CURRENT_INSTANCE,\n DELETE_CURRENT_INSTANCE,\n CREATE_BANK_ACCOUNT,\n UPDATE_BANK_ACCOUNT,\n DELETE_BANK_ACCOUNT,\n CREATE_PRODUCT,\n UPDATE_PRODUCT,\n DELETE_PRODUCT,\n CREATE_TRANSFER,\n DELETE_TRANSFER,\n CREATE_DEVICE,\n UPDATE_DEVICE,\n DELETE_DEVICE,\n CREATE_TEMPLATE,\n UPDATE_TEMPLATE,\n DELETE_TEMPLATE,\n CREATE_WEBHOOK,\n UPDATE_WEBHOOK,\n DELETE_WEBHOOK,\n CREATE_TOKENFAMILY,\n UPDATE_TOKENFAMILY,\n DELETE_TOKENFAMILY,\n LAST,\n}\nexport enum TalerMerchantManagementCacheEviction {\n CREATE_INSTANCE = TalerMerchantInstanceCacheEviction.LAST + 1,\n UPDATE_INSTANCE,\n DELETE_INSTANCE,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerMerchantInstanceHttpClient {\n public readonly PROTOCOL_VERSION = \"10:0:6\";\n\n readonly httpLib: HttpRequestLibrary;\n readonly cacheEvictor: CacheEvictor<TalerMerchantInstanceCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerMerchantInstanceCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wallet API\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim\n */\n async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {\n const url = new URL(`orders/${orderId}/claim`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForClaimResponse());\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-pay\n */\n async makePayment(orderId: string, body: TalerMerchantApi.PayRequest) {\n const url = new URL(`orders/${orderId}/pay`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaymentResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PaymentRequired:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.RequestTimeout:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PreconditionFailed:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID\n */\n\n async getPaymentStatus(\n orderId: string,\n params: TalerMerchantApi.PaymentStatusRequestParams = {},\n ) {\n const url = new URL(`orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.awaitRefundObtained !== undefined) {\n url.searchParams.set(\n \"await_refund_obtained\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.claimToken !== undefined) {\n url.searchParams.set(\"token\", params.claimToken);\n }\n if (params.contractTermHash !== undefined) {\n url.searchParams.set(\"h_contract\", params.contractTermHash);\n }\n if (params.refund !== undefined) {\n url.searchParams.set(\"refund\", params.refund);\n }\n if (params.sessionId !== undefined) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout !== undefined) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n // body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForStatusPaid());\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForStatusGoto());\n // case HttpStatusCode.Found: not possible since content is not HTML\n case HttpStatusCode.PaymentRequired:\n return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#demonstrating-payment\n */\n async demostratePayment(orderId: string, body: TalerMerchantApi.PaidRequest) {\n const url = new URL(`orders/${orderId}/paid`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments\n */\n async abortIncompletePayment(\n orderId: string,\n body: TalerMerchantApi.AbortRequest,\n ) {\n const url = new URL(`orders/${orderId}/abort`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForAbortResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#obtaining-refunds\n */\n async obtainRefund(\n orderId: string,\n body: TalerMerchantApi.WalletRefundRequest,\n ) {\n const url = new URL(`orders/${orderId}/refund`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForWalletRefundResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth\n */\n async updateCurrentInstanceAuthentication(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(`private/auth`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: // FIXME: missing in docs\n return opEmptySuccess(resp);\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private\n */\n async updateCurrentInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private\n *\n */\n async getCurrentInstanceDetails(token: AccessToken) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private\n */\n async deleteCurrentInstance(\n token: AccessToken | undefined,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc\n */\n async getCurrentIntanceKycStatus(\n token: AccessToken | undefined,\n params: TalerMerchantApi.GetKycStatusRequestParams = {},\n ) {\n const url = new URL(`private/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForAccountKycRedirects(),\n );\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Bank Accounts\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts\n */\n async addBankAccount(\n token: AccessToken | undefined,\n body: TalerMerchantApi.AccountAddDetails,\n ) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForAccountAddResponse());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async updateBankAccount(\n token: AccessToken | undefined,\n wireAccount: string,\n body: TalerMerchantApi.AccountPatchDetails,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts\n */\n async listBankAccounts(token: AccessToken, params?: PaginationParams) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n // addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async getBankAccountDetails(\n token: AccessToken | undefined,\n wireAccount: string,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountEntry());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async deleteBankAccount(token: AccessToken | undefined, wireAccount: string) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Inventory Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products\n */\n async addProduct(\n token: AccessToken | undefined,\n body: TalerMerchantApi.ProductAddDetail,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async updateProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.ProductPatchDetail,\n ) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products\n */\n async listProducts(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInventorySummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: not in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async getProductDetails(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForProductDetail());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#reserving-inventory\n */\n async lockProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.LockRequest,\n ) {\n const url = new URL(`private/products/${productId}/lock`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory\n */\n async deleteProduct(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Payment processing\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders\n */\n async createOrder(\n token: AccessToken | undefined,\n body: TalerMerchantApi.PostOrderRequest,\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n return this.procesOrderCreationResponse(resp);\n }\n\n private async procesOrderCreationResponse(resp: HttpResponse) {\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPostOrderResponse());\n }\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-orders\n */\n async listOrders(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListOrdersRequestParams = {},\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n if (params.date) {\n url.searchParams.set(\"date_s\", String(params.date));\n }\n if (params.fulfillmentUrl) {\n url.searchParams.set(\"fulfillment_url\", params.fulfillmentUrl);\n }\n if (params.paid !== undefined) {\n url.searchParams.set(\"paid\", params.paid ? \"YES\" : \"NO\");\n }\n if (params.refunded !== undefined) {\n url.searchParams.set(\"refunded\", params.refunded ? \"YES\" : \"NO\");\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout\", String(params.timeout));\n }\n if (params.wired !== undefined) {\n url.searchParams.set(\"wired\", params.wired ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOrderHistory());\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async getOrderDetails(\n token: AccessToken | undefined,\n orderId: string,\n params: TalerMerchantApi.GetOrderRequestParams = {},\n ) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup\n */\n async forgetOrder(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.ForgetRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async deleteOrder(token: AccessToken | undefined, orderId: string) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Refunds\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund\n */\n async addRefund(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.RefundRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForMerchantRefundResponse());\n }\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wire Transfer\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers\n */\n async informWireTransfer(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TransferInformation,\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers\n */\n async listWireTransfers(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListWireTransferRequestParams = {},\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n if (params.after) {\n url.searchParams.set(\"after\", String(params.after));\n }\n if (params.before) {\n url.searchParams.set(\"before\", String(params.before));\n }\n if (params.paytoURI) {\n url.searchParams.set(\"payto_uri\", params.paytoURI);\n }\n if (params.verified !== undefined) {\n url.searchParams.set(\"verified\", params.verified ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTansferList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID\n */\n async deleteWireTransfer(token: AccessToken | undefined, transferId: string) {\n const url = new URL(`private/transfers/${transferId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // OTP Devices\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices\n */\n async addOtpDevice(\n token: AccessToken | undefined,\n body: TalerMerchantApi.OtpDeviceAddDetails,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async updateOtpDevice(\n token: AccessToken | undefined,\n deviceId: string,\n body: TalerMerchantApi.OtpDevicePatchDetails,\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices\n */\n async listOtpDevices(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async getOtpDeviceDetails(\n token: AccessToken | undefined,\n deviceId: string,\n params: TalerMerchantApi.GetOtpDeviceRequestParams = {},\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n if (params.faketime) {\n url.searchParams.set(\"faketime\", String(params.faketime));\n }\n if (params.price) {\n url.searchParams.set(\"price\", params.price);\n }\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async deleteOtpDevice(token: AccessToken | undefined, deviceId: string) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Templates\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates\n */\n async addTemplate(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TemplateAddDetails,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async updateTemplate(\n token: AccessToken | undefined,\n templateId: string,\n body: TalerMerchantApi.TemplatePatchDetails,\n ) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-template\n */\n async listTemplates(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async getTemplateDetails(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async deleteTemplate(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-templates-$TEMPLATE_ID\n */\n async useTemplateGetInfo(templateId: string) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWalletTemplateDetails());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID\n */\n async useTemplateCreateOrder(\n templateId: string,\n body: TalerMerchantApi.UsingTemplateDetails,\n ) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n return this.procesOrderCreationResponse(resp);\n }\n\n //\n // Webhooks\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks\n */\n async addWebhook(\n token: AccessToken | undefined,\n body: TalerMerchantApi.WebhookAddDetails,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async updateWebhook(\n token: AccessToken | undefined,\n webhookId: string,\n body: TalerMerchantApi.WebhookPatchDetails,\n ) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks\n */\n async listWebhooks(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWebhookSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async getWebhookDetails(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opSuccessFromHttp(resp, codecForWebhookDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async deleteWebhook(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // token families\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async createTokenFamily(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TokenFamilyCreateRequest,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async updateTokenFamily(\n token: AccessToken | undefined,\n tokenSlug: string,\n body: TalerMerchantApi.TokenFamilyUpdateRequest,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY,\n );\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async listTokenFamilies(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamiliesList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async getTokenFamilyDetails(\n token: AccessToken | undefined,\n tokenSlug: string,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async deleteTokenFamily(token: AccessToken | undefined, tokenSlug: string) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * Get the auth api against the current instance\n *\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token\n */\n getAuthenticationAPI(): URL {\n return new URL(`private/`, this.baseUrl);\n }\n}\n\nexport type TalerMerchantManagementResultByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = ResultByMethod<TalerMerchantManagementHttpClient, prop>;\nexport type TalerMerchantManagementErrorsByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = FailCasesByMethod<TalerMerchantManagementHttpClient, prop>;\n\nexport class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {\n readonly cacheManagementEvictor: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n // cacheManagementEvictor?: CacheEvictor<TalerMerchantManagementCacheEviction>,\n cacheEvictor?: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >,\n ) {\n super(baseUrl, httpClient, cacheEvictor);\n this.cacheManagementEvictor = cacheEvictor ?? nullEvictor;\n }\n\n getSubInstanceAPI(instanceId: string) {\n return new URL(`instances/${instanceId}/`, this.baseUrl);\n }\n\n //\n // Instance Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances\n */\n async createInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceConfigurationMessage,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.CREATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth\n */\n async updateInstanceAuthentication(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(\n `management/instances/${instanceId}/auth`,\n this.baseUrl,\n );\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE\n */\n async updateInstance(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.UPDATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances\n */\n async listInstances(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE\n *\n */\n async getInstanceDetails(token: AccessToken | undefined, instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE\n */\n async deleteInstance(\n token: AccessToken | undefined,\n instanceId: string,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.DELETE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc\n */\n async getIntanceKycStatus(\n token: AccessToken | undefined,\n instanceId: string,\n params: TalerMerchantApi.GetKycStatusRequestParams,\n ) {\n const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\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) 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 * IBAN validation.\n *\n * Currently only validates the checksum.\n *\n * It does not validate:\n * - Country-specific length\n * - Country-specific checksums\n *\n * The country list is also not complete.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\nexport type IbanValidationResult =\n | { type: \"invalid\" }\n | {\n type: \"valid\";\n normalizedIban: string;\n };\n\nexport interface IbanCountryInfo {\n name: string;\n isSepa?: boolean;\n length?: number;\n}\n\n/**\n * Incomplete list, see https://www.swift.com/resource/iban-registry-pdf\n */\nexport const ibanCountryInfoTable: Record<string, IbanCountryInfo> = {\n AE: { name: \"U.A.E.\" },\n AF: { name: \"Afghanistan\" },\n AL: { name: \"Albania\" },\n AM: { name: \"Armenia\" },\n AN: { name: \"Netherlands Antilles\" },\n AR: { name: \"Argentina\" },\n AT: { name: \"Austria\" },\n AU: { name: \"Australia\" },\n AZ: { name: \"Azerbaijan\" },\n BA: { name: \"Bosnia and Herzegovina\" },\n BD: { name: \"Bangladesh\" },\n BE: { name: \"Belgium\" },\n BG: { name: \"Bulgaria\" },\n BH: { name: \"Bahrain\" },\n BN: { name: \"Brunei Darussalam\" },\n BO: { name: \"Bolivia\" },\n BR: { name: \"Brazil\" },\n BT: { name: \"Bhutan\" },\n BY: { name: \"Belarus\" },\n BZ: { name: \"Belize\" },\n CA: { name: \"Canada\" },\n CG: { name: \"Congo\" },\n CH: { name: \"Switzerland\" },\n CI: { name: \"Cote d'Ivoire\" },\n CL: { name: \"Chile\" },\n CM: { name: \"Cameroon\" },\n CN: { name: \"People's Republic of China\" },\n CO: { name: \"Colombia\" },\n CR: { name: \"Costa Rica\" },\n CS: { name: \"Serbia and Montenegro\" },\n CZ: { name: \"Czech Republic\" },\n DE: { name: \"Germany\" },\n DK: { name: \"Denmark\" },\n DO: { name: \"Dominican Republic\" },\n DZ: { name: \"Algeria\" },\n EC: { name: \"Ecuador\" },\n EE: { name: \"Estonia\" },\n EG: { name: \"Egypt\" },\n ER: { name: \"Eritrea\" },\n ES: { name: \"Spain\" },\n ET: { name: \"Ethiopia\" },\n FI: { name: \"Finland\" },\n FO: { name: \"Faroe Islands\" },\n FR: { name: \"France\" },\n GB: { name: \"United Kingdom\" },\n GD: { name: \"Caribbean\" },\n GE: { name: \"Georgia\" },\n GL: { name: \"Greenland\" },\n GR: { name: \"Greece\" },\n GT: { name: \"Guatemala\" },\n HK: { name: \"Hong Kong S.A.R.\" },\n HN: { name: \"Honduras\" },\n HR: { name: \"Croatia\" },\n HT: { name: \"Haiti\" },\n HU: { name: \"Hungary\" },\n ID: { name: \"Indonesia\" },\n IE: { name: \"Ireland\" },\n IL: { name: \"Israel\" },\n IN: { name: \"India\" },\n IQ: { name: \"Iraq\" },\n IR: { name: \"Iran\" },\n IS: { name: \"Iceland\" },\n IT: { name: \"Italy\" },\n JM: { name: \"Jamaica\" },\n JO: { name: \"Jordan\" },\n JP: { name: \"Japan\" },\n KE: { name: \"Kenya\" },\n KG: { name: \"Kyrgyzstan\" },\n KH: { name: \"Cambodia\" },\n KR: { name: \"South Korea\" },\n KW: { name: \"Kuwait\" },\n KZ: { name: \"Kazakhstan\" },\n LA: { name: \"Laos\" },\n LB: { name: \"Lebanon\" },\n LI: { name: \"Liechtenstein\" },\n LK: { name: \"Sri Lanka\" },\n LT: { name: \"Lithuania\" },\n LU: { name: \"Luxembourg\" },\n LV: { name: \"Latvia\" },\n LY: { name: \"Libya\" },\n MA: { name: \"Morocco\" },\n MC: { name: \"Principality of Monaco\" },\n MD: { name: \"Moldava\" },\n ME: { name: \"Montenegro\" },\n MK: { name: \"Former Yugoslav Republic of Macedonia\" },\n ML: { name: \"Mali\" },\n MM: { name: \"Myanmar\" },\n MN: { name: \"Mongolia\" },\n MO: { name: \"Macau S.A.R.\" },\n MT: { name: \"Malta\" },\n MV: { name: \"Maldives\" },\n MX: { name: \"Mexico\" },\n MY: { name: \"Malaysia\" },\n NG: { name: \"Nigeria\" },\n NI: { name: \"Nicaragua\" },\n NL: { name: \"Netherlands\" },\n NO: { name: \"Norway\" },\n NP: { name: \"Nepal\" },\n NZ: { name: \"New Zealand\" },\n OM: { name: \"Oman\" },\n PA: { name: \"Panama\" },\n PE: { name: \"Peru\" },\n PH: { name: \"Philippines\" },\n PK: { name: \"Islamic Republic of Pakistan\" },\n PL: { name: \"Poland\" },\n PR: { name: \"Puerto Rico\" },\n PT: { name: \"Portugal\" },\n PY: { name: \"Paraguay\" },\n QA: { name: \"Qatar\" },\n RE: { name: \"Reunion\" },\n RO: { name: \"Romania\" },\n RS: { name: \"Serbia\" },\n RU: { name: \"Russia\" },\n RW: { name: \"Rwanda\" },\n SA: { name: \"Saudi Arabia\" },\n SE: { name: \"Sweden\" },\n SG: { name: \"Singapore\" },\n SI: { name: \"Slovenia\" },\n SK: { name: \"Slovak\" },\n SN: { name: \"Senegal\" },\n SO: { name: \"Somalia\" },\n SR: { name: \"Suriname\" },\n SV: { name: \"El Salvador\" },\n SY: { name: \"Syria\" },\n TH: { name: \"Thailand\" },\n TJ: { name: \"Tajikistan\" },\n TM: { name: \"Turkmenistan\" },\n TN: { name: \"Tunisia\" },\n TR: { name: \"Turkey\" },\n TT: { name: \"Trinidad and Tobago\" },\n TW: { name: \"Taiwan\" },\n TZ: { name: \"Tanzania\" },\n UA: { name: \"Ukraine\" },\n US: { name: \"United States\" },\n UY: { name: \"Uruguay\" },\n VA: { name: \"Vatican\" },\n VE: { name: \"Venezuela\" },\n VN: { name: \"Viet Nam\" },\n YE: { name: \"Yemen\" },\n ZA: { name: \"South Africa\" },\n ZW: { name: \"Zimbabwe\" },\n};\n\nlet ccZero = \"0\".charCodeAt(0);\nlet ccNine = \"9\".charCodeAt(0);\nlet ccA = \"A\".charCodeAt(0);\nlet ccZ = \"Z\".charCodeAt(0);\n\n/**\n * Append a IBAN digit(s) based on a char code.\n */\nfunction appendDigit(digits: number[], cc: number): boolean {\n if (cc >= ccZero && cc <= ccNine) {\n digits.push(cc - ccZero);\n } else if (cc >= ccA && cc <= ccZ) {\n const n = cc - ccA + 10;\n digits.push(Math.floor(n / 10) % 10);\n digits.push(n % 10);\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Compute MOD-97-10 as per ISO/IEC 7064:2003.\n */\nfunction mod97(digits: number[]): number {\n let i = 0;\n let modAccum = 0;\n while (i < digits.length) {\n let n = 0;\n while (n < 9 && i < digits.length) {\n modAccum = modAccum * 10 + digits[i];\n i++;\n n++;\n }\n modAccum = modAccum % 97;\n }\n return modAccum;\n}\n\nexport function validateIban(ibanString: string): IbanValidationResult {\n let myIban = ibanString.toLocaleUpperCase().replace(\" \", \"\");\n let countryCode = myIban.substring(0, 2);\n let countryInfo = ibanCountryInfoTable[countryCode];\n\n if (!countryInfo) {\n return {\n type: \"invalid\",\n };\n }\n\n let digits: number[] = [];\n\n for (let i = 4; i < myIban.length; i++) {\n const cc = myIban.charCodeAt(i);\n if (!appendDigit(digits, cc)) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n for (let i = 0; i < 4; i++) {\n if (!appendDigit(digits, ibanString.charCodeAt(i))) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n const rem = mod97(digits);\n if (rem === 1) {\n return {\n type: \"valid\",\n normalizedIban: myIban,\n };\n } else {\n return {\n type: \"invalid\",\n };\n }\n}\n\nexport function generateIban(countryCode: string, length: number): string {\n let ibanSuffix = \"\";\n let digits: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const cc = ccZero + (Math.floor(Math.random() * 100) % 10);\n appendDigit(digits, cc);\n ibanSuffix += String.fromCharCode(cc);\n }\n\n appendDigit(digits, countryCode.charCodeAt(0));\n appendDigit(digits, countryCode.charCodeAt(1));\n\n // Try using \"00\" as check digits\n appendDigit(digits, ccZero);\n appendDigit(digits, ccZero);\n\n const requiredChecksum = 98 - mod97(digits);\n\n const checkDigit1 = Math.floor(requiredChecksum / 10) % 10;\n const checkDigit2 = requiredChecksum % 10;\n\n return countryCode + checkDigit1 + checkDigit2 + ibanSuffix;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019-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 * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { AbsoluteTime } from \"./time.js\";\nimport { TransactionState } from \"./transactions-types.js\";\nimport { ExchangeEntryState, TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n BalanceChange = \"balance-change\",\n BackupOperationError = \"backup-error\",\n TransactionStateTransition = \"transaction-state-transition\",\n WithdrawalOperationTransition = \"withdrawal-operation-transition\",\n ExchangeStateTransition = \"exchange-state-transition\",\n TaskObservabilityEvent = \"task-observability-event\",\n RequestObservabilityEvent = \"request-observability-event\",\n}\n\nexport interface ErrorInfoSummary {\n code: number;\n hint?: string;\n message?: string;\n}\n\nexport interface TransactionStateTransitionNotification {\n type: NotificationType.TransactionStateTransition;\n transactionId: string;\n oldTxState: TransactionState;\n newTxState: TransactionState;\n errorInfo?: ErrorInfoSummary;\n\n /**\n * Additional \"user data\" that is dependent on the\n * state transition.\n *\n * Usage should be avoided.\n *\n * Currently used to notify the iOS app about\n * the KYC URL.\n */\n experimentalUserData?: any;\n}\n\nexport interface ExchangeStateTransitionNotification {\n type: NotificationType.ExchangeStateTransition;\n /**\n * Identification of the exchange entry that this\n * notification is about.\n */\n exchangeBaseUrl: string;\n\n /**\n * If missing, the notification means that\n * the exchange entry is newly created.\n */\n oldExchangeState?: ExchangeEntryState;\n\n /**\n * New state of the exchange.\n */\n newExchangeState: ExchangeEntryState;\n\n /**\n * Summary of the error that occurred when trying to update the exchange entry,\n * if applicable.\n */\n errorInfo?: ErrorInfoSummary;\n}\n\nexport interface BalanceChangeNotification {\n type: NotificationType.BalanceChange;\n\n /**\n * Transaction ID of the transaction that caused the balance update.\n *\n * Only used as a hint for debugging, should not be relied upon by clients.\n */\n hintTransactionId: string;\n}\n\nexport interface TaskProgressNotification {\n type: NotificationType.TaskObservabilityEvent;\n taskId: string;\n event: ObservabilityEvent;\n}\n\nexport interface RequestProgressNotification {\n type: NotificationType.RequestObservabilityEvent;\n requestId: string;\n operation: string;\n event: ObservabilityEvent;\n}\n\nexport enum ObservabilityEventType {\n HttpFetchStart = \"http-fetch-start\",\n HttpFetchFinishError = \"http-fetch-finish-error\",\n HttpFetchFinishSuccess = \"http-fetch-finish-success\",\n DbQueryStart = \"db-query-start\",\n DbQueryFinishSuccess = \"db-query-finish-success\",\n DbQueryFinishError = \"db-query-finish-error\",\n RequestStart = \"request-start\",\n RequestFinishSuccess = \"request-finish-success\",\n RequestFinishError = \"request-finish-error\",\n TaskStart = \"task-start\",\n TaskStop = \"task-stop\",\n TaskReset = \"task-reset\",\n ShepherdTaskResult = \"sheperd-task-result\",\n DeclareTaskDependency = \"declare-task-dependency\",\n CryptoStart = \"crypto-start\",\n CryptoFinishSuccess = \"crypto-finish-success\",\n CryptoFinishError = \"crypto-finish-error\",\n Message = \"message\",\n}\n\nexport type ObservabilityEvent =\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchStart;\n url: string;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishSuccess;\n url: string;\n status: number;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishError;\n url: string;\n error: TalerErrorDetail;\n }\n | {\n type: ObservabilityEventType.DbQueryStart;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishSuccess;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishError;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.RequestStart;\n }\n | {\n type: ObservabilityEventType.RequestFinishSuccess;\n durationMs: number;\n }\n | {\n type: ObservabilityEventType.RequestFinishError;\n }\n | {\n type: ObservabilityEventType.TaskStart;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskStop;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskReset;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.DeclareTaskDependency;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.CryptoStart;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishSuccess;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishError;\n operation: string;\n }\n | {\n type: ObservabilityEventType.ShepherdTaskResult;\n resultType: string;\n }\n | {\n type: ObservabilityEventType.Message;\n contents: string;\n };\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n/**\n * This notification is required to signal UI that\n * the withdrawal operation changed the state.\n *\n * https://bugs.gnunet.org/view.php?id=8099\n */\nexport interface WithdrawalOperationTransitionNotification {\n type: NotificationType.WithdrawalOperationTransition;\n uri: string;\n}\n\nexport type WalletNotification =\n | BalanceChangeNotification\n | WithdrawalOperationTransitionNotification\n | BackupOperationErrorNotification\n | ExchangeStateTransitionNotification\n | TransactionStateTransitionNotification\n | TaskProgressNotification\n | RequestProgressNotification;\n", "/*\n This file is part of GNU Taler\n (C) 2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n CancellationToken,\n ObservabilityEvent,\n} from \"./index.js\";\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http-common.js\";\nimport { ObservabilityEventType } from \"./notifications.js\";\nimport { getErrorDetailFromException } from \"./errors.js\";\n\n/**\n * Observability sink can be passed into various operations (HTTP requests, DB access)\n * to do structured logging within a particular context (task, request, ...).\n */\nexport interface ObservabilityContext {\n observe(evt: ObservabilityEvent): void;\n}\n\nlet seqId = 1000;\n\nexport class ObservableHttpClientLibrary implements HttpRequestLibrary {\n private readonly cancelatorById = new Map<string, CancellationToken.Source>();\n constructor(\n private impl: HttpRequestLibrary,\n private oc: ObservabilityContext,\n ) {}\n\n public cancelRequest(id: string): void {\n const cancelator = this.cancelatorById.get(id);\n if (!cancelator) return;\n cancelator.cancel();\n }\n\n async fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n const id = `req-${seqId}`;\n seqId = seqId + 1;\n\n const cancelator = CancellationToken.create();\n if (opt?.cancellationToken) {\n opt.cancellationToken.onCancelled(cancelator.cancel);\n }\n this.cancelatorById.set(id, cancelator);\n\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchStart,\n url: url,\n });\n\n const optsWithCancel = opt ?? {};\n optsWithCancel.cancellationToken = cancelator.token;\n try {\n const res = await this.impl.fetch(url, optsWithCancel);\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishSuccess,\n url,\n status: res.status,\n });\n return res;\n } catch (e) {\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishError,\n url,\n error: getErrorDetailFromException(e),\n });\n throw e;\n } finally {\n this.cancelatorById.delete(id);\n }\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 * Cross-platform timers.\n *\n * NodeJS and the browser use slightly different timer API,\n * this abstracts over these differences.\n */\n\n/**\n * Imports.\n */\nimport { Logger, Duration } from \"@gnu-taler/taler-util\";\n\nconst logger = new Logger(\"timer.ts\");\n\n/**\n * Cancelable timer.\n */\nexport interface TimerHandle {\n clear(): void;\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void;\n}\n\nclass IntervalHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearInterval(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\nclass TimeoutHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearTimeout(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\n/**\n * Get a performance counter in nanoseconds.\n */\nexport const performanceNow: () => bigint = (() => {\n // @ts-ignore\n if (typeof process !== \"undefined\" && process.hrtime) {\n return () => {\n return process.hrtime.bigint();\n };\n }\n\n // @ts-ignore\n if (typeof performance !== \"undefined\") {\n // @ts-ignore\n return () => BigInt(Math.floor(performance.now() * 1000)) * BigInt(1000);\n }\n\n return () => BigInt(new Date().getTime()) * BigInt(1000) * BigInt(1000);\n})();\n\nconst nullTimerHandle = {\n clear() {\n // do nothing\n return;\n },\n unref() {\n // do nothing\n return;\n },\n};\n\n/**\n * Group of timers that can be destroyed at once.\n */\nexport interface TimerAPI {\n after(delayMs: number, callback: () => void): TimerHandle;\n every(delayMs: number, callback: () => void): TimerHandle;\n}\n\nexport class SetTimeoutTimerAPI implements TimerAPI {\n /**\n * Call a function every time the delay given in milliseconds passes.\n */\n every(delayMs: number, callback: () => void): TimerHandle {\n return new IntervalHandle(setInterval(callback, delayMs));\n }\n\n /**\n * Call a function after the delay given in milliseconds passes.\n */\n after(delayMs: number, callback: () => void): TimerHandle {\n return new TimeoutHandle(setTimeout(callback, delayMs));\n }\n}\n\nexport const timer = new SetTimeoutTimerAPI();\n\n/**\n * Implementation of [[TimerGroup]] using setTimeout\n */\nexport class TimerGroup {\n private stopped = false;\n\n private readonly timerMap: { [index: number]: TimerHandle } = {};\n\n private idGen = 1;\n\n constructor(public readonly timerApi: TimerAPI) {}\n\n stopCurrentAndFutureTimers(): void {\n this.stopped = true;\n for (const x in this.timerMap) {\n if (!this.timerMap.hasOwnProperty(x)) {\n continue;\n }\n this.timerMap[x].clear();\n delete this.timerMap[x];\n }\n }\n\n resolveAfter(delayMs: Duration): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (delayMs.d_ms !== \"forever\") {\n this.after(delayMs.d_ms, () => {\n resolve();\n });\n }\n });\n }\n\n after(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.after(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\n }\n\n every(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.every(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\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\nimport {\n TransactionType,\n PaymentStatus,\n TransactionMajorState,\n} from \"./transactions-types.js\";\nimport { RefreshReason } from \"./wallet-types.js\";\n\n/**\n * Sample transaction list entries.\n */\nexport const sampleWalletCoreTransactions = [\n {\n type: TransactionType.Payment,\n txState: {\n major: TransactionMajorState.Done,\n },\n amountRaw: \"KUDOS:10\",\n amountEffective: \"KUDOS:10\",\n totalRefundRaw: \"KUDOS:0\",\n totalRefundEffective: \"KUDOS:0\",\n status: PaymentStatus.Paid,\n refundPending: undefined,\n posConfirmation: undefined,\n pending: false,\n refunds: [],\n timestamp: {\n t_s: 1677166045,\n },\n transactionId:\n \"txn:payment:NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n proposalId: \"NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n info: {\n merchant: {\n name: \"woocommerce\",\n website: \"woocommerce.demo.taler.net\",\n email: \"foo@example.com\",\n address: {},\n jurisdiction: {},\n },\n orderId: \"wc_order_KQCRldghIgDRB-100\",\n products: [\n {\n description: \"Using GCC\",\n quantity: 1,\n price: \"KUDOS:10\",\n product_id: \"28\",\n },\n ],\n summary: \"WooTalerShop #100\",\n contractTermsHash:\n \"A02E1M6ARWKBJ87K2TV4S6WQ4X5YH7BRVR6MYCHCTVAED8MBXTFD6PZ5Q50Y7Z5K18PYBTDA14NQ56XPC1VCQW1EVRWTSB7ZYT65B5G\",\n fulfillmentUrl:\n \"https://woocommerce.demo.taler.net/?wc-api=wc_gnutaler_gateway&order_id=wc_order_KQCRldghIgDRB-100\",\n },\n refundQueryActive: false,\n frozen: false,\n },\n {\n type: TransactionType.Refresh,\n txState: {\n major: TransactionMajorState.Pending,\n },\n refreshReason: RefreshReason.PayMerchant,\n amountEffective: \"KUDOS:0\",\n amountRaw: \"KUDOS:0\",\n refreshInputAmount: \"KUDOS:1.5\",\n refreshOutputAmount: \"KUDOS:1.4\",\n originatingTransactionId:\n \"txn:proposal:ZCGBZFE8KZ1CBYYGSC3ZC8E40KVJWV16VYCTHGC8FFSVZ5HD24BG\",\n pending: true,\n timestamp: {\n t_s: 1681376214,\n },\n transactionId:\n \"txn:refresh:QQSWHHXCRQ269G0E3RW14JMC6F7NFDYDW26NSFHRTXSKDS6CMCZ0\",\n frozen: false,\n error: {\n code: 7029,\n when: {\n t_ms: 1681376473665,\n },\n hint: \"Error (WALLET_REFRESH_GROUP_INCOMPLETE)\",\n numErrors: 1,\n errors: [\n {\n code: 7001,\n when: {\n t_ms: 1681376473189,\n },\n hint: \"unexpected exception (message: exchange wire fee signature invalid)\",\n stack:\n \" at validateWireInfo (../taler-wallet-core-qjs.mjs:23166)\\n\",\n },\n ],\n },\n },\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 { AbsoluteTime, Codec, codecForString } from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport {\n ObservableMap,\n browserStorageMap,\n localStorageMap,\n memoryMap,\n} from \"../utils/observable.js\";\n\ndeclare const opaque_StorageKey: unique symbol;\n\nexport type StorageKey<Key> = {\n id: string;\n [opaque_StorageKey]: true;\n codec: Codec<Key>;\n};\n\nexport function buildStorageKey<Key>(\n name: string,\n codec: Codec<Key>,\n): StorageKey<Key>;\nexport function buildStorageKey(name: string): StorageKey<string>;\nexport function buildStorageKey<Key = string>(\n name: string,\n codec?: Codec<Key>,\n): StorageKey<Key> {\n return {\n id: name,\n codec: codec ?? (codecForString() as Codec<Key>),\n } as StorageKey<Key>;\n}\n\nexport interface StorageState<Type = string> {\n value?: Type;\n update: (s: Type) => void;\n reset: () => void;\n}\n\nconst supportLocalStorage = typeof window !== \"undefined\";\nconst supportBrowserStorage =\n typeof chrome !== \"undefined\" && typeof chrome.storage !== \"undefined\";\n\n/**\n * Build setting storage\n */\nconst storage: ObservableMap<string, string> = (function buildStorage() {\n if (supportBrowserStorage) {\n //browser storage is like local storage but\n //with app sync.\n //Works for almost every browser\n if (supportLocalStorage) {\n return browserStorageMap(localStorageMap());\n } else {\n // service worker doesn't have local storage\n return browserStorageMap(memoryMap<string>());\n }\n } else if (supportLocalStorage) {\n // fallback if browser is too old\n return localStorageMap();\n } else {\n // new need to save settings somewhere\n return memoryMap<string>();\n }\n})();\n//with initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//without initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n): StorageState<Type>;\n// impl\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue?: Type,\n): StorageState<Type> {\n const current = convert(storage.get(key.id), key, defaultValue);\n\n const [_, setStoredValue] = useState(AbsoluteTime.now().t_ms);\n\n useEffect(() => {\n return storage.onUpdate(key.id, () => {\n // const newValue = storage.get(key.id);\n setStoredValue(AbsoluteTime.now().t_ms);\n });\n }, [key.id]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key.id);\n } else {\n storage.set(\n key.id,\n key.codec ? JSON.stringify(value) : (value as string),\n );\n }\n };\n\n return {\n value: current,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n\nfunction convert<Type>(updated: string | undefined, key: StorageKey<Type>, defaultValue?: Type): Type | undefined {\n if (updated === undefined) return defaultValue; //optional\n try {\n return key.codec.decode(JSON.parse(updated));\n } catch (e) {\n //decode error\n return defaultValue;\n }\n}\n", "import { isArrayBufferView } from \"util/types\";\n\nexport type ObservableMap<K, V> = Map<K, V> & {\n onAnyUpdate: (callback: () => void) => () => void;\n onUpdate: (key: string, callback: () => void) => () => void;\n};\n\n//FIXME: allow different type for different properties\nexport function memoryMap<T>(\n backend: Map<string, T> = new Map<string, T>(),\n): ObservableMap<string, T> {\n const obs = new EventTarget();\n const theMemoryMap: ObservableMap<string, T> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const result = backend.delete(key);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return result;\n },\n set: (key: string, value: T) => {\n backend.set(key, value);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theMemoryMap;\n },\n clear: () => {\n backend.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: backend.entries.bind(backend),\n forEach: backend.forEach.bind(backend),\n get: backend.get.bind(backend),\n has: backend.has.bind(backend),\n keys: backend.keys.bind(backend),\n size: backend.size,\n values: backend.values.bind(backend),\n [Symbol.iterator]: backend[Symbol.iterator],\n [Symbol.toStringTag]: \"theMemoryMap\",\n };\n return theMemoryMap;\n}\n\n//FIXME: change this implementation to match the\n// browser storage. instead of creating a sync implementation\n// of observable map it should reuse the memoryMap and\n// sync the state with local storage\nexport function localStorageMap(): ObservableMap<string, string> {\n const obs = new EventTarget();\n const theLocalStorageMap: ObservableMap<string, string> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n window.addEventListener(\"storage\", handler);\n return () => {\n window.removeEventListener(\"storage\", handler);\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n function handleStorageEvent(ev: StorageEvent) {\n if (ev.key === null || ev.key === key) {\n handler();\n }\n }\n window.addEventListener(\"storage\", handleStorageEvent);\n return () => {\n window.removeEventListener(\"storage\", handleStorageEvent);\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const exists = localStorage.getItem(key) !== null;\n localStorage.removeItem(key);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return exists;\n },\n set: (key: string, v: string) => {\n localStorage.setItem(key, v);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theLocalStorageMap;\n },\n clear: () => {\n localStorage.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: (): IterableIterator<[string, string]> => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: [key, item] };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n forEach: (cb) => {\n for (let index = 0; index < localStorage.length; index++) {\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n cb(key, item, theLocalStorageMap);\n }\n },\n get: (key: string) => {\n const item = localStorage.getItem(key);\n if (item === null) return undefined;\n return item;\n },\n has: (key: string) => {\n return localStorage.getItem(key) === null;\n },\n keys: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n index = index + 1;\n return { done: false, value: key };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n size: localStorage.length,\n values: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: item };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n [Symbol.iterator]: function (): IterableIterator<[string, string]> {\n return theLocalStorageMap.entries();\n },\n [Symbol.toStringTag]: \"theLocalStorageMap\",\n };\n return theLocalStorageMap;\n}\n\nconst isFirefox =\n typeof (window as any) !== \"undefined\" &&\n typeof (window as any)[\"InstallTrigger\"] !== \"undefined\";\n\nasync function getAllContent() {\n //Firefox and Chrome has different storage api\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.get();\n } else {\n return chrome.storage.local.get();\n }\n}\n\nasync function updateContent(obj: Record<string, any>) {\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.set(obj);\n } else {\n return chrome.storage.local.set(obj);\n }\n}\ntype Changes = { [key: string]: { oldValue?: any; newValue?: any } };\nfunction onBrowserStorageUpdate(cb: (changes: Changes) => void): void {\n if (isFirefox) {\n // @ts-ignore\n browser.storage.local.onChanged.addListener(cb);\n } else {\n chrome.storage.local.onChanged.addListener(cb);\n }\n}\n\nexport function browserStorageMap(\n backend: ObservableMap<string, string>,\n): ObservableMap<string, string> {\n getAllContent().then(content => {\n Object.entries(content ?? {}).forEach(([k, v]) => {\n backend.set(k, v as string);\n });\n })\n\n backend.onAnyUpdate(async () => {\n const result: Record<string, string> = {};\n for (const [key, value] of backend.entries()) {\n result[key] = value;\n }\n await updateContent(result);\n });\n\n onBrowserStorageUpdate((changes) => {\n //another chrome instance made the change\n const changedItems = Object.keys(changes);\n if (changedItems.length === 0) {\n backend.clear();\n } else {\n for (const key of changedItems) {\n if (!changes[key].newValue) {\n backend.delete(key);\n } else {\n if (changes[key].newValue !== changes[key].oldValue) {\n backend.set(key, changes[key].newValue);\n }\n }\n }\n }\n });\n\n return backend;\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 {\n StorageState,\n buildStorageKey,\n useLocalStorage,\n} from \"./useLocalStorage.js\";\n\nconst MIN_LANG_COVERAGE_THRESHOLD = 90;\n/**\n * choose the best from the browser config based on the completeness\n * on the translation\n */\nfunction getBrowserLang(completeness: Record<string, number>): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n\n if (window.navigator.language) {\n if (completeness[window.navigator.language] >= MIN_LANG_COVERAGE_THRESHOLD) {\n return window.navigator.language\n }\n }\n if (window.navigator.languages) {\n const match = Object.entries(completeness).filter(([code, value]) => {\n if (value < MIN_LANG_COVERAGE_THRESHOLD) return false; //do not consider langs below 90%\n return window.navigator.languages.findIndex(l => l.startsWith(code)) !== -1\n }).map(([code, value]) => ({ code, value }))\n\n if (match.length > 0) {\n let max = match[0]\n match.forEach(v => {\n if (v.value > max.value) {\n max = v\n }\n })\n return max.code\n }\n };\n\n return undefined;\n}\n\nconst langPreferenceKey = buildStorageKey(\"lang-preference\");\n\nexport function useLang(initial: string | undefined, completeness: Record<string, number>): Required<StorageState> {\n const defaultValue = (getBrowserLang(completeness) || initial || \"en\").substring(0, 2);\n return useLocalStorage(langPreferenceKey, defaultValue);\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ObservableMap, memoryMap } from \"../utils/observable.js\";\nimport { StorageKey, StorageState } from \"./useLocalStorage.js\";\n\nconst storage: ObservableMap<string, any> = memoryMap<any>();\n\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n): StorageState<Type>;\n// impl\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue?: Type,\n): StorageState<Type> {\n const [storedValue, setStoredValue] = useState<Type | undefined>(\n (): Type | undefined => {\n const prev = storage.get(key);\n return prev === undefined ? defaultValue : prev;\n },\n );\n\n useEffect(() => {\n return storage.onUpdate(key, () => {\n const newValue = storage.get(key);\n setStoredValue(newValue === undefined ? defaultValue : newValue);\n });\n }, [key]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key);\n } else {\n storage.set(key, value);\n }\n };\n\n return {\n value: storedValue,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n", "import {\n AbsoluteTime,\n Duration,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ButtonHandler } from \"../components/Button.js\";\nimport {\n InternationalizationAPI,\n memoryMap,\n useTranslationContext,\n} from \"../index.browser.js\";\n\nexport type NotificationMessage = ErrorNotification | InfoNotification;\n\nexport interface ErrorNotification {\n type: \"error\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n description?: TranslatedString;\n debug?: any;\n when: AbsoluteTime;\n}\nexport interface InfoNotification {\n type: \"info\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n when: AbsoluteTime;\n}\n\nconst storage = memoryMap<Map<string, NotificationMessage>>();\nconst NOTIFICATION_KEY = \"notification\";\n\nexport const GLOBAL_NOTIFICATION_TIMEOUT = Duration.fromSpec({\n seconds: 5,\n});\n\nfunction updateInStorage(n: NotificationMessage) {\n const h = hash(n);\n const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = new Map(mem);\n newState.set(h, n);\n storage.set(NOTIFICATION_KEY, newState);\n}\n\nexport function notify(notif: NotificationMessage): void {\n const currentState: Map<string, NotificationMessage> =\n storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = currentState.set(hash(notif), notif);\n\n if (GLOBAL_NOTIFICATION_TIMEOUT.d_ms !== \"forever\") {\n setTimeout(() => {\n notif.timeout = true;\n updateInStorage(notif);\n }, GLOBAL_NOTIFICATION_TIMEOUT.d_ms);\n }\n\n storage.set(NOTIFICATION_KEY, newState);\n}\nexport function notifyError(\n title: TranslatedString,\n description: TranslatedString | undefined,\n debug?: any,\n) {\n notify({\n type: \"error\" as const,\n title,\n description,\n debug,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyException(title: TranslatedString, ex: Error) {\n notify({\n type: \"error\" as const,\n title,\n description: ex.message as TranslatedString,\n debug: ex.stack,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyInfo(title: TranslatedString) {\n notify({\n type: \"info\" as const,\n title,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type Notification = {\n message: NotificationMessage;\n acknowledge: () => void;\n};\n\nexport function useNotifications(): Notification[] {\n const [, setLastUpdate] = useState<number>();\n const value = storage.get(NOTIFICATION_KEY) ?? new Map();\n\n useEffect(() => {\n return storage.onUpdate(NOTIFICATION_KEY, () => {\n setLastUpdate(Date.now())\n // const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n // setter(structuredClone(mem));\n });\n });\n\n return Array.from(value.values()).map((message, idx) => {\n return {\n message,\n acknowledge: () => {\n message.ack = true;\n updateInStorage(message);\n },\n };\n });\n}\n\nfunction hashCode(str: string): string {\n if (str.length === 0) return \"0\";\n let hash = 0;\n let chr;\n for (let i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash.toString(16);\n}\n\nfunction hash(msg: NotificationMessage): string {\n let str = (msg.type + \":\" + msg.title) as string;\n if (msg.type === \"error\") {\n if (msg.description) {\n str += \":\" + msg.description;\n }\n if (msg.debug) {\n str += \":\" + msg.debug;\n }\n }\n return hashCode(str);\n}\n\nfunction errorMap<T extends OperationFail<unknown>>(\n resp: T,\n map: (d: T[\"case\"]) => TranslatedString,\n): void {\n notify({\n type: \"error\",\n title: map(resp.case),\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type ErrorNotificationHandler = (\n cb: (notify: typeof errorMap) => Promise<void>,\n) => Promise<void>;\n\n/**\n * @deprecated use useLocalNotificationHandler\n *\n * @returns\n */\nexport function useLocalNotification(): [\n Notification | undefined,\n (n: NotificationMessage) => void,\n ErrorNotificationHandler,\n] {\n const { i18n } = useTranslationContext();\n\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n async function errorHandling(cb: (notify: typeof errorMap) => Promise<void>) {\n try {\n return await cb(errorMap);\n } catch (error: unknown) {\n if (error instanceof TalerError) {\n notify(buildUnifiedRequestErrorMessage(i18n, error));\n } else {\n notifyError(\n i18n.str`Operation failed, please report`,\n (error instanceof Error\n ? error.message\n : JSON.stringify(error)) as TranslatedString,\n );\n }\n }\n }\n return [notif, setter, errorHandling];\n}\n\ntype HandlerMaker = <T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:\n | ((result: T extends OperationOk<any> ? T : never) => void)\n | ((\n result: T extends OperationOk<any> ? T : never,\n ) => TranslatedString | undefined),\n onOperationFail: (\n d: T extends OperationFail<any> ? T : never,\n ) => TranslatedString,\n onOperationComplete?: () => void,\n) => ButtonHandler<T, A, B>;\n\nexport function useLocalNotificationHandler(): [\n Notification | undefined,\n HandlerMaker,\n (n: NotificationMessage) => void,\n] {\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n function makeHandler<T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:\n | ((result: T extends OperationOk<any> ? T : never) => void)\n | ((\n result: T extends OperationOk<any> ? T : never,\n ) => TranslatedString | undefined),\n onOperationFail: (\n d: T extends OperationFail<any> ? T : never,\n ) => TranslatedString,\n onOperationComplete?: () => void,\n ): ButtonHandler<T, A, B> {\n return {\n onClick,\n onNotification: setter,\n onOperationFail,\n onOperationSuccess,\n onOperationComplete,\n };\n }\n\n return [notif, makeHandler, setter];\n}\n\nexport function buildUnifiedRequestErrorMessage(\n i18n: InternationalizationAPI,\n cause: TalerError,\n): ErrorNotification {\n let result: ErrorNotification;\n switch (cause.errorDetail.code) {\n case TalerErrorCode.GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Request cancelled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n result = {\n type: \"error\",\n title: i18n.str`Request throttled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n result = {\n type: \"error\",\n title: i18n.str`Malformed response`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Network error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected request error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n default: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n }\n return result;\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport enum ErrorType {\n CLIENT,\n SERVER,\n UNREADABLE,\n TIMEOUT,\n UNEXPECTED,\n}\n\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 * @deprecated do not use it, it will be removed\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 secret-token:${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 || options.contentType === \"json\" ? \"application/json\" : \"text/plain\";\n\n if (options.talerAmlOfficerSignature) {\n requestHeaders[\"Taler-AML-Officer-Signature\"] =\n options.talerAmlOfficerSignature;\n }\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 const requestPreventCache = options.preventCache ?? false;\n const requestPreventCors = options.preventCors ?? false;\n\n const validURL = validateURL(baseUrl, endpoint);\n\n if (!validURL) {\n const error: HttpResponseUnexpectedError = {\n info: {\n url: `${baseUrl}${endpoint}`,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `invalid URL: \"${baseUrl}${endpoint}\"`,\n };\n throw new RequestError(error)\n }\n\n Object.entries(requestParams).forEach(([key, value]) => {\n validURL.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 const error: HttpResponseUnexpectedError = {\n info: {\n url: validURL.href,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `unsupported request body type: \"${typeof requestBody}\"`,\n };\n throw new RequestError(error)\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(validURL.href, {\n headers: requestHeaders,\n method: requestMethod,\n credentials: \"omit\",\n mode: requestPreventCors ? \"no-cors\" : \"cors\",\n cache: requestPreventCache ? \"no-cache\" : \"default\",\n body: payload,\n signal: controller.signal,\n });\n } catch (ex) {\n const info: RequestInfo = {\n payload,\n url: validURL.href,\n hasToken: !!options.token,\n status: 0,\n options,\n };\n\n if (ex instanceof Error) {\n if (ex.message === \"HTTP_REQUEST_TIMEOUT\") {\n const error: HttpRequestTimeoutError = {\n info,\n type: ErrorType.TIMEOUT,\n message: \"request timeout\",\n };\n throw new RequestError(error);\n }\n }\n\n const error: HttpResponseUnexpectedError = {\n info,\n type: ErrorType.UNEXPECTED,\n exception: ex,\n loading: false,\n message: (ex instanceof Error ? ex.message : \"\"),\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 validURL.href,\n payload,\n !!options.token,\n options,\n );\n return result;\n } else {\n const dataTxt = await response.text();\n const error = buildRequestFailed(\n validURL.href,\n dataTxt,\n response.status,\n payload,\n options,\n );\n throw new RequestError(error);\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponse<T, ErrorDetail> =\n | HttpResponseOk<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponsePaginated<T, ErrorDetail> =\n | HttpResponseOkPaginated<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestInfo {\n url: string;\n hasToken: boolean;\n payload: any;\n status: number;\n options: RequestOptions;\n}\n\ninterface HttpResponseLoading<T> {\n ok?: false;\n loading: true;\n clientError?: false;\n serverError?: false;\n\n data?: T;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface WithPagination {\n loadMore: () => void;\n loadMorePrev: () => void;\n isReachingEnd?: boolean;\n isReachingStart?: boolean;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpError<ErrorDetail> =\n | HttpRequestTimeoutError\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface HttpResponseServerError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.SERVER;\n payload: ErrorDetail;\n status: HttpStatusCode;\n message: string;\n info: RequestInfo;\n}\ninterface HttpRequestTimeoutError {\n ok?: false;\n loading?: false;\n type: ErrorType.TIMEOUT;\n\n info: RequestInfo;\n\n message: string;\n}\ninterface HttpResponseClientError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.CLIENT;\n\n info: RequestInfo;\n status: HttpStatusCode;\n payload: ErrorDetail;\n message: string;\n}\n\ninterface HttpResponseUnexpectedError {\n ok?: false;\n loading: false;\n type: ErrorType.UNEXPECTED;\n\n info: RequestInfo;\n status?: HttpStatusCode;\n exception: unknown;\n message: string;\n}\n\ninterface HttpResponseUnreadableError {\n ok?: false;\n loading: false;\n type: ErrorType.UNREADABLE;\n\n info: RequestInfo;\n status: HttpStatusCode;\n exception: unknown;\n body: string;\n message: string;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestOptions {\n method?: Methods;\n token?: string;\n basicAuth?: {\n username: string;\n password: string;\n };\n preventCache?: boolean;\n preventCors?: boolean;\n data?: any;\n params?: unknown;\n timeout?: number;\n contentType?: \"text\" | \"json\";\n talerAmlOfficerSignature?: string;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nasync function buildRequestOk<T>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n options: RequestOptions,\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 options,\n status: response.status,\n },\n };\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport function buildRequestFailed<ErrorDetail>(\n url: string,\n dataTxt: string,\n status: number,\n payload: any,\n maybeOptions?: RequestOptions,\n):\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError {\n const options = maybeOptions ?? {};\n const info: RequestInfo = {\n payload,\n url,\n hasToken: !!options.token,\n options,\n status: status || 0,\n };\n\n // const dataTxt = await response.text();\n try {\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n const errorCode = !data || !data.code ? \"\" : `(code: ${data.code})`;\n const errorHint =\n !data || !data.hint ? \"Not hint.\" : `${data.hint} ${errorCode}`;\n\n if (status && status >= 400 && status < 500) {\n const message =\n data === undefined\n ? `Client error (${status}) without data.`\n : errorHint;\n\n const error: HttpResponseClientError<ErrorDetail> = {\n type: ErrorType.CLIENT,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n if (status && status >= 500 && status < 600) {\n const message =\n data === undefined\n ? `Server error (${status}) without data.`\n : errorHint;\n const error: HttpResponseServerError<ErrorDetail> = {\n type: ErrorType.SERVER,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n return {\n info,\n loading: false,\n type: ErrorType.UNEXPECTED,\n status,\n exception: undefined,\n message: `http status code not handled: ${status}`,\n };\n } catch (ex) {\n const error: HttpResponseUnreadableError = {\n info,\n loading: false,\n status,\n type: ErrorType.UNREADABLE,\n exception: ex,\n body: dataTxt,\n message: \"Could not parse body as json\",\n };\n\n return error;\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nfunction validateURL(baseUrl: string, endpoint: string): URL | undefined {\n try {\n return new URL(`${baseUrl}${endpoint}`)\n } catch (ex) {\n return undefined\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 * Imports.\n */\nimport {\n Logger,\n RequestThrottler,\n TalerErrorCode,\n TalerError,\n Duration,\n} from \"@gnu-taler/taler-util\";\n\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n Headers,\n getDefaultHeaders,\n encodeBody,\n DEFAULT_REQUEST_TIMEOUT_MS,\n HttpLibArgs,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"browserHttpLib\");\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n * \n * @deprecated use BrowserFetchHttpLib\n */\nexport class BrowserHttpLibDepreacted implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n let myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n return new Promise<HttpResponse>((resolve, reject) => {\n const myRequest = new XMLHttpRequest();\n\n myRequest.onerror = (e) => {\n logger.error(\"http request error\");\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"Could not make request\",\n ),\n );\n };\n\n myRequest.open(requestMethod, requestUrl);\n\n let timeoutId: any | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n myRequest.abort();\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `request to ${requestUrl} timed out`,\n ),\n );\n }, requestTimeout.d_ms);\n }\n\n Object.keys(requestHeadersMap).forEach((headerName) => {\n myRequest.setRequestHeader(headerName, requestHeadersMap[headerName]);\n });\n\n myRequest.responseType = \"arraybuffer\";\n myRequest.send(myBody);\n\n myRequest.addEventListener(\"readystatechange\", (e) => {\n if (myRequest.readyState === XMLHttpRequest.DONE) {\n if (myRequest.status === 0) {\n const exc = TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"HTTP request failed (status 0, maybe URI scheme was wrong?)\",\n );\n reject(exc);\n return;\n }\n const makeText = async (): Promise<string> => {\n const td = new TextDecoder();\n return td.decode(myRequest.response);\n };\n let responseJson: unknown = undefined;\n const makeJson = async (): Promise<any> => {\n if (responseJson === undefined) {\n try {\n const td = new TextDecoder();\n const responseString = td.decode(myRequest.response);\n responseJson = JSON.parse(responseString);\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n return responseJson;\n };\n\n const headers = myRequest.getAllResponseHeaders();\n const arr = headers.trim().split(/[\\r\\n]+/);\n\n // Create a map of header names to values\n const headerMap: Headers = new Headers();\n arr.forEach(function (line) {\n const parts = line.split(\": \");\n const headerName = parts.shift();\n if (!headerName) {\n logger.warn(\"skipping invalid header\");\n return;\n }\n const value = parts.join(\": \");\n headerMap.set(headerName, value);\n });\n const resp: HttpResponse = {\n requestUrl: requestUrl,\n status: myRequest.status,\n headers: headerMap,\n requestMethod: requestMethod,\n json: makeJson,\n text: makeText,\n bytes: async () => myRequest.response,\n };\n resolve(resp);\n }\n });\n });\n }\n\n get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"GET\",\n ...opt,\n });\n }\n\n postJson(\n url: string,\n body: any,\n opt?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n ...opt,\n });\n }\n\n stop(): void {\n // Nothing to do\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 * Imports.\n */\nimport {\n Duration,\n RequestThrottler,\n TalerError,\n TalerErrorCode\n} from \"@gnu-taler/taler-util\";\n\nimport {\n DEFAULT_REQUEST_TIMEOUT_MS,\n Headers,\n HttpLibArgs,\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n encodeBody,\n getDefaultHeaders,\n} from \"@gnu-taler/taler-util/http\";\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n */\nexport class BrowserFetchHttpLib implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n public constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n async fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n const requestCancel = options?.cancellationToken;\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n const myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n controller.abort(TalerErrorCode.GENERIC_TIMEOUT);\n }, requestTimeout.d_ms);\n }\n if (requestCancel) {\n requestCancel.onCancelled(() => {\n controller.abort(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)\n });\n }\n\n try {\n const response = await fetch(requestUrl, {\n headers: requestHeadersMap,\n body: myBody,\n method: requestMethod,\n signal: controller.signal,\n });\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n const headerMap = new Headers();\n response.headers.forEach((value, key) => {\n headerMap.set(key, value);\n });\n return {\n headers: headerMap,\n status: response.status,\n requestMethod,\n requestUrl,\n json: makeJsonHandler(response, requestUrl, requestMethod),\n text: makeTextHandler(response, requestUrl, requestMethod),\n bytes: async () => (await response.blob()).arrayBuffer(),\n };\n } catch (e) {\n if (controller.signal) {\n throw TalerError.fromDetail(\n controller.signal.reason,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `HTTP request failed.`,\n );\n }\n throw e;\n }\n }\n\n}\n\nfunction makeTextHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n return async function getTextFromResponse(): Promise<any> {\n let respText;\n try {\n respText = await response.text();\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid text from HTTP response\",\n );\n }\n return respText;\n };\n}\n\nfunction makeJsonHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n let responseJson: unknown = undefined;\n return async function getJsonFromResponse(): Promise<any> {\n if (responseJson === undefined) {\n try {\n responseJson = await response.json();\n } catch (e) {\n const message = e instanceof Error ? `Invalid JSON from HTTP response: ${e.message}` : \"Invalid JSON from HTTP response\"\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n message,\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid JSON from HTTP response: null or not object\",\n );\n }\n return responseJson;\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\ndeclare const __location: unique symbol;\n/**\n * special string that defined a location in the application\n *\n * this help to prevent wrong path\n */\nexport type AppLocation = string & {\n [__location]: true;\n};\n\nexport type EmptyObject = Record<string, never>;\n\nexport function urlPattern<\n T extends Record<string, string | undefined> = EmptyObject,\n>(pattern: RegExp, reverse: (p: T) => string): RouteDefinition<T> {\n const url = reverse as (p: T) => AppLocation;\n return {\n pattern: new RegExp(pattern),\n url,\n };\n}\n\n/**\n * defines a location in the app\n *\n * pattern: how a string will trigger this location\n * url(): how a state serialize to a location\n */\n\nexport type ObjectOf<T> = Record<string, T> | EmptyObject;\n\nexport type RouteDefinition<\n T extends ObjectOf<string | undefined> = EmptyObject,\n> = {\n pattern: RegExp;\n url: (p: T) => AppLocation;\n};\n\nconst nullRountDef = {\n pattern: new RegExp(/.*/),\n url: () => \"\" as AppLocation,\n};\nexport function buildNullRoutDefinition<\n T extends ObjectOf<string>,\n>(): RouteDefinition<T> {\n return nullRountDef;\n}\n\n/**\n * Search path in the pageList\n * get the values from the path found\n * add params from searchParams\n *\n * @param path\n * @param params\n */\nexport function findMatch<T extends ObjectOf<RouteDefinition>>(\n pagesMap: T,\n pageList: Array<keyof T>,\n path: string,\n params: Record<string, string>,\n): Location<T> | undefined {\n for (let idx = 0; idx < pageList.length; idx++) {\n const name = pageList[idx];\n const found = pagesMap[name].pattern.exec(path);\n if (found !== null) {\n const values = {} as Record<string, unknown>;\n\n Object.entries(params).forEach(([key, value]) => {\n values[key] = value;\n });\n\n if (found.groups !== undefined) {\n Object.entries(found.groups).forEach(([key, value]) => {\n values[key] = value;\n });\n }\n\n // @ts-expect-error values is a map string which is equivalent to the RouteParamsType\n return { name, parent: pagesMap, values };\n }\n }\n return undefined;\n}\n\n/**\n * get the type of the params of a location\n *\n */\ntype RouteParamsType<\n RouteType,\n Key extends keyof RouteType,\n> = RouteType[Key] extends RouteDefinition<infer ParamType> ? ParamType : never;\n\n/**\n * Helps to create a map of a type with the key\n */\ntype MapKeyValue<Type> = {\n [Key in keyof Type]: Key extends string\n ? {\n parent: Type;\n name: Key;\n values: RouteParamsType<Type, Key>;\n }\n : never;\n};\n\n/**\n * create a enumeration of value of a mapped type\n */\ntype EnumerationOf<T> = T[keyof T];\n\nexport type Location<T> = EnumerationOf<MapKeyValue<T>>;\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 { TalerBankIntegrationHttpClient, TalerCoreBankHttpClient, TalerRevenueHttpClient, TalerWireGatewayHttpClient } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { defaultRequestHandler } from \"../utils/request.js\";\n\ninterface Type {\n /**\n * @deprecated this show not be used\n */\n request: typeof defaultRequestHandler;\n bankCore: TalerCoreBankHttpClient,\n bankIntegration: TalerBankIntegrationHttpClient,\n bankWire: TalerWireGatewayHttpClient,\n bankRevenue: TalerRevenueHttpClient,\n}\n\nconst Context = createContext<Type>({ request: defaultRequestHandler } as any);\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\";\nimport { Locale } from \"date-fns\";\nimport {\n es as esLocale,\n enGB as enLocale,\n fr as frLocale,\n de as deLocale\n} from \"date-fns/locale\"\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 dateLocale: Locale,\n completeness: { [id in keyof typeof supportedLang]: number }\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};\n\nconst initial: Type = {\n lang: \"en\",\n supportedLang,\n changeLanguage: () => {\n // do not change anything\n },\n i18n,\n dateLocale: enLocale,\n completeness: {\n de: 0,\n en: 0,\n es: 0,\n fr: 0,\n it: 0,\n sv: 0,\n }\n};\nconst Context = createContext<Type>(initial);\n\ninterface Props {\n initial?: string;\n children: ComponentChildren;\n forceLang?: string;\n source: Record<string, any>;\n completeness?: Record<string, number>;\n}\n\n// Outmost UI wrapper.\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\n source,\n completeness: completenessProp\n}: Props): VNode => {\n const completeness = {\n en: 100,\n de: !completenessProp || !completenessProp[\"de\"] ? 0 : completenessProp[\"de\"],\n es: !completenessProp || !completenessProp[\"es\"] ? 0 : completenessProp[\"es\"],\n fr: !completenessProp || !completenessProp[\"fr\"] ? 0 : completenessProp[\"fr\"],\n it: !completenessProp || !completenessProp[\"it\"] ? 0 : completenessProp[\"it\"],\n sv: !completenessProp || !completenessProp[\"sv\"] ? 0 : completenessProp[\"sv\"],\n }\n const { value: lang, update: changeLanguage } = useLang(initial, completeness);\n\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 const dateLocale = lang === \"es\" ? esLocale :\n lang === \"fr\" ? frLocale :\n lang === \"de\" ? deLocale :\n enLocale;\n\n return h(Context.Provider, {\n value: { lang, changeLanguage, supportedLang, i18n, dateLocale, completeness },\n children,\n });\n};\n\nexport const useTranslationContext = (): Type => useContext(Context);\n", "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}", "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}", "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}", "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}", "import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\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}", "/**\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;", "import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\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 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 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 requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n var _options$step;\n\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start 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 start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\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;", "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;", "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;", "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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\n\nexport default function getMinutes(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var minutes = date.getMinutes();\n return minutes;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\n\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\n\nexport default function getSeconds(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var seconds = date.getSeconds();\n return seconds;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\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\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n function Setter() {\n _classCallCheck(this, Setter);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n _createClass(Setter, [{\n key: \"validate\",\n value: function validate(_utcDate, _options) {\n return true;\n }\n }]);\n\n return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n _inherits(ValueSetter, _Setter);\n\n var _super = _createSuper(ValueSetter);\n\n function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n var _this;\n\n _classCallCheck(this, ValueSetter);\n\n _this = _super.call(this);\n _this.value = value;\n _this.validateValue = validateValue;\n _this.setValue = setValue;\n _this.priority = priority;\n\n if (subPriority) {\n _this.subPriority = subPriority;\n }\n\n return _this;\n }\n\n _createClass(ValueSetter, [{\n key: \"validate\",\n value: function validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n }, {\n key: \"set\",\n value: function set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n }]);\n\n return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n _inherits(DateToSystemTimezoneSetter, _Setter2);\n\n var _super2 = _createSuper(DateToSystemTimezoneSetter);\n\n function DateToSystemTimezoneSetter() {\n var _this2;\n\n _classCallCheck(this, DateToSystemTimezoneSetter);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n\n return _this2;\n }\n\n _createClass(DateToSystemTimezoneSetter, [{\n key: \"set\",\n value: function set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n }]);\n\n return DateToSystemTimezoneSetter;\n}(Setter);", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: \"run\",\n value: function run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n }, {\n key: \"validate\",\n value: function validate(_utcDate, _value, _options) {\n return true;\n }\n }]);\n\n return Parser;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n _inherits(EraParser, _Parser);\n\n var _super = _createSuper(EraParser);\n\n function EraParser() {\n var _this;\n\n _classCallCheck(this, EraParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n\n return _this;\n }\n\n _createClass(EraParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return EraParser;\n}(Parser);", "export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};", "import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\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 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n _inherits(YearParser, _Parser);\n\n var _super = _createSuper(YearParser);\n\n function YearParser() {\n var _this;\n\n _classCallCheck(this, YearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(YearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return YearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekYearParser, _Parser);\n\n var _super = _createSuper(LocalWeekYearParser);\n\n function LocalWeekYearParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n }]);\n\n return LocalWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekYearParser, _Parser);\n\n var _super = _createSuper(ISOWeekYearParser);\n\n function ISOWeekYearParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n }]);\n\n return ISOWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ExtendedYearParser, _Parser);\n\n var _super = _createSuper(ExtendedYearParser);\n\n function ExtendedYearParser() {\n var _this;\n\n _classCallCheck(this, ExtendedYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ExtendedYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ExtendedYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(QuarterParser, _Parser);\n\n var _super = _createSuper(QuarterParser);\n\n function QuarterParser() {\n var _this;\n\n _classCallCheck(this, QuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(QuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return QuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneQuarterParser, _Parser);\n\n var _super = _createSuper(StandAloneQuarterParser);\n\n function StandAloneQuarterParser() {\n var _this;\n\n _classCallCheck(this, StandAloneQuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneQuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneQuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(MonthParser, _Parser);\n\n var _super = _createSuper(MonthParser);\n\n function MonthParser() {\n var _this;\n\n _classCallCheck(this, MonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n return _this;\n }\n\n _createClass(MonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return MonthParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneMonthParser, _Parser);\n\n var _super = _createSuper(StandAloneMonthParser);\n\n function StandAloneMonthParser() {\n var _this;\n\n _classCallCheck(this, StandAloneMonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneMonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneMonthParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekParser, _Parser);\n\n var _super = _createSuper(LocalWeekParser);\n\n function LocalWeekParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n }]);\n\n return LocalWeekParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekParser, _Parser);\n\n var _super = _createSuper(ISOWeekParser);\n\n function ISOWeekParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n }]);\n\n return ISOWeekParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n _inherits(DateParser, _Parser);\n\n var _super = _createSuper(DateParser);\n\n function DateParser() {\n var _this;\n\n _classCallCheck(this, DateParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DateParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DateParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayOfYearParser, _Parser);\n\n var _super = _createSuper(DayOfYearParser);\n\n function DayOfYearParser() {\n var _this;\n\n _classCallCheck(this, DayOfYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayOfYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayOfYearParser;\n}(Parser);", "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 setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, 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 = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayParser, _Parser);\n\n var _super = _createSuper(DayParser);\n\n function DayParser() {\n var _this;\n\n _classCallCheck(this, DayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalDayParser, _Parser);\n\n var _super = _createSuper(LocalDayParser);\n\n function LocalDayParser() {\n var _this;\n\n _classCallCheck(this, LocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return LocalDayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneLocalDayParser, _Parser);\n\n var _super = _createSuper(StandAloneLocalDayParser);\n\n function StandAloneLocalDayParser() {\n var _this;\n\n _classCallCheck(this, StandAloneLocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneLocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneLocalDayParser;\n}(Parser);", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISODayParser, _Parser);\n\n var _super = _createSuper(ISODayParser);\n\n function ISODayParser() {\n var _this;\n\n _classCallCheck(this, ISODayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISODayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ISODayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMParser, _Parser);\n\n var _super = _createSuper(AMPMParser);\n\n function AMPMParser() {\n var _this;\n\n _classCallCheck(this, AMPMParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMMidnightParser, _Parser);\n\n var _super = _createSuper(AMPMMidnightParser);\n\n function AMPMMidnightParser() {\n var _this;\n\n _classCallCheck(this, AMPMMidnightParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMMidnightParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMMidnightParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayPeriodParser, _Parser);\n\n var _super = _createSuper(DayPeriodParser);\n\n function DayPeriodParser() {\n var _this;\n\n _classCallCheck(this, DayPeriodParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayPeriodParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return DayPeriodParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1to12Parser, _Parser);\n\n var _super = _createSuper(Hour1to12Parser);\n\n function Hour1to12Parser() {\n var _this;\n\n _classCallCheck(this, Hour1to12Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1to12Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour1to12Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0to23Parser, _Parser);\n\n var _super = _createSuper(Hour0to23Parser);\n\n function Hour0to23Parser() {\n var _this;\n\n _classCallCheck(this, Hour0to23Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0to23Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour0to23Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0To11Parser, _Parser);\n\n var _super = _createSuper(Hour0To11Parser);\n\n function Hour0To11Parser() {\n var _this;\n\n _classCallCheck(this, Hour0To11Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0To11Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour0To11Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1To24Parser, _Parser);\n\n var _super = _createSuper(Hour1To24Parser);\n\n function Hour1To24Parser() {\n var _this;\n\n _classCallCheck(this, Hour1To24Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1To24Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour1To24Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n _inherits(MinuteParser, _Parser);\n\n var _super = _createSuper(MinuteParser);\n\n function MinuteParser() {\n var _this;\n\n _classCallCheck(this, MinuteParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(MinuteParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n }]);\n\n return MinuteParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(SecondParser, _Parser);\n\n var _super = _createSuper(SecondParser);\n\n function SecondParser() {\n var _this;\n\n _classCallCheck(this, SecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(SecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n }]);\n\n return SecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(FractionOfSecondParser, _Parser);\n\n var _super = _createSuper(FractionOfSecondParser);\n\n function FractionOfSecondParser() {\n var _this;\n\n _classCallCheck(this, FractionOfSecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(FractionOfSecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n }]);\n\n return FractionOfSecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneWithZParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneWithZParser);\n\n function ISOTimezoneWithZParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneWithZParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneWithZParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneWithZParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneParser);\n\n function ISOTimezoneParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampSecondsParser, _Parser);\n\n var _super = _createSuper(TimestampSecondsParser);\n\n function TimestampSecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampSecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampSecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampSecondsParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampMillisecondsParser, _Parser);\n\n var _super = _createSuper(TimestampMillisecondsParser);\n\n function TimestampMillisecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampMillisecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampMillisecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampMillisecondsParser;\n}(Parser);", "import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\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 | | P | |\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 `parse` 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 */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\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\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/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 { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/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 notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\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 in the format string 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 *\n * Format of the format 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 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\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) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\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 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\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) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\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 | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | 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) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\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) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\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 | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | 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] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | 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) | 10 | 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 * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\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 * In `format` function, they will produce different result:\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 * `parse` will try to match both formatting and stand-alone units interchangably.\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:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. 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` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\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 [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. 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 * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `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 * 7. `D` and `DD` tokens represent days of the year but they are ofthen 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 * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\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 {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\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 {Date} the parsed date\n * @throws {TypeError} 3 arguments required\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} `options.locale` must contain `match` property\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 * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, 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(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\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\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\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 (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _iterator = _createForOfIteratorHelper(tokens),\n _step;\n\n try {\n var _loop = function _loop() {\n var token = _step.value;\n\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return {\n v: new Date(NaN)\n };\n }\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ret = _loop();\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var setter = _step2.value;\n\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}", "import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days 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 days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months 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 months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\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 subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from 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 subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(date, 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; // Subtract years and months\n\n var dateWithoutMonths = subMonths(date, months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}", "var formatDistanceLocale = {\n lessThanXSeconds: {\n standalone: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n },\n withPreposition: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n }\n },\n xSeconds: {\n standalone: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n },\n withPreposition: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n }\n },\n halfAMinute: {\n standalone: 'halbe Minute',\n withPreposition: 'halben Minute'\n },\n lessThanXMinutes: {\n standalone: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n },\n withPreposition: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n }\n },\n xMinutes: {\n standalone: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n },\n withPreposition: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n }\n },\n aboutXHours: {\n standalone: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n },\n withPreposition: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n }\n },\n xHours: {\n standalone: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n },\n withPreposition: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n }\n },\n xDays: {\n standalone: {\n one: '1 Tag',\n other: '{{count}} Tage'\n },\n withPreposition: {\n one: '1 Tag',\n other: '{{count}} Tagen'\n }\n },\n aboutXWeeks: {\n standalone: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n },\n withPreposition: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n }\n },\n xWeeks: {\n standalone: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n },\n withPreposition: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n }\n },\n aboutXMonths: {\n standalone: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monate'\n },\n withPreposition: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monaten'\n }\n },\n xMonths: {\n standalone: {\n one: '1 Monat',\n other: '{{count}} Monate'\n },\n withPreposition: {\n one: '1 Monat',\n other: '{{count}} Monaten'\n }\n },\n aboutXYears: {\n standalone: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahre'\n },\n withPreposition: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahren'\n }\n },\n xYears: {\n standalone: {\n one: '1 Jahr',\n other: '{{count}} Jahre'\n },\n withPreposition: {\n one: '1 Jahr',\n other: '{{count}} Jahren'\n }\n },\n overXYears: {\n standalone: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahre'\n },\n withPreposition: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahren'\n }\n },\n almostXYears: {\n standalone: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahre'\n },\n withPreposition: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahren'\n }\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\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}}', String(count));\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 'vor ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\n// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n full: 'EEEE, do MMMM y',\n // Montag, 7. Januar 2018\n long: 'do MMMM y',\n // 7. Januar 2018\n medium: 'do MMM y',\n // 7. Jan. 2018\n short: 'dd.MM.y' // 07.01.2018\n\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'um' {{time}}\",\n long: \"{{date}} 'um' {{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: \"'letzten' eeee 'um' p\",\n yesterday: \"'gestern um' p\",\n today: \"'heute um' p\",\n tomorrow: \"'morgen um' p\",\n nextWeek: \"eeee 'um' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['v.Chr.', 'n.Chr.'],\n abbreviated: ['v.Chr.', 'n.Chr.'],\n wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n}; // Note: in German, 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', 'M\u00E4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n wide: ['Januar', 'Februar', 'M\u00E4rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n}; // https://st.unicode.org/cldr-apps/v#/de/Gregorian/\n\nvar formattingMonthValues = {\n narrow: monthValues.narrow,\n abbreviated: ['Jan.', 'Feb.', 'M\u00E4rz', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n wide: monthValues.wide\n};\nvar dayValues = {\n narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n}; // https://www.unicode.org/cldr/charts/32/summary/de.html#1881\n\nvar dayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachm.',\n evening: 'Abend',\n night: 'Nacht'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachm.',\n evening: 'abends',\n night: 'nachts'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n var number = Number(dirtyNumber);\n return number + '.';\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 formattingValues: formattingMonthValues,\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;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i\n};\nvar parseEraPatterns = {\n any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(j[a\u00E4]n|feb|m\u00E4r[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\\.?/i,\n wide: /^(januar|februar|m\u00E4rz|april|mai|juni|juli|august|september|oktober|november|dezember)/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: [/^j[a\u00E4]/i, /^f/i, /^m\u00E4r/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smdmf]/i,\n short: /^(so|mo|di|mi|do|fr|sa)/i,\n abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\\.?/i,\n wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i\n};\nvar parseDayPatterns = {\n any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(vm\\.?|nm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n abbreviated: /^(vorm\\.?|nachm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^v/i,\n pm: /^n/i,\n midnight: /^Mitte/i,\n noon: /^Mitta/i,\n morning: /morgens/i,\n afternoon: /nachmittags/i,\n // will never be matched. Afternoon is matched by `pm`\n evening: /abends/i,\n night: /nachts/i // will never be matched. Night is matched by `pm`\n\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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: 'wide',\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 German locale.\n * @language German\n * @iso-639-2 deu\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Asia [@asia-t]{@link https://github.com/asia-t}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author RomanErnst [@pex]{@link https://github.com/pex}\n * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}\n */\nvar locale = {\n code: 'de',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, d MMMM yyyy',\n long: 'd MMMM yyyy',\n medium: 'd MMM yyyy',\n short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\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;", "import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\n\nvar locale = {\n code: 'en-GB',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'menos de un segundo',\n other: 'menos de {{count}} segundos'\n },\n xSeconds: {\n one: '1 segundo',\n other: '{{count}} segundos'\n },\n halfAMinute: 'medio minuto',\n lessThanXMinutes: {\n one: 'menos de un minuto',\n other: 'menos de {{count}} minutos'\n },\n xMinutes: {\n one: '1 minuto',\n other: '{{count}} minutos'\n },\n aboutXHours: {\n one: 'alrededor de 1 hora',\n other: 'alrededor de {{count}} horas'\n },\n xHours: {\n one: '1 hora',\n other: '{{count}} horas'\n },\n xDays: {\n one: '1 d\u00EDa',\n other: '{{count}} d\u00EDas'\n },\n aboutXWeeks: {\n one: 'alrededor de 1 semana',\n other: 'alrededor de {{count}} semanas'\n },\n xWeeks: {\n one: '1 semana',\n other: '{{count}} semanas'\n },\n aboutXMonths: {\n one: 'alrededor de 1 mes',\n other: 'alrededor de {{count}} meses'\n },\n xMonths: {\n one: '1 mes',\n other: '{{count}} meses'\n },\n aboutXYears: {\n one: 'alrededor de 1 a\u00F1o',\n other: 'alrededor de {{count}} a\u00F1os'\n },\n xYears: {\n one: '1 a\u00F1o',\n other: '{{count}} a\u00F1os'\n },\n overXYears: {\n one: 'm\u00E1s de 1 a\u00F1o',\n other: 'm\u00E1s de {{count}} a\u00F1os'\n },\n almostXYears: {\n one: 'casi 1 a\u00F1o',\n other: 'casi {{count}} a\u00F1os'\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 'en ' + result;\n } else {\n return 'hace ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'a las' {{time}}\",\n long: \"{{date}} 'a las' {{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: \"'el' eeee 'pasado a la' p\",\n yesterday: \"'ayer a la' p\",\n today: \"'hoy a la' p\",\n tomorrow: \"'ma\u00F1ana a la' p\",\n nextWeek: \"eeee 'a la' p\",\n other: 'P'\n};\nvar formatRelativeLocalePlural = {\n lastWeek: \"'el' eeee 'pasado a las' p\",\n yesterday: \"'ayer a las' p\",\n today: \"'hoy a las' p\",\n tomorrow: \"'ma\u00F1ana a las' p\",\n nextWeek: \"eeee 'a las' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n if (date.getUTCHours() !== 1) {\n return formatRelativeLocalePlural[token];\n } else {\n return formatRelativeLocale[token];\n }\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['AC', 'DC'],\n abbreviated: ['AC', 'DC'],\n wide: ['antes de cristo', 'despu\u00E9s de cristo']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['T1', 'T2', 'T3', 'T4'],\n wide: ['1\u00BA trimestre', '2\u00BA trimestre', '3\u00BA trimestre', '4\u00BA trimestre']\n};\nvar monthValues = {\n narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n abbreviated: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']\n};\nvar dayValues = {\n narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 's\u00E1'],\n abbreviated: ['dom', 'lun', 'mar', 'mi\u00E9', 'jue', 'vie', 's\u00E1b'],\n wide: ['domingo', 'lunes', 'martes', 'mi\u00E9rcoles', 'jueves', 'viernes', 's\u00E1bado']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n return number + '\u00BA';\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 Number(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;", "import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\u00BA)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|antes de la era com[u\u00FA]n|despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i\n};\nvar parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [/^(antes de cristo|antes de la era com[u\u00FA]n)/i, /^(despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](\u00BA)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[efmajsond]/i,\n abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^e/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: [/^en/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]\n};\nvar matchDayPatterns = {\n narrow: /^[dlmjvs]/i,\n short: /^(do|lu|ma|mi|ju|vi|s[\u00E1a])/i,\n abbreviated: /^(dom|lun|mar|mi[\u00E9e]|jue|vie|s[\u00E1a]b)/i,\n wide: /^(domingo|lunes|martes|mi[\u00E9e]rcoles|jueves|viernes|s[\u00E1a]bado)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(de la|a las) (ma\u00F1ana|tarde|noche))/i,\n any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (ma\u00F1ana|tarde|noche))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn/i,\n noon: /^md/i,\n morning: /ma\u00F1ana/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noche/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 Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Fernando Ag\u00FCero [@fjaguero]{@link https://github.com/fjaguero}\n * @author Gast\u00F3n Haro [@harogaston]{@link https://github.com/harogaston}\n * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n code: 'es',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'moins d\u2019une seconde',\n other: 'moins de {{count}} secondes'\n },\n xSeconds: {\n one: '1 seconde',\n other: '{{count}} secondes'\n },\n halfAMinute: '30 secondes',\n lessThanXMinutes: {\n one: 'moins d\u2019une minute',\n other: 'moins de {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'environ 1 heure',\n other: 'environ {{count}} heures'\n },\n xHours: {\n one: '1 heure',\n other: '{{count}} heures'\n },\n xDays: {\n one: '1 jour',\n other: '{{count}} jours'\n },\n aboutXWeeks: {\n one: 'environ 1 semaine',\n other: 'environ {{count}} semaines'\n },\n xWeeks: {\n one: '1 semaine',\n other: '{{count}} semaines'\n },\n aboutXMonths: {\n one: 'environ 1 mois',\n other: 'environ {{count}} mois'\n },\n xMonths: {\n one: '1 mois',\n other: '{{count}} mois'\n },\n aboutXYears: {\n one: 'environ 1 an',\n other: 'environ {{count}} ans'\n },\n xYears: {\n one: '1 an',\n other: '{{count}} ans'\n },\n overXYears: {\n one: 'plus d\u2019un an',\n other: 'plus de {{count}} ans'\n },\n almostXYears: {\n one: 'presqu\u2019un an',\n other: 'presque {{count}} ans'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var form = formatDistanceLocale[token];\n\n if (typeof form === 'string') {\n result = form;\n } else if (count === 1) {\n result = form.one;\n } else {\n result = form.other.replace('{{count}}', String(count));\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'dans ' + result;\n } else {\n return 'il y a ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE d MMMM y',\n long: 'd MMMM y',\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} '\u00E0' {{time}}\",\n long: \"{{date}} '\u00E0' {{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: \"eeee 'dernier \u00E0' p\",\n yesterday: \"'hier \u00E0' p\",\n today: \"'aujourd\u2019hui \u00E0' p\",\n tomorrow: \"'demain \u00E0' p'\",\n nextWeek: \"eeee 'prochain \u00E0' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['av. J.-C', 'ap. J.-C'],\n abbreviated: ['av. J.-C', 'ap. J.-C'],\n wide: ['avant J\u00E9sus-Christ', 'apr\u00E8s J\u00E9sus-Christ']\n};\nvar quarterValues = {\n narrow: ['T1', 'T2', 'T3', 'T4'],\n abbreviated: ['1er trim.', '2\u00E8me trim.', '3\u00E8me trim.', '4\u00E8me trim.'],\n wide: ['1er trimestre', '2\u00E8me trimestre', '3\u00E8me trimestre', '4\u00E8me trimestre']\n};\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['janv.', 'f\u00E9vr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'ao\u00FBt', 'sept.', 'oct.', 'nov.', 'd\u00E9c.'],\n wide: ['janvier', 'f\u00E9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\u00FBt', 'septembre', 'octobre', 'novembre', 'd\u00E9cembre']\n};\nvar dayValues = {\n narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\n short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\n abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n wide: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'mat.',\n afternoon: 'ap.m.',\n evening: 'soir',\n night: 'mat.'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'matin',\n afternoon: 'apr\u00E8s-midi',\n evening: 'soir',\n night: 'matin'\n },\n wide: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'du matin',\n afternoon: 'de l\u2019apr\u00E8s-midi',\n evening: 'du soir',\n night: 'du matin'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n var number = Number(dirtyNumber);\n var unit = options === null || options === void 0 ? void 0 : options.unit;\n if (number === 0) return '0';\n var feminineUnits = ['year', 'week', 'hour', 'minute', 'second'];\n var suffix;\n\n if (number === 1) {\n suffix = unit && feminineUnits.includes(unit) ? '\u00E8re' : 'er';\n } else {\n suffix = '\u00E8me';\n }\n\n return number + suffix;\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 })\n};\nexport default localize;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(i\u00E8me|\u00E8re|\u00E8me|er|e)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(av\\.J\\.C|ap\\.J\\.C|ap\\.J\\.-C)/i,\n abbreviated: /^(av\\.J\\.-C|av\\.J-C|apr\\.J\\.-C|apr\\.J-C|ap\\.J-C)/i,\n wide: /^(avant J\u00E9sus-Christ|apr\u00E8s J\u00E9sus-Christ)/i\n};\nvar parseEraPatterns = {\n any: [/^av/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^T?[1234]/i,\n abbreviated: /^[1234](er|\u00E8me|e)? trim\\.?/i,\n wide: /^[1234](er|\u00E8me|e)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(janv|f\u00E9vr|mars|avr|mai|juin|juill|juil|ao\u00FBt|sept|oct|nov|d\u00E9c)\\.?/i,\n wide: /^(janvier|f\u00E9vrier|mars|avril|mai|juin|juillet|ao\u00FBt|septembre|octobre|novembre|d\u00E9cembre)/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, /^av/i, /^ma/i, /^juin/i, /^juil/i, /^ao/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[lmjvsd]/i,\n short: /^(di|lu|ma|me|je|ve|sa)/i,\n abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\\.?/i,\n wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|minuit|midi|mat\\.?|ap\\.?m\\.?|soir|nuit)/i,\n any: /^([ap]\\.?\\s?m\\.?|du matin|de l'apr\u00E8s[-\\s]midi|du soir|de la nuit)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^min/i,\n noon: /^mid/i,\n morning: /mat/i,\n afternoon: /ap/i,\n evening: /soir/i,\n night: /nuit/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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 * @type {Locale}\n * @category Locales\n * @summary French locale.\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author Fran\u00E7ois B [@fbonzon]{@link https://github.com/fbonzon}\n */\n\nvar locale = {\n code: 'fr',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerBankConversionCacheEviction,\n TalerBankConversionHttpClient,\n TalerCoreBankCacheEviction,\n TalerCoreBankHttpClient,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { APIClient, ActiviyTracker, BankLib, Subscriber } from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type BankContextType = {\n url: URL;\n config: TalerCorebankApi.Config;\n lib: BankLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst BankContext = createContext<BankContextType>(undefined);\n\nexport const useBankCoreApiContext = (): BankContextType =>\n useContext(BankContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n conversion?: CacheEvictor<TalerBankConversionCacheEviction>;\n bank?: CacheEvictor<TalerCoreBankCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const BankApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerCorebankApi.Config>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildBankApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: BankContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildBankApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<BankLib, TalerCorebankApi.Config> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const bank = new TalerCoreBankHttpClient(url.href, httpLib, evictors.bank);\n const conversion = new TalerBankConversionHttpClient(\n bank.getConversionInfoAPI().href,\n httpLib,\n evictors.conversion,\n );\n const auth = (user: string) =>\n new TalerAuthenticationHttpClient(\n bank.getAuthenticationAPI(user).href,\n httpLib,\n );\n\n async function getRemoteConfig(): Promise<TalerCorebankApi.Config> {\n const resp = await bank.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: bank.PROTOCOL_VERSION,\n lib: {\n bank,\n conversion,\n auth,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const BankApiProviderTesting = ({\n children,\n value,\n}: {\n value: BankContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { ObservabilityEvent, TalerAuthenticationHttpClient, TalerBankConversionHttpClient, TalerCoreBankHttpClient, TalerMerchantInstanceHttpClient, TalerMerchantManagementHttpClient } from \"@gnu-taler/taler-util\";\n\ntype Listener<Event> = (e: Event) => void;\ntype Unsuscriber = () => void;\nexport type Subscriber<Event> = (fn: Listener<Event>) => Unsuscriber;\n\nexport class ActiviyTracker<Event> {\n private observers = new Array<Listener<Event>>();\n constructor() {\n this.notify = this.notify.bind(this)\n this.subscribe = this.subscribe.bind(this)\n }\n notify(data: Event) {\n this.observers.forEach((observer) => observer(data))\n }\n subscribe(func: Listener<Event>): Unsuscriber {\n this.observers.push(func);\n return () => {\n this.observers.forEach((observer, index) => {\n if (observer === func) {\n this.observers.splice(index, 1);\n }\n });\n };\n }\n}\n\n/**\n * build http client with cache breaker due to SWR\n * @param url\n * @returns\n */\nexport interface APIClient<T, C> {\n getRemoteConfig(): Promise<C>;\n VERSION: string;\n lib: T,\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest(id: string): void;\n}\n\nexport interface MerchantLib {\n instance: TalerMerchantManagementHttpClient;\n authenticate: TalerAuthenticationHttpClient;\n subInstanceApi: (instanceId: string) => MerchantLib;\n}\n\nexport interface BankLib {\n bank: TalerCoreBankHttpClient;\n conversion: TalerBankConversionHttpClient;\n auth: (user: string) => TalerAuthenticationHttpClient;\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerError,\n TalerMerchantApi,\n TalerMerchantInstanceCacheEviction,\n TalerMerchantManagementCacheEviction,\n TalerMerchantManagementHttpClient,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n MerchantLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type MerchantContextType = {\n url: URL;\n config: TalerMerchantApi.VersionResponse;\n lib: MerchantLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n changeBackend: (url: URL) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst MerchantContext = createContext<MerchantContextType>(undefined);\n\nexport const useMerchantApiContext = (): MerchantContextType =>\n useContext(MerchantContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n management?: CacheEvictor<TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\nexport type ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000\n\nexport const MerchantApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{\n state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;\n }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerMerchantApi.VersionResponse>>();\n\n const [merchantEndpoint, changeMerchantEndpoint] = useState(baseUrl);\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildMerchantApiClient(merchantEndpoint, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig(); \n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig()\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n }\n }, []);\n\n if (!checked || checked.type !== \"ok\") {\n return h(frameOnError, { state: checked }, []);\n }\n\n const value: MerchantContextType = {\n url: merchantEndpoint,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n changeBackend: changeMerchantEndpoint,\n hints: checked.hints,\n };\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildMerchantApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<MerchantLib, TalerMerchantApi.VersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const instance = new TalerMerchantManagementHttpClient(\n url.href,\n httpLib,\n evictors.management,\n );\n const authenticate = new TalerAuthenticationHttpClient(\n instance.getAuthenticationAPI().href,\n httpLib,\n );\n\n // const instance = (instanceId: string): TalerMerchantInstanceHttpClient => {\n // return new TalerMerchantInstanceHttpClient(\n // management.getSubInstanceAPI(instanceId).href,\n // httpLib,\n // evictors.instance ? evictors.instance(instanceId) : undefined,\n // );\n // }\n // const impersonate = (instanceId: string): TalerAuthenticationHttpClient => {\n // return new TalerAuthenticationHttpClient(\n // instance(instanceId).getAuthenticationAPI().href,\n // httpLib,\n // );\n // }\n const rootUrl = url;\n function getSubInstanceAPI(instanceId: string): MerchantLib {\n const newURL = new URL(`instance/${instanceId}/`, rootUrl);\n const api = buildMerchantApiClient(newURL, evictors);\n return api.lib;\n }\n\n async function getRemoteConfig(): Promise<TalerMerchantApi.VersionResponse> {\n const resp = await instance.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail)\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: instance.PROTOCOL_VERSION,\n lib: {\n instance,\n authenticate,\n subInstanceApi: getSubInstanceAPI,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const MerchantApiProviderTesting = ({\n children,\n value,\n}: {\n value: MerchantContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { AppLocation, ObjectOf, Location, findMatch, RouteDefinition } from \"../utils/route.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useCurrentLocation<T extends ObjectOf<RouteDefinition<any>>>(\n pagesMap: T,\n): Location<T> | undefined {\n const pageList = Object.keys(pagesMap as object) as Array<keyof T>;\n const { path, params } = useNavigationContext();\n\n return findMatch(pagesMap, pageList, path, params);\n}\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = {\n path: string;\n params: Record<string, string>;\n navigateTo: (path: AppLocation) => void;\n // addNavigationListener: (listener: (path: string, params: Record<string, string>) => void) => (() => void);\n};\n\n// @ts-expect-error should not be used without provider\nconst Context = createContext<Type>(undefined);\n\nexport const useNavigationContext = (): Type => useContext(Context);\n\nfunction getPathAndParamsFromWindow() {\n const path =\n typeof window !== \"undefined\" ? window.location.hash.substring(1) : \"/\";\n const params: Record<string, string> = {};\n if (typeof window !== \"undefined\") {\n for (const [key, value] of new URLSearchParams(window.location.search)) {\n params[key] = value;\n }\n }\n return { path, params };\n}\n\nconst { path: initialPath, params: initialParams } =\n getPathAndParamsFromWindow();\n\n// there is a possibility that if the browser does a redirection\n// (which doesn't go through navigatTo function) and that executed\n// too early (before addEventListener runs) it won't be taking\n// into account\nconst PopStateEventType = \"popstate\";\n\nexport const BrowserHashNavigationProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const [{ path, params }, setState] = useState({\n path: initialPath,\n params: initialParams,\n });\n if (typeof window === \"undefined\") {\n throw Error(\n \"Can't use BrowserHashNavigationProvider if there is no window object\",\n );\n }\n function navigateTo(path: string) {\n const { params } = getPathAndParamsFromWindow();\n setState({ path, params });\n window.location.href = path;\n }\n\n useEffect(() => {\n function eventListener() {\n setState(getPathAndParamsFromWindow());\n }\n window.addEventListener(PopStateEventType, eventListener);\n return () => {\n window.removeEventListener(PopStateEventType, eventListener);\n };\n }, []);\n return h(Context.Provider, {\n value: { path, params, navigateTo },\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { stringifyTalerUri, TalerUri } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\n/**\n * https://docs.taler.net/design-documents/039-taler-browser-integration.html\n *\n * @param uri\n */\nfunction createHeadMetaTag(uri: TalerUri, onNotFound?: () => void) {\n const meta = document.createElement(\"meta\");\n meta.setAttribute(\"name\", \"taler-uri\");\n meta.setAttribute(\"content\", stringifyTalerUri(uri));\n\n document.head.appendChild(meta);\n\n let walletFound = false;\n window.addEventListener(\"beforeunload\", () => {\n walletFound = true;\n });\n setTimeout(() => {\n if (!walletFound && onNotFound) {\n onNotFound();\n }\n }, 10); //very short timeout\n}\ninterface Type {\n /**\n * Tell the active wallet that an action is found\n *\n * @param uri\n * @returns\n */\n publishTalerAction: (uri: TalerUri, onNotFound?: () => void) => void;\n}\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst Context = createContext<Type>(undefined);\n\nexport const useTalerWalletIntegrationAPI = (): Type => useContext(Context);\n\nexport const TalerWalletIntegrationBrowserProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const value: Type = {\n publishTalerAction: createHeadMetaTag,\n };\n return h(Context.Provider, {\n value,\n children,\n });\n};\n\nexport const TalerWalletIntegrationTestingProvider = ({\n children,\n value,\n}: {\n children: ComponentChildren;\n value: Type;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\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\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\nexport function recursive<PType>(\n hook: (p: PType) => RecursiveState<VNode>,\n): (p: PType) => VNode {\n\n function withHook(stateHook: () => RecursiveState<VNode>): () => 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 return 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/**\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", "import { Duration, TranslatedString, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\n\ninterface Props {\n type?: \"info\" | \"success\" | \"warning\" | \"danger\" | \"low\",\n onClose?: () => void,\n title: TranslatedString,\n children?: ComponentChildren,\n timeout?: Duration,\n}\nexport function Attention({ type = \"info\", title, children, onClose, timeout = Duration.getForever() }: Props): VNode {\n\n return <div class={`group attention-${type} mt-2 shadow-lg`}>\n {timeout.d_ms === \"forever\" ? undefined : <style>{`\n .progress {\n animation: notificationTimeoutBar ${Math.round(timeout.d_ms / 1000)}s ease-in-out;\n animation-fill-mode:both; \n }\n\n @keyframes notificationTimeoutBar {\n 0% { width: 0; }\n 100% { width: 100%; }\n }\n `}</style>\n }\n\n <div data-timed={timeout.d_ms !== \"forever\"} class=\"rounded-md data-[timed=true]:rounded-b-none group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 p-4 shadow\">\n <div class=\"flex\">\n <div >\n {type === \"low\" ? undefined :\n <svg xmlns=\"http://www.w3.org/2000/svg\" stroke=\"none\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-8 h-8 group-[.attention-info]:text-blue-400 group-[.attention-warning]:text-yellow-400 group-[.attention-danger]:text-red-400 group-[.attention-success]:text-green-400\">\n {(() => {\n switch (type) {\n case \"info\":\n return <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\" />\n case \"warning\":\n return <path fill-rule=\"evenodd\" d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"danger\":\n return <path fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"success\":\n return <path fill-rule=\"evenodd\" d=\"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z\" />\n default:\n assertUnreachable(type)\n }\n })()}\n </svg>\n }\n </div>\n <div class=\"ml-3 w-full\">\n <h3 class=\"text-sm font-bold group-[.attention-info]:text-blue-800 group-[.attention-success]:text-green-800 group-[.attention-warning]:text-yellow-800 group-[.attention-danger]:text-red-800\">\n {title}\n </h3>\n <div class=\"mt-2 text-sm group-[.attention-info]:text-blue-700 group-[.attention-warning]:text-yellow-700 group-[.attention-danger]:text-red-700 group-[.attention-success]:text-green-700\">\n {children}\n </div>\n </div>\n {onClose &&\n <div>\n <button type=\"button\" class=\"font-semibold items-center rounded bg-transparent px-2 py-1 text-xs text-gray-900 hover:bg-gray-50\"\n onClick={(e) => {\n e.preventDefault();\n onClose();\n }}\n >\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n }\n </div>\n </div>\n {timeout.d_ms === \"forever\" ? undefined :\n <div class=\"meter group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 h-1 relative overflow-hidden -mt-1\">\n <span class=\"w-full h-full block\"><span class=\"h-full block progress group-[.attention-info]:bg-blue-600 group-[.attention-low]:bg-gray-600 group-[.attention-warning]:bg-yellow-600 group-[.attention-danger]:bg-red-600 group-[.attention-success]:bg-green-600\"></span></span>\n </div>\n }\n\n </div>\n}\n", "import { ComponentChildren, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nexport function CopyIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75\" />\n </svg>\n )\n};\n\nexport function CopiedIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n )\n};\n\nexport function CopyButton({ class: clazz, children, getContent }: { children?: ComponentChildren, class: string, getContent: () => string }): VNode {\n const [copied, setCopied] = useState(false);\n function copyText(): void {\n if (!navigator.clipboard && !window.isSecureContext) {\n alert('clipboard is not available on insecure context (http)')\n }\n if (navigator.clipboard) {\n navigator.clipboard.writeText(getContent() || \"\");\n setCopied(true);\n }\n }\n useEffect(() => {\n if (copied) {\n setTimeout(() => {\n setCopied(false);\n }, 1000);\n }\n }, [copied]);\n\n if (!copied) {\n return (\n <button class={clazz} onClick={e => {\n e.preventDefault()\n copyText()\n }} >\n <CopyIcon />\n {children}\n </button>\n );\n }\n return (\n <button class={clazz} disabled>\n <CopiedIcon />\n {children}\n </button>\n );\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\nimport { TalerError, TalerErrorCode, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function ErrorLoading({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {\n const { i18n } = useTranslationContext()\n switch (error.errorDetail.code) {\n //////////////////\n // Every error that can be produce in a Http Request\n //////////////////\n case TalerErrorCode.GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request was cancelled.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {\n const { requestMethod, requestUrl, throttleStats } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`A lot of request were made to the same server and this action was throttled`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {\n const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The response of the request is malformed.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {\n const { requestMethod, requestUrl } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Could not complete the request due to a network problem.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {\n const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Unexpected request error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n //////////////////\n // Every other error \n //////////////////\n // case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n // return <Attention type=\"danger\" title={i18n.str``}>\n // </Attention>\n // }\n //////////////////\n // Default message for unhandled case\n //////////////////\n default: return <Attention type=\"danger\" title={i18n.str`Unexpected error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify(error.errorDetail, undefined, 2)}\n </pre>\n }\n </Attention>\n }\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 */\n\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n// import { strings as messages } from \"../i18n/strings.js\";\nimport langIcon from \"../assets/lang.svg\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\ntype LangsNames = {\n [P: string]: 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): string {\n if (names[s]) return names[s];\n return String(s);\n}\n\nexport function LangSelector({ }: {}): VNode {\n const [updatingLang, setUpdatingLang] = useState(false);\n const { lang, changeLanguage, completeness, supportedLang } = useTranslationContext();\n const [hidden, setHidden] = useState(true);\n\n useEffect(() => {\n function bodyKeyPress(event: KeyboardEvent) {\n if (event.code === \"Escape\") setHidden(true);\n }\n function bodyOnClick(event: Event) {\n setHidden(true);\n }\n document.body.addEventListener(\"click\", bodyOnClick);\n document.body.addEventListener(\"keydown\", bodyKeyPress as any);\n return () => {\n document.body.removeEventListener(\"keydown\", bodyKeyPress as any);\n document.body.removeEventListener(\"click\", bodyOnClick);\n };\n }, []);\n return (\n <div>\n <div class=\"relative mt-2\">\n <button type=\"button\" class=\"relative w-full cursor-default rounded-md bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600 sm:text-sm sm:leading-6\" aria-haspopup=\"listbox\" aria-expanded=\"true\" aria-labelledby=\"listbox-label\"\n onClick={(e) => {\n setHidden(!hidden);\n e.stopPropagation()\n }}>\n <span class=\"flex items-center\">\n <img alt=\"language\" class=\"h-5 w-5 flex-shrink-0 rounded-full\" src={langIcon} />\n <span class=\"ml-3 block truncate\">{getLangName(lang)}</span>\n </span>\n <span class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <svg class=\"h-5 w-5 text-gray-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </button>\n\n {!hidden &&\n <ul class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\" tabIndex={-1} role=\"listbox\" aria-labelledby=\"listbox-label\" aria-activedescendant=\"listbox-option-3\">\n {Object.keys(supportedLang)\n .filter((l) => l !== lang)\n .map((lang) => (\n <li class=\"text-gray-900 hover:bg-indigo-600 hover:text-white cursor-pointer relative select-none py-2 pl-3 pr-9\" role=\"option\"\n onClick={() => {\n changeLanguage(lang);\n setUpdatingLang(false);\n setHidden(true)\n }}\n >\n <span class=\"font-normal truncate flex justify-between \">\n <span>{getLangName(lang)}</span>\n <span>{(completeness as any)[lang]}%</span>\n </span>\n\n <span class=\"text-indigo-600 absolute inset-y-0 right-0 flex items-center pr-4\">\n {/* <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clip-rule=\"evenodd\" />\n </svg> */}\n </span>\n </li>\n ))}\n\n </ul>\n }\n\n </div>\n </div>\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\nimport { h, VNode } from \"preact\";\n\nexport function Loading(): VNode {\n return (\n <div\n class=\"columns is-centered is-vcentered\"\n style={{\n width: \"100%\",\n height: \"200px\",\n display: \"flex\",\n margin: \"auto\",\n justifyContent: \"center\",\n }}\n >\n <Spinner />\n </div>\n );\n}\n\nfunction Spinner(): VNode {\n return (\n <div class=\"lds-ring\" style={{ margin: \"auto\" }}>\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n}\n", "import { useState } from \"preact/hooks\";\nimport { LangSelector, useNotifications, useTranslationContext } from \"../index.browser.js\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport logo from \"../assets/logo-2021.svg\";\n\ninterface Props {\n title: string;\n iconLinkURL: string;\n profileURL?: string;\n notificationURL?: string;\n children?: ComponentChildren;\n onLogout: (() => void) | undefined;\n sites: Array<Array<string>>;\n supportedLangs: string[]\n}\n\nexport function Header({ title, profileURL, notificationURL, iconLinkURL, sites, onLogout, children }: Props): VNode {\n const { i18n } = useTranslationContext();\n const [open, setOpen] = useState(false)\n const ns = useNotifications();\n\n return <Fragment>\n <header class=\"bg-indigo-600 w-full mx-auto px-2 border-b border-opacity-25 border-indigo-400\">\n <div class=\"flex flex-row h-16 items-center \">\n <div class=\"flex px-2 justify-start\">\n <div class=\"flex-shrink-0 bg-white rounded-lg\">\n <a href={iconLinkURL ?? \"#\"} name=\"logo\">\n <img\n class=\"h-8 w-auto\"\n src={logo}\n alt=\"GNU Taler\"\n style={{ height: \"1.5rem\", margin: \".5rem\" }}\n />\n </a>\n </div>\n <span class=\"flex items-center text-white text-lg font-bold ml-4\">\n {title}\n </span>\n </div>\n <div class=\"flex-1 ml-6 \">\n <div class=\"flex flex-1 space-x-4\">\n {sites.map((site) => {\n if (site.length !== 2) return;\n const [name, url] = site\n return <a href={url} name={`site header ${name}`} class=\"hidden sm:block text-white hover:bg-indigo-500 hover:bg-opacity-75 rounded-md py-2 px-3 text-sm font-medium\">{name}</a>\n })}\n </div>\n </div>\n <div class=\"flex justify-end\">\n {!notificationURL ? undefined :\n <a href={notificationURL} name=\"notifications\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Show notifications</i18n.Translate></span>\n {ns.length > 0 ?\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-10 h-10\">\n <path d=\"M5.85 3.5a.75.75 0 0 0-1.117-1 9.719 9.719 0 0 0-2.348 4.876.75.75 0 0 0 1.479.248A8.219 8.219 0 0 1 5.85 3.5ZM19.267 2.5a.75.75 0 1 0-1.118 1 8.22 8.22 0 0 1 1.987 4.124.75.75 0 0 0 1.48-.248A9.72 9.72 0 0 0 19.266 2.5Z\" />\n <path fill-rule=\"evenodd\" d=\"M12 2.25A6.75 6.75 0 0 0 5.25 9v.75a8.217 8.217 0 0 1-2.119 5.52.75.75 0 0 0 .298 1.206c1.544.57 3.16.99 4.831 1.243a3.75 3.75 0 1 0 7.48 0 24.583 24.583 0 0 0 4.83-1.244.75.75 0 0 0 .298-1.205 8.217 8.217 0 0 1-2.118-5.52V9A6.75 6.75 0 0 0 12 2.25ZM9.75 18c0-.034 0-.067.002-.1a25.05 25.05 0 0 0 4.496 0l.002.1a2.25 2.25 0 1 1-4.5 0Z\" clip-rule=\"evenodd\" />\n </svg>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\" />\n </svg>\n }\n </a>\n }\n {!profileURL ? undefined :\n <a href={profileURL} name=\"profile\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open profile</i18n.Translate></span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </svg>\n </a>\n }\n <button type=\"button\" name=\"toggle sidebar\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\"\n onClick={(e) => {\n setOpen(!open)\n }}>\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open settings</i18n.Translate></span>\n <svg class=\"block h-10 w-10\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n </svg>\n </button>\n </div>\n </div>\n </header>\n\n {\n open &&\n <div class=\"relative z-10\" name=\"sidebar overlay\" aria-labelledby=\"slide-over-title\" role=\"dialog\" aria-modal=\"true\"\n onClick={() => {\n setOpen(false)\n }}>\n <div class=\"fixed inset-0\"></div>\n\n <div class=\"fixed inset-0 overflow-hidden\">\n <div class=\"absolute inset-0 overflow-hidden\">\n <div class=\"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10\">\n <div class=\"pointer-events-auto w-screen max-w-md\" >\n <div class=\"flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl\" onClick={(e) => {\n //do not trigger close if clicking inside the sidebar\n e.stopPropagation();\n }}>\n <div class=\"px-4 sm:px-6\" >\n <div class=\"flex items-start justify-between\" >\n <h2 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"slide-over-title\">\n <i18n.Translate>Menu</i18n.Translate>\n </h2>\n <div class=\"ml-3 flex h-7 items-center\">\n <button type=\"button\" name=\"close sidebar\" class=\"relative rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2\"\n onClick={(e) => {\n setOpen(false)\n }}\n\n >\n <span class=\"absolute -inset-2.5\"></span>\n <span class=\"sr-only\">\n <i18n.Translate>Close panel</i18n.Translate>\n </span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"relative mt-6 flex-1 px-4 sm:px-6\">\n <nav class=\"flex flex-1 flex-col\" aria-label=\"Sidebar\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n {onLogout ?\n <li>\n <a href=\"#\"\n name=\"logout\"\n class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\"\n onClick={() => {\n onLogout();\n setOpen(false)\n }}\n >\n <svg class=\"h-6 w-6 shrink-0 text-indigo-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\" />\n </svg>\n <i18n.Translate>Log out</i18n.Translate>\n </a>\n </li>\n : undefined}\n <li>\n <LangSelector />\n </li>\n {/* CHILDREN */}\n {children}\n {/* /CHILDREN */}\n {sites.length > 0 ?\n <li class=\"block sm:hidden\">\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Sites</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-1\">\n {sites.map(([name, url]) => {\n return <li>\n <a href={url} name={`site ${name}`} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n <span class=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-lg border text-[0.625rem] font-medium bg-white text-gray-400 border-gray-200 group-hover:border-indigo-600 group-hover:text-indigo-600\">&gt;</span>\n <span class=\"truncate\">{name}</span>\n </a>\n </li>\n })}\n </ul>\n </li>\n : undefined\n }\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </Fragment >\n}\n", "import { useTranslationContext } from \"../index.browser.js\";\nimport { h } from \"preact\";\n\nexport function Footer({ testingUrlKey, VERSION, GIT_HASH }: { VERSION?: string, GIT_HASH?: string, testingUrlKey?: string }) {\n const { i18n } = useTranslationContext()\n\n const testingUrl = (testingUrlKey && typeof localStorage !== \"undefined\") && localStorage.getItem(testingUrlKey) ?\n localStorage.getItem(testingUrlKey) ?? undefined :\n undefined\n const versionText = VERSION\n ? GIT_HASH\n ? <a href={`https://git.taler.net/wallet-core.git/tree/?id=${GIT_HASH}`} target=\"_blank\" rel=\"noreferrer noopener\">\n Version {VERSION} ({GIT_HASH.substring(0, 8)})\n </a>\n : VERSION\n : \"\";\n return (\n <footer class=\"bottom-4 my-4 mx-8 bg-slate-200\">\n <div>\n <p class=\"text-xs leading-5 text-gray-400\">\n <i18n.Translate>\n Learn more about <a target=\"_blank\" rel=\"noreferrer noopener\" class=\"font-semibold text-gray-500 hover:text-gray-400\" href=\"https://taler.net\">GNU Taler</a>\n </i18n.Translate>\n </p>\n </div>\n <div style=\"flex-grow:1\" />\n <p class=\"text-xs leading-5 text-gray-400\">\n Copyright &copy; 2014&mdash;2023 Taler Systems SA. {versionText}{\" \"}\n </p>\n {testingUrlKey && testingUrl &&\n\n <p class=\"text-xs leading-5 text-gray-300\">\n Testing with {testingUrl}{\" \"}\n <a\n href=\"\"\n onClick={(e) => {\n e.preventDefault();\n localStorage.removeItem(testingUrlKey);\n window.location.reload();\n }}\n >\n stop testing\n </a>\n </p>\n }\n </footer>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, OperationFail, OperationOk, OperationResult, TalerError, TranslatedString } from \"@gnu-taler/taler-util\";\n// import { NotificationMessage, notifyInfo } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { HTMLAttributes, useEffect, useState, useTransition } from \"preact/compat\";\nimport { NotificationMessage, buildUnifiedRequestErrorMessage, notifyInfo, useTranslationContext } from \"../index.browser.js\";\n// import { useBankCoreApiContext } from \"../context/config.js\";\n\n// function errorMap<T extends OperationFail<unknown>>(resp: T, map: (d: T[\"case\"]) => TranslatedString): void {\n\nexport interface ButtonHandler<T extends OperationResult<A, B>, A, B> {\n onClick: () => Promise<T | undefined>,\n onNotification: (n: NotificationMessage) => void;\n onOperationSuccess: ((result: T extends OperationOk<any> ? T : never) => void) | ((result: T extends OperationOk<any> ? T : never) => TranslatedString | undefined),\n onOperationFail: (d: T extends OperationFail<any> ? T : never) => TranslatedString;\n onOperationComplete?: () => void;\n}\n\ninterface Props<T extends OperationResult<A, B>, A, B> extends HTMLAttributes<HTMLButtonElement> {\n handler: ButtonHandler<T, A, B> | undefined,\n}\n\n/**\n * This button accept an async function and report a notification\n * on error or success.\n * \n * When the async function is running the inner text will change into\n * a \"loading\" animation.\n * \n * @param param0 \n * @returns \n */\nexport function Button<T extends OperationResult<A, B>, A, B>({\n handler,\n children,\n disabled,\n onClick: clickEvent,\n ...rest\n}: Props<T, A, B>): VNode {\n const { i18n } = useTranslationContext();\n const [running, setRunning] = useState(false)\n return <button {...rest} disabled={disabled || running} onClick={(e) => {\n e.preventDefault();\n if (!handler) { return; }\n setRunning(true)\n handler.onClick().then((resp) => {\n if (resp) {\n if (resp.type === \"ok\") {\n const result: OperationOk<any> = resp\n // @ts-expect-error this is an operationOk\n const msg = handler.onOperationSuccess(result)\n if (msg) {\n notifyInfo(msg)\n }\n }\n if (resp.type === \"fail\") {\n // @ts-expect-error this is an operationFail\n const error: OperationFail<any> = resp;\n // @ts-expect-error this is an operationFail\n const title = handler.onOperationFail(error)\n handler.onNotification({\n title,\n type: \"error\",\n description: error.detail.hint as TranslatedString,\n debug: error.detail,\n when: AbsoluteTime.now(),\n })\n }\n }\n if (handler.onOperationComplete) {\n handler.onOperationComplete()\n }\n setRunning(false)\n }).catch(error => {\n console.error(error)\n\n if (error instanceof TalerError) {\n handler.onNotification(buildUnifiedRequestErrorMessage(i18n, error))\n } else {\n const description = (error instanceof Error ?\n error.message : String(error)) as TranslatedString\n\n handler.onNotification({\n title: i18n.str`Operation failed`,\n type: \"error\",\n description,\n when: AbsoluteTime.now(),\n })\n }\n\n if (handler.onOperationComplete) {\n handler.onOperationComplete()\n }\n setRunning(false)\n })\n }} >\n {running ? <Wait /> : children}\n </button>\n}\n\nfunction Wait(): VNode {\n return <Fragment>\n <style>{`\n #l1 { width: 120px;\n height: 20px;\n -webkit-mask: radial-gradient(circle closest-side, currentColor 90%, #0000) left/20% 100%;\n background: linear-gradient(currentColor 0 0) left/0% 100% no-repeat #ddd;\n animation: l17 2s infinite steps(6);\n }\n @keyframes l17 {\n 100% {background-size:120% 100%}\n`}\n </style>\n <div id=\"l1\" />\n </Fragment>\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 { Fragment, h, VNode } from \"preact\";\n\nexport function ShowInputErrorLabel({\n isDirty,\n message,\n}: {\n message: string | undefined;\n isDirty: boolean;\n}): VNode {\n if (message && isDirty)\n return <div class=\"text-base\" style={{ color: \"red\" }}>{message}</div>;\n return <div class=\"text-base\" style={{ }}> </div>;\n}\n", "import { h, Fragment, VNode } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { Notification } from \"../index.browser.js\";\n\nexport function LocalNotificationBanner({ notification, showDebug }: { notification?: Notification, showDebug?: boolean }): VNode {\n if (!notification) return <Fragment />\n switch (notification.message.type) {\n case \"error\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"danger\" title={notification.message.title} onClose={() => {\n notification.acknowledge()\n }}>\n {notification.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {notification.message.description}\n </div>\n }\n {showDebug && <pre class=\"whitespace-break-spaces \">\n {notification.message.debug}\n </pre>}\n </Attention>\n </div>\n </div>\n case \"info\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"success\" title={notification.message.title} onClose={() => {\n notification.acknowledge();\n }} /></div></div>\n }\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Fragment, VNode, h } from \"preact\"\nimport { Attention, GLOBAL_NOTIFICATION_TIMEOUT as GLOBAL_TOAST_TIMEOUT, Notification, useNotifications } from \"../index.browser.js\"\n\n/**\n * Toasts should be considered when displaying these types of information to the user:\n * \n * Low attention messages that do not require user action\n * Singular status updates\n * Confirmations\n * Information that does not need to be followed up\n * \n * Do not use toasts if the information contains the following:\n * \n * High attention and crtitical information\n * Time-sensitive information\n * Requires user action or input\n * Batch updates\n * \n * @returns \n */\nexport function ToastBanner(): VNode {\n const notifs = useNotifications()\n if (notifs.length === 0) return <Fragment />\n const show = notifs.filter(e => !e.message.ack && !e.message.timeout)\n if (show.length === 0) return <Fragment />\n return <AttentionByType msg={show[0]} />\n}\n\nfunction AttentionByType({ msg }: { msg: Notification }) {\n switch (msg.message.type) {\n case \"error\":\n return <Attention type=\"danger\" title={msg.message.title} onClose={() => {\n msg.acknowledge()\n }} timeout={GLOBAL_TOAST_TIMEOUT}>\n {msg.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {msg.message.description}\n </div>\n }\n </Attention>\n case \"info\":\n return <Attention type=\"success\" title={msg.message.title} onClose={() => {\n msg.acknowledge();\n }} timeout={GLOBAL_TOAST_TIMEOUT} />\n }\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { add as dateAdd, sub as dateSub, eachDayOfInterval, endOfMonth, endOfWeek, format, getMonth, getYear, isSameDay, isSameMonth, startOfDay, startOfMonth, startOfWeek } from \"date-fns\"\nimport { VNode, h } from \"preact\"\nimport { useState } from \"preact/hooks\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function Calendar({ value, onChange }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void }): VNode {\n const today = startOfDay(new Date())\n const selected = !value ? today : new Date(AbsoluteTime.toStampMs(value))\n const [showingDate, setShowingDate] = useState(selected)\n const month = getMonth(showingDate)\n const year = getYear(showingDate)\n\n const start = startOfWeek(startOfMonth(showingDate));\n const end = endOfWeek(endOfMonth(showingDate));\n const daysInMonth = eachDayOfInterval({ start, end });\n const { i18n } = useTranslationContext()\n const monthNames = [\n i18n.str`January`,\n i18n.str`February`,\n i18n.str`March`,\n i18n.str`April`,\n i18n.str`May`,\n i18n.str`June`,\n i18n.str`July`,\n i18n.str`August`,\n i18n.str`September`,\n i18n.str`October`,\n i18n.str`November`,\n i18n.str`December`,\n ]\n return <div class=\"text-center p-2\">\n <div class=\"flex items-center text-gray-900\">\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { years: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Previous year`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{year}</div>\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { years: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Next year`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <div class=\"mt-4 flex items-center text-gray-900\">\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { months: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Previous month`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{monthNames[month]}</div>\n <button type=\"button\" class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 rounded-sm \"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { months: 1 }))\n }}>\n <span class=\"sr-only\">\n {i18n.str`Next month`}\n </span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <div class=\"mt-6 grid grid-cols-7 text-xs leading-6 text-gray-500\">\n <div>M</div>\n <div>T</div>\n <div>W</div>\n <div>T</div>\n <div>F</div>\n <div>S</div>\n <div>S</div>\n </div>\n <div class=\"isolate mt-2\">\n <div class=\"grid grid-cols-7 gap-px rounded-lg bg-gray-200 text-sm shadow ring-1 ring-gray-200\">\n {daysInMonth.map(current => (\n <button type=\"button\"\n data-month={isSameMonth(current, showingDate)}\n data-today={isSameDay(current, today)}\n data-selected={isSameDay(current, selected)}\n onClick={() => {\n onChange(AbsoluteTime.fromStampMs(current.getTime()))\n }}\n class=\"text-gray-400 hover:bg-gray-700 focus:z-10 py-1.5 \n data-[month=false]:bg-gray-100 data-[month=true]:bg-white \n data-[today=true]:font-semibold \n data-[month=true]:text-gray-900\n data-[today=true]:bg-red-300 data-[today=true]:hover:bg-red-200\n data-[month=true]:hover:bg-gray-200\n data-[selected=true]:!bg-blue-400 data-[selected=true]:hover:!bg-blue-300 \">\n <time dateTime={format(current, \"yyyy-MM-dd\")}\n class=\"mx-auto flex h-7 w-7 py-4 px-5 sm:px-8 items-center justify-center rounded-full\">\n {format(current, \"dd\")}\n </time>\n </button>\n ))}\n </div>\n {daysInMonth.length < 40 ? <div class=\"w-7 h-7 m-1.5\" /> : undefined}\n </div>\n </div>\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport {\n LabelWithTooltipMaybeRequired\n} from \"./InputLine.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: VNode;\n after?: VNode;\n}\n\nexport function Caption({ before, after, label, tooltip, help }: Props): VNode {\n return (\n <div class=\"sm:col-span-6 flex\">\n {before !== undefined && (\n <span class=\"pointer-events-none flex items-center pr-2\">{before}</span>\n )}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && (\n <span class=\"pointer-events-none flex items-center pl-2\">{after}</span>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { useField } from \"./useField.js\";\n\n//@ts-ignore\nconst TooltipIcon = (\n <svg\n class=\"w-5 h-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n);\n\nexport function LabelWithTooltipMaybeRequired({\n label,\n required,\n tooltip,\n}: {\n label: TranslatedString;\n required?: boolean;\n tooltip?: TranslatedString;\n}): VNode {\n const Label = (\n <Fragment>\n <div class=\"flex justify-between\">\n <label\n htmlFor=\"email\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {label}\n </label>\n </div>\n </Fragment>\n );\n const WithTooltip = tooltip ? (\n <div class=\"relative flex flex-grow items-stretch focus-within:z-10\">\n {Label}\n <span class=\"relative flex items-center group pl-2\">\n {TooltipIcon}\n <div class=\"absolute bottom-0 -ml-10 hidden flex-col items-center mb-6 group-hover:flex w-28\">\n <div class=\"relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-black shadow-lg\">\n {tooltip}\n </div>\n <div class=\"w-3 h-3 -mt-2 rotate-45 bg-black\"></div>\n </div>\n </span>\n </div>\n ) : (\n Label\n );\n if (required) {\n return (\n <div class=\"flex justify-between\">\n {WithTooltip}\n <span class=\"text-sm leading-6 text-red-600\">*</span>\n </div>\n );\n }\n return WithTooltip;\n}\n\nfunction InputWrapper<T extends object, K extends keyof T>({\n children,\n label,\n tooltip,\n before,\n after,\n help,\n error,\n disabled,\n required,\n}: { error?: string; disabled: boolean, children: ComponentChildren } & UIFormProps<T, K>): VNode {\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <div class=\"relative mt-2 flex rounded-md shadow-sm\">\n {before &&\n (before.type === \"text\" ? (\n <span class=\"inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {before.text}\n </span>\n ) : before.type === \"icon\" ? (\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n {before.icon}\n </div>\n ) : before.type === \"button\" ? (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={before.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-l-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {before.children}\n </button>\n ) : undefined)}\n\n {children}\n\n {after &&\n (after.type === \"text\" ? (\n <span class=\"inline-flex items-center rounded-r-md border border-l-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {after.text}\n </span>\n ) : after.type === \"icon\" ? (\n <div class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n {after.icon}\n </div>\n ) : after.type === \"button\" ? (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={after.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-r-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {after.children}\n </button>\n ) : undefined)}\n </div>\n {error && (\n <p class=\"mt-2 text-sm text-red-600\" id=\"email-error\">\n {error}\n </p>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n\nfunction defaultToString(v: unknown) {\n return v === undefined ? \"\" : typeof v !== \"object\" ? String(v) : \"\";\n}\nfunction defaultFromString(v: string) {\n return v;\n}\n\ntype InputType = \"text\" | \"text-area\" | \"password\" | \"email\" | \"number\";\n\nexport function InputLine<T extends object, K extends keyof T>(\n props: { type: InputType } & UIFormProps<T, K>,\n): VNode {\n const { name, placeholder, before, after, converter, type } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n\n const [text, setText] = useState(\"\")\n const fromString: (s: string) => any =\n converter?.fromStringUI ?? defaultFromString;\n const toString: (s: any) => string = converter?.toStringUI ?? defaultToString;\n\n useEffect(() => {\n const newValue = toString(value)\n if (newValue) {\n setText(newValue)\n }\n }, [value])\n\n if (state.hidden) return <div />;\n\n let clazz =\n \"block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200\";\n if (before) {\n switch (before.type) {\n case \"icon\": {\n clazz += \" pl-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-r-md \";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-r-md rounded-none \";\n break;\n }\n }\n }\n if (after) {\n switch (after.type) {\n case \"icon\": {\n clazz += \" pr-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-l-md\";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-l-md rounded-none \";\n break;\n }\n }\n }\n const showError = isDirty && state.error;\n if (showError) {\n clazz +=\n \" text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500\";\n } else {\n clazz +=\n \" text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-indigo-600\";\n }\n\n if (type === \"text-area\") {\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? state.error : undefined}\n >\n <textarea\n rows={4}\n name={String(name)}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n }\n\n return (\n <InputWrapper<T, K> {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false} error={showError ? state.error : undefined}\n >\n <input\n name={String(name)}\n type={type}\n onChange={(e) => {\n setText(e.currentTarget.value)\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={text}\n onBlur={() => {\n onChange(fromString(text));\n }}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n}\n", "import { useContext, useState } from \"preact/compat\";\nimport { FieldUIOptions, FormContext } from \"./FormProvider.js\";\n\nexport interface InputFieldHandler<Type> {\n value: Type;\n onChange: (s: Type) => void;\n state: FieldUIOptions;\n isDirty: boolean;\n}\n\nexport function useField<T extends object, K extends keyof T>(\n name: K,\n): InputFieldHandler<T[K]> {\n const {\n value: formValue,\n computeFormState,\n onUpdate: notifyUpdate,\n readOnly: readOnlyForm,\n } = useContext(FormContext);\n\n type P = typeof name;\n type V = T[P];\n const formState = computeFormState ? computeFormState(formValue.current) : {};\n\n const fieldValue = readField(formValue.current, String(name)) as V;\n // console.log(\"USE FIELD\", String(name), formValue.current, fieldValue);\n const [currentValue, setCurrentValue] = useState<any | undefined>(fieldValue);\n const fieldState =\n readField<Partial<FieldUIOptions>>(formState, String(name)) ?? {};\n\n //compute default state\n const state = {\n disabled: readOnlyForm ? true : (fieldState.disabled ?? false),\n hidden: fieldState.hidden ?? false,\n error: fieldState.error,\n help: fieldState.help,\n elements: \"elements\" in fieldState ? fieldState.elements ?? [] : [],\n };\n\n function onChange(value: V): void {\n setCurrentValue(value);\n formValue.current = setValueDeeper(\n formValue.current,\n String(name).split(\".\"),\n value,\n );\n if (notifyUpdate) {\n notifyUpdate(formValue.current);\n }\n }\n\n return {\n value: fieldValue,\n onChange,\n isDirty: currentValue !== undefined,\n state,\n };\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 */\nfunction readField<T>(\n object: any,\n name: string,\n debug?: boolean,\n): T | undefined {\n return name.split(\".\").reduce((prev, current) => {\n if (debug) {\n console.log(\n \"READ\",\n name,\n prev,\n current,\n prev ? prev[current] : undefined,\n );\n }\n return prev ? prev[current] : undefined;\n }, object);\n}\n\nfunction setValueDeeper(object: any, names: string[], value: any): any {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n if (object === undefined) {\n return { [head]: setValueDeeper({}, rest, value) };\n }\n return { ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) };\n}\n", "import {\n AbsoluteTime,\n AmountJson,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, VNode, createContext, h } from \"preact\";\nimport {\n MutableRef,\n useState\n} from \"preact/hooks\";\n\nexport interface FormType<T extends object> {\n value: MutableRef<Partial<T>>;\n initial?: Partial<T>;\n readOnly?: boolean;\n onUpdate?: (v: Partial<T>) => void;\n computeFormState?: (v: Partial<T>) => FormState<T>;\n}\n\n//@ts-ignore\nexport const FormContext = createContext<FormType<any>>({});\n\n/**\n * Map of {[field]:FieldUIOptions}\n * for every field of type\n * - any native (string, number, etc...)\n * - absoluteTime\n * - amountJson\n * \n * except for: \n * - object => recurse into\n * - array => behavior result and element field\n */\nexport type FormState<T extends object | undefined> = {\n [field in keyof T]?: T[field] extends AbsoluteTime\n ? FieldUIOptions\n : T[field] extends AmountJson\n ? FieldUIOptions\n : T[field] extends Array<infer P extends object>\n ? InputArrayFieldState<P>\n : T[field] extends (object | undefined)\n ? FormState<T[field]>\n : FieldUIOptions;\n};\n\n/**\n * Properties that can be defined by design or by computing state\n */\nexport type FieldUIOptions = {\n /* text to be shown next to the field */\n error?: TranslatedString;\n /* instruction to be shown in the field */\n placeholder?: TranslatedString;\n /* long text help to be shown on demand */\n tooltip?: TranslatedString;\n /* short text to be shown next to the field*/\n\n help?: TranslatedString;\n /* should show as disabled and readonly */\n disabled?: boolean;\n /* should not show */\n hidden?: boolean;\n\n /* show a mark as required*/\n required?: boolean;\n}\n\n/**\n * properties only to be defined on design time\n */\nexport interface UIFormProps<T extends object, K extends keyof T> extends FieldUIOptions {\n\n // property name of the object\n name: K;\n\n // label if the field\n label: TranslatedString;\n before?: Addon;\n after?: Addon;\n\n // converter to string and back\n converter?: StringConverter<T[K]>;\n}\n\nexport interface IconAddon {\n type: \"icon\";\n icon: VNode;\n}\nexport interface ButtonAddon {\n type: \"button\";\n onClick: () => void;\n children: ComponentChildren;\n}\nexport interface TextAddon {\n type: \"text\";\n text: TranslatedString;\n}\nexport type Addon = IconAddon | ButtonAddon | TextAddon;\n\nexport interface StringConverter<T> {\n toStringUI: (v?: T) => string;\n fromStringUI: (v?: string) => T;\n}\n\nexport interface InputArrayFieldState<P extends object> extends FieldUIOptions {\n elements?: FormState<P>[];\n}\n\nexport type FormProviderProps<T extends object> = Omit<FormType<T>, \"value\"> & {\n onSubmit?: (v: Partial<T>, s: FormState<T> | undefined) => void;\n children?: ComponentChildren;\n}\n\nexport function FormProvider<T extends object>({\n children,\n initial,\n onUpdate: notify,\n onSubmit,\n computeFormState,\n readOnly,\n}: FormProviderProps<T>): VNode {\n\n const [state, setState] = useState<Partial<T>>(initial ?? {});\n const value = { current: state };\n const onUpdate = (v: typeof state) => {\n setState(v);\n if (notify) notify(v);\n };\n return (\n <FormContext.Provider\n value={{ initial, value, onUpdate, computeFormState, readOnly }}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n //@ts-ignore\n if (onSubmit)\n onSubmit(\n value.current,\n !computeFormState ? undefined : computeFormState(value.current),\n );\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n", "import { Fragment, h } from \"preact\";\nimport { FormProvider, FormProviderProps, FormState } from \"./FormProvider.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n\n/**\n * Flexible form uses a DoubleColumForm for design\n * and may have a dynamic properties defined by \n * behavior function.\n */\nexport interface FlexibleForm<T extends object> {\n design: DoubleColumnForm;\n behavior?: (form: Partial<T>) => FormState<T>;\n}\n\n/**\n * Double column form\n * \n * Form with sections, every sections have a title and may\n * have a description.\n * Every sections contain a set of fields.\n */\nexport type DoubleColumnForm = Array<DoubleColumnFormSection | undefined>;\n\nexport type DoubleColumnFormSection = {\n title: TranslatedString;\n description?: TranslatedString;\n fields: UIFormField[];\n};\n\n/**\n * Form Provider implementation that use FlexibleForm\n * to defined behavior and fields.\n */\nexport function DefaultForm<T extends object>({\n initial,\n onUpdate,\n form,\n onSubmit,\n children,\n readOnly,\n}: Omit<FormProviderProps<T>, \"computeFormState\"> & { form: FlexibleForm<T> }) {\n return (\n <FormProvider\n initial={initial}\n onUpdate={onUpdate}\n onSubmit={onSubmit}\n readOnly={readOnly}\n computeFormState={form.behavior}\n >\n <div class=\"space-y-10 divide-y -mt-5 divide-gray-900/10\">\n {form.design.map((section, i) => {\n if (!section) return <Fragment />;\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n {section.title}\n </h2>\n {section.description && (\n <p class=\"mt-1 text-sm leading-6 text-gray-600\">\n {section.description}\n </p>\n )}\n </div>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2\">\n <div class=\"p-3\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig\n key={i}\n fields={section.fields}\n />\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {children}\n </FormProvider>\n );\n}\n", "import { h as create, Fragment, VNode } from \"preact\";\nimport { Caption } from \"./Caption.js\";\nimport { FormProvider } from \"./FormProvider.js\";\nimport { Group } from \"./Group.js\";\nimport { InputAbsoluteTime } from \"./InputAbsoluteTime.js\";\nimport { InputAmount } from \"./InputAmount.js\";\nimport { InputArray } from \"./InputArray.js\";\nimport { InputChoiceHorizontal } from \"./InputChoiceHorizontal.js\";\nimport { InputChoiceStacked } from \"./InputChoiceStacked.js\";\nimport { InputFile } from \"./InputFile.js\";\nimport { InputInteger } from \"./InputInteger.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { InputSelectMultiple } from \"./InputSelectMultiple.js\";\nimport { InputSelectOne } from \"./InputSelectOne.js\";\nimport { InputText } from \"./InputText.js\";\nimport { InputTextArea } from \"./InputTextArea.js\";\nimport { InputToggle } from \"./InputToggle.js\";\n\n/**\n * Constrain the type with the ui props\n */\ntype FieldType<T extends object = any, K extends keyof T = any> = {\n group: Parameters<typeof Group>[0];\n caption: Parameters<typeof Caption>[0];\n array: Parameters<typeof InputArray<T, K>>[0];\n file: Parameters<typeof InputFile<T, K>>[0];\n selectOne: Parameters<typeof InputSelectOne<T, K>>[0];\n selectMultiple: Parameters<typeof InputSelectMultiple<T, K>>[0];\n text: Parameters<typeof InputText<T, K>>[0];\n textArea: Parameters<typeof InputTextArea<T, K>>[0];\n choiceStacked: Parameters<typeof InputChoiceStacked<T, K>>[0];\n choiceHorizontal: Parameters<typeof InputChoiceHorizontal<T, K>>[0];\n absoluteTime: Parameters<typeof InputAbsoluteTime<T, K>>[0];\n integer: Parameters<typeof InputInteger<T, K>>[0];\n toggle: Parameters<typeof InputToggle<T, K>>[0];\n amount: Parameters<typeof InputAmount<T, K>>[0];\n};\n\n/**\n * List all the form fields so typescript can type-check the form instance\n */\nexport type UIFormField =\n | { type: \"group\"; props: FieldType[\"group\"] }\n | { type: \"caption\"; props: FieldType[\"caption\"] }\n | { type: \"array\"; props: FieldType[\"array\"] }\n | { type: \"file\"; props: FieldType[\"file\"] }\n | { type: \"amount\"; props: FieldType[\"amount\"] }\n | { type: \"selectOne\"; props: FieldType[\"selectOne\"] }\n | { type: \"selectMultiple\"; props: FieldType[\"selectMultiple\"] }\n | { type: \"text\"; props: FieldType[\"text\"] }\n | { type: \"textArea\"; props: FieldType[\"textArea\"] }\n | { type: \"choiceStacked\"; props: FieldType[\"choiceStacked\"] }\n | { type: \"choiceHorizontal\"; props: FieldType[\"choiceHorizontal\"] }\n | { type: \"integer\"; props: FieldType[\"integer\"] }\n | { type: \"toggle\"; props: FieldType[\"toggle\"] }\n | { type: \"absoluteTime\"; props: FieldType[\"absoluteTime\"] };\n\ntype FieldComponentFunction<key extends keyof FieldType> = (\n props: FieldType[key],\n) => VNode;\n\ntype UIFormFieldMap = {\n [key in keyof FieldType]: FieldComponentFunction<key>;\n};\n\n/**\n * Maps input type with component implementation\n */\nconst UIFormConfiguration: UIFormFieldMap = {\n group: Group,\n caption: Caption,\n //@ts-ignore\n array: InputArray,\n text: InputText,\n //@ts-ignore\n file: InputFile,\n textArea: InputTextArea,\n //@ts-ignore\n absoluteTime: InputAbsoluteTime,\n //@ts-ignore\n choiceStacked: InputChoiceStacked,\n //@ts-ignore\n choiceHorizontal: InputChoiceHorizontal,\n integer: InputInteger,\n //@ts-ignore\n selectOne: InputSelectOne,\n //@ts-ignore\n selectMultiple: InputSelectMultiple,\n //@ts-ignore\n toggle: InputToggle,\n //@ts-ignore\n amount: InputAmount,\n};\n\nexport function RenderAllFieldsByUiConfig({\n fields,\n}: {\n fields: UIFormField[];\n}): VNode {\n return create(\n Fragment,\n {},\n fields.map((field, i) => {\n const Component = UIFormConfiguration[\n field.type\n ] as FieldComponentFunction<any>;\n return Component(field.props);\n }),\n );\n}\n\ntype FormSet<T extends object> = {\n Provider: typeof FormProvider<T>;\n InputLine: <K extends keyof T>() => typeof InputLine<T, K>;\n InputChoiceHorizontal: <K extends keyof T>() => typeof InputChoiceHorizontal<T, K>;\n};\n\n/**\n * Helper function that created a typed object.\n * \n * @returns \n */\nexport function createNewForm<T extends object>() {\n const res: FormSet<T> = {\n Provider: FormProvider,\n InputLine: () => InputLine,\n InputChoiceHorizontal: () => InputChoiceHorizontal,\n };\n return {\n Provider: res.Provider,\n InputLine: res.InputLine(),\n InputChoiceHorizontal: res.InputChoiceHorizontal(),\n };\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\n\ninterface Props {\n before?: TranslatedString;\n after?: TranslatedString;\n tooltipBefore?: TranslatedString;\n tooltipAfter?: TranslatedString;\n fields: UIFormField[];\n}\n\nexport function Group({\n before,\n after,\n tooltipAfter,\n tooltipBefore,\n fields,\n}: Props): VNode {\n return (\n <div class=\"sm:col-span-6 p-4 rounded-lg border-r-2 border-2 bg-gray-50\">\n <div class=\"pb-4\">\n {before && (\n <LabelWithTooltipMaybeRequired\n label={before}\n tooltip={tooltipBefore}\n />\n )}\n </div>\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-2 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n <div class=\"pt-4\">\n {after && (\n <LabelWithTooltipMaybeRequired label={after} tooltip={tooltipAfter} />\n )}\n </div>\n </div>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport { InputLine } from \"./InputLine.js\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { format, parse } from \"date-fns\";\nimport { Dialog } from \"./Dialog.js\";\nimport { Calendar } from \"./Calendar.js\";\nimport { useState } from \"preact/hooks\";\nimport { useField } from \"./useField.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { TimePicker } from \"./TimePicker.js\";\n\nexport function InputAbsoluteTime<T extends object, K extends keyof T>(\n props: { pattern?: string } & UIFormProps<T, K>,\n): VNode {\n const pattern = props.pattern ?? \"dd/MM/yyyy\";\n const [open, setOpen] = useState(false)\n const { value, onChange } = useField<T, K>(props.name);\n return (\n <Fragment>\n\n <InputLine<T, K>\n type=\"text\"\n after={{\n type: \"button\",\n onClick: () => {\n setOpen(true)\n },\n // icon: <CalendarIcon class=\"h-6 w-6\" />,\n children: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\" />\n </svg>)\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AbsoluteTime | undefined => {\n if (!v) return undefined;\n try {\n const t_ms = parse(v, pattern, Date.now()).getTime();\n return AbsoluteTime.fromMilliseconds(t_ms);\n } catch (e) {\n return undefined;\n }\n },\n //@ts-ignore\n toStringUI: (v: AbsoluteTime | undefined) => {\n return !v || !v.t_ms\n ? undefined\n : v.t_ms === \"never\"\n ? \"never\"\n : format(v.t_ms, pattern);\n },\n }}\n {...props}\n />\n {open &&\n <Dialog onClose={() => setOpen(false)}>\n <Calendar value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n setOpen(false)\n }} />\n </Dialog>\n }\n {/* {open &&\n <Dialog onClose={() => setOpen(false)} >\n <TimePicker value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n }}\n onConfirm={() => {\n setOpen(false)\n }} />\n </Dialog>} */}\n </Fragment>\n );\n}\n", "import { ComponentChildren, VNode, h } from \"preact\";\n\nexport function Dialog({ children, onClose }: { onClose?: () => void; children: ComponentChildren }): VNode {\n return <div class=\"relative z-10\" aria-labelledby=\"modal-title\" role=\"dialog\" aria-modal=\"true\" onClick={onClose}>\n <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n <div class=\"flex min-h-full items-center justify-center p-4 text-center \">\n <div class=\"relative transform overflow-hidden rounded-lg bg-white p-1 text-left shadow-xl transition-all\" onClick={(e) => e.stopPropagation()}>\n {children}\n </div>\n </div>\n </div>\n </div>\n}\n", "import { AmountJson, Amounts, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputAmount<T extends object, K extends keyof T>(\n props: { currency?: string } & UIFormProps<T, K>,\n): VNode {\n const { value } = useField<T, K>(props.name);\n const currency =\n !value || !(value as any).currency\n ? props.currency\n : (value as any).currency;\n return (\n <InputLine<T, K>\n type=\"text\"\n before={{\n type: \"text\",\n text: currency as TranslatedString,\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AmountJson => {\n\n return Amounts.parse(`${currency}:${v}`) ?? Amounts.zeroOfCurrency(currency);\n },\n //@ts-ignore\n toStringUI: (v: AmountJson) => {\n return v === undefined ? \"\" : Amounts.stringifyValue(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormProvider, UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { useField } from \"./useField.js\";\n\nfunction Option({\n label,\n disabled,\n isFirst,\n isLast,\n isSelected,\n onClick,\n}: {\n label: TranslatedString;\n isFirst?: boolean;\n isLast?: boolean;\n isSelected?: boolean;\n disabled?: boolean;\n onClick: () => void;\n}): VNode {\n let clazz = \"relative flex border p-4 focus:outline-none disabled:text-grey\";\n if (isFirst) {\n clazz += \" rounded-tl-md rounded-tr-md \";\n }\n if (isLast) {\n clazz += \" rounded-bl-md rounded-br-md \";\n }\n if (isSelected) {\n clazz += \" z-10 border-indigo-200 bg-indigo-50 \";\n } else {\n clazz += \" border-gray-200\";\n }\n if (disabled) {\n clazz +=\n \" cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray\";\n } else {\n clazz += \" cursor-pointer\";\n }\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"privacy-setting\"\n checked={isSelected}\n disabled={disabled}\n onClick={onClick}\n class=\"mt-0.5 h-4 w-4 shrink-0 text-indigo-600 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200 focus:ring-indigo-600\"\n aria-labelledby=\"privacy-setting-0-label\"\n aria-describedby=\"privacy-setting-0-description\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n id=\"privacy-setting-0-label\"\n disabled\n class=\"block text-sm font-medium\"\n >\n {label}\n </span>\n {/* <!-- Checked: \"text-indigo-700\", Not Checked: \"text-gray-500\" --> */}\n {/* <span\n id=\"privacy-setting-0-description\"\n class=\"block text-sm\"\n >\n This project would be available to anyone who has the link\n </span> */}\n </span>\n </label>\n );\n}\n\nexport function InputArray<T extends object, K extends keyof T>(\n props: {\n fields: UIFormField[];\n labelField: string;\n } & UIFormProps<T, K>,\n): VNode {\n const { fields, labelField, name, label, required, tooltip } = props;\n const { value, onChange, state } = useField<T, K>(name);\n const list = (value ?? []) as Array<Record<string, string | undefined>>;\n const [selectedIndex, setSelected] = useState<number | undefined>(undefined);\n const selected =\n selectedIndex === undefined ? undefined : list[selectedIndex];\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n\n <div class=\"-space-y-px rounded-md bg-white \">\n {list.map((v, idx) => {\n return (\n <Option\n label={v[labelField] as TranslatedString}\n isSelected={selectedIndex === idx}\n isLast={idx === list.length - 1}\n disabled={selectedIndex !== undefined && selectedIndex !== idx}\n isFirst={idx === 0}\n onClick={() => {\n setSelected(selectedIndex === idx ? undefined : idx);\n }}\n />\n );\n })}\n {!state.disabled &&\n <div class=\"pt-2\">\n <Option\n label={\"Add...\" as TranslatedString}\n isSelected={selectedIndex === list.length}\n isLast\n isFirst\n disabled={\n selectedIndex !== undefined && selectedIndex !== list.length\n }\n onClick={() => {\n setSelected(\n selectedIndex === list.length ? undefined : list.length,\n );\n }}\n />\n </div>\n }\n </div>\n {selectedIndex !== undefined && (\n /**\n * This form provider act as a substate of the parent form\n * Consider creating an InnerFormProvider since not every feature is expected\n */\n <FormProvider\n initial={selected}\n readOnly={state.disabled}\n computeFormState={(v) => {\n // current state is ignored\n // the state is defined by the parent form\n\n // elements should be present in the state object since this is expected to be an array\n //@ts-ignore\n return state.elements[selectedIndex];\n }}\n onSubmit={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as T[K]);\n setSelected(undefined);\n }}\n onUpdate={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as T[K]);\n }}\n >\n <div class=\"px-4 py-6\">\n <div class=\"grid grid-cols-1 gap-y-8 \">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n </div>\n </FormProvider>\n )}\n {selectedIndex !== undefined && (\n <div class=\"flex items-center pt-3\">\n <div class=\"flex-auto\">\n {selected !== undefined && (\n <button\n type=\"button\"\n onClick={() => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1);\n onChange(newValue as T[K]);\n setSelected(undefined);\n }}\n class=\"block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n Remove\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport interface ChoiceH<V> {\n label: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceHorizontal<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceH<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"isolate inline-flex rounded-md shadow-sm\">\n {choices.map((choice, idx) => {\n const isFirst = idx === 0;\n const isLast = idx === choices.length - 1;\n let clazz =\n \"relative inline-flex items-center px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 focus:z-10\";\n if (choice.value === value) {\n clazz +=\n \" text-white bg-indigo-600 hover:bg-indigo-500 ring-2 ring-indigo-600 hover:ring-indigo-500\";\n } else {\n clazz += \" hover:bg-gray-100 border-gray-300\";\n }\n if (isFirst) {\n clazz += \" rounded-l-md\";\n } else {\n clazz += \" -ml-px\";\n }\n if (isLast) {\n clazz += \" rounded-r-md\";\n }\n return (\n <button\n type=\"button\"\n disabled={state.disabled}\n label={choice.label}\n class={clazz}\n onClick={(e) => {\n onChange(\n (value === choice.value ? undefined : choice.value) as T[K],\n );\n }}\n >\n {choice.label}\n </button>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport interface ChoiceS<V> {\n label: TranslatedString;\n description?: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceStacked<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"space-y-4\">\n {choices.map((choice) => {\n // const currentValue = !converter\n // ? choice.value\n // : converter.fromStringUI(choice.value) ?? \"\";\n\n let clazz =\n \"border relative block cursor-pointer rounded-lg bg-white px-6 py-4 shadow-sm focus:outline-none sm:flex sm:justify-between\";\n if (choice.value === value) {\n clazz +=\n \" border-transparent border-indigo-600 ring-2 ring-indigo-600\";\n } else {\n clazz += \" border-gray-300\";\n }\n\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"server-size\"\n // defaultValue={choice.value}\n disabled={state.disabled}\n value={\n (!converter\n ? (choice.value as string)\n : converter?.toStringUI(choice.value)) ?? \"\"\n }\n onClick={(e) => {\n onChange(\n (value === choice.value\n ? undefined\n : choice.value) as T[K],\n );\n }}\n class=\"sr-only\"\n aria-labelledby=\"server-size-0-label\"\n aria-describedby=\"server-size-0-description-0 server-size-0-description-1\"\n />\n <span class=\"flex items-center\">\n <span class=\"flex flex-col text-sm\">\n <span\n id=\"server-size-0-label\"\n class=\"font-medium text-gray-900\"\n >\n {choice.label}\n </span>\n {choice.description !== undefined && (\n <span\n id=\"server-size-0-description-0\"\n class=\"text-gray-500\"\n >\n <span class=\"block sm:inline\">\n {choice.description}\n </span>\n </span>\n )}\n </span>\n </span>\n </label>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputFile<T extends object, K extends keyof T>(\n props: { maxBites: number; accept?: string } & UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n placeholder,\n tooltip,\n required,\n help: propsHelp,\n maxBites,\n accept,\n } = props;\n const { value, onChange, state } = useField<T, K>(name);\n const help = propsHelp ?? state.help\n if (state.hidden) {\n return <div />;\n }\n return (\n <div class=\"col-span-full\">\n <LabelWithTooltipMaybeRequired\n label={label}\n tooltip={tooltip}\n required={required}\n />\n {!value || !(value as string).startsWith(\"data:image/\") ? (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 py-1\">\n <div class=\"text-center\">\n <svg\n class=\"mx-auto h-12 w-12 text-gray-300\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.5 6a2.25 2.25 0 012.25-2.25h16.5A2.25 2.25 0 0122.5 6v12a2.25 2.25 0 01-2.25 2.25H3.75A2.25 2.25 0 011.5 18V6zM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0021 18v-1.94l-2.69-2.689a1.5 1.5 0 00-2.12 0l-.88.879.97.97a.75.75 0 11-1.06 1.06l-5.16-5.159a1.5 1.5 0 00-2.12 0L3 16.061zm10.125-7.81a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n {!state.disabled &&\n <div class=\"my-2 flex text-sm leading-6 text-gray-600\">\n <label\n for=\"file-upload\"\n class=\"relative cursor-pointer rounded-md bg-white font-semibold text-indigo-600 focus-within:outline-none focus-within:ring-2 focus-within:ring-indigo-600 focus-within:ring-offset-2 hover:text-indigo-500\"\n >\n <span>Upload a file</span>\n <input\n id=\"file-upload\"\n name=\"file-upload\"\n type=\"file\"\n class=\"sr-only\"\n accept={accept}\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 > maxBites) {\n return onChange(undefined!);\n }\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 </label>\n {/* <p class=\"pl-1\">or drag and drop</p> */}\n </div>\n }\n </div>\n </div>\n ) : (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 relative\">\n <img\n src={value as string}\n class=\" h-24 w-full object-cover relative\"\n />\n\n {!state.disabled &&\n <div\n class=\"opacity-0 hover:opacity-70 duration-300 absolute rounded-lg border inset-0 z-10 flex justify-center text-xl items-center bg-black text-white cursor-pointer \"\n onClick={() => {\n onChange(undefined!);\n }}\n >\n Clear\n </div>\n }\n </div>\n )}\n {help && <p class=\"text-xs leading-5 text-gray-600 mt-2\">{help}</p>}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputInteger<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return (\n <InputLine\n type=\"number\"\n converter={{\n //@ts-ignore\n fromStringUI: (v): number => {\n return !v ? 0 : Number.parseInt(v, 10);\n },\n //@ts-ignore\n toStringUI: (v?: number): string => {\n return v === undefined ? \"\" : String(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectMultiple<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n unique?: boolean;\n max?: number;\n } & UIFormProps<T, K>,\n): VNode {\n const { name, label, choices, placeholder, tooltip, required, unique, max } =\n props;\n const { value, onChange, state } = useField<T, K>(name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce((prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n }, {} as Record<string, string>);\n\n const list = (value ?? []) as string[];\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {list.map((v, idx) => {\n return (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 text-xs font-medium text-gray-600\">\n {choiceMap[v]}\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n const newValue = [...list];\n newValue.splice(idx, 1);\n onChange(newValue as T[K]);\n setFilter(undefined);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n );\n })}\n\n {!state.disabled && <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n if (unique && list.indexOf(v.value as string) !== -1) {\n return;\n }\n if (max !== undefined && list.length >= max) {\n return;\n }\n const newValue = [...list];\n newValue.splice(0, 0, v.value as string);\n onChange(newValue as T[K]);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectOne<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { name, label, choices, placeholder, tooltip, required } = props;\n const { value, onChange } = useField<T, K>(name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce((prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n }, {} as Record<string, string>);\n\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {value ? (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 font-medium text-gray-600\">\n {choiceMap[value as string]}\n <button\n type=\"button\"\n onClick={() => {\n onChange(undefined!);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n ) : (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n onChange(v.value as T[K]);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\n\nexport function InputText<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputTextArea<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text-area\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputToggle<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n const { value, onChange, state, isDirty } = useField<T, K>(name);\n\n const isOn = !!value\n return <div class=\"sm:col-span-6\">\n <div class=\"flex items-center justify-between\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <button type=\"button\" data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\" aria-checked=\"false\" aria-labelledby=\"availability-label\" aria-describedby=\"availability-description\"\n onClick={() => { onChange(!isOn as any); }}>\n <span aria-hidden=\"true\" data-enabled={isOn} class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"></span>\n </button>\n </div>\n </div>\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { getHours, getMinutes, getSeconds, setHours } from \"date-fns\"\nimport { Fragment, VNode, h } from \"preact\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function TimePicker({ value, onChange, onConfirm }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void, onConfirm: () => void }): VNode {\n const date = !value ? new Date() : new Date(AbsoluteTime.toStampMs(value))\n const hours = getHours(date) % 12\n const minutes = getMinutes(date)\n const seconds = getSeconds(date)\n\n const { i18n } = useTranslationContext()\n\n return <Fragment>\n <div class=\"flex flex-col bg-white rounded-t-sm justify-around\" >\n {/* time selection */}\n <div id=\"\" class=\"bg-[#3b71ca] dark:bg-zinc-700 h-24 rounded-t-lg p-12 flex flex-row items-center justify-center\">\n <div class=\"flex w-full justify-evenly\">\n <div class=\"\">\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \"\n style=\"pointer-events: none;\">\n {new String(hours).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(minutes).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(seconds).padStart(2, \"0\")}\n </button>\n </span>\n </div>\n <div class=\"flex flex-col justify-center text-[18px] text-[#ffffff8a] \">\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n AM\n </button>\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n PM\n </button>\n </div>\n </div>\n </div>\n {/* clock */}\n <div id=\"\" class=\"mt-2 min-w-[310px] max-w-[325px] min-h-[305px] overflow-x-hidden h-full flex justify-center mx-auto flex-col items-center dark:bg-zinc-500\" >\n <div class=\"relative rounded-[100%] w-[260px] h-[260px] cursor-default my-0 mx-auto bg-[#00000012] dark:bg-zinc-600/50 animate-[show-up-clock_350ms_linear]\" >\n\n <span class=\"top-1/2 left-1/2 w-[6px] h-[6px] -translate-y-1/2 -translate-x-1/2 rounded-[50%] bg-[#3b71ca] absolute\" ></span>\n <div class=\"bg-[#3b71ca] bottom-1/2 h-2/5 left-[calc(50%-1px)] rtl:!left-auto origin-[center_bottom_0] rtl:!origin-[50%_50%_0] w-[2px] absolute\" style={{ transform: \"rotateZ(60deg)\", height: \"calc(35% + 1px)\" }}>\n {/* <div class=\"-top-[21px] -left-[15px] w-[4px] border-[14px] border-solid border-[#3b71ca] h-[4px] box-content rounded-[100%] absolute\" style=\"background-color: rgb(25, 118, 210);\"></div> */}\n </div>\n\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 12).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 224px;\">\n <span>0</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 1).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 209.263px;\">\n <span >1</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 2).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" data-selected={true} style=\"left: 209.263px; bottom: 169px;\" >\n <span >2</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 3).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 224px; bottom: 114px;\">\n <span >3</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 4).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 209.263px; bottom: 59px;\">\n <span >4</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 5).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 18.7372px;\">\n <span >5</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 6).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 4px;\">\n <span >6</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 7).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 18.7372px;\">\n <span >7</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 8).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 59px;\">\n <span >8</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 9).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 4px; bottom: 114px;\">\n <span >9</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 10).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 169px;\">\n <span >10</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 11).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 209.263px;\">\n <span >11</span>\n </span>\n </div>\n </div>\n </div>\n <div id=\"\" class=\"rounded-b-lg flex justify-between items-center w-full h-[56px] px-[12px] bg-white dark:bg-zinc-500\">\n <div class=\"w-full flex justify-end\">\n <button\n type=\"submit\"\n onClick={onConfirm}\n class=\"rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </div>\n </Fragment>\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 {\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\";\nimport { ExampleItemSetup } from \"./tests/hook.js\";\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 contextProps: {},\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<Props extends object = {}> {\n name: string;\n examples: ExampleItem<Props>[];\n}\n\nexport interface ExampleItem<Props extends object = {}> {\n group: string;\n component: string;\n name: string;\n render: ExampleItemSetup<Props>;\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 url = new URL(window.location.href);\n const initialSelection = getSelectionFromLocationHash(\n url.hash,\n examplesInGroups,\n );\n\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 (url.hash) {\n const hash = url.hash.substring(1);\n const found = document.getElementById(hash);\n if (found) {\n setTimeout(() => {\n found.scrollIntoView({\n block: \"center\",\n });\n }, 50);\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", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n TalerBankConversionCacheEviction,\n TalerCoreBankCacheEviction,\n assertUnreachable,\n canonicalizeBaseUrl,\n getGlobalLogLevel,\n setGlobalLogLevelFromString,\n} from \"@gnu-taler/taler-util\";\nimport {\n BankApiProvider,\n BrowserHashNavigationProvider,\n Loading,\n TalerWalletIntegrationBrowserProvider,\n TranslationProvider,\n} from \"@gnu-taler/web-util/browser\";\nimport { h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { SWRConfig } from \"swr\";\nimport { Routing } from \"./Routing.js\";\n// import { BankCoreApiProvider } from \"./context/config.js\";\n// import { BrowserHashNavigationProvider } from \"./context/navigation.js\";\nimport { SettingsProvider } from \"./context/settings.js\";\n// import { TalerWalletIntegrationBrowserProvider } from \"./context/wallet-integration.js\";\nimport { strings } from \"./i18n/strings.js\";\nimport { BankFrame } from \"./pages/BankFrame.js\";\nimport { BankUiSettings, fetchSettings } from \"./settings.js\";\nimport {\n revalidateAccountDetails,\n revalidatePublicAccounts,\n revalidateTransactions,\n} from \"./hooks/account.js\";\nimport {\n revalidateBusinessAccounts,\n revalidateCashouts,\n revalidateConversionInfo,\n} from \"./hooks/regional.js\";\nconst WITH_LOCAL_STORAGE_CACHE = false;\n\nexport function App() {\n const [settings, setSettings] = useState<BankUiSettings>();\n useEffect(() => {\n fetchSettings(setSettings);\n }, []);\n if (!settings) return <Loading />;\n\n const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);\n return (\n <SettingsProvider value={settings}>\n <TranslationProvider\n source={strings}\n completeness={{\n es: strings[\"es\"].completeness,\n de: strings[\"de\"].completeness,\n }}\n >\n <BankApiProvider\n baseUrl={new URL(\"/\", baseUrl)}\n frameOnError={BankFrame}\n evictors={{\n bank: evictBankSwrCache,\n conversion: evictConversionSwrCache,\n }}\n >\n <SWRConfig\n value={{\n provider: WITH_LOCAL_STORAGE_CACHE\n ? localStorageProvider\n : undefined,\n // normally, do not revalidate\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n revalidateOnMount: undefined,\n focusThrottleInterval: undefined,\n\n // normally, do not refresh\n refreshInterval: undefined,\n dedupingInterval: 2000,\n refreshWhenHidden: false,\n refreshWhenOffline: false,\n\n // ignore errors\n shouldRetryOnError: false,\n errorRetryCount: 0,\n errorRetryInterval: undefined,\n\n // do not go to loading again if already has data\n keepPreviousData: true,\n }}\n >\n <TalerWalletIntegrationBrowserProvider>\n <BrowserHashNavigationProvider>\n <Routing />\n </BrowserHashNavigationProvider>\n </TalerWalletIntegrationBrowserProvider>\n </SWRConfig>\n </BankApiProvider>\n </TranslationProvider>\n </SettingsProvider>\n );\n}\n\n// @ts-expect-error creating a new property for window object\nwindow.setGlobalLogLevelFromString = setGlobalLogLevelFromString;\n// @ts-expect-error creating a new property for window object\nwindow.getGlobalLevel = getGlobalLogLevel;\n\nfunction localStorageProvider(): Map<unknown, unknown> {\n const map = new Map(JSON.parse(localStorage.getItem(\"app-cache\") || \"[]\"));\n\n window.addEventListener(\"beforeunload\", () => {\n const appCache = JSON.stringify(Array.from(map.entries()));\n localStorage.setItem(\"app-cache\", appCache);\n });\n return map;\n}\n\nfunction getInitialBackendBaseURL(\n backendFromSettings: string | undefined,\n): string {\n const overrideUrl =\n typeof localStorage !== \"undefined\"\n ? localStorage.getItem(\"corebank-api-base-url\")\n : undefined;\n let result: string;\n\n if (!overrideUrl) {\n // normal path\n if (!backendFromSettings) {\n console.error(\n \"ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'\",\n );\n result = window.origin;\n } else {\n result = backendFromSettings;\n }\n } else {\n // testing/development path\n result = overrideUrl;\n }\n try {\n return canonicalizeBaseUrl(result);\n } catch (e) {\n // fall back\n return canonicalizeBaseUrl(window.origin);\n }\n}\n\nconst evictBankSwrCache: CacheEvictor<TalerCoreBankCacheEviction> = {\n async notifySuccess(op) {\n switch (op) {\n case TalerCoreBankCacheEviction.DELETE_ACCOUNT: {\n await Promise.all([\n revalidatePublicAccounts(),\n revalidateBusinessAccounts(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.CREATE_ACCOUNT: {\n // admin balance change on new account\n await Promise.all([\n revalidateAccountDetails(),\n revalidateTransactions(),\n revalidatePublicAccounts(),\n revalidateBusinessAccounts(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.UPDATE_ACCOUNT: {\n await Promise.all([revalidateAccountDetails()]);\n return;\n }\n case TalerCoreBankCacheEviction.CREATE_TRANSACTION: {\n await Promise.all([\n revalidateAccountDetails(),\n revalidateTransactions(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.CONFIRM_WITHDRAWAL: {\n await Promise.all([\n revalidateAccountDetails(),\n revalidateTransactions(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.CREATE_CASHOUT: {\n await Promise.all([\n revalidateAccountDetails(),\n revalidateCashouts(),\n revalidateTransactions(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.UPDATE_PASSWORD:\n case TalerCoreBankCacheEviction.ABORT_WITHDRAWAL:\n case TalerCoreBankCacheEviction.CREATE_WITHDRAWAL:\n return;\n default:\n assertUnreachable(op);\n }\n },\n};\n\nconst evictConversionSwrCache: CacheEvictor<TalerBankConversionCacheEviction> =\n {\n async notifySuccess(op) {\n switch (op) {\n case TalerBankConversionCacheEviction.UPDATE_RATE: {\n await revalidateConversionInfo();\n return;\n }\n default:\n assertUnreachable(op);\n }\n },\n };\n", "import { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { OBJECT, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, serialize, createCacheHelper, isUndefined, getTimestamp, UNDEFINED, isFunction, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects, revalidateEvents } from 'swr/_internal';\nexport { mutate, preload, useSWRConfig } from 'swr/_internal';\n\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache , compare , suspense , fallbackData , revalidateOnMount , revalidateIfStale , refreshInterval , refreshWhenHidden , refreshWhenOffline , keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH] = SWRGlobalState.get(cache);\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 // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n const [key, fnArg] = serialize(_key);\n // If it's the initial render of this hook.\n const 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 const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n let equal = true;\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(current[t], prev[t])) {\n if (isUndefined(prev[t])) {\n if (!compare(current[t], returnedData)) {\n equal = false;\n }\n } else {\n equal = false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n equal = false;\n }\n }\n }\n return equal;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n if (!isUndefined(revalidateIfStale)) return revalidateIfStale;\n return true;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = getSelectedCache(getCache());\n const memorizedInitialSnapshot = getSelectedCache(getInitialCache());\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n return isEqual(newSnapshot, memorizedSnapshot) ? memorizedSnapshot : memorizedSnapshot = newSnapshot;\n },\n ()=>memorizedInitialSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined(cachedData) ? fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;\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 const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) 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 mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n [newData, startAt] = FETCH[key];\n newData = await newData;\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 (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, revalidate, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `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 [\n key,\n cache\n ]);\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 const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n let nextFocusRevalidatedAt = 0;\n const onRevalidate = (type)=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n }\n return;\n };\n const 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 // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation.\n if (shouldDoInitialRevalidation) {\n if (isUndefined(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\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 ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction(refreshInterval) ? refreshInterval(data) : refreshInterval;\n // We only start the 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 (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `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 // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any initial data. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using suspense in SSR.');\n }\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 returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n};\nconst SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\nconst unstable_serialize = (key)=>serialize(key)[0];\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (!data) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ var useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n", "import React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useState, createElement, useRef, useCallback } from 'react';\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can 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\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return cache.get(key) || EMPTY_CACHE;\n }\n ];\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).\nconst table = new WeakMap();\n// counter of the key\nlet 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// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const constructor = arg && arg.constructor;\n const isDate = constructor == Date;\n let result;\n let 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) 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 const 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 } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\n/**\n * Due to the 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 workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || 'Deno' in window;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\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.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nconst FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\n\nvar constants = {\n __proto__: null,\n FOCUS_EVENT: FOCUS_EVENT,\n RECONNECT_EVENT: RECONNECT_EVENT,\n MUTATE_EVENT: MUTATE_EVENT\n};\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const revalidate = options.revalidate !== false;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for(let keyIt = it.next(); !keyIt.done; keyIt = it.next()){\n const key = keyIt.value;\n if (// Skip the special useSWRInfinite keys.\n !key.startsWith('$inf$') && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH] = SWRGlobalState.get(cache);\n const revalidators = EVENT_REVALIDATORS[key];\n const startRevalidate = ()=>{\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(()=>get().data);\n }\n }\n return get().data;\n };\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 startRevalidate();\n }\n let data = _data;\n let error;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isFunction(data.then)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((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 if (beforeMutationTs !== MUTATION[key][0]) {\n if (error) throw error;\n return data;\n } else if (error && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n data = committedData;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data,\n _c: UNDEFINED\n });\n }\n }\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, committedData);\n }\n // Only update cached data if there's no error. Data can be `undefined` here.\n set({\n data,\n _c: UNDEFINED\n });\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n const res = await startRevalidate();\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n // Throw error or return data\n if (error) {\n if (throwOnError) throw error;\n return;\n }\n return populateCache ? res : data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (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 is bound to\n // the cache.\n // The 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 const 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 const EVENT_REVALIDATORS = {};\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = {};\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for(let i = subs.length; i--;){\n subs[i](value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n {},\n {},\n {},\n mutate,\n setter,\n subscribe\n ]);\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 be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\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 }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\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 [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = (currentData, newData)=>stableHash(currentData) == stableHash(newData);\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n 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,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1 , fallback: f1 } = a;\n const { use: u2 , fallback: f2 } = b;\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\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // Use a lazy initialized state to create the cache on first access.\n const [cacheContext] = useState(()=>provider ? initCache(provider(extendedConfig.cache || cache), config) : UNDEFINED);\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(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const key = serialize(key_)[0];\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(key_);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const key = serialize(key_)[0];\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n const req = PRELOAD[key];\n if (req) {\n delete PRELOAD[key];\n return req;\n }\n return fetcher_(...args);\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n/**\n * An implementation of state with dependency-tracking.\n */ const useStateWithDeps = (state)=>{\n const rerender = useState({})[1];\n const unmountedRef = useRef(false);\n const 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 const 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 */ const setState = useCallback((payload)=>{\n let shouldRerender = false;\n const currentState = stateRef.current;\n for(const _ in payload){\n const 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 if (IS_REACT_LEGACY) {\n rerender({});\n } else {\n React.startTransition(()=>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 useIsomorphicLayoutEffect(()=>{\n unmountedRef.current = false;\n return ()=>{\n unmountedRef.current = true;\n };\n });\n return [\n stateRef,\n stateDependenciesRef.current,\n setState\n ];\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const 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\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { IS_REACT_LEGACY, IS_SERVER, OBJECT, SWRConfig, SWRGlobalState, UNDEFINED, cache, compare, createCacheHelper, defaultConfig, defaultConfigOptions, getTimestamp, hasRequestAnimationFrame, initCache, internalMutate, isDocumentDefined, isFunction, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, mutate, noop, normalize, preload, preset, rAF, constants as revalidateEvents, serialize, slowConnection, stableHash, subscribeCallback, useIsomorphicLayoutEffect, useSWRConfig, useStateWithDeps, withArgs, withMiddleware };\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 LocalNotificationBanner,\n urlPattern,\n useBankCoreApiContext,\n useCurrentLocation,\n useLocalNotification,\n useNavigationContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\n\nimport {\n AbsoluteTime,\n AccessToken,\n HttpStatusCode,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect } from \"preact/hooks\";\nimport { useSessionState } from \"./hooks/session.js\";\nimport { AccountPage } from \"./pages/AccountPage/index.js\";\nimport { BankFrame } from \"./pages/BankFrame.js\";\nimport { LoginForm } from \"./pages/LoginForm.js\";\nimport { PublicHistoriesPage } from \"./pages/PublicHistoriesPage.js\";\nimport { RegistrationPage } from \"./pages/RegistrationPage.js\";\nimport { ShowNotifications } from \"./pages/ShowNotifications.js\";\nimport { SolveChallengePage } from \"./pages/SolveChallengePage.js\";\nimport { WireTransfer } from \"./pages/WireTransfer.js\";\nimport { WithdrawalOperationPage } from \"./pages/WithdrawalOperationPage.js\";\nimport { CashoutListForAccount } from \"./pages/account/CashoutListForAccount.js\";\nimport { ShowAccountDetails } from \"./pages/account/ShowAccountDetails.js\";\nimport { UpdateAccountPassword } from \"./pages/account/UpdateAccountPassword.js\";\nimport { AdminHome } from \"./pages/admin/AdminHome.js\";\nimport { CreateNewAccount } from \"./pages/admin/CreateNewAccount.js\";\nimport { DownloadStats } from \"./pages/admin/DownloadStats.js\";\nimport { RemoveAccount } from \"./pages/admin/RemoveAccount.js\";\nimport { ConversionConfig } from \"./pages/regional/ConversionConfig.js\";\nimport { CreateCashout } from \"./pages/regional/CreateCashout.js\";\nimport { ShowCashoutDetails } from \"./pages/regional/ShowCashoutDetails.js\";\n\nexport function Routing(): VNode {\n const session = useSessionState();\n\n if (session.state.status === \"loggedIn\") {\n const { isUserAdministrator, username } = session.state;\n return (\n <BankFrame\n account={username}\n routeAccountDetails={privatePages.myAccountDetails}\n >\n <PrivateRouting username={username} isAdmin={isUserAdministrator} />\n </BankFrame>\n );\n }\n return (\n <BankFrame>\n <PublicRounting\n onLoggedUser={(username, token) => {\n session.logIn({ username, token: token });\n }}\n />\n </BankFrame>\n );\n}\n\nconst publicPages = {\n login: urlPattern(/\\/login/, () => \"#/login\"),\n register: urlPattern(/\\/register/, () => \"#/register\"),\n publicAccounts: urlPattern(/\\/public-accounts/, () => \"#/public-accounts\"),\n operationDetails: urlPattern<{ wopid: string }>(\n /\\/operation\\/(?<wopid>[a-zA-Z0-9-]+)/,\n ({ wopid }) => `#/operation/${wopid}`,\n ),\n solveSecondFactor: urlPattern(/\\/2fa/, () => \"#/2fa\"),\n};\n\nfunction PublicRounting({\n onLoggedUser,\n}: {\n onLoggedUser: (username: string, token: AccessToken) => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const location = useCurrentLocation(publicPages);\n const { navigateTo } = useNavigationContext();\n const { config, lib } = useBankCoreApiContext();\n const [notification, notify, handleError] = useLocalNotification();\n\n useEffect(() => {\n if (location === undefined) {\n navigateTo(publicPages.login.url({}));\n }\n }, [location]);\n\n if (location === undefined) {\n return <Fragment />;\n }\n\n async function doAutomaticLogin(username: string, password: string) {\n await handleError(async () => {\n const resp = await lib\n .auth(username)\n .createAccessTokenBasic(username, password, {\n scope: \"readwrite\",\n duration: { d_us: \"forever\" },\n refreshable: true,\n });\n if (resp.type === \"ok\") {\n onLoggedUser(username, resp.body.access_token);\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`Wrong credentials for \"${username}\"`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n switch (location.name) {\n case \"login\": {\n return (\n <Fragment>\n <div class=\"sm:mx-auto sm:w-full sm:max-w-sm\">\n <h2 class=\"text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">{i18n.str`Welcome to ${config.bank_name}!`}</h2>\n </div>\n <LoginForm routeRegister={publicPages.register} />\n </Fragment>\n );\n }\n case \"publicAccounts\": {\n return <PublicHistoriesPage />;\n }\n case \"operationDetails\": {\n return (\n <WithdrawalOperationPage\n operationId={location.values.wopid}\n routeWithdrawalDetails={publicPages.operationDetails}\n purpose=\"after-confirmation\"\n onOperationAborted={() => navigateTo(publicPages.login.url({}))}\n routeClose={publicPages.login}\n onAuthorizationRequired={() =>\n navigateTo(publicPages.solveSecondFactor.url({}))\n }\n />\n );\n }\n case \"register\": {\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n <RegistrationPage\n onRegistrationSuccesful={doAutomaticLogin}\n routeCancel={publicPages.login}\n />\n </Fragment>\n );\n }\n case \"solveSecondFactor\": {\n return (\n <SolveChallengePage\n onChallengeCompleted={() => navigateTo(publicPages.login.url({}))}\n routeClose={publicPages.login}\n />\n );\n }\n default:\n assertUnreachable(location);\n }\n}\n\nexport const privatePages = {\n homeChargeWallet: urlPattern(\n /\\/account\\/charge-wallet/,\n () => \"#/account/charge-wallet\",\n ),\n homeWireTransfer: urlPattern<{\n account?: string;\n subject?: string;\n amount?: string;\n }>(/\\/account\\/wire-transfer/, () => \"#/account/wire-transfer\"),\n home: urlPattern(/\\/account/, () => \"#/account\"),\n notifications: urlPattern(/\\/notifications/, () => \"#/notifications\"),\n solveSecondFactor: urlPattern(/\\/2fa/, () => \"#/2fa\"),\n cashoutCreate: urlPattern(/\\/new-cashout/, () => \"#/new-cashout\"),\n cashoutDetails: urlPattern<{ cid: string }>(\n /\\/cashout\\/(?<cid>[a-zA-Z0-9]+)/,\n ({ cid }) => `#/cashout/${cid}`,\n ),\n wireTranserCreate: urlPattern<{\n account?: string;\n subject?: string;\n amount?: string;\n }>(\n /\\/wire-transfer\\/(?<account>[a-zA-Z0-9]+)/,\n ({ account }) => `#/wire-transfer/${account}`,\n ),\n publicAccountList: urlPattern(/\\/public-accounts/, () => \"#/public-accounts\"),\n statsDownload: urlPattern(/\\/download-stats/, () => \"#/download-stats\"),\n accountCreate: urlPattern(/\\/new-account/, () => \"#/new-account\"),\n myAccountDelete: urlPattern(\n /\\/delete-my-account/,\n () => \"#/delete-my-account\",\n ),\n myAccountDetails: urlPattern(/\\/my-profile/, () => \"#/my-profile\"),\n myAccountPassword: urlPattern(/\\/my-password/, () => \"#/my-password\"),\n myAccountCashouts: urlPattern(/\\/my-cashouts/, () => \"#/my-cashouts\"),\n conversionConfig: urlPattern(/\\/conversion/, () => \"#/conversion\"),\n accountDetails: urlPattern<{ account: string }>(\n /\\/profile\\/(?<account>[a-zA-Z0-9_-]+)\\/details/,\n ({ account }) => `#/profile/${account}/details`,\n ),\n accountChangePassword: urlPattern<{ account: string }>(\n /\\/profile\\/(?<account>[a-zA-Z0-9_-]+)\\/change-password/,\n ({ account }) => `#/profile/${account}/change-password`,\n ),\n accountDelete: urlPattern<{ account: string }>(\n /\\/profile\\/(?<account>[a-zA-Z0-9_-]+)\\/delete/,\n ({ account }) => `#/profile/${account}/delete`,\n ),\n accountCashouts: urlPattern<{ account: string }>(\n /\\/profile\\/(?<account>[a-zA-Z0-9_-]+)\\/cashouts/,\n ({ account }) => `#/profile/${account}/cashouts`,\n ),\n startOperation: urlPattern<{ wopid: string }>(\n /\\/start-operation\\/(?<wopid>[a-zA-Z0-9-]+)/,\n ({ wopid }) => `#/start-operation/${wopid}`,\n ),\n operationDetails: urlPattern<{ wopid: string }>(\n /\\/operation\\/(?<wopid>[a-zA-Z0-9-]+)/,\n ({ wopid }) => `#/operation/${wopid}`,\n ),\n};\n\nfunction PrivateRouting({\n username,\n isAdmin,\n}: {\n username: string;\n isAdmin: boolean;\n}): VNode {\n const { navigateTo } = useNavigationContext();\n const location = useCurrentLocation(privatePages);\n useEffect(() => {\n if (location === undefined) {\n navigateTo(privatePages.home.url({}));\n }\n }, [location]);\n\n if (location === undefined) {\n return <Fragment />;\n }\n\n switch (location.name) {\n case \"operationDetails\": {\n return (\n <WithdrawalOperationPage\n operationId={location.values.wopid}\n routeWithdrawalDetails={privatePages.operationDetails}\n purpose=\"after-confirmation\"\n onOperationAborted={() => navigateTo(privatePages.home.url({}))}\n routeClose={privatePages.home}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n />\n );\n }\n case \"startOperation\": {\n return (\n <WithdrawalOperationPage\n operationId={location.values.wopid}\n routeWithdrawalDetails={privatePages.operationDetails}\n purpose=\"after-creation\"\n onOperationAborted={() => navigateTo(privatePages.home.url({}))}\n routeClose={privatePages.home}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n />\n );\n }\n case \"solveSecondFactor\": {\n return (\n <SolveChallengePage\n onChallengeCompleted={() => navigateTo(privatePages.home.url({}))}\n routeClose={privatePages.home}\n />\n );\n }\n case \"publicAccountList\": {\n return <PublicHistoriesPage />;\n }\n case \"statsDownload\": {\n return <DownloadStats routeCancel={privatePages.home} />;\n }\n case \"accountCreate\": {\n return (\n <CreateNewAccount\n routeCancel={privatePages.home}\n onCreateSuccess={() => navigateTo(privatePages.home.url({}))}\n />\n );\n }\n case \"accountDetails\": {\n return (\n <ShowAccountDetails\n account={location.values.account}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n routeHere={privatePages.accountDetails}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"accountChangePassword\": {\n return (\n <UpdateAccountPassword\n focus\n account={location.values.account}\n routeHere={privatePages.accountChangePassword}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"accountDelete\": {\n return (\n <RemoveAccount\n account={location.values.account}\n routeHere={privatePages.accountDelete}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeCancel={privatePages.home}\n />\n );\n }\n case \"accountCashouts\": {\n return (\n <CashoutListForAccount\n account={location.values.account}\n routeCreateCashout={privatePages.cashoutCreate}\n routeCashoutDetails={privatePages.cashoutDetails}\n routeClose={privatePages.home}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n />\n );\n }\n case \"myAccountDelete\": {\n return (\n <RemoveAccount\n account={username}\n routeHere={privatePages.accountDelete}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeCancel={privatePages.home}\n />\n );\n }\n case \"myAccountDetails\": {\n return (\n <ShowAccountDetails\n account={username}\n routeHere={privatePages.accountDetails}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeConversionConfig={privatePages.conversionConfig}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"myAccountPassword\": {\n return (\n <UpdateAccountPassword\n focus\n account={username}\n routeHere={privatePages.accountChangePassword}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"myAccountCashouts\": {\n return (\n <CashoutListForAccount\n account={username}\n routeCashoutDetails={privatePages.cashoutDetails}\n routeCreateCashout={privatePages.cashoutCreate}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"home\": {\n if (isAdmin) {\n return (\n <AdminHome\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeCreate={privatePages.accountCreate}\n routeRemoveAccount={privatePages.accountDelete}\n routeShowAccount={privatePages.accountDetails}\n routeShowCashoutsAccount={privatePages.accountCashouts}\n routeUpdatePasswordAccount={privatePages.accountChangePassword}\n routeCreateWireTransfer={privatePages.wireTranserCreate}\n routeDownloadStats={privatePages.statsDownload}\n />\n );\n }\n return (\n <AccountPage\n account={username}\n tab={undefined}\n routeCreateWireTransfer={privatePages.wireTranserCreate}\n routePublicAccounts={privatePages.publicAccountList}\n routeOperationDetails={privatePages.startOperation}\n routeChargeWallet={privatePages.homeChargeWallet}\n routeWireTransfer={privatePages.homeWireTransfer}\n routeSolveSecondFactor={privatePages.solveSecondFactor}\n routeCashout={privatePages.myAccountCashouts}\n routeClose={privatePages.home}\n onClose={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n onOperationCreated={(wopid) =>\n navigateTo(privatePages.startOperation.url({ wopid }))\n }\n />\n );\n }\n case \"cashoutCreate\": {\n return (\n <CreateCashout\n account={username}\n routeHere={privatePages.cashoutCreate}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"cashoutDetails\": {\n return (\n <ShowCashoutDetails\n id={location.values.cid}\n routeClose={privatePages.myAccountCashouts}\n />\n );\n }\n case \"wireTranserCreate\": {\n return (\n <WireTransfer\n toAccount={location.values.account}\n withAmount={location.values.amount}\n withSubject={location.values.subject}\n routeHere={privatePages.wireTranserCreate}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeCancel={privatePages.home}\n onSuccess={() => navigateTo(privatePages.home.url({}))}\n />\n );\n }\n case \"homeChargeWallet\": {\n return (\n <AccountPage\n account={username}\n tab=\"charge-wallet\"\n routeChargeWallet={privatePages.homeChargeWallet}\n routeWireTransfer={privatePages.homeWireTransfer}\n routeCreateWireTransfer={privatePages.wireTranserCreate}\n routePublicAccounts={privatePages.publicAccountList}\n routeOperationDetails={privatePages.startOperation}\n routeCashout={privatePages.myAccountCashouts}\n routeSolveSecondFactor={privatePages.solveSecondFactor}\n routeClose={privatePages.home}\n onClose={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n onOperationCreated={(wopid) =>\n navigateTo(privatePages.startOperation.url({ wopid }))\n }\n />\n );\n }\n case \"conversionConfig\": {\n return (\n <ConversionConfig\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n routeCancel={privatePages.home}\n onUpdateSuccess={() => {\n navigateTo(privatePages.home.url({}));\n }}\n />\n );\n }\n case \"homeWireTransfer\": {\n return (\n <AccountPage\n account={username}\n tab=\"wire-transfer\"\n routeChargeWallet={privatePages.homeChargeWallet}\n routeWireTransfer={privatePages.homeWireTransfer}\n routeCreateWireTransfer={privatePages.wireTranserCreate}\n routePublicAccounts={privatePages.publicAccountList}\n routeOperationDetails={privatePages.startOperation}\n routeSolveSecondFactor={privatePages.solveSecondFactor}\n routeCashout={privatePages.myAccountCashouts}\n routeClose={privatePages.home}\n onClose={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n onOperationCreated={(wopid) =>\n navigateTo(privatePages.startOperation.url({ wopid }))\n }\n />\n );\n }\n case \"notifications\": {\n return <ShowNotifications />;\n }\n default:\n assertUnreachable(location);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForBoolean,\n codecForConstString,\n codecForString,\n} from \"@gnu-taler/taler-util\";\nimport { buildStorageKey, useLocalStorage } from \"@gnu-taler/web-util/browser\";\nimport { mutate } from \"swr\";\n\n/**\n * Has the information to reach and\n * authenticate at the bank's backend.\n */\nexport type SessionState = LoggedIn | LoggedOut | Expired;\n\ninterface LoggedIn {\n status: \"loggedIn\";\n isUserAdministrator: boolean;\n username: string;\n token: AccessToken;\n}\ninterface Expired {\n status: \"expired\";\n isUserAdministrator: boolean;\n username: string;\n}\ninterface LoggedOut {\n status: \"loggedOut\";\n}\n\nexport const codecForSessionStateLoggedIn = (): Codec<LoggedIn> =>\n buildCodecForObject<LoggedIn>()\n .property(\"status\", codecForConstString(\"loggedIn\"))\n .property(\"username\", codecForString())\n .property(\"token\", codecForString() as Codec<AccessToken>)\n .property(\"isUserAdministrator\", codecForBoolean())\n .build(\"SessionState.LoggedIn\");\n\nexport const codecForSessionStateExpired = (): Codec<Expired> =>\n buildCodecForObject<Expired>()\n .property(\"status\", codecForConstString(\"expired\"))\n .property(\"username\", codecForString())\n .property(\"isUserAdministrator\", codecForBoolean())\n .build(\"SessionState.Expired\");\n\nexport const codecForSessionStateLoggedOut = (): Codec<LoggedOut> =>\n buildCodecForObject<LoggedOut>()\n .property(\"status\", codecForConstString(\"loggedOut\"))\n .build(\"SessionState.LoggedOut\");\n\nexport const codecForSessionState = (): Codec<SessionState> =>\n buildCodecForUnion<SessionState>()\n .discriminateOn(\"status\")\n .alternative(\"loggedIn\", codecForSessionStateLoggedIn())\n .alternative(\"loggedOut\", codecForSessionStateLoggedOut())\n .alternative(\"expired\", codecForSessionStateExpired())\n .build(\"SessionState\");\n\nexport const defaultState: SessionState = {\n status: \"loggedOut\",\n};\n\nexport interface SessionStateHandler {\n state: SessionState;\n logOut(): void;\n expired(): void;\n logIn(info: { username: string; token: AccessToken }): void;\n}\n\nconst SESSION_STATE_KEY = buildStorageKey(\n \"bank-session\",\n codecForSessionState(),\n);\n\n/**\n * Return getters and setters for\n * login credentials and backend's\n * base URL.\n */\nexport function useSessionState(): SessionStateHandler {\n const { value: state, update } = useLocalStorage(\n SESSION_STATE_KEY,\n defaultState,\n );\n\n return {\n state,\n logOut() {\n update(defaultState);\n },\n expired() {\n if (state.status === \"loggedOut\") return;\n const nextState: SessionState = {\n status: \"expired\",\n username: state.username,\n isUserAdministrator: state.username === \"admin\",\n };\n update(nextState);\n },\n logIn(info) {\n // admin is defined by the username\n const nextState: SessionState = {\n status: \"loggedIn\",\n ...info,\n isUserAdministrator: info.username === \"admin\",\n };\n update(nextState);\n cleanAllCache();\n },\n };\n}\n\nfunction cleanAllCache(): void {\n mutate(() => true, undefined, { revalidate: false });\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError } from \"@gnu-taler/taler-util\";\nimport { ErrorLoading } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { usePreferences } from \"../hooks/preferences.js\";\n\nexport function ErrorLoadingWithDebug({ error }: { error: TalerError }): VNode {\n const [pref] = usePreferences();\n return <ErrorLoading error={error} showDetail={pref.showDebugInfo} />;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Codec,\n TranslatedString,\n buildCodecForObject,\n codecForBoolean,\n codecForNumber,\n} from \"@gnu-taler/taler-util\";\nimport {\n buildStorageKey,\n useLocalStorage,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\n\ninterface Preferences {\n showWithdrawalSuccess: boolean;\n showDemoDescription: boolean;\n showInstallWallet: boolean;\n maxWithdrawalAmount: number;\n fastWithdrawal: boolean;\n showDebugInfo: boolean;\n}\n\nexport const codecForPreferences = (): Codec<Preferences> =>\n buildCodecForObject<Preferences>()\n .property(\"showWithdrawalSuccess\", codecForBoolean())\n .property(\"showDemoDescription\", codecForBoolean())\n .property(\"showInstallWallet\", codecForBoolean())\n .property(\"fastWithdrawal\", codecForBoolean())\n .property(\"showDebugInfo\", codecForBoolean())\n .property(\"maxWithdrawalAmount\", codecForNumber())\n .build(\"Settings\");\n\nconst defaultPreferences: Preferences = {\n showWithdrawalSuccess: true,\n showDemoDescription: true,\n showInstallWallet: true,\n maxWithdrawalAmount: 25,\n fastWithdrawal: false,\n showDebugInfo: false,\n};\n\nconst BANK_PREFERENCES_KEY = buildStorageKey(\n \"bank-preferences\",\n codecForPreferences(),\n);\n/**\n * User preferences.\n *\n * @returns tuple of [state, update()]\n */\nexport function usePreferences(): [\n Readonly<Preferences>,\n <T extends keyof Preferences>(key: T, value: Preferences[T]) => void,\n] {\n const { value, update } = useLocalStorage(\n BANK_PREFERENCES_KEY,\n defaultPreferences,\n );\n\n function updateField<T extends keyof Preferences>(k: T, v: Preferences[T]) {\n const newValue = { ...value, [k]: v };\n update(newValue);\n }\n return [value, updateField];\n}\n\nexport function getAllBooleanPreferences(): Array<keyof Preferences> {\n return [\n \"fastWithdrawal\",\n \"showDebugInfo\",\n \"showDemoDescription\",\n \"showInstallWallet\",\n \"showWithdrawalSuccess\",\n ];\n}\n\nexport function getLabelForPreferences(\n k: keyof Preferences,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): TranslatedString {\n switch (k) {\n case \"maxWithdrawalAmount\":\n return i18n.str`Max withdrawal amount`;\n case \"showWithdrawalSuccess\":\n return i18n.str`Show withdrawal confirmation`;\n case \"showDemoDescription\":\n return i18n.str`Show demo description`;\n case \"showInstallWallet\":\n return i18n.str`Show install wallet first`;\n case \"fastWithdrawal\":\n return i18n.str`Use fast withdrawal form`;\n case \"showDebugInfo\":\n return i18n.str`Show debug info`;\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 {\n Button,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n useLocalNotificationHandler,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useEffect, useRef, useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../utils.js\";\nimport { doAutoFocus } from \"./PaytoWireTransferForm.js\";\nimport { USERNAME_REGEX } from \"./RegistrationPage.js\";\n\n/**\n * Collect and submit login data.\n */\nexport function LoginForm({\n currentUser,\n fixedUser,\n routeRegister,\n}: {\n fixedUser?: boolean;\n currentUser?: string;\n routeRegister?: RouteDefinition;\n}): VNode {\n const session = useSessionState();\n\n const sessionUser =\n session.state.status !== \"loggedOut\" ? session.state.username : undefined;\n const [username, setUsername] = useState<string | undefined>(\n currentUser ?? sessionUser,\n );\n const [password, setPassword] = useState<string | undefined>();\n const { i18n } = useTranslationContext();\n const {\n lib: { auth: authenticator },\n } = useBankCoreApiContext();\n const [notification, withErrorHandler] = useLocalNotificationHandler();\n const { config } = useBankCoreApiContext();\n\n const ref = useRef<HTMLInputElement>(null);\n useEffect(function focusInput() {\n ref.current?.focus();\n }, []);\n\n const errors = undefinedIfEmpty({\n username: !username\n ? i18n.str`Missing username`\n : !USERNAME_REGEX.test(username)\n ? i18n.str`Use letters, numbers or any of these characters: - . _ ~`\n : undefined,\n password: !password ? i18n.str`Missing password` : undefined,\n });\n\n async function doLogout() {\n session.logOut();\n }\n\n const loginHandler =\n !username || !password\n ? undefined\n : withErrorHandler(\n async () =>\n authenticator(username).createAccessTokenBasic(username, password, {\n scope: \"readwrite\",\n duration: { d_us: \"forever\" },\n refreshable: true,\n }),\n (result) => {\n session.logIn({ username, token: result.body.access_token });\n },\n (fail) => {\n switch (fail.case) {\n case HttpStatusCode.Unauthorized:\n return i18n.str`Wrong credentials for \"${username}\"`;\n case HttpStatusCode.NotFound:\n return i18n.str`Account not found`;\n }\n },\n );\n\n return (\n <div class=\"flex min-h-full flex-col justify-center \">\n <LocalNotificationBanner notification={notification} />\n <div class=\"mt-10 sm:mx-auto sm:w-full sm:max-w-sm\">\n <form\n class=\"space-y-6\"\n noValidate\n onSubmit={(e) => {\n e.preventDefault();\n }}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n >\n <div>\n <label\n for=\"username\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Username</i18n.Translate>\n </label>\n <div class=\"mt-2\">\n <input\n ref={doAutoFocus}\n type=\"text\"\n name=\"username\"\n id=\"username\"\n class=\"block w-full disabled:bg-gray-200 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={username ?? \"\"}\n disabled={fixedUser}\n enterkeyhint=\"next\"\n placeholder=\"identification\"\n autocomplete=\"username\"\n title={i18n.str`Username of the account`}\n required\n onInput={(e): void => {\n setUsername(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.username}\n isDirty={username !== undefined}\n />\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center justify-between\">\n <label\n for=\"password\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Password</i18n.Translate>\n </label>\n </div>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n name=\"password\"\n id=\"password\"\n autocomplete=\"current-password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n enterkeyhint=\"send\"\n value={password ?? \"\"}\n placeholder=\"Password\"\n title={i18n.str`Password of the account`}\n required\n onInput={(e): void => {\n setPassword(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.password}\n isDirty={password !== undefined}\n />\n </div>\n </div>\n\n {session.state.status !== \"loggedOut\" ? (\n <div class=\"flex justify-between\">\n <button\n type=\"submit\"\n name=\"cancel\"\n class=\"rounded-md bg-white-600 px-3 py-1.5 text-sm font-semibold leading-6 text-black shadow-sm hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600\"\n onClick={(e) => {\n e.preventDefault();\n doLogout();\n }}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n\n <Button\n type=\"submit\"\n name=\"check\"\n class=\"rounded-md bg-indigo-600 disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n handler={loginHandler}\n >\n <i18n.Translate>Check</i18n.Translate>\n </Button>\n </div>\n ) : (\n <div>\n <Button\n type=\"submit\"\n name=\"login\"\n class=\"flex w-full justify-center rounded-md bg-indigo-600 disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n handler={loginHandler}\n >\n <i18n.Translate>Log in</i18n.Translate>\n </Button>\n </div>\n )}\n </form>\n\n {config.allow_registrations && routeRegister && (\n <a\n name=\"register\"\n href={routeRegister.url({})}\n class=\"flex justify-center border-t mt-4 rounded-md bg-blue-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-blue-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600\"\n >\n <i18n.Translate>Register</i18n.Translate>\n </a>\n )}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountString,\n PaytoString,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport {\n ErrorNotification,\n InternationalizationAPI,\n notify,\n notifyError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\n\n/**\n * Validate (the number part of) an amount. If needed,\n * replace comma with a dot. Returns 'false' whenever\n * the input is invalid, the valid amount otherwise.\n */\nconst amountRegex = /^[0-9]+(.[0-9]+)?$/;\nexport function validateAmount(\n maybeAmount: string | undefined,\n): string | undefined {\n if (!maybeAmount || !amountRegex.test(maybeAmount)) {\n return;\n }\n return maybeAmount;\n}\n\n/**\n * Extract IBAN from a Payto URI.\n */\nexport function getIbanFromPayto(url: string): string {\n const pathSplit = new URL(url).pathname.split(\"/\");\n let lastIndex = pathSplit.length - 1;\n // Happens if the path ends with \"/\".\n if (pathSplit[lastIndex] === \"\") lastIndex--;\n const iban = pathSplit[lastIndex];\n return iban;\n}\n\nexport function undefinedIfEmpty<T extends object>(obj: T): T | undefined {\n return Object.keys(obj).some(\n (k) => (obj as Record<string, T>)[k] !== undefined,\n )\n ? obj\n : undefined;\n}\n\nexport type PartialButDefined<T> = {\n [P in keyof T]: T[P] | undefined;\n};\n\n/**\n * every non-map field can be undefined\n */\nexport type WithIntermediate<Type> = {\n [prop in keyof Type]: Type[prop] extends PaytoString\n ? Type[prop] | undefined\n : Type[prop] extends AmountString\n ? Type[prop] | undefined\n : Type[prop] extends TranslatedString\n ? Type[prop] | undefined\n : Type[prop] extends object\n ? WithIntermediate<Type[prop]>\n : Type[prop] | undefined;\n};\nexport type RecursivePartial<Type> = {\n [P in keyof Type]?: Type[P] extends (infer U)[]\n ? RecursivePartial<U>[]\n : Type[P] extends object\n ? RecursivePartial<Type[P]>\n : Type[P];\n};\nexport type ErrorMessageMappingFor<Type> = {\n [prop in keyof Type]+?: Exclude<Type[prop], undefined> extends PaytoString // enumerate known object\n ? TranslatedString\n : Exclude<Type[prop], undefined> extends AmountString\n ? TranslatedString\n : Exclude<Type[prop], undefined> extends TranslatedString\n ? TranslatedString\n : // arrays: every element\n Exclude<Type[prop], undefined> extends (infer U)[]\n ? ErrorMessageMappingFor<U>[]\n : // map: every field\n Exclude<Type[prop], undefined> extends object\n ? ErrorMessageMappingFor<Type[prop]>\n : TranslatedString;\n};\n\nexport enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n}\nexport enum CashoutStatus {\n // The payment was initiated after a valid\n // TAN was received by the bank.\n CONFIRMED = \"confirmed\",\n\n // The cashout was created and now waits\n // for the TAN by the author.\n PENDING = \"pending\",\n}\n\n\nexport const PAGINATED_LIST_SIZE = 5;\n// when doing paginated request, ask for one more\n// and use it to know if there are more to request\nexport const PAGINATED_LIST_REQUEST = PAGINATED_LIST_SIZE + 1;\n\ntype Translator = ReturnType<typeof useTranslationContext>[\"i18n\"];\n\nexport async function withRuntimeErrorHandling<T>(\n i18n: Translator,\n cb: () => Promise<T>,\n): Promise<void> {\n try {\n await cb();\n } catch (error: unknown) {\n if (error instanceof TalerError) {\n notify(buildRequestErrorMessage(i18n, error));\n } else {\n notifyError(\n i18n.str`Operation failed, please report`,\n (error instanceof Error\n ? error.message\n : JSON.stringify(error)) as TranslatedString,\n );\n }\n }\n}\n\nexport function buildRequestErrorMessage(\n i18n: Translator,\n cause: TalerError,\n): ErrorNotification {\n let result: ErrorNotification;\n switch (cause.errorDetail.code) {\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n result = {\n type: \"error\",\n title: i18n.str`Request throttled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n result = {\n type: \"error\",\n title: i18n.str`Malformed response`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Network error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected request error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n default: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n }\n return result;\n}\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/**\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 */\nconst IBAN_REGEX = /^[A-Z][A-Z0-9]*$/;\nexport function validateIBAN(\n account: string,\n i18n: InternationalizationAPI,\n): TranslatedString | undefined {\n if (!IBAN_REGEX.test(account)) {\n return i18n.str`IBAN only have uppercased letters and numbers`;\n }\n // Check total length\n if (account.length < 4) return i18n.str`IBAN numbers have more that 4 digits`;\n if (account.length > 34)\n return i18n.str`IBAN numbers have less that 34 digits`;\n\n const A_code = \"A\".charCodeAt(0);\n const Z_code = \"Z\".charCodeAt(0);\n const IBAN = account.toUpperCase();\n // check supported country\n const code = IBAN.substring(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.substring(4) + account.substring(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 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\nfunction calculate_iban_checksum(str: string): number {\n const numberStr = str.substring(0, 5);\n const rest = str.substring(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\nconst USERNAME_REGEX = /^[A-Za-z][A-Za-z0-9]*$/;\n\nexport function validateTalerBank(\n account: string,\n i18n: InternationalizationAPI,\n): TranslatedString | undefined {\n if (!USERNAME_REGEX.test(account)) {\n return i18n.str`Account only have letters and numbers`;\n }\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n AmountString,\n Amounts,\n CurrencySpecification,\n FRAC_SEPARATOR,\n HttpStatusCode,\n PaytoString,\n PaytoUri,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n buildPayto,\n parsePaytoUri,\n stringifyPaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n InternationalizationAPI,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, Ref, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { mutate } from \"swr\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty, validateIBAN, validateTalerBank } from \"../utils.js\";\n\ninterface Props {\n focus?: boolean;\n withAccount?: string;\n withSubject?: string;\n withAmount?: string;\n onSuccess: () => void;\n onAuthorizationRequired: () => void;\n routeCancel?: RouteDefinition;\n routeCashout?: RouteDefinition;\n routeHere: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n limit: AmountJson;\n balance: AmountJson;\n}\n\nexport function PaytoWireTransferForm({\n focus,\n withAccount,\n withSubject,\n withAmount,\n onSuccess,\n routeCancel,\n routeCashout,\n routeHere,\n onAuthorizationRequired,\n limit,\n}: Props): VNode {\n const [inputType, setInputType] = useState<\"form\" | \"payto\" | \"qr\">(\"form\");\n const isRawPayto = inputType !== \"form\";\n\n const { state: credentials } = useSessionState();\n const {\n lib: { bank: api },\n config,\n url,\n } = useBankCoreApiContext();\n\n const sendingToFixedAccount = withAccount !== undefined;\n\n const [account, setAccount] = useState<string | undefined>(withAccount);\n const [subject, setSubject] = useState<string | undefined>(withSubject);\n const [amount, setAmount] = useState<string | undefined>(withAmount);\n const [, updateBankState] = useBankState();\n\n const [rawPaytoInput, rawPaytoInputSetter] = useState<string | undefined>(\n undefined,\n );\n const { i18n } = useTranslationContext();\n\n const trimmedAmountStr = amount?.trim();\n const parsedAmount = Amounts.parse(`${limit.currency}:${trimmedAmountStr}`);\n const [notification, notify, handleError] = useLocalNotification();\n\n const paytoType =\n config.wire_type === \"X_TALER_BANK\"\n ? (\"x-taler-bank\" as const)\n : (\"iban\" as const);\n\n const errorsWire = undefinedIfEmpty({\n account: !account\n ? i18n.str`Required`\n : paytoType === \"iban\"\n ? validateIBAN(account, i18n)\n : paytoType === \"x-taler-bank\"\n ? validateTalerBank(account, i18n)\n : undefined,\n subject: !subject ? i18n.str`Required` : validateSubject(subject, i18n),\n amount: !trimmedAmountStr\n ? i18n.str`Required`\n : !parsedAmount\n ? i18n.str`Not valid`\n : validateAmount(parsedAmount, limit, i18n),\n });\n\n const parsed = !rawPaytoInput ? undefined : parsePaytoUri(rawPaytoInput);\n\n const errorsPayto = undefinedIfEmpty({\n rawPaytoInput: !rawPaytoInput\n ? i18n.str`Required`\n : !parsed\n ? i18n.str`Does not follow the pattern`\n : validateRawPayto(parsed, limit, url.host, i18n, paytoType),\n });\n\n async function doSend() {\n let payto_uri: PaytoString | undefined;\n let sendingAmount: AmountString | undefined;\n\n if (credentials.status !== \"loggedIn\") return;\n let acName: string | undefined;\n if (isRawPayto) {\n const p = parsePaytoUri(rawPaytoInput!);\n if (!p) return;\n sendingAmount = p.params.amount as AmountString;\n delete p.params.amount;\n // if this payto is valid then it already have message\n payto_uri = stringifyPaytoUri(p);\n acName = !p.isKnown\n ? undefined\n : p.targetType === \"iban\"\n ? p.iban\n : p.targetType === \"bitcoin\"\n ? p.address\n : p.targetType === \"x-taler-bank\"\n ? p.account\n : assertUnreachable(p);\n } else {\n if (!account || !subject) return;\n let payto;\n acName = account;\n switch (paytoType) {\n case \"x-taler-bank\": {\n payto = buildPayto(\"x-taler-bank\", url.host, account);\n\n break;\n }\n case \"iban\": {\n payto = buildPayto(\"iban\", account, undefined);\n break;\n }\n default:\n assertUnreachable(paytoType);\n }\n\n payto.params.message = encodeURIComponent(subject);\n payto_uri = stringifyPaytoUri(payto);\n sendingAmount = `${limit.currency}:${trimmedAmountStr}` as AmountString;\n }\n const puri = payto_uri;\n const sAmount = sendingAmount;\n\n await handleError(async () => {\n const request = {\n payto_uri: puri,\n amount: sAmount,\n };\n const resp = await api.createTransaction(credentials, request);\n mutate(() => true);\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The request was invalid or the payto://-URI used unacceptable features.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`Not enough permission to complete the operation.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return notify({\n type: \"error\",\n title: i18n.str`Bank administrator can't be the transfer creditor.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return notify({\n type: \"error\",\n title: i18n.str`The destination account \"${\n acName ?? puri\n }\" was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return notify({\n type: \"error\",\n title: i18n.str`The origin and the destination of the transfer can't be the same.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`Your balance is not enough.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The origin account \"${puri}\" was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"create-transaction\",\n id: String(resp.body.challenge_id),\n location: routeHere.url({\n account: account ?? \"\",\n amount,\n subject,\n }),\n sent: AbsoluteTime.never(),\n request,\n });\n return onAuthorizationRequired();\n }\n default:\n assertUnreachable(resp);\n }\n }\n notifyInfo(i18n.str`Wire transfer created!`);\n onSuccess();\n setAmount(undefined);\n setAccount(undefined);\n setSubject(undefined);\n rawPaytoInputSetter(undefined);\n });\n }\n\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 my-4 md:grid-cols-3 bg-gray-100 px-4 pb-4 rounded-lg\">\n {/* <div class=\"\">\n <div class=\"px-2 grid grid-cols-1 gap-y-4 sm:gap-x-4\">\n <label\n class={\n \"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none\" +\n (!isRawPayto\n ? \"border-indigo-600 ring-2 ring-indigo-600\"\n : \"border-gray-300\")\n }\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Newsletter\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-0-label\"\n aria-describedby=\"project-type-0-description-0 project-type-0-description-1\"\n onChange={() => {\n setIsRawPayto(false);\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Using a form</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n\n {sendingToFixedAccount ? undefined : (\n <label\n class={\n \"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none\" +\n (isRawPayto\n ? \"border-indigo-600 ring-2 ring-indigo-600\"\n : \"border-gray-300\")\n }\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-1-label\"\n aria-describedby=\"project-type-1-description-0 project-type-1-description-1\"\n onChange={() => {\n\n setIsRawPayto(true);\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Import payto:// URI</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n )}\n {routeCashout ? (\n <a\n name=\"do cashout\"\n href={routeCashout.url({})}\n class=\"bg-white p-4 rounded-lg text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cashout</i18n.Translate>\n </a>\n ) : undefined}\n </div>\n </div> */}\n\n <div>\n <fieldset class=\"px-2 grid grid-cols-1 gap-y-4 sm:gap-x-4\">\n <legend class=\"sr-only\">\n <i18n.Translate>Input wire transfer detail</i18n.Translate>\n </legend>\n <div class=\"-space-y-px rounded-md \">\n <label\n data-checked={inputType === \"form\"}\n class=\"group rounded-tl-md rounded-tr-md relative flex cursor-pointer border p-4 focus:outline-none bg-white data-[checked=true]:z-10 data-[checked=true]:border-indigo-200 data-[checked=true]:bg-indigo-50\"\n >\n <input\n type=\"radio\"\n name=\"input-type\"\n onChange={() => {\n if (parsed && parsed.isKnown) {\n switch (parsed.targetType) {\n case \"iban\": {\n setAccount(parsed.iban);\n break;\n }\n case \"x-taler-bank\": {\n setAccount(parsed.account);\n break;\n }\n case \"bitcoin\": {\n break;\n }\n default: {\n assertUnreachable(parsed);\n }\n }\n const amountStr = !parsed.params\n ? undefined\n : parsed.params[\"amount\"];\n if (amountStr) {\n const amount = Amounts.parse(amountStr);\n if (amount) {\n setAmount(Amounts.stringifyValue(amount));\n }\n }\n const subject = parsed.params[\"message\"];\n if (subject) {\n setSubject(subject);\n }\n }\n setInputType(\"form\");\n }}\n checked={inputType === \"form\"}\n value=\"form\"\n class=\"mt-0.5 h-4 w-4 shrink-0 cursor-pointer text-indigo-600 border-gray-300 focus:ring-indigo-600 active:ring-2 active:ring-offset-2 active:ring-indigo-600\"\n />\n <span class=\"ml-3 flex flex-col\">\n {/* <!-- Checked: \"text-indigo-900\", Not Checked: \"text-gray-900\" --> */}\n <span\n data-checked={inputType === \"form\"}\n class=\"block text-sm font-medium data-[checked=true]:text-indigo-900\"\n >\n <i18n.Translate>Using a form</i18n.Translate>\n </span>\n </span>\n </label>\n {sendingToFixedAccount ? undefined : (\n <Fragment>\n <label\n data-checked={inputType === \"payto\"}\n class=\"relative flex cursor-pointer border p-4 focus:outline-none bg-white data-[checked=true]:z-10 data-[checked=true]:border-indigo-200 data-[checked=true]:bg-indigo-50\"\n >\n <input\n type=\"radio\"\n name=\"input-type\"\n onChange={() => {\n if (account) {\n let payto;\n switch (paytoType) {\n case \"x-taler-bank\": {\n payto = buildPayto(\n \"x-taler-bank\",\n url.host,\n account,\n );\n if (parsedAmount) {\n payto.params[\"amount\"] =\n Amounts.stringify(parsedAmount);\n }\n if (subject) {\n payto.params[\"message\"] = subject;\n }\n break;\n }\n case \"iban\": {\n payto = buildPayto(\"iban\", account, undefined);\n if (parsedAmount) {\n payto.params[\"amount\"] =\n Amounts.stringify(parsedAmount);\n }\n if (subject) {\n payto.params[\"message\"] = subject;\n }\n break;\n }\n default:\n assertUnreachable(paytoType);\n }\n rawPaytoInputSetter(stringifyPaytoUri(payto));\n }\n setInputType(\"payto\");\n }}\n checked={inputType === \"payto\"}\n value=\"payto\"\n class=\"mt-0.5 h-4 w-4 shrink-0 cursor-pointer text-indigo-600 border-gray-300 focus:ring-indigo-600 active:ring-2 active:ring-offset-2 active:ring-indigo-600\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n data-checked={inputType === \"payto\"}\n class=\"block font-medium data-[checked=true]:text-indigo-900\"\n >\n payto:// URI\n </span>\n <span\n data-checked={inputType === \"payto\"}\n class=\"block text-sm text-gray-500 data-[checked=true]:text-indigo-600\"\n >\n <i18n.Translate>\n A special URI that indicate the transfer amount and\n account target.\n </i18n.Translate>\n </span>\n </span>\n </label>\n {\n //FIXME: add QR support\n false && (\n <label\n data-checked={inputType === \"qr\"}\n class=\"rounded-bl-md rounded-br-md relative flex cursor-pointer border p-4 focus:outline-none bg-white data-[checked=true]:z-10 data-[checked=true]:border-indigo-200 data-[checked=true]:bg-indigo-50\"\n >\n <input\n type=\"radio\"\n name=\"input-type\"\n onChange={() => {\n setInputType(\"qr\");\n }}\n checked={inputType === \"qr\"}\n value=\"qr\"\n class=\"mt-0.5 h-4 w-4 shrink-0 cursor-pointer text-indigo-600 border-gray-300 focus:ring-indigo-600 active:ring-2 active:ring-offset-2 active:ring-indigo-600\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n data-checked={inputType === \"qr\"}\n class=\"block font-medium data-[checked=true]:text-indigo-900\"\n >\n <i18n.Translate>QR code</i18n.Translate>\n </span>\n <span\n data-checked={inputType === \"qr\"}\n class=\"block text-sm text-gray-500 data-[checked=true]:text-indigo-600\"\n >\n <i18n.Translate>\n If you have a camera in this device you can import a\n payto:// URI from a QR code.\n </i18n.Translate>\n </span>\n </span>\n </label>\n )\n }\n </Fragment>\n )}\n </div>\n {routeCashout ? (\n <a\n name=\"do cashout\"\n href={routeCashout.url({})}\n class=\"bg-white p-4 rounded-lg text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cashout</i18n.Translate>\n </a>\n ) : undefined}\n </fieldset>\n </div>\n\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md sm:rounded-xl md:col-span-2 w-fit mx-auto\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"p-4 sm:p-8\">\n {!isRawPayto ? (\n <div class=\"grid max-w-xs grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n {(() => {\n switch (paytoType) {\n case \"x-taler-bank\": {\n return (\n <TextField\n id=\"x-taler-bank\"\n required\n label={i18n.str`Recipient`}\n help={i18n.str`Id of the recipient's account`}\n error={errorsWire?.account}\n onChange={setAccount}\n value={account}\n placeholder={i18n.str`username`}\n focus={focus}\n disabled={sendingToFixedAccount}\n />\n );\n }\n case \"iban\": {\n return (\n <TextField\n id=\"iban\"\n required\n label={i18n.str`Recipient`}\n help={i18n.str`IBAN of the recipient's account`}\n placeholder={\"CC0123456789\" as TranslatedString}\n error={errorsWire?.account}\n onChange={(v) => setAccount(v.toUpperCase())}\n value={account}\n focus={focus}\n disabled={sendingToFixedAccount}\n />\n );\n }\n default:\n assertUnreachable(paytoType);\n }\n })()}\n\n <div class=\"sm:col-span-5\">\n <label\n for=\"subject\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {i18n.str`Transfer subject`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"subject\"\n id=\"subject\"\n autocomplete=\"off\"\n placeholder={i18n.str`Subject`}\n value={subject ?? \"\"}\n required\n onInput={(e): void => {\n setSubject(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errorsWire?.subject}\n isDirty={subject !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Some text to identify the transfer\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n for=\"amount\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {i18n.str`Amount`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <InputAmount\n name=\"amount\"\n left\n currency={limit.currency}\n value={trimmedAmountStr}\n onChange={(d) => {\n setAmount(d);\n }}\n />\n <ShowInputErrorLabel\n message={errorsWire?.amount}\n isDirty={trimmedAmountStr !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Amount to transfer</i18n.Translate>\n </p>\n </div>\n </div>\n ) : (\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6 w-full\">\n <div class=\"sm:col-span-6\">\n <label\n for=\"address\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {i18n.str`Payto URI:`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <textarea\n ref={focus ? doAutoFocus : undefined}\n name=\"address\"\n id=\"address\"\n type=\"textarea\"\n rows={5}\n class=\"block overflow-hidden w-44 sm:w-96 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={rawPaytoInput ?? \"\"}\n required\n title={i18n.str`Uniform resource identifier of the target account`}\n placeholder={((): TranslatedString => {\n switch (paytoType) {\n case \"x-taler-bank\":\n return i18n.str`payto://x-taler-bank/[bank-host]/[receiver-account]?message=[subject]&amount=[${limit.currency}:X.Y]`;\n case \"iban\":\n return i18n.str`payto://iban/[receiver-iban]?message=[subject]&amount=[${limit.currency}:X.Y]`;\n }\n })()}\n onInput={(e): void => {\n rawPaytoInputSetter(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errorsPayto?.rawPaytoInput}\n isDirty={rawPaytoInput !== undefined}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n {routeCancel ? (\n <a\n name=\"cancel\"\n href={routeCancel.url({})}\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n ) : (\n <div />\n )}\n <button\n type=\"submit\"\n name=\"send\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={isRawPayto ? !!errorsPayto : !!errorsWire}\n onClick={(e) => {\n e.preventDefault();\n doSend();\n }}\n >\n <i18n.Translate>Send</i18n.Translate>\n </button>\n </div>\n <LocalNotificationBanner notification={notification} />\n </form>\n </div>\n );\n}\n\n/**\n * Show the element when the load ended\n * @param element\n */\nexport function doAutoFocus(element: HTMLElement | null) {\n if (element) {\n setTimeout(() => {\n element.focus({ preventScroll: true });\n element.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n }, 100);\n }\n}\n\nexport function InputAmount(\n {\n currency,\n name,\n value,\n error,\n left,\n onChange,\n }: {\n error?: string;\n currency: string;\n name: string;\n left?: boolean | undefined;\n value: string | undefined;\n onChange?: (s: string) => void;\n },\n ref: Ref<HTMLInputElement>,\n): VNode {\n const { config } = useBankCoreApiContext();\n return (\n <div class=\"mt-2\">\n <div class=\"flex rounded-md shadow-sm border-0 ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600\">\n <div class=\"pointer-events-none inset-y-0 flex items-center px-3\">\n <span class=\"text-gray-500 sm:text-sm\">{currency}</span>\n </div>\n <input\n type=\"number\"\n data-left={left}\n class=\"disabled:bg-gray-200 text-right rounded-md rounded-l-none data-[left=true]:text-left w-full py-1.5 pl-3 text-gray-900 placeholder:text-gray-400 sm:text-sm sm:leading-6\"\n placeholder=\"0.00\"\n aria-describedby=\"price-currency\"\n ref={ref}\n name={name}\n id={name}\n autocomplete=\"off\"\n value={value ?? \"\"}\n disabled={!onChange}\n onInput={(e) => {\n if (!onChange) return;\n const l = e.currentTarget.value.length;\n const sep_pos = e.currentTarget.value.indexOf(FRAC_SEPARATOR);\n if (\n sep_pos !== -1 &&\n l - sep_pos - 1 >\n config.currency_specification.num_fractional_input_digits\n ) {\n e.currentTarget.value = e.currentTarget.value.substring(\n 0,\n sep_pos +\n config.currency_specification.num_fractional_input_digits +\n 1,\n );\n }\n onChange(e.currentTarget.value);\n }}\n />\n </div>\n <ShowInputErrorLabel message={error} isDirty={value !== undefined} />\n </div>\n );\n}\n\nexport function RenderAmount({\n value,\n spec,\n negative,\n withColor,\n hideSmall,\n}: {\n spec: CurrencySpecification;\n value: AmountJson;\n hideSmall?: boolean;\n negative?: boolean;\n withColor?: boolean;\n}): VNode {\n const neg = !!negative; // convert to true or false\n\n const { currency, normal, small } = Amounts.stringifyValueWithSpec(\n value,\n spec,\n );\n\n return (\n <span\n data-negative={withColor ? neg : undefined}\n class=\"whitespace-nowrap data-[negative=false]:text-green-600 data-[negative=true]:text-red-600\"\n >\n {negative ? \"- \" : undefined}\n {currency} {normal}{\" \"}\n {!hideSmall && small && <sup class=\"-ml-1\">{small}</sup>}\n </span>\n );\n}\n\nfunction validateRawPayto(\n parsed: PaytoUri,\n limit: AmountJson,\n host: string,\n i18n: InternationalizationAPI,\n type: \"iban\" | \"x-taler-bank\",\n): TranslatedString | undefined {\n if (!parsed.isKnown) {\n return i18n.str`The target type is unknown, use \"${type}\"`;\n }\n let result: TranslatedString | undefined;\n switch (type) {\n case \"x-taler-bank\": {\n if (parsed.targetType !== \"x-taler-bank\") {\n return i18n.str`Only \"x-taler-bank\" target are supported`;\n }\n\n if (parsed.host !== host) {\n return i18n.str`Only this host is allowed. Use \"${host}\"`;\n }\n\n if (!parsed.account) {\n return i18n.str`Missing account name`;\n }\n const result = validateTalerBank(parsed.account, i18n);\n if (result) return result;\n break;\n }\n case \"iban\": {\n if (parsed.targetType !== \"iban\") {\n return i18n.str`Only \"IBAN\" target are supported`;\n }\n const result = validateIBAN(parsed.iban, i18n);\n if (result) return result;\n break;\n }\n default:\n assertUnreachable(type);\n }\n if (!parsed.params.amount) {\n return i18n.str`Missing \"amount\" parameter to specify the amount to be transferred`;\n }\n const amount = Amounts.parse(parsed.params.amount);\n if (!amount) {\n return i18n.str`The \"amount\" parameter is not valid`;\n }\n result = validateAmount(amount, limit, i18n);\n if (result) return result;\n\n if (!parsed.params.message) {\n return i18n.str`Missing the \"message\" parameter to specify a reference text for the transfer`;\n }\n const subject = parsed.params.message;\n result = validateSubject(subject, i18n);\n if (result) return result;\n\n return undefined;\n}\n\nfunction validateAmount(\n amount: AmountJson,\n limit: AmountJson,\n i18n: InternationalizationAPI,\n): TranslatedString | undefined {\n if (amount.currency !== limit.currency) {\n return i18n.str`The only currency allowed is \"${limit.currency}\"`;\n }\n if (Amounts.isZero(amount)) {\n return i18n.str`Can't transfer zero amount`;\n }\n if (Amounts.cmp(limit, amount) === -1) {\n return i18n.str`Balance is not enough`;\n }\n return undefined;\n}\n\nfunction validateSubject(\n text: string,\n i18n: InternationalizationAPI,\n): TranslatedString | undefined {\n if (text.length < 2) {\n return i18n.str`Use a longer subject`;\n }\n return undefined;\n}\n\ninterface PaytoFieldProps {\n id: string;\n label: TranslatedString;\n required?: boolean;\n help?: TranslatedString;\n placeholder?: TranslatedString;\n error: string | undefined;\n value: string | undefined;\n rightIcons?: VNode;\n onChange: (p: string) => void;\n focus?: boolean;\n disabled?: boolean;\n}\n\nfunction Wrapper({\n withIcon,\n children,\n}: {\n withIcon: boolean;\n children: ComponentChildren;\n}): VNode {\n if (withIcon) {\n return <div class=\"flex justify-between\">{children}</div>;\n }\n return <Fragment>{children}</Fragment>;\n}\n\nexport function TextField({\n id,\n label,\n help,\n focus,\n disabled,\n onChange,\n placeholder,\n rightIcons,\n required,\n value,\n error,\n}: PaytoFieldProps): VNode {\n return (\n <div class=\"sm:col-span-5\">\n <label for={id} class=\"block text-sm font-medium leading-6 text-gray-900\">\n {label}\n {required && <b style={{ color: \"red\" }}> *</b>}\n </label>\n <div class=\"mt-2\">\n <Wrapper withIcon={rightIcons !== undefined}>\n <input\n ref={focus ? doAutoFocus : undefined}\n type=\"text\"\n class=\"block w-full disabled:bg-gray-200 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name={id}\n id={id}\n disabled={disabled}\n value={value ?? \"\"}\n placeholder={placeholder}\n autocomplete=\"off\"\n required\n onInput={(e): void => {\n onChange(e.currentTarget.value);\n }}\n />\n {rightIcons}\n </Wrapper>\n <ShowInputErrorLabel message={error} isDirty={value !== undefined} />\n </div>\n {help && <p class=\"mt-2 text-sm text-gray-500\">{help}</p>}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Codec,\n TalerCorebankApi,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAbsoluteTime,\n codecForAny,\n codecForConstString,\n codecForString,\n codecForTanTransmission,\n codecOptional,\n} from \"@gnu-taler/taler-util\";\nimport { buildStorageKey, useLocalStorage } from \"@gnu-taler/web-util/browser\";\nimport { AppLocation } from \"@gnu-taler/web-util/browser\";\n\nexport type ChallengeInProgess =\n | DeleteAccountChallenge\n | UpdateAccountChallenge\n | UpdatePasswordChallenge\n | CreateTransactionChallenge\n | ConfirmWithdrawalChallenge\n | CashoutChallenge;\n\ntype BaseChallenge<OpType extends string, ReqType> = {\n id: string;\n operation: OpType;\n sent: AbsoluteTime;\n location: AppLocation;\n info?: TalerCorebankApi.TanTransmission;\n request: ReqType;\n};\n\ntype DeleteAccountChallenge = BaseChallenge<\"delete-account\", string>;\ntype UpdateAccountChallenge = BaseChallenge<\n \"update-account\",\n TalerCorebankApi.AccountReconfiguration\n>;\ntype UpdatePasswordChallenge = BaseChallenge<\n \"update-password\",\n TalerCorebankApi.AccountPasswordChange\n>;\ntype CreateTransactionChallenge = BaseChallenge<\n \"create-transaction\",\n TalerCorebankApi.CreateTransactionRequest\n>;\ntype ConfirmWithdrawalChallenge = BaseChallenge<\"confirm-withdrawal\", string>;\ntype CashoutChallenge = BaseChallenge<\n \"create-cashout\",\n TalerCorebankApi.CashoutRequest\n>;\n\nconst codecForChallengeUpdatePassword = (): Codec<UpdatePasswordChallenge> =>\n buildCodecForObject<UpdatePasswordChallenge>()\n .property(\"operation\", codecForConstString(\"update-password\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForAny())\n .build(\"UpdatePasswordChallenge\");\n\nconst codecForChallengeDeleteAccount = (): Codec<DeleteAccountChallenge> =>\n buildCodecForObject<DeleteAccountChallenge>()\n .property(\"operation\", codecForConstString(\"delete-account\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"request\", codecForString())\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .build(\"DeleteAccountChallenge\");\n\nconst codecForChallengeUpdateAccount = (): Codec<UpdateAccountChallenge> =>\n buildCodecForObject<UpdateAccountChallenge>()\n .property(\"operation\", codecForConstString(\"update-account\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForAny())\n .build(\"UpdateAccountChallenge\");\n\nconst codecForChallengeCreateTransaction =\n (): Codec<CreateTransactionChallenge> =>\n buildCodecForObject<CreateTransactionChallenge>()\n .property(\"operation\", codecForConstString(\"create-transaction\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForAny())\n .build(\"CreateTransactionChallenge\");\n\nconst codecForChallengeConfirmWithdrawal =\n (): Codec<ConfirmWithdrawalChallenge> =>\n buildCodecForObject<ConfirmWithdrawalChallenge>()\n .property(\"operation\", codecForConstString(\"confirm-withdrawal\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForString())\n .build(\"ConfirmWithdrawalChallenge\");\n\nconst codecForAppLocation = codecForString as () => Codec<AppLocation>;\n\nconst codecForChallengeCashout = (): Codec<CashoutChallenge> =>\n buildCodecForObject<CashoutChallenge>()\n .property(\"operation\", codecForConstString(\"create-cashout\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForAny())\n .build(\"CashoutChallenge\");\n\nconst codecForChallenge = (): Codec<ChallengeInProgess> =>\n buildCodecForUnion<ChallengeInProgess>()\n .discriminateOn(\"operation\")\n .alternative(\"confirm-withdrawal\", codecForChallengeConfirmWithdrawal())\n .alternative(\"create-cashout\", codecForChallengeCashout())\n .alternative(\"create-transaction\", codecForChallengeCreateTransaction())\n .alternative(\"delete-account\", codecForChallengeDeleteAccount())\n .alternative(\"update-account\", codecForChallengeUpdateAccount())\n .alternative(\"update-password\", codecForChallengeUpdatePassword())\n .build(\"ChallengeInProgess\");\n\ninterface BankState {\n currentWithdrawalOperationId: string | undefined;\n currentChallenge: ChallengeInProgess | undefined;\n}\n\nexport const codecForBankState = (): Codec<BankState> =>\n buildCodecForObject<BankState>()\n .property(\"currentWithdrawalOperationId\", codecOptional(codecForString()))\n .property(\"currentChallenge\", codecOptional(codecForChallenge()))\n .build(\"BankState\");\n\nconst defaultBankState: BankState = {\n currentWithdrawalOperationId: undefined,\n currentChallenge: undefined,\n};\n\nconst BANK_STATE_KEY = buildStorageKey(\"bank-app-state\", codecForBankState());\n\n/**\n * Client state saved in local storage.\n *\n * This information is saved in the client because\n * the backend server session API is not enough.\n *\n * @returns tuple of [state, update(), reset()]\n */\nexport function useBankState(): [\n Readonly<BankState>,\n <T extends keyof BankState>(key: T, value: BankState[T]) => void,\n () => void,\n] {\n const { value, update } = useLocalStorage(BANK_STATE_KEY, defaultBankState);\n\n function updateField<T extends keyof BankState>(k: T, v: BankState[T]) {\n const newValue = { ...value, [k]: v };\n update(newValue);\n }\n function reset() {\n update(defaultBankState);\n }\n return [value, updateField, reset];\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n HttpStatusCode,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n LocalNotificationBanner,\n ShowInputErrorLabel,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSettingsContext } from \"../context/settings.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../utils.js\";\nimport { getRandomPassword, getRandomUsername } from \"./rnd.js\";\n\nexport function RegistrationPage({\n onRegistrationSuccesful,\n routeCancel,\n}: {\n onRegistrationSuccesful: (user: string, password: string) => void;\n routeCancel: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n if (!config.allow_registrations) {\n return (\n <p>{i18n.str`Currently, the bank is not accepting new registrations!`}</p>\n );\n }\n return (\n <RegistrationForm\n onRegistrationSuccesful={onRegistrationSuccesful}\n routeCancel={routeCancel}\n />\n );\n}\n\n// eslint-disable-next-line no-useless-escape\nexport const USERNAME_REGEX = /^[a-zA-Z0-9\\-\\.\\_\\~]*$/;\nexport const PHONE_REGEX = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]\\d{3}[\\s.-]\\d{4}$/;\nexport const EMAIL_REGEX = /^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/;\n\n/**\n * Collect and submit registration data.\n */\nfunction RegistrationForm({\n onRegistrationSuccesful,\n routeCancel,\n}: {\n onRegistrationSuccesful: (user: string, password: string) => void;\n routeCancel: RouteDefinition;\n}): VNode {\n const [username, setUsername] = useState<string | undefined>();\n const [name, setName] = useState<string | undefined>();\n const [password, setPassword] = useState<string | undefined>();\n // const [phone, setPhone] = useState<string | undefined>();\n // const [email, setEmail] = useState<string | undefined>();\n const [repeatPassword, setRepeatPassword] = useState<string | undefined>();\n const [notification, , handleError] = useLocalNotification();\n const settings = useSettingsContext();\n\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n // const { register } = useTestingAPI();\n const { i18n } = useTranslationContext();\n\n const errors = undefinedIfEmpty({\n name: !name ? i18n.str`Missing name` : undefined,\n username: !username\n ? i18n.str`Missing username`\n : !USERNAME_REGEX.test(username)\n ? i18n.str`Use letters, numbers or any of these characters: - . _ ~`\n : undefined,\n // phone: !phone\n // ? undefined\n // : !PHONE_REGEX.test(phone)\n // ? i18n.str`Use letters and numbers only, and start with a lowercase letter`\n // : undefined,\n // email: !email\n // ? undefined\n // : !EMAIL_REGEX.test(email)\n // ? i18n.str`Use letters and numbers only, and start with a lowercase letter`\n // : undefined,\n password: !password ? i18n.str`Missing password` : undefined,\n repeatPassword: !repeatPassword\n ? i18n.str`Missing password`\n : repeatPassword !== password\n ? i18n.str`Passwords don't match`\n : undefined,\n });\n\n async function doRegistrationAndLogin(\n name: string,\n username: string,\n password: string,\n onComplete: () => void,\n ) {\n await handleError(async (onError) => {\n const resp = await api.createAccount(undefined, {\n name,\n username,\n password,\n });\n if (resp.type === \"ok\") {\n onComplete();\n } else {\n onError(resp, (_case) => {\n switch (_case) {\n case HttpStatusCode.BadRequest:\n return i18n.str`Server replied with invalid phone or email.`;\n case HttpStatusCode.Unauthorized:\n return i18n.str`No enough permission to create that account.`;\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return i18n.str`Registration is disabled because the bank ran out of bonus credit.`;\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return i18n.str`That username can't be used because is reserved.`;\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return i18n.str`That username is already taken.`;\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return i18n.str`That account id is already taken.`;\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return i18n.str`No information for the selected authentication channel.`;\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return i18n.str`Authentication channel is not supported.`;\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return i18n.str`Only admin is allow to set debt limit.`;\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return i18n.str`Only admin can create accounts with second factor authentication.`;\n }\n });\n }\n });\n }\n\n async function doRegistrationStep() {\n if (!username || !password || !name) return;\n await doRegistrationAndLogin(name, username, password, () => {\n setUsername(undefined);\n setPassword(undefined);\n setRepeatPassword(undefined);\n onRegistrationSuccesful(username, password);\n });\n }\n\n async function doRandomRegistration() {\n const user = getRandomUsername();\n\n const password = settings.simplePasswordForRandomAccounts\n ? \"123\"\n : getRandomPassword();\n const username = `_${user.first}-${user.second}_`;\n const name = `${capitalizeFirstLetter(user.first)} ${capitalizeFirstLetter(\n user.second,\n )}`;\n await doRegistrationAndLogin(name, username, password, () => {\n onRegistrationSuccesful(username, password);\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"flex min-h-full flex-col justify-center\">\n <div class=\"sm:mx-auto sm:w-full sm:max-w-sm\">\n <h2 class=\"text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">{i18n.str`Account registration`}</h2>\n </div>\n\n <div class=\"mt-10 sm:mx-auto sm:w-full sm:max-w-sm\">\n <form\n class=\"space-y-6\"\n noValidate\n onSubmit={(e) => {\n e.preventDefault();\n }}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n >\n <div>\n <label\n for=\"username\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Login username</i18n.Translate>\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n autoFocus\n type=\"text\"\n name=\"username\"\n id=\"username\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={username ?? \"\"}\n enterkeyhint=\"next\"\n placeholder=\"account identification to login\"\n autocomplete=\"username\"\n required\n onInput={(e): void => {\n setUsername(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.username}\n isDirty={username !== undefined}\n />\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center justify-between\">\n <label\n for=\"password\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Password</i18n.Translate>\n <b style={{ color: \"red\" }}> *</b>\n </label>\n </div>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n name=\"password\"\n id=\"password\"\n autocomplete=\"current-password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n enterkeyhint=\"send\"\n value={password ?? \"\"}\n placeholder=\"Password\"\n required\n onInput={(e): void => {\n setPassword(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.password}\n isDirty={password !== undefined}\n />\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center justify-between\">\n <label\n for=\"register-repeat\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Repeat password</i18n.Translate>\n <b style={{ color: \"red\" }}> *</b>\n </label>\n </div>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n name=\"register-repeat\"\n id=\"register-repeat\"\n autocomplete=\"current-password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n enterkeyhint=\"send\"\n value={repeatPassword ?? \"\"}\n placeholder=\"Same password\"\n required\n onInput={(e): void => {\n setRepeatPassword(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.repeatPassword}\n isDirty={repeatPassword !== undefined}\n />\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center justify-between\">\n <label\n for=\"name\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Full name</i18n.Translate>\n <b style={{ color: \"red\" }}> *</b>\n </label>\n </div>\n <div class=\"mt-2\">\n <input\n autoFocus\n type=\"text\"\n name=\"name\"\n id=\"name\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={name ?? \"\"}\n enterkeyhint=\"next\"\n placeholder=\"John Doe\"\n autocomplete=\"name\"\n required\n onInput={(e): void => {\n setName(e.currentTarget.value);\n }}\n />\n {/* <ShowInputErrorLabel\n message={errors?.name}\n isDirty={name !== undefined}\n /> */}\n </div>\n </div>\n\n {/* <div>\n <label for=\"phone\" class=\"block text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Phone</i18n.Translate>\n </label>\n <div class=\"mt-2\">\n <input\n autoFocus\n type=\"text\"\n name=\"phone\"\n id=\"phone\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={phone ?? \"\"}\n enterkeyhint=\"next\"\n placeholder=\"your phone\"\n autocomplete=\"none\"\n onInput={(e): void => {\n setPhone(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.phone}\n isDirty={phone !== undefined}\n />\n </div>\n </div>\n <div>\n <label for=\"email\" class=\"block text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Email</i18n.Translate>\n </label>\n <div class=\"mt-2\">\n <input\n autoFocus\n type=\"text\"\n name=\"email\"\n id=\"email\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={email ?? \"\"}\n enterkeyhint=\"next\"\n placeholder=\"your email\"\n autocomplete=\"email\"\n onInput={(e): void => {\n setEmail(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.email}\n isDirty={email !== undefined}\n />\n </div>\n </div> */}\n\n <div class=\"flex w-full justify-between\">\n <a\n name=\"cancel\"\n href={routeCancel.url({})}\n class=\"ring-1 ring-gray-600 rounded-md bg-white disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-black shadow-sm hover:bg-white-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"register\"\n class=\" rounded-md bg-indigo-600 disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n onClick={async (e) => {\n e.preventDefault();\n\n doRegistrationStep();\n }}\n >\n <i18n.Translate>Register</i18n.Translate>\n </button>\n </div>\n </form>\n\n {settings.allowRandomAccountCreation && (\n <p class=\"mt-10 text-center text-sm text-gray-500 border-t\">\n <button\n type=\"submit\"\n name=\"create random\"\n class=\"flex mt-4 w-full justify-center rounded-md bg-green-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\"\n onClick={(e) => {\n e.preventDefault();\n doRandomRegistration();\n }}\n >\n <i18n.Translate>Create a random temporary user</i18n.Translate>\n </button>\n </p>\n )}\n </div>\n </div>\n </Fragment>\n );\n}\n\nfunction capitalizeFirstLetter(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { BankUiSettings } from \"../settings.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = BankUiSettings;\n\nconst initial: BankUiSettings = {};\nconst Context = createContext<Type>(initial);\n\nexport const useSettingsContext = (): Type => useContext(Context);\n\nexport const SettingsProvider = ({\n children,\n value,\n}: {\n value: BankUiSettings;\n children: ComponentChildren;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { encodeCrock, getRandomBytes } from \"@gnu-taler/taler-util\";\n\nconst noun = [\n \"people\",\n \"history\",\n \"way\",\n \"art\",\n \"world\",\n \"information\",\n \"map\",\n \"two\",\n \"family\",\n \"government\",\n \"health\",\n \"system\",\n \"computer\",\n \"meat\",\n \"year\",\n \"thanks\",\n \"music\",\n \"person\",\n \"reading\",\n \"method\",\n \"data\",\n \"food\",\n \"understanding\",\n \"theory\",\n \"law\",\n \"bird\",\n \"literature\",\n \"problem\",\n \"software\",\n \"control\",\n \"knowledge\",\n \"power\",\n \"ability\",\n \"economics\",\n \"love\",\n \"internet\",\n \"television\",\n \"science\",\n \"library\",\n \"nature\",\n \"fact\",\n \"product\",\n \"idea\",\n \"temperature\",\n \"investment\",\n \"area\",\n \"society\",\n \"activity\",\n \"story\",\n \"industry\",\n \"media\",\n \"thing\",\n \"oven\",\n \"community\",\n \"definition\",\n \"safety\",\n \"quality\",\n \"development\",\n \"language\",\n \"management\",\n \"player\",\n \"variety\",\n \"video\",\n \"week\",\n \"security\",\n \"country\",\n \"exam\",\n \"movie\",\n \"organization\",\n \"equipment\",\n \"physics\",\n \"analysis\",\n \"policy\",\n \"series\",\n \"thought\",\n \"basis\",\n \"boyfriend\",\n \"direction\",\n \"strategy\",\n \"technology\",\n \"army\",\n \"camera\",\n \"freedom\",\n \"paper\",\n \"environment\",\n \"child\",\n \"instance\",\n \"month\",\n \"truth\",\n \"marketing\",\n \"university\",\n \"writing\",\n \"article\",\n \"department\",\n \"difference\",\n \"goal\",\n \"news\",\n \"audience\",\n \"fishing\",\n \"growth\",\n \"income\",\n \"marriage\",\n \"user\",\n \"combination\",\n \"failure\",\n \"meaning\",\n \"medicine\",\n \"philosophy\",\n \"teacher\",\n \"communication\",\n \"night\",\n \"chemistry\",\n \"disease\",\n \"disk\",\n \"energy\",\n \"nation\",\n \"road\",\n \"role\",\n \"soup\",\n \"advertising\",\n \"location\",\n \"success\",\n \"addition\",\n \"apartment\",\n \"education\",\n \"math\",\n \"moment\",\n \"painting\",\n \"politics\",\n \"attention\",\n \"decision\",\n \"event\",\n \"property\",\n \"shopping\",\n \"student\",\n \"wood\",\n \"competition\",\n \"distribution\",\n \"entertainment\",\n \"office\",\n \"population\",\n \"president\",\n \"unit\",\n \"category\",\n \"cigarette\",\n \"context\",\n \"introduction\",\n \"opportunity\",\n \"performance\",\n \"driver\",\n \"flight\",\n \"length\",\n \"magazine\",\n \"newspaper\",\n \"relationship\",\n \"teaching\",\n \"cell\",\n \"dealer\",\n \"finding\",\n \"lake\",\n \"member\",\n \"message\",\n \"phone\",\n \"scene\",\n \"appearance\",\n \"association\",\n \"concept\",\n \"customer\",\n \"death\",\n \"discussion\",\n \"housing\",\n \"inflation\",\n \"insurance\",\n \"mood\",\n \"woman\",\n \"advice\",\n \"blood\",\n \"effort\",\n \"expression\",\n \"importance\",\n \"opinion\",\n \"payment\",\n \"reality\",\n \"responsibility\",\n \"situation\",\n \"skill\",\n \"statement\",\n \"wealth\",\n \"application\",\n \"city\",\n \"county\",\n \"depth\",\n \"estate\",\n \"foundation\",\n \"grandmother\",\n \"heart\",\n \"perspective\",\n \"photo\",\n \"recipe\",\n \"studio\",\n \"topic\",\n \"collection\",\n \"depression\",\n \"imagination\",\n \"passion\",\n \"percentage\",\n \"resource\",\n \"setting\",\n \"ad\",\n \"agency\",\n \"college\",\n \"connection\",\n \"criticism\",\n \"debt\",\n \"description\",\n \"memory\",\n \"patience\",\n \"secretary\",\n \"solution\",\n \"administration\",\n \"aspect\",\n \"attitude\",\n \"director\",\n \"personality\",\n \"psychology\",\n \"recommendation\",\n \"response\",\n \"selection\",\n \"storage\",\n \"version\",\n \"alcohol\",\n \"argument\",\n \"complaint\",\n \"contract\",\n \"emphasis\",\n \"highway\",\n \"loss\",\n \"membership\",\n \"possession\",\n \"preparation\",\n \"steak\",\n \"union\",\n \"agreement\",\n \"cancer\",\n \"currency\",\n \"employment\",\n \"engineering\",\n \"entry\",\n \"interaction\",\n \"mixture\",\n \"preference\",\n \"region\",\n \"republic\",\n \"tradition\",\n \"virus\",\n \"actor\",\n \"classroom\",\n \"delivery\",\n \"device\",\n \"difficulty\",\n \"drama\",\n \"election\",\n \"engine\",\n \"football\",\n \"guidance\",\n \"hotel\",\n \"owner\",\n \"priority\",\n \"protection\",\n \"suggestion\",\n \"tension\",\n \"variation\",\n \"anxiety\",\n \"atmosphere\",\n \"awareness\",\n \"bath\",\n \"bread\",\n \"candidate\",\n \"climate\",\n \"comparison\",\n \"confusion\",\n \"construction\",\n \"elevator\",\n \"emotion\",\n \"employee\",\n \"employer\",\n \"guest\",\n \"height\",\n \"leadership\",\n \"mall\",\n \"manager\",\n \"operation\",\n \"recording\",\n \"sample\",\n \"transportation\",\n \"charity\",\n \"cousin\",\n \"disaster\",\n \"editor\",\n \"efficiency\",\n \"excitement\",\n \"extent\",\n \"feedback\",\n \"guitar\",\n \"homework\",\n \"leader\",\n \"mom\",\n \"outcome\",\n \"permission\",\n \"presentation\",\n \"promotion\",\n \"reflection\",\n \"refrigerator\",\n \"resolution\",\n \"revenue\",\n \"session\",\n \"singer\",\n \"tennis\",\n \"basket\",\n \"bonus\",\n \"cabinet\",\n \"childhood\",\n \"church\",\n \"clothes\",\n \"coffee\",\n \"dinner\",\n \"drawing\",\n \"hair\",\n \"hearing\",\n \"initiative\",\n \"judgment\",\n \"lab\",\n \"measurement\",\n \"mode\",\n \"mud\",\n \"orange\",\n \"poetry\",\n \"police\",\n \"possibility\",\n \"procedure\",\n \"queen\",\n \"ratio\",\n \"relation\",\n \"restaurant\",\n \"satisfaction\",\n \"sector\",\n \"signature\",\n \"significance\",\n \"song\",\n \"tooth\",\n \"town\",\n \"vehicle\",\n \"volume\",\n \"wife\",\n \"accident\",\n \"airport\",\n \"appointment\",\n \"arrival\",\n \"assumption\",\n \"baseball\",\n \"chapter\",\n \"committee\",\n \"conversation\",\n \"database\",\n \"enthusiasm\",\n \"error\",\n \"explanation\",\n \"farmer\",\n \"gate\",\n \"girl\",\n \"hall\",\n \"historian\",\n \"hospital\",\n \"injury\",\n \"instruction\",\n \"maintenance\",\n \"manufacturer\",\n \"meal\",\n \"perception\",\n \"pie\",\n \"poem\",\n \"presence\",\n \"proposal\",\n \"reception\",\n \"replacement\",\n \"revolution\",\n \"river\",\n \"son\",\n \"speech\",\n \"tea\",\n \"village\",\n \"warning\",\n \"winner\",\n \"worker\",\n \"writer\",\n \"assistance\",\n \"breath\",\n \"buyer\",\n \"chest\",\n \"chocolate\",\n \"conclusion\",\n \"contribution\",\n \"cookie\",\n \"courage\",\n \"dad\",\n \"desk\",\n \"drawer\",\n \"establishment\",\n \"examination\",\n \"garbage\",\n \"grocery\",\n \"honey\",\n \"impression\",\n \"improvement\",\n \"independence\",\n \"insect\",\n \"inspection\",\n \"inspector\",\n \"king\",\n \"ladder\",\n \"menu\",\n \"penalty\",\n \"piano\",\n \"potato\",\n \"profession\",\n \"professor\",\n \"quantity\",\n \"reaction\",\n \"requirement\",\n \"salad\",\n \"sister\",\n \"supermarket\",\n \"tongue\",\n \"weakness\",\n \"wedding\",\n \"affair\",\n \"ambition\",\n \"analyst\",\n \"apple\",\n \"assignment\",\n \"assistant\",\n \"bathroom\",\n \"bedroom\",\n \"beer\",\n \"birthday\",\n \"celebration\",\n \"championship\",\n \"cheek\",\n \"client\",\n \"consequence\",\n \"departure\",\n \"diamond\",\n \"dirt\",\n \"ear\",\n \"fortune\",\n \"friendship\",\n \"funeral\",\n \"gene\",\n \"girlfriend\",\n \"hat\",\n \"indication\",\n \"intention\",\n \"lady\",\n \"midnight\",\n \"negotiation\",\n \"obligation\",\n \"passenger\",\n \"pizza\",\n \"platform\",\n \"poet\",\n \"pollution\",\n \"recognition\",\n \"reputation\",\n \"shirt\",\n \"sir\",\n \"speaker\",\n \"stranger\",\n \"surgery\",\n \"sympathy\",\n \"tale\",\n \"throat\",\n \"trainer\",\n \"uncle\",\n \"youth\",\n \"time\",\n \"work\",\n \"film\",\n \"water\",\n \"money\",\n \"example\",\n \"while\",\n \"business\",\n \"study\",\n \"game\",\n \"life\",\n \"form\",\n \"air\",\n \"day\",\n \"place\",\n \"number\",\n \"part\",\n \"field\",\n \"fish\",\n \"back\",\n \"process\",\n \"heat\",\n \"hand\",\n \"experience\",\n \"job\",\n \"book\",\n \"end\",\n \"point\",\n \"type\",\n \"home\",\n \"economy\",\n \"value\",\n \"body\",\n \"market\",\n \"guide\",\n \"interest\",\n \"state\",\n \"radio\",\n \"course\",\n \"company\",\n \"price\",\n \"size\",\n \"card\",\n \"list\",\n \"mind\",\n \"trade\",\n \"line\",\n \"care\",\n \"group\",\n \"risk\",\n \"word\",\n \"fat\",\n \"force\",\n \"key\",\n \"light\",\n \"training\",\n \"name\",\n \"school\",\n \"top\",\n \"amount\",\n \"level\",\n \"order\",\n \"practice\",\n \"research\",\n \"sense\",\n \"service\",\n \"piece\",\n \"web\",\n \"boss\",\n \"sport\",\n \"fun\",\n \"house\",\n \"page\",\n \"term\",\n \"test\",\n \"answer\",\n \"sound\",\n \"focus\",\n \"matter\",\n \"kind\",\n \"soil\",\n \"board\",\n \"oil\",\n \"picture\",\n \"access\",\n \"garden\",\n \"range\",\n \"rate\",\n \"reason\",\n \"future\",\n \"site\",\n \"demand\",\n \"exercise\",\n \"image\",\n \"case\",\n \"cause\",\n \"coast\",\n \"action\",\n \"age\",\n \"bad\",\n \"boat\",\n \"record\",\n \"result\",\n \"section\",\n \"building\",\n \"mouse\",\n \"cash\",\n \"class\",\n \"nothing\",\n \"period\",\n \"plan\",\n \"store\",\n \"tax\",\n \"side\",\n \"subject\",\n \"space\",\n \"rule\",\n \"stock\",\n \"weather\",\n \"chance\",\n \"figure\",\n \"man\",\n \"model\",\n \"source\",\n \"beginning\",\n \"earth\",\n \"program\",\n \"chicken\",\n \"design\",\n \"feature\",\n \"head\",\n \"material\",\n \"purpose\",\n \"question\",\n \"rock\",\n \"salt\",\n \"act\",\n \"birth\",\n \"car\",\n \"dog\",\n \"object\",\n \"scale\",\n \"sun\",\n \"note\",\n \"profit\",\n \"rent\",\n \"speed\",\n \"style\",\n \"war\",\n \"bank\",\n \"craft\",\n \"half\",\n \"inside\",\n \"outside\",\n \"standard\",\n \"bus\",\n \"exchange\",\n \"eye\",\n \"fire\",\n \"position\",\n \"pressure\",\n \"stress\",\n \"advantage\",\n \"benefit\",\n \"box\",\n \"frame\",\n \"issue\",\n \"step\",\n \"cycle\",\n \"face\",\n \"item\",\n \"metal\",\n \"paint\",\n \"review\",\n \"room\",\n \"screen\",\n \"structure\",\n \"view\",\n \"account\",\n \"ball\",\n \"discipline\",\n \"medium\",\n \"share\",\n \"balance\",\n \"bit\",\n \"black\",\n \"bottom\",\n \"choice\",\n \"gift\",\n \"impact\",\n \"machine\",\n \"shape\",\n \"tool\",\n \"wind\",\n \"address\",\n \"average\",\n \"career\",\n \"culture\",\n \"morning\",\n \"pot\",\n \"sign\",\n \"table\",\n \"task\",\n \"condition\",\n \"contact\",\n \"credit\",\n \"egg\",\n \"hope\",\n \"ice\",\n \"network\",\n \"north\",\n \"square\",\n \"attempt\",\n \"date\",\n \"effect\",\n \"link\",\n \"post\",\n \"star\",\n \"voice\",\n \"capital\",\n \"challenge\",\n \"friend\",\n \"self\",\n \"shot\",\n \"brush\",\n \"couple\",\n \"debate\",\n \"exit\",\n \"front\",\n \"function\",\n \"lack\",\n \"living\",\n \"plant\",\n \"plastic\",\n \"spot\",\n \"summer\",\n \"taste\",\n \"theme\",\n \"track\",\n \"wing\",\n \"brain\",\n \"button\",\n \"click\",\n \"desire\",\n \"foot\",\n \"gas\",\n \"influence\",\n \"notice\",\n \"rain\",\n \"wall\",\n \"base\",\n \"damage\",\n \"distance\",\n \"feeling\",\n \"pair\",\n \"savings\",\n \"staff\",\n \"sugar\",\n \"target\",\n \"text\",\n \"animal\",\n \"author\",\n \"budget\",\n \"discount\",\n \"file\",\n \"ground\",\n \"lesson\",\n \"minute\",\n \"officer\",\n \"phase\",\n \"reference\",\n \"register\",\n \"sky\",\n \"stage\",\n \"stick\",\n \"title\",\n \"trouble\",\n \"bowl\",\n \"bridge\",\n \"campaign\",\n \"character\",\n \"club\",\n \"edge\",\n \"evidence\",\n \"fan\",\n \"letter\",\n \"lock\",\n \"maximum\",\n \"novel\",\n \"option\",\n \"pack\",\n \"park\",\n \"plenty\",\n \"quarter\",\n \"skin\",\n \"sort\",\n \"weight\",\n \"baby\",\n \"background\",\n \"carry\",\n \"dish\",\n \"factor\",\n \"fruit\",\n \"glass\",\n \"joint\",\n \"master\",\n \"muscle\",\n \"red\",\n \"strength\",\n \"traffic\",\n \"trip\",\n \"vegetable\",\n \"appeal\",\n \"chart\",\n \"gear\",\n \"ideal\",\n \"kitchen\",\n \"land\",\n \"log\",\n \"mother\",\n \"net\",\n \"party\",\n \"principle\",\n \"relative\",\n \"sale\",\n \"season\",\n \"signal\",\n \"spirit\",\n \"street\",\n \"tree\",\n \"wave\",\n \"belt\",\n \"bench\",\n \"commission\",\n \"copy\",\n \"drop\",\n \"minimum\",\n \"path\",\n \"progress\",\n \"project\",\n \"sea\",\n \"south\",\n \"status\",\n \"stuff\",\n \"ticket\",\n \"tour\",\n \"angle\",\n \"blue\",\n \"breakfast\",\n \"confidence\",\n \"daughter\",\n \"degree\",\n \"doctor\",\n \"dot\",\n \"dream\",\n \"duty\",\n \"essay\",\n \"father\",\n \"fee\",\n \"finance\",\n \"hour\",\n \"juice\",\n \"limit\",\n \"luck\",\n \"milk\",\n \"mouth\",\n \"peace\",\n \"pipe\",\n \"seat\",\n \"stable\",\n \"storm\",\n \"substance\",\n \"team\",\n \"trick\",\n \"afternoon\",\n \"bat\",\n \"beach\",\n \"blank\",\n \"catch\",\n \"chain\",\n \"consideration\",\n \"cream\",\n \"crew\",\n \"detail\",\n \"gold\",\n \"interview\",\n \"kid\",\n \"mark\",\n \"match\",\n \"mission\",\n \"pain\",\n \"pleasure\",\n \"score\",\n \"screw\",\n \"sex\",\n \"shop\",\n \"shower\",\n \"suit\",\n \"tone\",\n \"window\",\n \"agent\",\n \"band\",\n \"block\",\n \"bone\",\n \"calendar\",\n \"cap\",\n \"coat\",\n \"contest\",\n \"corner\",\n \"court\",\n \"cup\",\n \"district\",\n \"door\",\n \"east\",\n \"finger\",\n \"garage\",\n \"guarantee\",\n \"hole\",\n \"hook\",\n \"implement\",\n \"layer\",\n \"lecture\",\n \"lie\",\n \"manner\",\n \"meeting\",\n \"nose\",\n \"parking\",\n \"partner\",\n \"profile\",\n \"respect\",\n \"rice\",\n \"routine\",\n \"schedule\",\n \"swimming\",\n \"telephone\",\n \"tip\",\n \"winter\",\n \"airline\",\n \"bag\",\n \"battle\",\n \"bed\",\n \"bill\",\n \"bother\",\n \"cake\",\n \"code\",\n \"curve\",\n \"designer\",\n \"dimension\",\n \"dress\",\n \"ease\",\n \"emergency\",\n \"evening\",\n \"extension\",\n \"farm\",\n \"fight\",\n \"gap\",\n \"grade\",\n \"holiday\",\n \"horror\",\n \"horse\",\n \"host\",\n \"husband\",\n \"loan\",\n \"mistake\",\n \"mountain\",\n \"nail\",\n \"noise\",\n \"occasion\",\n \"package\",\n \"patient\",\n \"pause\",\n \"phrase\",\n \"proof\",\n \"race\",\n \"relief\",\n \"sand\",\n \"sentence\",\n \"shoulder\",\n \"smoke\",\n \"stomach\",\n \"string\",\n \"tourist\",\n \"towel\",\n \"vacation\",\n \"west\",\n \"wheel\",\n \"wine\",\n \"arm\",\n \"aside\",\n \"associate\",\n \"bet\",\n \"blow\",\n \"border\",\n \"branch\",\n \"breast\",\n \"brother\",\n \"buddy\",\n \"bunch\",\n \"chip\",\n \"coach\",\n \"cross\",\n \"document\",\n \"draft\",\n \"dust\",\n \"expert\",\n \"floor\",\n \"god\",\n \"golf\",\n \"habit\",\n \"iron\",\n \"judge\",\n \"knife\",\n \"landscape\",\n \"league\",\n \"mail\",\n \"mess\",\n \"native\",\n \"opening\",\n \"parent\",\n \"pattern\",\n \"pin\",\n \"pool\",\n \"pound\",\n \"request\",\n \"salary\",\n \"shame\",\n \"shelter\",\n \"shoe\",\n \"silver\",\n \"tackle\",\n \"tank\",\n \"trust\",\n \"assist\",\n \"bake\",\n \"bar\",\n \"bell\",\n \"bike\",\n \"blame\",\n \"boy\",\n \"brick\",\n \"chair\",\n \"closet\",\n \"clue\",\n \"collar\",\n \"comment\",\n \"conference\",\n \"devil\",\n \"diet\",\n \"fear\",\n \"fuel\",\n \"glove\",\n \"jacket\",\n \"lunch\",\n \"monitor\",\n \"mortgage\",\n \"nurse\",\n \"pace\",\n \"panic\",\n \"peak\",\n \"plane\",\n \"reward\",\n \"row\",\n \"sandwich\",\n \"shock\",\n \"spite\",\n \"spray\",\n \"surprise\",\n \"till\",\n \"transition\",\n \"weekend\",\n \"welcome\",\n \"yard\",\n \"alarm\",\n \"bend\",\n \"bicycle\",\n \"bite\",\n \"blind\",\n \"bottle\",\n \"cable\",\n \"candle\",\n \"clerk\",\n \"cloud\",\n \"concert\",\n \"counter\",\n \"flower\",\n \"grandfather\",\n \"harm\",\n \"knee\",\n \"lawyer\",\n \"leather\",\n \"load\",\n \"mirror\",\n \"neck\",\n \"pension\",\n \"plate\",\n \"purple\",\n \"ruin\",\n \"ship\",\n \"skirt\",\n \"slice\",\n \"snow\",\n \"specialist\",\n \"stroke\",\n \"switch\",\n \"trash\",\n \"tune\",\n \"zone\",\n \"anger\",\n \"award\",\n \"bid\",\n \"bitter\",\n \"boot\",\n \"bug\",\n \"camp\",\n \"candy\",\n \"carpet\",\n \"cat\",\n \"champion\",\n \"channel\",\n \"clock\",\n \"comfort\",\n \"cow\",\n \"crack\",\n \"engineer\",\n \"entrance\",\n \"fault\",\n \"grass\",\n \"guy\",\n \"hell\",\n \"highlight\",\n \"incident\",\n \"island\",\n \"joke\",\n \"jury\",\n \"leg\",\n \"lip\",\n \"mate\",\n \"motor\",\n \"nerve\",\n \"passage\",\n \"pen\",\n \"pride\",\n \"priest\",\n \"prize\",\n \"promise\",\n \"resident\",\n \"resort\",\n \"ring\",\n \"roof\",\n \"rope\",\n \"sail\",\n \"scheme\",\n \"script\",\n \"sock\",\n \"station\",\n \"toe\",\n \"tower\",\n \"truck\",\n \"witness\",\n \"a\",\n \"you\",\n \"it\",\n \"can\",\n \"will\",\n \"if\",\n \"one\",\n \"many\",\n \"most\",\n \"other\",\n \"use\",\n \"make\",\n \"good\",\n \"look\",\n \"help\",\n \"go\",\n \"great\",\n \"being\",\n \"few\",\n \"might\",\n \"still\",\n \"public\",\n \"read\",\n \"keep\",\n \"start\",\n \"give\",\n \"human\",\n \"local\",\n \"general\",\n \"she\",\n \"specific\",\n \"long\",\n \"play\",\n \"feel\",\n \"high\",\n \"tonight\",\n \"put\",\n \"common\",\n \"set\",\n \"change\",\n \"simple\",\n \"past\",\n \"big\",\n \"possible\",\n \"particular\",\n \"today\",\n \"major\",\n \"personal\",\n \"current\",\n \"national\",\n \"cut\",\n \"natural\",\n \"physical\",\n \"show\",\n \"try\",\n \"check\",\n \"second\",\n \"call\",\n \"move\",\n \"pay\",\n \"let\",\n \"increase\",\n \"single\",\n \"individual\",\n \"turn\",\n \"ask\",\n \"buy\",\n \"guard\",\n \"hold\",\n \"main\",\n \"offer\",\n \"potential\",\n \"professional\",\n \"international\",\n \"travel\",\n \"cook\",\n \"alternative\",\n \"following\",\n \"special\",\n \"working\",\n \"whole\",\n \"dance\",\n \"excuse\",\n \"cold\",\n \"commercial\",\n \"low\",\n \"purchase\",\n \"deal\",\n \"primary\",\n \"worth\",\n \"fall\",\n \"necessary\",\n \"positive\",\n \"produce\",\n \"search\",\n \"present\",\n \"spend\",\n \"talk\",\n \"creative\",\n \"tell\",\n \"cost\",\n \"drive\",\n \"green\",\n \"support\",\n \"glad\",\n \"remove\",\n \"return\",\n \"run\",\n \"complex\",\n \"due\",\n \"effective\",\n \"middle\",\n \"regular\",\n \"reserve\",\n \"independent\",\n \"leave\",\n \"original\",\n \"reach\",\n \"rest\",\n \"serve\",\n \"watch\",\n \"beautiful\",\n \"charge\",\n \"active\",\n \"break\",\n \"negative\",\n \"safe\",\n \"stay\",\n \"visit\",\n \"visual\",\n \"affect\",\n \"cover\",\n \"report\",\n \"rise\",\n \"walk\",\n \"white\",\n \"beyond\",\n \"junior\",\n \"pick\",\n \"unique\",\n \"anything\",\n \"classic\",\n \"final\",\n \"lift\",\n \"mix\",\n \"private\",\n \"stop\",\n \"teach\",\n \"western\",\n \"concern\",\n \"familiar\",\n \"fly\",\n \"official\",\n \"broad\",\n \"comfortable\",\n \"gain\",\n \"maybe\",\n \"rich\",\n \"save\",\n \"stand\",\n \"young\",\n \"fail\",\n \"heavy\",\n \"hello\",\n \"lead\",\n \"listen\",\n \"valuable\",\n \"worry\",\n \"handle\",\n \"leading\",\n \"meet\",\n \"release\",\n \"sell\",\n \"finish\",\n \"normal\",\n \"press\",\n \"ride\",\n \"secret\",\n \"spread\",\n \"spring\",\n \"tough\",\n \"wait\",\n \"brown\",\n \"deep\",\n \"display\",\n \"flow\",\n \"hit\",\n \"objective\",\n \"shoot\",\n \"touch\",\n \"cancel\",\n \"chemical\",\n \"cry\",\n \"dump\",\n \"extreme\",\n \"push\",\n \"conflict\",\n \"eat\",\n \"fill\",\n \"formal\",\n \"jump\",\n \"kick\",\n \"opposite\",\n \"pass\",\n \"pitch\",\n \"remote\",\n \"total\",\n \"treat\",\n \"vast\",\n \"abuse\",\n \"beat\",\n \"burn\",\n \"deposit\",\n \"print\",\n \"raise\",\n \"sleep\",\n \"somewhere\",\n \"advance\",\n \"anywhere\",\n \"consist\",\n \"dark\",\n \"double\",\n \"draw\",\n \"equal\",\n \"fix\",\n \"hire\",\n \"internal\",\n \"join\",\n \"kill\",\n \"sensitive\",\n \"tap\",\n \"win\",\n \"attack\",\n \"claim\",\n \"constant\",\n \"drag\",\n \"drink\",\n \"guess\",\n \"minor\",\n \"pull\",\n \"raw\",\n \"soft\",\n \"solid\",\n \"wear\",\n \"weird\",\n \"wonder\",\n \"annual\",\n \"count\",\n \"dead\",\n \"doubt\",\n \"feed\",\n \"forever\",\n \"impress\",\n \"nobody\",\n \"repeat\",\n \"round\",\n \"sing\",\n \"slide\",\n \"strip\",\n \"whereas\",\n \"wish\",\n \"combine\",\n \"command\",\n \"dig\",\n \"divide\",\n \"equivalent\",\n \"hang\",\n \"hunt\",\n \"initial\",\n \"march\",\n \"mention\",\n \"smell\",\n \"spiritual\",\n \"survey\",\n \"tie\",\n \"adult\",\n \"brief\",\n \"crazy\",\n \"escape\",\n \"gather\",\n \"hate\",\n \"prior\",\n \"repair\",\n \"rough\",\n \"sad\",\n \"scratch\",\n \"sick\",\n \"strike\",\n \"employ\",\n \"external\",\n \"hurt\",\n \"illegal\",\n \"laugh\",\n \"lay\",\n \"mobile\",\n \"nasty\",\n \"ordinary\",\n \"respond\",\n \"royal\",\n \"senior\",\n \"split\",\n \"strain\",\n \"struggle\",\n \"swim\",\n \"train\",\n \"upper\",\n \"wash\",\n \"yellow\",\n \"convert\",\n \"crash\",\n \"dependent\",\n \"fold\",\n \"funny\",\n \"grab\",\n \"hide\",\n \"miss\",\n \"permit\",\n \"quote\",\n \"recover\",\n \"resolve\",\n \"roll\",\n \"sink\",\n \"slip\",\n \"spare\",\n \"suspect\",\n \"sweet\",\n \"swing\",\n \"twist\",\n \"upstairs\",\n \"usual\",\n \"abroad\",\n \"brave\",\n \"calm\",\n \"concentrate\",\n \"estimate\",\n \"grand\",\n \"male\",\n \"mine\",\n \"prompt\",\n \"quiet\",\n \"refuse\",\n \"regret\",\n \"reveal\",\n \"rush\",\n \"shake\",\n \"shift\",\n \"shine\",\n \"steal\",\n \"suck\",\n \"surround\",\n \"anybody\",\n \"bear\",\n \"brilliant\",\n \"dare\",\n \"dear\",\n \"delay\",\n \"drunk\",\n \"female\",\n \"hurry\",\n \"inevitable\",\n \"invite\",\n \"kiss\",\n \"neat\",\n \"pop\",\n \"punch\",\n \"quit\",\n \"reply\",\n \"representative\",\n \"resist\",\n \"rip\",\n \"rub\",\n \"silly\",\n \"smile\",\n \"spell\",\n \"stretch\",\n \"stupid\",\n \"tear\",\n \"temporary\",\n \"tomorrow\",\n \"wake\",\n \"wrap\",\n \"yesterday\",\n];\n\nconst adj = [\n \"abandoned\",\n \"able\",\n \"absolute\",\n \"adorable\",\n \"adventurous\",\n \"academic\",\n \"acceptable\",\n \"acclaimed\",\n \"accomplished\",\n \"accurate\",\n \"aching\",\n \"acidic\",\n \"acrobatic\",\n \"active\",\n \"actual\",\n \"adept\",\n \"admirable\",\n \"admired\",\n \"adolescent\",\n \"adorable\",\n \"adored\",\n \"advanced\",\n \"afraid\",\n \"affectionate\",\n \"aged\",\n \"aggravating\",\n \"aggressive\",\n \"agile\",\n \"agitated\",\n \"agonizing\",\n \"agreeable\",\n \"ajar\",\n \"alarmed\",\n \"alarming\",\n \"alert\",\n \"alienated\",\n \"alive\",\n \"all\",\n \"altruistic\",\n \"amazing\",\n \"ambitious\",\n \"ample\",\n \"amused\",\n \"amusing\",\n \"anchored\",\n \"ancient\",\n \"angelic\",\n \"angry\",\n \"anguished\",\n \"animated\",\n \"annual\",\n \"another\",\n \"antique\",\n \"anxious\",\n \"any\",\n \"apprehensive\",\n \"appropriate\",\n \"apt\",\n \"arctic\",\n \"arid\",\n \"aromatic\",\n \"artistic\",\n \"ashamed\",\n \"assured\",\n \"astonishing\",\n \"athletic\",\n \"attached\",\n \"attentive\",\n \"attractive\",\n \"austere\",\n \"authentic\",\n \"authorized\",\n \"automatic\",\n \"avaricious\",\n \"average\",\n \"aware\",\n \"awesome\",\n \"awful\",\n \"awkward\",\n \"babyish\",\n \"bad\",\n \"back\",\n \"baggy\",\n \"bare\",\n \"barren\",\n \"basic\",\n \"beautiful\",\n \"belated\",\n \"beloved\",\n \"beneficial\",\n \"better\",\n \"best\",\n \"bewitched\",\n \"big\",\n \"big-hearted\",\n \"biodegradable\",\n \"bite-sized\",\n \"bitter\",\n \"black\",\n \"black-and-white\",\n \"bland\",\n \"blank\",\n \"blaring\",\n \"bleak\",\n \"blind\",\n \"blissful\",\n \"blond\",\n \"blue\",\n \"blushing\",\n \"bogus\",\n \"boiling\",\n \"bold\",\n \"bony\",\n \"boring\",\n \"bossy\",\n \"both\",\n \"bouncy\",\n \"bountiful\",\n \"bowed\",\n \"brave\",\n \"breakable\",\n \"brief\",\n \"bright\",\n \"brilliant\",\n \"brisk\",\n \"broken\",\n \"bronze\",\n \"brown\",\n \"bruised\",\n \"bubbly\",\n \"bulky\",\n \"bumpy\",\n \"buoyant\",\n \"burdensome\",\n \"burly\",\n \"bustling\",\n \"busy\",\n \"buttery\",\n \"buzzing\",\n \"calculating\",\n \"calm\",\n \"candid\",\n \"canine\",\n \"capital\",\n \"carefree\",\n \"careful\",\n \"careless\",\n \"caring\",\n \"cautious\",\n \"cavernous\",\n \"celebrated\",\n \"charming\",\n \"cheap\",\n \"cheerful\",\n \"cheery\",\n \"chief\",\n \"chilly\",\n \"chubby\",\n \"circular\",\n \"classic\",\n \"clean\",\n \"clear\",\n \"clear-cut\",\n \"clever\",\n \"close\",\n \"closed\",\n \"cloudy\",\n \"clueless\",\n \"clumsy\",\n \"cluttered\",\n \"coarse\",\n \"cold\",\n \"colorful\",\n \"colorless\",\n \"colossal\",\n \"comfortable\",\n \"common\",\n \"compassionate\",\n \"competent\",\n \"complete\",\n \"complex\",\n \"complicated\",\n \"composed\",\n \"concerned\",\n \"concrete\",\n \"confused\",\n \"conscious\",\n \"considerate\",\n \"constant\",\n \"content\",\n \"conventional\",\n \"cooked\",\n \"cool\",\n \"cooperative\",\n \"coordinated\",\n \"corny\",\n \"corrupt\",\n \"costly\",\n \"courageous\",\n \"courteous\",\n \"crafty\",\n \"crazy\",\n \"creamy\",\n \"creative\",\n \"creepy\",\n \"criminal\",\n \"crisp\",\n \"critical\",\n \"crooked\",\n \"crowded\",\n \"cruel\",\n \"crushing\",\n \"cuddly\",\n \"cultivated\",\n \"cultured\",\n \"cumbersome\",\n \"curly\",\n \"curvy\",\n \"cute\",\n \"cylindrical\",\n \"damaged\",\n \"damp\",\n \"dangerous\",\n \"dapper\",\n \"daring\",\n \"darling\",\n \"dark\",\n \"dazzling\",\n \"dead\",\n \"deadly\",\n \"deafening\",\n \"dear\",\n \"dearest\",\n \"decent\",\n \"decimal\",\n \"decisive\",\n \"deep\",\n \"defenseless\",\n \"defensive\",\n \"defiant\",\n \"deficient\",\n \"definite\",\n \"definitive\",\n \"delayed\",\n \"delectable\",\n \"delicious\",\n \"delightful\",\n \"delirious\",\n \"demanding\",\n \"dense\",\n \"dental\",\n \"dependable\",\n \"dependent\",\n \"descriptive\",\n \"deserted\",\n \"detailed\",\n \"determined\",\n \"devoted\",\n \"different\",\n \"difficult\",\n \"digital\",\n \"diligent\",\n \"dim\",\n \"dimpled\",\n \"dimwitted\",\n \"direct\",\n \"disastrous\",\n \"discrete\",\n \"disfigured\",\n \"disgusting\",\n \"disloyal\",\n \"dismal\",\n \"distant\",\n \"downright\",\n \"dreary\",\n \"dirty\",\n \"disguised\",\n \"dishonest\",\n \"dismal\",\n \"distant\",\n \"distinct\",\n \"distorted\",\n \"dizzy\",\n \"dopey\",\n \"doting\",\n \"double\",\n \"downright\",\n \"drab\",\n \"drafty\",\n \"dramatic\",\n \"dreary\",\n \"droopy\",\n \"dry\",\n \"dual\",\n \"dull\",\n \"dutiful\",\n \"each\",\n \"eager\",\n \"earnest\",\n \"early\",\n \"easy\",\n \"easy-going\",\n \"ecstatic\",\n \"edible\",\n \"educated\",\n \"elaborate\",\n \"elastic\",\n \"elated\",\n \"elderly\",\n \"electric\",\n \"elegant\",\n \"elementary\",\n \"elliptical\",\n \"embarrassed\",\n \"embellished\",\n \"eminent\",\n \"emotional\",\n \"empty\",\n \"enchanted\",\n \"enchanting\",\n \"energetic\",\n \"enlightened\",\n \"enormous\",\n \"enraged\",\n \"entire\",\n \"envious\",\n \"equal\",\n \"equatorial\",\n \"essential\",\n \"esteemed\",\n \"ethical\",\n \"euphoric\",\n \"even\",\n \"evergreen\",\n \"everlasting\",\n \"every\",\n \"evil\",\n \"exalted\",\n \"excellent\",\n \"exemplary\",\n \"exhausted\",\n \"excitable\",\n \"excited\",\n \"exciting\",\n \"exotic\",\n \"expensive\",\n \"experienced\",\n \"expert\",\n \"extraneous\",\n \"extroverted\",\n \"extra-large\",\n \"extra-small\",\n \"fabulous\",\n \"failing\",\n \"faint\",\n \"fair\",\n \"faithful\",\n \"fake\",\n \"false\",\n \"familiar\",\n \"famous\",\n \"fancy\",\n \"fantastic\",\n \"far\",\n \"faraway\",\n \"far-flung\",\n \"far-off\",\n \"fast\",\n \"fat\",\n \"fatal\",\n \"fatherly\",\n \"favorable\",\n \"favorite\",\n \"fearful\",\n \"fearless\",\n \"feisty\",\n \"feline\",\n \"female\",\n \"feminine\",\n \"few\",\n \"fickle\",\n \"filthy\",\n \"fine\",\n \"finished\",\n \"firm\",\n \"first\",\n \"firsthand\",\n \"fitting\",\n \"fixed\",\n \"flaky\",\n \"flamboyant\",\n \"flashy\",\n \"flat\",\n \"flawed\",\n \"flawless\",\n \"flickering\",\n \"flimsy\",\n \"flippant\",\n \"flowery\",\n \"fluffy\",\n \"fluid\",\n \"flustered\",\n \"focused\",\n \"fond\",\n \"foolhardy\",\n \"foolish\",\n \"forceful\",\n \"forked\",\n \"formal\",\n \"forsaken\",\n \"forthright\",\n \"fortunate\",\n \"fragrant\",\n \"frail\",\n \"frank\",\n \"frayed\",\n \"free\",\n \"French\",\n \"fresh\",\n \"frequent\",\n \"friendly\",\n \"frightened\",\n \"frightening\",\n \"frigid\",\n \"frilly\",\n \"frizzy\",\n \"frivolous\",\n \"front\",\n \"frosty\",\n \"frozen\",\n \"frugal\",\n \"fruitful\",\n \"full\",\n \"fumbling\",\n \"functional\",\n \"funny\",\n \"fussy\",\n \"fuzzy\",\n \"gargantuan\",\n \"gaseous\",\n \"general\",\n \"generous\",\n \"gentle\",\n \"genuine\",\n \"giant\",\n \"giddy\",\n \"gigantic\",\n \"gifted\",\n \"giving\",\n \"glamorous\",\n \"glaring\",\n \"glass\",\n \"gleaming\",\n \"gleeful\",\n \"glistening\",\n \"glittering\",\n \"gloomy\",\n \"glorious\",\n \"glossy\",\n \"glum\",\n \"golden\",\n \"good\",\n \"good-natured\",\n \"gorgeous\",\n \"graceful\",\n \"gracious\",\n \"grand\",\n \"grandiose\",\n \"granular\",\n \"grateful\",\n \"grave\",\n \"gray\",\n \"great\",\n \"greedy\",\n \"green\",\n \"gregarious\",\n \"grim\",\n \"grimy\",\n \"gripping\",\n \"grizzled\",\n \"gross\",\n \"grotesque\",\n \"grouchy\",\n \"grounded\",\n \"growing\",\n \"growling\",\n \"grown\",\n \"grubby\",\n \"gruesome\",\n \"grumpy\",\n \"guilty\",\n \"gullible\",\n \"gummy\",\n \"hairy\",\n \"half\",\n \"handmade\",\n \"handsome\",\n \"handy\",\n \"happy\",\n \"happy-go-lucky\",\n \"hard\",\n \"hard-to-find\",\n \"harmful\",\n \"harmless\",\n \"harmonious\",\n \"harsh\",\n \"hasty\",\n \"hateful\",\n \"haunting\",\n \"healthy\",\n \"heartfelt\",\n \"hearty\",\n \"heavenly\",\n \"heavy\",\n \"hefty\",\n \"helpful\",\n \"helpless\",\n \"hidden\",\n \"hideous\",\n \"high\",\n \"high-level\",\n \"hilarious\",\n \"hoarse\",\n \"hollow\",\n \"homely\",\n \"honest\",\n \"honorable\",\n \"honored\",\n \"hopeful\",\n \"horrible\",\n \"hospitable\",\n \"hot\",\n \"huge\",\n \"humble\",\n \"humiliating\",\n \"humming\",\n \"humongous\",\n \"hungry\",\n \"hurtful\",\n \"husky\",\n \"icky\",\n \"icy\",\n \"ideal\",\n \"idealistic\",\n \"identical\",\n \"idle\",\n \"idiotic\",\n \"idolized\",\n \"ignorant\",\n \"ill\",\n \"illegal\",\n \"ill-fated\",\n \"ill-informed\",\n \"illiterate\",\n \"illustrious\",\n \"imaginary\",\n \"imaginative\",\n \"immaculate\",\n \"immaterial\",\n \"immediate\",\n \"immense\",\n \"impassioned\",\n \"impeccable\",\n \"impartial\",\n \"imperfect\",\n \"imperturbable\",\n \"impish\",\n \"impolite\",\n \"important\",\n \"impossible\",\n \"impractical\",\n \"impressionable\",\n \"impressive\",\n \"improbable\",\n \"impure\",\n \"inborn\",\n \"incomparable\",\n \"incompatible\",\n \"incomplete\",\n \"inconsequential\",\n \"incredible\",\n \"indelible\",\n \"inexperienced\",\n \"indolent\",\n \"infamous\",\n \"infantile\",\n \"infatuated\",\n \"inferior\",\n \"infinite\",\n \"informal\",\n \"innocent\",\n \"insecure\",\n \"insidious\",\n \"insignificant\",\n \"insistent\",\n \"instructive\",\n \"insubstantial\",\n \"intelligent\",\n \"intent\",\n \"intentional\",\n \"interesting\",\n \"internal\",\n \"international\",\n \"intrepid\",\n \"ironclad\",\n \"irresponsible\",\n \"irritating\",\n \"itchy\",\n \"jaded\",\n \"jagged\",\n \"jam-packed\",\n \"jaunty\",\n \"jealous\",\n \"jittery\",\n \"joint\",\n \"jolly\",\n \"jovial\",\n \"joyful\",\n \"joyous\",\n \"jubilant\",\n \"judicious\",\n \"juicy\",\n \"jumbo\",\n \"junior\",\n \"jumpy\",\n \"juvenile\",\n \"kaleidoscopic\",\n \"keen\",\n \"key\",\n \"kind\",\n \"kindhearted\",\n \"kindly\",\n \"klutzy\",\n \"knobby\",\n \"knotty\",\n \"knowledgeable\",\n \"knowing\",\n \"known\",\n \"kooky\",\n \"kosher\",\n \"lame\",\n \"lanky\",\n \"large\",\n \"last\",\n \"lasting\",\n \"late\",\n \"lavish\",\n \"lawful\",\n \"lazy\",\n \"leading\",\n \"lean\",\n \"leafy\",\n \"left\",\n \"legal\",\n \"legitimate\",\n \"light\",\n \"lighthearted\",\n \"likable\",\n \"likely\",\n \"limited\",\n \"limp\",\n \"limping\",\n \"linear\",\n \"lined\",\n \"liquid\",\n \"little\",\n \"live\",\n \"lively\",\n \"livid\",\n \"loathsome\",\n \"lone\",\n \"lonely\",\n \"long\",\n \"long-term\",\n \"loose\",\n \"lopsided\",\n \"lost\",\n \"loud\",\n \"lovable\",\n \"lovely\",\n \"loving\",\n \"low\",\n \"loyal\",\n \"lucky\",\n \"lumbering\",\n \"luminous\",\n \"lumpy\",\n \"lustrous\",\n \"luxurious\",\n \"mad\",\n \"made-up\",\n \"magnificent\",\n \"majestic\",\n \"major\",\n \"male\",\n \"mammoth\",\n \"married\",\n \"marvelous\",\n \"masculine\",\n \"massive\",\n \"mature\",\n \"meager\",\n \"mealy\",\n \"mean\",\n \"measly\",\n \"meaty\",\n \"medical\",\n \"mediocre\",\n \"medium\",\n \"meek\",\n \"mellow\",\n \"melodic\",\n \"memorable\",\n \"menacing\",\n \"merry\",\n \"messy\",\n \"metallic\",\n \"mild\",\n \"milky\",\n \"mindless\",\n \"miniature\",\n \"minor\",\n \"minty\",\n \"miserable\",\n \"miserly\",\n \"misguided\",\n \"misty\",\n \"mixed\",\n \"modern\",\n \"modest\",\n \"moist\",\n \"monstrous\",\n \"monthly\",\n \"monumental\",\n \"moral\",\n \"mortified\",\n \"motherly\",\n \"motionless\",\n \"mountainous\",\n \"muddy\",\n \"muffled\",\n \"multicolored\",\n \"mundane\",\n \"murky\",\n \"mushy\",\n \"musty\",\n \"muted\",\n \"mysterious\",\n \"naive\",\n \"narrow\",\n \"nasty\",\n \"natural\",\n \"naughty\",\n \"nautical\",\n \"near\",\n \"neat\",\n \"necessary\",\n \"needy\",\n \"negative\",\n \"neglected\",\n \"negligible\",\n \"neighboring\",\n \"nervous\",\n \"new\",\n \"next\",\n \"nice\",\n \"nifty\",\n \"nimble\",\n \"nippy\",\n \"nocturnal\",\n \"noisy\",\n \"nonstop\",\n \"normal\",\n \"notable\",\n \"noted\",\n \"noteworthy\",\n \"novel\",\n \"noxious\",\n \"numb\",\n \"nutritious\",\n \"nutty\",\n \"obedient\",\n \"obese\",\n \"oblong\",\n \"oily\",\n \"oblong\",\n \"obvious\",\n \"occasional\",\n \"odd\",\n \"oddball\",\n \"offbeat\",\n \"offensive\",\n \"official\",\n \"old\",\n \"old-fashioned\",\n \"only\",\n \"open\",\n \"optimal\",\n \"optimistic\",\n \"opulent\",\n \"orange\",\n \"orderly\",\n \"organic\",\n \"ornate\",\n \"ornery\",\n \"ordinary\",\n \"original\",\n \"other\",\n \"our\",\n \"outlying\",\n \"outgoing\",\n \"outlandish\",\n \"outrageous\",\n \"outstanding\",\n \"oval\",\n \"overcooked\",\n \"overdue\",\n \"overjoyed\",\n \"overlooked\",\n \"palatable\",\n \"pale\",\n \"paltry\",\n \"parallel\",\n \"parched\",\n \"partial\",\n \"passionate\",\n \"past\",\n \"pastel\",\n \"peaceful\",\n \"peppery\",\n \"perfect\",\n \"perfumed\",\n \"periodic\",\n \"perky\",\n \"personal\",\n \"pertinent\",\n \"pesky\",\n \"pessimistic\",\n \"petty\",\n \"phony\",\n \"physical\",\n \"piercing\",\n \"pink\",\n \"pitiful\",\n \"plain\",\n \"plaintive\",\n \"plastic\",\n \"playful\",\n \"pleasant\",\n \"pleased\",\n \"pleasing\",\n \"plump\",\n \"plush\",\n \"polished\",\n \"polite\",\n \"political\",\n \"pointed\",\n \"pointless\",\n \"poised\",\n \"poor\",\n \"popular\",\n \"portly\",\n \"posh\",\n \"positive\",\n \"possible\",\n \"potable\",\n \"powerful\",\n \"powerless\",\n \"practical\",\n \"precious\",\n \"present\",\n \"prestigious\",\n \"pretty\",\n \"precious\",\n \"previous\",\n \"pricey\",\n \"prickly\",\n \"primary\",\n \"prime\",\n \"pristine\",\n \"private\",\n \"prize\",\n \"probable\",\n \"productive\",\n \"profitable\",\n \"profuse\",\n \"proper\",\n \"proud\",\n \"prudent\",\n \"punctual\",\n \"pungent\",\n \"puny\",\n \"pure\",\n \"purple\",\n \"pushy\",\n \"putrid\",\n \"puzzled\",\n \"puzzling\",\n \"quaint\",\n \"qualified\",\n \"quarrelsome\",\n \"quarterly\",\n \"queasy\",\n \"querulous\",\n \"questionable\",\n \"quick\",\n \"quick-witted\",\n \"quiet\",\n \"quintessential\",\n \"quirky\",\n \"quixotic\",\n \"quizzical\",\n \"radiant\",\n \"ragged\",\n \"rapid\",\n \"rare\",\n \"rash\",\n \"raw\",\n \"recent\",\n \"reckless\",\n \"rectangular\",\n \"ready\",\n \"real\",\n \"realistic\",\n \"reasonable\",\n \"red\",\n \"reflecting\",\n \"regal\",\n \"regular\",\n \"reliable\",\n \"relieved\",\n \"remarkable\",\n \"remorseful\",\n \"remote\",\n \"repentant\",\n \"required\",\n \"respectful\",\n \"responsible\",\n \"repulsive\",\n \"revolving\",\n \"rewarding\",\n \"rich\",\n \"rigid\",\n \"right\",\n \"ringed\",\n \"ripe\",\n \"roasted\",\n \"robust\",\n \"rosy\",\n \"rotating\",\n \"rotten\",\n \"rough\",\n \"round\",\n \"rowdy\",\n \"royal\",\n \"rubbery\",\n \"rundown\",\n \"ruddy\",\n \"rude\",\n \"runny\",\n \"rural\",\n \"rusty\",\n \"sad\",\n \"safe\",\n \"salty\",\n \"same\",\n \"sandy\",\n \"sane\",\n \"sarcastic\",\n \"sardonic\",\n \"satisfied\",\n \"scaly\",\n \"scarce\",\n \"scared\",\n \"scary\",\n \"scented\",\n \"scholarly\",\n \"scientific\",\n \"scornful\",\n \"scratchy\",\n \"scrawny\",\n \"second\",\n \"secondary\",\n \"second-hand\",\n \"secret\",\n \"self-assured\",\n \"self-reliant\",\n \"selfish\",\n \"sentimental\",\n \"separate\",\n \"serene\",\n \"serious\",\n \"serpentine\",\n \"several\",\n \"severe\",\n \"shabby\",\n \"shadowy\",\n \"shady\",\n \"shallow\",\n \"shameful\",\n \"shameless\",\n \"sharp\",\n \"shimmering\",\n \"shiny\",\n \"shocked\",\n \"shocking\",\n \"shoddy\",\n \"short\",\n \"short-term\",\n \"showy\",\n \"shrill\",\n \"shy\",\n \"sick\",\n \"silent\",\n \"silky\",\n \"silly\",\n \"silver\",\n \"similar\",\n \"simple\",\n \"simplistic\",\n \"sinful\",\n \"single\",\n \"sizzling\",\n \"skeletal\",\n \"skinny\",\n \"sleepy\",\n \"slight\",\n \"slim\",\n \"slimy\",\n \"slippery\",\n \"slow\",\n \"slushy\",\n \"small\",\n \"smart\",\n \"smoggy\",\n \"smooth\",\n \"smug\",\n \"snappy\",\n \"snarling\",\n \"sneaky\",\n \"sniveling\",\n \"snoopy\",\n \"sociable\",\n \"soft\",\n \"soggy\",\n \"solid\",\n \"somber\",\n \"some\",\n \"spherical\",\n \"sophisticated\",\n \"sore\",\n \"sorrowful\",\n \"soulful\",\n \"soupy\",\n \"sour\",\n \"Spanish\",\n \"sparkling\",\n \"sparse\",\n \"specific\",\n \"spectacular\",\n \"speedy\",\n \"spicy\",\n \"spiffy\",\n \"spirited\",\n \"spiteful\",\n \"splendid\",\n \"spotless\",\n \"spotted\",\n \"spry\",\n \"square\",\n \"squeaky\",\n \"squiggly\",\n \"stable\",\n \"staid\",\n \"stained\",\n \"stale\",\n \"standard\",\n \"starchy\",\n \"stark\",\n \"starry\",\n \"steep\",\n \"sticky\",\n \"stiff\",\n \"stimulating\",\n \"stingy\",\n \"stormy\",\n \"straight\",\n \"strange\",\n \"steel\",\n \"strict\",\n \"strident\",\n \"striking\",\n \"striped\",\n \"strong\",\n \"studious\",\n \"stunning\",\n \"stupendous\",\n \"stupid\",\n \"sturdy\",\n \"stylish\",\n \"subdued\",\n \"submissive\",\n \"substantial\",\n \"subtle\",\n \"suburban\",\n \"sudden\",\n \"sugary\",\n \"sunny\",\n \"super\",\n \"superb\",\n \"superficial\",\n \"superior\",\n \"supportive\",\n \"sure-footed\",\n \"surprised\",\n \"suspicious\",\n \"svelte\",\n \"sweaty\",\n \"sweet\",\n \"sweltering\",\n \"swift\",\n \"sympathetic\",\n \"tall\",\n \"talkative\",\n \"tame\",\n \"tan\",\n \"tangible\",\n \"tart\",\n \"tasty\",\n \"tattered\",\n \"taut\",\n \"tedious\",\n \"teeming\",\n \"tempting\",\n \"tender\",\n \"tense\",\n \"tepid\",\n \"terrible\",\n \"terrific\",\n \"testy\",\n \"thankful\",\n \"that\",\n \"these\",\n \"thick\",\n \"thin\",\n \"third\",\n \"thirsty\",\n \"this\",\n \"thorough\",\n \"thorny\",\n \"those\",\n \"thoughtful\",\n \"threadbare\",\n \"thrifty\",\n \"thunderous\",\n \"tidy\",\n \"tight\",\n \"timely\",\n \"tinted\",\n \"tiny\",\n \"tired\",\n \"torn\",\n \"total\",\n \"tough\",\n \"traumatic\",\n \"treasured\",\n \"tremendous\",\n \"tragic\",\n \"trained\",\n \"tremendous\",\n \"triangular\",\n \"tricky\",\n \"trifling\",\n \"trim\",\n \"trivial\",\n \"troubled\",\n \"true\",\n \"trusting\",\n \"trustworthy\",\n \"trusty\",\n \"truthful\",\n \"tubby\",\n \"turbulent\",\n \"twin\",\n \"ugly\",\n \"ultimate\",\n \"unacceptable\",\n \"unaware\",\n \"uncomfortable\",\n \"uncommon\",\n \"unconscious\",\n \"understated\",\n \"unequaled\",\n \"uneven\",\n \"unfinished\",\n \"unfit\",\n \"unfolded\",\n \"unfortunate\",\n \"unhappy\",\n \"unhealthy\",\n \"uniform\",\n \"unimportant\",\n \"unique\",\n \"united\",\n \"unkempt\",\n \"unknown\",\n \"unlawful\",\n \"unlined\",\n \"unlucky\",\n \"unnatural\",\n \"unpleasant\",\n \"unrealistic\",\n \"unripe\",\n \"unruly\",\n \"unselfish\",\n \"unsightly\",\n \"unsteady\",\n \"unsung\",\n \"untidy\",\n \"untimely\",\n \"untried\",\n \"untrue\",\n \"unused\",\n \"unusual\",\n \"unwelcome\",\n \"unwieldy\",\n \"unwilling\",\n \"unwitting\",\n \"unwritten\",\n \"upbeat\",\n \"upright\",\n \"upset\",\n \"urban\",\n \"usable\",\n \"used\",\n \"useful\",\n \"useless\",\n \"utilized\",\n \"utter\",\n \"vacant\",\n \"vague\",\n \"vain\",\n \"valid\",\n \"valuable\",\n \"vapid\",\n \"variable\",\n \"vast\",\n \"velvety\",\n \"venerated\",\n \"vengeful\",\n \"verifiable\",\n \"vibrant\",\n \"vicious\",\n \"victorious\",\n \"vigilant\",\n \"vigorous\",\n \"villainous\",\n \"violet\",\n \"violent\",\n \"virtual\",\n \"virtuous\",\n \"visible\",\n \"vital\",\n \"vivacious\",\n \"vivid\",\n \"voluminous\",\n \"wan\",\n \"warlike\",\n \"warm\",\n \"warmhearted\",\n \"warped\",\n \"wary\",\n \"wasteful\",\n \"watchful\",\n \"waterlogged\",\n \"watery\",\n \"wavy\",\n \"wealthy\",\n \"weak\",\n \"weary\",\n \"webbed\",\n \"weed\",\n \"weekly\",\n \"weepy\",\n \"weighty\",\n \"weird\",\n \"welcome\",\n \"well-documented\",\n \"well-groomed\",\n \"well-informed\",\n \"well-lit\",\n \"well-made\",\n \"well-off\",\n \"well-to-do\",\n \"well-worn\",\n \"wet\",\n \"which\",\n \"whimsical\",\n \"whirlwind\",\n \"whispered\",\n \"white\",\n \"whole\",\n \"whopping\",\n \"wicked\",\n \"wide\",\n \"wide-eyed\",\n \"wiggly\",\n \"wild\",\n \"willing\",\n \"wilted\",\n \"winding\",\n \"windy\",\n \"winged\",\n \"wiry\",\n \"wise\",\n \"witty\",\n \"wobbly\",\n \"woeful\",\n \"wonderful\",\n \"wooden\",\n \"woozy\",\n \"wordy\",\n \"worldly\",\n \"worn\",\n \"worried\",\n \"worrisome\",\n \"worse\",\n \"worst\",\n \"worthless\",\n \"worthwhile\",\n \"worthy\",\n \"wrathful\",\n \"wretched\",\n \"writhing\",\n \"wrong\",\n \"wry\",\n \"yawning\",\n \"yearly\",\n \"yellow\",\n \"yellowish\",\n \"young\",\n \"youthful\",\n \"yummy\",\n \"zany\",\n \"zealous\",\n \"zesty\",\n \"zigzag\",\n];\n\nexport function getRandomUsername(): { first: string; second: string } {\n const n = Math.floor(Math.random() * noun.length);\n const a = Math.floor(Math.random() * adj.length);\n return {\n first: adj[a],\n second: noun[n],\n };\n}\n\nexport function getRandomPassword(): string {\n return encodeCrock(getRandomBytes(16));\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n OperationOk,\n TalerCoreBankResultByMethod,\n TalerHttpError,\n WithdrawalOperationStatus,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { useSessionState } from \"./session.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface InstanceTemplateFilter {\n // FIXME: add filter to the template list\n position?: string;\n}\n\nexport function revalidateAccountDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getAccount\",\n undefined,\n { revalidate: true },\n );\n}\n\nexport function useAccountDetails(account: string) {\n const { state: credentials } = useSessionState();\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([username, token]: [string, AccessToken]) {\n return await api.getAccount({ username, token });\n }\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getAccount\">,\n TalerHttpError\n >([account, token, \"getAccount\"], fetcher, {});\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateWithdrawalDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getWithdrawalById\",\n undefined,\n { revalidate: true },\n );\n}\n\nexport function useWithdrawalDetails(wid: string) {\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const [latestStatus, setLatestStatus] = useState<WithdrawalOperationStatus>();\n\n async function fetcher([wid, old_state]: [\n string,\n WithdrawalOperationStatus | undefined,\n ]) {\n return await api.getWithdrawalById(\n wid,\n old_state === undefined ? undefined : { old_state, timeoutMs: 15000 },\n );\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getWithdrawalById\">,\n TalerHttpError\n >([wid, latestStatus, \"getWithdrawalById\"], fetcher, {\n refreshInterval: 3000,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n errorRetryCount: 0,\n errorRetryInterval: 1,\n shouldRetryOnError: false,\n keepPreviousData: true,\n });\n\n const currentStatus =\n data !== undefined && data.type === \"ok\" ? data.body.status : undefined;\n\n useEffect(() => {\n if (currentStatus !== undefined && currentStatus !== latestStatus) {\n setLatestStatus(currentStatus);\n }\n }, [currentStatus]);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateTransactionDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getTransactionById\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useTransactionDetails(account: string, tid: number) {\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([username, token, txid]: [\n string,\n AccessToken,\n number,\n ]) {\n return await api.getTransactionById({ username, token }, txid);\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getTransactionById\">,\n TalerHttpError\n >([account, token, tid, \"getTransactionById\"], 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 keepPreviousData: true,\n });\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport async function revalidatePublicAccounts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getPublicAccounts\",\n undefined,\n { revalidate: true },\n );\n}\nexport function usePublicAccounts(\n filterAccount: string | undefined,\n initial?: number,\n) {\n const [offset, setOffset] = useState<number | undefined>(initial);\n\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([account, txid]: [\n string | undefined,\n number | undefined,\n ]) {\n return await api.getPublicAccounts(\n { account },\n {\n limit: PAGINATED_LIST_REQUEST,\n offset: txid ? String(txid) : undefined,\n order: \"asc\",\n },\n );\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getPublicAccounts\">,\n TalerHttpError\n >([filterAccount, offset, \"getPublicAccounts\"], 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 keepPreviousData: true,\n });\n\n if (error) return error;\n if (data === undefined) return undefined;\n // if (data.type !== \"ok\") return data;\n\n //TODO: row_id should not be optional\n return buildPaginatedResult(\n data.body.public_accounts,\n offset,\n setOffset,\n (d) => d.row_id ?? 0,\n );\n}\n\ntype PaginatedResult<T> = OperationOk<T> & {\n isLastPage: boolean;\n isFirstPage: boolean;\n loadNext(): void;\n loadFirst(): void;\n};\n//TODO: consider sending this to web-util\nexport function buildPaginatedResult<DataType, OffsetId>(\n data: DataType[],\n offset: OffsetId | undefined,\n setOffset: (o: OffsetId | undefined) => void,\n getId: (r: DataType) => OffsetId,\n): PaginatedResult<DataType[]> {\n const isLastPage = data.length < PAGINATED_LIST_REQUEST;\n const isFirstPage = offset === undefined;\n\n const result = structuredClone(data);\n if (result.length == PAGINATED_LIST_REQUEST) {\n //do now show the last element, used to know if this is the last page\n result.pop();\n }\n return {\n type: \"ok\",\n body: result,\n isLastPage,\n isFirstPage,\n loadNext: () => {\n if (!result.length) return;\n const id = getId(result[result.length - 1]);\n setOffset(id);\n },\n loadFirst: () => {\n setOffset(undefined);\n },\n };\n}\n\nexport function revalidateTransactions() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getTransactions\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useTransactions(account: string, initial?: number) {\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n\n const [offset, setOffset] = useState<number | undefined>(initial);\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([username, token, txid]: [\n string,\n AccessToken,\n number | undefined,\n ]) {\n return await api.getTransactions(\n { username, token },\n {\n limit: PAGINATED_LIST_REQUEST,\n offset: txid ? String(txid) : undefined,\n order: \"dec\",\n },\n );\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getTransactions\">,\n TalerHttpError\n >([account, token, offset, \"getTransactions\"], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n refreshWhenOffline: false,\n // revalidateOnMount: false,\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n });\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(\n data.body.transactions,\n offset,\n setOffset,\n (d) => d.row_id,\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport { useAccountDetails } from \"../../hooks/account.js\";\nimport { Props, State } from \"./index.js\";\n\nexport function useComponentState({\n account,\n tab,\n routeChargeWallet,\n routeCreateWireTransfer,\n routePublicAccounts,\n routeSolveSecondFactor,\n routeOperationDetails,\n routeWireTransfer,\n routeCashout,\n onOperationCreated,\n onClose,\n routeClose,\n onAuthorizationRequired,\n}: Props): State {\n const result = useAccountDetails(account);\n\n if (!result) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n\n if (result instanceof TalerError) {\n return {\n status: \"loading-error\",\n error: result,\n };\n }\n\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n return {\n status: \"login\",\n reason: \"forbidden\",\n };\n case HttpStatusCode.NotFound:\n return {\n status: \"login\",\n reason: \"not-found\",\n };\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n const { body: data } = result;\n\n const balance = Amounts.parseOrThrow(data.balance.amount);\n\n const debitThreshold = Amounts.parseOrThrow(data.debit_threshold);\n const payto = parsePaytoUri(data.payto_uri);\n\n if (\n !payto ||\n !payto.isKnown ||\n (payto.targetType !== \"iban\" && payto.targetType !== \"x-taler-bank\")\n ) {\n return {\n status: \"invalid-iban\",\n error: data,\n };\n }\n\n const balanceIsDebit = data.balance.credit_debit_indicator == \"debit\";\n const limit = balanceIsDebit\n ? Amounts.sub(debitThreshold, balance).amount\n : Amounts.add(balance, debitThreshold).amount;\n\n const positiveBalance = balanceIsDebit\n ? Amounts.zeroOfAmount(balance)\n : balance;\n\n return {\n status: \"ready\",\n onOperationCreated,\n error: undefined,\n tab,\n routeCashout,\n routeOperationDetails,\n routeCreateWireTransfer,\n routePublicAccounts,\n routeSolveSecondFactor,\n onAuthorizationRequired,\n onClose,\n routeClose,\n routeChargeWallet,\n routeWireTransfer,\n account,\n limit,\n balance: positiveBalance,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Attention, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Transactions } from \"../../components/Transactions/index.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { usePreferences } from \"../../hooks/preferences.js\";\nimport { PaymentOptions } from \"../PaymentOptions.js\";\nimport { State } from \"./index.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport function InvalidIbanView({ error }: State.InvalidIban) {\n return (\n <div>Payto from server is not valid &quot;{error.payto_uri}&quot;</div>\n );\n}\n\nconst IS_PUBLIC_ACCOUNT_ENABLED = false;\n\nfunction ShowDemoInfo({\n routePublicAccounts,\n}: {\n routePublicAccounts: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [settings, updateSettings] = usePreferences();\n if (!settings.showDemoDescription) return <Fragment />;\n return (\n <Attention\n title={i18n.str`This is a demo bank`}\n onClose={() => {\n updateSettings(\"showDemoDescription\", false);\n }}\n >\n {IS_PUBLIC_ACCOUNT_ENABLED ? (\n <i18n.Translate>\n This part of the demo shows how a bank that supports Taler directly\n would work. In addition to using your own bank account, you can also\n see the transaction history of some{\" \"}\n <a name=\"public account\" href={routePublicAccounts.url({})}>\n Public Accounts\n </a>\n .\n </i18n.Translate>\n ) : (\n <i18n.Translate>\n This part of the demo shows how a bank that supports Taler directly\n would work.\n </i18n.Translate>\n )}\n </Attention>\n );\n}\n\nfunction ShowPedingOperation({\n routeSolveSecondFactor,\n}: {\n routeSolveSecondFactor: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [bankState, updateBankState] = useBankState();\n if (!bankState.currentChallenge) return <Fragment />;\n const title = ((op): TranslatedString => {\n switch (op) {\n case \"delete-account\":\n return i18n.str`Pending account delete operation`;\n case \"update-account\":\n return i18n.str`Pending account update operation`;\n case \"update-password\":\n return i18n.str`Pending password update operation`;\n case \"create-transaction\":\n return i18n.str`Pending transaction operation`;\n case \"confirm-withdrawal\":\n return i18n.str`Pending withdrawal operation`;\n case \"create-cashout\":\n return i18n.str`Pending cashout operation`;\n }\n })(bankState.currentChallenge.operation);\n return (\n <Attention\n title={title}\n type=\"warning\"\n onClose={() => {\n updateBankState(\"currentChallenge\", undefined);\n }}\n >\n <i18n.Translate>\n You can complete or cancel the operation in\n </i18n.Translate>{\" \"}\n <a\n class=\"font-semibold text-yellow-700 hover:text-yellow-600\"\n name=\"complete operation\"\n href={routeSolveSecondFactor.url({})}\n >\n <i18n.Translate>this page</i18n.Translate>\n </a>\n </Attention>\n );\n}\n\nexport function ReadyView({\n tab,\n account,\n routeChargeWallet,\n routeWireTransfer,\n limit,\n balance,\n routeCashout,\n routeCreateWireTransfer,\n routePublicAccounts,\n routeOperationDetails,\n routeSolveSecondFactor,\n onClose,\n routeClose,\n onOperationCreated,\n onAuthorizationRequired,\n}: State.Ready): VNode {\n return (\n <Fragment>\n <ShowPedingOperation routeSolveSecondFactor={routeSolveSecondFactor} />\n <ShowDemoInfo routePublicAccounts={routePublicAccounts} />\n <PaymentOptions\n tab={tab}\n routeOperationDetails={routeOperationDetails}\n routeCashout={routeCashout}\n routeChargeWallet={routeChargeWallet}\n routeWireTransfer={routeWireTransfer}\n limit={limit}\n balance={balance}\n routeClose={routeClose}\n onClose={onClose}\n onOperationCreated={onOperationCreated}\n onAuthorizationRequired={onAuthorizationRequired}\n />\n <Transactions\n account={account}\n routeCreateWireTransfer={routeCreateWireTransfer}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport { useTransactions } from \"../../hooks/account.js\";\nimport { Props, State, Transaction } from \"./index.js\";\n\nexport function useComponentState({\n account,\n routeCreateWireTransfer,\n}: Props): State {\n const result = useTransactions(account);\n if (!result) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n if (result instanceof TalerError) {\n return {\n status: \"loading-error\",\n error: result,\n };\n }\n if (result.type === \"fail\") {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n\n const transactions = result.body\n .map((tx) => {\n const negative = tx.direction === \"debit\";\n const cp = parsePaytoUri(\n negative ? tx.creditor_payto_uri : tx.debtor_payto_uri,\n );\n const counterpart =\n (cp === undefined || !cp.isKnown\n ? undefined\n : cp.targetType === \"iban\"\n ? cp.iban\n : cp.targetType === \"x-taler-bank\"\n ? cp.account\n : cp.targetType === \"bitcoin\"\n ? `${cp.address.substring(0, 6)}...`\n : undefined) ?? \"unknown\";\n\n const when = AbsoluteTime.fromProtocolTimestamp(tx.date);\n const amount = Amounts.parse(tx.amount);\n const subject = tx.subject;\n return {\n negative,\n counterpart,\n when,\n amount,\n subject,\n };\n })\n .filter((x): x is Transaction => x !== undefined);\n\n return {\n status: \"ready\",\n error: undefined,\n routeCreateWireTransfer,\n transactions,\n onGoNext: result.isLastPage ? undefined : result.loadNext,\n onGoStart: result.isFirstPage ? undefined : result.loadFirst,\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 toDate from \"../toDate/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.\n * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time with local time zone, or both.\n * @returns {String} the formatted date string (in local time zone)\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.format` must be 'extended' or 'basic'\n * @throws {RangeError} `options.representation` must be 'date', 'time' or 'complete'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\n\nexport default function formatISO(date, options) {\n var _options$format, _options$representati;\n\n requiredArgs(1, arguments);\n var originalDate = toDate(date);\n\n if (isNaN(originalDate.getTime())) {\n throw new RangeError('Invalid time value');\n }\n\n var format = String((_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : 'extended');\n var representation = String((_options$representati = options === null || options === void 0 ? void 0 : options.representation) !== null && _options$representati !== void 0 ? _options$representati : 'complete');\n\n if (format !== 'extended' && format !== 'basic') {\n throw new RangeError(\"format must be 'extended' or 'basic'\");\n }\n\n if (representation !== 'date' && representation !== 'time' && representation !== 'complete') {\n throw new RangeError(\"representation must be 'date', 'time', or 'complete'\");\n }\n\n var result = '';\n var tzOffset = '';\n var dateDelimiter = format === 'extended' ? '-' : '';\n var timeDelimiter = format === 'extended' ? ':' : ''; // Representation is either 'date' or 'complete'\n\n if (representation !== 'time') {\n var day = addLeadingZeros(originalDate.getDate(), 2);\n var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n var year = addLeadingZeros(originalDate.getFullYear(), 4); // yyyyMMdd or yyyy-MM-dd.\n\n result = \"\".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day);\n } // Representation is either 'time' or 'complete'\n\n\n if (representation !== 'date') {\n // Add the timezone.\n var offset = originalDate.getTimezoneOffset();\n\n if (offset !== 0) {\n var absoluteOffset = Math.abs(offset);\n var hourOffset = addLeadingZeros(Math.floor(absoluteOffset / 60), 2);\n var minuteOffset = addLeadingZeros(absoluteOffset % 60, 2); // If less than 0, the sign is +, because it is ahead of time.\n\n var sign = offset < 0 ? '+' : '-';\n tzOffset = \"\".concat(sign).concat(hourOffset, \":\").concat(minuteOffset);\n } else {\n tzOffset = 'Z';\n }\n\n var hour = addLeadingZeros(originalDate.getHours(), 2);\n var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n var second = addLeadingZeros(originalDate.getSeconds(), 2); // If there's also date, separate it with time with 'T'\n\n var separator = result === '' ? '' : 'T'; // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n\n var time = [hour, minute, second].join(timeDelimiter); // HHmmss or HH:mm:ss.\n\n result = \"\".concat(result).concat(separator).concat(time).concat(tzOffset);\n }\n\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 addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days 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 days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months 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 months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\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 subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from 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 subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(date, 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; // Subtract years and months\n\n var dateWithoutMonths = subMonths(date, months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Attention,\n useBankCoreApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { RenderAmount } from \"../../pages/PaytoWireTransferForm.js\";\nimport { Time } from \"../Time.js\";\nimport { State } from \"./index.js\";\n\nexport function ReadyView({\n transactions,\n routeCreateWireTransfer,\n onGoNext,\n onGoStart,\n}: State.Ready): VNode {\n const { i18n, dateLocale } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n\n if (!transactions.length) {\n return (\n <div class=\"px-4 mt-4\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Transactions history</i18n.Translate>\n </h1>\n </div>\n </div>\n\n <Attention type=\"low\" title={i18n.str`No transactions yet.`}>\n <i18n.Translate>\n You can start sending a wire transfer or withdrawing to your wallet.\n </i18n.Translate>\n </Attention>\n </div>\n );\n }\n\n const txByDate = transactions.reduce(\n (prev, cur) => {\n const d =\n cur.when.t_ms === \"never\"\n ? \"\"\n : format(cur.when.t_ms, \"dd/MM/yyyy\", { locale: dateLocale });\n if (!prev[d]) {\n prev[d] = [];\n }\n prev[d].push(cur);\n return prev;\n },\n {} as Record<string, typeof transactions>,\n );\n return (\n <div class=\"px-4 mt-8\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Transactions history</i18n.Translate>\n </h1>\n </div>\n </div>\n <div class=\"-mx-4 mt-5 ring-1 ring-gray-300 sm:mx-0 rounded-lg min-w-fit bg-white\">\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n class=\"pl-2 py-3.5 text-left text-sm font-semibold text-gray-900 \"\n >{i18n.str`Date`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900 \"\n >{i18n.str`Amount`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900 \"\n >{i18n.str`Counterpart`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900 \"\n >{i18n.str`Subject`}</th>\n </tr>\n </thead>\n <tbody>\n {Object.entries(txByDate).map(([date, txs], idx) => {\n return (\n <Fragment key={idx}>\n <tr class=\"border-t border-gray-200\">\n <th\n colSpan={4}\n scope=\"colgroup\"\n class=\"bg-gray-50 py-2 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-3\"\n >\n {date}\n </th>\n </tr>\n {txs.map((item) => {\n return (\n <tr\n key={idx}\n class=\"border-b border-gray-200 last:border-none\"\n >\n <td class=\"relative py-2 pl-2 pr-2 text-sm \">\n <div class=\"font-medium text-gray-900\">\n <Time\n format=\"HH:mm:ss\"\n timestamp={item.when}\n // relative={Duration.fromSpec({ days: 1 })}\n />\n </div>\n <dl class=\"font-normal sm:hidden\">\n <dt class=\"sr-only sm:hidden\">\n <i18n.Translate>Amount</i18n.Translate>\n </dt>\n <dd class=\"mt-1 truncate text-gray-700\">\n {item.negative\n ? i18n.str`sent`\n : i18n.str`received`}{\" \"}\n {item.amount ? (\n <span\n data-negative={\n item.negative ? \"true\" : \"false\"\n }\n class=\"data-[negative=false]:text-green-600 data-[negative=true]:text-red-600\"\n >\n <RenderAmount\n value={item.amount}\n spec={config.currency_specification}\n />\n </span>\n ) : (\n <span style={{ color: \"grey\" }}>\n &lt;{i18n.str`Invalid value`}&gt;\n </span>\n )}\n </dd>\n\n <dt class=\"sr-only sm:hidden\">\n <i18n.Translate>Counterpart</i18n.Translate>\n </dt>\n <dd class=\"mt-1 truncate text-gray-500 sm:hidden\">\n {item.negative ? i18n.str`to` : i18n.str`from`}{\" \"}\n {!routeCreateWireTransfer ? (\n item.counterpart\n ) : (\n <a\n name={`transfer to ${item.counterpart}`}\n href={routeCreateWireTransfer.url({\n account: item.counterpart,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n {item.counterpart}\n </a>\n )}\n </dd>\n <dd class=\"mt-1 text-gray-500 sm:hidden\">\n <pre class=\"break-words w-56 whitespace-break-spaces p-2 rounded-md mx-auto my-2 bg-gray-100\">\n {item.subject}\n </pre>\n </dd>\n </dl>\n </td>\n <td\n data-negative={item.negative ? \"true\" : \"false\"}\n class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-gray-500 \"\n >\n {item.amount ? (\n <RenderAmount\n value={item.amount}\n negative={item.negative}\n withColor\n spec={config.currency_specification}\n />\n ) : (\n <span style={{ color: \"grey\" }}>\n &lt;{i18n.str`Invalid value`}&gt;\n </span>\n )}\n </td>\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-gray-500\">\n {!routeCreateWireTransfer ? (\n item.counterpart\n ) : (\n <a\n name={`wire transfer to ${item.counterpart}`}\n href={routeCreateWireTransfer.url({\n account: item.counterpart,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n {item.counterpart}\n </a>\n )}\n </td>\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-gray-500 break-all min-w-md\">\n {item.subject}\n </td>\n </tr>\n );\n })}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n\n <nav\n class=\"flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 rounded-lg\"\n aria-label=\"Pagination\"\n >\n <div class=\"flex flex-1 justify-between sm:justify-end\">\n <button\n name=\"first page\"\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onGoStart}\n onClick={onGoStart}\n >\n <i18n.Translate>First page</i18n.Translate>\n </button>\n <button\n name=\"next page\"\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 ml-3 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onGoNext}\n onClick={onGoNext}\n >\n <i18n.Translate>Next</i18n.Translate>\n </button>\n </div>\n </nav>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, Duration } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport {\n formatISO,\n format,\n formatDuration,\n intervalToDuration,\n} from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\n\n/**\n *\n * @param timestamp time to be formatted\n * @param relative duration threshold, if the difference is lower\n * the timestamp will be formatted as relative time from \"now\"\n *\n * @returns\n */\nexport function Time({\n timestamp,\n relative,\n format: formatString,\n}: {\n timestamp: AbsoluteTime | undefined;\n relative?: Duration;\n format: string;\n}): VNode {\n const { i18n, dateLocale } = useTranslationContext();\n if (!timestamp) return <Fragment />;\n\n if (timestamp.t_ms === \"never\") {\n return <time>{i18n.str`never`}</time>;\n }\n\n const now = AbsoluteTime.now();\n const diff = AbsoluteTime.difference(now, timestamp);\n if (relative && now.t_ms !== \"never\" && Duration.cmp(diff, relative) === -1) {\n const d = intervalToDuration({\n start: now.t_ms,\n end: timestamp.t_ms,\n });\n d.seconds = 0;\n const duration = formatDuration(d, { locale: dateLocale });\n const isFuture = AbsoluteTime.cmp(now, timestamp) < 0;\n if (isFuture) {\n return (\n <time dateTime={formatISO(timestamp.t_ms)}>\n <i18n.Translate>in {duration}</i18n.Translate>\n </time>\n );\n } else {\n return (\n <time dateTime={formatISO(timestamp.t_ms)}>\n <i18n.Translate>{duration} ago</i18n.Translate>\n </time>\n );\n }\n }\n return (\n <time dateTime={formatISO(timestamp.t_ms)}>\n {format(timestamp.t_ms, formatString, { locale: dateLocale })}\n </time>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, AmountJson, TalerError } from \"@gnu-taler/taler-util\";\nimport { Loading, utils } from \"@gnu-taler/web-util/browser\";\nimport { ErrorLoadingWithDebug } from \"../ErrorLoadingWithDebug.js\";\nimport { useComponentState } from \"./state.js\";\nimport { ReadyView } from \"./views.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport interface Props {\n account: string;\n routeCreateWireTransfer:\n | RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>\n | undefined;\n}\n\nexport type State = State.Loading | State.LoadingUriError | State.Ready;\n\nexport namespace State {\n export interface Loading {\n status: \"loading\";\n error: undefined;\n }\n\n export interface LoadingUriError {\n status: \"loading-error\";\n error: TalerError;\n }\n\n export interface BaseInfo {\n error: undefined;\n }\n export interface Ready extends BaseInfo {\n status: \"ready\";\n error: undefined;\n routeCreateWireTransfer:\n | RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>\n | undefined;\n transactions: Transaction[];\n onGoStart?: () => void;\n onGoNext?: () => void;\n }\n}\n\nexport interface Transaction {\n negative: boolean;\n counterpart: string;\n when: AbsoluteTime;\n amount: AmountJson | undefined;\n subject: string;\n}\n\nconst viewMapping: utils.StateViewMap<State> = {\n loading: Loading,\n \"loading-error\": ErrorLoadingWithDebug,\n ready: ReadyView,\n};\n\nexport const Transactions = utils.compose(\n (p: Props) => useComponentState(p),\n viewMapping,\n);\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountJson, TalerError } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect } from \"preact/hooks\";\nimport { useWithdrawalDetails } from \"../hooks/account.js\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { PaytoWireTransferForm } from \"./PaytoWireTransferForm.js\";\nimport { WalletWithdrawForm } from \"./WalletWithdrawForm.js\";\n\nfunction ShowOperationPendingTag({\n woid,\n onOperationAlreadyCompleted,\n}: {\n woid: string;\n onOperationAlreadyCompleted?: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const result = useWithdrawalDetails(woid);\n const loading = !result;\n const error =\n !loading && (result instanceof TalerError || result.type === \"fail\");\n const pending =\n !loading &&\n !error &&\n (result.body.status === \"pending\" || result.body.status === \"selected\") &&\n credentials.status === \"loggedIn\" &&\n credentials.username === result.body.username;\n useEffect(() => {\n if (!loading && !pending && onOperationAlreadyCompleted) {\n onOperationAlreadyCompleted();\n }\n }, [pending]);\n\n if (error || !pending) {\n return <Fragment />;\n }\n\n return (\n <span class=\"flex items-center gap-x-1.5 w-fit rounded-md bg-green-100 px-2 py-1 text-xs font-medium text-green-700 whitespace-pre\">\n <svg\n class=\"h-1.5 w-1.5 fill-green-500\"\n viewBox=\"0 0 6 6\"\n aria-hidden=\"true\"\n >\n <circle cx=\"3\" cy=\"3\" r=\"3\" />\n </svg>\n <i18n.Translate>Operation ready</i18n.Translate>\n </span>\n );\n}\n\n/**\n * Let the user choose a payment option,\n * then specify the details trigger the action.\n */\nexport function PaymentOptions({\n routeClose,\n routeCashout,\n routeChargeWallet,\n routeWireTransfer,\n tab,\n limit,\n balance,\n onOperationCreated,\n onClose,\n routeOperationDetails,\n onAuthorizationRequired,\n}: {\n limit: AmountJson;\n balance: AmountJson;\n tab: \"charge-wallet\" | \"wire-transfer\" | undefined;\n onAuthorizationRequired: () => void;\n onOperationCreated: (wopid: string) => void;\n onClose: () => void;\n\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n routeClose: RouteDefinition;\n routeCashout: RouteDefinition;\n routeChargeWallet: RouteDefinition;\n routeWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [bankState, updateBankState] = useBankState();\n\n return (\n <div class=\"mt-4\">\n <fieldset>\n <legend class=\"px-4 text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Send money</i18n.Translate>\n </legend>\n\n <div class=\"px-4 mt-4 grid grid-cols-1 gap-y-6 sm:grid-cols-2 sm:gap-x-4\">\n {/* <!-- Active: \"border-indigo-600 ring-2 ring-indigo-600\", Not Active: \"border-gray-300\" --> */}\n <a name=\"charge wallet\" href={routeChargeWallet.url({})}>\n <label\n class={\n \"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none\" +\n (tab === \"charge-wallet\"\n ? \"border-indigo-600 ring-2 ring-indigo-600\"\n : \"border-gray-300\")\n }\n >\n <div class=\"flex flex-col\">\n <span class=\"flex\">\n <div class=\"text-4xl mr-4 my-auto\">&#x1F4B5;</div>\n <span class=\"grow self-center text-lg text-gray-900 align-middle text-center\">\n <i18n.Translate>to a Taler wallet</i18n.Translate>\n </span>\n <svg\n class=\"self-center flex-none h-5 w-5 text-indigo-600\"\n style={{\n visibility:\n tab === \"charge-wallet\" ? \"visible\" : \"hidden\",\n }}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n <div class=\"mt-1 flex items-center text-sm text-gray-500\">\n <i18n.Translate>\n Withdraw digital money into your mobile wallet or browser\n extension\n </i18n.Translate>\n </div>\n {!!bankState.currentWithdrawalOperationId && (\n <ShowOperationPendingTag\n woid={bankState.currentWithdrawalOperationId}\n onOperationAlreadyCompleted={() => {\n updateBankState(\n \"currentWithdrawalOperationId\",\n undefined,\n );\n }}\n />\n )}\n </div>\n </label>\n </a>\n\n <a name=\"wire transfer\" href={routeWireTransfer.url({})}>\n <label\n class={\n \"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none\" +\n (tab === \"wire-transfer\"\n ? \"border-indigo-600 ring-2 ring-indigo-600\"\n : \"border-gray-300\")\n }\n >\n <div class=\"flex flex-col\">\n <span class=\"flex\">\n <div class=\"text-4xl mr-4 my-auto\">&#x2194;</div>\n <span class=\"grow self-center text-lg font-medium text-gray-900 align-middle text-center\">\n <i18n.Translate>to another bank account</i18n.Translate>\n </span>\n <svg\n class=\"self-center flex-none h-5 w-5 text-indigo-600\"\n style={{\n visibility:\n tab === \"wire-transfer\" ? \"visible\" : \"hidden\",\n }}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n <div class=\"mt-1 flex items-center text-sm text-gray-500\">\n <i18n.Translate>\n Make a wire transfer to an account with known bank account\n number.\n </i18n.Translate>\n </div>\n </div>\n </label>\n </a>\n </div>\n {tab === \"charge-wallet\" && (\n <WalletWithdrawForm\n routeOperationDetails={routeOperationDetails}\n focus\n limit={limit}\n balance={balance}\n onAuthorizationRequired={onAuthorizationRequired}\n onOperationCreated={onOperationCreated}\n onOperationAborted={onClose}\n routeCancel={routeClose}\n />\n )}\n {tab === \"wire-transfer\" && (\n <PaytoWireTransferForm\n focus\n routeHere={routeWireTransfer}\n limit={limit}\n balance={balance}\n onAuthorizationRequired={onAuthorizationRequired}\n onSuccess={onClose}\n routeCashout={routeCashout}\n routeCancel={routeClose}\n />\n )}\n </fieldset>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n HttpStatusCode,\n TranslatedString,\n assertUnreachable,\n parseWithdrawUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n notifyError,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { forwardRef } from \"preact/compat\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { usePreferences } from \"../hooks/preferences.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../utils.js\";\nimport { OperationState } from \"./OperationState/index.js\";\nimport {\n InputAmount,\n RenderAmount,\n doAutoFocus,\n} from \"./PaytoWireTransferForm.js\";\n\nconst RefAmount = forwardRef(InputAmount);\n\nfunction OldWithdrawalForm({\n onOperationCreated,\n limit,\n balance,\n routeCancel,\n focus,\n routeOperationDetails,\n}: {\n limit: AmountJson;\n balance: AmountJson;\n focus?: boolean;\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n onOperationCreated: (wopid: string) => void;\n routeCancel: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreferences();\n\n // const walletInegrationApi = useTalerWalletIntegrationAPI()\n // const { navigateTo } = useNavigationContext();\n\n const [bankState, updateBankState] = useBankState();\n const {\n lib: { bank: api },\n config,\n } = useBankCoreApiContext();\n\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n\n const [amountStr, setAmountStr] = useState<string | undefined>(\n `${settings.maxWithdrawalAmount}`,\n );\n const [notification, notify, handleError] = useLocalNotification();\n\n if (bankState.currentWithdrawalOperationId) {\n // FIXME: doing the preventDefault is not optimal\n\n // const suri = stringifyWithdrawUri({\n // bankIntegrationApiBaseUrl: api.getIntegrationAPI().baseUrl,\n // withdrawalOperationId: bankState.currentWithdrawalOperationId,\n // });\n // const uri = parseWithdrawUri(suri)!\n const url = routeOperationDetails.url({\n wopid: bankState.currentWithdrawalOperationId,\n });\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`There is an operation already`}\n onClose={() => {\n updateBankState(\"currentWithdrawalOperationId\", undefined);\n }}\n >\n <span ref={focus ? doAutoFocus : undefined} />\n <i18n.Translate>Complete the operation in</i18n.Translate>{\" \"}\n <a\n class=\"font-semibold text-yellow-700 hover:text-yellow-600\"\n name=\"complete operation\"\n href={url}\n // onClick={(e) => {\n // e.preventDefault()\n // walletInegrationApi.publishTalerAction(uri, () => {\n // navigateTo(url)\n // })\n // }}\n >\n <i18n.Translate>this page</i18n.Translate>\n </a>\n </Attention>\n );\n }\n\n const trimmedAmountStr = amountStr?.trim();\n\n const parsedAmount = trimmedAmountStr\n ? Amounts.parse(`${limit.currency}:${trimmedAmountStr}`)\n : undefined;\n\n const errors = undefinedIfEmpty({\n amount:\n trimmedAmountStr == null\n ? i18n.str`Required`\n : !parsedAmount\n ? i18n.str`Invalid`\n : Amounts.cmp(limit, parsedAmount) === -1\n ? i18n.str`Balance is not enough`\n : undefined,\n });\n\n async function doStart() {\n if (!parsedAmount || !creds) return;\n await handleError(async () => {\n const resp = await api.createWithdrawal(creds, {\n amount: Amounts.stringify(parsedAmount),\n });\n if (resp.type === \"ok\") {\n const uri = parseWithdrawUri(resp.body.taler_withdraw_uri);\n if (!uri) {\n return notifyError(\n i18n.str`Server responded with an invalid withdraw URI`,\n i18n.str`Withdraw URI: ${resp.body.taler_withdraw_uri}`,\n );\n } else {\n updateBankState(\n \"currentWithdrawalOperationId\",\n uri.withdrawalOperationId,\n );\n onOperationCreated(uri.withdrawalOperationId);\n }\n } else {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n notify({\n type: \"error\",\n title: i18n.str`The operation was rejected due to insufficient funds`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n break;\n }\n case HttpStatusCode.Unauthorized: {\n notify({\n type: \"error\",\n title: i18n.str`The operation was rejected due to insufficient funds`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n break;\n }\n case HttpStatusCode.NotFound: {\n notify({\n type: \"error\",\n title: i18n.str`Account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n break;\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n return (\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2 mt-4\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"px-4 py-6 \">\n <div class=\"grid max-w-xs grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label for=\"withdraw-amount\">{i18n.str`Amount`}</label>\n <RefAmount\n currency={limit.currency}\n value={amountStr}\n name=\"withdraw-amount\"\n onChange={(v) => {\n setAmountStr(v);\n }}\n error={errors?.amount}\n ref={focus ? doAutoFocus : undefined}\n />\n </div>\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Current balance is{\" \"}\n <RenderAmount\n value={balance}\n spec={config.currency_specification}\n />\n </i18n.Translate>\n </p>\n {Amounts.cmp(limit, balance) > 0 ? (\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Your account allows you to withdraw{\" \"}\n <RenderAmount\n value={limit}\n spec={config.currency_specification}\n />\n </i18n.Translate>\n </p>\n ) : undefined}\n <div class=\"mt-4\">\n <div class=\"sm:inline\">\n <button\n type=\"button\"\n name=\"set 50\"\n class=\" inline-flex px-6 py-4 text-sm items-center rounded-l-md bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n setAmountStr(\"50.00\");\n }}\n >\n 50.00\n </button>\n <button\n type=\"button\"\n name=\"set 25\"\n class=\" -ml-px -mr-px inline-flex px-6 py-4 text-sm items-center rounded-r-md sm:rounded-none bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n setAmountStr(\"25.00\");\n }}\n >\n 25.00\n </button>\n </div>\n <div class=\"mt-4 sm:inline\">\n <button\n type=\"button\"\n name=\"set 10\"\n class=\" -ml-px -mr-px inline-flex px-6 py-4 text-sm items-center rounded-l-md sm:rounded-none bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n setAmountStr(\"10.00\");\n }}\n >\n 10.00\n </button>\n <button\n type=\"button\"\n name=\"set 5\"\n class=\" inline-flex px-6 py-4 text-sm items-center rounded-r-md bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n setAmountStr(\"5.00\");\n }}\n >\n 5.00\n </button>\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeCancel.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"continue\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n // disabled={isRawPayto ? !!errorsPayto : !!errorsWire}\n onClick={(e) => {\n e.preventDefault();\n doStart();\n }}\n >\n <i18n.Translate>Continue</i18n.Translate>\n </button>\n </div>\n </form>\n );\n}\n\nexport function WalletWithdrawForm({\n focus,\n limit,\n balance,\n routeCancel,\n onAuthorizationRequired,\n onOperationCreated,\n onOperationAborted,\n routeOperationDetails,\n}: {\n limit: AmountJson;\n balance: AmountJson;\n focus?: boolean;\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n onAuthorizationRequired: () => void;\n onOperationCreated: (wopid: string) => void;\n onOperationAborted: () => void;\n routeCancel: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [settings, updateSettings] = usePreferences();\n\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Prepare your Taler wallet</i18n.Translate>\n </h2>\n <p class=\"mt-1 text-sm text-gray-500\">\n <i18n.Translate>\n After using your wallet you will need to confirm or cancel the\n operation on this site.\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"col-span-2\">\n {settings.showInstallWallet && (\n <Attention\n title={i18n.str`You need a Taler wallet`}\n onClose={() => {\n updateSettings(\"showInstallWallet\", false);\n }}\n >\n <i18n.Translate>\n If you don't have one yet you can follow the instruction in\n </i18n.Translate>{\" \"}\n <a\n target=\"_blank\"\n name=\"wallet page\"\n rel=\"noreferrer noopener\"\n class=\"font-semibold text-blue-700 hover:text-blue-600\"\n href=\"https://taler.net/en/wallet.html\"\n >\n <i18n.Translate>this page</i18n.Translate>\n </a>\n </Attention>\n )}\n\n {!settings.fastWithdrawal ? (\n <OldWithdrawalForm\n focus={focus}\n routeOperationDetails={routeOperationDetails}\n limit={limit}\n balance={balance}\n routeCancel={routeCancel}\n onOperationCreated={onOperationCreated}\n />\n ) : (\n <OperationState\n currency={limit.currency}\n onAuthorizationRequired={onAuthorizationRequired}\n routeClose={routeCancel}\n routeHere={routeOperationDetails}\n onAbort={onOperationAborted}\n // route={routeCancel}\n />\n )}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerCoreBankErrorsByMethod,\n TalerError,\n assertUnreachable,\n parsePaytoUri,\n parseWithdrawUri,\n stringifyWithdrawUri,\n} from \"@gnu-taler/taler-util\";\nimport { utils } from \"@gnu-taler/web-util/browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { mutate } from \"swr\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useWithdrawalDetails } from \"../../hooks/account.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { usePreferences } from \"../../hooks/preferences.js\";\nimport { Props, State } from \"./index.js\";\n\nexport function useComponentState({\n currency,\n routeClose,\n onAbort,\n routeHere,\n onAuthorizationRequired,\n}: Props): utils.RecursiveState<State> {\n const [settings] = usePreferences();\n const [bankState, updateBankState] = useBankState();\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const {\n lib: { bank },\n } = useBankCoreApiContext();\n\n const [failure, setFailure] = useState<\n TalerCoreBankErrorsByMethod<\"createWithdrawal\"> | undefined\n >();\n const amount = settings.maxWithdrawalAmount;\n\n async function doSilentStart() {\n // FIXME: if amount is not enough use balance\n const parsedAmount = Amounts.parseOrThrow(`${currency}:${amount}`);\n if (!creds) return;\n const resp = await bank.createWithdrawal(creds, {\n amount: Amounts.stringify(parsedAmount),\n });\n if (resp.type === \"fail\") {\n setFailure(resp);\n return;\n }\n updateBankState(\"currentWithdrawalOperationId\", resp.body.withdrawal_id);\n }\n\n const withdrawalOperationId = bankState.currentWithdrawalOperationId;\n useEffect(() => {\n if (withdrawalOperationId === undefined) {\n doSilentStart();\n }\n }, [settings.fastWithdrawal, amount]);\n\n if (failure) {\n return {\n status: \"failed\",\n error: failure,\n };\n }\n\n if (!withdrawalOperationId) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n\n const wid = withdrawalOperationId;\n\n async function doAbort() {\n if (!creds) return;\n const resp = await bank.abortWithdrawalById(creds, wid);\n if (resp.type === \"ok\") {\n // updateBankState(\"currentWithdrawalOperationId\", undefined)\n onAbort();\n } else {\n return resp;\n }\n }\n\n async function doConfirm(): Promise<\n TalerCoreBankErrorsByMethod<\"confirmWithdrawalById\"> | undefined\n > {\n if (!creds) return;\n const resp = await bank.confirmWithdrawalById(creds, wid);\n if (resp.type === \"ok\") {\n mutate(() => true); //clean withdrawal state\n } else {\n return resp;\n }\n }\n\n const uri = stringifyWithdrawUri({\n bankIntegrationApiBaseUrl: bank.getIntegrationAPI().href,\n withdrawalOperationId,\n });\n const parsedUri = parseWithdrawUri(uri);\n if (!parsedUri) {\n return {\n status: \"invalid-withdrawal\",\n error: undefined,\n uri,\n };\n }\n\n return (): utils.RecursiveState<State> => {\n const result = useWithdrawalDetails(withdrawalOperationId);\n const shouldCreateNewOperation = result && !(result instanceof TalerError);\n\n useEffect(() => {\n if (shouldCreateNewOperation) {\n doSilentStart();\n }\n }, []);\n if (!result) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n if (result instanceof TalerError) {\n return {\n status: \"loading-error\",\n error: result,\n };\n }\n\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.NotFound: {\n return {\n status: \"aborted\",\n error: undefined,\n routeClose,\n };\n }\n default:\n assertUnreachable(result);\n }\n }\n\n const { body: data } = result;\n if (data.status === \"aborted\") {\n return {\n status: \"aborted\",\n error: undefined,\n routeClose,\n };\n }\n\n if (data.status === \"confirmed\") {\n if (!settings.showWithdrawalSuccess) {\n updateBankState(\"currentWithdrawalOperationId\", undefined);\n // onClose()\n }\n return {\n status: \"confirmed\",\n error: undefined,\n routeClose,\n };\n }\n\n if (data.status === \"pending\") {\n return {\n status: \"ready\",\n error: undefined,\n uri: parsedUri,\n routeClose,\n onAbort: !creds\n ? async () => {\n onAbort();\n return undefined;\n }\n : doAbort,\n };\n }\n\n if (!data.selected_reserve_pub) {\n return {\n status: \"invalid-reserve\",\n error: undefined,\n reserve: data.selected_reserve_pub,\n };\n }\n\n const account = !data.selected_exchange_account\n ? undefined\n : parsePaytoUri(data.selected_exchange_account);\n\n if (!account) {\n return {\n status: \"invalid-payto\",\n error: undefined,\n payto: data.selected_exchange_account,\n };\n }\n\n return {\n status: \"need-confirmation\",\n error: undefined,\n routeHere,\n onAuthorizationRequired,\n account: data.username,\n id: withdrawalOperationId,\n onAbort: !creds ? undefined : doAbort,\n onConfirm: !creds ? undefined : doConfirm,\n };\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n stringifyWithdrawUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n notifyInfo,\n useLocalNotification,\n useTalerWalletIntegrationAPI,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect } from \"preact/hooks\";\nimport { QR } from \"../../components/QR.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { usePreferences } from \"../../hooks/preferences.js\";\nimport { ShouldBeSameUser } from \"../WithdrawalConfirmationQuestion.js\";\nimport { State } from \"./index.js\";\n\nexport function InvalidPaytoView({ payto }: State.InvalidPayto) {\n return <div>Payto from server is not valid &quot;{payto}&quot;</div>;\n}\nexport function InvalidWithdrawalView({ uri }: State.InvalidWithdrawal) {\n return <div>Withdrawal uri from server is not valid &quot;{uri}&quot;</div>;\n}\nexport function InvalidReserveView({ reserve }: State.InvalidReserve) {\n return <div>Reserve from server is not valid &quot;{reserve}&quot;</div>;\n}\n\nexport function NeedConfirmationView({\n onAbort: doAbort,\n onConfirm: doConfirm,\n routeHere,\n account,\n id,\n onAuthorizationRequired,\n}: State.NeedConfirmation) {\n const { i18n } = useTranslationContext();\n const [settings] = usePreferences();\n const [notification, notify, errorHandler] = useLocalNotification();\n const [, updateBankState] = useBankState();\n\n async function onCancel() {\n errorHandler(async () => {\n if (!doAbort) return;\n const resp = await doAbort();\n if (!resp) return;\n switch (resp.case) {\n case HttpStatusCode.Conflict:\n return notify({\n type: \"error\",\n title: i18n.str`The reserve operation has been confirmed previously and can't be aborted`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n });\n }\n\n async function onConfirm() {\n errorHandler(async () => {\n if (!doConfirm) return;\n const resp = await doConfirm();\n if (!resp) {\n if (!settings.showWithdrawalSuccess) {\n notifyInfo(i18n.str`Wire transfer completed!`);\n }\n return;\n }\n switch (resp.case) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return notify({\n type: \"error\",\n title: i18n.str`The withdrawal has been aborted previously and can't be confirmed`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return notify({\n type: \"error\",\n title: i18n.str`The withdrawal operation can't be confirmed before a wallet accepted the transaction.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`Your balance is not enough.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"confirm-withdrawal\",\n id: String(resp.body.challenge_id),\n sent: AbsoluteTime.never(),\n location: routeHere.url({ wopid: id }),\n request: id,\n });\n return onAuthorizationRequired();\n }\n default:\n assertUnreachable(resp);\n }\n });\n }\n\n return (\n <div class=\"bg-white shadow sm:rounded-lg\">\n <LocalNotificationBanner notification={notification} />\n <div class=\"px-4 py-5 sm:p-6\">\n <h3 class=\"text-base font-semibold text-gray-900\">\n <i18n.Translate>Confirm the withdrawal operation</i18n.Translate>\n </h3>\n <div class=\"mt-3 text-sm leading-6\">\n <ShouldBeSameUser username={account}>\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <button\n type=\"button\"\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n onClick={(e) => {\n e.preventDefault();\n onCancel();\n }}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n type=\"submit\"\n name=\"transfer\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n onClick={(e) => {\n e.preventDefault();\n onConfirm();\n }}\n >\n <i18n.Translate>Transfer</i18n.Translate>\n </button>\n </div>\n </form>\n </ShouldBeSameUser>\n </div>\n </div>\n </div>\n );\n}\nexport function FailedView({ error }: State.Failed) {\n const { i18n } = useTranslationContext();\n switch (error.case) {\n case HttpStatusCode.Unauthorized:\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`Unauthorized to make the operation, maybe the session has expired or the password changed.`}\n >\n <div class=\"mt-2 text-sm text-red-700\">{error.detail.hint}</div>\n </Attention>\n );\n case HttpStatusCode.Conflict:\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation was rejected due to insufficient funds.`}\n >\n <div class=\"mt-2 text-sm text-red-700\">{error.detail.hint}</div>\n </Attention>\n );\n case HttpStatusCode.NotFound:\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation was rejected due to insufficient funds.`}\n >\n <div class=\"mt-2 text-sm text-red-700\">{error.detail.hint}</div>\n </Attention>\n );\n default:\n assertUnreachable(error);\n }\n}\n\nexport function AbortedView() {\n return <div>aborted</div>;\n}\n\nexport function ConfirmedView({ routeClose }: State.Confirmed) {\n const { i18n } = useTranslationContext();\n const [settings, updateSettings] = usePreferences();\n return (\n <Fragment>\n <div class=\"relative ml-auto mr-auto transform overflow-hidden rounded-lg bg-white p-4 text-left shadow-xl transition-all \">\n <div class=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-100\">\n <svg\n class=\"h-6 w-6 text-green-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4.5 12.75l6 6 9-13.5\"\n />\n </svg>\n </div>\n <div class=\"mt-3 text-center sm:mt-5\">\n <h3\n class=\"text-base font-semibold leading-6 text-gray-900\"\n id=\"modal-title\"\n >\n <i18n.Translate>Withdrawal confirmed</i18n.Translate>\n </h3>\n <div class=\"mt-2\">\n <p class=\"text-sm text-gray-500\">\n <i18n.Translate>\n The wire transfer to the Taler operator has been initiated. You\n will soon receive the requested amount in your Taler wallet.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Do not show this again</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name=\"toggle withdrawal\"\n data-enabled={!settings.showWithdrawalSuccess}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n updateSettings(\n \"showWithdrawalSuccess\",\n !settings.showWithdrawalSuccess,\n );\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={!settings.showWithdrawalSuccess}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n type=\"button\"\n name=\"close\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </Fragment>\n );\n}\n\nexport function ReadyView({ uri, onAbort: doAbort }: State.Ready): VNode {\n const { i18n } = useTranslationContext();\n const walletInegrationApi = useTalerWalletIntegrationAPI();\n const [notification, notify, errorHandler] = useLocalNotification();\n\n const talerWithdrawUri = stringifyWithdrawUri(uri);\n useEffect(() => {\n walletInegrationApi.publishTalerAction(uri);\n }, []);\n\n async function onAbort() {\n errorHandler(async () => {\n const hasError = await doAbort();\n if (!hasError) return;\n switch (hasError.case) {\n case HttpStatusCode.Conflict:\n return notify({\n type: \"error\",\n title: i18n.str`The reserve operation has been confirmed previously and can't be aborted`,\n description: hasError.detail.hint as TranslatedString,\n debug: hasError.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: hasError.detail.hint as TranslatedString,\n debug: hasError.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: hasError.detail.hint as TranslatedString,\n debug: hasError.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(hasError);\n }\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"flex justify-end mt-4\">\n <button\n type=\"button\"\n name=\"cancel\"\n class=\"inline-flex items-center rounded-md bg-red-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-500\"\n onClick={onAbort}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n </div>\n\n <div class=\"bg-white shadow sm:rounded-lg mt-4\">\n <div class=\"p-4\">\n <h3 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>On this device</i18n.Translate>\n </h3>\n <div class=\"mt-2 sm:flex sm:items-start sm:justify-between\">\n <div class=\"max-w-xl text-sm text-gray-500\">\n <p>\n <i18n.Translate>\n If you are using a web browser on desktop you can also\n </i18n.Translate>\n </p>\n </div>\n <div class=\"mt-5 sm:ml-6 sm:mt-0 sm:flex sm:flex-shrink-0 sm:items-center\">\n <a\n href={talerWithdrawUri}\n name=\"start\"\n class=\"inline-flex items-center disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Start</i18n.Translate>\n </a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bg-white shadow sm:rounded-lg mt-2\">\n <div class=\"p-4\">\n <h3 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>On a mobile phone</i18n.Translate>\n </h3>\n <div class=\"mt-2 sm:flex sm:items-start sm:justify-between\">\n <div class=\"max-w-xl text-sm text-gray-500\">\n <p>\n <i18n.Translate>\n Scan the QR code with your mobile device.\n </i18n.Translate>\n </p>\n </div>\n </div>\n <div class=\"mt-2 max-w-md ml-auto mr-auto\">\n <QR text={talerWithdrawUri} />\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"left\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n marginRight: \"auto\",\n marginLeft: \"auto\",\n }}\n ref={divRef}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n HttpStatusCode,\n PaytoUri,\n PaytoUriIBAN,\n PaytoUriTalerBank,\n TalerErrorCode,\n TranslatedString,\n WithdrawUriResult,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { mutate } from \"swr\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { usePreferences } from \"../hooks/preferences.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { LoginForm } from \"./LoginForm.js\";\nimport { RenderAmount } from \"./PaytoWireTransferForm.js\";\n\ninterface Props {\n onAborted: () => void;\n withdrawUri: WithdrawUriResult;\n routeHere: RouteDefinition<{ wopid: string }>;\n details: {\n account: PaytoUri;\n reserve: string;\n username: string;\n amount: AmountJson;\n };\n onAuthorizationRequired: () => void;\n}\n/**\n * Additional authentication required to complete the operation.\n * Not providing a back button, only abort.\n */\nexport function WithdrawalConfirmationQuestion({\n onAborted,\n details,\n onAuthorizationRequired,\n routeHere,\n withdrawUri,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreferences();\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const [, updateBankState] = useBankState();\n\n const [notification, notify, handleError] = useLocalNotification();\n\n const {\n config,\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function doTransfer() {\n await handleError(async () => {\n if (!creds) return;\n const resp = await api.confirmWithdrawalById(\n creds,\n withdrawUri.withdrawalOperationId,\n );\n if (resp.type === \"ok\") {\n mutate(() => true); // clean any info that we have\n if (!settings.showWithdrawalSuccess) {\n notifyInfo(i18n.str`Wire transfer completed!`);\n }\n } else {\n switch (resp.case) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return notify({\n type: \"error\",\n title: i18n.str`The withdrawal has been aborted previously and can't be confirmed`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return notify({\n type: \"error\",\n title: i18n.str`The withdrawal operation can't be confirmed before a wallet accepted the transaction.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`Your balance is not enough for the operation.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"confirm-withdrawal\",\n id: String(resp.body.challenge_id),\n location: routeHere.url({\n wopid: withdrawUri.withdrawalOperationId,\n }),\n sent: AbsoluteTime.never(),\n request: withdrawUri.withdrawalOperationId,\n });\n return onAuthorizationRequired();\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n async function doCancel() {\n await handleError(async () => {\n if (!creds) return;\n const resp = await api.abortWithdrawalById(\n creds,\n withdrawUri.withdrawalOperationId,\n );\n if (resp.type === \"ok\") {\n onAborted();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Conflict:\n return notify({\n type: \"error\",\n title: i18n.str`The reserve operation has been confirmed previously and can't be aborted`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default: {\n assertUnreachable(resp);\n }\n }\n }\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"bg-white shadow sm:rounded-lg\">\n <div class=\"px-4 py-5 sm:p-6\">\n <h3 class=\"text-base font-semibold text-gray-900\">\n <i18n.Translate>Confirm the withdrawal operation</i18n.Translate>\n </h3>\n <div class=\"mt-3 text-sm leading-6\">\n <ShouldBeSameUser username={details.username}>\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-10 md:grid-cols-2 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 mt-4\">\n <div class=\"w-full\">\n <div class=\"px-4 sm:px-0 text-sm\">\n <p>\n <i18n.Translate>Wire transfer details</i18n.Translate>\n </p>\n </div>\n <div class=\"mt-6 border-t border-gray-100\">\n <dl class=\"divide-y divide-gray-100\">\n {((): VNode => {\n if (!details.account.isKnown) {\n return (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.targetPath}\n </dd>\n </div>\n );\n }\n switch (details.account.targetType) {\n case \"iban\": {\n const name =\n details.account.params[\"receiver-name\"];\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account number\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.iban}\n </dd>\n </div>\n {name && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's name\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {name}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n case \"x-taler-bank\": {\n const name =\n details.account.params[\"receiver-name\"];\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account bank\n hostname\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.host}\n </dd>\n </div>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account id\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.account}\n </dd>\n </div>\n {name && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's name\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {name}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n case \"bitcoin\": {\n const name =\n details.account.params[\"receiver-name\"];\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account address\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.address}\n </dd>\n </div>\n {name && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's name\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {name}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n default: {\n assertUnreachable(details.account);\n }\n }\n })()}\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Amount</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={details.amount}\n spec={config.currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <button\n type=\"button\"\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n onClick={doCancel}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n type=\"submit\"\n name=\"transfer\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n onClick={(e) => {\n e.preventDefault();\n doTransfer();\n }}\n >\n <i18n.Translate>Transfer</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n </ShouldBeSameUser>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n\nexport function ShouldBeSameUser({\n username,\n children,\n}: {\n username: string;\n children: ComponentChildren;\n}): VNode {\n const { state: credentials } = useSessionState();\n const { i18n } = useTranslationContext();\n if (credentials.status === \"loggedOut\") {\n return (\n <Fragment>\n <Attention type=\"info\" title={i18n.str`Authentication required`} />\n <LoginForm currentUser={username} fixedUser />\n </Fragment>\n );\n }\n if (credentials.username !== username) {\n return (\n <Fragment>\n <Attention\n type=\"warning\"\n title={i18n.str`This operation was created with other username`}\n />\n <LoginForm currentUser={username} fixedUser />\n </Fragment>\n );\n }\n return <Fragment>{children}</Fragment>;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n TalerCoreBankErrorsByMethod,\n TalerError,\n WithdrawUriResult,\n} from \"@gnu-taler/taler-util\";\nimport { Loading, utils } from \"@gnu-taler/web-util/browser\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useComponentState } from \"./state.js\";\nimport {\n AbortedView,\n ConfirmedView,\n FailedView,\n InvalidPaytoView,\n InvalidReserveView,\n InvalidWithdrawalView,\n NeedConfirmationView,\n ReadyView,\n} from \"./views.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport interface Props {\n currency: string;\n onAuthorizationRequired: () => void;\n routeClose: RouteDefinition;\n onAbort: () => void;\n routeHere: RouteDefinition<{ wopid: string }>;\n}\n\nexport type State =\n | State.Loading\n | State.LoadingError\n | State.Ready\n | State.Failed\n | State.Aborted\n | State.Confirmed\n | State.InvalidPayto\n | State.InvalidWithdrawal\n | State.InvalidReserve\n | State.NeedConfirmation;\n\nexport namespace State {\n export interface Loading {\n status: \"loading\";\n error: undefined;\n }\n\n export interface Failed {\n status: \"failed\";\n error: TalerCoreBankErrorsByMethod<\"createWithdrawal\">;\n }\n\n export interface LoadingError {\n status: \"loading-error\";\n error: TalerError;\n }\n\n /**\n * Need to open the wallet\n */\n export interface Ready {\n status: \"ready\";\n error: undefined;\n uri: WithdrawUriResult;\n onAbort: () => Promise<\n TalerCoreBankErrorsByMethod<\"abortWithdrawalById\"> | undefined\n >;\n routeClose: RouteDefinition;\n }\n\n export interface InvalidPayto {\n status: \"invalid-payto\";\n error: undefined;\n payto: string | undefined;\n }\n export interface InvalidWithdrawal {\n status: \"invalid-withdrawal\";\n error: undefined;\n uri: string;\n }\n export interface InvalidReserve {\n status: \"invalid-reserve\";\n error: undefined;\n reserve: string | undefined;\n }\n export interface NeedConfirmation {\n status: \"need-confirmation\";\n onAuthorizationRequired: () => void;\n account: string;\n routeHere: RouteDefinition<{ wopid: string }>;\n onAbort:\n | undefined\n | (() => Promise<\n TalerCoreBankErrorsByMethod<\"abortWithdrawalById\"> | undefined\n >);\n onConfirm:\n | undefined\n | (() => Promise<\n TalerCoreBankErrorsByMethod<\"confirmWithdrawalById\"> | undefined\n >);\n error: undefined;\n id: string;\n }\n export interface Aborted {\n status: \"aborted\";\n error: undefined;\n routeClose: RouteDefinition;\n }\n export interface Confirmed {\n status: \"confirmed\";\n error: undefined;\n routeClose: RouteDefinition;\n }\n}\n\nexport interface Transaction {\n negative: boolean;\n counterpart: string;\n when: AbsoluteTime;\n amount: AmountJson | undefined;\n subject: string;\n}\n\nconst viewMapping: utils.StateViewMap<State> = {\n loading: Loading,\n failed: FailedView,\n \"invalid-payto\": InvalidPaytoView,\n \"invalid-withdrawal\": InvalidWithdrawalView,\n \"invalid-reserve\": InvalidReserveView,\n \"need-confirmation\": NeedConfirmationView,\n aborted: AbortedView,\n confirmed: ConfirmedView,\n \"loading-error\": ErrorLoadingWithDebug,\n ready: ReadyView,\n};\n\nexport const OperationState = utils.compose(\n (p: Props) => useComponentState(p),\n viewMapping,\n);\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport { Loading, utils } from \"@gnu-taler/web-util/browser\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { LoginForm } from \"../LoginForm.js\";\nimport { useComponentState } from \"./state.js\";\nimport { InvalidIbanView, ReadyView } from \"./views.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport interface Props {\n account: string;\n onAuthorizationRequired: () => void;\n onOperationCreated: (wopid: string) => void;\n onClose: () => void;\n tab: \"charge-wallet\" | \"wire-transfer\" | undefined;\n routeClose: RouteDefinition;\n routeCashout: RouteDefinition;\n routeChargeWallet: RouteDefinition;\n routeWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n routePublicAccounts: RouteDefinition;\n routeCreateWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n routeSolveSecondFactor: RouteDefinition;\n}\n\nexport type State =\n | State.Loading\n | State.LoadingError\n | State.Ready\n | State.InvalidIban\n | State.UserNotFound;\n\nexport namespace State {\n export interface Loading {\n status: \"loading\";\n error: undefined;\n }\n\n export interface LoadingError {\n status: \"loading-error\";\n error: TalerError;\n }\n\n export interface BaseInfo {\n error: undefined;\n }\n\n export interface Ready extends BaseInfo {\n status: \"ready\";\n error: undefined;\n account: string;\n tab: \"charge-wallet\" | \"wire-transfer\" | undefined;\n limit: AmountJson;\n balance: AmountJson;\n onAuthorizationRequired: () => void;\n onOperationCreated: (wopid: string) => void;\n onClose: () => void;\n routeClose: RouteDefinition;\n routeCashout: RouteDefinition;\n routeChargeWallet: RouteDefinition;\n routePublicAccounts: RouteDefinition;\n routeWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n routeCreateWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n routeSolveSecondFactor: RouteDefinition;\n }\n\n export interface InvalidIban {\n status: \"invalid-iban\";\n error: TalerCorebankApi.AccountData;\n }\n\n export interface UserNotFound {\n status: \"login\";\n reason: \"not-found\" | \"forbidden\";\n routeRegister?: RouteDefinition;\n }\n}\n\nexport interface Transaction {\n negative: boolean;\n counterpart: string;\n when: AbsoluteTime;\n amount: AmountJson | undefined;\n subject: string;\n}\n\nconst viewMapping: utils.StateViewMap<State> = {\n loading: Loading,\n login: LoginForm,\n \"invalid-iban\": InvalidIbanView,\n \"loading-error\": ErrorLoadingWithDebug,\n ready: ReadyView,\n};\n\nexport const AccountPage = utils.compose(\n (p: Props) => useComponentState(p),\n viewMapping,\n);\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n ObservabilityEventType,\n TalerError,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Footer,\n Header,\n Loading,\n RouteDefinition,\n ToastBanner,\n notifyError,\n notifyException,\n useBankCoreApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { useEffect, useErrorBoundary, useState } from \"preact/hooks\";\nimport { privatePages } from \"../Routing.js\";\nimport { useSettingsContext } from \"../context/settings.js\";\nimport { useAccountDetails } from \"../hooks/account.js\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport {\n getAllBooleanPreferences,\n getLabelForPreferences,\n usePreferences,\n} from \"../hooks/preferences.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RenderAmount } from \"./PaytoWireTransferForm.js\";\n\nconst GIT_HASH = typeof __GIT_HASH__ !== \"undefined\" ? __GIT_HASH__ : undefined;\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : undefined;\n\nexport function BankFrame({\n children,\n account,\n routeAccountDetails,\n}: {\n account?: string;\n routeAccountDetails?: RouteDefinition;\n children: ComponentChildren;\n}): VNode {\n const { i18n } = useTranslationContext();\n const session = useSessionState();\n const settings = useSettingsContext();\n const [preferences, updatePreferences] = usePreferences();\n const [, , resetBankState] = useBankState();\n\n const [error, resetError] = useErrorBoundary();\n\n useEffect(() => {\n if (error) {\n if (error instanceof Error) {\n console.log(\"Internal error, please report\", error);\n notifyException(i18n.str`Internal error, please report.`, error);\n } else {\n console.log(\"Internal error, please report\", error);\n notifyError(\n i18n.str`Internal error, please report.`,\n String(error) as TranslatedString,\n );\n }\n resetError();\n }\n }, [error]);\n\n return (\n <div\n class=\"min-h-full flex flex-col m-0 bg-slate-200\"\n style=\"min-height: 100vh;\"\n >\n <div class=\"bg-indigo-600 pb-32\">\n <Header\n title=\"Bank\"\n iconLinkURL={settings.iconLinkURL ?? \"#\"}\n profileURL={routeAccountDetails?.url({})}\n notificationURL={\n preferences.showDebugInfo\n ? privatePages.notifications.url({})\n : undefined\n }\n onLogout={\n session.state.status !== \"loggedIn\"\n ? undefined\n : () => {\n session.logOut();\n resetBankState();\n }\n }\n sites={\n !settings.topNavSites ? [] : Object.entries(settings.topNavSites)\n }\n supportedLangs={[\"en\", \"es\", \"de\"]}\n >\n <li>\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Preferences</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-4\">\n {getAllBooleanPreferences().map((set) => {\n const isOn: boolean = !!preferences[set];\n return (\n <li key={set} class=\"pl-2\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n {getLabelForPreferences(set, i18n)}\n </span>\n </span>\n <button\n type=\"button\"\n name={`${set} switch`}\n data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n updatePreferences(set, !isOn);\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={isOn}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </li>\n );\n })}\n </ul>\n </li>\n </Header>\n </div>\n\n <div class=\"fixed z-20 top-14 w-full\">\n <div class=\"mx-auto w-4/5\">\n <ToastBanner />\n {/* <Attention type=\"success\" title={\"hola\" as TranslatedString} onClose={() => { }} /> */}\n </div>\n </div>\n\n <main class=\"-mt-32 flex-1\">\n {account && routeAccountDetails && (\n <header class=\"py-6 bg-indigo-600\">\n <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n <h1 class=\" flex flex-wrap items-center justify-between sm:flex-nowrap\">\n <span class=\"text-2xl font-bold tracking-tight text-white\">\n <WelcomeAccount\n account={account}\n routeAccountDetails={routeAccountDetails}\n />\n </span>\n <span class=\"text-2xl font-bold tracking-tight text-white\">\n <AccountBalance account={account} />\n </span>\n </h1>\n </div>\n </header>\n )}\n\n <div class=\"mx-auto max-w-7xl px-4 pb-4 sm:px-6 lg:px-8\">\n <div class=\"rounded-lg bg-white px-5 py-6 shadow sm:px-6\">\n {children}\n </div>\n </div>\n </main>\n\n <AppActivity />\n\n <Footer\n testingUrlKey=\"corebank-api-base-url\"\n GIT_HASH={GIT_HASH}\n VERSION={VERSION}\n />\n </div>\n );\n}\n\nfunction Wait({ class: clazz }: { class?: string }): VNode {\n return (\n <Fragment>\n <style>{`\n .animated-loader {\n display: inline-block;\n --b: 5px; \n border-radius: 50%;\n aspect-ratio: 1;\n padding: 1px;\n background: conic-gradient(#0000 10%,#4f46e5) content-box;\n -webkit-mask:\n repeating-conic-gradient(#0000 0deg,#000 1deg 20deg,#0000 21deg 36deg),\n radial-gradient(farthest-side,#0000 calc(100% - var(--b) - 1px),#000 calc(100% - var(--b)));\n -webkit-mask-composite: destination-in;\n mask-composite: intersect;\n animation:spinning-loader 1s infinite steps(10);\n }\n @keyframes spinning-loader {to{transform: rotate(1turn)}} \n `}</style>\n <div class={`animated-loader ${clazz}`} />\n </Fragment>\n );\n}\n\nfunction AppActivity(): VNode {\n const [lastEvent, setLastEvent] = useState<{\n url: string;\n id: string;\n when: AbsoluteTime;\n }>();\n const [status, setStatus] = useState<\"ok\" | \"fail\">();\n const d = useBankCoreApiContext();\n const onBackendActivity = !d ? undefined : d.onActivity;\n const cancelRequest = !d ? undefined : d.cancelRequest;\n const [pref] = usePreferences();\n useEffect(() => {\n // console.log(\"ASDASDS\", onBackendActivity)\n if (!pref.showDebugInfo) return;\n if (!onBackendActivity) return;\n return onBackendActivity((ev) => {\n switch (ev.type) {\n case ObservabilityEventType.HttpFetchStart: {\n setLastEvent(ev);\n setStatus(undefined);\n return;\n }\n case ObservabilityEventType.HttpFetchFinishError: {\n setStatus(\"fail\");\n return;\n }\n case ObservabilityEventType.HttpFetchFinishSuccess: {\n setStatus(\"ok\");\n return;\n }\n /**\n * all of this are ignored\n */\n case ObservabilityEventType.DbQueryStart:\n case ObservabilityEventType.DbQueryFinishSuccess:\n case ObservabilityEventType.DbQueryFinishError:\n case ObservabilityEventType.RequestStart:\n case ObservabilityEventType.RequestFinishSuccess:\n case ObservabilityEventType.RequestFinishError:\n case ObservabilityEventType.TaskStart:\n case ObservabilityEventType.TaskStop:\n case ObservabilityEventType.TaskReset:\n case ObservabilityEventType.ShepherdTaskResult:\n case ObservabilityEventType.DeclareTaskDependency:\n case ObservabilityEventType.CryptoStart:\n case ObservabilityEventType.CryptoFinishSuccess:\n case ObservabilityEventType.CryptoFinishError:\n case ObservabilityEventType.Message:\n return;\n default: {\n assertUnreachable(ev);\n }\n }\n });\n });\n if (!pref.showDebugInfo || !lastEvent) return <Fragment />;\n return (\n <div\n data-status={status}\n class=\"fixed z-20 bottom-0 w-full ease-in-out delay-1000 transition-transform data-[status=ok]:scale-y-0\"\n >\n <div\n data-status={status}\n class=\"mx-auto w-4/5 center flex p-1 bg-gray-300 m-1 data-[status=fail]:bg-red-200 data-[status=ok]:bg-green-200 \"\n >\n {!status ? <Wait class=\"w-6 h-6\" /> : <div class=\"w-6 h-6\" />}\n\n <p class=\"ml-2 my-auto text-sm text-gray-500\">{lastEvent.url}</p>\n {!status ? (\n <button\n onClick={() => {\n if (cancelRequest) cancelRequest(lastEvent.id);\n }}\n >\n cancel\n </button>\n ) : undefined}\n </div>\n </div>\n );\n}\n\nfunction WelcomeAccount({\n account,\n routeAccountDetails,\n}: {\n account: string;\n routeAccountDetails: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const result = useAccountDetails(account);\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <div />;\n }\n if (result.type === \"fail\") {\n return (\n <a\n name=\"account details\"\n href={routeAccountDetails.url({})}\n class=\"underline underline-offset-2\"\n >\n <i18n.Translate>Welcome</i18n.Translate>\n </a>\n );\n }\n return (\n <a\n name=\"account details\"\n href={routeAccountDetails.url({})}\n class=\"underline underline-offset-2\"\n >\n <i18n.Translate>\n Welcome, <span class=\"whitespace-nowrap\">{result.body.name}</span>\n </i18n.Translate>\n </a>\n );\n}\n\nfunction AccountBalance({ account }: { account: string }): VNode {\n const result = useAccountDetails(account);\n const { config } = useBankCoreApiContext();\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <div />;\n }\n if (result.type === \"fail\") return <div />;\n\n return (\n <RenderAmount\n value={Amounts.parseOrThrow(result.body.balance.amount)}\n negative={result.body.balance.credit_debit_indicator === \"debit\"}\n spec={config.currency_specification}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError } from \"@gnu-taler/taler-util\";\nimport { Loading, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Transactions } from \"../components/Transactions/index.js\";\nimport { usePublicAccounts } from \"../hooks/account.js\";\n\n/**\n * Show histories of public accounts.\n */\nexport function PublicHistoriesPage(): VNode {\n const { i18n } = useTranslationContext();\n\n // TODO: implemented filter by account name\n const result = usePublicAccounts(undefined);\n const firstAccount =\n result && !(result instanceof TalerError) && result.body.length > 0\n ? result.body[0].username\n : undefined;\n\n const [showAccount, setShowAccount] = useState(firstAccount);\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <Loading />;\n }\n\n const { body: accountList } = result;\n\n const txs: Record<string, h.JSX.Element> = {};\n const accountsBar = [];\n\n // Ask story of all the public accounts.\n for (const account of accountList) {\n const isSelected = account.username == showAccount;\n accountsBar.push(\n <li\n class={\n isSelected\n ? \"pure-menu-selected pure-menu-item\"\n : \"pure-menu-item pure-menu\"\n }\n >\n <a\n href=\"#\"\n name={`show account ${account.username}`}\n class=\"pure-menu-link\"\n onClick={() => setShowAccount(account.username)}\n >\n {account.username}\n </a>\n </li>,\n );\n txs[account.username] = (\n <Transactions\n account={account.username}\n routeCreateWireTransfer={undefined}\n />\n );\n }\n\n return (\n <Fragment>\n <h1 class=\"nav\">{i18n.str`History of public accounts`}</h1>\n <section id=\"main\">\n <article>\n <div class=\"pure-menu pure-menu-horizontal\" name=\"accountMenu\">\n <ul class=\"pure-menu-list\">{accountsBar}</ul>\n {typeof showAccount !== \"undefined\" ? (\n txs[showAccount]\n ) : (\n <p>No public transactions found.</p>\n )}\n <br />\n </div>\n </article>\n </section>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useNotifications } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { Time } from \"../components/Time.js\";\n\nexport function ShowNotifications(): VNode {\n const ns = useNotifications();\n if (!ns.length) {\n return <div>no notifications</div>;\n }\n return (\n <div>\n <p>Notifications</p>\n <table>\n <thead></thead>\n <tbody>\n {ns.map((n, idx) => {\n return (\n <tr key={idx}>\n <td>\n <Time\n timestamp={n.message.when}\n format=\"dd/MM/yyyy HH:mm:ss\"\n />\n </td>\n <td>{n.message.title}</td>\n <td>\n {n.message.type === \"error\"\n ? n.message.description\n : undefined}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {/* <ToastBanner all /> */}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n Duration,\n HttpStatusCode,\n TalerCorebankApi,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n useLocalNotification,\n useNavigationContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../components/ErrorLoadingWithDebug.js\";\nimport { Time } from \"../components/Time.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useWithdrawalDetails } from \"../hooks/account.js\";\nimport { ChallengeInProgess, useBankState } from \"../hooks/bank-state.js\";\nimport { useConversionInfo } from \"../hooks/regional.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../utils.js\";\nimport { RenderAmount } from \"./PaytoWireTransferForm.js\";\nimport { OperationNotFound } from \"./WithdrawalQRCode.js\";\n\nconst TAN_PREFIX = \"T-\";\nconst TAN_REGEX = /^([Tt](-)?)?[0-9]*$/;\nexport function SolveChallengePage({\n onChallengeCompleted,\n routeClose,\n}: {\n onChallengeCompleted: () => void;\n routeClose: RouteDefinition;\n}): VNode {\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const { i18n } = useTranslationContext();\n const [bankState, updateBankState] = useBankState();\n const [code, setCode] = useState<string | undefined>(undefined);\n const [notification, notify, handleError] = useLocalNotification();\n const { state } = useSessionState();\n const creds = state.status !== \"loggedIn\" ? undefined : state;\n const { navigateTo } = useNavigationContext();\n\n if (!bankState.currentChallenge) {\n return (\n <div>\n <span>no challenge to solve </span>\n <a\n href={routeClose.url({})}\n name=\"close\"\n class=\"inline-flex items-center rounded-md bg-red-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-500\"\n >\n <i18n.Translate>Continue</i18n.Translate>\n </a>\n </div>\n );\n }\n\n const ch = bankState.currentChallenge;\n const errors = undefinedIfEmpty({\n code: !code\n ? i18n.str`Required`\n : !TAN_REGEX.test(code)\n ? i18n.str`Confirmation codes are numerical, possibly beginning with 'T-.'`\n : undefined,\n });\n\n async function startChallenge() {\n if (!creds) return;\n await handleError(async () => {\n const resp = await api.sendChallenge(creds, ch.id);\n if (resp.type === \"ok\") {\n const newCh = structuredClone(ch);\n newCh.sent = AbsoluteTime.now();\n newCh.info = resp.body;\n updateBankState(\"currentChallenge\", newCh);\n } else {\n const newCh = structuredClone(ch);\n newCh.sent = AbsoluteTime.now();\n newCh.info = undefined;\n updateBankState(\"currentChallenge\", newCh);\n switch (resp.case) {\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Cashout not found. It may be also mean that it was already aborted.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`Cashout not found. It may be also mean that it was already aborted.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return notify({\n type: \"error\",\n title: i18n.str`Cashout not found. It may be also mean that it was already aborted.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n async function completeChallenge() {\n if (!creds || !code) return;\n const tan = code.toUpperCase().startsWith(TAN_PREFIX)\n ? code.substring(TAN_PREFIX.length)\n : code;\n await handleError(async () => {\n {\n const resp = await api.confirmChallenge(creds, ch.id, { tan });\n if (resp.type === \"fail\") {\n setCode(\"\");\n switch (resp.case) {\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Challenge not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`This user is not authorized to complete this challenge.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.TooManyRequests:\n return notify({\n type: \"error\",\n title: i18n.str`Too many attempts, try another code.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return notify({\n type: \"error\",\n title: i18n.str`The confirmation code is wrong, try again.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return notify({\n type: \"error\",\n title: i18n.str`The operation expired.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n }\n }\n {\n const resp = await (async (ch: ChallengeInProgess) => {\n switch (ch.operation) {\n case \"delete-account\":\n return await api.deleteAccount(creds, ch.id);\n case \"update-account\":\n return await api.updateAccount(creds, ch.request, ch.id);\n case \"update-password\":\n return await api.updatePassword(creds, ch.request, ch.id);\n case \"create-transaction\":\n return await api.createTransaction(creds, ch.request, ch.id);\n case \"confirm-withdrawal\":\n return await api.confirmWithdrawalById(creds, ch.request, ch.id);\n case \"create-cashout\":\n return await api.createCashout(creds, ch.request, ch.id);\n default:\n assertUnreachable(ch);\n }\n })(ch);\n\n if (resp.type === \"fail\") {\n if (resp.case !== HttpStatusCode.Accepted) {\n return notify({\n type: \"error\",\n title: i18n.str`The operation failed.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n // another challenge required, save the request and the ID\n // @ts-expect-error no need to check the type of request, since it will be the same as the previous request\n updateBankState(\"currentChallenge\", {\n operation: ch.operation,\n id: String(resp.body.challenge_id),\n location: ch.location,\n sent: AbsoluteTime.never(),\n request: ch.request,\n });\n return notify({\n type: \"info\",\n title: i18n.str`The operation needs another confirmation to complete.`,\n when: AbsoluteTime.now(),\n });\n }\n updateBankState(\"currentChallenge\", undefined);\n return onChallengeCompleted();\n }\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <span\n class=\"text-sm text-black font-semibold leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Confirm the operation</i18n.Translate>\n </span>\n </h2>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n This operation is protected with second factor authentication. In\n order to complete it we need to verify your identity using the\n authentication channel you provided.\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\">\n <ChallengeDetails\n challenge={bankState.currentChallenge}\n onStart={startChallenge}\n onCancel={() => {\n updateBankState(\"currentChallenge\", undefined);\n navigateTo(ch.location);\n }}\n />\n {ch.info && (\n <div class=\"mt-2\">\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-4\">\n <label for=\"withdraw-amount\">\n <i18n.Translate>Enter the confirmation code</i18n.Translate>\n </label>\n <div class=\"mt-2\">\n <div class=\"relative rounded-md shadow-sm\">\n <input\n type=\"text\"\n // class=\"block w-full rounded-md border-0 py-1.5 pl-16 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n aria-describedby=\"answer\"\n autoFocus\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={code ?? \"\"}\n required\n onPaste={(e) => {\n e.preventDefault();\n const pasted = e.clipboardData?.getData(\"text/plain\");\n if (!pasted) return;\n if (pasted.toUpperCase().startsWith(TAN_PREFIX)) {\n const sub = pasted.substring(TAN_PREFIX.length);\n setCode(sub);\n return;\n }\n setCode(pasted);\n }}\n name=\"answer\"\n id=\"answer\"\n autocomplete=\"off\"\n onChange={(e): void => {\n setCode(e.currentTarget.value);\n }}\n />\n </div>\n <ShowInputErrorLabel\n message={errors?.code}\n isDirty={code !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n {((ch: TalerCorebankApi.TanChannel): VNode => {\n switch (ch) {\n case TalerCorebankApi.TanChannel.SMS:\n return (\n <i18n.Translate>\n You should have received a code in your phone.\n </i18n.Translate>\n );\n case TalerCorebankApi.TanChannel.EMAIL:\n return (\n <i18n.Translate>\n You should have received a code in your email.\n </i18n.Translate>\n );\n default:\n assertUnreachable(ch);\n }\n })(ch.info.tan_channel)}\n </p>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n The confirmation code starts with \"{TAN_PREFIX}\" followed\n by numbers.\n </i18n.Translate>\n </p>\n </div>\n <div class=\"flex items-center justify-between border-gray-900/10 px-4 py-4 \">\n <div />\n <button\n type=\"submit\"\n name=\"confirm\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n onClick={(e) => {\n completeChallenge();\n e.preventDefault();\n }}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n )}\n </div>\n </div>\n </Fragment>\n );\n}\n\nfunction ChallengeDetails({\n challenge,\n onStart,\n onCancel,\n}: {\n challenge: ChallengeInProgess;\n onStart: () => void;\n onCancel: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n\n const firstTime = AbsoluteTime.isNever(challenge.sent);\n useEffect(() => {\n if (firstTime) {\n onStart();\n }\n }, []);\n\n const subtitle = ((op): TranslatedString => {\n switch (op) {\n case \"delete-account\":\n return i18n.str`Removing account`;\n case \"update-account\":\n return i18n.str`Updating account values`;\n case \"update-password\":\n return i18n.str`Updating password`;\n case \"create-transaction\":\n return i18n.str`Making a wire transfer`;\n case \"confirm-withdrawal\":\n return i18n.str`Confirming withdrawal`;\n case \"create-cashout\":\n return i18n.str`Making a cashout`;\n }\n })(challenge.operation);\n\n return (\n <div class=\"px-4 mt-4 \">\n <div class=\"w-full\">\n <div class=\"border-gray-100\">\n <h2 class=\"text-base font-semibold leading-10 text-gray-900\">\n <span class=\" text-black font-semibold leading-6 \">\n <i18n.Translate>Operation:</i18n.Translate>\n </span>{\" \"}\n &nbsp;\n <span class=\" text-black font-normal leading-6 \">{subtitle}</span>\n </h2>\n <dl class=\"divide-y divide-gray-100\">\n {((): VNode => {\n switch (challenge.operation) {\n case \"delete-account\":\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Type</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <i18n.Translate>\n Updating account settings\n </i18n.Translate>\n </dd>\n </div>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Account</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request}\n </dd>\n </div>\n </Fragment>\n );\n case \"create-transaction\": {\n const payto = parsePaytoUri(challenge.request.payto_uri)!;\n return (\n <Fragment>\n {challenge.request.amount && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Amount</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(\n challenge.request.amount,\n )}\n spec={config.currency_specification}\n />\n </dd>\n </div>\n )}\n {payto.isKnown && payto.targetType === \"iban\" && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>To account</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {payto.iban}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n case \"confirm-withdrawal\":\n return <ShowWithdrawalDetails id={challenge.request} />;\n case \"create-cashout\": {\n return <ShowCashoutDetails request={challenge.request} />;\n }\n case \"update-account\": {\n return (\n <Fragment>\n {challenge.request.cashout_payto_uri !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Cashout account</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.cashout_payto_uri}\n </dd>\n </div>\n )}\n {challenge.request.contact_data?.email !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Email</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.contact_data?.email}\n </dd>\n </div>\n )}\n {challenge.request.contact_data?.phone !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Phone</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.contact_data?.phone}\n </dd>\n </div>\n )}\n {challenge.request.debit_threshold !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Debit threshold</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(\n challenge.request.debit_threshold,\n )}\n spec={config.currency_specification}\n />\n </dd>\n </div>\n )}\n {challenge.request.is_public !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Is this account public?\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.is_public\n ? i18n.str`Enable`\n : i18n.str`Disable`}\n </dd>\n </div>\n )}\n {challenge.request.name !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Name</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.name}\n </dd>\n </div>\n )}\n {challenge.request.tan_channel !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Authentication channel\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.tan_channel ?? i18n.str`Remove`}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n case \"update-password\": {\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>New password</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.new_password}\n </dd>\n </div>\n </Fragment>\n );\n }\n default:\n assertUnreachable(challenge);\n }\n })()}\n </dl>\n {challenge.info && (\n <h2 class=\"text-base font-semibold leading-7 text-gray-900 mt-4\">\n <span\n class=\"text-sm text-black font-semibold leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Challenge details</i18n.Translate>\n </span>\n </h2>\n )}\n <dl class=\"divide-y divide-gray-100\">\n {challenge.sent.t_ms !== \"never\" && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Sent at</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <Time\n format=\"dd/MM/yyyy HH:mm:ss\"\n timestamp={challenge.sent}\n relative={Duration.fromSpec({ days: 1 })}\n />\n </dd>\n </div>\n )}\n {challenge.info && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n {((ch: TalerCorebankApi.TanChannel): VNode => {\n switch (ch) {\n case TalerCorebankApi.TanChannel.SMS:\n return <i18n.Translate>To phone</i18n.Translate>;\n case TalerCorebankApi.TanChannel.EMAIL:\n return <i18n.Translate>To email</i18n.Translate>;\n default:\n assertUnreachable(ch);\n }\n })(challenge.info.tan_channel)}\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.info.tan_info}\n </dd>\n </div>\n )}\n </dl>\n </div>\n <div class=\"mt-6 mb-4 flex justify-between\">\n <button\n type=\"button\"\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n onClick={onCancel}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n {challenge.info ? (\n <button\n type=\"submit\"\n name=\"send again\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n onClick={(e) => {\n onStart();\n e.preventDefault();\n }}\n >\n <i18n.Translate>Send again</i18n.Translate>\n </button>\n ) : (\n <div> sending code ...</div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction ShowWithdrawalDetails({ id }: { id: string }): VNode {\n const details = useWithdrawalDetails(id);\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n if (!details) {\n return <Loading />;\n }\n if (details instanceof TalerError) {\n return <ErrorLoadingWithDebug error={details} />;\n }\n if (details.type === \"fail\") {\n switch (details.case) {\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.NotFound:\n return <OperationNotFound routeClose={undefined} />;\n default:\n assertUnreachable(details);\n }\n }\n\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">Amount</dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(details.body.amount)}\n spec={config.currency_specification}\n />\n </dd>\n </div>\n {details.body.selected_reserve_pub !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Withdraw id</i18n.Translate>\n </dt>\n <dd\n class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\"\n title={details.body.selected_reserve_pub}\n >\n {details.body.selected_reserve_pub.substring(0, 16)}...\n </dd>\n </div>\n )}\n {details.body.selected_exchange_account !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>To account</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.body.selected_exchange_account}\n </dd>\n </div>\n )}\n </Fragment>\n );\n}\n\nfunction ShowCashoutDetails({\n request,\n}: {\n request: TalerCorebankApi.CashoutRequest;\n}): VNode {\n const { i18n } = useTranslationContext();\n const info = useConversionInfo();\n if (!info) {\n return <Loading />;\n }\n\n if (info instanceof TalerError) {\n return <ErrorLoadingWithDebug error={info} />;\n }\n if (info.type === \"fail\") {\n switch (info.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(info.case);\n }\n }\n\n return (\n <Fragment>\n {request.subject !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Subject</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {request.subject}\n </dd>\n </div>\n )}\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">Debit</dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(request.amount_credit)}\n spec={info.body.regional_currency_specification}\n />\n </dd>\n </div>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">Credit</dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(request.amount_credit)}\n spec={info.body.fiat_currency_specification}\n />\n </dd>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useSessionState } from \"./session.js\";\n\nimport {\n AbsoluteTime,\n AccessToken,\n AmountJson,\n Amounts,\n HttpStatusCode,\n OperationOk,\n TalerBankConversionResultByMethod,\n TalerCoreBankErrorsByMethod,\n TalerCoreBankResultByMethod,\n TalerCorebankApi,\n TalerError,\n TalerHttpError,\n opFixedSuccess,\n} from \"@gnu-taler/taler-util\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useState } from \"preact/hooks\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { buildPaginatedResult } from \"./account.js\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport type TransferCalculation =\n | {\n debit: AmountJson;\n credit: AmountJson;\n beforeFee: AmountJson;\n }\n | \"amount-is-too-small\";\ntype EstimatorFunction = (\n amount: AmountJson,\n fee: AmountJson,\n) => Promise<TransferCalculation>;\n\ntype ConversionEstimators = {\n estimateByCredit: EstimatorFunction;\n estimateByDebit: EstimatorFunction;\n};\n\nexport function revalidateConversionInfo() {\n return mutate(\n (key) =>\n Array.isArray(key) && key[key.length - 1] === \"getConversionInfoAPI\",\n );\n}\nexport function useConversionInfo() {\n const {\n lib: { conversion },\n config,\n } = useBankCoreApiContext();\n\n async function fetcher() {\n return await conversion.getConfig();\n }\n const { data, error } = useSWR<\n TalerBankConversionResultByMethod<\"getConfig\">,\n TalerHttpError\n >(!config.allow_conversion ? undefined : [\"getConversionInfoAPI\"], 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 keepPreviousData: true,\n });\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function useCashinEstimator(): ConversionEstimators {\n const {\n lib: { conversion },\n } = useBankCoreApiContext();\n return {\n estimateByCredit: async (fiatAmount, fee) => {\n const resp = await conversion.getCashinRate({\n credit: fiatAmount,\n });\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n return \"amount-is-too-small\";\n }\n // this below can't happen\n case HttpStatusCode.NotImplemented: //it should not be able to call this function\n case HttpStatusCode.BadRequest: //we are using just one parameter\n throw TalerError.fromDetail(resp.detail.code, {}, resp.detail.hint);\n }\n }\n const credit = Amounts.parseOrThrow(resp.body.amount_credit);\n const debit = Amounts.parseOrThrow(resp.body.amount_debit);\n const beforeFee = Amounts.sub(credit, fee).amount;\n\n return {\n debit,\n beforeFee,\n credit,\n };\n },\n estimateByDebit: async (regionalAmount, fee) => {\n const resp = await conversion.getCashinRate({\n debit: regionalAmount,\n });\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n return \"amount-is-too-small\";\n }\n // this below can't happen\n case HttpStatusCode.NotImplemented: //it should not be able to call this function\n case HttpStatusCode.BadRequest: //we are using just one parameter\n throw TalerError.fromDetail(resp.detail.code, {}, resp.detail.hint);\n }\n }\n const credit = Amounts.parseOrThrow(resp.body.amount_credit);\n const debit = Amounts.parseOrThrow(resp.body.amount_debit);\n const beforeFee = Amounts.add(credit, fee).amount;\n\n return {\n debit,\n beforeFee,\n credit,\n };\n },\n };\n}\n\nexport function useCashoutEstimator(): ConversionEstimators {\n const {\n lib: { conversion },\n } = useBankCoreApiContext();\n return {\n estimateByCredit: async (fiatAmount, fee) => {\n const resp = await conversion.getCashoutRate({\n credit: fiatAmount,\n });\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n return \"amount-is-too-small\";\n }\n // this below can't happen\n case HttpStatusCode.NotImplemented: //it should not be able to call this function\n case HttpStatusCode.BadRequest: //we are using just one parameter\n throw TalerError.fromDetail(resp.detail.code, {}, resp.detail.hint);\n }\n }\n const credit = Amounts.parseOrThrow(resp.body.amount_credit);\n const debit = Amounts.parseOrThrow(resp.body.amount_debit);\n const beforeFee = Amounts.sub(credit, fee).amount;\n\n return {\n debit,\n beforeFee,\n credit,\n };\n },\n estimateByDebit: async (regionalAmount, fee) => {\n const resp = await conversion.getCashoutRate({\n debit: regionalAmount,\n });\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n return \"amount-is-too-small\";\n }\n // this below can't happen\n case HttpStatusCode.NotImplemented: //it should not be able to call this function\n case HttpStatusCode.BadRequest: //we are using just one parameter\n throw TalerError.fromDetail(resp.detail.code, {}, resp.detail.hint);\n }\n }\n const credit = Amounts.parseOrThrow(resp.body.amount_credit);\n const debit = Amounts.parseOrThrow(resp.body.amount_debit);\n const beforeFee = Amounts.add(credit, fee).amount;\n\n return {\n debit,\n beforeFee,\n credit,\n };\n },\n };\n}\n\n/**\n * @deprecated use useCashoutEstimator\n */\nexport function useEstimator(): ConversionEstimators {\n return useCashoutEstimator();\n}\n\nexport async function revalidateBusinessAccounts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getAccounts\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useBusinessAccounts() {\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const [offset, setOffset] = useState<number | undefined>();\n\n function fetcher([token, aid]: [AccessToken, number]) {\n // FIXME: add account name filter\n return api.getAccounts(\n token,\n {},\n {\n limit: PAGINATED_LIST_REQUEST,\n offset: aid ? String(aid) : undefined,\n order: \"asc\",\n },\n );\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getAccounts\">,\n TalerHttpError\n >([token, offset ?? 0, \"getAccounts\"], 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 keepPreviousData: true,\n });\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n //TODO: row_id should not be optional\n return buildPaginatedResult(\n data.body.accounts,\n offset,\n setOffset,\n (d) => d.row_id ?? 0,\n );\n}\n\ntype CashoutWithId = TalerCorebankApi.CashoutStatusResponse & { id: number };\nfunction notUndefined(c: CashoutWithId | undefined): c is CashoutWithId {\n return c !== undefined;\n}\nexport function revalidateOnePendingCashouts() {\n return mutate(\n (key) =>\n Array.isArray(key) && key[key.length - 1] === \"useOnePendingCashouts\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useOnePendingCashouts(account: string) {\n const { state: credentials } = useSessionState();\n const {\n lib: { bank: api },\n config,\n } = useBankCoreApiContext();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n\n async function fetcher([username, token]: [string, AccessToken]) {\n const list = await api.getAccountCashouts({ username, token });\n if (list.type !== \"ok\") {\n return list;\n }\n const pendingCashout =\n list.body.cashouts.length > 0 ? list.body.cashouts[0] : undefined;\n if (!pendingCashout) return opFixedSuccess(undefined);\n const cashoutInfo = await api.getCashoutById(\n { username, token },\n pendingCashout.cashout_id,\n );\n if (cashoutInfo.type !== \"ok\") {\n return cashoutInfo;\n }\n return opFixedSuccess({\n ...cashoutInfo.body,\n id: pendingCashout.cashout_id,\n });\n }\n\n const { data, error } = useSWR<\n | OperationOk<CashoutWithId | undefined>\n | TalerCoreBankErrorsByMethod<\"getAccountCashouts\">\n | TalerCoreBankErrorsByMethod<\"getCashoutById\">,\n TalerHttpError\n >(\n !config.allow_conversion\n ? undefined\n : [account, token, \"useOnePendingCashouts\"],\n fetcher,\n {\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 keepPreviousData: true,\n },\n );\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateCashouts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"useCashouts\",\n );\n}\nexport function useCashouts(account: string) {\n const { state: credentials } = useSessionState();\n const {\n lib: { bank: api },\n config,\n } = useBankCoreApiContext();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n\n async function fetcher([username, token]: [string, AccessToken]) {\n const list = await api.getAccountCashouts({ username, token });\n if (list.type !== \"ok\") {\n return list;\n }\n const all: Array<CashoutWithId | undefined> = await Promise.all(\n list.body.cashouts.map(async (c) => {\n const r = await api.getCashoutById({ username, token }, c.cashout_id);\n if (r.type === \"fail\") {\n return undefined;\n }\n return { ...r.body, id: c.cashout_id };\n }),\n );\n const cashouts = all.filter(notUndefined);\n return { type: \"ok\" as const, body: { cashouts } };\n }\n const { data, error } = useSWR<\n | OperationOk<{ cashouts: CashoutWithId[] }>\n | TalerCoreBankErrorsByMethod<\"getAccountCashouts\">,\n TalerHttpError\n >(\n !config.allow_conversion ? undefined : [account, token, \"useCashouts\"],\n fetcher,\n {\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 keepPreviousData: true,\n },\n );\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateCashoutDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getCashoutById\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useCashoutDetails(cashoutId: number | undefined) {\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([username, token, id]: [string, AccessToken, number]) {\n return api.getCashoutById({ username, token }, id);\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getCashoutById\">,\n TalerHttpError\n >(\n cashoutId === undefined\n ? undefined\n : [creds?.username, creds?.token, cashoutId, \"getCashoutById\"],\n fetcher,\n {\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 keepPreviousData: true,\n },\n );\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\nexport type MonitorMetrics = {\n lastHour: TalerCoreBankResultByMethod<\"getMonitor\">;\n lastDay: TalerCoreBankResultByMethod<\"getMonitor\">;\n lastMonth: TalerCoreBankResultByMethod<\"getMonitor\">;\n};\n\nexport type LastMonitor = {\n current: TalerCoreBankResultByMethod<\"getMonitor\">;\n previous: TalerCoreBankResultByMethod<\"getMonitor\">;\n};\nexport function revalidateLastMonitorInfo() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"useLastMonitorInfo\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useLastMonitorInfo(\n currentMoment: AbsoluteTime,\n previousMoment: AbsoluteTime,\n timeframe: TalerCorebankApi.MonitorTimeframeParam,\n) {\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n\n async function fetcher([token, timeframe]: [\n AccessToken,\n TalerCorebankApi.MonitorTimeframeParam,\n ]) {\n const [current, previous] = await Promise.all([\n api.getMonitor(token, { timeframe, date: currentMoment }),\n api.getMonitor(token, { timeframe, date: previousMoment }),\n ]);\n return {\n current,\n previous,\n };\n }\n\n const { data, error } = useSWR<LastMonitor, TalerHttpError>(\n !token ? undefined : [token, timeframe, \"useLastMonitorInfo\"],\n fetcher,\n {\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 keepPreviousData: true,\n },\n );\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerError,\n WithdrawUriResult,\n assertUnreachable,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n notifyInfo,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { ErrorLoadingWithDebug } from \"../components/ErrorLoadingWithDebug.js\";\nimport { useWithdrawalDetails } from \"../hooks/account.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { QrCodeSection } from \"./QrCodeSection.js\";\nimport { WithdrawalConfirmationQuestion } from \"./WithdrawalConfirmationQuestion.js\";\n\ninterface Props {\n withdrawUri: WithdrawUriResult;\n onOperationAborted: () => void;\n routeClose: RouteDefinition;\n routeWithdrawalDetails: RouteDefinition<{ wopid: string }>;\n onAuthorizationRequired: () => void;\n}\n/**\n * Offer the QR code (and a clickable taler://-link) to\n * permit the passing of exchange and reserve details to\n * the bank. Poll the backend until such operation is done.\n */\nexport function WithdrawalQRCode({\n withdrawUri,\n onOperationAborted,\n routeClose,\n routeWithdrawalDetails,\n onAuthorizationRequired,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const result = useWithdrawalDetails(withdrawUri.withdrawalOperationId);\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.NotFound:\n return <OperationNotFound routeClose={routeClose} />;\n default:\n assertUnreachable(result);\n }\n }\n\n const { body: data } = result;\n\n if (data.status === \"aborted\") {\n return (\n <div class=\"relative ml-auto mr-auto transform overflow-hidden rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-sm sm:p-6\">\n <div>\n <div class=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-yellow-100\">\n <svg\n class=\"h-5 w-5 text-yellow-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </div>\n <div class=\"mt-3 text-center sm:mt-5\">\n <h3\n class=\"text-base font-semibold leading-6 text-gray-900\"\n id=\"modal-title\"\n >\n <i18n.Translate>Operation aborted</i18n.Translate>\n </h3>\n <div class=\"mt-2\">\n <p class=\"text-sm text-gray-500\">\n <i18n.Translate>\n The wire transfer to the payment provider's account was\n aborted from somewhere else, your balance was not affected.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n name=\"continue\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Continue</i18n.Translate>\n </a>\n </div>\n </div>\n );\n }\n\n if (data.status === \"confirmed\") {\n return (\n <div class=\"relative ml-auto mr-auto transform overflow-hidden rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-sm sm:p-6\">\n <div>\n <div class=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-100\">\n <svg\n class=\"h-6 w-6 text-green-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4.5 12.75l6 6 9-13.5\"\n />\n </svg>\n </div>\n <div class=\"mt-3 text-center sm:mt-5\">\n <h3\n class=\"text-base font-semibold leading-6 text-gray-900\"\n id=\"modal-title\"\n >\n <i18n.Translate>Withdrawal confirmed</i18n.Translate>\n </h3>\n <div class=\"mt-2\">\n <p class=\"text-sm text-gray-500\">\n <i18n.Translate>\n The wire transfer to the Taler operator has been initiated.\n You will soon receive the requested amount in your Taler\n wallet.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n name=\"done\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Done</i18n.Translate>\n </a>\n </div>\n </div>\n );\n }\n\n if (data.status === \"pending\") {\n return (\n <QrCodeSection\n withdrawUri={withdrawUri}\n onAborted={() => {\n notifyInfo(i18n.str`Operation canceled`);\n onOperationAborted();\n }}\n />\n );\n }\n\n const account = !data.selected_exchange_account\n ? undefined\n : parsePaytoUri(data.selected_exchange_account);\n\n if (!data.selected_reserve_pub && account) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation is marked as 'selected' but some step in the withdrawal failed`}\n >\n <i18n.Translate>\n The account is selected but no withdrawal identification found.\n </i18n.Translate>\n </Attention>\n );\n }\n\n if (!account && data.selected_reserve_pub) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation is marked as 'selected' but some step in the withdrawal failed`}\n >\n <i18n.Translate>\n There is a withdrawal identification but no account has been selected\n or the selected account is invalid.\n </i18n.Translate>\n </Attention>\n );\n }\n\n if (!account || !data.selected_reserve_pub) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation is marked as 'selected' but some step in the withdrawal failed`}\n >\n <i18n.Translate>\n No withdrawal ID found and no account has been selected or the\n selected account is invalid.\n </i18n.Translate>\n </Attention>\n );\n }\n\n return (\n <WithdrawalConfirmationQuestion\n withdrawUri={withdrawUri}\n routeHere={routeWithdrawalDetails}\n details={{\n username: data.username,\n account,\n reserve: data.selected_reserve_pub,\n amount: Amounts.parseOrThrow(data.amount),\n }}\n onAuthorizationRequired={onAuthorizationRequired}\n onAborted={() => {\n notifyInfo(i18n.str`Operation canceled`);\n onOperationAborted();\n }}\n />\n );\n}\n\nexport function OperationNotFound({\n routeClose,\n}: {\n routeClose: RouteDefinition | undefined;\n}): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"relative ml-auto mr-auto transform overflow-hidden rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-sm sm:p-6\">\n <div>\n <div class=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-red-100 \">\n <svg\n class=\"h-6 w-6 text-red-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\"\n />\n </svg>\n </div>\n\n <div class=\"mt-3 text-center sm:mt-5\">\n <h3\n class=\"text-base font-semibold leading-6 text-gray-900\"\n id=\"modal-title\"\n >\n <i18n.Translate>Operation not found</i18n.Translate>\n </h3>\n <div class=\"mt-2\">\n <p class=\"text-sm text-gray-500\">\n <i18n.Translate>\n This operation is not known by the server. The operation id is\n wrong or the server deleted the operation information before\n reaching here.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n {routeClose && (\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n name=\"continue to dashboard\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Cotinue to dashboard</i18n.Translate>\n </a>\n </div>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n stringifyWithdrawUri,\n WithdrawUriResult,\n} from \"@gnu-taler/taler-util\";\nimport {\n Button,\n LocalNotificationBanner,\n useLocalNotificationHandler,\n useTalerWalletIntegrationAPI,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect } from \"preact/hooks\";\nimport { QR } from \"../components/QR.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../hooks/session.js\";\n\nexport function QrCodeSection({\n withdrawUri,\n onAborted,\n}: {\n withdrawUri: WithdrawUriResult;\n onAborted: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const walletInegrationApi = useTalerWalletIntegrationAPI();\n const talerWithdrawUri = stringifyWithdrawUri(withdrawUri);\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n\n useEffect(() => {\n walletInegrationApi.publishTalerAction(withdrawUri);\n }, []);\n\n const [notification, handleError] = useLocalNotificationHandler();\n\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const onAbortHandler = handleError(\n async () => {\n if (!creds) return undefined;\n return api.abortWithdrawalById(creds, withdrawUri.withdrawalOperationId);\n },\n onAborted,\n (fail) => {\n switch (fail.case) {\n case HttpStatusCode.BadRequest:\n return i18n.str`The operation id is invalid.`;\n case HttpStatusCode.NotFound:\n return i18n.str`The operation was not found.`;\n case HttpStatusCode.Conflict:\n return i18n.str`The reserve operation has been confirmed previously and can't be aborted`;\n }\n },\n );\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n <div class=\"bg-white shadow-xl sm:rounded-lg\">\n <div class=\"px-4 py-5 sm:p-6\">\n <h3 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>\n If you have a Taler wallet installed in this device\n </i18n.Translate>\n </h3>\n <div class=\"mt-4 mb-4 text-sm text-gray-500\">\n <p>\n <i18n.Translate>\n You will see the details of the operation in your wallet\n including the fees (if applies). If you still don't have one you\n can install it following instructions in\n </i18n.Translate>{\" \"}\n <a\n class=\"font-semibold text-gray-500 hover:text-gray-400\"\n name=\"wallet page\"\n href=\"https://taler.net/en/wallet.html\"\n >\n <i18n.Translate>this page</i18n.Translate>\n </a>\n .\n </p>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 pt-2 mt-2 \">\n <Button\n type=\"button\"\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n handler={onAbortHandler}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </Button>\n <a\n href={talerWithdrawUri}\n name=\"withdraw\"\n class=\"inline-flex items-center disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Withdraw</i18n.Translate>\n </a>\n </div>\n </div>\n </div>\n\n <div class=\"bg-white shadow-xl sm:rounded-lg mt-8\">\n <div class=\"px-4 py-5 sm:p-6\">\n <h3 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>\n Or if you have the Taler wallet in another device\n </i18n.Translate>\n </h3>\n <div class=\"mt-4 max-w-xl text-sm text-gray-500\">\n <i18n.Translate>\n Scan the QR below to start the withdrawal.\n </i18n.Translate>\n </div>\n <div class=\"mt-2 max-w-md ml-auto mr-auto\">\n <QR text={talerWithdrawUri} />\n </div>\n </div>\n <div class=\"flex items-center justify-center gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <Button\n type=\"button\"\n // class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md px-3 py-2 text-sm font-semibold text-black shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n handler={onAbortHandler}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </Button>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Loading,\n notifyInfo,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { ErrorLoadingWithDebug } from \"../components/ErrorLoadingWithDebug.js\";\nimport { useAccountDetails } from \"../hooks/account.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { LoginForm } from \"./LoginForm.js\";\nimport { PaytoWireTransferForm } from \"./PaytoWireTransferForm.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport function WireTransfer({\n toAccount,\n withSubject,\n withAmount,\n onAuthorizationRequired,\n routeCancel,\n routeHere,\n onSuccess,\n}: {\n onSuccess?: () => void;\n routeHere: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n toAccount?: string;\n withSubject?: string;\n withAmount?: string;\n routeCancel?: RouteDefinition;\n onAuthorizationRequired: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const r = useSessionState();\n const account = r.state.status !== \"loggedOut\" ? r.state.username : \"admin\";\n const result = useAccountDetails(account);\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n return <LoginForm currentUser={account} />;\n case HttpStatusCode.NotFound:\n return <LoginForm currentUser={account} />;\n default:\n assertUnreachable(result);\n }\n }\n const { body: data } = result;\n\n const balance = Amounts.parseOrThrow(data.balance.amount);\n const balanceIsDebit = data.balance.credit_debit_indicator == \"debit\";\n\n const debitThreshold = Amounts.parseOrThrow(data.debit_threshold);\n\n if (!balance) return <Fragment />;\n\n const limit = balanceIsDebit\n ? Amounts.sub(debitThreshold, balance).amount\n : Amounts.add(balance, debitThreshold).amount;\n\n const positiveBalance = balanceIsDebit\n ? Amounts.zeroOfAmount(balance)\n : balance;\n return (\n <div class=\"px-4 mt-8\">\n <div class=\"sm:flex sm:items-center mb-4\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Make a wire transfer</i18n.Translate>\n </h1>\n </div>\n </div>\n\n <PaytoWireTransferForm\n withAccount={toAccount}\n withAmount={withAmount}\n balance={positiveBalance}\n withSubject={withSubject}\n routeHere={routeHere}\n limit={limit}\n onAuthorizationRequired={onAuthorizationRequired}\n onSuccess={() => {\n notifyInfo(i18n.str`Wire transfer created!`);\n if (onSuccess) onSuccess();\n }}\n routeCancel={routeCancel}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { parseWithdrawUri, stringifyWithdrawUri } from \"@gnu-taler/taler-util\";\nimport { Attention, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { WithdrawalQRCode } from \"./WithdrawalQRCode.js\";\n\nexport function WithdrawalOperationPage({\n operationId,\n onAuthorizationRequired,\n onOperationAborted,\n routeClose,\n routeWithdrawalDetails,\n}: {\n onAuthorizationRequired: () => void;\n operationId: string;\n purpose: \"after-creation\" | \"after-confirmation\";\n onOperationAborted: () => void;\n routeClose: RouteDefinition;\n routeWithdrawalDetails: RouteDefinition<{ wopid: string }>;\n}): VNode {\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const uri = stringifyWithdrawUri({\n bankIntegrationApiBaseUrl: api.getIntegrationAPI().href,\n withdrawalOperationId: operationId,\n });\n const parsedUri = parseWithdrawUri(uri);\n const { i18n } = useTranslationContext();\n const [, updateBankState] = useBankState();\n\n if (!parsedUri) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The Withdrawal URI is not valid`}\n >\n {uri}\n </Attention>\n );\n }\n\n return (\n <WithdrawalQRCode\n withdrawUri={parsedUri}\n routeWithdrawalDetails={routeWithdrawalDetails}\n onAuthorizationRequired={onAuthorizationRequired}\n onOperationAborted={() => {\n updateBankState(\"currentWithdrawalOperationId\", undefined);\n onOperationAborted();\n }}\n routeClose={routeClose}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Cashouts } from \"../../components/Cashouts/index.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { ProfileNavigation } from \"../ProfileNavigation.js\";\nimport { CreateCashout } from \"../regional/CreateCashout.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\ninterface Props {\n account: string;\n routeClose: RouteDefinition;\n onAuthorizationRequired: () => void;\n routeCashoutDetails: RouteDefinition<{ cid: string }>;\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeCreateCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n}\n\nexport function CashoutListForAccount({\n account,\n onAuthorizationRequired,\n routeCreateCashout,\n routeCashoutDetails,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeConversionConfig,\n routeMyAccountPassword,\n routeClose,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const { state: credentials } = useSessionState();\n\n const accountIsTheCurrentUser =\n credentials.status === \"loggedIn\"\n ? credentials.username === account\n : false;\n\n return (\n <Fragment>\n {accountIsTheCurrentUser ? (\n <ProfileNavigation\n current=\"cashouts\"\n routeMyAccountCashout={routeMyAccountCashout}\n routeMyAccountDelete={routeMyAccountDelete}\n routeMyAccountDetails={routeMyAccountDetails}\n routeMyAccountPassword={routeMyAccountPassword}\n routeConversionConfig={routeConversionConfig}\n />\n ) : (\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Cashout for account {account}</i18n.Translate>\n </h1>\n )}\n\n <CreateCashout\n focus\n routeHere={routeCreateCashout}\n routeClose={routeClose}\n onAuthorizationRequired={onAuthorizationRequired}\n account={account}\n />\n\n <Cashouts account={account} routeCashoutDetails={routeCashoutDetails} />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError } from \"@gnu-taler/taler-util\";\nimport { useCashouts } from \"../../hooks/regional.js\";\nimport { Props, State } from \"./index.js\";\n\nexport function useComponentState({\n account,\n routeCashoutDetails,\n}: Props): State {\n const result = useCashouts(account);\n if (!result) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n if (result instanceof TalerError) {\n return {\n status: \"loading-error\",\n error: result,\n };\n }\n if (result.type === \"fail\") {\n return {\n status: \"failed\",\n error: result,\n };\n }\n\n return {\n status: \"ready\",\n error: undefined,\n cashouts: result.body.cashouts,\n routeCashoutDetails,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useConversionInfo } from \"../../hooks/regional.js\";\nimport { RenderAmount } from \"../../pages/PaytoWireTransferForm.js\";\nimport { ErrorLoadingWithDebug } from \"../ErrorLoadingWithDebug.js\";\nimport { Time } from \"../Time.js\";\nimport { State } from \"./index.js\";\n\nexport function FailedView({ error }: State.Failed) {\n const { i18n } = useTranslationContext();\n switch (error.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(error.case);\n }\n}\n\nexport function ReadyView({\n cashouts,\n routeCashoutDetails,\n}: State.Ready): VNode {\n const { i18n, dateLocale } = useTranslationContext();\n const resp = useConversionInfo();\n if (!resp) {\n return <Loading />;\n }\n if (resp instanceof TalerError) {\n return <ErrorLoadingWithDebug error={resp} />;\n }\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(resp.case);\n }\n }\n\n if (!cashouts.length) return <div />;\n const txByDate = cashouts.reduce(\n (prev, cur) => {\n const d =\n cur.creation_time.t_s === \"never\"\n ? \"\"\n : format(cur.creation_time.t_s * 1000, \"dd/MM/yyyy\", {\n locale: dateLocale,\n });\n if (!prev[d]) {\n prev[d] = [];\n }\n prev[d].push(cur);\n return prev;\n },\n {} as Record<string, typeof cashouts>,\n );\n return (\n <div class=\"px-4 mt-4\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Latest cashouts</i18n.Translate>\n </h1>\n </div>\n </div>\n <div class=\"-mx-4 mt-5 ring-1 ring-gray-300 sm:mx-0 rounded-lg min-w-fit bg-white\">\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n class=\" pl-2 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Created`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Total debit`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Total credit`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Subject`}</th>\n </tr>\n </thead>\n <tbody>\n {Object.entries(txByDate).map(([date, txs], idx) => {\n return (\n <Fragment key={idx}>\n <tr class=\"border-t border-gray-200\">\n <th\n colSpan={6}\n scope=\"colgroup\"\n class=\"bg-gray-50 py-2 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-3\"\n >\n {date}\n </th>\n </tr>\n {txs.map((item) => {\n return (\n <a\n name=\"cashout details\"\n key={idx}\n class=\"table-row border-b border-gray-200 hover:bg-gray-200 last:border-none\"\n // class=\"table-row\"\n href={routeCashoutDetails.url({\n cid: String(item.id),\n })}\n >\n <td class=\"relative py-2 pl-2 pr-2 text-sm \">\n <div class=\"font-medium text-gray-900\">\n <Time\n format=\"HH:mm:ss\"\n timestamp={AbsoluteTime.fromProtocolTimestamp(\n item.creation_time,\n )}\n // relative={Duration.fromSpec({ days: 1 })}\n />\n </div>\n {\n //FIXME: implement responsive view\n }\n {/* <dl class=\"font-normal sm:hidden\">\n <dt class=\"sr-only sm:hidden\"><i18n.Translate>Amount</i18n.Translate></dt>\n <dd class=\"mt-1 truncate text-gray-700\">\n {item.negative ? i18n.str`sent` : i18n.str`received`} {item.amount ? (\n <span data-negative={item.negative ? \"true\" : \"false\"} class=\"data-[negative=false]:text-green-600 data-[negative=true]:text-red-600\">\n <RenderAmount value={item.amount} />\n </span>\n ) : (\n <span style={{ color: \"grey\" }}>&lt;{i18n.str`invalid value`}&gt;</span>\n )}</dd>\n\n <dt class=\"sr-only sm:hidden\"><i18n.Translate>Counterpart</i18n.Translate></dt>\n <dd class=\"mt-1 truncate text-gray-500 sm:hidden\">\n {item.negative ? i18n.str`to` : i18n.str`from`} {item.counterpart}\n </dd>\n <dd class=\"mt-1 text-gray-500 sm:hidden\" >\n <pre class=\"break-words w-56 whitespace-break-spaces p-2 rounded-md mx-auto my-2 bg-gray-100\">\n {item.subject}\n </pre>\n </dd>\n </dl> */}\n </td>\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-red-600 cursor-pointer\">\n <RenderAmount\n value={Amounts.parseOrThrow(item.amount_debit)}\n spec={resp.body.regional_currency_specification}\n />\n </td>\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-green-600 cursor-pointer\">\n <RenderAmount\n value={Amounts.parseOrThrow(item.amount_credit)}\n spec={resp.body.fiat_currency_specification}\n />\n </td>\n\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-gray-500 break-all min-w-md\">\n {item.subject}\n </td>\n </a>\n );\n })}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Loading, RouteDefinition, utils } from \"@gnu-taler/web-util/browser\";\nimport {\n AbsoluteTime,\n AmountJson,\n TalerCoreBankErrorsByMethod,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport { ErrorLoadingWithDebug } from \"../ErrorLoadingWithDebug.js\";\nimport { useComponentState } from \"./state.js\";\nimport { FailedView, ReadyView } from \"./views.js\";\n\nexport interface Props {\n account: string;\n routeCashoutDetails: RouteDefinition<{ cid: string }>;\n}\n\nexport type State =\n | State.Loading\n | State.Failed\n | State.LoadingUriError\n | State.Ready;\n\nexport namespace State {\n export interface Loading {\n status: \"loading\";\n error: undefined;\n }\n\n export interface LoadingUriError {\n status: \"loading-error\";\n error: TalerError;\n }\n\n export interface Failed {\n status: \"failed\";\n error: TalerCoreBankErrorsByMethod<\"getAccountCashouts\">;\n }\n\n export interface BaseInfo {\n error: undefined;\n }\n export interface Ready extends BaseInfo {\n status: \"ready\";\n error: undefined;\n cashouts: (TalerCorebankApi.CashoutStatusResponse & { id: number })[];\n routeCashoutDetails: RouteDefinition<{ cid: string }>;\n }\n}\n\nexport interface Transaction {\n negative: boolean;\n counterpart: string;\n when: AbsoluteTime;\n amount: AmountJson | undefined;\n subject: string;\n}\n\nconst viewMapping: utils.StateViewMap<State> = {\n loading: Loading,\n \"loading-error\": ErrorLoadingWithDebug,\n failed: FailedView,\n ready: ReadyView,\n};\n\nexport const Cashouts = utils.compose(\n (p: Props) => useComponentState(p),\n viewMapping,\n);\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useNavigationContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport function ProfileNavigation({\n current,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeMyAccountPassword,\n routeConversionConfig,\n}: {\n current: \"details\" | \"delete\" | \"credentials\" | \"cashouts\" | \"conversion\";\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n const { state: credentials } = useSessionState();\n const isAdminUser =\n credentials.status !== \"loggedIn\" ? false : credentials.isUserAdministrator;\n const nonAdminUser = !isAdminUser;\n\n const { navigateTo } = useNavigationContext();\n return (\n <div>\n <div class=\"sm:hidden\">\n <label for=\"tabs\" class=\"sr-only\">\n <i18n.Translate>Select a section</i18n.Translate>\n </label>\n <select\n id=\"tabs\"\n name=\"tabs\"\n class=\"block w-full rounded-md border-gray-300 focus:border-indigo-500 focus:ring-indigo-500\"\n onChange={(e) => {\n const op = e.currentTarget.value as typeof current;\n switch (op) {\n case \"details\": {\n navigateTo(routeMyAccountDetails.url({}));\n return;\n }\n case \"delete\": {\n navigateTo(routeMyAccountDelete.url({}));\n return;\n }\n case \"credentials\": {\n navigateTo(routeMyAccountPassword.url({}));\n return;\n }\n case \"cashouts\": {\n navigateTo(routeMyAccountCashout.url({}));\n return;\n }\n case \"conversion\": {\n navigateTo(routeConversionConfig.url({}));\n return;\n }\n default:\n assertUnreachable(op);\n }\n }}\n >\n <option value=\"details\" selected={current == \"details\"}>\n <i18n.Translate>Details</i18n.Translate>\n </option>\n {!config.allow_deletions ? undefined : (\n <option value=\"delete\" selected={current == \"delete\"}>\n <i18n.Translate>Delete</i18n.Translate>\n </option>\n )}\n <option value=\"credentials\" selected={current == \"credentials\"}>\n <i18n.Translate>Credentials</i18n.Translate>\n </option>\n {config.allow_conversion ? (\n <Fragment>\n <option value=\"cashouts\" selected={current == \"cashouts\"}>\n <i18n.Translate>Cashouts</i18n.Translate>\n </option>\n <option value=\"conversion\" selected={current == \"cashouts\"}>\n <i18n.Translate>Conversion</i18n.Translate>\n </option>\n </Fragment>\n ) : undefined}\n </select>\n </div>\n <div class=\"hidden sm:block\">\n <nav\n class=\"isolate flex divide-x divide-gray-200 rounded-lg shadow\"\n aria-label=\"Tabs\"\n >\n <a\n name=\"my account details\"\n href={routeMyAccountDetails.url({})}\n data-selected={current == \"details\"}\n class=\"rounded-l-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Details</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"details\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n {!config.allow_deletions ? undefined : (\n <a\n name=\"my account delete\"\n href={routeMyAccountDelete.url({})}\n data-selected={current == \"delete\"}\n aria-current=\"page\"\n class=\" text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Delete</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"delete\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n )}\n <a\n name=\"my account password\"\n href={routeMyAccountPassword.url({})}\n data-selected={current == \"credentials\"}\n aria-current=\"page\"\n class=\" text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Credentials</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"credentials\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n {config.allow_conversion && nonAdminUser ? (\n <a\n name=\"my account cashout\"\n href={routeMyAccountCashout.url({})}\n data-selected={current == \"cashouts\"}\n class=\"rounded-r-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Cashouts</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"cashouts\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n ) : undefined}\n {config.allow_conversion && isAdminUser ? (\n <a\n name=\"conversion config\"\n href={routeConversionConfig.url({})}\n data-selected={current == \"conversion\"}\n class=\"rounded-r-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Conversion</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"conversion\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n ) : undefined}\n </nav>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n encodeCrock,\n getRandomBytes,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useAccountDetails } from \"../../hooks/account.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport {\n TransferCalculation,\n useCashoutEstimator,\n useConversionInfo,\n} from \"../../hooks/regional.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { TanChannel, undefinedIfEmpty } from \"../../utils.js\";\nimport { LoginForm } from \"../LoginForm.js\";\nimport {\n InputAmount,\n RenderAmount,\n doAutoFocus,\n} from \"../PaytoWireTransferForm.js\";\n\ninterface Props {\n account: string;\n focus?: boolean;\n onAuthorizationRequired: () => void;\n routeClose: RouteDefinition;\n routeHere: RouteDefinition;\n}\n\ntype FormType = {\n isDebit: boolean;\n amount: string;\n subject: string;\n channel: TanChannel;\n};\ntype ErrorFrom<T> = {\n [P in keyof T]+?: string;\n};\n\nexport function CreateCashout({\n account: accountName,\n onAuthorizationRequired,\n focus,\n routeHere,\n routeClose,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const resultAccount = useAccountDetails(accountName);\n const {\n estimateByCredit: calculateFromCredit,\n estimateByDebit: calculateFromDebit,\n } = useCashoutEstimator();\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const [, updateBankState] = useBankState();\n\n const {\n lib: { bank: api },\n config,\n hints,\n } = useBankCoreApiContext();\n const [form, setForm] = useState<Partial<FormType>>({ isDebit: true });\n const [notification, notify, handleError] = useLocalNotification();\n const info = useConversionInfo();\n\n if (!config.allow_conversion) {\n return (\n <Fragment>\n <Attention type=\"warning\" title={i18n.str`Unable to create a cashout`}>\n <i18n.Translate>\n The bank configuration does not support cashout operations.\n </i18n.Translate>\n </Attention>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n name=\"close\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </Fragment>\n );\n }\n\n if (!resultAccount) {\n return <Loading />;\n }\n if (resultAccount instanceof TalerError) {\n return <ErrorLoadingWithDebug error={resultAccount} />;\n }\n if (resultAccount.type === \"fail\") {\n switch (resultAccount.case) {\n case HttpStatusCode.Unauthorized:\n return <LoginForm currentUser={accountName} />;\n case HttpStatusCode.NotFound:\n return <LoginForm currentUser={accountName} />;\n default:\n assertUnreachable(resultAccount);\n }\n }\n if (!info) {\n return <Loading />;\n }\n\n if (info instanceof TalerError) {\n return <ErrorLoadingWithDebug error={info} />;\n }\n if (info.type === \"fail\") {\n switch (info.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(info.case);\n }\n }\n\n const conversionInfo = info.body.conversion_rate;\n if (!conversionInfo) {\n return (\n <div>conversion enabled but server replied without conversion_rate</div>\n );\n }\n\n const account = {\n balance: Amounts.parseOrThrow(resultAccount.body.balance.amount),\n balanceIsDebit:\n resultAccount.body.balance.credit_debit_indicator == \"debit\",\n debitThreshold: Amounts.parseOrThrow(resultAccount.body.debit_threshold),\n };\n\n const {\n fiat_currency,\n regional_currency,\n fiat_currency_specification,\n regional_currency_specification,\n } = info.body;\n const regionalZero = Amounts.zeroOfCurrency(regional_currency);\n const fiatZero = Amounts.zeroOfCurrency(fiat_currency);\n const limit = account.balanceIsDebit\n ? Amounts.sub(account.debitThreshold, account.balance).amount\n : Amounts.add(account.balance, account.debitThreshold).amount;\n\n const zeroCalc = {\n debit: regionalZero,\n credit: fiatZero,\n beforeFee: fiatZero,\n };\n const [calculationResult, setCalculation] =\n useState<TransferCalculation>(zeroCalc);\n const sellFee = Amounts.parseOrThrow(conversionInfo.cashout_fee);\n const sellRate = conversionInfo.cashout_ratio;\n /**\n * can be in regional currency or fiat currency\n * depending on the isDebit flag\n */\n const inputAmount = Amounts.parseOrThrow(\n `${form.isDebit ? regional_currency : fiat_currency}:${\n !form.amount ? \"0\" : form.amount\n }`,\n );\n\n useEffect(() => {\n async function doAsync() {\n await handleError(async () => {\n const higerThanMin = form.isDebit\n ? Amounts.cmp(inputAmount, conversionInfo.cashout_min_amount) === 1\n : true;\n const notZero = Amounts.isNonZero(inputAmount);\n if (notZero && higerThanMin) {\n const resp = await (form.isDebit\n ? calculateFromDebit(inputAmount, sellFee)\n : calculateFromCredit(inputAmount, sellFee));\n setCalculation(resp);\n } else {\n setCalculation(zeroCalc);\n }\n });\n }\n doAsync();\n }, [form.amount, form.isDebit]);\n\n const calc =\n calculationResult === \"amount-is-too-small\" ? zeroCalc : calculationResult;\n\n const balanceAfter = Amounts.sub(account.balance, calc.debit).amount;\n\n function updateForm(newForm: typeof form): void {\n setForm(newForm);\n }\n const errors = undefinedIfEmpty<ErrorFrom<typeof form>>({\n subject: !form.subject ? i18n.str`Required` : undefined,\n amount: !form.amount\n ? i18n.str`Required`\n : !inputAmount\n ? i18n.str`Invalid`\n : Amounts.cmp(limit, calc.debit) === -1\n ? i18n.str`Balance is not enough`\n : form.isDebit &&\n Amounts.cmp(inputAmount, conversionInfo.cashout_min_amount) < 1\n ? i18n.str`Needs to be higher than ${\n Amounts.stringifyValueWithSpec(\n Amounts.parseOrThrow(conversionInfo.cashout_min_amount),\n regional_currency_specification,\n ).normal\n }`\n : calculationResult === \"amount-is-too-small\"\n ? i18n.str`Amount needs to be higher`\n : Amounts.isZero(calc.credit)\n ? i18n.str`The total transfer at destination will be zero`\n : undefined,\n });\n const trimmedAmountStr = form.amount?.trim();\n\n async function createCashout() {\n const request_uid = encodeCrock(getRandomBytes(32));\n await handleError(async () => {\n // new cashout api doesn't require channel\n const validChannel =\n config.supported_tan_channels.length === 0 || form.channel;\n\n if (!creds || !form.subject || !validChannel) return;\n const request = {\n request_uid,\n amount_credit: Amounts.stringify(calc.credit),\n amount_debit: Amounts.stringify(calc.debit),\n subject: form.subject,\n tan_channel: form.channel,\n };\n const resp = await api.createCashout(creds, request);\n if (resp.type === \"ok\") {\n notifyInfo(i18n.str`Cashout created`);\n } else {\n switch (resp.case) {\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"create-cashout\",\n id: String(resp.body.challenge_id),\n sent: AbsoluteTime.never(),\n location: routeHere.url({}),\n request,\n });\n return onAuthorizationRequired();\n }\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return notify({\n type: \"error\",\n title: i18n.str`Duplicated request detected, check if the operation succeeded or try again.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return notify({\n type: \"error\",\n title: i18n.str`The conversion rate was incorrectly applied`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`The account does not have sufficient funds`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotImplemented:\n return notify({\n type: \"error\",\n title: i18n.str`Cashout are disabled`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return notify({\n type: \"error\",\n title: i18n.str`Missing cashout URI in the profile`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return notify({\n type: \"error\",\n title: i18n.str`Sending the confirmation message failed, retry later or contact the administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n assertUnreachable(resp);\n }\n });\n }\n const cashoutDisabled =\n config.supported_tan_channels.length < 1 ||\n !resultAccount.body.cashout_payto_uri;\n\n const cashoutAccount = !resultAccount.body.cashout_payto_uri\n ? undefined\n : parsePaytoUri(resultAccount.body.cashout_payto_uri);\n const cashoutAccountName = !cashoutAccount\n ? undefined\n : cashoutAccount.targetPath;\n\n const cashoutLegalName = !cashoutAccount\n ? undefined\n : cashoutAccount.params[\"receiver-name\"];\n\n return (\n <div>\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <section class=\"mt-4 rounded-sm px-4 py-6 p-8 \">\n <h2 id=\"summary-heading\" class=\"font-medium text-lg\">\n <i18n.Translate>Cashout</i18n.Translate>\n </h2>\n\n <dl class=\"mt-4 space-y-4\">\n <div class=\"justify-between items-center flex\">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Conversion rate</i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">{sellRate}</dd>\n </div>\n\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Balance</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={account.balance}\n spec={regional_currency_specification}\n />\n </dd>\n </div>\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Fee</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={sellFee}\n spec={fiat_currency_specification}\n />\n </dd>\n </div>\n {cashoutAccountName && cashoutLegalName ? (\n <Fragment>\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>To account</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">{cashoutAccountName}</dd>\n </div>\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Legal name</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">{cashoutLegalName}</dd>\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n If this name doesn't match the account holder's name your\n transaction may fail.\n </i18n.Translate>\n </p>\n </Fragment>\n ) : (\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <Attention type=\"warning\" title={i18n.str`No cashout account`}>\n <i18n.Translate>\n Before doing a cashout you need to complete your profile\n </i18n.Translate>\n </Attention>\n </div>\n )}\n </dl>\n </section>\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n {/* subject */}\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"subject\"\n >\n {i18n.str`Transfer subject`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n ref={focus ? doAutoFocus : undefined}\n type=\"text\"\n class=\"block w-full rounded-md disabled:bg-gray-200 border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"subject\"\n id=\"subject\"\n disabled={cashoutDisabled}\n data-error={!!errors?.subject && form.subject !== undefined}\n value={form.subject ?? \"\"}\n onChange={(e) => {\n form.subject = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.subject}\n isDirty={form.subject !== undefined}\n />\n </div>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"subject\"\n >\n {i18n.str`Currency`}\n </label>\n\n <div class=\"mt-2\">\n <button\n type=\"button\"\n name=\"set 50\"\n class=\" inline-flex p-4 text-sm items-center rounded-l-md bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n form.isDebit = true;\n updateForm(structuredClone(form));\n }}\n >\n {form.isDebit ? (\n <svg\n class=\"self-center flex-none h-5 w-5 text-indigo-600\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n ) : (\n <svg\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-5 h-5\"\n >\n <path d=\"M15 12H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" />\n </svg>\n )}\n\n <i18n.Translate>Send {regional_currency}</i18n.Translate>\n </button>\n <button\n type=\"button\"\n name=\"set 25\"\n class=\" -ml-px -mr-px inline-flex p-4 text-sm items-center rounded-r-md bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n form.isDebit = false;\n updateForm(structuredClone(form));\n }}\n >\n {!form.isDebit ? (\n <svg\n class=\"self-center flex-none h-5 w-5 text-indigo-600\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n ) : (\n <svg\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-5 h-5\"\n >\n <path d=\"M15 12H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" />\n </svg>\n )}\n\n <i18n.Translate>Receive {fiat_currency}</i18n.Translate>\n </button>\n </div>\n </div>\n\n {/* amount */}\n <div class=\"sm:col-span-5\">\n <div class=\"flex justify-between\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"amount\"\n >\n {i18n.str`Amount`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n {/* <button\n type=\"button\"\n data-enabled={form.isDebit}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n form.isDebit = !form.isDebit;\n updateForm(structuredClone(form));\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={form.isDebit}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button> */}\n </div>\n <div class=\"mt-2\">\n <InputAmount\n name=\"amount\"\n left\n currency={form.isDebit ? regional_currency : fiat_currency}\n value={trimmedAmountStr}\n onChange={\n cashoutDisabled\n ? undefined\n : (value) => {\n form.amount = value;\n updateForm(structuredClone(form));\n }\n }\n />\n <ShowInputErrorLabel\n message={errors?.amount}\n isDirty={form.amount !== undefined}\n />\n </div>\n </div>\n\n {Amounts.isZero(calc.credit) ? undefined : (\n <div class=\"sm:col-span-5\">\n <dl class=\"mt-4 space-y-4\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Total cost</i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={calc.debit}\n negative\n withColor\n spec={regional_currency_specification}\n />\n </dd>\n </div>\n\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Balance left</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={balanceAfter}\n spec={regional_currency_specification}\n />\n </dd>\n </div>\n {Amounts.isZero(sellFee) ||\n Amounts.isZero(calc.beforeFee) ? undefined : (\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Before fee</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={calc.beforeFee}\n spec={fiat_currency_specification}\n />\n </dd>\n </div>\n )}\n <div class=\"flex justify-between items-center border-t-2 afu pt-4\">\n <dt class=\"text-lg text-gray-900 font-medium\">\n <i18n.Translate>Total cashout transfer</i18n.Translate>\n </dt>\n <dd class=\"text-lg text-gray-900 font-medium\">\n <RenderAmount\n value={calc.credit}\n withColor\n spec={fiat_currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n )}\n </div>\n </div>\n\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeClose.url({})}\n name=\"cancel\"\n type=\"button\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"cashout\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n onClick={(e) => {\n e.preventDefault();\n createCashout();\n }}\n >\n <i18n.Translate>Cashout</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerCorebankApi,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n parsePaytoUri\n} from \"@gnu-taler/taler-util\";\nimport {\n CopyButton,\n Loading,\n LocalNotificationBanner,\n RouteDefinition,\n notifyInfo,\n useBankCoreApiContext,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useAccountDetails } from \"../../hooks/account.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { LoginForm } from \"../LoginForm.js\";\nimport { ProfileNavigation } from \"../ProfileNavigation.js\";\nimport { AccountForm } from \"../admin/AccountForm.js\";\n\nexport function ShowAccountDetails({\n account,\n routeClose,\n onUpdateSuccess,\n onAuthorizationRequired,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeHere,\n routeMyAccountPassword,\n routeConversionConfig,\n}: {\n routeClose: RouteDefinition;\n routeHere: RouteDefinition<{ account: string }>;\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n onUpdateSuccess: () => void;\n onAuthorizationRequired: () => void;\n account: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const {\n lib: { bank },\n } = useBankCoreApiContext();\n const accountIsTheCurrentUser =\n credentials.status === \"loggedIn\"\n ? credentials.username === account\n : false;\n\n const [submitAccount, setSubmitAccount] = useState<\n TalerCorebankApi.AccountReconfiguration | undefined\n >();\n const [notification, notify, handleError] = useLocalNotification();\n const [, updateBankState] = useBankState();\n\n const result = useAccountDetails(account);\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n return <LoginForm currentUser={account} />;\n default:\n assertUnreachable(result);\n }\n }\n\n async function doUpdate() {\n if (!submitAccount || !creds) return;\n await handleError(async () => {\n const resp = await bank.updateAccount(\n {\n token: creds.token,\n username: account,\n },\n submitAccount,\n );\n\n if (resp.type === \"ok\") {\n notifyInfo(i18n.str`Account updated`);\n onUpdateSuccess();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`The rights to change the account are not sufficient`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The username was not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return notify({\n type: \"error\",\n title: i18n.str`You can't change the legal name, please contact the your account administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return notify({\n type: \"error\",\n title: i18n.str`You can't change the debt limit, please contact the your account administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return notify({\n type: \"error\",\n title: i18n.str`You can't change the cashout address, please contact the your account administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return notify({\n type: \"error\",\n title: i18n.str`No information for the selected authentication channel.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"update-account\",\n id: String(resp.body.challenge_id),\n location: routeHere.url({ account }),\n sent: AbsoluteTime.never(),\n request: submitAccount,\n });\n return onAuthorizationRequired();\n }\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED: {\n return notify({\n type: \"error\",\n title: i18n.str`Authentication channel is not supported.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n const url = bank.getRevenueAPI(account);\n url.username = account;\n const baseURL = url.href;\n\n const ac = parsePaytoUri(result.body.payto_uri);\n const payto = !ac?.isKnown ? undefined : ac;\n let accountLetter: string | undefined = undefined;\n if (payto) {\n switch (payto.targetType) {\n case \"iban\": {\n accountLetter = `account-info-url=${url.href}\\naccount-type=${payto.targetType}\\niban=${payto.iban}\\nreceiver-name=${result.body.name}\\n`;\n break;\n }\n case \"x-taler-bank\": {\n accountLetter = `account-info-url=${url.href}\\naccount-type=${payto.targetType}\\naccount=${payto.account}\\nhost=${payto.host}\\nreceiver-name=${result.body.name}\\n`;\n break;\n }\n case \"bitcoin\": {\n accountLetter = `account-info-url=${url.href}\\naccount-type=${payto.targetType}\\naddress=${payto.address}\\nreceiver-name=${result.body.name}\\n`;\n break;\n }\n }\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} showDebug={true} />\n {accountIsTheCurrentUser ? (\n <ProfileNavigation\n current=\"details\"\n routeMyAccountCashout={routeMyAccountCashout}\n routeMyAccountDelete={routeMyAccountDelete}\n routeConversionConfig={routeConversionConfig}\n routeMyAccountDetails={routeMyAccountDetails}\n routeMyAccountPassword={routeMyAccountPassword}\n />\n ) : (\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Account \"{account}\"</i18n.Translate>\n </h1>\n )}\n\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-semibold leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Change details</i18n.Translate>\n </span>\n </span>\n </div>\n </h2>\n </div>\n\n <AccountForm\n focus={true}\n username={account}\n template={result.body}\n purpose=\"update\"\n onChange={(a) => setSubmitAccount(a)}\n >\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeClose.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"update\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!submitAccount}\n onClick={doUpdate}\n >\n <i18n.Translate>Update</i18n.Translate>\n </button>\n </div>\n </AccountForm>\n </div>\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-semibold leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Merchant integration</i18n.Translate>\n </span>\n </span>\n </div>\n </h2>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Use this information to link your Taler Merchant Backoffice\n account with the current bank account. You can start by copying\n the values, then go to your merchant backoffice service provider,\n login into your account and look for the \"import\" button in the\n \"bank account\" section.\n </i18n.Translate>\n </p>\n </div>\n\n {payto !== undefined && (\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\">\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"account-type\"\n >\n {i18n.str`Account type`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"account-type\"\n id=\"account-type\"\n disabled={true}\n value={account}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Method to use for wire transfer.\n </i18n.Translate>\n </p>\n </div>\n {((payto) => {\n switch (payto.targetType) {\n case \"iban\": {\n return (\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`IBAN`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={payto.iban}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n International Bank Account Number.\n </i18n.Translate>\n </p>\n </div>\n );\n }\n case \"x-taler-bank\": {\n return (\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`IBAN`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={payto.account}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n International Bank Account Number.\n </i18n.Translate>\n </p>\n </div>\n );\n }\n case \"bitcoin\": {\n return (\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`Address`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={\"DE1231231231\"}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n International Bank Account Number.\n </i18n.Translate>\n </p>\n </div>\n );\n }\n }\n })(payto)}\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`Owner's name`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={result.body.name}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Legal name of the person holding the account.\n </i18n.Translate>\n </p>\n </div>\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`Account info URL`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={baseURL}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n From where the merchant can download information about\n incoming wire transfers to this account.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeClose.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <CopyButton\n getContent={() => accountLetter ?? \"\"}\n class=\"flex text-center disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Copy</i18n.Translate>\n </CopyButton>\n </div>\n </div>\n )}\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AmountString,\n Amounts,\n PaytoString,\n TalerCorebankApi,\n assertUnreachable,\n buildPayto,\n parsePaytoUri,\n stringifyPaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n CopyButton,\n ShowInputErrorLabel,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport {\n ErrorMessageMappingFor,\n TanChannel,\n undefinedIfEmpty,\n validateIBAN,\n validateTalerBank,\n} from \"../../utils.js\";\nimport {\n InputAmount,\n TextField,\n doAutoFocus,\n} from \"../PaytoWireTransferForm.js\";\nimport { getRandomPassword } from \"../rnd.js\";\n\nconst EMAIL_REGEX =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst REGEX_JUST_NUMBERS_REGEX = /^\\+[0-9 ]*$/;\n\nexport type AccountFormData = {\n debit_threshold?: string;\n isExchange?: boolean;\n isPublic?: boolean;\n name?: string;\n username?: string;\n payto_uri?: string;\n cashout_payto_uri?: string;\n email?: string;\n phone?: string;\n tan_channel?: TanChannel | \"remove\";\n};\n\ntype ChangeByPurposeType = {\n create: (a: TalerCorebankApi.RegisterAccountRequest | undefined) => void;\n update: (a: TalerCorebankApi.AccountReconfiguration | undefined) => void;\n show: undefined;\n};\n/**\n * FIXME:\n * is_public is missing on PATCH\n * account email/password should require 2FA\n *\n *\n * @param param0\n * @returns\n */\nexport function AccountForm<PurposeType extends keyof ChangeByPurposeType>({\n template,\n username,\n purpose,\n onChange,\n focus,\n children,\n}: {\n focus?: boolean;\n children: ComponentChildren;\n username?: string;\n template: TalerCorebankApi.AccountData | undefined;\n onChange: ChangeByPurposeType[PurposeType];\n purpose: PurposeType;\n}): VNode {\n const { config, url } = useBankCoreApiContext();\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const [form, setForm] = useState<AccountFormData>({});\n\n const [errors, setErrors] = useState<\n ErrorMessageMappingFor<typeof defaultValue> | undefined\n >(undefined);\n\n const paytoType =\n config.wire_type === \"X_TALER_BANK\"\n ? (\"x-taler-bank\" as const)\n : (\"iban\" as const);\n const cashoutPaytoType: typeof paytoType = \"iban\" as const;\n\n const defaultValue: AccountFormData = {\n debit_threshold: Amounts.stringifyValue(\n template?.debit_threshold ?? config.default_debit_threshold,\n ),\n isExchange: template?.is_taler_exchange,\n isPublic: template?.is_public,\n name: template?.name ?? \"\",\n cashout_payto_uri:\n getAccountId(cashoutPaytoType, template?.cashout_payto_uri) ??\n (\"\" as PaytoString),\n payto_uri:\n getAccountId(paytoType, template?.payto_uri) ?? (\"\" as PaytoString),\n email: template?.contact_data?.email ?? \"\",\n phone: template?.contact_data?.phone ?? \"\",\n username: username ?? \"\",\n tan_channel: template?.tan_channel,\n };\n\n const userIsAdmin =\n credentials.status !== \"loggedIn\" ? false : credentials.isUserAdministrator;\n\n const editableUsername = purpose === \"create\";\n const editableName =\n purpose === \"create\" ||\n (purpose === \"update\" && (config.allow_edit_name || userIsAdmin));\n\n const isCashoutEnabled = config.allow_conversion;\n const editableCashout =\n purpose === \"create\" ||\n (purpose === \"update\" &&\n (config.allow_edit_cashout_payto_uri || userIsAdmin));\n const editableThreshold =\n userIsAdmin && (purpose === \"create\" || purpose === \"update\");\n const editableAccount = purpose === \"create\" && userIsAdmin;\n\n function updateForm(newForm: typeof defaultValue): void {\n const trimmedAmountStr = newForm.debit_threshold?.trim();\n const parsedAmount = Amounts.parse(\n `${config.currency}:${trimmedAmountStr}`,\n );\n\n const errors = undefinedIfEmpty<\n ErrorMessageMappingFor<typeof defaultValue>\n >({\n cashout_payto_uri: !newForm.cashout_payto_uri\n ? undefined\n : !editableCashout\n ? undefined\n : !newForm.cashout_payto_uri\n ? undefined\n : cashoutPaytoType === \"iban\"\n ? validateIBAN(newForm.cashout_payto_uri, i18n)\n : cashoutPaytoType === \"x-taler-bank\"\n ? validateTalerBank(newForm.cashout_payto_uri, i18n)\n : undefined,\n\n payto_uri: !newForm.payto_uri\n ? undefined\n : !editableAccount\n ? undefined\n : !newForm.payto_uri\n ? undefined\n : paytoType === \"iban\"\n ? validateIBAN(newForm.payto_uri, i18n)\n : paytoType === \"x-taler-bank\"\n ? validateTalerBank(newForm.payto_uri, i18n)\n : undefined,\n\n email: !newForm.email\n ? undefined\n : !EMAIL_REGEX.test(newForm.email)\n ? i18n.str`Doesn't have the pattern of an email`\n : undefined,\n phone: !newForm.phone\n ? undefined\n : !newForm.phone.startsWith(\"+\") // FIXME: better phone number check\n ? i18n.str`Should start with +`\n : !REGEX_JUST_NUMBERS_REGEX.test(newForm.phone)\n ? i18n.str`Phone number can't have other than numbers`\n : undefined,\n debit_threshold: !editableThreshold\n ? undefined\n : !trimmedAmountStr\n ? undefined\n : !parsedAmount\n ? i18n.str`Not valid`\n : undefined,\n name: !editableName\n ? undefined // disabled\n : !newForm.name\n ? i18n.str`Required`\n : undefined,\n username: !editableUsername\n ? undefined\n : !newForm.username\n ? i18n.str`Required`\n : undefined,\n });\n setErrors(errors);\n\n setForm(newForm);\n if (!onChange) return;\n\n if (errors) {\n onChange(undefined);\n } else {\n let cashout;\n if (newForm.cashout_payto_uri)\n switch (cashoutPaytoType) {\n case \"x-taler-bank\": {\n cashout = buildPayto(\n \"x-taler-bank\",\n url.host,\n newForm.cashout_payto_uri,\n );\n break;\n }\n case \"iban\": {\n cashout = buildPayto(\"iban\", newForm.cashout_payto_uri, undefined);\n break;\n }\n default:\n assertUnreachable(cashoutPaytoType);\n }\n const cashoutURI = !cashout ? undefined : stringifyPaytoUri(cashout);\n let internal;\n if (newForm.payto_uri)\n switch (paytoType) {\n case \"x-taler-bank\": {\n internal = buildPayto(\"x-taler-bank\", url.host, newForm.payto_uri);\n break;\n }\n case \"iban\": {\n internal = buildPayto(\"iban\", newForm.payto_uri, undefined);\n break;\n }\n default:\n assertUnreachable(paytoType);\n }\n const internalURI = !internal ? undefined : stringifyPaytoUri(internal);\n\n const threshold = !parsedAmount\n ? undefined\n : Amounts.stringify(parsedAmount);\n\n switch (purpose) {\n case \"create\": {\n // typescript doesn't correctly narrow a generic type\n const callback = onChange as ChangeByPurposeType[\"create\"];\n const result: TalerCorebankApi.RegisterAccountRequest = {\n name: newForm.name!,\n password: getRandomPassword(),\n username: newForm.username!,\n contact_data: undefinedIfEmpty({\n email: !newForm.email ? undefined : newForm.email,\n phone: !newForm.phone ? undefined : newForm.phone,\n }),\n debit_threshold: threshold ?? config.default_debit_threshold,\n cashout_payto_uri: cashoutURI,\n payto_uri: internalURI,\n is_public: newForm.isPublic,\n is_taler_exchange: newForm.isExchange,\n tan_channel:\n newForm.tan_channel === \"remove\"\n ? undefined\n : newForm.tan_channel,\n };\n callback(result);\n return;\n }\n case \"update\": {\n // typescript doesn't correctly narrow a generic type\n const callback = onChange as ChangeByPurposeType[\"update\"];\n\n const result: TalerCorebankApi.AccountReconfiguration = {\n cashout_payto_uri: cashoutURI,\n contact_data: undefinedIfEmpty({\n email: !newForm.email ? undefined : newForm.email,\n phone: !newForm.phone ? undefined : newForm.phone,\n }),\n debit_threshold: threshold,\n is_public: newForm.isPublic,\n name: newForm.name,\n tan_channel:\n newForm.tan_channel === \"remove\" ? null : newForm.tan_channel,\n };\n callback(result);\n return;\n }\n case \"show\": {\n return;\n }\n default: {\n assertUnreachable(purpose);\n }\n }\n }\n }\n return (\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"username\"\n >\n {i18n.str`Login username`}\n {editableUsername && <b style={{ color: \"red\" }}> *</b>}\n </label>\n <div class=\"mt-2\">\n <input\n ref={focus && purpose === \"create\" ? doAutoFocus : undefined}\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"username\"\n id=\"username\"\n data-error={!!errors?.username && form.username !== undefined}\n disabled={!editableUsername}\n value={form.username ?? defaultValue.username}\n onChange={(e) => {\n form.username = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n // placeholder=\"\"\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.username}\n isDirty={form.username !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Account id for authentication</i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"name\"\n >\n {i18n.str`Full name`}\n {editableName && <b style={{ color: \"red\" }}> *</b>}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"name\"\n data-error={!!errors?.name && form.name !== undefined}\n id=\"name\"\n disabled={!editableName}\n value={form.name ?? defaultValue.name}\n onChange={(e) => {\n form.name = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n // placeholder=\"\"\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.name}\n isDirty={form.name !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Name of the account holder</i18n.Translate>\n </p>\n </div>\n\n {purpose === \"create\" ? undefined : (\n <TextField\n id=\"internal-account\"\n label={i18n.str`Internal account`}\n help={\n purpose === \"create\"\n ? i18n.str`If empty a random account id will be assigned`\n : i18n.str`Share this id to receive bank transfers`\n }\n error={errors?.payto_uri}\n onChange={(e) => {\n form.payto_uri = e as PaytoString;\n updateForm(structuredClone(form));\n }}\n rightIcons={\n <CopyButton\n class=\"p-2 rounded-full text-black shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 \"\n getContent={() =>\n form.payto_uri ?? defaultValue.payto_uri ?? \"\"\n }\n />\n }\n value={(form.payto_uri ?? defaultValue.payto_uri) as PaytoString}\n disabled={!editableAccount}\n />\n )}\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"email\"\n >\n {i18n.str`Email`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"email\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"email\"\n id=\"email\"\n data-error={!!errors?.email && form.email !== undefined}\n disabled={purpose === \"show\"}\n value={form.email ?? defaultValue.email}\n onChange={(e) => {\n form.email = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.email}\n isDirty={form.email !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n To be used when second factor authentication is enabled\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"phone\"\n >\n {i18n.str`Phone`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"phone\"\n id=\"phone\"\n disabled={purpose === \"show\"}\n value={form.phone ?? defaultValue.phone}\n data-error={!!errors?.phone && form.phone !== undefined}\n onChange={(e) => {\n form.phone = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.phone}\n isDirty={form.phone !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n To be used when second factor authentication is enabled\n </i18n.Translate>\n </p>\n </div>\n\n {isCashoutEnabled && (\n <TextField\n id=\"cashout-account\"\n label={i18n.str`Cashout account`}\n help={i18n.str`External account number where the money is going to be sent when doing cashouts`}\n error={errors?.cashout_payto_uri}\n onChange={(e) => {\n form.cashout_payto_uri = e as PaytoString;\n updateForm(structuredClone(form));\n }}\n value={\n (form.cashout_payto_uri ??\n defaultValue.cashout_payto_uri) as PaytoString\n }\n disabled={!editableCashout}\n />\n )}\n\n <div class=\"sm:col-span-5\">\n <label\n for=\"debit\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Max debt`}</label>\n <InputAmount\n name=\"debit\"\n left\n currency={config.currency}\n value={form.debit_threshold ?? defaultValue.debit_threshold}\n onChange={\n !editableThreshold\n ? undefined\n : (e) => {\n form.debit_threshold = e as AmountString;\n updateForm(structuredClone(form));\n }\n }\n />\n <ShowInputErrorLabel\n message={\n errors?.debit_threshold\n ? String(errors?.debit_threshold)\n : undefined\n }\n isDirty={form.debit_threshold !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n How much the balance can go below zero.\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Is this account public?</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name=\"is public\"\n data-enabled={\n form.isPublic ?? defaultValue.isPublic ? \"true\" : \"false\"\n }\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n form.isPublic = !(form.isPublic ?? defaultValue.isPublic);\n updateForm(structuredClone(form));\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={\n form.isPublic ?? defaultValue.isPublic ? \"true\" : \"false\"\n }\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Public accounts have their balance publicly accessible\n </i18n.Translate>\n </p>\n </div>\n\n {purpose !== \"create\" || !userIsAdmin ? undefined : (\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>\n Is this account a payment provider?\n </i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name=\"is exchange\"\n data-enabled={\n form.isExchange ?? defaultValue.isExchange\n ? \"true\"\n : \"false\"\n }\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n form.isExchange = !form.isExchange;\n updateForm(structuredClone(form));\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={\n form.isExchange ?? defaultValue.isExchange\n ? \"true\"\n : \"false\"\n }\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n {children}\n </form>\n );\n}\n\nfunction getAccountId(\n type: \"iban\" | \"x-taler-bank\",\n s: PaytoString | undefined,\n): string | undefined {\n if (s === undefined) return undefined;\n const p = parsePaytoUri(s);\n if (p === undefined) return undefined;\n if (!p.isKnown) return \"<unknown>\";\n if (type === \"iban\" && p.targetType === \"iban\") return p.iban;\n if (type === \"x-taler-bank\" && p.targetType === \"x-taler-bank\")\n return p.account;\n return \"<unsupported>\";\n}\n\n{\n /* <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"cashout\"\n >\n {}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n ref={focus && purpose === \"update\" ? doAutoFocus : undefined}\n data-error={!!errors?.cashout_payto_uri && form.cashout_payto_uri !== undefined}\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"cashout\"\n id=\"cashout\"\n disabled={purpose === \"show\"}\n value={form.cashout_payto_uri ?? defaultValue.cashout_payto_uri}\n onChange={(e) => {\n form.cashout_payto_uri = e.currentTarget.value as PaytoString;\n if (!form.cashout_payto_uri) {\n form.cashout_payto_uri = undefined\n }\n updateForm(structuredClone(form));\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.cashout_payto_uri}\n isDirty={form.cashout_payto_uri !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\" >\n <i18n.Translate></i18n.Translate>\n </p>\n </div> */\n}\n\n// function PaytoField({\n// name,\n// label,\n// help,\n// type,\n// value,\n// disabled,\n// onChange,\n// error,\n// }: {\n// error: TranslatedString | undefined;\n// name: string;\n// label: TranslatedString;\n// help: TranslatedString;\n// onChange: (s: string) => void;\n// type: \"iban\" | \"x-taler-bank\" | \"bitcoin\";\n// disabled?: boolean;\n// value: string | undefined;\n// }): VNode {\n// if (type === \"iban\") {\n// return (\n// <div class=\"sm:col-span-5\">\n// <label\n// class=\"block text-sm font-medium leading-6 text-gray-900\"\n// for={name}\n// >\n// {label}\n// </label>\n// <div class=\"mt-2\">\n// <div class=\"flex justify-between\">\n// <input\n// type=\"text\"\n// class=\"mr-4 w-full block-inline disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n// name={name}\n// id={name}\n// disabled={disabled}\n// value={value ?? \"\"}\n// onChange={(e) => {\n// onChange(e.currentTarget.value);\n// }}\n// />\n// <CopyButton\n// class=\"p-2 rounded-full text-black shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 \"\n// getContent={() => value ?? \"\"}\n// />\n// </div>\n// <ShowInputErrorLabel message={error} isDirty={value !== undefined} />\n// </div>\n// <p class=\"mt-2 text-sm text-gray-500\">{help}</p>\n// </div>\n// );\n// }\n// if (type === \"x-taler-bank\") {\n// return (\n// <div class=\"sm:col-span-5\">\n// <label\n// class=\"block text-sm font-medium leading-6 text-gray-900\"\n// for={name}\n// >\n// {label}\n// </label>\n// <div class=\"mt-2\">\n// <div class=\"flex justify-between\">\n// <input\n// type=\"text\"\n// class=\"mr-4 w-full block-inline disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n// name={name}\n// id={name}\n// disabled={disabled}\n// value={value ?? \"\"}\n// onChange={(e) => {\n// onChange(e.currentTarget.value);\n// }}\n// />\n// <CopyButton\n// class=\"p-2 rounded-full text-black shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 \"\n// getContent={() => value ?? \"\"}\n// />\n// </div>\n// <ShowInputErrorLabel message={error} isDirty={value !== undefined} />\n// </div>\n// <p class=\"mt-2 text-sm text-gray-500\">\n// {help}\n// </p>\n// </div>\n// );\n// }\n// if (type === \"bitcoin\") {\n// return (\n// <div class=\"sm:col-span-5\">\n// <label\n// class=\"block text-sm font-medium leading-6 text-gray-900\"\n// for={name}\n// >\n// {label}\n// </label>\n// <div class=\"mt-2\">\n// <div class=\"flex justify-between\">\n// <input\n// type=\"text\"\n// class=\"mr-4 w-full block-inline disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n// name={name}\n// id={name}\n// disabled={disabled}\n// value={value ?? \"\"}\n// />\n// <CopyButton\n// class=\"p-2 rounded-full text-black shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 \"\n// getContent={() => value ?? \"\"}\n// />\n// <ShowInputErrorLabel\n// message={error}\n// isDirty={value !== undefined}\n// />\n// </div>\n// </div>\n// <p class=\"mt-2 text-sm text-gray-500\">\n// {/* <i18n.Translate>bitcoin address</i18n.Translate> */}\n// {help}\n// </p>\n// </div>\n// );\n// }\n// assertUnreachable(type);\n// }\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n LocalNotificationBanner,\n ShowInputErrorLabel,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../../utils.js\";\nimport { doAutoFocus } from \"../PaytoWireTransferForm.js\";\nimport { ProfileNavigation } from \"../ProfileNavigation.js\";\n\nexport function UpdateAccountPassword({\n account: accountName,\n routeClose,\n onUpdateSuccess,\n onAuthorizationRequired,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeMyAccountPassword,\n routeConversionConfig,\n focus,\n routeHere,\n}: {\n routeClose: RouteDefinition;\n routeHere: RouteDefinition<{ account: string }>;\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n focus?: boolean;\n onAuthorizationRequired: () => void;\n onUpdateSuccess: () => void;\n account: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const [current, setCurrent] = useState<string | undefined>();\n const [password, setPassword] = useState<string | undefined>();\n const [repeat, setRepeat] = useState<string | undefined>();\n const [, updateBankState] = useBankState();\n\n const accountIsTheCurrentUser =\n credentials.status === \"loggedIn\"\n ? credentials.username === accountName\n : false;\n\n const errors = undefinedIfEmpty({\n current: !accountIsTheCurrentUser\n ? undefined\n : !current\n ? i18n.str`Required`\n : undefined,\n password: !password ? i18n.str`Required` : undefined,\n repeat: !repeat\n ? i18n.str`Required`\n : password !== repeat\n ? i18n.str`Repeated password doesn't match`\n : undefined,\n });\n const [notification, notify, handleError] = useLocalNotification();\n\n async function doChangePassword() {\n if (!!errors || !password || !token) return;\n await handleError(async () => {\n const request = {\n old_password: current,\n new_password: password,\n };\n const resp = await api.updatePassword(\n { username: accountName, token },\n request,\n );\n if (resp.type === \"ok\") {\n notifyInfo(i18n.str`Password changed`);\n onUpdateSuccess();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`Not authorized to change the password, maybe the session is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return notify({\n type: \"error\",\n title: i18n.str`You need to provide the old password. If you don't have it contact your account administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return notify({\n type: \"error\",\n title: i18n.str`Your current password doesn't match, can't change to a new password.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"update-password\",\n id: String(resp.body.challenge_id),\n location: routeHere.url({ account: accountName }),\n sent: AbsoluteTime.never(),\n request,\n });\n return onAuthorizationRequired();\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n {accountIsTheCurrentUser ? (\n <ProfileNavigation\n current=\"credentials\"\n routeMyAccountCashout={routeMyAccountCashout}\n routeMyAccountDelete={routeMyAccountDelete}\n routeMyAccountDetails={routeMyAccountDetails}\n routeMyAccountPassword={routeMyAccountPassword}\n routeConversionConfig={routeConversionConfig}\n />\n ) : (\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Account \"{accountName}\"</i18n.Translate>\n </h1>\n )}\n\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Update password</i18n.Translate>\n </h2>\n </div>\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n {accountIsTheCurrentUser ? (\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"password\"\n >\n {i18n.str`Current password`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"current\"\n id=\"current-password\"\n data-error={!!errors?.current && current !== undefined}\n value={current ?? \"\"}\n onChange={(e) => {\n setCurrent(e.currentTarget.value);\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.current}\n isDirty={current !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Your current password, for security\n </i18n.Translate>\n </p>\n </div>\n ) : undefined}\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"password\"\n >\n {i18n.str`New password`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n ref={focus ? doAutoFocus : undefined}\n type=\"password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"password\"\n id=\"password\"\n data-error={!!errors?.password && password !== undefined}\n value={password ?? \"\"}\n onChange={(e) => {\n setPassword(e.currentTarget.value);\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.password}\n isDirty={password !== undefined}\n />\n </div>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"repeat\"\n >\n {i18n.str`Type it again`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"repeat\"\n id=\"repeat\"\n data-error={!!errors?.repeat && repeat !== undefined}\n value={repeat ?? \"\"}\n onChange={(e) => {\n setRepeat(e.currentTarget.value);\n }}\n // placeholder=\"\"\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.repeat}\n isDirty={repeat !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Repeat the same password</i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeClose.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"change\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n onClick={(e) => {\n e.preventDefault();\n doChangePassword();\n }}\n >\n <i18n.Translate>Change</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountString,\n Amounts,\n CurrencySpecification,\n HttpStatusCode,\n TalerCorebankApi,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n RouteDefinition,\n useBankCoreApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport {\n format,\n sub\n} from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { Transactions } from \"../../components/Transactions/index.js\";\nimport { useConversionInfo, useLastMonitorInfo } from \"../../hooks/regional.js\";\nimport { RenderAmount } from \"../PaytoWireTransferForm.js\";\nimport { WireTransfer } from \"../WireTransfer.js\";\nimport { AccountList } from \"./AccountList.js\";\n\n/**\n * Query account information and show QR code if there is pending withdrawal\n */\ninterface Props {\n routeCreate: RouteDefinition;\n routeDownloadStats: RouteDefinition;\n routeCreateWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n\n routeShowAccount: RouteDefinition<{ account: string }>;\n routeRemoveAccount: RouteDefinition<{ account: string }>;\n routeUpdatePasswordAccount: RouteDefinition<{ account: string }>;\n routeShowCashoutsAccount: RouteDefinition<{ account: string }>;\n onAuthorizationRequired: () => void;\n}\nexport function AdminHome({\n routeCreate,\n routeRemoveAccount,\n routeShowAccount,\n routeUpdatePasswordAccount,\n routeDownloadStats,\n routeCreateWireTransfer,\n onAuthorizationRequired,\n}: Props): VNode {\n return (\n <Fragment>\n <Metrics routeDownloadStats={routeDownloadStats} />\n <WireTransfer\n routeHere={routeCreateWireTransfer}\n onAuthorizationRequired={onAuthorizationRequired}\n />\n <Transactions\n account=\"admin\"\n routeCreateWireTransfer={routeCreateWireTransfer}\n />\n <AccountList\n routeCreate={routeCreate}\n routeRemoveAccount={routeRemoveAccount}\n routeShowAccount={routeShowAccount}\n routeUpdatePasswordAccount={routeUpdatePasswordAccount}\n />\n </Fragment>\n );\n}\n\nfunction getDateForTimeframe(\n date: AbsoluteTime,\n timeframe: TalerCorebankApi.MonitorTimeframeParam,\n locale: Locale,\n): string {\n if (date.t_ms === \"never\") return \"--\";\n switch (timeframe) {\n case TalerCorebankApi.MonitorTimeframeParam.hour:\n return `${format(date.t_ms, \"HH\", { locale })}hs`;\n case TalerCorebankApi.MonitorTimeframeParam.day:\n return format(date.t_ms, \"EEEE\", { locale });\n case TalerCorebankApi.MonitorTimeframeParam.month:\n return format(date.t_ms, \"MMMM\", { locale });\n case TalerCorebankApi.MonitorTimeframeParam.year:\n return format(date.t_ms, \"yyyy\", { locale });\n case TalerCorebankApi.MonitorTimeframeParam.decade:\n return format(date.t_ms, \"yyyy\", { locale });\n }\n assertUnreachable(timeframe);\n}\n\nexport function getTimeframesForDate(\n time: Date,\n timeframe: TalerCorebankApi.MonitorTimeframeParam,\n): { current: AbsoluteTime; previous: AbsoluteTime } {\n switch (timeframe) {\n case TalerCorebankApi.MonitorTimeframeParam.hour:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { hours: 1 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { hours: 2 }).getTime(),\n ),\n };\n case TalerCorebankApi.MonitorTimeframeParam.day:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { days: 1 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { days: 4 }).getTime(),\n ),\n };\n case TalerCorebankApi.MonitorTimeframeParam.month:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { months: 1 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { months: 2 }).getTime(),\n ),\n };\n case TalerCorebankApi.MonitorTimeframeParam.year:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { years: 1 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { years: 2 }).getTime(),\n ),\n };\n case TalerCorebankApi.MonitorTimeframeParam.decade:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { years: 10 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { years: 20 }).getTime(),\n ),\n };\n default:\n assertUnreachable(timeframe);\n }\n}\n\nfunction Metrics({\n routeDownloadStats,\n}: {\n routeDownloadStats: RouteDefinition;\n}): VNode {\n const { i18n, dateLocale } = useTranslationContext();\n const [metricType, setMetricType] =\n useState<TalerCorebankApi.MonitorTimeframeParam>(\n TalerCorebankApi.MonitorTimeframeParam.hour,\n );\n const { config } = useBankCoreApiContext();\n const respInfo = useConversionInfo();\n const params = getTimeframesForDate(new Date(), metricType);\n\n const resp = useLastMonitorInfo(params.current, params.previous, metricType);\n if (!resp) return <Fragment />;\n if (resp instanceof TalerError) {\n return <ErrorLoadingWithDebug error={resp} />;\n }\n if (!respInfo) return <Fragment />;\n if (respInfo instanceof TalerError) {\n return <ErrorLoadingWithDebug error={respInfo} />;\n }\n if (respInfo.type === \"fail\") {\n switch (respInfo.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default: {\n assertUnreachable(respInfo.case);\n }\n }\n }\n\n if (resp.current.type !== \"ok\") {\n switch (resp.current.case) {\n case HttpStatusCode.BadRequest:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`Querying for the current stats failed`}\n >\n <i18n.Translate>The request parameters are wrong</i18n.Translate>\n </Attention>\n );\n case HttpStatusCode.Unauthorized:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`Querying for the current stats failed`}\n >\n <i18n.Translate>The user is unauthorized</i18n.Translate>\n </Attention>\n );\n default: {\n assertUnreachable(resp.current);\n }\n }\n }\n if (resp.previous.type !== \"ok\") {\n switch (resp.previous.case) {\n case HttpStatusCode.BadRequest:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`Querying for the previous stats failed`}\n >\n <i18n.Translate>The request parameters are wrong</i18n.Translate>\n </Attention>\n );\n case HttpStatusCode.Unauthorized:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`Querying for the previous stats failed`}\n >\n <i18n.Translate>The user is unauthorized</i18n.Translate>\n </Attention>\n );\n default: {\n assertUnreachable(resp.previous);\n }\n }\n }\n return (\n <div class=\"px-4 mt-4\">\n <div class=\"sm:flex sm:items-center mb-4\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Transaction volume report</i18n.Translate>\n </h1>\n </div>\n </div>\n\n <div class=\"sm:hidden\">\n <label for=\"tabs\" class=\"sr-only\">\n <i18n.Translate>Select a section</i18n.Translate>\n </label>\n <select\n id=\"tabs\"\n name=\"tabs\"\n class=\"block w-full rounded-md border-gray-300 focus:border-indigo-500 focus:ring-indigo-500\"\n onChange={(e) => {\n // const op = e.currentTarget.value as typeof metricType\n setMetricType(\n e.currentTarget\n .value as unknown as TalerCorebankApi.MonitorTimeframeParam,\n );\n }}\n >\n <option\n value={TalerCorebankApi.MonitorTimeframeParam.hour}\n selected={metricType == TalerCorebankApi.MonitorTimeframeParam.hour}\n >\n <i18n.Translate>Last hour</i18n.Translate>\n </option>\n <option\n value={TalerCorebankApi.MonitorTimeframeParam.day}\n selected={metricType == TalerCorebankApi.MonitorTimeframeParam.day}\n >\n <i18n.Translate>Previous day</i18n.Translate>\n </option>\n <option\n value={TalerCorebankApi.MonitorTimeframeParam.month}\n selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.month\n }\n >\n <i18n.Translate>Last month</i18n.Translate>\n </option>\n <option\n value={TalerCorebankApi.MonitorTimeframeParam.year}\n selected={metricType == TalerCorebankApi.MonitorTimeframeParam.year}\n >\n <i18n.Translate>Last year</i18n.Translate>\n </option>\n </select>\n </div>\n <div class=\"hidden sm:block\">\n {/* FIXME: This should be LINKS */}\n <nav\n class=\"isolate flex divide-x divide-gray-200 rounded-lg shadow\"\n aria-label=\"Tabs\"\n >\n <button\n type=\"button\"\n name=\"set last hour\"\n onClick={(e) => {\n e.preventDefault();\n setMetricType(TalerCorebankApi.MonitorTimeframeParam.hour);\n }}\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.hour\n }\n class=\"rounded-l-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Last hour</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.hour\n }\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </button>\n <button\n type=\"button\"\n name=\"set previous day\"\n onClick={(e) => {\n e.preventDefault();\n setMetricType(TalerCorebankApi.MonitorTimeframeParam.day);\n }}\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.day\n }\n class=\" text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Previous day</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.day\n }\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </button>\n <button\n type=\"button\"\n name=\"set last month\"\n onClick={(e) => {\n e.preventDefault();\n setMetricType(TalerCorebankApi.MonitorTimeframeParam.month);\n }}\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.month\n }\n class=\"rounded-r-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Last month</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.month\n }\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </button>\n <button\n type=\"button\"\n name=\"set last year\"\n onClick={(e) => {\n e.preventDefault();\n setMetricType(TalerCorebankApi.MonitorTimeframeParam.year);\n }}\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.year\n }\n class=\"rounded-r-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Last Year</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.year\n }\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </button>\n </nav>\n </div>\n\n <div class=\"w-full flex justify-between\">\n <h1 class=\"text-base text-gray-900 mt-5\">\n {i18n.str`Trading volume on ${getDateForTimeframe(\n params.current,\n metricType,\n dateLocale,\n )} compared to ${getDateForTimeframe(\n params.previous,\n metricType,\n dateLocale,\n )}`}\n </h1>\n </div>\n <dl class=\"mt-5 grid grid-cols-1 md:grid-cols-2 divide-y divide-gray-200 overflow-hidden rounded-lg bg-white shadow-lg md:divide-x md:divide-y-0\">\n {resp.current.body.type !== \"with-conversions\" ||\n resp.previous.body.type !== \"with-conversions\" ? undefined : (\n <Fragment>\n <div class=\"px-4 py-5 sm:p-6\">\n <dt class=\"text-base font-normal text-gray-900\">\n <i18n.Translate>Cashin</i18n.Translate>\n <div class=\"text-xs text-gray-500\">\n <i18n.Translate>\n Transferred from an external account to an account in this\n bank.\n </i18n.Translate>\n </div>\n </dt>\n <MetricValue\n current={resp.current.body.cashinFiatVolume}\n previous={resp.previous.body.cashinFiatVolume}\n spec={respInfo.body.fiat_currency_specification}\n />\n </div>\n <div class=\"px-4 py-5 sm:p-6\">\n <dt class=\"text-base font-normal text-gray-900\">\n <i18n.Translate>Cashout</i18n.Translate>\n </dt>\n <div class=\"text-xs text-gray-500\">\n <i18n.Translate>\n Transferred from an account in this bank to an external\n account.\n </i18n.Translate>\n </div>\n <MetricValue\n current={resp.current.body.cashoutFiatVolume}\n previous={resp.previous.body.cashoutFiatVolume}\n spec={respInfo.body.fiat_currency_specification}\n />\n </div>\n </Fragment>\n )}\n <div class=\"px-4 py-5 sm:p-6\">\n <dt class=\"text-base font-normal text-gray-900\">\n <i18n.Translate>Payin</i18n.Translate>\n <div class=\"text-xs text-gray-500\">\n <i18n.Translate>\n Transferred from an account to a Taler exchange.\n </i18n.Translate>\n </div>\n </dt>\n <MetricValue\n current={resp.current.body.talerInVolume}\n previous={resp.previous.body.talerInVolume}\n spec={config.currency_specification}\n />\n </div>\n <div class=\"px-4 py-5 sm:p-6\">\n <dt class=\"text-base font-normal text-gray-900\">\n <i18n.Translate>Payout</i18n.Translate>\n <div class=\"text-xs text-gray-500\">\n <i18n.Translate>\n Transferred from a Taler exchange to another account.\n </i18n.Translate>\n </div>\n </dt>\n <MetricValue\n current={resp.current.body.talerOutVolume}\n previous={resp.previous.body.talerOutVolume}\n spec={config.currency_specification}\n />\n </div>\n </dl>\n <div class=\"flex justify-end mt-4\">\n <a\n href={routeDownloadStats.url({})}\n name=\"download stats\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Download stats as CSV</i18n.Translate>\n </a>\n </div>\n </div>\n );\n}\n\nfunction MetricValue({\n current,\n previous,\n spec,\n}: {\n spec: CurrencySpecification;\n current: AmountString | undefined;\n previous: AmountString | undefined;\n}): VNode {\n const { i18n } = useTranslationContext();\n const cmp = current && previous ? Amounts.cmp(current, previous) : 0;\n const cv = !current ? undefined : Amounts.stringifyValue(current);\n const currAmount = !cv ? undefined : Number.parseFloat(cv);\n const prevAmount = !previous\n ? undefined\n : Number.parseFloat(Amounts.stringifyValue(previous));\n\n const rate =\n !currAmount ||\n Number.isNaN(currAmount) ||\n !prevAmount ||\n Number.isNaN(prevAmount)\n ? 0\n : cmp === -1\n ? 1 - Math.round(currAmount) / Math.round(prevAmount)\n : cmp === 1\n ? Math.round(currAmount) / Math.round(prevAmount) - 1\n : 0;\n\n const negative = cmp === 0 ? undefined : cmp === -1;\n const rateStr = `${(Math.abs(rate) * 100).toFixed(2)}%`;\n return (\n <Fragment>\n <dd class=\"mt-1 block \">\n <div class=\"flex justify-start text-2xl items-baseline font-semibold text-indigo-600\">\n {!current ? (\n \"-\"\n ) : (\n <RenderAmount\n value={Amounts.parseOrThrow(current)}\n spec={spec}\n hideSmall\n />\n )}\n </div>\n <div class=\"flex flex-col\">\n <div class=\"flex justify-end items-baseline text-2xl font-semibold text-indigo-600\">\n <small class=\"ml-2 text-sm font-medium text-gray-500\">\n <i18n.Translate>from</i18n.Translate>{\" \"}\n {!previous ? (\n \"-\"\n ) : (\n <RenderAmount\n value={Amounts.parseOrThrow(previous)}\n spec={spec}\n hideSmall\n />\n )}\n </small>\n </div>\n {!!rate && (\n <span\n data-negative={negative}\n class=\"flex items-center gap-x-1.5 w-fit rounded-md bg-green-100 text-green-800 data-[negative=true]:bg-red-100 px-2 py-1 text-xs font-medium data-[negative=true]:text-red-700 whitespace-pre\"\n >\n {negative ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 4.5v15m0 0l6.75-6.75M12 19.5l-6.75-6.75\"\n />\n </svg>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 19.5v-15m0 0l-6.75 6.75M12 4.5l6.75 6.75\"\n />\n </svg>\n )}\n\n {negative ? (\n <span class=\"sr-only\">\n <i18n.Translate>Decreased by</i18n.Translate>\n </span>\n ) : (\n <span class=\"sr-only\">\n <i18n.Translate>Increased by</i18n.Translate>\n </span>\n )}\n {rateStr}\n </span>\n )}\n </div>\n </dd>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport { Loading, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useBusinessAccounts } from \"../../hooks/regional.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { RenderAmount } from \"../PaytoWireTransferForm.js\";\n\ninterface Props {\n routeCreate: RouteDefinition;\n\n routeShowAccount: RouteDefinition<{ account: string }>;\n routeRemoveAccount: RouteDefinition<{ account: string }>;\n routeUpdatePasswordAccount: RouteDefinition<{ account: string }>;\n}\n\nexport function AccountList({\n routeCreate,\n routeRemoveAccount,\n routeShowAccount,\n routeUpdatePasswordAccount,\n}: Props): VNode {\n const result = useBusinessAccounts();\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n return <Fragment />;\n default:\n assertUnreachable(result.case);\n }\n }\n\n const onGoStart = result.isFirstPage ? undefined : result.loadFirst;\n const onGoNext = result.isLastPage ? undefined : result.loadNext;\n\n const accounts = result.body;\n return (\n <Fragment>\n <div class=\"px-4 sm:px-6 lg:px-8 mt-8\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Accounts</i18n.Translate>\n </h1>\n </div>\n <div class=\"mt-4 sm:ml-16 sm:mt-0 sm:flex-none\">\n <a\n href={routeCreate.url({})}\n name=\"create account\"\n type=\"button\"\n class=\"block rounded-md bg-indigo-600 px-3 py-2 text-center text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Create account</i18n.Translate>\n </a>\n </div>\n </div>\n <div class=\"mt-4 flow-root\">\n <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n {!accounts.length ? (\n <div>{/* FIXME: ADD empty list */}</div>\n ) : (\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n class=\"py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-0\"\n >{i18n.str`Username`}</th>\n <th\n scope=\"col\"\n class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Name`}</th>\n <th\n scope=\"col\"\n class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Balance`}</th>\n <th scope=\"col\" class=\"relative py-3.5 pl-3 pr-4 sm:pr-0\">\n <span class=\"sr-only\">{i18n.str`Actions`}</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200\">\n {accounts.map((item, idx) => {\n const balance = !item.balance\n ? undefined\n : Amounts.parse(item.balance.amount);\n const noBalance = Amounts.isZero(item.balance.amount);\n const balanceIsDebit =\n item.balance &&\n item.balance.credit_debit_indicator == \"debit\";\n\n return (\n <tr key={idx}>\n <td class=\"whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900 sm:pl-0\">\n <a\n name={`show account ${item.username}`}\n href={routeShowAccount.url({\n account: item.username,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n {item.username}\n </a>\n </td>\n <td class=\"whitespace-nowrap px-3 py-4 text-sm text-gray-500\">\n {item.name}\n </td>\n <td\n data-negative={\n noBalance\n ? undefined\n : balanceIsDebit\n ? \"true\"\n : \"false\"\n }\n class=\"whitespace-nowrap px-3 py-4 text-sm text-gray-500 data-[negative=false]:text-green-600 data-[negative=true]:text-red-600 \"\n >\n {!balance ? (\n i18n.str`Unknown`\n ) : (\n <span class=\"amount\">\n <RenderAmount\n value={balance}\n negative={balanceIsDebit}\n spec={config.currency_specification}\n />\n </span>\n )}\n </td>\n <td class=\"relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-0\">\n <a\n name={`update password ${item.username}`}\n href={routeUpdatePasswordAccount.url({\n account: item.username,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n <i18n.Translate>Change password</i18n.Translate>\n </a>\n <br />\n {/* {config.allow_conversion ?\n <Fragment>\n\n <a\n name={`show cashout ${item.username}`}\n href={routeShowCashoutsAccount.url({\n account: item.username,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n <i18n.Translate>Cashouts</i18n.Translate>\n </a>\n <br />\n </Fragment>\n : undefined} */}\n {noBalance ? (\n <a\n name={`remove account ${item.username}`}\n href={routeRemoveAccount.url({\n account: item.username,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n <i18n.Translate>Remove</i18n.Translate>\n </a>\n ) : undefined}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n )}\n </div>\n <nav\n class=\"flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 rounded-lg\"\n aria-label=\"Pagination\"\n >\n <div class=\"flex flex-1 justify-between sm:justify-end\">\n <button\n name=\"first page\"\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onGoStart}\n onClick={onGoStart}\n >\n <i18n.Translate>First page</i18n.Translate>\n </button>\n <button\n name=\"next page\"\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 ml-3 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onGoNext}\n onClick={onGoNext}\n >\n <i18n.Translate>Next</i18n.Translate>\n </button>\n </div>\n </nav>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerCorebankApi,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { AccountForm } from \"./AccountForm.js\";\n\nexport function CreateNewAccount({\n routeCancel,\n onCreateSuccess,\n}: {\n routeCancel: RouteDefinition;\n onCreateSuccess: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const [submitAccount, setSubmitAccount] = useState<\n TalerCorebankApi.RegisterAccountRequest | undefined\n >();\n const [notification, notify, handleError] = useLocalNotification();\n\n async function doCreate() {\n if (!submitAccount || !token) return;\n await handleError(async () => {\n const resp = await api.createAccount(token, submitAccount);\n if (resp.type === \"ok\") {\n notifyInfo(\n i18n.str`Account created with password \"${submitAccount.password}\".`,\n );\n onCreateSuccess();\n } else {\n switch (resp.case) {\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`Server replied that phone or email is invalid`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`The rights to perform the operation are not sufficient`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return notify({\n type: \"error\",\n title: i18n.str`Account username is already taken`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return notify({\n type: \"error\",\n title: i18n.str`Account id is already taken`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`Bank ran out of bonus credit.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return notify({\n type: \"error\",\n title: i18n.str`Account username can't be used because is reserved`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return notify({\n type: \"error\",\n title: i18n.str`Only admin is allow to set debt limit.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return notify({\n type: \"error\",\n title: i18n.str`No information for the selected authentication channel.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return notify({\n type: \"error\",\n title: i18n.str`Authentication channel is not supported.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return notify({\n type: \"error\",\n title: i18n.str`Only admin can create accounts with second factor authentication.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n if (!(credentials.status === \"loggedIn\" && credentials.isUserAdministrator)) {\n return (\n <Fragment>\n <Attention type=\"warning\" title={i18n.str`Can't create accounts`}>\n <i18n.Translate>\n Only system admin can create accounts.\n </i18n.Translate>\n </Attention>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeCancel.url({})}\n name=\"close\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </Fragment>\n );\n }\n\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>New bank account</i18n.Translate>\n </h2>\n </div>\n <AccountForm\n template={undefined}\n purpose=\"create\"\n onChange={(a) => {\n setSubmitAccount(a);\n }}\n >\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeCancel.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"create\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!submitAccount}\n onClick={(e) => {\n e.preventDefault();\n doCreate();\n }}\n >\n <i18n.Translate>Create</i18n.Translate>\n </button>\n </div>\n </AccountForm>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n AmountString,\n TalerCoreBankHttpClient,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { getTimeframesForDate } from \"./AdminHome.js\";\n\ninterface Props {\n routeCancel: RouteDefinition;\n}\n\ntype Options = {\n dayMetric: boolean;\n hourMetric: boolean;\n monthMetric: boolean;\n yearMetric: boolean;\n compareWithPrevious: boolean;\n endOnFirstFail: boolean;\n includeHeader: boolean;\n};\n\n/**\n * Show histories of public accounts.\n */\nexport function DownloadStats({ routeCancel }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const { state: credentials } = useSessionState();\n const creds =\n credentials.status !== \"loggedIn\" || !credentials.isUserAdministrator\n ? undefined\n : credentials;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const [options, setOptions] = useState<Options>({\n compareWithPrevious: true,\n dayMetric: true,\n endOnFirstFail: false,\n hourMetric: true,\n includeHeader: true,\n monthMetric: true,\n yearMetric: true,\n });\n const [lastStep, setLastStep] = useState<{ step: number; total: number }>();\n const [downloaded, setDownloaded] = useState<string>();\n const referenceDates = [new Date()];\n const [notification, , handleError] = useLocalNotification();\n\n if (!creds) {\n return <div>only admin can download stats</div>;\n }\n\n return (\n <div>\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Download bank stats</i18n.Translate>\n </h2>\n </div>\n\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include hour metric</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`hour switch`}\n data-enabled={options.hourMetric}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n hourMetric: !options.hourMetric,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.hourMetric}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include day metric</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`day switch`}\n data-enabled={!!options.dayMetric}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({ ...options, dayMetric: !options.dayMetric });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.dayMetric}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include month metric</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`month switch`}\n data-enabled={!!options.monthMetric}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n monthMetric: !options.monthMetric,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.monthMetric}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include year metric</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`year switch`}\n data-enabled={!!options.yearMetric}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n yearMetric: !options.yearMetric,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.yearMetric}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include table header</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`header switch`}\n data-enabled={!!options.includeHeader}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n includeHeader: !options.includeHeader,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.includeHeader}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>\n Add previous metric for compare\n </i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`compare switch`}\n data-enabled={!!options.compareWithPrevious}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n compareWithPrevious: !options.compareWithPrevious,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.compareWithPrevious}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Fail on first error</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`fail switch`}\n data-enabled={!!options.endOnFirstFail}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n endOnFirstFail: !options.endOnFirstFail,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.endOnFirstFail}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n name=\"cancel\"\n href={routeCancel.url({})}\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"download\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={lastStep !== undefined}\n onClick={async () => {\n setDownloaded(undefined);\n await handleError(async () => {\n const csv = await fetchAllStatus(\n api,\n creds.token,\n options,\n referenceDates,\n (step, total) => {\n setLastStep({ step, total });\n },\n );\n setDownloaded(csv);\n });\n setLastStep(undefined);\n }}\n >\n <i18n.Translate>Download</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n {!lastStep || lastStep.step === lastStep.total ? (\n <div class=\"h-5 mb-5\" />\n ) : (\n <div>\n <div class=\"relative mb-5 h-5 rounded-full bg-gray-200\">\n <div\n class=\"h-full animate-pulse rounded-full bg-blue-500\"\n style={{\n width: `${Math.round((lastStep.step / lastStep.total) * 100)}%`,\n }}\n >\n <span class=\"absolute inset-0 flex items-center justify-center text-xs font-semibold text-white\">\n <i18n.Translate>\n downloading...{\" \"}\n {Math.round((lastStep.step / lastStep.total) * 100)}\n </i18n.Translate>\n </span>\n </div>\n </div>\n </div>\n )}\n {!downloaded ? (\n <div class=\"h-5 mb-5\" />\n ) : (\n <a\n href={\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(downloaded)\n }\n name=\"save file\"\n download={\"bank-stats.csv\"}\n >\n <Attention title={i18n.str`Download completed`}>\n <i18n.Translate>\n Click here to save the file in your computer.\n </i18n.Translate>\n </Attention>\n </a>\n )}\n </div>\n );\n}\n\nasync function fetchAllStatus(\n api: TalerCoreBankHttpClient,\n token: AccessToken,\n options: Options,\n references: Date[],\n progress: (current: number, total: number) => void,\n): Promise<string> {\n const allMetrics: TalerCorebankApi.MonitorTimeframeParam[] = [];\n if (options.hourMetric) {\n allMetrics.push(TalerCorebankApi.MonitorTimeframeParam.hour);\n }\n if (options.dayMetric) {\n allMetrics.push(TalerCorebankApi.MonitorTimeframeParam.day);\n }\n if (options.monthMetric) {\n allMetrics.push(TalerCorebankApi.MonitorTimeframeParam.month);\n }\n if (options.yearMetric) {\n allMetrics.push(TalerCorebankApi.MonitorTimeframeParam.year);\n }\n\n /**\n * convert request into frames\n */\n const allFrames = allMetrics.flatMap((timeframe) =>\n references.map((reference) => ({\n reference,\n timeframe,\n moment: getTimeframesForDate(reference, timeframe),\n })),\n );\n const total = allFrames.length;\n\n /**\n * call API for info\n */\n const allInfo = await allFrames.reduce(\n async (prev, frame, index) => {\n const accumulatedMap = await prev;\n progress(index, total);\n // await delay()\n const previous = options.compareWithPrevious\n ? await api.getMonitor(token, {\n timeframe: frame.timeframe,\n date: frame.moment.previous,\n })\n : undefined;\n\n if (previous && previous.type === \"fail\" && options.endOnFirstFail) {\n throw TalerError.fromUncheckedDetail(previous.detail);\n }\n\n const current = await api.getMonitor(token, {\n timeframe: frame.timeframe,\n date: frame.moment.current,\n });\n\n if (current.type === \"fail\" && options.endOnFirstFail) {\n throw TalerError.fromUncheckedDetail(current.detail);\n }\n\n const metricName =\n TalerCorebankApi.MonitorTimeframeParam[allMetrics[index]];\n accumulatedMap[metricName] = {\n reference: frame.reference,\n current: current.type !== \"ok\" ? undefined : current.body,\n previous:\n !previous || previous.type !== \"ok\" ? undefined : previous.body,\n };\n return accumulatedMap;\n },\n Promise.resolve({} as Record<string, Data>),\n );\n progress(total, total);\n\n /**\n * convert into table format\n *\n */\n const table: Array<string[]> = [];\n if (options.includeHeader) {\n table.push([\n \"date\",\n \"metric\",\n \"reference\",\n \"talerInCount\",\n \"talerInVolume\",\n \"talerOutCount\",\n \"talerOutVolume\",\n \"cashinCount\",\n \"cashinFiatVolume\",\n \"cashinRegionalVolume\",\n \"cashoutCount\",\n \"cashoutFiatVolume\",\n \"cashoutRegionalVolume\",\n ]);\n }\n Object.entries(allInfo).forEach(([name, data]) => {\n if (data.current) {\n const row: TableRow = {\n date: data.reference.getTime(),\n metric: name,\n reference: \"current\",\n ...dataToRow(data.current),\n };\n table.push(Object.values(row) as string[]);\n }\n\n if (data.previous) {\n const row: TableRow = {\n date: data.reference.getTime(),\n metric: name,\n reference: \"previous\",\n ...dataToRow(data.previous),\n };\n table.push(Object.values(row) as string[]);\n }\n });\n\n const csv = table.reduce((acc, row) => {\n return acc + row.join(\",\") + \"\\n\";\n }, \"\");\n\n return csv;\n}\n\ntype JustData = Omit<Omit<Omit<TableRow, \"metric\">, \"date\">, \"reference\">;\nfunction dataToRow(info: TalerCorebankApi.MonitorResponse): JustData {\n return {\n talerInCount: info.talerInCount,\n talerInVolume: info.talerInVolume,\n talerOutCount: info.talerOutCount,\n talerOutVolume: info.talerOutVolume,\n cashinCount: info.type === \"no-conversions\" ? undefined : info.cashinCount,\n cashinFiatVolume:\n info.type === \"no-conversions\" ? undefined : info.cashinFiatVolume,\n cashinRegionalVolume:\n info.type === \"no-conversions\" ? undefined : info.cashinRegionalVolume,\n cashoutCount:\n info.type === \"no-conversions\" ? undefined : info.cashoutCount,\n cashoutFiatVolume:\n info.type === \"no-conversions\" ? undefined : info.cashoutFiatVolume,\n cashoutRegionalVolume:\n info.type === \"no-conversions\" ? undefined : info.cashoutRegionalVolume,\n };\n}\n\ntype Data = {\n reference: Date;\n previous: TalerCorebankApi.MonitorResponse | undefined;\n current: TalerCorebankApi.MonitorResponse | undefined;\n};\ntype TableRow = {\n date: number;\n metric: string;\n reference: \"current\" | \"previous\";\n cashinCount?: number;\n cashinRegionalVolume?: AmountString;\n cashinFiatVolume?: AmountString;\n cashoutCount?: number;\n cashoutRegionalVolume?: AmountString;\n cashoutFiatVolume?: AmountString;\n talerInCount: number;\n talerInVolume: AmountString;\n talerOutCount: number;\n talerOutVolume: AmountString;\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useAccountDetails } from \"../../hooks/account.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { undefinedIfEmpty } from \"../../utils.js\";\nimport { LoginForm } from \"../LoginForm.js\";\nimport { doAutoFocus } from \"../PaytoWireTransferForm.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport function RemoveAccount({\n account,\n routeCancel,\n onUpdateSuccess,\n onAuthorizationRequired,\n focus,\n routeHere,\n}: {\n focus?: boolean;\n routeHere: RouteDefinition<{ account: string }>;\n onAuthorizationRequired: () => void;\n routeCancel: RouteDefinition;\n onUpdateSuccess: () => void;\n account: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n const result = useAccountDetails(account);\n const [accountName, setAccountName] = useState<string | undefined>();\n\n const { state } = useSessionState();\n const token = state.status !== \"loggedIn\" ? undefined : state.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const [notification, notify, handleError] = useLocalNotification();\n const [, updateBankState] = useBankState();\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n return <LoginForm currentUser={account} />;\n case HttpStatusCode.NotFound:\n return <LoginForm currentUser={account} />;\n default:\n assertUnreachable(result);\n }\n }\n\n const balance = Amounts.parse(result.body.balance.amount);\n if (!balance) {\n return <div>there was an error reading the balance</div>;\n }\n const isBalanceEmpty = Amounts.isZero(balance);\n if (!isBalanceEmpty) {\n return (\n <Fragment>\n <Attention type=\"warning\" title={i18n.str`Can't delete the account`}>\n <i18n.Translate>\n The account can't be delete while still holding some balance. First\n make sure that the owner make a complete cashout.\n </i18n.Translate>\n </Attention>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeCancel.url({})}\n name=\"close\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </Fragment>\n );\n }\n\n async function doRemove() {\n if (!token) return;\n await handleError(async () => {\n const resp = await api.deleteAccount({ username: account, token });\n if (resp.type === \"ok\") {\n notifyInfo(i18n.str`Account removed`);\n onUpdateSuccess();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`No enough permission to delete the account.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The username was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return notify({\n type: \"error\",\n title: i18n.str`Can't delete a reserved username.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return notify({\n type: \"error\",\n title: i18n.str`Can't delete an account with balance different than zero.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"delete-account\",\n id: String(resp.body.challenge_id),\n sent: AbsoluteTime.never(),\n location: routeHere.url({ account }),\n request: account,\n });\n return onAuthorizationRequired();\n }\n default: {\n assertUnreachable(resp);\n }\n }\n }\n });\n }\n\n const errors = undefinedIfEmpty({\n accountName: !accountName\n ? i18n.str`Required`\n : account !== accountName\n ? i18n.str`Name doesn't match`\n : undefined,\n });\n\n return (\n <div>\n <LocalNotificationBanner notification={notification} />\n\n <Attention\n type=\"warning\"\n title={i18n.str`You are going to remove the account`}\n >\n <i18n.Translate>This step can't be undone.</i18n.Translate>\n </Attention>\n\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Deleting account \"{account}\"</i18n.Translate>\n </h2>\n </div>\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"password\"\n >\n {i18n.str`Verification`}\n </label>\n <div class=\"mt-2\">\n <input\n ref={focus ? doAutoFocus : undefined}\n type=\"text\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"password\"\n id=\"password\"\n data-error={\n !!errors?.accountName && accountName !== undefined\n }\n value={accountName ?? \"\"}\n onChange={(e) => {\n setAccountName(e.currentTarget.value);\n }}\n placeholder={account}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.accountName}\n isDirty={accountName !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Enter the account name that is going to be deleted\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeCancel.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"delete\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-red-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\"\n disabled={!!errors}\n onClick={(e) => {\n e.preventDefault();\n doRemove();\n }}\n >\n <i18n.Translate>Delete</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n HttpStatusCode,\n TalerBankConversionApi,\n TalerError,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n InternationalizationAPI,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n useLocalNotification,\n useTranslationContext,\n utils,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport {\n TransferCalculation,\n useCashinEstimator,\n useCashoutEstimator,\n useConversionInfo,\n} from \"../../hooks/regional.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../../utils.js\";\nimport { InputAmount, RenderAmount } from \"../PaytoWireTransferForm.js\";\nimport { ProfileNavigation } from \"../ProfileNavigation.js\";\nimport {\n FormErrors,\n FormStatus,\n FormValues,\n RecursivePartial,\n UIField,\n useFormState,\n} from \"../../hooks/form.js\";\n\ninterface Props {\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n routeCancel: RouteDefinition;\n onUpdateSuccess: () => void;\n}\n\ntype FormType = {\n amount: AmountJson;\n conv: TalerBankConversionApi.ConversionRate;\n};\n\nfunction useComponentState({\n routeCancel,\n routeConversionConfig,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeMyAccountPassword,\n}: Props): utils.RecursiveState<VNode> {\n const { i18n } = useTranslationContext();\n\n const result = useConversionInfo();\n const info =\n result && !(result instanceof TalerError) && result.type === \"ok\"\n ? result.body\n : undefined;\n\n const { state: credentials } = useSessionState();\n const creds =\n credentials.status !== \"loggedIn\" || !credentials.isUserAdministrator\n ? undefined\n : credentials;\n\n if (!info) {\n return <i18n.Translate>loading...</i18n.Translate>;\n }\n\n if (!creds) {\n return <i18n.Translate>only admin can setup conversion</i18n.Translate>;\n }\n\n return function afterComponentLoads() {\n const { i18n } = useTranslationContext();\n\n const {\n lib: { conversion },\n } = useBankCoreApiContext();\n\n const [notification, notify, handleError] = useLocalNotification();\n\n const initalState: FormValues<FormType> = {\n amount: \"100\",\n conv: {\n cashin_min_amount: info.conversion_rate.cashin_min_amount.split(\":\")[1],\n cashin_tiny_amount:\n info.conversion_rate.cashin_tiny_amount.split(\":\")[1],\n cashin_fee: info.conversion_rate.cashin_fee.split(\":\")[1],\n cashin_ratio: info.conversion_rate.cashin_ratio,\n cashin_rounding_mode: info.conversion_rate.cashin_rounding_mode,\n cashout_min_amount:\n info.conversion_rate.cashout_min_amount.split(\":\")[1],\n cashout_tiny_amount:\n info.conversion_rate.cashout_tiny_amount.split(\":\")[1],\n cashout_fee: info.conversion_rate.cashout_fee.split(\":\")[1],\n cashout_ratio: info.conversion_rate.cashout_ratio,\n cashout_rounding_mode: info.conversion_rate.cashout_rounding_mode,\n },\n };\n\n const [form, status] = useFormState<FormType>(\n initalState,\n createFormValidator(i18n, info.regional_currency, info.fiat_currency),\n );\n\n const { estimateByDebit: calculateCashoutFromDebit } =\n useCashoutEstimator();\n\n const { estimateByDebit: calculateCashinFromDebit } = useCashinEstimator();\n\n const [calculationResult, setCalc] = useState<{\n cashin: TransferCalculation;\n cashout: TransferCalculation;\n }>();\n\n useEffect(() => {\n async function doAsync() {\n await handleError(async () => {\n if (!info) return;\n if (!form.amount?.value || form.amount.error) return;\n const in_amount = Amounts.parseOrThrow(\n `${info.fiat_currency}:${form.amount.value}`,\n );\n const in_fee = Amounts.parseOrThrow(info.conversion_rate.cashin_fee);\n const cashin = await calculateCashinFromDebit(in_amount, in_fee);\n\n if (cashin === \"amount-is-too-small\") {\n setCalc(undefined);\n return;\n }\n // const out_amount = Amounts.parseOrThrow(`${info.regional_currency}:${form.amount.value}`)\n const out_fee = Amounts.parseOrThrow(\n info.conversion_rate.cashout_fee,\n );\n const cashout = await calculateCashoutFromDebit(\n cashin.credit,\n out_fee,\n );\n\n setCalc({ cashin, cashout });\n });\n }\n doAsync();\n }, [\n form.amount?.value,\n form.conv?.cashin_fee?.value,\n form.conv?.cashout_fee?.value,\n ]);\n\n const [section, setSection] = useState<\"detail\" | \"cashout\" | \"cashin\">(\n \"detail\",\n );\n const cashinCalc =\n calculationResult?.cashin === \"amount-is-too-small\"\n ? undefined\n : calculationResult?.cashin;\n const cashoutCalc =\n calculationResult?.cashout === \"amount-is-too-small\"\n ? undefined\n : calculationResult?.cashout;\n async function doUpdate() {\n if (!creds) return;\n await handleError(async () => {\n if (status.status === \"fail\") return;\n const resp = await conversion.updateConversionRate(\n creds.token,\n status.result.conv,\n );\n if (resp.type === \"ok\") {\n setSection(\"detail\");\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized: {\n return notify({\n type: \"error\",\n title: i18n.str`Wrong credentials`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n case HttpStatusCode.NotImplemented: {\n return notify({\n type: \"error\",\n title: i18n.str`Conversion is disabled`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n const in_ratio = Number.parseFloat(info.conversion_rate.cashin_ratio);\n const out_ratio = Number.parseFloat(info.conversion_rate.cashout_ratio);\n\n const both_high = in_ratio > 1 && out_ratio > 1;\n const both_low = in_ratio < 1 && out_ratio < 1;\n\n return (\n <div>\n <ProfileNavigation\n current=\"conversion\"\n routeMyAccountCashout={routeMyAccountCashout}\n routeMyAccountDelete={routeMyAccountDelete}\n routeMyAccountDetails={routeMyAccountDetails}\n routeMyAccountPassword={routeMyAccountPassword}\n routeConversionConfig={routeConversionConfig}\n />\n\n <LocalNotificationBanner notification={notification} />\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Conversion</i18n.Translate>\n </h2>\n <div class=\"px-2 mt-2 grid grid-cols-1 gap-y-4 sm:gap-x-4\">\n <label\n data-enabled={section === \"detail\"}\n class=\"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none border-gray-300 data-[enabled=true]:border-indigo-600 data-[enabled=true]:ring-2 data-[enabled=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Newsletter\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-0-label\"\n aria-describedby=\"project-type-0-description-0 project-type-0-description-1\"\n onChange={() => {\n setSection(\"detail\");\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Details</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n\n <label\n data-enabled={section === \"cashout\"}\n class=\"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none border-gray-300 -- data-[enabled=true]:border-indigo-600 data-[enabled=true]:ring-2 data-[enabled=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-1-label\"\n aria-describedby=\"project-type-1-description-0 project-type-1-description-1\"\n onChange={() => {\n setSection(\"cashout\");\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Config cashout</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n <label\n data-enabled={section === \"cashin\"}\n class=\"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none border-gray-300 -- data-[enabled=true]:border-indigo-600 data-[enabled=true]:ring-2 data-[enabled=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-1-label\"\n aria-describedby=\"project-type-1-description-0 project-type-1-description-1\"\n onChange={() => {\n setSection(\"cashin\");\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Config cashin</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n </div>\n </div>\n\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n {section == \"cashin\" && (\n <ConversionForm\n id=\"cashin\"\n inputCurrency={info.fiat_currency}\n outputCurrency={info.regional_currency}\n fee={form?.conv?.cashin_fee}\n minimum={form?.conv?.cashin_min_amount}\n ratio={form?.conv?.cashin_ratio}\n rounding={form?.conv?.cashin_rounding_mode}\n tiny={form?.conv?.cashin_tiny_amount}\n />\n )}\n\n {section == \"cashout\" && (\n <Fragment>\n <ConversionForm\n id=\"cashout\"\n inputCurrency={info.regional_currency}\n outputCurrency={info.fiat_currency}\n fee={form?.conv?.cashout_fee}\n minimum={form?.conv?.cashout_min_amount}\n ratio={form?.conv?.cashout_ratio}\n rounding={form?.conv?.cashout_rounding_mode}\n tiny={form?.conv?.cashout_tiny_amount}\n />\n </Fragment>\n )}\n\n {section == \"detail\" && (\n <Fragment>\n <div class=\"px-6 pt-6\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Cashin ratio</i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n {info.conversion_rate.cashin_ratio}\n </dd>\n </div>\n </div>\n\n <div class=\"px-6 pt-6\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Cashout ratio</i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n {info.conversion_rate.cashout_ratio}\n </dd>\n </div>\n </div>\n\n {both_low || both_high ? (\n <div class=\"p-4\">\n <Attention title={i18n.str`Bad ratios`} type=\"warning\">\n <i18n.Translate>\n One of the ratios should be higher or equal than 1 an\n the other should be lower or equal than 1.\n </i18n.Translate>\n </Attention>\n </div>\n ) : undefined}\n\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n for=\"amount\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Initial amount`}</label>\n <InputAmount\n name=\"amount\"\n left\n currency={info.fiat_currency}\n value={form.amount?.value ?? \"\"}\n onChange={form.amount?.onUpdate}\n />\n <ShowInputErrorLabel\n message={form.amount?.error}\n isDirty={form.amount?.value !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Use it to test how the conversion will affect the\n amount.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n\n {!cashoutCalc || !cashinCalc ? undefined : (\n <div class=\"px-6 pt-6\">\n <div class=\"sm:col-span-5\">\n <dl class=\"mt-4 space-y-4\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>\n Sending to this bank\n </i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={cashinCalc.debit}\n negative\n withColor\n spec={info.regional_currency_specification}\n />\n </dd>\n </div>\n\n {Amounts.isZero(cashinCalc.beforeFee) ? undefined : (\n <div class=\"flex items-center justify-between afu \">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Converted</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={cashinCalc.beforeFee}\n spec={info.fiat_currency_specification}\n />\n </dd>\n </div>\n )}\n <div class=\"flex justify-between items-center border-t-2 afu pt-4\">\n <dt class=\"text-lg text-gray-900 font-medium\">\n <i18n.Translate>Cashin after fee</i18n.Translate>\n </dt>\n <dd class=\"text-lg text-gray-900 font-medium\">\n <RenderAmount\n value={cashinCalc.credit}\n withColor\n spec={info.fiat_currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n\n <div class=\"sm:col-span-5\">\n <dl class=\"mt-4 space-y-4\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>\n Sending from this bank\n </i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={cashoutCalc.debit}\n negative\n withColor\n spec={info.fiat_currency_specification}\n />\n </dd>\n </div>\n\n {Amounts.isZero(cashoutCalc.beforeFee) ? undefined : (\n <div class=\"flex items-center justify-between afu\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Converted</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={cashoutCalc.beforeFee}\n spec={info.regional_currency_specification}\n />\n </dd>\n </div>\n )}\n <div class=\"flex justify-between items-center border-t-2 afu pt-4\">\n <dt class=\"text-lg text-gray-900 font-medium\">\n <i18n.Translate>Cashout after fee</i18n.Translate>\n </dt>\n <dd class=\"text-lg text-gray-900 font-medium\">\n <RenderAmount\n value={cashoutCalc.credit}\n withColor\n spec={info.regional_currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n\n {cashoutCalc &&\n status.status === \"ok\" &&\n Amounts.cmp(status.result.amount, cashoutCalc.credit) <\n 0 ? (\n <div class=\"p-4\">\n <Attention\n title={i18n.str`Bad configuration`}\n type=\"warning\"\n >\n <i18n.Translate>\n This configuration allows users to cash out more of\n what has been cashed in.\n </i18n.Translate>\n </Attention>\n </div>\n ) : undefined}\n </div>\n )}\n </Fragment>\n )}\n\n <div class=\"flex items-center justify-between mt-4 gap-x-6 border-t border-gray-900/10 px-4 py-4\">\n <a\n name=\"cancel\"\n href={routeCancel.url({})}\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n {section == \"cashin\" || section == \"cashout\" ? (\n <Fragment>\n <button\n type=\"submit\"\n name=\"update conversion\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n onClick={async () => {\n doUpdate();\n }}\n >\n <i18n.Translate>Update</i18n.Translate>\n </button>\n </Fragment>\n ) : (\n <div />\n )}\n </div>\n </form>\n </div>\n </div>\n );\n };\n}\n\nexport const ConversionConfig = utils.recursive(useComponentState);\n\n/**\n *\n * @param i18n\n * @param regional\n * @param fiat\n * @returns form validator\n */\nfunction createFormValidator(\n i18n: InternationalizationAPI,\n regional: string,\n fiat: string,\n) {\n return function check(state: FormValues<FormType>): FormStatus<FormType> {\n const cashin_min_amount = Amounts.parse(\n `${fiat}:${state.conv.cashin_min_amount}`,\n );\n const cashin_tiny_amount = Amounts.parse(\n `${regional}:${state.conv.cashin_tiny_amount}`,\n );\n const cashin_fee = Amounts.parse(`${regional}:${state.conv.cashin_fee}`);\n\n const cashout_min_amount = Amounts.parse(\n `${regional}:${state.conv.cashout_min_amount}`,\n );\n const cashout_tiny_amount = Amounts.parse(\n `${fiat}:${state.conv.cashout_tiny_amount}`,\n );\n const cashout_fee = Amounts.parse(`${fiat}:${state.conv.cashout_fee}`);\n\n const am = Amounts.parse(`${fiat}:${state.amount}`);\n\n const cashin_ratio = Number.parseFloat(state.conv.cashin_ratio ?? \"\");\n const cashout_ratio = Number.parseFloat(state.conv.cashout_ratio ?? \"\");\n\n const errors = undefinedIfEmpty<FormErrors<FormType>>({\n conv: undefinedIfEmpty<FormErrors<FormType[\"conv\"]>>({\n cashin_min_amount: !state.conv.cashin_min_amount\n ? i18n.str`required`\n : !cashin_min_amount\n ? i18n.str`invalid`\n : undefined,\n cashin_tiny_amount: !state.conv.cashin_tiny_amount\n ? i18n.str`required`\n : !cashin_tiny_amount\n ? i18n.str`invalid`\n : undefined,\n cashin_fee: !state.conv.cashin_fee\n ? i18n.str`required`\n : !cashin_fee\n ? i18n.str`invalid`\n : undefined,\n\n cashout_min_amount: !state.conv.cashout_min_amount\n ? i18n.str`required`\n : !cashout_min_amount\n ? i18n.str`invalid`\n : undefined,\n cashout_tiny_amount: !state.conv.cashin_tiny_amount\n ? i18n.str`required`\n : !cashout_tiny_amount\n ? i18n.str`invalid`\n : undefined,\n cashout_fee: !state.conv.cashin_fee\n ? i18n.str`required`\n : !cashout_fee\n ? i18n.str`invalid`\n : undefined,\n\n cashin_rounding_mode: !state.conv.cashin_rounding_mode\n ? i18n.str`required`\n : undefined,\n cashout_rounding_mode: !state.conv.cashout_rounding_mode\n ? i18n.str`required`\n : undefined,\n\n cashin_ratio: !state.conv.cashin_ratio\n ? i18n.str`required`\n : Number.isNaN(cashin_ratio)\n ? i18n.str`invalid`\n : undefined,\n cashout_ratio: !state.conv.cashout_ratio\n ? i18n.str`required`\n : Number.isNaN(cashout_ratio)\n ? i18n.str`invalid`\n : undefined,\n }),\n\n amount: !state.amount\n ? i18n.str`required`\n : !am\n ? i18n.str`invalid`\n : undefined,\n });\n\n const result: RecursivePartial<FormType> = {\n amount: am,\n conv: {\n cashin_fee: !errors?.conv?.cashin_fee\n ? Amounts.stringify(cashin_fee!)\n : undefined,\n cashin_min_amount: !errors?.conv?.cashin_min_amount\n ? Amounts.stringify(cashin_min_amount!)\n : undefined,\n cashin_ratio: !errors?.conv?.cashin_ratio\n ? String(cashin_ratio!)\n : undefined,\n cashin_rounding_mode: !errors?.conv?.cashin_rounding_mode\n ? state.conv.cashin_rounding_mode!\n : undefined,\n cashin_tiny_amount: !errors?.conv?.cashin_tiny_amount\n ? Amounts.stringify(cashin_tiny_amount!)\n : undefined,\n cashout_fee: !errors?.conv?.cashout_fee\n ? Amounts.stringify(cashout_fee!)\n : undefined,\n cashout_min_amount: !errors?.conv?.cashout_min_amount\n ? Amounts.stringify(cashout_min_amount!)\n : undefined,\n cashout_ratio: !errors?.conv?.cashout_ratio\n ? String(cashout_ratio!)\n : undefined,\n cashout_rounding_mode: !errors?.conv?.cashout_rounding_mode\n ? state.conv.cashout_rounding_mode!\n : undefined,\n cashout_tiny_amount: !errors?.conv?.cashout_tiny_amount\n ? Amounts.stringify(cashout_tiny_amount!)\n : undefined,\n },\n };\n return errors === undefined\n ? { status: \"ok\", result: result as FormType, errors }\n : { status: \"fail\", result, errors };\n };\n}\n\nfunction ConversionForm({\n id,\n inputCurrency,\n outputCurrency,\n fee,\n minimum,\n ratio,\n rounding,\n tiny,\n}: {\n inputCurrency: string;\n outputCurrency: string;\n minimum: UIField | undefined;\n tiny: UIField | undefined;\n fee: UIField | undefined;\n rounding: UIField | undefined;\n ratio: UIField | undefined;\n id: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n return (\n <Fragment>\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n for={`${id}_min_amount`}\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Minimum amount`}</label>\n <InputAmount\n name={`${id}_min_amount`}\n left\n currency={inputCurrency}\n value={minimum?.value ?? \"\"}\n onChange={minimum?.onUpdate}\n />\n <ShowInputErrorLabel\n message={minimum?.error}\n isDirty={minimum?.value !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Only cashout operation above this threshold will be allowed\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"px-6 pt-6\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for={`${id}_ratio`}\n >\n {i18n.str`Ratio`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"number\"\n class=\"block rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"current\"\n id={`${id}_ratio`}\n data-error={!!ratio?.error && ratio?.value !== undefined}\n value={ratio?.value ?? \"\"}\n onChange={(e) => {\n ratio?.onUpdate(e.currentTarget.value);\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={ratio?.error}\n isDirty={ratio?.value !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Conversion ratio between currencies</i18n.Translate>\n </p>\n </div>\n\n <div class=\"px-6 pt-4\">\n <Attention title={i18n.str`Example conversion`}>\n <i18n.Translate>\n 1 {inputCurrency} will be converted into {ratio?.value}{\" \"}\n {outputCurrency}\n </i18n.Translate>\n </Attention>\n </div>\n\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n for={`${id}_tiny_amount`}\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Rounding value`}</label>\n <InputAmount\n name={`${id}_tiny_amount`}\n left\n currency={outputCurrency}\n value={tiny?.value ?? \"\"}\n onChange={tiny?.onUpdate}\n />\n <ShowInputErrorLabel\n message={tiny?.error}\n isDirty={tiny?.value !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Smallest difference between two amounts after the ratio is\n applied.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for={`${id}_channel`}\n >\n {i18n.str`Rounding mode`}\n </label>\n <div class=\"mt-2 max-w-xl text-sm text-gray-500\">\n <div class=\"px-4 mt-4 grid grid-cols-1 gap-y-6\">\n <label\n onClick={(e) => {\n e.preventDefault();\n rounding?.onUpdate(\"zero\");\n }}\n data-selected={rounding?.value === \"zero\"}\n class=\"relative flex data-[disabled=false]:cursor-pointer rounded-lg border bg-white data-[disabled=true]:bg-gray-200 p-4 shadow-sm focus:outline-none border-gray-300 data-[selected=true]:ring-2 data-[selected=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"channel\"\n value=\"Newsletter\"\n class=\"sr-only\"\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900 \">\n <i18n.Translate>Zero</i18n.Translate>\n </span>\n <i18n.Translate>\n Amount will be round below to the largest possible value\n smaller than the input.\n </i18n.Translate>\n </span>\n </span>\n <svg\n data-selected={rounding?.value === \"zero\"}\n class=\"h-5 w-5 text-indigo-600 data-[selected=false]:hidden\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </label>\n\n <label\n onClick={(e) => {\n e.preventDefault();\n rounding?.onUpdate(\"up\");\n }}\n data-selected={rounding?.value === \"up\"}\n class=\"relative flex data-[disabled=false]:cursor-pointer rounded-lg border data-[disabled=true]:bg-gray-200 p-4 shadow-sm focus:outline-none border-gray-300 data-[selected=true]:ring-2 data-[selected=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"channel\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900 \">\n <i18n.Translate>Up</i18n.Translate>\n </span>\n <i18n.Translate>\n Amount will be round up to the smallest possible value\n larger than the input.\n </i18n.Translate>\n </span>\n </span>\n <svg\n data-selected={rounding?.value === \"up\"}\n class=\"h-5 w-5 text-indigo-600 data-[selected=false]:hidden\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </label>\n <label\n onClick={(e) => {\n e.preventDefault();\n rounding?.onUpdate(\"nearest\");\n }}\n data-selected={rounding?.value === \"nearest\"}\n class=\"relative flex data-[disabled=false]:cursor-pointer rounded-lg border data-[disabled=true]:bg-gray-200 p-4 shadow-sm focus:outline-none border-gray-300 data-[selected=true]:ring-2 data-[selected=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"channel\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900 \">\n <i18n.Translate>Nearest</i18n.Translate>\n </span>\n <i18n.Translate>\n Amount will be round to the closest possible value.\n </i18n.Translate>\n </span>\n </span>\n <svg\n data-selected={rounding?.value === \"nearest\"}\n class=\"h-5 w-5 text-indigo-600 data-[selected=false]:hidden\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"px-6 pt-4\">\n <Attention title={i18n.str`Examples`}>\n <section class=\"grid grid-cols-1 gap-y-3 text-gray-600\">\n <details class=\"group text-sm\">\n <summary class=\"flex cursor-pointer flex-row items-center justify-between \">\n <i18n.Translate>\n Rounding an amount of 1.24 with rounding value 0.1\n </i18n.Translate>\n <svg\n class=\"h-6 w-6 rotate-0 transform group-open:rotate-180\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n ></path>\n </svg>\n </summary>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n Given the rounding value of 0.1 the possible values closest to\n 1.24 are: 1.1, 1.2, 1.3, 1.4.\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"zero\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"nearest\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 mt-4\">\n <i18n.Translate>\n With the \"up\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n </details>\n <details class=\"group \">\n <summary class=\"flex cursor-pointer flex-row items-center justify-between \">\n <i18n.Translate>\n Rounding an amount of 1.26 with rounding value 0.1\n </i18n.Translate>\n <svg\n class=\"h-6 w-6 rotate-0 transform group-open:rotate-180\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n ></path>\n </svg>\n </summary>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n Given the rounding value of 0.1 the possible values closest to\n 1.24 are: 1.1, 1.2, 1.3, 1.4.\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"zero\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"nearest\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"up\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n </details>\n <details class=\"group \">\n <summary class=\"flex cursor-pointer flex-row items-center justify-between \">\n <i18n.Translate>\n Rounding an amount of 1.24 with rounding value 0.3\n </i18n.Translate>\n <svg\n class=\"h-6 w-6 rotate-0 transform group-open:rotate-180\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n ></path>\n </svg>\n </summary>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n Given the rounding value of 0.3 the possible values closest to\n 1.24 are: 0.9, 1.2, 1.5, 1.8.\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"zero\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"nearest\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"up\" mode the value will be rounded to 1.5\n </i18n.Translate>\n </p>\n </details>\n <details class=\"group \">\n <summary class=\"flex cursor-pointer flex-row items-center justify-between \">\n <i18n.Translate>\n Rounding an amount of 1.26 with rounding value 0.3\n </i18n.Translate>\n <svg\n class=\"h-6 w-6 rotate-0 transform group-open:rotate-180\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n ></path>\n </svg>\n </summary>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n Given the rounding value of 0.3 the possible values closest to\n 1.24 are: 0.9, 1.2, 1.5, 1.8.\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"zero\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"nearest\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"up\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n </details>\n </section>\n </Attention>\n </div>\n\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n for={`${id}_fee`}\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Fee`}</label>\n <InputAmount\n name={`${id}_fee`}\n left\n currency={outputCurrency}\n value={fee?.value ?? \"\"}\n onChange={fee?.onUpdate}\n />\n <ShowInputErrorLabel\n message={fee?.error}\n isDirty={fee?.value !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Amount to be deducted before amount is credited.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountJson, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { useState } from \"preact/hooks\";\n\nexport type UIField = {\n value: string | undefined;\n onUpdate: (s: string) => void;\n error: TranslatedString | undefined;\n};\n\ntype FormHandler<T> = {\n [k in keyof T]?: T[k] extends string\n ? UIField\n : T[k] extends AmountJson\n ? UIField\n : FormHandler<T[k]>;\n};\n\nexport type FormValues<T> = {\n [k in keyof T]: T[k] extends string\n ? string | undefined\n : T[k] extends AmountJson\n ? string | undefined\n : FormValues<T[k]>;\n};\n\nexport type RecursivePartial<T> = {\n [k in keyof T]?: T[k] extends string\n ? string\n : T[k] extends AmountJson\n ? AmountJson\n : RecursivePartial<T[k]>;\n};\n\nexport type FormErrors<T> = {\n [k in keyof T]?: T[k] extends string\n ? TranslatedString\n : T[k] extends AmountJson\n ? TranslatedString\n : FormErrors<T[k]>;\n};\n\nexport type FormStatus<T> =\n | {\n status: \"ok\";\n result: T;\n errors: undefined;\n }\n | {\n status: \"fail\";\n result: RecursivePartial<T>;\n errors: FormErrors<T>;\n };\n\nfunction constructFormHandler<T>(\n form: FormValues<T>,\n updateForm: (d: FormValues<T>) => void,\n errors: FormErrors<T> | undefined,\n): FormHandler<T> {\n const keys = Object.keys(form) as Array<keyof T>;\n\n const handler = keys.reduce((prev, fieldName) => {\n const currentValue: unknown = form[fieldName];\n const currentError: unknown = errors ? errors[fieldName] : undefined;\n function updater(newValue: unknown) {\n updateForm({ ...form, [fieldName]: newValue });\n }\n if (typeof currentValue === \"object\") {\n // @ts-expect-error FIXME better typing\n const group = constructFormHandler(currentValue, updater, currentError);\n // @ts-expect-error FIXME better typing\n prev[fieldName] = group;\n return prev;\n }\n const field: UIField = {\n // @ts-expect-error FIXME better typing\n error: currentError,\n // @ts-expect-error FIXME better typing\n value: currentValue,\n onUpdate: updater,\n };\n // @ts-expect-error FIXME better typing\n prev[fieldName] = field;\n return prev;\n }, {} as FormHandler<T>);\n\n return handler;\n}\n\nexport function useFormState<T>(\n defaultValue: FormValues<T>,\n check: (f: FormValues<T>) => FormStatus<T>,\n): [FormHandler<T>, FormStatus<T>] {\n const [form, updateForm] = useState<FormValues<T>>(defaultValue);\n\n const status = check(form);\n const handler = constructFormHandler(form, updateForm, status.errors);\n\n return [handler, status];\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { Time } from \"../../components/Time.js\";\nimport { useCashoutDetails, useConversionInfo } from \"../../hooks/regional.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { RenderAmount } from \"../PaytoWireTransferForm.js\";\n\ninterface Props {\n id: string;\n routeClose: RouteDefinition;\n}\nexport function ShowCashoutDetails({ id, routeClose }: Props): VNode {\n const { i18n } = useTranslationContext();\n const cid = Number.parseInt(id, 10);\n\n const result = useCashoutDetails(Number.isNaN(cid) ? undefined : cid);\n const info = useConversionInfo();\n\n if (Number.isNaN(cid)) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`Cashout id should be a number`}\n />\n );\n }\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`This cashout not found. Maybe already aborted.`}\n ></Attention>\n );\n case HttpStatusCode.NotImplemented:\n return (\n <Attention type=\"warning\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n default:\n assertUnreachable(result);\n }\n }\n if (!info) {\n return <Loading />;\n }\n\n if (info instanceof TalerError) {\n return <ErrorLoadingWithDebug error={info} />;\n }\n if (info.type === \"fail\") {\n switch (info.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(info.case);\n }\n }\n\n const { fiat_currency_specification, regional_currency_specification } =\n info.body;\n\n return (\n <div>\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <section class=\"rounded-sm px-4\">\n <h2 id=\"summary-heading\" class=\"font-medium text-lg\">\n <i18n.Translate>Cashout detail</i18n.Translate>\n </h2>\n <dl class=\"mt-8 space-y-4\">\n <div class=\"justify-between items-center flex\">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Subject</i18n.Translate>\n </dt>\n <dd class=\"text-sm \">{result.body.subject}</dd>\n </div>\n </dl>\n </section>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\">\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <dl class=\"space-y-4\">\n {result.body.creation_time.t_s !== \"never\" ? (\n <div class=\"justify-between items-center flex \">\n <dt class=\" text-gray-600\">\n <i18n.Translate>Created</i18n.Translate>\n </dt>\n <dd class=\"text-sm \">\n <Time\n format=\"dd/MM/yyyy HH:mm:ss\"\n timestamp={AbsoluteTime.fromProtocolTimestamp(\n result.body.creation_time,\n )}\n // relative={Duration.fromSpec({ days: 1 })}\n />\n </dd>\n </div>\n ) : undefined}\n\n <div class=\"flex justify-between items-center border-t-2 afu pt-4\">\n <dt class=\"text-gray-600\">\n <i18n.Translate>Debited</i18n.Translate>\n </dt>\n <dd class=\" font-medium\">\n <RenderAmount\n value={Amounts.parseOrThrow(result.body.amount_debit)}\n negative\n withColor\n spec={regional_currency_specification}\n />\n </dd>\n </div>\n\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-gray-600\">\n <span>\n <i18n.Translate>Credited</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm \">\n <RenderAmount\n value={Amounts.parseOrThrow(result.body.amount_credit)}\n withColor\n spec={fiat_currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <br />\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <a\n href={routeClose.url({})}\n name=\"close\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nexport interface StringsType {\n // X-Domain or 'messages'\n domain: string;\n lang: string;\n completeness: number;\n plural_forms: string;\n locale_data: {\n messages: Record<string, unknown>;\n };\n}\nexport const strings: Record<string, StringsType> = {};\n\nstrings[\"it\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"it\",\n },\n \"Operation failed, please report\": [\"Registrazione\"],\n \"Request timeout\": [\"\"],\n \"Request throttled\": [\"\"],\n \"Malformed response\": [\"\"],\n \"Network error\": [\"\"],\n \"Unexpected request error\": [\"\"],\n \"Unexpected error\": [\"\"],\n \"IBAN numbers usually have more that 4 digits\": [\"\"],\n \"IBAN numbers usually have less that 34 digits\": [\"\"],\n \"IBAN country code not found\": [\"\"],\n \"IBAN number is not valid, checksum is wrong\": [\"\"],\n \"Max withdrawal amount\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"Show withdrawal confirmation\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"Show demo description\": [\"\"],\n \"Show install wallet first\": [\"\"],\n \"Use fast withdrawal form\": [\"Ritira contante\"],\n \"Show debug info\": [\"\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\"\"],\n \"The operation id is invalid.\": [\"\"],\n \"The operation was not found.\": [\"Lista conti pubblici non trovata.\"],\n \"If you have a Taler wallet installed in this device\": [\"\"],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\"\"],\n \"this page\": [\"\"],\n Withdraw: [\"Prelevare\"],\n \"Or if you have the wallet in another device\": [\"\"],\n \"Scan the QR below to start the withdrawal.\": [\"Chiudi il ritiro Taler\"],\n required: [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"not valid\": [\"\"],\n \"should be greater than 0\": [\"\"],\n \"balance is not enough\": [\"\"],\n \"does not follow the pattern\": [\"\"],\n 'only \"IBAN\" target are supported': [\"\"],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n \"\",\n ],\n \"the amount is not valid\": [\"\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\"\"],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\"\"],\n \"Not enough permission to complete the operation.\": [\n \"La banca sta creando l'operazione...\",\n ],\n 'The destination account \"%1$s\" was not found.': [\n \"Lista conti pubblici non trovata.\",\n ],\n \"The origin and the destination of the transfer can't be the same.\": [\"\"],\n \"Your balance is not enough.\": [\"\"],\n 'The origin account \"%1$s\" was not found.': [\n \"Lista conti pubblici non trovata.\",\n ],\n \"Using a form\": [\"\"],\n \"Import payto:// URI\": [\"\"],\n Recipient: [\"\"],\n \"IBAN of the recipient's account\": [\"\"],\n \"Transfer subject\": [\n \"Trasferisci fondi a un altro conto di questa banca:\",\n ],\n subject: [\"Soggetto\"],\n \"some text to identify the transfer\": [\"\"],\n Amount: [\"Importo\"],\n \"amount to transfer\": [\"Somma da ritirare\"],\n \"payto URI:\": [\"\"],\n \"uniform resource identifier of the target account\": [\"\"],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\"\"],\n Cancel: [\"\"],\n Send: [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n 'Wrong credentials for \"%1$s\"': [\"Credenziali invalide.\"],\n \"Account not found\": [\"\"],\n Username: [\"\"],\n \"username of the account\": [\n \"Trasferisci fondi a un altro conto di questa banca:\",\n ],\n Password: [\"\"],\n \"password of the account\": [\"Storico dei conti pubblici\"],\n Check: [\"\"],\n \"Log in\": [\"\"],\n Register: [\"Registrati\"],\n \"Wire transfer completed!\": [\"Bonifico\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\"\"],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\"\"],\n \"Your balance is not enough for the operation.\": [\"\"],\n \"Confirm the withdrawal operation\": [\"Conferma il ritiro\"],\n \"Wire transfer details\": [\"Bonifico\"],\n \"Taler Exchange operator's account\": [\"\"],\n \"Taler Exchange operator's name\": [\"\"],\n Transfer: [\"\"],\n \"Authentication required\": [\"\"],\n \"This operation was created with other username\": [\"\"],\n \"Operation aborted\": [\"\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\"\"],\n \"You can close this page now or continue to the account page.\": [\"\"],\n Continue: [\"\"],\n \"Withdrawal confirmed\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\"\"],\n Done: [\"\"],\n \"Operation canceled\": [\"\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\"\"],\n \"The account is selected but no withdrawal identification found.\": [\"\"],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"Operation not found\": [\"\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\"\"],\n \"Cotinue to dashboard\": [\"\"],\n \"The Withdrawal URI is not valid\": [\"Questo ritiro \u00E8 stato annullato!\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\"\"],\n \"Internal error, please report.\": [\"Registrazione\"],\n Preferences: [\"\"],\n \"Welcome, %1$s\": [\"\"],\n \"Latest transactions\": [\"Ultime transazioni:\"],\n Date: [\"Data\"],\n Counterpart: [\"Controparte\"],\n Subject: [\"Soggetto\"],\n sent: [\"\"],\n received: [\"\"],\n \"invalid value\": [\"\"],\n to: [\"\"],\n from: [\"\"],\n \"First page\": [\"\"],\n Next: [\"\"],\n \"History of public accounts\": [\"Storico dei conti pubblici\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Missing name\": [\"indirizzo Payto\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\"\"],\n \"Passwords don't match\": [\"\"],\n \"Server replied with invalid phone or email.\": [\"\"],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"\",\n ],\n \"No enough permission to create that account.\": [\"\"],\n \"That account id is already taken.\": [\"\"],\n \"That username is already taken.\": [\"\"],\n \"That username can't be used because is reserved.\": [\"\"],\n \"Only admin is allow to set debt limit.\": [\"\"],\n \"No information for the selected authentication channel.\": [\"\"],\n \"Authentication channel is not supported.\": [\"\"],\n \"Only admin can create accounts with second factor authentication.\": [\"\"],\n \"Account registration\": [\"\"],\n \"Repeat password\": [\"\"],\n Name: [\"\"],\n \"Create a random temporary user\": [\"\"],\n \"Make a wire transfer\": [\"Chiudi il bonifico\"],\n \"Wire transfer created!\": [\"Bonifico\"],\n Accounts: [\"Importo\"],\n \"A list of all business account in the bank.\": [\"\"],\n \"Create account\": [\"\"],\n Balance: [\"\"],\n Actions: [\"\"],\n unknown: [\"\"],\n \"change password\": [\"\"],\n remove: [\"\"],\n \"Select a section\": [\"\"],\n \"Last hour\": [\"\"],\n \"Last day\": [\"\"],\n \"Last month\": [\"\"],\n \"Last year\": [\"\"],\n \"Last Year\": [\"\"],\n \"Trading volume on %1$s compared to %2$s\": [\"\"],\n Cashin: [\"\"],\n Cashout: [\"\"],\n Payin: [\"\"],\n Payout: [\"\"],\n \"download stats as CSV\": [\"\"],\n \"Descreased by\": [\"\"],\n \"Increased by\": [\"\"],\n \"Unable to create a cashout\": [\"\"],\n \"The bank configuration does not support cashout operations.\": [\"\"],\n invalid: [\"\"],\n \"need to be higher due to fees\": [\"\"],\n \"the total transfer at destination will be zero\": [\"\"],\n \"Cashout created\": [\"\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\"\"],\n \"The conversion rate was incorrectly applied\": [\"\"],\n \"The account does not have sufficient funds\": [\"\"],\n \"Cashouts are not supported\": [\"\"],\n \"Missing cashout URI in the profile\": [\"\"],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\"\"],\n \"Convertion rate\": [\"\"],\n Fee: [\"\"],\n \"To account\": [\"\"],\n \"No cashout account\": [\"\"],\n \"Before doing a cashout you need to complete your profile\": [\"\"],\n \"Amount to send\": [\"Somma da ritirare\"],\n \"Amount to receive\": [\"Somma da ritirare\"],\n \"Total cost\": [\"\"],\n \"Balance left\": [\"\"],\n \"Before fee\": [\"\"],\n \"Total cashout transfer\": [\"\"],\n \"No cashout channel available\": [\"\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\"\"],\n \"Second factor authentication\": [\"\"],\n Email: [\"\"],\n \"add a email in your profile to enable this option\": [\"\"],\n SMS: [\"\"],\n \"add a phone number in your profile to enable this option\": [\"\"],\n Details: [\"\"],\n Delete: [\"\"],\n Credentials: [\"Credenziali invalide.\"],\n Cashouts: [\"\"],\n \"it doesnt have the pattern of an IBAN number\": [\"\"],\n \"it doesnt have the pattern of an email\": [\"\"],\n \"should start with +\": [\"\"],\n \"phone number can't have other than numbers\": [\"\"],\n \"account identification in the bank\": [\"\"],\n \"name of the person owner the account\": [\"\"],\n \"Internal IBAN\": [\"\"],\n \"if empty a random account number will be assigned\": [\"\"],\n \"account identification for bank transfer\": [\"\"],\n Phone: [\"\"],\n \"Cashout IBAN\": [\"\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\"\"],\n \"Max debt\": [\"\"],\n \"how much is user able to transfer after zero balance\": [\"\"],\n \"Is this a Taler Exchange?\": [\"\"],\n \"This server doesn't support second factor authentication.\": [\"\"],\n \"Enable second factor authentication\": [\"\"],\n \"Using email\": [\"\"],\n \"Using SMS\": [\"\"],\n \"Is this account public?\": [\"\"],\n \"public accounts have their balance publicly accesible\": [\"\"],\n \"Account updated\": [\"\"],\n \"The rights to change the account are not sufficient\": [\"\"],\n \"The username was not found\": [\"\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\"\"],\n 'Account \"%1$s\"': [\"\"],\n \"Change details\": [\"\"],\n Update: [\"\"],\n \"password doesn't match\": [\"\"],\n \"Password changed\": [\"\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\"\"],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"\",\n ],\n \"Update password\": [\"\"],\n \"New password\": [\"\"],\n \"Type it again\": [\"\"],\n \"repeat the same password\": [\"\"],\n \"Current password\": [\"\"],\n \"your current password, for security\": [\"\"],\n Change: [\"\"],\n \"Can't delete the account\": [\"\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\"\"],\n \"Account removed\": [\"\"],\n \"No enough permission to delete the account.\": [\"\"],\n \"The username was not found.\": [\"\"],\n \"Can't delete a reserved username.\": [\"\"],\n \"Can't delete an account with balance different than zero.\": [\"\"],\n \"name doesn't match\": [\"\"],\n \"You are going to remove the account\": [\"\"],\n \"This step can't be undone.\": [\"\"],\n 'Deleting account \"%1$s\"': [\"\"],\n Verification: [\"\"],\n \"enter the account name that is going to be deleted\": [\"\"],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\"\"],\n \"Server replied that phone or email is invalid\": [\"\"],\n \"The rights to perform the operation are not sufficient\": [\"\"],\n \"Account username is already taken\": [\"\"],\n \"Account id is already taken\": [\"\"],\n \"Bank ran out of bonus credit.\": [\"\"],\n \"Account username can't be used because is reserved\": [\"\"],\n \"Can't create accounts\": [\"\"],\n \"Only system admin can create accounts.\": [\"\"],\n \"New business account\": [\"\"],\n Create: [\"\"],\n \"Cashout not supported.\": [\"\"],\n \"Account not found.\": [\"Lista conti pubblici non trovata.\"],\n \"Latest cashouts\": [\"Ultime transazioni:\"],\n Created: [\"\"],\n Confirmed: [\"Conferma\"],\n \"Total debit\": [\"\"],\n \"Total credit\": [\"\"],\n Status: [\"\"],\n never: [\"\"],\n \"Cashout for account %1$s\": [\"\"],\n \"This cashout not found. Maybe already aborted.\": [\"\"],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"\",\n ],\n \"Cashout was already confimed.\": [\"\"],\n \"Cashout operation is not supported.\": [\"\"],\n \"The cashout operation is already aborted.\": [\"\"],\n \"Missing destination account.\": [\"\"],\n \"Too many failed attempts.\": [\"\"],\n \"The code for this cashout is invalid.\": [\"\"],\n \"Cashout detail\": [\"\"],\n Debited: [\"\"],\n Credited: [\"\"],\n \"Enter the confirmation code\": [\"\"],\n Abort: [\"Annulla\"],\n Confirm: [\"Conferma\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\"\"],\n \"The operation was rejected due to insufficient funds.\": [\"\"],\n \"Do not show this again\": [\"\"],\n Close: [\"\"],\n \"On this device\": [\"\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\"\"],\n Start: [\"\"],\n \"On a mobile phone\": [\"\"],\n \"Scan the QR code with your mobile device.\": [\n \"Usa questo codice QR per ritirare contante nel tuo wallet:\",\n ],\n \"There is an operation already\": [\"\"],\n \"Complete or cancel the operation in\": [\"Conferma il ritiro\"],\n \"Server responded with an invalid withdraw URI\": [\"\"],\n \"Withdraw URI: %1$s\": [\"Prelevare\"],\n \"The operation was rejected due to insufficient funds\": [\"\"],\n \"Prepare your wallet\": [\"\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\"\"],\n \"You need a GNU Taler Wallet\": [\"Ritira contante nel portafoglio Taler\"],\n \"If you don't have one yet you can follow the instruction in\": [\"\"],\n \"Send money\": [\"\"],\n \"to a %1$s wallet\": [\"\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"\",\n ],\n \"operation ready\": [\"\"],\n \"to another bank account\": [\n \"Trasferisci fondi a un altro conto di questa banca:\",\n ],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"\",\n ],\n \"Transfer details\": [\"Effettua un bonifico\"],\n \"This is a demo bank\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\"\"],\n \"Pending account delete operation\": [\"\"],\n \"Pending account update operation\": [\"\"],\n \"Pending password update operation\": [\"\"],\n \"Pending transaction operation\": [\"\"],\n \"Pending withdrawal operation\": [\"\"],\n \"Pending cashout operation\": [\"\"],\n \"You can complete or cancel the operation in\": [\"\"],\n \"Download bank stats\": [\"\"],\n \"Include hour metric\": [\"\"],\n \"Include day metric\": [\"\"],\n \"Include month metric\": [\"\"],\n \"Include year metric\": [\"\"],\n \"Include table header\": [\"\"],\n \"Add previous metric for compare\": [\"\"],\n \"Fail on first error\": [\"\"],\n Download: [\"\"],\n \"downloading... %1$s\": [\"\"],\n \"Download completed\": [\"\"],\n \"click here to save the file in your computer\": [\"\"],\n \"Challenge not found.\": [\"\"],\n \"This user is not authorized to complete this challenge.\": [\"\"],\n \"Too many attemps, try another code.\": [\"\"],\n \"The confirmation code is wrong, try again.\": [\"\"],\n \"The operation expired.\": [\"\"],\n \"The operation failed.\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"The operation needs another confirmation to complete.\": [\"\"],\n \"Account delete\": [\"\"],\n \"Account update\": [\"\"],\n \"Password update\": [\"\"],\n \"Wire transfer\": [\"Bonifico\"],\n Withdrawal: [\"Prelevare\"],\n \"Confirm the operation\": [\"Conferma il ritiro\"],\n \"Send again\": [\"\"],\n \"Send code\": [\"\"],\n \"Operation details\": [\"\"],\n \"Challenge details\": [\"\"],\n \"Sent at\": [\"\"],\n \"To phone\": [\"\"],\n \"To email\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"it\",\n completeness: 14,\n};\n\nstrings[\"fr\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n > 1;\",\n lang: \"fr\",\n },\n \"Operation failed, please report\": [\"\"],\n \"Request timeout\": [\"\"],\n \"Request throttled\": [\"\"],\n \"Malformed response\": [\"\"],\n \"Network error\": [\"\"],\n \"Unexpected request error\": [\"\"],\n \"Unexpected error\": [\"\"],\n \"IBAN numbers usually have more that 4 digits\": [\"\"],\n \"IBAN numbers usually have less that 34 digits\": [\"\"],\n \"IBAN country code not found\": [\"\"],\n \"IBAN number is not valid, checksum is wrong\": [\"\"],\n \"Max withdrawal amount\": [\"\"],\n \"Show withdrawal confirmation\": [\"\"],\n \"Show demo description\": [\"\"],\n \"Show install wallet first\": [\"\"],\n \"Use fast withdrawal form\": [\"\"],\n \"Show debug info\": [\"\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\"\"],\n \"The operation id is invalid.\": [\"\"],\n \"The operation was not found.\": [\"\"],\n \"If you have a Taler wallet installed in this device\": [\"\"],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\"\"],\n \"this page\": [\"\"],\n Withdraw: [\"\"],\n \"Or if you have the wallet in another device\": [\"\"],\n \"Scan the QR below to start the withdrawal.\": [\"\"],\n required: [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"not valid\": [\"\"],\n \"should be greater than 0\": [\"\"],\n \"balance is not enough\": [\"\"],\n \"does not follow the pattern\": [\"\"],\n 'only \"IBAN\" target are supported': [\"\"],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n \"\",\n ],\n \"the amount is not valid\": [\"\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\"\"],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\"\"],\n \"Not enough permission to complete the operation.\": [\"\"],\n 'The destination account \"%1$s\" was not found.': [\"\"],\n \"The origin and the destination of the transfer can't be the same.\": [\"\"],\n \"Your balance is not enough.\": [\"\"],\n 'The origin account \"%1$s\" was not found.': [\"\"],\n \"Using a form\": [\"\"],\n \"Import payto:// URI\": [\"\"],\n Recipient: [\"\"],\n \"IBAN of the recipient's account\": [\"\"],\n \"Transfer subject\": [\"\"],\n subject: [\"\"],\n \"some text to identify the transfer\": [\"\"],\n Amount: [\"\"],\n \"amount to transfer\": [\"\"],\n \"payto URI:\": [\"\"],\n \"uniform resource identifier of the target account\": [\"\"],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\"\"],\n Cancel: [\"\"],\n Send: [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n 'Wrong credentials for \"%1$s\"': [\"\"],\n \"Account not found\": [\"\"],\n Username: [\"\"],\n \"username of the account\": [\"\"],\n Password: [\"\"],\n \"password of the account\": [\"\"],\n Check: [\"\"],\n \"Log in\": [\"\"],\n Register: [\"\"],\n \"Wire transfer completed!\": [\"\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\"\"],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\"\"],\n \"Your balance is not enough for the operation.\": [\"\"],\n \"Confirm the withdrawal operation\": [\"\"],\n \"Wire transfer details\": [\"\"],\n \"Taler Exchange operator's account\": [\"\"],\n \"Taler Exchange operator's name\": [\"\"],\n Transfer: [\"\"],\n \"Authentication required\": [\"\"],\n \"This operation was created with other username\": [\"\"],\n \"Operation aborted\": [\"\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\"\"],\n \"You can close this page now or continue to the account page.\": [\"\"],\n Continue: [\"\"],\n \"Withdrawal confirmed\": [\"\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\"\"],\n Done: [\"\"],\n \"Operation canceled\": [\"\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\"\"],\n \"The account is selected but no withdrawal identification found.\": [\"\"],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"Operation not found\": [\"\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\"\"],\n \"Cotinue to dashboard\": [\"\"],\n \"The Withdrawal URI is not valid\": [\"\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\"\"],\n \"Internal error, please report.\": [\"\"],\n Preferences: [\"\"],\n \"Welcome, %1$s\": [\"\"],\n \"Latest transactions\": [\"\"],\n Date: [\"\"],\n Counterpart: [\"\"],\n Subject: [\"\"],\n sent: [\"\"],\n received: [\"\"],\n \"invalid value\": [\"\"],\n to: [\"\"],\n from: [\"\"],\n \"First page\": [\"\"],\n Next: [\"\"],\n \"History of public accounts\": [\"\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Missing name\": [\"\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\"\"],\n \"Passwords don't match\": [\"\"],\n \"Server replied with invalid phone or email.\": [\"\"],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"\",\n ],\n \"No enough permission to create that account.\": [\"\"],\n \"That account id is already taken.\": [\"\"],\n \"That username is already taken.\": [\"\"],\n \"That username can't be used because is reserved.\": [\"\"],\n \"Only admin is allow to set debt limit.\": [\"\"],\n \"No information for the selected authentication channel.\": [\"\"],\n \"Authentication channel is not supported.\": [\"\"],\n \"Only admin can create accounts with second factor authentication.\": [\"\"],\n \"Account registration\": [\"\"],\n \"Repeat password\": [\"\"],\n Name: [\"\"],\n \"Create a random temporary user\": [\"\"],\n \"Make a wire transfer\": [\"\"],\n \"Wire transfer created!\": [\"\"],\n Accounts: [\"\"],\n \"A list of all business account in the bank.\": [\"\"],\n \"Create account\": [\"\"],\n Balance: [\"\"],\n Actions: [\"\"],\n unknown: [\"\"],\n \"change password\": [\"\"],\n remove: [\"\"],\n \"Select a section\": [\"\"],\n \"Last hour\": [\"\"],\n \"Last day\": [\"\"],\n \"Last month\": [\"\"],\n \"Last year\": [\"\"],\n \"Last Year\": [\"\"],\n \"Trading volume on %1$s compared to %2$s\": [\"\"],\n Cashin: [\"\"],\n Cashout: [\"\"],\n Payin: [\"\"],\n Payout: [\"\"],\n \"download stats as CSV\": [\"\"],\n \"Descreased by\": [\"\"],\n \"Increased by\": [\"\"],\n \"Unable to create a cashout\": [\"\"],\n \"The bank configuration does not support cashout operations.\": [\"\"],\n invalid: [\"\"],\n \"need to be higher due to fees\": [\"\"],\n \"the total transfer at destination will be zero\": [\"\"],\n \"Cashout created\": [\"\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\"\"],\n \"The conversion rate was incorrectly applied\": [\"\"],\n \"The account does not have sufficient funds\": [\"\"],\n \"Cashouts are not supported\": [\"\"],\n \"Missing cashout URI in the profile\": [\"\"],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\"\"],\n \"Convertion rate\": [\"\"],\n Fee: [\"\"],\n \"To account\": [\"\"],\n \"No cashout account\": [\"\"],\n \"Before doing a cashout you need to complete your profile\": [\"\"],\n \"Amount to send\": [\"\"],\n \"Amount to receive\": [\"\"],\n \"Total cost\": [\"\"],\n \"Balance left\": [\"\"],\n \"Before fee\": [\"\"],\n \"Total cashout transfer\": [\"\"],\n \"No cashout channel available\": [\"\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\"\"],\n \"Second factor authentication\": [\"\"],\n Email: [\"\"],\n \"add a email in your profile to enable this option\": [\"\"],\n SMS: [\"\"],\n \"add a phone number in your profile to enable this option\": [\"\"],\n Details: [\"\"],\n Delete: [\"\"],\n Credentials: [\"\"],\n Cashouts: [\"\"],\n \"it doesnt have the pattern of an IBAN number\": [\"\"],\n \"it doesnt have the pattern of an email\": [\"\"],\n \"should start with +\": [\"\"],\n \"phone number can't have other than numbers\": [\"\"],\n \"account identification in the bank\": [\"\"],\n \"name of the person owner the account\": [\"\"],\n \"Internal IBAN\": [\"\"],\n \"if empty a random account number will be assigned\": [\"\"],\n \"account identification for bank transfer\": [\"\"],\n Phone: [\"\"],\n \"Cashout IBAN\": [\"\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\"\"],\n \"Max debt\": [\"\"],\n \"how much is user able to transfer after zero balance\": [\"\"],\n \"Is this a Taler Exchange?\": [\"\"],\n \"This server doesn't support second factor authentication.\": [\"\"],\n \"Enable second factor authentication\": [\"\"],\n \"Using email\": [\"\"],\n \"Using SMS\": [\"\"],\n \"Is this account public?\": [\"\"],\n \"public accounts have their balance publicly accesible\": [\"\"],\n \"Account updated\": [\"\"],\n \"The rights to change the account are not sufficient\": [\"\"],\n \"The username was not found\": [\"\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\"\"],\n 'Account \"%1$s\"': [\"\"],\n \"Change details\": [\"\"],\n Update: [\"\"],\n \"password doesn't match\": [\"\"],\n \"Password changed\": [\"\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\"\"],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"\",\n ],\n \"Update password\": [\"\"],\n \"New password\": [\"\"],\n \"Type it again\": [\"\"],\n \"repeat the same password\": [\"\"],\n \"Current password\": [\"\"],\n \"your current password, for security\": [\"\"],\n Change: [\"\"],\n \"Can't delete the account\": [\"\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\"\"],\n \"Account removed\": [\"\"],\n \"No enough permission to delete the account.\": [\"\"],\n \"The username was not found.\": [\"\"],\n \"Can't delete a reserved username.\": [\"\"],\n \"Can't delete an account with balance different than zero.\": [\"\"],\n \"name doesn't match\": [\"\"],\n \"You are going to remove the account\": [\"\"],\n \"This step can't be undone.\": [\"\"],\n 'Deleting account \"%1$s\"': [\"\"],\n Verification: [\"\"],\n \"enter the account name that is going to be deleted\": [\"\"],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\"\"],\n \"Server replied that phone or email is invalid\": [\"\"],\n \"The rights to perform the operation are not sufficient\": [\"\"],\n \"Account username is already taken\": [\"\"],\n \"Account id is already taken\": [\"\"],\n \"Bank ran out of bonus credit.\": [\"\"],\n \"Account username can't be used because is reserved\": [\"\"],\n \"Can't create accounts\": [\"\"],\n \"Only system admin can create accounts.\": [\"\"],\n \"New business account\": [\"\"],\n Create: [\"\"],\n \"Cashout not supported.\": [\"\"],\n \"Account not found.\": [\"\"],\n \"Latest cashouts\": [\"\"],\n Created: [\"\"],\n Confirmed: [\"\"],\n \"Total debit\": [\"\"],\n \"Total credit\": [\"\"],\n Status: [\"\"],\n never: [\"\"],\n \"Cashout for account %1$s\": [\"\"],\n \"This cashout not found. Maybe already aborted.\": [\"\"],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"\",\n ],\n \"Cashout was already confimed.\": [\"\"],\n \"Cashout operation is not supported.\": [\"\"],\n \"The cashout operation is already aborted.\": [\"\"],\n \"Missing destination account.\": [\"\"],\n \"Too many failed attempts.\": [\"\"],\n \"The code for this cashout is invalid.\": [\"\"],\n \"Cashout detail\": [\"\"],\n Debited: [\"\"],\n Credited: [\"\"],\n \"Enter the confirmation code\": [\"\"],\n Abort: [\"\"],\n Confirm: [\"\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\"\"],\n \"The operation was rejected due to insufficient funds.\": [\"\"],\n \"Do not show this again\": [\"\"],\n Close: [\"\"],\n \"On this device\": [\"\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\"\"],\n Start: [\"\"],\n \"On a mobile phone\": [\"\"],\n \"Scan the QR code with your mobile device.\": [\"\"],\n \"There is an operation already\": [\"\"],\n \"Complete or cancel the operation in\": [\"\"],\n \"Server responded with an invalid withdraw URI\": [\"\"],\n \"Withdraw URI: %1$s\": [\"\"],\n \"The operation was rejected due to insufficient funds\": [\"\"],\n \"Prepare your wallet\": [\"\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\"\"],\n \"You need a GNU Taler Wallet\": [\"\"],\n \"If you don't have one yet you can follow the instruction in\": [\"\"],\n \"Send money\": [\"\"],\n \"to a %1$s wallet\": [\"\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"\",\n ],\n \"operation ready\": [\"\"],\n \"to another bank account\": [\"\"],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"\",\n ],\n \"Transfer details\": [\"\"],\n \"This is a demo bank\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\"\"],\n \"Pending account delete operation\": [\"\"],\n \"Pending account update operation\": [\"\"],\n \"Pending password update operation\": [\"\"],\n \"Pending transaction operation\": [\"\"],\n \"Pending withdrawal operation\": [\"\"],\n \"Pending cashout operation\": [\"\"],\n \"You can complete or cancel the operation in\": [\"\"],\n \"Download bank stats\": [\"\"],\n \"Include hour metric\": [\"\"],\n \"Include day metric\": [\"\"],\n \"Include month metric\": [\"\"],\n \"Include year metric\": [\"\"],\n \"Include table header\": [\"\"],\n \"Add previous metric for compare\": [\"\"],\n \"Fail on first error\": [\"\"],\n Download: [\"\"],\n \"downloading... %1$s\": [\"\"],\n \"Download completed\": [\"\"],\n \"click here to save the file in your computer\": [\"\"],\n \"Challenge not found.\": [\"\"],\n \"This user is not authorized to complete this challenge.\": [\"\"],\n \"Too many attemps, try another code.\": [\"\"],\n \"The confirmation code is wrong, try again.\": [\"\"],\n \"The operation expired.\": [\"\"],\n \"The operation failed.\": [\"\"],\n \"The operation needs another confirmation to complete.\": [\"\"],\n \"Account delete\": [\"\"],\n \"Account update\": [\"\"],\n \"Password update\": [\"\"],\n \"Wire transfer\": [\"\"],\n Withdrawal: [\"\"],\n \"Confirm the operation\": [\"\"],\n \"Send again\": [\"\"],\n \"Send code\": [\"\"],\n \"Operation details\": [\"\"],\n \"Challenge details\": [\"\"],\n \"Sent at\": [\"\"],\n \"To phone\": [\"\"],\n \"To email\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n > 1;\",\n lang: \"fr\",\n completeness: 0,\n};\n\nstrings[\"es\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"es\",\n },\n \"Operation failed, please report\": [\n \"La operaic\u00F3n fall\u00F3, por favor reportelo\",\n ],\n \"Request timeout\": [\"La petici\u00F3n al servidor agoto su tiempo\"],\n \"Request throttled\": [\"La petici\u00F3n al servidor interrumpida\"],\n \"Malformed response\": [\"Respuesta malformada\"],\n \"Network error\": [\"Error de conexi\u00F3n\"],\n \"Unexpected request error\": [\"Error de pedido inesperado\"],\n \"Unexpected error\": [\"Error inesperado\"],\n \"IBAN numbers usually have more that 4 digits\": [\n \"Los n\u00FAmeros IBAN usualmente tienen mas de 4 digitos\",\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"Los n\u00FAmeros IBAN usualmente tienen menos de 34 digitos\",\n ],\n \"IBAN country code not found\": [\"C\u00F3digo de pais de IBAN no encontrado\"],\n \"IBAN number is not valid, checksum is wrong\": [\n \"El n\u00FAmero IBAN no es v\u00E1lido, fall\u00F3 la verificaci\u00F3n\",\n ],\n \"Max withdrawal amount\": [\"Monto m\u00E1ximo de extracci\u00F3n\"],\n \"Show withdrawal confirmation\": [\"Mostrar confirmaci\u00F3n de extracci\u00F3n\"],\n \"Show demo description\": [\"Mostrar descripci\u00F3n de demo\"],\n \"Show install wallet first\": [\"Mostrar instalar la billetera primero\"],\n \"Use fast withdrawal form\": [\"Usar formulario de extracci\u00F3n r\u00E1pida\"],\n \"Show debug info\": [\"Mostrar informaci\u00F3n de depuraci\u00F3n\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\n \"La operaci\u00F3n en la reserva ya ha sido confirmada previamente y no puede ser abortada\",\n ],\n \"The operation id is invalid.\": [\"El id de operaci\u00F3n es invalido.\"],\n \"The operation was not found.\": [\"La operaci\u00F3n no se encontr\u00F3.\"],\n \"If you have a Taler wallet installed in this device\": [\n \"Si tienes una billetera Taler instalada en este dispositivo\",\n ],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\n \"Veras los detalles de la operaci\u00F3n en tu billetera incluyendo comisiones (si aplic\u00E1n). Si todav\u00EDa no tienes una puedes instalarla siguiendo las instrucciones en\",\n ],\n \"this page\": [\"esta p\u00E1gina\"],\n Withdraw: [\"Retirar\"],\n \"Or if you have the wallet in another device\": [\n \"O si tienes la billetera en otro dispositivo\",\n ],\n \"Scan the QR below to start the withdrawal.\": [\n \"Escanea el QR debajo para comenzar la extracci\u00F3n.\",\n ],\n required: [\"requerido\"],\n \"IBAN should have just uppercased letters and numbers\": [\n \"IBAN deber\u00EDa tener letras may\u00FAsculas y n\u00FAmeros\",\n ],\n \"not valid\": [\"no v\u00E1lido\"],\n \"should be greater than 0\": [\"Deber\u00EDa ser mas grande que 0\"],\n \"balance is not enough\": [\"el saldo no es suficiente\"],\n \"does not follow the pattern\": [\"no tiene un patr\u00F3n valido\"],\n 'only \"IBAN\" target are supported': [\n 'solo cuentas \"IBAN\" son soportadas',\n ],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n 'usa el par\u00E1metro \"amount\" para indicar el monto a ser transferido',\n ],\n \"the amount is not valid\": [\"el monto no es v\u00E1lido\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\n 'usa el par\u00E1metro \"message\" para indicar un texto de referencia en la transferencia',\n ],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\n \"El pedido era inv\u00E1lido o el URI payto:// usado tiene caracter\u00EDsticas inaceptables.\",\n ],\n \"Not enough permission to complete the operation.\": [\n \"Sin permisos suficientes para completar la operaci\u00F3n.\",\n ],\n 'The destination account \"%1$s\" was not found.': [\n 'La cuenta de destino \"%1$s\" no fue encontrada.',\n ],\n \"The origin and the destination of the transfer can't be the same.\": [\n \"El origen y destino de la transferencia no puede ser la misma.\",\n ],\n \"Your balance is not enough.\": [\"El saldo no es suficiente.\"],\n 'The origin account \"%1$s\" was not found.': [\n 'La cuenta origen \"%1$s\" no fue encontrada.',\n ],\n \"Using a form\": [\"Usando un formulario\"],\n \"Import payto:// URI\": [\"Importando un URI payto://\"],\n Recipient: [\"Destinatario\"],\n \"IBAN of the recipient's account\": [\n \"Numero IBAN de la cuenta destinataria\",\n ],\n \"Transfer subject\": [\"Asunto de transferencia\"],\n subject: [\"asunto\"],\n \"some text to identify the transfer\": [\n \"alg\u00FAn texto para identificar la transferencia\",\n ],\n Amount: [\"Monto\"],\n \"amount to transfer\": [\"monto a transferir\"],\n \"payto URI:\": [\"payto URI:\"],\n \"uniform resource identifier of the target account\": [\n \"identificador de recurso uniforme de la cuenta destino\",\n ],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\n \"payto://iban/[iban-destinatario]?message=[asunto]&amount=[%1$s:X.Y]\",\n ],\n Cancel: [\"Cancelar\"],\n Send: [\"Env\u00EDar\"],\n \"Missing username\": [\"Falta nombre de usuario\"],\n \"Missing password\": [\"Falta contrase\u00F1a\"],\n 'Wrong credentials for \"%1$s\"': ['Credenciales incorrectas para \"%1$s\"'],\n \"Account not found\": [\"Cuenta no encontrada\"],\n Username: [\"Nombre de usuario\"],\n \"username of the account\": [\"nombre de usuario de la cuenta\"],\n Password: [\"Contrase\u00F1a\"],\n \"password of the account\": [\"contrase\u00F1a de la cuenta\"],\n Check: [\"Verificar\"],\n \"Log in\": [\"Acceso\"],\n Register: [\"Registrarse\"],\n \"Wire transfer completed!\": [\"Transferencia bancaria completada!\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\n \"La extracci\u00F3n fue abortada anteriormente y no puede ser confirmada\",\n ],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\n \"La operaci\u00F3n de extracci\u00F3n no puede ser confirmada antes de que una billetera acepte la transaccion.\",\n ],\n \"Your balance is not enough for the operation.\": [\n \"El saldo no es suficiente para la operaci\u00F3n.\",\n ],\n \"Confirm the withdrawal operation\": [\n \"Confirme la operaci\u00F3n de extracci\u00F3n\",\n ],\n \"Wire transfer details\": [\"Detalle de transferencia bancaria\"],\n \"Taler Exchange operator's account\": [\n \"Cuenta del operador del Taler Exchange\",\n ],\n \"Taler Exchange operator's name\": [\n \"Nombre del operador del Taler Exchange\",\n ],\n Transfer: [\"Transferencia\"],\n \"Authentication required\": [\"Autenticaci\u00F3n requerida\"],\n \"This operation was created with other username\": [\n \"Esta operaci\u00F3n fue creada con otro usuario\",\n ],\n \"Operation aborted\": [\"Operaci\u00F3n abortada\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\n \"La transferencia bancaria a la cuenta del operador del Taler Exchange fue abortada, su saldo no fue afectado.\",\n ],\n \"You can close this page now or continue to the account page.\": [\n \"Ya puedes cerrar esta pagina or continuar a la p\u00E1gina de estado de cuenta.\",\n ],\n Continue: [\"Continuar\"],\n \"Withdrawal confirmed\": [\"La extracci\u00F3n fue confirmada\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\n \"La transferencia bancaria al operador Taler fue iniciada. Pronto recibir\u00E1s el monto pedido en tu billetera Taler.\",\n ],\n Done: [\"Listo\"],\n \"Operation canceled\": [\"Operaci\u00F3n cancelada\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\n \"La operaci\u00F3n est\u00E1 marcada como 'seleccionada' pero algunos pasos en la extracci\u00F3n fallaron\",\n ],\n \"The account is selected but no withdrawal identification found.\": [\n \"La cuenta est\u00E1 seleccionada pero no se encontr\u00F3 el identificador de extracci\u00F3n.\",\n ],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\n \"Hay un identificador de extracci\u00F3n pero la cuenta no ha sido seleccionada o la selccionada es inv\u00E1lida.\",\n ],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\n \"No hay un identificador de extracci\u00F3n y ninguna cuenta a sido seleccionada o la seleccionada es inv\u00E1lida.\",\n ],\n \"Operation not found\": [\"Operaci\u00F3n no encontrada\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\n \"Esta operaci\u00F3n no es conocida por el servidor. El identificador de operaci\u00F3n es incorrecto o el server borr\u00F3 la informaci\u00F3n de la operaci\u00F3n antes de llegar hasta aqu\u00ED.\",\n ],\n \"Cotinue to dashboard\": [\"Continuar al panel\"],\n \"The Withdrawal URI is not valid\": [\"El URI de estracci\u00F3n no es v\u00E1lido\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\n 'El servidor de bank no esta spoportado. Version soportada \"%1$s\", version del server \"%2$s\"',\n ],\n \"Internal error, please report.\": [\n \"Error interno, por favor reporte el error.\",\n ],\n Preferences: [\"Preferencias\"],\n \"Welcome, %1$s\": [\"Bienvenido/a, %1$s\"],\n \"Latest transactions\": [\"\u00DAltimas transacciones\"],\n Date: [\"Fecha\"],\n Counterpart: [\"Contraparte\"],\n Subject: [\"Asunto\"],\n sent: [\"enviado\"],\n received: [\"recibido\"],\n \"invalid value\": [\"valor inv\u00E1lido\"],\n to: [\"hacia\"],\n from: [\"desde\"],\n \"First page\": [\"Primera p\u00E1gina\"],\n Next: [\"Siguiente\"],\n \"History of public accounts\": [\"Historial de cuentas p\u00FAblicas\"],\n \"Currently, the bank is not accepting new registrations!\": [\n \"Actualmente, el banco no est\u00E1 aceptado nuevos registros!\",\n ],\n \"Missing name\": [\"Falta nombre\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\n \"Solo use letras y n\u00FAmeros, y comience con una letra min\u00FAscula\",\n ],\n \"Passwords don't match\": [\"La contrase\u00F1a no coincide\"],\n \"Server replied with invalid phone or email.\": [\n \"El servidor repondio con tel\u00E9fono o direcci\u00F3n de correo inv\u00E1lido.\",\n ],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"El registro est\u00E1 deshabilitado porque el banco se qued\u00F3 sin cr\u00E9dito bonus.\",\n ],\n \"No enough permission to create that account.\": [\n \"Sin permisos suficientes para crear esa cuenta.\",\n ],\n \"That account id is already taken.\": [\n \"El identificador de cuenta ya est\u00E1 tomado.\",\n ],\n \"That username is already taken.\": [\n \"El nombre de usuario ya est\u00E1 tomado.\",\n ],\n \"That username can't be used because is reserved.\": [\n \"El nombre de usuario no puede ser usado porque esta reservado.\",\n ],\n \"Only admin is allow to set debt limit.\": [\n \"Solo el administrador tiene permitido cambiar el l\u00EDmite de deuda.\",\n ],\n \"No information for the selected authentication channel.\": [\n \"No hay informaci\u00F3n para el canal de autenticaci\u00F3n seleccionado.\",\n ],\n \"Authentication channel is not supported.\": [\n \"Canal de autenticaci\u00F3n no esta soportado.\",\n ],\n \"Only admin can create accounts with second factor authentication.\": [\n \"Solo el administrador puede crear cuentas con el segundo factor de autenticaci\u00F3n.\",\n ],\n \"Account registration\": [\"Registro de cuenta\"],\n \"Repeat password\": [\"Repita la contrase\u00F1a\"],\n Name: [\"Nombre\"],\n \"Create a random temporary user\": [\"Crear un usuario aleatorio temporal\"],\n \"Make a wire transfer\": [\"Hacer una transferencia bancaria\"],\n \"Wire transfer created!\": [\"Transferencia bancaria creada!\"],\n Accounts: [\"Cuentas\"],\n \"A list of all business account in the bank.\": [\n \"Una lista de todas las cuentas en el banco.\",\n ],\n \"Create account\": [\"Crear cuenta\"],\n Balance: [\"Saldo\"],\n Actions: [\"Acciones\"],\n unknown: [\"desconocido\"],\n \"change password\": [\"cambiar contrase\u00F1a\"],\n remove: [\"elimiar\"],\n \"Select a section\": [\"Seleccione una secci\u00F3n\"],\n \"Last hour\": [\"\u00DAltima hora\"],\n \"Last day\": [\"\u00DAltimo d\u00EDa\"],\n \"Last month\": [\"\u00DAltimo mes\"],\n \"Last year\": [\"\u00DAltimo a\u00F1o\"],\n \"Last Year\": [\"\u00DAltimo A\u00F1o\"],\n \"Trading volume on %1$s compared to %2$s\": [\n \"V\u00F3lumen de comercio en %1$s comparado con %2$s\",\n ],\n Cashin: [\"Ingreso\"],\n Cashout: [\"Egreso\"],\n Payin: [\"Envios de dinero\"],\n Payout: [\"Recibos de dinero\"],\n \"download stats as CSV\": [\"descargar estad\u00EDsticas en CSV\"],\n \"Descreased by\": [\"Descendiente por\"],\n \"Increased by\": [\"Ascendente por\"],\n \"Unable to create a cashout\": [\"Imposible crear un egreso\"],\n \"The bank configuration does not support cashout operations.\": [\n \"La configuraci\u00F3n del banco no soporta operaciones de egreso.\",\n ],\n invalid: [\"inv\u00E1lido\"],\n \"need to be higher due to fees\": [\n \"necesita ser mayor debido a las comisiones\",\n ],\n \"the total transfer at destination will be zero\": [\n \"el total de la transferencia en destino ser\u00E1 cero\",\n ],\n \"Cashout created\": [\"Egreso creado\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\n \"Se detect\u00F3 una petici\u00F3n duplicada, verifique si la operaci\u00F3n tuvo \u00E9xito o intente otra vez.\",\n ],\n \"The conversion rate was incorrectly applied\": [\n \"La tasa de conversi\u00F3n se aplic\u00F3 incorrectamente\",\n ],\n \"The account does not have sufficient funds\": [\n \"La cuenta no tiene fondos suficientes\",\n ],\n \"Cashouts are not supported\": [\"Egresos no est\u00E1n soportados\"],\n \"Missing cashout URI in the profile\": [\n \"Falta direcci\u00F3n de egreso en el perf\u00EDl\",\n ],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\n \"El env\u00EDo del mensaje de confirmaci\u00F3n fall\u00F3, intente mas tarde o contacte al administrador.\",\n ],\n \"Convertion rate\": [\"Tasa de conversi\u00F3n\"],\n Fee: [\"Comisi\u00F3n\"],\n \"To account\": [\"Hacia cuenta\"],\n \"No cashout account\": [\"No hay cuenta de egreso\"],\n \"Before doing a cashout you need to complete your profile\": [\n \"Antes de hacer un egreso necesita completar su perf\u00EDl\",\n ],\n \"Amount to send\": [\"Monto a enviar\"],\n \"Amount to receive\": [\"Monto a recibir\"],\n \"Total cost\": [\"Costo total\"],\n \"Balance left\": [\"Saldo remanente\"],\n \"Before fee\": [\"Antes de comisi\u00F3n\"],\n \"Total cashout transfer\": [\"Total de egreso\"],\n \"No cashout channel available\": [\"No hay canal de egreso disponible\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\n \"Antes de hacer un egreso el servidor necesita proveer un segundo canal para confirmar la operaci\u00F3n\",\n ],\n \"Second factor authentication\": [\"Segundo factor de autenticaci\u00F3n\"],\n Email: [\"Correo eletr\u00F3nico\"],\n \"add a email in your profile to enable this option\": [\n \"agrege un correo en su perf\u00EDl para habilitar esta opci\u00F3n\",\n ],\n SMS: [\"SMS\"],\n \"add a phone number in your profile to enable this option\": [\n \"agregue un n\u00FAmero de tel\u00E9fono para habilitar esta opci\u00F3n\",\n ],\n Details: [\"Detalles\"],\n Delete: [\"Borrar\"],\n Credentials: [\"Credenciales\"],\n Cashouts: [\"Egresos\"],\n \"it doesnt have the pattern of an IBAN number\": [\n \"no tiene el patr\u00F3n de un n\u00FAmero IBAN\",\n ],\n \"it doesnt have the pattern of an email\": [\n \"no tiene el patr\u00F3n de un correo electr\u00F3nico\",\n ],\n \"should start with +\": [\"deber\u00EDa comenzar con un +\"],\n \"phone number can't have other than numbers\": [\n \"n\u00FAmero de tel\u00E9fono no puede tener otra cosa que numeros\",\n ],\n \"account identification in the bank\": [\n \"identificador de cuenta en el banco\",\n ],\n \"name of the person owner the account\": [\n \"nombre de la persona due\u00F1a de la cuenta\",\n ],\n \"Internal IBAN\": [\"IBAN interno\"],\n \"if empty a random account number will be assigned\": [\n \"si est\u00E1 vac\u00EDo un n\u00FAmero de cuenta aleatorio ser\u00E1 asignado\",\n ],\n \"account identification for bank transfer\": [\n \"identificador de cuenta para transferencia bancaria\",\n ],\n Phone: [\"Tel\u00E9fono\"],\n \"Cashout IBAN\": [\"IBAN de egreso\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\n \"numero de cuenta donde el dinero ser\u00E1 enviado cuando se ejecuten egresos\",\n ],\n \"Max debt\": [\"M\u00E1xima deuda\"],\n \"how much is user able to transfer after zero balance\": [\n \"cuanto tiene habilitado a transferir despues de un saldo en cero\",\n ],\n \"Is this a Taler Exchange?\": [\"Es un Taler Exchange?\"],\n \"This server doesn't support second factor authentication.\": [\n \"Este servidor no tiene soporte para segundo factor de autenticaci\u00F3n.\",\n ],\n \"Enable second factor authentication\": [\n \"H\u00E1bilitar segundo factor de autenticaci\u00F3n\",\n ],\n \"Using email\": [\"Usando correo eletr\u00F3nico\"],\n \"Using SMS\": [\"Usando SMS\"],\n \"Is this account public?\": [\"Es una cuenta p\u00FAblica?\"],\n \"public accounts have their balance publicly accesible\": [\n \"las cuentas p\u00FAblicas tienen su saldo accesible al p\u00FAblico\",\n ],\n \"Account updated\": [\"Cuenta actualizada\"],\n \"The rights to change the account are not sufficient\": [\n \"Los permisos para cambiar la cuenta no son suficientes\",\n ],\n \"The username was not found\": [\"El nombre de usaurio no se encontr\u00F3\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\n \"No puede cambiar el nombre legal, por favor contacte el administrador de la cuenta.\",\n ],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\n \"No puede cambiar el l\u00EDmite de deuda, por favor contacte el administrador de la cuenta.\",\n ],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\n \"No puede cambiar la direcci\u00F3n de egreso, por favor contacte al administrador de la cuenta.\",\n ],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\n \"No puede cambiar los datos de contacto, por favor contacte al administrador de la cuenta.\",\n ],\n 'Account \"%1$s\"': ['Cuenta \"%1$s\"'],\n \"Change details\": [\"Cambiar detalles\"],\n Update: [\"Actualizar\"],\n \"password doesn't match\": [\"la contrase\u00F1a no coincide\"],\n \"Password changed\": [\"La contrase\u00F1a cambi\u00F3\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"No est\u00E1 autorizado a cambiar el password, quiz\u00E1 la sesi\u00F3n es invalida.\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\n \"Se necesita el password viejo para cambiar la contrase\u00F1a. Si no lo tiene contacte a su administrador.\",\n ],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"Su actual contrase\u00F1a no coincide, no puede cambiar a una nueva contrase\u00F1a.\",\n ],\n \"Update password\": [\"Actualizar contrase\u00F1a\"],\n \"New password\": [\"Nueva contrase\u00F1a\"],\n \"Type it again\": [\"Escribalo otra vez\"],\n \"repeat the same password\": [\"repita la misma contrase\u00F1a\"],\n \"Current password\": [\"Contrase\u00F1a actual\"],\n \"your current password, for security\": [\n \"su actual contrase\u00F1a, por seguridad\",\n ],\n Change: [\"Cambiar\"],\n \"Can't delete the account\": [\"No se puede eliminar la cuenta\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\n \"La cuenta no puede ser eliminada mientras tiene saldo. Primero asegures\u00E9 que el due\u00F1o haga un egreso completo.\",\n ],\n \"Account removed\": [\"Cuenta eliminada\"],\n \"No enough permission to delete the account.\": [\n \"No tiene permisos suficientes para eliminar la cuenta.\",\n ],\n \"The username was not found.\": [\"El nombr ede usuario no se encontr\u00F3.\"],\n \"Can't delete a reserved username.\": [\n \"No se puede eliminar un nombre de usuario reservado.\",\n ],\n \"Can't delete an account with balance different than zero.\": [\n \"No se puede eliminar una cuenta con saldo diferente a cero.\",\n ],\n \"name doesn't match\": [\"el nombre no coincide\"],\n \"You are going to remove the account\": [\"Est\u00E1 por eliminar la cuenta\"],\n \"This step can't be undone.\": [\"Este paso no puede ser deshecho.\"],\n 'Deleting account \"%1$s\"': ['Borrando cuenta \"%1$s\"'],\n Verification: [\"Verificaci\u00F3n\"],\n \"enter the account name that is going to be deleted\": [\n \"ingrese el nombre de cuenta que ser\u00E1 eliminado\",\n ],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\n 'Cuenta creada con contrase\u00F1a \"%1$s\". El usuario debe cambiar la contrase\u00F1a en el siguiente ingreso.',\n ],\n \"Server replied that phone or email is invalid\": [\n \"El servidor respondi\u00F3 que el tel\u00E9fono o correo eletr\u00F3nico es invalido\",\n ],\n \"The rights to perform the operation are not sufficient\": [\n \"Los permisos para ejecutar la operaci\u00F3n no son suficientes\",\n ],\n \"Account username is already taken\": [\n \"El nombre del usuario ya est\u00E1 tomado\",\n ],\n \"Account id is already taken\": [\"El id de cuenta ya est\u00E1 tomado\"],\n \"Bank ran out of bonus credit.\": [\n \"El banco no tiene mas cr\u00E9dito de bonus.\",\n ],\n \"Account username can't be used because is reserved\": [\n \"El nombre de usuario de la cuenta no puede userse porque est\u00E1 reservado\",\n ],\n \"Can't create accounts\": [\"No puede crear cuentas\"],\n \"Only system admin can create accounts.\": [\n \"Solo los administradores del sistema pueden crear cuentas.\",\n ],\n \"New business account\": [\"Nueva cuenta\"],\n Create: [\"Crear\"],\n \"Cashout not supported.\": [\"Egreso no soportado.\"],\n \"Account not found.\": [\"Cuenta no encontrada.\"],\n \"Latest cashouts\": [\"\u00DAltimos egresos\"],\n Created: [\"Creado\"],\n Confirmed: [\"Confirmado\"],\n \"Total debit\": [\"D\u00E9bito total\"],\n \"Total credit\": [\"Cr\u00E9dito total\"],\n Status: [\"Estado\"],\n never: [\"nunca\"],\n \"Cashout for account %1$s\": [\"Egreso para cuenta %1$s\"],\n \"This cashout not found. Maybe already aborted.\": [\n \"Este egreso no se encontr\u00F3. Quiz\u00E1 fue abortado.\",\n ],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"Egreso no econtrado. Tambi\u00E9n puede significar que ya ha sido abortado.\",\n ],\n \"Cashout was already confimed.\": [\"Egreso ya fue confirmado.\"],\n \"Cashout operation is not supported.\": [\n \"Operaci\u00F3n de egreso no soportada.\",\n ],\n \"The cashout operation is already aborted.\": [\n \"La operaci\u00F3n de egreso ya est\u00E1 abortada.\",\n ],\n \"Missing destination account.\": [\"Falta cuenta destino.\"],\n \"Too many failed attempts.\": [\"Demasiados intentos fallidos.\"],\n \"The code for this cashout is invalid.\": [\n \"El c\u00F3digo para este egreso es invalido.\",\n ],\n \"Cashout detail\": [\"Detalles de egreso\"],\n Debited: [\"Debitado\"],\n Credited: [\"Acreditado\"],\n \"Enter the confirmation code\": [\"Ingresar el c\u00F3digo de confirmaci\u00F3n\"],\n Abort: [\"Abortar\"],\n Confirm: [\"Confirmar\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\n \"No autorizado para hacer la operaci\u00F3n, quiz\u00E1 la sesi\u00F3n haya expirado or cambi\u00F3 la contrase\u00F1a.\",\n ],\n \"The operation was rejected due to insufficient funds.\": [\n \"La operaci\u00F3n fue rechazada debido a saldo insuficiente.\",\n ],\n \"Do not show this again\": [\"No mostrar otra vez\"],\n Close: [\"Cerrar\"],\n \"On this device\": [\"En este dispositivo\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\n 'Si esta usando un explorador web de escritorio deber\u00EDas acceder ahora a tu billletera con la GNU Taler WebExtension o hacer click en el link si tu extensi\u00F3n tiene la configuraci\u00F3n \"Inyectar soporte para Taler\" habilitada.',\n ],\n Start: [\"Comenzar\"],\n \"On a mobile phone\": [\"En un dispotivo mobile\"],\n \"Scan the QR code with your mobile device.\": [\n \"Escanear el c\u00F3digo QR con tu dispotivo m\u00F3vil.\",\n ],\n \"There is an operation already\": [\"Ya hay una operaci\u00F3n\"],\n \"Complete or cancel the operation in\": [\n \"Completa o cancela la operaci\u00F3n en\",\n ],\n \"Server responded with an invalid withdraw URI\": [\n \"El servidor respondi\u00F3 con una URI de extracci\u00F3n inv\u00E1lida\",\n ],\n \"Withdraw URI: %1$s\": [\"URI de extracci\u00F3n: %1$s\"],\n \"The operation was rejected due to insufficient funds\": [\n \"La operaci\u00F3n fue rechazada debido a fundos insuficientes\",\n ],\n \"Prepare your wallet\": [\"Prepare su billetera\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\n \"Despues de usar tu billetera necesitar\u00E1s confirmar o cancelar la operaci\u00F3n en este sitio.\",\n ],\n \"You need a GNU Taler Wallet\": [\"Necesitas una GNU Taler Wallet\"],\n \"If you don't have one yet you can follow the instruction in\": [\n \"Si no tienes una todav\u00EDa puedes seguir las instrucciones en\",\n ],\n \"Send money\": [\"Enviar dinero\"],\n \"to a %1$s wallet\": [\"a una billetera %1$s\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"Extraer dinero digital a tu billetera m\u00F3vil o extesi\u00F3n web\",\n ],\n \"operation ready\": [\"operaci\u00F3n lista\"],\n \"to another bank account\": [\"a otra cuenta bancaria\"],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"Hacer una transferencia bancaria a una cuenta con un n\u00FAmero de cuenta conocido.\",\n ],\n \"Transfer details\": [\"Detalles de transferencia\"],\n \"This is a demo bank\": [\"Este es un banco de demostraci\u00F3n\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\n \"Esta parte de la demostraci\u00F3n muestra c\u00F3mo funciona un banco que soporta Taler directamente. Adem\u00E1s de usar tu propia cuenta de banco, tambi\u00E9n podr\u00E1s ver el historial de transacciones de algunas %1$s.\",\n ],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\n \"Esta parte de la demostraci\u00F3n muetra como un banco que soporta Taler directamente funcionar\u00EDa.\",\n ],\n \"Pending account delete operation\": [\n \"Operaci\u00F3n pendiente de eliminaci\u00F3n de cuenta\",\n ],\n \"Pending account update operation\": [\n \"Operaci\u00F3n pendiente de actualizaci\u00F3n de cuenta\",\n ],\n \"Pending password update operation\": [\n \"Operaci\u00F3n pendiente de actualizaci\u00F3n de password\",\n ],\n \"Pending transaction operation\": [\"Operaci\u00F3n pendiente de transacci\u00F3n\"],\n \"Pending withdrawal operation\": [\"Operaci\u00F3n pendiente de extracci\u00F3n\"],\n \"Pending cashout operation\": [\"Operaci\u00F3n pendiente de egreso\"],\n \"You can complete or cancel the operation in\": [\n \"Puedes completar o cancelar la operaci\u00F3n en\",\n ],\n \"Download bank stats\": [\"Descargar estad\u00EDsticas del banco\"],\n \"Include hour metric\": [\"Incluir m\u00E9trica horaria\"],\n \"Include day metric\": [\"Incluir m\u00E9trica diaria\"],\n \"Include month metric\": [\"Incluir m\u00E9trica mensual\"],\n \"Include year metric\": [\"Incluir m\u00E9trica anual\"],\n \"Include table header\": [\"Incluir encabezado de tabla\"],\n \"Add previous metric for compare\": [\n \"Agregar m\u00E9trica previa para comparar\",\n ],\n \"Fail on first error\": [\"Fallar en el primer error\"],\n Download: [\"Descargar\"],\n \"downloading... %1$s\": [\"descargando... %1$s\"],\n \"Download completed\": [\"Descarga completada\"],\n \"click here to save the file in your computer\": [\n \"click aqu\u00ED para guardar el archivo en su computadora\",\n ],\n \"Challenge not found.\": [\"Desaf\u00EDo no encontrado.\"],\n \"This user is not authorized to complete this challenge.\": [\n \"Este usuario no est\u00E1 autorizado para completar este desaf\u00EDo.\",\n ],\n \"Too many attemps, try another code.\": [\n \"Demasiados intentos, intente otro c\u00F3digo.\",\n ],\n \"The confirmation code is wrong, try again.\": [\n \"El c\u00F3digo de confirmaci\u00F3n es erroneo, intente otra vez.\",\n ],\n \"The operation expired.\": [\"La operaci\u00F3n expir\u00F3.\"],\n \"The operation failed.\": [\"La operaci\u00F3n fall\u00F3.\"],\n \"The operation needs another confirmation to complete.\": [\n \"La operaci\u00F3n necesita otra confirmaci\u00F3n para completar.\",\n ],\n \"Account delete\": [\"Eliminaci\u00F3n de cuenta\"],\n \"Account update\": [\"Actualizaci\u00F3n de cuenta\"],\n \"Password update\": [\"Actualizaci\u00F3n de contrase\u00F1a\"],\n \"Wire transfer\": [\"Transferencia bancaria\"],\n Withdrawal: [\"Extracci\u00F3n\"],\n \"Confirm the operation\": [\"Confirmar la operaci\u00F3n\"],\n \"Send again\": [\"Enviar otra vez\"],\n \"Send code\": [\"Enviar c\u00F3digo\"],\n \"Operation details\": [\"Detalles de operaci\u00F3n\"],\n \"Challenge details\": [\"Detalles del desaf\u00EDo\"],\n \"Sent at\": [\"Enviado a\"],\n \"To phone\": [\"Al tel\u00E9fono\"],\n \"To email\": [\"Al email\"],\n \"Welcome to %1$s!\": [\"Bienvenido a %1$s!\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"es\",\n completeness: 100,\n};\n\nstrings[\"en\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=(n != 1);\",\n lang: \"en\",\n },\n \"Operation failed, please report\": [\"\"],\n \"Request timeout\": [\"\"],\n \"Request throttled\": [\"\"],\n \"Malformed response\": [\"\"],\n \"Network error\": [\"\"],\n \"Unexpected request error\": [\"\"],\n \"Unexpected error\": [\"\"],\n \"IBAN numbers usually have more that 4 digits\": [\"\"],\n \"IBAN numbers usually have less that 34 digits\": [\"\"],\n \"IBAN country code not found\": [\"\"],\n \"IBAN number is not valid, checksum is wrong\": [\"\"],\n \"Max withdrawal amount\": [\"\"],\n \"Show withdrawal confirmation\": [\"\"],\n \"Show demo description\": [\"\"],\n \"Show install wallet first\": [\"\"],\n \"Use fast withdrawal form\": [\"\"],\n \"Show debug info\": [\"\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\"\"],\n \"The operation id is invalid.\": [\"\"],\n \"The operation was not found.\": [\"\"],\n \"If you have a Taler wallet installed in this device\": [\"\"],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\"\"],\n \"this page\": [\"\"],\n Withdraw: [\"\"],\n \"Or if you have the wallet in another device\": [\"\"],\n \"Scan the QR below to start the withdrawal.\": [\"\"],\n required: [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"not valid\": [\"\"],\n \"should be greater than 0\": [\"\"],\n \"balance is not enough\": [\"\"],\n \"does not follow the pattern\": [\"\"],\n 'only \"IBAN\" target are supported': [\"\"],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n \"\",\n ],\n \"the amount is not valid\": [\"\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\"\"],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\"\"],\n \"Not enough permission to complete the operation.\": [\"\"],\n 'The destination account \"%1$s\" was not found.': [\"\"],\n \"The origin and the destination of the transfer can't be the same.\": [\"\"],\n \"Your balance is not enough.\": [\"\"],\n 'The origin account \"%1$s\" was not found.': [\"\"],\n \"Using a form\": [\"\"],\n \"Import payto:// URI\": [\"\"],\n Recipient: [\"\"],\n \"IBAN of the recipient's account\": [\"\"],\n \"Transfer subject\": [\"\"],\n subject: [\"\"],\n \"some text to identify the transfer\": [\"\"],\n Amount: [\"\"],\n \"amount to transfer\": [\"\"],\n \"payto URI:\": [\"\"],\n \"uniform resource identifier of the target account\": [\"\"],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\"\"],\n Cancel: [\"\"],\n Send: [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n 'Wrong credentials for \"%1$s\"': [\"\"],\n \"Account not found\": [\"\"],\n Username: [\"\"],\n \"username of the account\": [\"\"],\n Password: [\"\"],\n \"password of the account\": [\"\"],\n Check: [\"\"],\n \"Log in\": [\"\"],\n Register: [\"\"],\n \"Wire transfer completed!\": [\"\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\"\"],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\"\"],\n \"Your balance is not enough for the operation.\": [\"\"],\n \"Confirm the withdrawal operation\": [\"\"],\n \"Wire transfer details\": [\"\"],\n \"Taler Exchange operator's account\": [\"\"],\n \"Taler Exchange operator's name\": [\"\"],\n Transfer: [\"\"],\n \"Authentication required\": [\"\"],\n \"This operation was created with other username\": [\"\"],\n \"Operation aborted\": [\"\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\"\"],\n \"You can close this page now or continue to the account page.\": [\"\"],\n Continue: [\"\"],\n \"Withdrawal confirmed\": [\"\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\"\"],\n Done: [\"\"],\n \"Operation canceled\": [\"\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\"\"],\n \"The account is selected but no withdrawal identification found.\": [\"\"],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"Operation not found\": [\"\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\"\"],\n \"Cotinue to dashboard\": [\"\"],\n \"The Withdrawal URI is not valid\": [\"\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\"\"],\n \"Internal error, please report.\": [\"\"],\n Preferences: [\"\"],\n \"Welcome, %1$s\": [\"\"],\n \"Latest transactions\": [\"\"],\n Date: [\"\"],\n Counterpart: [\"\"],\n Subject: [\"\"],\n sent: [\"\"],\n received: [\"\"],\n \"invalid value\": [\"\"],\n to: [\"\"],\n from: [\"\"],\n \"First page\": [\"\"],\n Next: [\"\"],\n \"History of public accounts\": [\"\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Missing name\": [\"\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\"\"],\n \"Passwords don't match\": [\"\"],\n \"Server replied with invalid phone or email.\": [\"\"],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"\",\n ],\n \"No enough permission to create that account.\": [\"\"],\n \"That account id is already taken.\": [\"\"],\n \"That username is already taken.\": [\"\"],\n \"That username can't be used because is reserved.\": [\"\"],\n \"Only admin is allow to set debt limit.\": [\"\"],\n \"No information for the selected authentication channel.\": [\"\"],\n \"Authentication channel is not supported.\": [\"\"],\n \"Only admin can create accounts with second factor authentication.\": [\"\"],\n \"Account registration\": [\"\"],\n \"Repeat password\": [\"\"],\n Name: [\"\"],\n \"Create a random temporary user\": [\"\"],\n \"Make a wire transfer\": [\"\"],\n \"Wire transfer created!\": [\"\"],\n Accounts: [\"\"],\n \"A list of all business account in the bank.\": [\"\"],\n \"Create account\": [\"\"],\n Balance: [\"\"],\n Actions: [\"\"],\n unknown: [\"\"],\n \"change password\": [\"\"],\n remove: [\"\"],\n \"Select a section\": [\"\"],\n \"Last hour\": [\"\"],\n \"Last day\": [\"\"],\n \"Last month\": [\"\"],\n \"Last year\": [\"\"],\n \"Last Year\": [\"\"],\n \"Trading volume on %1$s compared to %2$s\": [\"\"],\n Cashin: [\"\"],\n Cashout: [\"\"],\n Payin: [\"\"],\n Payout: [\"\"],\n \"download stats as CSV\": [\"\"],\n \"Descreased by\": [\"\"],\n \"Increased by\": [\"\"],\n \"Unable to create a cashout\": [\"\"],\n \"The bank configuration does not support cashout operations.\": [\"\"],\n invalid: [\"\"],\n \"need to be higher due to fees\": [\"\"],\n \"the total transfer at destination will be zero\": [\"\"],\n \"Cashout created\": [\"\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\"\"],\n \"The conversion rate was incorrectly applied\": [\"\"],\n \"The account does not have sufficient funds\": [\"\"],\n \"Cashouts are not supported\": [\"\"],\n \"Missing cashout URI in the profile\": [\"\"],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\"\"],\n \"Convertion rate\": [\"\"],\n Fee: [\"\"],\n \"To account\": [\"\"],\n \"No cashout account\": [\"\"],\n \"Before doing a cashout you need to complete your profile\": [\"\"],\n \"Amount to send\": [\"\"],\n \"Amount to receive\": [\"\"],\n \"Total cost\": [\"\"],\n \"Balance left\": [\"\"],\n \"Before fee\": [\"\"],\n \"Total cashout transfer\": [\"\"],\n \"No cashout channel available\": [\"\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\"\"],\n \"Second factor authentication\": [\"\"],\n Email: [\"\"],\n \"add a email in your profile to enable this option\": [\"\"],\n SMS: [\"\"],\n \"add a phone number in your profile to enable this option\": [\"\"],\n Details: [\"\"],\n Delete: [\"\"],\n Credentials: [\"\"],\n Cashouts: [\"\"],\n \"it doesnt have the pattern of an IBAN number\": [\"\"],\n \"it doesnt have the pattern of an email\": [\"\"],\n \"should start with +\": [\"\"],\n \"phone number can't have other than numbers\": [\"\"],\n \"account identification in the bank\": [\"\"],\n \"name of the person owner the account\": [\"\"],\n \"Internal IBAN\": [\"\"],\n \"if empty a random account number will be assigned\": [\"\"],\n \"account identification for bank transfer\": [\"\"],\n Phone: [\"\"],\n \"Cashout IBAN\": [\"\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\"\"],\n \"Max debt\": [\"\"],\n \"how much is user able to transfer after zero balance\": [\"\"],\n \"Is this a Taler Exchange?\": [\"\"],\n \"This server doesn't support second factor authentication.\": [\"\"],\n \"Enable second factor authentication\": [\"\"],\n \"Using email\": [\"\"],\n \"Using SMS\": [\"\"],\n \"Is this account public?\": [\"\"],\n \"public accounts have their balance publicly accesible\": [\"\"],\n \"Account updated\": [\"\"],\n \"The rights to change the account are not sufficient\": [\"\"],\n \"The username was not found\": [\"\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\"\"],\n 'Account \"%1$s\"': [\"\"],\n \"Change details\": [\"\"],\n Update: [\"\"],\n \"password doesn't match\": [\"\"],\n \"Password changed\": [\"\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\"\"],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"\",\n ],\n \"Update password\": [\"\"],\n \"New password\": [\"\"],\n \"Type it again\": [\"\"],\n \"repeat the same password\": [\"\"],\n \"Current password\": [\"\"],\n \"your current password, for security\": [\"\"],\n Change: [\"\"],\n \"Can't delete the account\": [\"\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\"\"],\n \"Account removed\": [\"\"],\n \"No enough permission to delete the account.\": [\"\"],\n \"The username was not found.\": [\"\"],\n \"Can't delete a reserved username.\": [\"\"],\n \"Can't delete an account with balance different than zero.\": [\"\"],\n \"name doesn't match\": [\"\"],\n \"You are going to remove the account\": [\"\"],\n \"This step can't be undone.\": [\"\"],\n 'Deleting account \"%1$s\"': [\"\"],\n Verification: [\"\"],\n \"enter the account name that is going to be deleted\": [\"\"],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\"\"],\n \"Server replied that phone or email is invalid\": [\"\"],\n \"The rights to perform the operation are not sufficient\": [\"\"],\n \"Account username is already taken\": [\"\"],\n \"Account id is already taken\": [\"\"],\n \"Bank ran out of bonus credit.\": [\"\"],\n \"Account username can't be used because is reserved\": [\"\"],\n \"Can't create accounts\": [\"\"],\n \"Only system admin can create accounts.\": [\"\"],\n \"New business account\": [\"\"],\n Create: [\"\"],\n \"Cashout not supported.\": [\"\"],\n \"Account not found.\": [\"\"],\n \"Latest cashouts\": [\"\"],\n Created: [\"\"],\n Confirmed: [\"\"],\n \"Total debit\": [\"\"],\n \"Total credit\": [\"\"],\n Status: [\"\"],\n never: [\"\"],\n \"Cashout for account %1$s\": [\"\"],\n \"This cashout not found. Maybe already aborted.\": [\"\"],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"\",\n ],\n \"Cashout was already confimed.\": [\"\"],\n \"Cashout operation is not supported.\": [\"\"],\n \"The cashout operation is already aborted.\": [\"\"],\n \"Missing destination account.\": [\"\"],\n \"Too many failed attempts.\": [\"\"],\n \"The code for this cashout is invalid.\": [\"\"],\n \"Cashout detail\": [\"\"],\n Debited: [\"\"],\n Credited: [\"\"],\n \"Enter the confirmation code\": [\"\"],\n Abort: [\"\"],\n Confirm: [\"\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\"\"],\n \"The operation was rejected due to insufficient funds.\": [\"\"],\n \"Do not show this again\": [\"\"],\n Close: [\"\"],\n \"On this device\": [\"\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\"\"],\n Start: [\"\"],\n \"On a mobile phone\": [\"\"],\n \"Scan the QR code with your mobile device.\": [\"\"],\n \"There is an operation already\": [\"\"],\n \"Complete or cancel the operation in\": [\"\"],\n \"Server responded with an invalid withdraw URI\": [\"\"],\n \"Withdraw URI: %1$s\": [\"\"],\n \"The operation was rejected due to insufficient funds\": [\"\"],\n \"Prepare your wallet\": [\"\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\"\"],\n \"You need a GNU Taler Wallet\": [\"\"],\n \"If you don't have one yet you can follow the instruction in\": [\"\"],\n \"Send money\": [\"\"],\n \"to a %1$s wallet\": [\"\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"\",\n ],\n \"operation ready\": [\"\"],\n \"to another bank account\": [\"\"],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"\",\n ],\n \"Transfer details\": [\"\"],\n \"This is a demo bank\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\"\"],\n \"Pending account delete operation\": [\"\"],\n \"Pending account update operation\": [\"\"],\n \"Pending password update operation\": [\"\"],\n \"Pending transaction operation\": [\"\"],\n \"Pending withdrawal operation\": [\"\"],\n \"Pending cashout operation\": [\"\"],\n \"You can complete or cancel the operation in\": [\"\"],\n \"Download bank stats\": [\"\"],\n \"Include hour metric\": [\"\"],\n \"Include day metric\": [\"\"],\n \"Include month metric\": [\"\"],\n \"Include year metric\": [\"\"],\n \"Include table header\": [\"\"],\n \"Add previous metric for compare\": [\"\"],\n \"Fail on first error\": [\"\"],\n Download: [\"\"],\n \"downloading... %1$s\": [\"\"],\n \"Download completed\": [\"\"],\n \"click here to save the file in your computer\": [\"\"],\n \"Challenge not found.\": [\"\"],\n \"This user is not authorized to complete this challenge.\": [\"\"],\n \"Too many attemps, try another code.\": [\"\"],\n \"The confirmation code is wrong, try again.\": [\"\"],\n \"The operation expired.\": [\"\"],\n \"The operation failed.\": [\"\"],\n \"The operation needs another confirmation to complete.\": [\"\"],\n \"Account delete\": [\"\"],\n \"Account update\": [\"\"],\n \"Password update\": [\"\"],\n \"Wire transfer\": [\"\"],\n Withdrawal: [\"\"],\n \"Confirm the operation\": [\"\"],\n \"Send again\": [\"\"],\n \"Send code\": [\"\"],\n \"Operation details\": [\"\"],\n \"Challenge details\": [\"\"],\n \"Sent at\": [\"\"],\n \"To phone\": [\"\"],\n \"To email\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=(n != 1);\",\n lang: \"en\",\n completeness: 100,\n};\n\nstrings[\"de\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"de\",\n },\n \"Operation failed, please report\": [\"\"],\n \"Request timeout\": [\"\"],\n \"Request throttled\": [\"\"],\n \"Malformed response\": [\"\"],\n \"Network error\": [\"\"],\n \"Unexpected request error\": [\"\"],\n \"Unexpected error\": [\"\"],\n \"IBAN numbers usually have more that 4 digits\": [\"\"],\n \"IBAN numbers usually have less that 34 digits\": [\"\"],\n \"IBAN country code not found\": [\"\"],\n \"IBAN number is not valid, checksum is wrong\": [\"\"],\n \"Max withdrawal amount\": [\"\"],\n \"Show withdrawal confirmation\": [\"\"],\n \"Show demo description\": [\"\"],\n \"Show install wallet first\": [\"\"],\n \"Use fast withdrawal form\": [\"\"],\n \"Show debug info\": [\"\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\"\"],\n \"The operation id is invalid.\": [\"\"],\n \"The operation was not found.\": [\"\"],\n \"If you have a Taler wallet installed in this device\": [\"\"],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\"\"],\n \"this page\": [\"\"],\n Withdraw: [\"\"],\n \"Or if you have the wallet in another device\": [\"\"],\n \"Scan the QR below to start the withdrawal.\": [\"\"],\n required: [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"not valid\": [\"\"],\n \"should be greater than 0\": [\"\"],\n \"balance is not enough\": [\"\"],\n \"does not follow the pattern\": [\"\"],\n 'only \"IBAN\" target are supported': [\"\"],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n \"\",\n ],\n \"the amount is not valid\": [\"\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\"\"],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\"\"],\n \"Not enough permission to complete the operation.\": [\"\"],\n 'The destination account \"%1$s\" was not found.': [\"\"],\n \"The origin and the destination of the transfer can't be the same.\": [\"\"],\n \"Your balance is not enough.\": [\"\"],\n 'The origin account \"%1$s\" was not found.': [\"\"],\n \"Using a form\": [\"\"],\n \"Import payto:// URI\": [\"\"],\n Recipient: [\"\"],\n \"IBAN of the recipient's account\": [\"\"],\n \"Transfer subject\": [\"\"],\n subject: [\"Verwendungszweck\"],\n \"some text to identify the transfer\": [\"\"],\n Amount: [\"Betrag\"],\n \"amount to transfer\": [\"Betrag\"],\n \"payto URI:\": [\"\"],\n \"uniform resource identifier of the target account\": [\"\"],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\"\"],\n Cancel: [\"\"],\n Send: [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n 'Wrong credentials for \"%1$s\"': [\"\"],\n \"Account not found\": [\"\"],\n Username: [\"\"],\n \"username of the account\": [\"\"],\n Password: [\"\"],\n \"password of the account\": [\"Buchungen auf \u00F6ffentlich sichtbaren Konten\"],\n Check: [\"\"],\n \"Log in\": [\"\"],\n Register: [\"\"],\n \"Wire transfer completed!\": [\"\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\"\"],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\"\"],\n \"Your balance is not enough for the operation.\": [\"\"],\n \"Confirm the withdrawal operation\": [\"Abhebung best\u00E4tigen\"],\n \"Wire transfer details\": [\"\"],\n \"Taler Exchange operator's account\": [\"\"],\n \"Taler Exchange operator's name\": [\"\"],\n Transfer: [\"\"],\n \"Authentication required\": [\"\"],\n \"This operation was created with other username\": [\"\"],\n \"Operation aborted\": [\"\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\"\"],\n \"You can close this page now or continue to the account page.\": [\"\"],\n Continue: [\"\"],\n \"Withdrawal confirmed\": [\"\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\"\"],\n Done: [\"\"],\n \"Operation canceled\": [\"\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\"\"],\n \"The account is selected but no withdrawal identification found.\": [\"\"],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"Operation not found\": [\"\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\"\"],\n \"Cotinue to dashboard\": [\"\"],\n \"The Withdrawal URI is not valid\": [\"\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\"\"],\n \"Internal error, please report.\": [\"\"],\n Preferences: [\"\"],\n \"Welcome, %1$s\": [\"\"],\n \"Latest transactions\": [\"\"],\n Date: [\"Datum\"],\n Counterpart: [\"Empf\u00E4nger\"],\n Subject: [\"Verwendungszweck\"],\n sent: [\"\"],\n received: [\"\"],\n \"invalid value\": [\"\"],\n to: [\"\"],\n from: [\"\"],\n \"First page\": [\"\"],\n Next: [\"\"],\n \"History of public accounts\": [\n \"Buchungen auf \u00F6ffentlich sichtbaren Konten\",\n ],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Missing name\": [\"\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\"\"],\n \"Passwords don't match\": [\"\"],\n \"Server replied with invalid phone or email.\": [\"\"],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"\",\n ],\n \"No enough permission to create that account.\": [\"\"],\n \"That account id is already taken.\": [\"\"],\n \"That username is already taken.\": [\"\"],\n \"That username can't be used because is reserved.\": [\"\"],\n \"Only admin is allow to set debt limit.\": [\"\"],\n \"No information for the selected authentication channel.\": [\"\"],\n \"Authentication channel is not supported.\": [\"\"],\n \"Only admin can create accounts with second factor authentication.\": [\"\"],\n \"Account registration\": [\"\"],\n \"Repeat password\": [\"\"],\n Name: [\"\"],\n \"Create a random temporary user\": [\"\"],\n \"Make a wire transfer\": [\"\"],\n \"Wire transfer created!\": [\"\"],\n Accounts: [\"Betrag\"],\n \"A list of all business account in the bank.\": [\"\"],\n \"Create account\": [\"\"],\n Balance: [\"\"],\n Actions: [\"\"],\n unknown: [\"\"],\n \"change password\": [\"\"],\n remove: [\"\"],\n \"Select a section\": [\"\"],\n \"Last hour\": [\"\"],\n \"Last day\": [\"\"],\n \"Last month\": [\"\"],\n \"Last year\": [\"\"],\n \"Last Year\": [\"\"],\n \"Trading volume on %1$s compared to %2$s\": [\"\"],\n Cashin: [\"\"],\n Cashout: [\"\"],\n Payin: [\"\"],\n Payout: [\"\"],\n \"download stats as CSV\": [\"\"],\n \"Descreased by\": [\"\"],\n \"Increased by\": [\"\"],\n \"Unable to create a cashout\": [\"\"],\n \"The bank configuration does not support cashout operations.\": [\"\"],\n invalid: [\"\"],\n \"need to be higher due to fees\": [\"\"],\n \"the total transfer at destination will be zero\": [\"\"],\n \"Cashout created\": [\"\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\"\"],\n \"The conversion rate was incorrectly applied\": [\"\"],\n \"The account does not have sufficient funds\": [\"\"],\n \"Cashouts are not supported\": [\"\"],\n \"Missing cashout URI in the profile\": [\"\"],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\"\"],\n \"Convertion rate\": [\"\"],\n Fee: [\"\"],\n \"To account\": [\"\"],\n \"No cashout account\": [\"\"],\n \"Before doing a cashout you need to complete your profile\": [\"\"],\n \"Amount to send\": [\"Betrag\"],\n \"Amount to receive\": [\"\"],\n \"Total cost\": [\"\"],\n \"Balance left\": [\"\"],\n \"Before fee\": [\"\"],\n \"Total cashout transfer\": [\"\"],\n \"No cashout channel available\": [\"\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\"\"],\n \"Second factor authentication\": [\"\"],\n Email: [\"\"],\n \"add a email in your profile to enable this option\": [\"\"],\n SMS: [\"\"],\n \"add a phone number in your profile to enable this option\": [\"\"],\n Details: [\"\"],\n Delete: [\"\"],\n Credentials: [\"\"],\n Cashouts: [\"\"],\n \"it doesnt have the pattern of an IBAN number\": [\"\"],\n \"it doesnt have the pattern of an email\": [\"\"],\n \"should start with +\": [\"\"],\n \"phone number can't have other than numbers\": [\"\"],\n \"account identification in the bank\": [\"\"],\n \"name of the person owner the account\": [\"\"],\n \"Internal IBAN\": [\"\"],\n \"if empty a random account number will be assigned\": [\"\"],\n \"account identification for bank transfer\": [\"\"],\n Phone: [\"\"],\n \"Cashout IBAN\": [\"\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\"\"],\n \"Max debt\": [\"\"],\n \"how much is user able to transfer after zero balance\": [\"\"],\n \"Is this a Taler Exchange?\": [\"\"],\n \"This server doesn't support second factor authentication.\": [\"\"],\n \"Enable second factor authentication\": [\"\"],\n \"Using email\": [\"\"],\n \"Using SMS\": [\"\"],\n \"Is this account public?\": [\"\"],\n \"public accounts have their balance publicly accesible\": [\"\"],\n \"Account updated\": [\"\"],\n \"The rights to change the account are not sufficient\": [\"\"],\n \"The username was not found\": [\"\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\"\"],\n 'Account \"%1$s\"': [\"\"],\n \"Change details\": [\"\"],\n Update: [\"\"],\n \"password doesn't match\": [\"\"],\n \"Password changed\": [\"\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\"\"],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"\",\n ],\n \"Update password\": [\"\"],\n \"New password\": [\"\"],\n \"Type it again\": [\"\"],\n \"repeat the same password\": [\"\"],\n \"Current password\": [\"\"],\n \"your current password, for security\": [\"\"],\n Change: [\"\"],\n \"Can't delete the account\": [\"\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\"\"],\n \"Account removed\": [\"\"],\n \"No enough permission to delete the account.\": [\"\"],\n \"The username was not found.\": [\"\"],\n \"Can't delete a reserved username.\": [\"\"],\n \"Can't delete an account with balance different than zero.\": [\"\"],\n \"name doesn't match\": [\"\"],\n \"You are going to remove the account\": [\"\"],\n \"This step can't be undone.\": [\"\"],\n 'Deleting account \"%1$s\"': [\"\"],\n Verification: [\"\"],\n \"enter the account name that is going to be deleted\": [\"\"],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\"\"],\n \"Server replied that phone or email is invalid\": [\"\"],\n \"The rights to perform the operation are not sufficient\": [\"\"],\n \"Account username is already taken\": [\"\"],\n \"Account id is already taken\": [\"\"],\n \"Bank ran out of bonus credit.\": [\"\"],\n \"Account username can't be used because is reserved\": [\"\"],\n \"Can't create accounts\": [\"\"],\n \"Only system admin can create accounts.\": [\"\"],\n \"New business account\": [\"\"],\n Create: [\"\"],\n \"Cashout not supported.\": [\"\"],\n \"Account not found.\": [\"\"],\n \"Latest cashouts\": [\"\"],\n Created: [\"\"],\n Confirmed: [\"Best\u00E4tigen\"],\n \"Total debit\": [\"\"],\n \"Total credit\": [\"\"],\n Status: [\"\"],\n never: [\"\"],\n \"Cashout for account %1$s\": [\"\"],\n \"This cashout not found. Maybe already aborted.\": [\"\"],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"\",\n ],\n \"Cashout was already confimed.\": [\"\"],\n \"Cashout operation is not supported.\": [\"\"],\n \"The cashout operation is already aborted.\": [\"\"],\n \"Missing destination account.\": [\"\"],\n \"Too many failed attempts.\": [\"\"],\n \"The code for this cashout is invalid.\": [\"\"],\n \"Cashout detail\": [\"\"],\n Debited: [\"\"],\n Credited: [\"\"],\n \"Enter the confirmation code\": [\"\"],\n Abort: [\"\"],\n Confirm: [\"Best\u00E4tigen\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\"\"],\n \"The operation was rejected due to insufficient funds.\": [\"\"],\n \"Do not show this again\": [\"\"],\n Close: [\"\"],\n \"On this device\": [\"\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\"\"],\n Start: [\"\"],\n \"On a mobile phone\": [\"\"],\n \"Scan the QR code with your mobile device.\": [\"\"],\n \"There is an operation already\": [\"\"],\n \"Complete or cancel the operation in\": [\"Abhebung best\u00E4tigen\"],\n \"Server responded with an invalid withdraw URI\": [\"\"],\n \"Withdraw URI: %1$s\": [\"\"],\n \"The operation was rejected due to insufficient funds\": [\"\"],\n \"Prepare your wallet\": [\"\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\"\"],\n \"You need a GNU Taler Wallet\": [\"\"],\n \"If you don't have one yet you can follow the instruction in\": [\"\"],\n \"Send money\": [\"\"],\n \"to a %1$s wallet\": [\"\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"\",\n ],\n \"operation ready\": [\"\"],\n \"to another bank account\": [\"\"],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"\",\n ],\n \"Transfer details\": [\"\"],\n \"This is a demo bank\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\"\"],\n \"Pending account delete operation\": [\"\"],\n \"Pending account update operation\": [\"\"],\n \"Pending password update operation\": [\"\"],\n \"Pending transaction operation\": [\"\"],\n \"Pending withdrawal operation\": [\"\"],\n \"Pending cashout operation\": [\"\"],\n \"You can complete or cancel the operation in\": [\"\"],\n \"Download bank stats\": [\"\"],\n \"Include hour metric\": [\"\"],\n \"Include day metric\": [\"\"],\n \"Include month metric\": [\"\"],\n \"Include year metric\": [\"\"],\n \"Include table header\": [\"\"],\n \"Add previous metric for compare\": [\"\"],\n \"Fail on first error\": [\"\"],\n Download: [\"\"],\n \"downloading... %1$s\": [\"\"],\n \"Download completed\": [\"\"],\n \"click here to save the file in your computer\": [\"\"],\n \"Challenge not found.\": [\"\"],\n \"This user is not authorized to complete this challenge.\": [\"\"],\n \"Too many attemps, try another code.\": [\"\"],\n \"The confirmation code is wrong, try again.\": [\"\"],\n \"The operation expired.\": [\"\"],\n \"The operation failed.\": [\"\"],\n \"The operation needs another confirmation to complete.\": [\"\"],\n \"Account delete\": [\"\"],\n \"Account update\": [\"\"],\n \"Password update\": [\"\"],\n \"Wire transfer\": [\"\"],\n Withdrawal: [\"Abhebung best\u00E4tigen\"],\n \"Confirm the operation\": [\"Abhebung best\u00E4tigen\"],\n \"Send again\": [\"\"],\n \"Send code\": [\"\"],\n \"Operation details\": [\"\"],\n \"Challenge details\": [\"\"],\n \"Sent at\": [\"\"],\n \"To phone\": [\"\"],\n \"To email\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"de\",\n completeness: 4,\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Codec,\n buildCodecForObject,\n canonicalizeBaseUrl,\n codecForBoolean,\n codecForMap,\n codecForString,\n codecOptional,\n} from \"@gnu-taler/taler-util\";\n\nexport interface BankUiSettings {\n // Where libeufin backend is localted\n // default: window.origin without \"webui/\"\n backendBaseURL?: string;\n // Shows a button \"create random account\" in the registration form\n // Useful for testing\n // default: false\n allowRandomAccountCreation?: boolean;\n // Create all random accounts with password \"123\"\n // Useful for testing\n // default: false\n simplePasswordForRandomAccounts?: boolean;\n // URL where the user is going to be redirected after\n // clicking in Taler Logo\n // default: home page\n iconLinkURL?: string;\n // Mapping for every link shown in the top navitation bar\n // - key: link label, what the user will read\n // - value: link target, where the user is going to be redirected\n // default: empty list\n topNavSites?: Record<string, string>;\n}\n\n/**\n * Global settings for the bank UI.\n */\nconst defaultSettings: BankUiSettings = {\n backendBaseURL: buildDefaultBackendBaseURL(),\n iconLinkURL: undefined,\n simplePasswordForRandomAccounts: false,\n allowRandomAccountCreation: false,\n topNavSites: {},\n};\n\nconst codecForBankUISettings = (): Codec<BankUiSettings> =>\n buildCodecForObject<BankUiSettings>()\n .property(\"backendBaseURL\", codecOptional(codecForString()))\n .property(\"allowRandomAccountCreation\", codecOptional(codecForBoolean()))\n .property(\n \"simplePasswordForRandomAccounts\",\n codecOptional(codecForBoolean()),\n )\n .property(\"iconLinkURL\", codecOptional(codecForString()))\n .property(\"topNavSites\", codecOptional(codecForMap(codecForString())))\n .build(\"BankUiSettings\");\n\nfunction removeUndefineField<T extends object>(obj: T): T {\n const keys = Object.keys(obj) as Array<keyof T>;\n return keys.reduce((prev, cur) => {\n if (typeof prev[cur] === \"undefined\") {\n delete prev[cur];\n }\n return prev;\n }, obj);\n}\n\nexport function fetchSettings(listener: (s: BankUiSettings) => void): void {\n fetch(\"./settings.json\")\n .then((resp) => resp.json())\n .then((json) => codecForBankUISettings().decode(json))\n .then((result) =>\n listener({\n ...defaultSettings,\n ...removeUndefineField(result),\n }),\n )\n .catch((e) => {\n console.log(\"failed to fetch settings\", e);\n listener(defaultSettings);\n });\n}\n\nfunction buildDefaultBackendBaseURL(): string | undefined {\n if (typeof window !== \"undefined\") {\n const currentLocation = new URL(\n window.location.pathname,\n window.location.origin,\n ).href;\n /**\n * By default, bank backend serves the html content\n * from the /webui root.\n */\n return canonicalizeBaseUrl(currentLocation.replace(\"/webui\", \"\"));\n }\n throw Error(\"No default URL\");\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { App } from \"./app.js\";\nimport { h, render } from \"preact\";\nimport \"./scss/main.css\";\n\nconst app = document.getElementById(\"app\");\n\nif (app) {\n render(<App />, app);\n} else {\n console.error(\"HTML element with id 'app' not found.\");\n}\n"],
- "mappings": "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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,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,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EACvB,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,gBAAgB;EACvB,GAAG,IAAI,aAAa;EACpB,GAAG,IAAI,aAAa;EACpB,GAAG,IAAI,uBAAuB;EAC9B,GAAG,IAAI,uBAAuB;EAC9B,GAAG,IAAI,kBAAkB;EACzB,GAAG,IAAI,uBAAuB;EAC9B,GAAG,IAAI,4BAA4B;AACrC;AO3GA,IAAIC,wBAAuB;EACzB,kBAAkB;IAChB,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,UAAU;IACR,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;IACZ,iBAAiB;EACnB;EACA,kBAAkB;IAChB,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,UAAU;IACR,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,OAAO;IACL,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,cAAc;IACZ,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,SAAS;IACP,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,YAAY;IACV,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,cAAc;IACZ,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;AACF;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,SAAS;AAClE,MAAI;AACJ,MAAI,aAAa,YAAY,QAAQ,YAAY,UAAU,QAAQ,YAAYD,sBAAqB,KAAK,EAAE,kBAAkBA,sBAAqB,KAAK,EAAE;AAEzJ,MAAI,OAAO,eAAe,UAAU;AAClC,aAAS;EACX,WAAW,UAAU,GAAG;AACtB,aAAS,WAAW;EACtB,OAAO;AACL,aAAS,WAAW,MAAM,QAAQ,aAAa,OAAO,KAAK,CAAC;EAC9D;AAEA,MAAI,YAAY,QAAQ,YAAY,UAAU,QAAQ,WAAW;AAC/D,QAAI,QAAQ,cAAc,QAAQ,aAAa,GAAG;AAChD,aAAO,QAAQ;IACjB,OAAO;AACL,aAAO,SAAS;IAClB;EACF;AAEA,SAAO;AACT;AAEA,IAAOE,0BAAQD;AClLf,IAAIE,eAAc;EAChB,MAAM;;EAEN,MAAM;;EAEN,QAAQ;;EAER,OAAO;;AAET;AACA,IAAIC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,mBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,cAAa;EACf,MAAM,kBAAkB;IACtB,SAASH;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAASC;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAASC;IACT,cAAc;EAChB,CAAC;AACH;AACA,IAAOE,sBAAQD;ACtCf,IAAIE,wBAAuB;EACzB,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,WAAW,UAAU;AAC9E,SAAOD,sBAAqB,KAAK;AACnC;AAEA,IAAOE,0BAAQD;ACZf,IAAIE,aAAY;EACd,QAAQ,CAAC,UAAU,QAAQ;EAC3B,aAAa,CAAC,UAAU,QAAQ;EAChC,MAAM,CAAC,gBAAgB,eAAe;AACxC;AACA,IAAIC,iBAAgB;EAClB,QAAQ,CAAC,KAAK,KAAK,KAAK,GAAG;EAC3B,aAAa,CAAC,MAAM,MAAM,MAAM,IAAI;EACpC,MAAM,CAAC,cAAc,cAAc,cAAc,YAAY;AAC/D;AAKA,IAAIC,eAAc;EAChB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EACnE,aAAa,CAAC,OAAO,OAAO,UAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAChG,MAAM,CAAC,UAAU,WAAW,WAAQ,SAAS,OAAO,QAAQ,QAAQ,UAAU,aAAa,WAAW,YAAY,UAAU;AAC9H;AAEA,IAAI,wBAAwB;EAC1B,QAAQA,aAAY;EACpB,aAAa,CAAC,QAAQ,QAAQ,WAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;EAC3G,MAAMA,aAAY;AACpB;AACA,IAAIC,aAAY;EACd,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EAC1C,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EAChD,aAAa,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC7D,MAAM,CAAC,WAAW,UAAU,YAAY,YAAY,cAAc,WAAW,SAAS;AACxF;AAEA,IAAIC,mBAAkB;EACpB,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAIC,6BAA4B;EAC9B,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AAEA,IAAIC,iBAAgB,SAASA,eAAc,aAAa;AACtD,MAAI,SAAS,OAAO,WAAW;AAC/B,SAAO,SAAS;AAClB;AAEA,IAAIC,YAAW;EACb,eAAeD;EACf,KAAK,gBAAgB;IACnB,QAAQN;IACR,cAAc;EAChB,CAAC;EACD,SAAS,gBAAgB;IACvB,QAAQC;IACR,cAAc;IACd,kBAAkB,SAASO,kBAAiB,SAAS;AACnD,aAAO,UAAU;IACnB;EACF,CAAC;EACD,OAAO,gBAAgB;IACrB,QAAQN;IACR,kBAAkB;IAClB,cAAc;EAChB,CAAC;EACD,KAAK,gBAAgB;IACnB,QAAQC;IACR,cAAc;EAChB,CAAC;EACD,WAAW,gBAAgB;IACzB,QAAQC;IACR,cAAc;IACd,kBAAkBC;IAClB,wBAAwB;EAC1B,CAAC;AACH;AACA,IAAOI,oBAAQF;AClIf,IAAIG,6BAA4B;AAChC,IAAIC,6BAA4B;AAChC,IAAIC,oBAAmB;EACrB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,KAAK,CAAC,OAAO,KAAK;AACpB;AACA,IAAIC,wBAAuB;EACzB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,wBAAuB;EACzB,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI;AAC9B;AACA,IAAIC,sBAAqB;EACvB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,sBAAqB;EACvB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC3F,KAAK,CAAC,WAAW,OAAO,SAAS,QAAQ,SAAS,SAAS,SAAS,QAAQ,OAAO,OAAO,OAAO,KAAK;AACxG;AACA,IAAIC,oBAAmB;EACrB,QAAQ;EACR,OAAO;EACP,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,KAAK,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,MAAM;AAC7D;AACA,IAAIC,0BAAyB;EAC3B,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,0BAAyB;EAC3B,KAAK;IACH,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;;IAEX,SAAS;IACT,OAAO;;EAET;AACF;AACA,IAAIC,SAAQ;EACV,eAAe,oBAAoB;IACjC,cAAcZ;IACd,cAAcC;IACd,eAAe,SAASY,eAAc,OAAO;AAC3C,aAAO,SAAS,KAAK;IACvB;EACF,CAAC;EACD,KAAK,aAAa;IAChB,eAAeX;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,SAAS,aAAa;IACpB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;IACnB,eAAe,SAASQ,eAAc,OAAO;AAC3C,aAAO,QAAQ;IACjB;EACF,CAAC;EACD,OAAO,aAAa;IAClB,eAAeP;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,KAAK,aAAa;IAChB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,WAAW,aAAa;IACtB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;AACH;AACA,IAAOG,iBAAQF;ACjFf,IAAIG,UAAS;EACX,MAAM;EACN,gBAAgBlC;EAChB,YAAYK;EACZ,gBAAgBG;EAChB,UAAUU;EACV,OAAOe;EACP,SAAS;IACP,cAAc;IAGd,uBAAuB;EACzB;AACF;AACA,IAAO,aAAQC;AC/Bf,IAAIjC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,mBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,cAAa;EACf,MAAM,kBAAkB;IACtB,SAASH;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAASC;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAASC;IACT,cAAc;EAChB,CAAC;AACH;AACA,IAAOE,sBAAQD;ACnBf,IAAI8B,UAAS;EACX,MAAM;EACN,gBAAgB;EAChB,YAAY7B;EACZ,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,SAAS;IACP,cAAc;IAGd,uBAAuB;EACzB;AACF;AACA,IAAO,gBAAQ6B;AC5Bf,IAAIpC,wBAAuB;EACzB,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;EACb,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,OAAO;IACL,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;EACA,SAAS;IACP,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,YAAY;IACV,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;AACF;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,SAAS;AAClE,MAAI;AACJ,MAAI,aAAaD,sBAAqB,KAAK;AAE3C,MAAI,OAAO,eAAe,UAAU;AAClC,aAAS;EACX,WAAW,UAAU,GAAG;AACtB,aAAS,WAAW;EACtB,OAAO;AACL,aAAS,WAAW,MAAM,QAAQ,aAAa,MAAM,SAAS,CAAC;EACjE;AAEA,MAAI,YAAY,QAAQ,YAAY,UAAU,QAAQ,WAAW;AAC/D,QAAI,QAAQ,cAAc,QAAQ,aAAa,GAAG;AAChD,aAAO,QAAQ;IACjB,OAAO;AACL,aAAO,UAAU;IACnB;EACF;AAEA,SAAO;AACT;AAEA,IAAOE,0BAAQD;ACtFf,IAAIE,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,mBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,cAAa;EACf,MAAM,kBAAkB;IACtB,SAASH;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAASC;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAASC;IACT,cAAc;EAChB,CAAC;AACH;AACA,IAAOE,sBAAQD;ACjCf,IAAIE,wBAAuB;EACzB,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AACA,IAAI,6BAA6B;EAC/B,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,MAAM,WAAW,UAAU;AAC7E,MAAI,KAAK,YAAY,MAAM,GAAG;AAC5B,WAAO,2BAA2B,KAAK;EACzC,OAAO;AACL,WAAOD,sBAAqB,KAAK;EACnC;AACF;AAEA,IAAOE,0BAAQD;ACxBf,IAAIE,aAAY;EACd,QAAQ,CAAC,MAAM,IAAI;EACnB,aAAa,CAAC,MAAM,IAAI;EACxB,MAAM,CAAC,mBAAmB,sBAAmB;AAC/C;AACA,IAAIC,iBAAgB;EAClB,QAAQ,CAAC,KAAK,KAAK,KAAK,GAAG;EAC3B,aAAa,CAAC,MAAM,MAAM,MAAM,IAAI;EACpC,MAAM,CAAC,mBAAgB,mBAAgB,mBAAgB,iBAAc;AACvE;AACA,IAAIC,eAAc;EAChB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EACnE,aAAa,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAChG,MAAM,CAAC,SAAS,WAAW,SAAS,SAAS,QAAQ,SAAS,SAAS,UAAU,cAAc,WAAW,aAAa,WAAW;AACpI;AACA,IAAIC,aAAY;EACd,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EAC1C,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAI;EAChD,aAAa,CAAC,OAAO,OAAO,OAAO,UAAO,OAAO,OAAO,QAAK;EAC7D,MAAM,CAAC,WAAW,SAAS,UAAU,gBAAa,UAAU,WAAW,WAAQ;AACjF;AACA,IAAIC,mBAAkB;EACpB,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAIC,6BAA4B;EAC9B,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AAEA,IAAIC,iBAAgB,SAASA,eAAc,aAAa,UAAU;AAChE,MAAI,SAAS,OAAO,WAAW;AAC/B,SAAO,SAAS;AAClB;AAEA,IAAIC,YAAW;EACb,eAAeD;EACf,KAAK,gBAAgB;IACnB,QAAQN;IACR,cAAc;EAChB,CAAC;EACD,SAAS,gBAAgB;IACvB,QAAQC;IACR,cAAc;IACd,kBAAkB,SAASO,kBAAiB,SAAS;AACnD,aAAO,OAAO,OAAO,IAAI;IAC3B;EACF,CAAC;EACD,OAAO,gBAAgB;IACrB,QAAQN;IACR,cAAc;EAChB,CAAC;EACD,KAAK,gBAAgB;IACnB,QAAQC;IACR,cAAc;EAChB,CAAC;EACD,WAAW,gBAAgB;IACzB,QAAQC;IACR,cAAc;IACd,kBAAkBC;IAClB,wBAAwB;EAC1B,CAAC;AACH;AACA,IAAOI,oBAAQF;ACtHf,IAAIG,6BAA4B;AAChC,IAAIC,6BAA4B;AAChC,IAAIC,oBAAmB;EACrB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,KAAK,CAAC,QAAQ,MAAM;EACpB,MAAM,CAAC,gDAAgD,uCAAuC;AAChG;AACA,IAAIC,wBAAuB;EACzB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,wBAAuB;EACzB,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI;AAC9B;AACA,IAAIC,sBAAqB;EACvB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,sBAAqB;EACvB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC3F,KAAK,CAAC,QAAQ,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,OAAO;AACjH;AACA,IAAIC,oBAAmB;EACrB,QAAQ;EACR,OAAO;EACP,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EACxD,KAAK,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAC9D;AACA,IAAIC,0BAAyB;EAC3B,QAAQ;EACR,KAAK;AACP;AACA,IAAIC,0BAAyB;EAC3B,KAAK;IACH,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAIC,SAAQ;EACV,eAAe,oBAAoB;IACjC,cAAcZ;IACd,cAAcC;IACd,eAAe,SAASY,eAAc,OAAO;AAC3C,aAAO,SAAS,OAAO,EAAE;IAC3B;EACF,CAAC;EACD,KAAK,aAAa;IAChB,eAAeX;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,SAAS,aAAa;IACpB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;IACnB,eAAe,SAASQ,eAAc,OAAO;AAC3C,aAAO,QAAQ;IACjB;EACF,CAAC;EACD,OAAO,aAAa;IAClB,eAAeP;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,KAAK,aAAa;IAChB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,WAAW,aAAa;IACtB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;AACH;AACA,IAAOG,iBAAQF;AChFf,IAAIG,UAAS;EACX,MAAM;EACN,gBAAgBlC;EAChB,YAAYK;EACZ,gBAAgBG;EAChB,UAAUU;EACV,OAAOe;EACP,SAAS;IACP,cAAc;IAGd,uBAAuB;EACzB;AACF;AACA,IAAO,aAAQC;AChCf,IAAIpC,wBAAuB;EACzB,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;EACb,kBAAkB;IAChB,KAAK;IACL,OAAO;EACT;EACA,UAAU;IACR,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,OAAO;IACL,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;EACA,SAAS;IACP,KAAK;IACL,OAAO;EACT;EACA,aAAa;IACX,KAAK;IACL,OAAO;EACT;EACA,QAAQ;IACN,KAAK;IACL,OAAO;EACT;EACA,YAAY;IACV,KAAK;IACL,OAAO;EACT;EACA,cAAc;IACZ,KAAK;IACL,OAAO;EACT;AACF;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,SAAS;AAClE,MAAI;AACJ,MAAI,OAAOD,sBAAqB,KAAK;AAErC,MAAI,OAAO,SAAS,UAAU;AAC5B,aAAS;EACX,WAAW,UAAU,GAAG;AACtB,aAAS,KAAK;EAChB,OAAO;AACL,aAAS,KAAK,MAAM,QAAQ,aAAa,OAAO,KAAK,CAAC;EACxD;AAEA,MAAI,YAAY,QAAQ,YAAY,UAAU,QAAQ,WAAW;AAC/D,QAAI,QAAQ,cAAc,QAAQ,aAAa,GAAG;AAChD,aAAO,UAAU;IACnB,OAAO;AACL,aAAO,YAAY;IACrB;EACF;AAEA,SAAO;AACT;AAEA,IAAOE,0BAAQD;ACtFf,IAAIE,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,eAAc;EAChB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,mBAAkB;EACpB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,OAAO;AACT;AACA,IAAIC,cAAa;EACf,MAAM,kBAAkB;IACtB,SAASH;IACT,cAAc;EAChB,CAAC;EACD,MAAM,kBAAkB;IACtB,SAASC;IACT,cAAc;EAChB,CAAC;EACD,UAAU,kBAAkB;IAC1B,SAASC;IACT,cAAc;EAChB,CAAC;AACH;AACA,IAAOE,sBAAQD;ACjCf,IAAIE,wBAAuB;EACzB,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,OAAO;AACT;AAEA,IAAIC,kBAAiB,SAASA,gBAAe,OAAO,OAAO,WAAW,UAAU;AAC9E,SAAOD,sBAAqB,KAAK;AACnC;AAEA,IAAOE,0BAAQD;ACZf,IAAIE,aAAY;EACd,QAAQ,CAAC,YAAY,UAAU;EAC/B,aAAa,CAAC,YAAY,UAAU;EACpC,MAAM,CAAC,yBAAsB,0BAAoB;AACnD;AACA,IAAIC,iBAAgB;EAClB,QAAQ,CAAC,MAAM,MAAM,MAAM,IAAI;EAC/B,aAAa,CAAC,aAAa,iBAAc,iBAAc,eAAY;EACnE,MAAM,CAAC,iBAAiB,qBAAkB,qBAAkB,mBAAgB;AAC9E;AACA,IAAIC,eAAc;EAChB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EACnE,aAAa,CAAC,SAAS,YAAS,QAAQ,QAAQ,OAAO,QAAQ,SAAS,WAAQ,SAAS,QAAQ,QAAQ,SAAM;EAC/G,MAAM,CAAC,WAAW,cAAW,QAAQ,SAAS,OAAO,QAAQ,WAAW,WAAQ,aAAa,WAAW,YAAY,aAAU;AAChI;AACA,IAAIC,aAAY;EACd,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EAC1C,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EAChD,aAAa,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;EACpE,MAAM,CAAC,YAAY,SAAS,SAAS,YAAY,SAAS,YAAY,QAAQ;AAChF;AACA,IAAIC,mBAAkB;EACpB,QAAQ;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,aAAa;IACX,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;EACA,MAAM;IACJ,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AAEA,IAAIE,iBAAgB,SAASA,eAAc,aAAa,SAAS;AAC/D,MAAI,SAAS,OAAO,WAAW;AAC/B,MAAI,OAAO,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ;AACrE,MAAI,WAAW;AAAG,WAAO;AACzB,MAAI,gBAAgB,CAAC,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAC/D,MAAI;AAEJ,MAAI,WAAW,GAAG;AAChB,aAAS,QAAQ,cAAc,SAAS,IAAI,IAAI,WAAQ;EAC1D,OAAO;AACL,aAAS;EACX;AAEA,SAAO,SAAS;AAClB;AAEA,IAAIC,YAAW;EACb,eAAeD;EACf,KAAK,gBAAgB;IACnB,QAAQN;IACR,cAAc;EAChB,CAAC;EACD,SAAS,gBAAgB;IACvB,QAAQC;IACR,cAAc;IACd,kBAAkB,SAASO,kBAAiB,SAAS;AACnD,aAAO,UAAU;IACnB;EACF,CAAC;EACD,OAAO,gBAAgB;IACrB,QAAQN;IACR,cAAc;EAChB,CAAC;EACD,KAAK,gBAAgB;IACnB,QAAQC;IACR,cAAc;EAChB,CAAC;EACD,WAAW,gBAAgB;IACzB,QAAQC;IACR,cAAc;EAChB,CAAC;AACH;AACA,IAAOK,oBAAQF;AC/Ff,IAAIG,6BAA4B;AAChC,IAAIC,6BAA4B;AAChC,IAAIC,oBAAmB;EACrB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,KAAK,CAAC,QAAQ,MAAM;AACtB;AACA,IAAIC,wBAAuB;EACzB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,wBAAuB;EACzB,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI;AAC9B;AACA,IAAIC,sBAAqB;EACvB,QAAQ;EACR,aAAa;EACb,MAAM;AACR;AACA,IAAIC,sBAAqB;EACvB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EAC3F,KAAK,CAAC,QAAQ,OAAO,SAAS,QAAQ,QAAQ,UAAU,UAAU,QAAQ,OAAO,OAAO,OAAO,KAAK;AACtG;AACA,IAAIC,oBAAmB;EACrB,QAAQ;EACR,OAAO;EACP,aAAa;EACb,MAAM;AACR;AACA,IAAIC,oBAAmB;EACrB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;EACxD,KAAK,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAC9D;AACA,IAAIC,0BAAyB;EAC3B,QAAQ;EACR,KAAK;AACP;AACA,IAAIC,0BAAyB;EAC3B,KAAK;IACH,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;EACT;AACF;AACA,IAAIC,SAAQ;EACV,eAAe,oBAAoB;IACjC,cAAcZ;IACd,cAAcC;IACd,eAAe,SAASY,eAAc,OAAO;AAC3C,aAAO,SAAS,KAAK;IACvB;EACF,CAAC;EACD,KAAK,aAAa;IAChB,eAAeX;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,SAAS,aAAa;IACpB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;IACnB,eAAe,SAASQ,eAAc,OAAO;AAC3C,aAAO,QAAQ;IACjB;EACF,CAAC;EACD,OAAO,aAAa;IAClB,eAAeP;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,KAAK,aAAa;IAChB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;EACD,WAAW,aAAa;IACtB,eAAeC;IACf,mBAAmB;IACnB,eAAeC;IACf,mBAAmB;EACrB,CAAC;AACH;AACA,IAAOG,iBAAQF;AClFf,IAAIG,UAAS;EACX,MAAM;EACN,gBAAgBlC;EAChB,YAAYK;EACZ,gBAAgBG;EAChB,UAAUU;EACV,OAAOe;EACP,SAAS;IACP,cAAc;IAGd,uBAAuB;EACzB;AACF;AACA,IAAO,aAAQC;AtHUf,IAAM,gBAAgB;EACpB,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;AACN;AAEA,IAAM,UAAgB;EACpB,MAAM;EACN;EACA,gBAAgB,MAAM;EAEtB;EACA;EACA,YAAY;EACZ,cAAc;IACZ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;EACN;AACF;AACA,IAAMC,WAAUC,EAAoB,OAAO;AAWpC,IAAM,sBAAsB,CAAC;EAClC,SAAAC;EACA;EACA;EACA;EACA,cAAc;AAChB,MAAoB;AAClB,QAAM,eAAe;IACnB,IAAI;IACJ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;IAC5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;IAC5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;IAC5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;IAC5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI;EAC9E;AACA,QAAM,EAAE,OAAO,MAAM,QAAQ,eAAe,IAAI,QAAQA,WAAS,YAAY;AAE7EC,EAAAA,GAAU,MAAM;AACd,QAAI,WAAW;AACb,qBAAe,SAAS;IAC1B;EACF,CAAC;AACDA,EAAAA,GAAU,MAAM;AACd,cAAU,MAAM,MAAM;EACxB,GAAG,CAAC,IAAI,CAAC;AACT,MAAI,WAAW;AACb,cAAU,WAAW,MAAM;EAC7B,OAAO;AACL,cAAU,MAAM,MAAM;EACxB;AAEA,QAAM,aAAa,SAAS,OAAO,aACjC,SAAS,OAAO,aACd,SAAS,OAAO,aACd;AAEN,SAAOC,EAAEJ,SAAQ,UAAU;IACzB,OAAO,EAAE,MAAM,gBAAgB,eAAe,MAAM,YAAY,aAAa;IAC7E;EACF,CAAC;AACH;AAEO,IAAM,wBAAwB,MAAYK,GAAWL,QAAO;AwHhG5D,IAAM,iBAAN,MAA4B;EAEjC,cAAc;AADd,SAAQ,YAAY,IAAI,MAAuB;AAE7C,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;EAC3C;EACA,OAAO,MAAa;AAClB,SAAK,UAAU,QAAQ,CAAC,aAAa,SAAS,IAAI,CAAC;EACrD;EACA,UAAU,MAAoC;AAC5C,SAAK,UAAU,KAAK,IAAI;AACxB,WAAO,MAAM;AACX,WAAK,UAAU,QAAQ,CAAC,UAAU,UAAU;AAC1C,YAAI,aAAa,MAAM;AACrB,eAAK,UAAU,OAAO,OAAO,CAAC;QAChC;MACF,CAAC;IACH;EACF;AACF;ADeA,IAAM,cAAcC,EAA+B,MAAS;AAErD,IAAM,wBAAwB,MACnCI,GAAW,WAAW;AAiBxB,IAAM,2BAA2B;AAE1B,IAAM,kBAAkB,CAAC;EAC9B;EACA;EACA;EACA,WAAW,CAAC;AACd,MAKa;AACX,QAAM,CAAC,SAAS,UAAU,IACxBC,GAAgD;AAClD,QAAM,EAAE,MAAAC,MAAK,IAAI,sBAAsB;AAEvC,QAAM,EAAE,iBAAiB,SAAAC,UAAS,KAAK,eAAe,WAAW,IAC/D,mBAAmB,SAAS,QAAQ;AAEtCL,EAAAA,GAAU,MAAM;AACd,QAAI,eAAe;AACnB,mBAAe,aAA4B;AACzC,UAAI;AACF,cAAM,SAAS,MAAM,gBAAgB;AACrC,YAAI,eAAe,QAAQK,UAAS,OAAO,OAAO,GAAG;AACnD,qBAAW,EAAE,MAAM,MAAM,QAAQ,OAAO,CAAC,EAAE,CAAC;QAC9C,OAAO;AACL,qBAAW;YACT,MAAM;YACN,QAAQ;YACR,WAAWA;UACb,CAAC;QACH;MACF,SAASC,QAAO;AACd,YAAIA,kBAAiBC,YAAY;AAC/B,cAAI,cAAc;AAChB,uBAAW,MAAM;AACf,yBAAW;YACb,GAAG,wBAAwB;UAC7B;AACA,qBAAW,EAAE,MAAM,SAAS,OAAAD,OAAM,CAAC;QACrC,OAAO;AACL,qBAAW,EAAE,MAAM,SAAS,OAAOC,WAAW,cAAcD,MAAK,EAAE,CAAC;QACtE;MACF;IACF;AACA,eAAW;AACX,WAAO,MAAM;AAEX,qBAAe;IACjB;EACF,GAAG,CAAC,CAAC;AAEL,MAAI,YAAY,QAAW;AACzB,WAAOL,EAAE,cAAc;MACrB,UAAUA,EAAE,OAAO,CAAC,GAAG,uCAAuC;IAChE,CAAC;EACH;AACA,MAAI,QAAQ,SAAS,SAAS;AAC5B,WAAOA,EAAE,cAAc;MACrB,UAAUA,EAAE,cAAc,EAAE,OAAO,QAAQ,OAAO,YAAY,KAAK,CAAC;IACtE,CAAC;EACH;AACA,MAAI,QAAQ,SAAS,gBAAgB;AACnC,WAAOA,EAAE,cAAc;MACrB,UAAUA;QACR;QACA,CAAC;QACDG,MAAK,8DAA8D,QAAQ,SAAS,sBAAsB,QAAQ,OAAO,OAAO;MAClI;IACF,CAAC;EACH;AAEA,QAAM,QAAyB;IAC7B,KAAK;IACL,QAAQ,QAAQ;IAChB;IACA;IACA;IACA,OAAO,QAAQ;EACjB;AACA,SAAOH,EAAE,YAAY,UAAU;IAC7B;IACA;EACF,CAAC;AACH;AAEA,SAAS,mBACP,KACA,UAC6C;AAC7C,QAAM,YAAY,IAAI,oBAAoB;IACxC,kBAAkB;IAClB,YAAY;EACd,CAAC;AACD,QAAM,UAAU,IAAI,eAAmC;AACvD,QAAM,UAAU,IAAI,4BAA4B,WAAW;IACzD,QAAQ,IAAI;AACV,cAAQ,OAAO,EAAE;IACnB;EACF,CAAC;AAED,QAAM,OAAO,IAAI,wBAAwB,IAAI,MAAM,SAAS,SAAS,IAAI;AACzE,QAAM,aAAa,IAAI;IACrB,KAAK,qBAAqB,EAAE;IAC5B;IACA,SAAS;EACX;AACA,QAAM,OAAO,CAAC,SACZ,IAAI;IACF,KAAK,qBAAqB,IAAI,EAAE;IAChC;EACF;AAEF,iBAAe,kBAAoD;AACjE,UAAM,OAAO,MAAM,KAAK,UAAU;AAClC,QAAI,KAAK,SAAS,QAAQ;AACxB,YAAMM,WAAW,oBAAoB,KAAK,MAAM;IAClD;AACA,WAAO,KAAK;EACd;AAEA,SAAO;IACL;IACA,SAAS,KAAK;IACd,KAAK;MACH;MACA;MACA;IACF;IACA,YAAY,QAAQ;IACpB,eAAe,QAAQ;EACzB;AACF;AErJA,IAAM,kBAAkBC,EAAmC,MAAS;ACxC7D,SAAS,mBACd,UACyB;AACzB,QAAM,WAAW,OAAO,KAAK,QAAkB;AAC/C,QAAM,EAAE,MAAM,OAAO,IAAI,qBAAqB;AAE9C,SAAO,UAAU,UAAU,UAAU,MAAM,MAAM;AACnD;AAeA,IAAMC,WAAUC,EAAoB,MAAS;AAEtC,IAAM,uBAAuB,MAAYC,GAAWF,QAAO;AAElE,SAAS,6BAA6B;AACpC,QAAM,OACJ,OAAO,WAAW,cAAc,OAAO,SAAS,KAAK,UAAU,CAAC,IAAI;AACtE,QAAM,SAAiC,CAAC;AACxC,MAAI,OAAO,WAAW,aAAa;AACjC,eAAW,CAAC,KAAK,KAAK,KAAK,IAAI,gBAAgB,OAAO,SAAS,MAAM,GAAG;AACtE,aAAO,GAAG,IAAI;IAChB;EACF;AACA,SAAO,EAAE,MAAM,OAAO;AACxB;AAEA,IAAM,EAAE,MAAM,aAAa,QAAQ,cAAc,IAC/C,2BAA2B;AAM7B,IAAM,oBAAoB;AAEnB,IAAM,gCAAgC,CAAC;EAC5C;AACF,MAEa;AACX,QAAM,CAAC,EAAE,MAAM,OAAO,GAAG,QAAQ,IAAIG,GAAS;IAC5C,MAAM;IACN,QAAQ;EACV,CAAC;AACD,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM;MACJ;IACF;EACF;AACA,WAAS,WAAWC,OAAc;AAChC,UAAM,EAAE,QAAAC,QAAO,IAAI,2BAA2B;AAC9C,aAAS,EAAE,MAAAD,OAAM,QAAAC,QAAO,CAAC;AACzB,WAAO,SAAS,OAAOD;EACzB;AAEAE,EAAAA,GAAU,MAAM;AACd,aAAS,gBAAgB;AACvB,eAAS,2BAA2B,CAAC;IACvC;AACA,WAAO,iBAAiB,mBAAmB,aAAa;AACxD,WAAO,MAAM;AACX,aAAO,oBAAoB,mBAAmB,aAAa;IAC7D;EACF,GAAG,CAAC,CAAC;AACL,SAAOC,EAAEP,SAAQ,UAAU;IACzB,OAAO,EAAE,MAAM,QAAQ,WAAW;IAClC;EACF,CAAC;AACH;AC5EA,SAAS,kBAAkB,KAAe,YAAyB;AACjE,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,aAAa,QAAQ,WAAW;AACrC,OAAK,aAAa,WAAW,kBAAkB,GAAG,CAAC;AAEnD,WAAS,KAAK,YAAY,IAAI;AAE9B,MAAI,cAAc;AAClB,SAAO,iBAAiB,gBAAgB,MAAM;AAC5C,kBAAc;EAChB,CAAC;AACD,aAAW,MAAM;AACf,QAAI,CAAC,eAAe,YAAY;AAC9B,iBAAW;IACb;EACF,GAAG,EAAE;AACP;AAYA,IAAMA,WAAUC,EAAoB,MAAS;AAEtC,IAAM,+BAA+B,MAAYC,GAAWF,QAAO;AAEnE,IAAM,wCAAwC,CAAC;EACpD;AACF,MAEa;AACX,QAAM,QAAc;IAClB,oBAAoB;EACtB;AACA,SAAOO,EAAEP,SAAQ,UAAU;IACzB;IACA;EACF,CAAC;AACH;ACrEA,IAAA,gBAAA,CAAA;AAAAQ,UAAA,eAAA;EAAA,SAAA,MAAA;EAAA,WAAA,MAAA;EAAA,wBAAA,MAAA;AAAA,CAAA;AAUO,SAAS,QACd,MACA,SACqB;AAErB,WAAS,SAAS,WAAqD;AACrE,aAAS,oBAA2B;AAClC,YAAM,QAAQ,UAAU;AAExB,UAAI,OAAO,UAAU,YAAY;AAC/B,cAAM,eAAe,SAAS,KAAK;AACnC,eAAO,EAAc,cAAc,CAAC,CAAC;MACvC;AAEA,YAAM,aAAa,MAAM;AACzB,YAAM,gBAAgB,QAAQ,UAAU;AACxC,aAAO,EAAc,eAAe,KAAK;IAC3C;AAEA,WAAO;EACT;AAEA,SAAO,CAACC,OAAa;AACnB,UAAMC,MAAI,SAAS,MAAM,KAAKD,EAAC,CAAC;AAChC,WAAOC,IAAE;EACX;AACF;AAEO,SAAS,UACd,MACqB;AAErB,WAAS,SAAS,WAAqD;AACrE,aAAS,oBAA2B;AAClC,YAAM,QAAQ,UAAU;AAExB,UAAI,OAAO,UAAU,YAAY;AAC/B,cAAM,eAAe,SAAS,KAAK;AACnC,eAAO,EAAc,cAAc,CAAC,CAAC;MACvC;AAEA,aAAO;IACT;AAEA,WAAO;EACT;AAEA,SAAO,CAACD,OAAa;AACnB,UAAMC,MAAI,SAAS,MAAM,KAAKD,EAAC,CAAC;AAChC,WAAOC,IAAE;EACX;AACF;AASO,SAAS,uBAA0B,KAAW;AAEnD,SAAO,eAAe,IAAI,SAAS,gBAAgB;AACjD,YAAQ,GAAG;EACb;AACA,SAAO;AACT;AACA,SAAS,QAAQ,KAAU;AACzB,MAAI,CAAC;AAAK;AACV,MAAI,IAAI,OAAO,IAAI,IAAI,KAAK;AAC1B,UAAM,gBAAgB,IAAI,IAAI,YAAY;AAC1C,UAAM,YAAY,IAAI,IAAI;AAC1B,UAAM,YAAY,UAAU;AAC5B,YAAQ,IAAI,kBAAkB,aAAa;AAC3C,cAAU,QAAQ,CAAC,SAAS;AAC1B,YAAM,EAAE,IAAI,OAAO,GAAG,SAAS,KAAK,SAAS,KAAK,KAAK,IAAI;AAC3D,UAAI,OAAO,YAAY,aAAa;AAClC,cAAM,EAAE,KAAK,UAAU,IAAI;AAC3B,gBAAQ,IAAI,YAAY,WAAW,IAAI;MACzC,WAAW,OAAO,YAAY,YAAY;AACxC,gBAAQ,IAAI,SAAS,OAAO,SAAS,IAAI;MAC3C,WAAW,OAAO,UAAU,YAAY;AACtC,cAAM,aAAa,MAAM;AACzB,gBAAQ,IAAI,WAAW,YAAY,SAAS,IAAI;MAClD,WAAW,OAAO,MAAM,YAAY,aAAa;AAC/C,cAAM,MAAM,MAAM;AAClB,gBAAQ,IAAI,QAAQ,eAAe,UAAU,IAAI,YAAY,GAAG;MAClE,WAAW,iBAAiB,OAAO;AACjC,gBAAQ,IAAI,UAAU,MAAM,CAAC,CAAC;MAChC,OAAO;AACL,gBAAQ,IAAI,IAAI;MAClB;IACF,CAAC;EACH;AACA,QAAM,WAAW,IAAI;AACrB,MAAI,oBAAoB,OAAO;AAC7B,aAAS,QAAQ,CAACC,QAAM,QAAQA,GAAC,CAAC;EACpC,OAAO;AACL,YAAQ,QAAQ;EAClB;AACF;ACpGO,SAAS,UAAU,EAAE,OAAO,QAAQ,OAAO,UAAU,SAAS,UAAUC,SAAS,WAAW,EAAE,GAAiB;AAEpH,SAAOF,kBAAC,OAAA,EAAI,OAAO,mBAAmB,IAAI,kBAAA,GACvC,QAAQ,SAAS,YAAY,SAAYA,kBAAC,SAAA,MAAO;;4CAEV,KAAK,MAAM,QAAQ,OAAO,GAAI,CAAC;;;;;;;;GAQvE,GAGAA,kBAAC,OAAA,EAAI,cAAY,QAAQ,SAAS,WAAW,OAAM,kPAAA,GACjDA,kBAAC,OAAA,EAAI,OAAM,OAAA,GACTA,kBAAC,OAAA,MACE,SAAS,QAAQ,SAChBA,kBAAC,OAAA,EAAI,OAAM,8BAA6B,QAAO,QAAO,SAAQ,aAAY,MAAK,gBAAe,OAAM,4KAAA,IAChG,MAAM;AACN,YAAQ,MAAM;MACZ,KAAK;AACH,eAAOA,kBAAC,QAAA,EAAK,aAAU,WAAU,GAAE,0OAAA,CAA0O;MAC/Q,KAAK;AACH,eAAOA,kBAAC,QAAA,EAAK,aAAU,WAAU,GAAE,4OAAA,CAA4O;MACjR,KAAK;AACH,eAAOA,kBAAC,QAAA,EAAK,aAAU,WAAU,GAAE,uNAAA,CAAuN;MAC5P,KAAK;AACH,eAAOA,kBAAC,QAAA,EAAK,aAAU,WAAU,GAAE,0wBAAA,CAA0wB;MAC/yB;AACE,0BAAkB,IAAI;IAC1B;EACF,GAAG,CACL,CAEJ,GACAA,kBAAC,OAAA,EAAI,OAAM,cAAA,GACTA,kBAAC,MAAA,EAAG,OAAM,sLAAA,GACP,KACH,GACAA,kBAAC,OAAA,EAAI,OAAM,iLAAA,GACR,QACH,CACF,GACC,WACCA,kBAAC,OAAA,MACCA;IAAC;IAAA;MAAO,MAAK;MAAS,OAAM;MAC1B,SAAS,CAACC,QAAM;AACdA,QAAAA,IAAE,eAAe;AACjB,gBAAQ;MACV;IAAA;IAEAD,kBAAC,OAAA,EAAI,OAAM,WAAU,SAAQ,aAAY,MAAK,gBAAe,eAAY,OAAA,GACvEA,kBAAC,QAAA,EAAK,GAAE,+KAAA,CAA+K,CACzL;EACF,CACF,CAEJ,CACF,GACC,QAAQ,SAAS,YAAY,SAC5BA,kBAAC,OAAA,EAAI,OAAM,oOAAA,GACTA,kBAAC,QAAA,EAAK,OAAM,sBAAA,GAAsBA,kBAAC,QAAA,EAAK,OAAM,qNAAA,CAAqN,CAAO,CAC5Q,CAGJ;AACF;AC5EO,SAAS,WAAkB;AAChC,SACEA,kBAAC,OAAA,EAAI,OAAM,8BAA6B,MAAK,QAAO,SAAQ,aAAY,gBAAa,OAAM,QAAO,gBAAe,OAAM,UAAA,GACrHA,kBAAC,QAAA,EAAK,kBAAe,SAAQ,mBAAgB,SAAQ,GAAE,gdAAA,CAAgd,CACzgB;AAEJ;AAEO,SAAS,aAAoB;AAClC,SACEA,kBAAC,OAAA,EAAI,OAAM,8BAA6B,MAAK,QAAO,SAAQ,aAAY,gBAAa,OAAM,QAAO,gBAAe,OAAM,UAAA,GACrHA,kBAAC,QAAA,EAAK,kBAAe,SAAQ,mBAAgB,SAAQ,GAAE,wBAAA,CAAwB,CACjF;AAEJ;AAEO,SAAS,WAAW,EAAE,OAAO,OAAO,UAAU,WAAW,GAAqF;AACnJ,QAAM,CAAC,QAAQ,SAAS,IAAIG,GAAS,KAAK;AAC1C,WAAS,WAAiB;AACxB,QAAI,CAAC,UAAU,aAAa,CAAC,OAAO,iBAAiB;AACnD,YAAM,uDAAuD;IAC/D;AACA,QAAI,UAAU,WAAW;AACvB,gBAAU,UAAU,UAAU,WAAW,KAAK,EAAE;AAChD,gBAAU,IAAI;IAChB;EACF;AACAC,EAAAA,GAAU,MAAM;AACd,QAAI,QAAQ;AACV,iBAAW,MAAM;AACf,kBAAU,KAAK;MACjB,GAAG,GAAI;IACT;EACF,GAAG,CAAC,MAAM,CAAC;AAEX,MAAI,CAAC,QAAQ;AACX,WACEJ,kBAAC,UAAA,EAAO,OAAO,OAAO,SAAS,CAAAC,QAAK;AAClCA,MAAAA,IAAE,eAAe;AACjB,eAAS;IACX,EAAA,GACED,kBAAC,UAAA,IAAS,GACT,QACH;EAEJ;AACA,SACEA,kBAAC,UAAA,EAAO,OAAO,OAAO,UAAQ,KAAA,GAC5BA,kBAAC,YAAA,IAAW,GACX,QACH;AAEJ;ACjCO,SAAS,aAAa,EAAE,OAAAK,QAAO,WAAW,GAAuD;AACtG,QAAM,EAAE,MAAAC,MAAK,IAAI,sBAAsB;AACvC,UAAQD,OAAM,YAAY,MAAM;IAI9B,KAAKE,eAAe,iBAAiB;AACnC,UAAIF,OAAM,aAAaE,eAAe,eAAe,GAAG;AACtD,cAAM,EAAE,eAAe,YAAY,UAAU,IAAIF,OAAM;AACvD,eAAOL,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAOM,MAAK,2DAAA,GACzCD,OAAM,SACN,cACCL,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACR,KAAK,UAAU,EAAE,eAAe,YAAY,UAAU,GAAG,QAAW,CAAC,CACxE,CAEJ;MACF;AACAQ,wBAAkB,CAAU;IAC9B;IACA,KAAKD,eAAe,+BAA+B;AACjD,UAAIF,OAAM,aAAaE,eAAe,6BAA6B,GAAG;AACpE,cAAM,EAAE,eAAe,YAAY,UAAU,IAAIF,OAAM;AACvD,eAAOL,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAOM,MAAK,gCAAA,GACzCD,OAAM,SACN,cACCL,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACR,KAAK,UAAU,EAAE,eAAe,YAAY,UAAU,GAAG,QAAW,CAAC,CACxE,CAEJ;MACF;AACAQ,wBAAkB,CAAU;IAC9B;IACA,KAAKD,eAAe,qCAAqC;AACvD,UAAIF,OAAM,aAAaE,eAAe,mCAAmC,GAAG;AAC1E,cAAM,EAAE,eAAe,YAAY,UAAU,IAAIF,OAAM;AACvD,eAAOL,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAOM,MAAK,2DAAA,GACzCD,OAAM,SACN,cACCL,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACR,KAAK,UAAU,EAAE,eAAe,YAAY,UAAU,GAAG,QAAW,CAAC,CACxE,CAEJ;MACF;AACAQ,wBAAkB,CAAU;IAC9B;IACA,KAAKD,eAAe,+BAA+B;AACjD,UAAIF,OAAM,aAAaE,eAAe,6BAA6B,GAAG;AACpE,cAAM,EAAE,eAAe,YAAY,cAAc,IAAIF,OAAM;AAC3D,eAAOL,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAOM,MAAK,iFAAA,GACzCD,OAAM,SACN,cACCL,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACR,KAAK,UAAU,EAAE,eAAe,YAAY,cAAc,GAAG,QAAW,CAAC,CAC5E,CAEJ;MACF;AACAQ,wBAAkB,CAAU;IAC9B;IACA,KAAKD,eAAe,oCAAoC;AACtD,UAAIF,OAAM,aAAaE,eAAe,kCAAkC,GAAG;AACzE,cAAM,EAAE,eAAe,YAAY,gBAAgB,gBAAgB,IAAIF,OAAM;AAC7E,eAAOL,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAOM,MAAK,+CAAA,GACzCD,OAAM,SACN,cACCL,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACR,KAAK,UAAU,EAAE,eAAe,YAAY,gBAAgB,gBAAgB,GAAG,QAAW,CAAC,CAC9F,CAEJ;MACF;AACAQ,wBAAkB,CAAU;IAC9B;IACA,KAAKD,eAAe,sBAAsB;AACxC,UAAIF,OAAM,aAAaE,eAAe,oBAAoB,GAAG;AAC3D,cAAM,EAAE,eAAe,WAAW,IAAIF,OAAM;AAC5C,eAAOL,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAOM,MAAK,8DAAA,GACzCD,OAAM,SACN,cACCL,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACR,KAAK,UAAU,EAAE,eAAe,WAAW,GAAG,QAAW,CAAC,CAC7D,CAEJ;MACF;AACAQ,wBAAkB,CAAU;IAC9B;IACA,KAAKD,eAAe,iCAAiC;AACnD,UAAIF,OAAM,aAAaE,eAAe,+BAA+B,GAAG;AACtE,cAAM,EAAE,eAAe,YAAY,gBAAgB,cAAc,IAAIF,OAAM;AAC3E,eAAOL,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAOM,MAAK,8BAAA,GACzCD,OAAM,SACN,cACCL,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACR,KAAK,UAAU,EAAE,eAAe,YAAY,gBAAgB,cAAc,GAAG,QAAW,CAAC,CAC5F,CAEJ;MACF;AACAQ,wBAAkB,CAAU;IAC9B;IAWA;AAAS,aAAOR,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAOM,MAAK,sBAAA,GAClDD,OAAM,SACN,cACCL,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACR,KAAK,UAAUK,OAAM,aAAa,QAAW,CAAC,CACjD,CAEJ;EACF;AACF;;AClHA,IAAM,QAAoB;EACxB,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;AACN;AAEA,SAAS,YAAYI,KAAsC;AACzD,MAAI,MAAMA,GAAC;AAAG,WAAO,MAAMA,GAAC;AAC5B,SAAO,OAAOA,GAAC;AACjB;AAEO,SAAS,aAAa,CAAE,GAAc;AAC3C,QAAM,CAAC,cAAc,eAAe,IAAIN,GAAS,KAAK;AACtD,QAAM,EAAE,MAAM,gBAAgB,cAAc,eAAAO,eAAc,IAAI,sBAAsB;AACpF,QAAM,CAAC,QAAQ,SAAS,IAAIP,GAAS,IAAI;AAEzCC,EAAAA,GAAU,MAAM;AACd,aAAS,aAAa,OAAsB;AAC1C,UAAI,MAAM,SAAS;AAAU,kBAAU,IAAI;IAC7C;AACA,aAAS,YAAY,OAAc;AACjC,gBAAU,IAAI;IAChB;AACA,aAAS,KAAK,iBAAiB,SAAS,WAAW;AACnD,aAAS,KAAK,iBAAiB,WAAW,YAAmB;AAC7D,WAAO,MAAM;AACX,eAAS,KAAK,oBAAoB,WAAW,YAAmB;AAChE,eAAS,KAAK,oBAAoB,SAAS,WAAW;IACxD;EACF,GAAG,CAAC,CAAC;AACL,SACEJ,kBAAC,OAAA,MACCA,kBAAC,OAAA,EAAI,OAAM,gBAAA,GACTA;IAAC;IAAA;MAAO,MAAK;MAAS,OAAM;MAAuN,iBAAc;MAAU,iBAAc;MAAO,mBAAgB;MAC9S,SAAS,CAACC,QAAM;AACd,kBAAU,CAAC,MAAM;AACjBA,QAAAA,IAAE,gBAAgB;MACpB;IAAA;IACAD,kBAAC,QAAA,EAAK,OAAM,oBAAA,GACVA,kBAAC,OAAA,EAAI,KAAI,YAAW,OAAM,sCAAqC,KAAK,aAAA,CAAU,GAC9EA,kBAAC,QAAA,EAAK,OAAM,sBAAA,GAAuB,YAAY,IAAI,CAAE,CACvD;IACAA,kBAAC,QAAA,EAAK,OAAM,wEAAA,GACVA,kBAAC,OAAA,EAAI,OAAM,yBAAwB,SAAQ,aAAY,MAAK,gBAAe,eAAY,OAAA,GACrFA,kBAAC,QAAA,EAAK,aAAU,WAAU,GAAE,0PAAyP,aAAU,UAAA,CAAU,CAC3S,CACF;EACF,GAEC,CAAC,UACAA,kBAAC,MAAA,EAAG,OAAM,gKAA+J,UAAU,IAAI,MAAK,WAAU,mBAAgB,iBAAgB,yBAAsB,mBAAA,GACzP,OAAO,KAAKU,cAAa,EACvB,OAAO,CAACC,OAAMA,OAAM,IAAI,EACxB,IAAI,CAACC,UACJZ;IAAC;IAAA;MAAG,OAAM;MAAwG,MAAK;MACrH,SAAS,MAAM;AACb,uBAAeY,KAAI;AACnB,wBAAgB,KAAK;AACrB,kBAAU,IAAI;MAChB;IAAA;IAEAZ,kBAAC,QAAA,EAAK,OAAM,6CAAA,GACVA,kBAAC,QAAA,MAAM,YAAYY,KAAI,CAAE,GACzBZ,kBAAC,QAAA,MAAO,aAAqBY,KAAI,GAAE,GAAC,CACtC;IAEAZ,kBAAC,QAAA,EAAK,OAAM,oEAAA,CAIZ;EACF,CACD,CAEL,CAGJ,CACF;AAEJ;AChGO,SAAS,UAAiB;AAC/B,SACEA;IAAC;IAAA;MACC,OAAM;MACN,OAAO;QACL,OAAO;QACP,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,gBAAgB;MAClB;IAAA;IAEAA,kBAAC,SAAA,IAAQ;EACX;AAEJ;AAEA,SAAS,UAAiB;AACxB,SACEA,kBAAC,OAAA,EAAI,OAAM,YAAW,OAAO,EAAE,QAAQ,OAAO,EAAA,GAC5CA,kBAAC,OAAA,IAAI,GACLA,kBAAC,OAAA,IAAI,GACLA,kBAAC,OAAA,IAAI,GACLA,kBAAC,OAAA,IAAI,CACP;AAEJ;;AC5BO,SAAS,OAAO,EAAE,OAAO,YAAY,iBAAiB,aAAa,OAAO,UAAU,SAAS,GAAiB;AACnH,QAAM,EAAE,MAAAM,MAAK,IAAI,sBAAsB;AACvC,QAAM,CAAC,MAAM,OAAO,IAAIH,GAAS,KAAK;AACtC,QAAM,KAAK,iBAAiB;AAE5B,SAAOH,kBAACa,IAAA,MACNb,kBAAC,UAAA,EAAO,OAAM,iFAAA,GACZA,kBAAC,OAAA,EAAI,OAAM,mCAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,0BAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,oCAAA,GACTA,kBAAC,KAAA,EAAE,MAAM,eAAe,KAAK,MAAK,OAAA,GAChCA;IAAC;IAAA;MACC,OAAM;MACN,KAAK;MACL,KAAI;MACJ,OAAO,EAAE,QAAQ,UAAU,QAAQ,QAAQ;IAAA;EAC7C,CACF,CACF,GACAA,kBAAC,QAAA,EAAK,OAAM,sDAAA,GACT,KACH,CACF,GACAA,kBAAC,OAAA,EAAI,OAAM,eAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,wBAAA,GACR,MAAM,IAAI,CAAC,SAAS;AACnB,QAAI,KAAK,WAAW;AAAG;AACvB,UAAM,CAAC,MAAM,GAAG,IAAI;AACpB,WAAOA,kBAAC,KAAA,EAAE,MAAM,KAAK,MAAM,eAAe,IAAI,IAAI,OAAM,8GAAA,GAA+G,IAAK;EAC9K,CAAC,CACH,CACF,GACAA,kBAAC,OAAA,EAAI,OAAM,mBAAA,GACR,CAAC,kBAAkB,SAClBA,kBAAC,KAAA,EAAE,MAAM,iBAAiB,MAAK,iBAAgB,OAAM,iQAAgQ,iBAAc,eAAc,iBAAc,QAAA,GAC7VA,kBAAC,QAAA,EAAK,OAAM,sBAAA,CAAsB,GAClCA,kBAAC,QAAA,EAAK,OAAM,UAAA,GAAUA,kBAACM,MAAK,WAAL,MAAe,oBAAkB,CAAiB,GACxE,GAAG,SAAS,IACXN,kBAAC,OAAA,EAAI,OAAM,8BAA6B,SAAQ,aAAY,MAAK,gBAAe,OAAM,YAAA,GACpFA,kBAAC,QAAA,EAAK,GAAE,+NAAA,CAA+N,GACvOA,kBAAC,QAAA,EAAK,aAAU,WAAU,GAAE,kVAAiV,aAAU,UAAA,CAAU,CACnY,IAEAA,kBAAC,OAAA,EAAI,OAAM,8BAA6B,MAAK,QAAO,SAAQ,aAAY,gBAAa,OAAM,QAAO,gBAAe,OAAM,YAAA,GACrHA,kBAAC,QAAA,EAAK,kBAAe,SAAQ,mBAAgB,SAAQ,GAAE,yNAAA,CAAyN,CAClR,CAEJ,GAED,CAAC,aAAa,SACbA,kBAAC,KAAA,EAAE,MAAM,YAAY,MAAK,WAAU,OAAM,iQAAgQ,iBAAc,eAAc,iBAAc,QAAA,GAClVA,kBAAC,QAAA,EAAK,OAAM,sBAAA,CAAsB,GAClCA,kBAAC,QAAA,EAAK,OAAM,UAAA,GAAUA,kBAACM,MAAK,WAAL,MAAe,cAAY,CAAiB,GACnEN,kBAAC,OAAA,EAAI,OAAM,8BAA6B,MAAK,QAAO,SAAQ,aAAY,gBAAa,OAAM,QAAO,gBAAe,OAAM,YAAA,GACrHA,kBAAC,QAAA,EAAK,kBAAe,SAAQ,mBAAgB,SAAQ,GAAE,0MAAA,CAA0M,CACnQ,CACF,GAEFA;IAAC;IAAA;MAAO,MAAK;MAAS,MAAK;MAAiB,OAAM;MAA2P,iBAAc;MAAc,iBAAc;MACrV,SAAS,CAACC,QAAM;AACd,gBAAQ,CAAC,IAAI;MACf;IAAA;IACAD,kBAAC,QAAA,EAAK,OAAM,sBAAA,CAAsB;IAClCA,kBAAC,QAAA,EAAK,OAAM,UAAA,GAAUA,kBAACM,MAAK,WAAL,MAAe,eAAa,CAAiB;IACpEN,kBAAC,OAAA,EAAI,OAAM,mBAAkB,MAAK,QAAO,SAAQ,aAAY,gBAAa,KAAI,QAAO,gBAAe,eAAY,OAAA,GAC9GA,kBAAC,QAAA,EAAK,kBAAe,SAAQ,mBAAgB,SAAQ,GAAE,+CAAA,CAA+C,CACxG;EACF,CACF,CACF,CACF,GAGE,QACAA;IAAC;IAAA;MAAI,OAAM;MAAgB,MAAK;MAAkB,mBAAgB;MAAmB,MAAK;MAAS,cAAW;MAC5G,SAAS,MAAM;AACb,gBAAQ,KAAK;MACf;IAAA;IACAA,kBAAC,OAAA,EAAI,OAAM,gBAAA,CAAgB;IAE3BA,kBAAC,OAAA,EAAI,OAAM,gCAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,mCAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,oEAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,wCAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,kEAAiE,SAAS,CAACC,QAAM;AAE1FA,MAAAA,IAAE,gBAAgB;IACpB,EAAA,GACED,kBAAC,OAAA,EAAI,OAAM,eAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,mCAAA,GACTA,kBAAC,MAAA,EAAG,OAAM,mDAAkD,IAAG,mBAAA,GAC7DA,kBAACM,MAAK,WAAL,MAAe,MAAI,CACtB,GACAN,kBAAC,OAAA,EAAI,OAAM,6BAAA,GACTA;MAAC;MAAA;QAAO,MAAK;QAAS,MAAK;QAAgB,OAAM;QAC/C,SAAS,CAACC,QAAM;AACd,kBAAQ,KAAK;QACf;MAAA;MAGAD,kBAAC,QAAA,EAAK,OAAM,sBAAA,CAAsB;MAClCA,kBAAC,QAAA,EAAK,OAAM,UAAA,GACVA,kBAACM,MAAK,WAAL,MAAe,aAAW,CAC7B;MACAN,kBAAC,OAAA,EAAI,OAAM,WAAU,MAAK,QAAO,SAAQ,aAAY,gBAAa,OAAM,QAAO,gBAAe,eAAY,OAAA,GACxGA,kBAAC,QAAA,EAAK,kBAAe,SAAQ,mBAAgB,SAAQ,GAAE,uBAAA,CAAuB,CAChF;IACF,CACF,CACF,CACF,GACAA,kBAAC,OAAA,EAAI,OAAM,oCAAA,GACTA,kBAAC,OAAA,EAAI,OAAM,wBAAuB,cAAW,UAAA,GAC3CA,kBAAC,MAAA,EAAG,MAAK,QAAO,OAAM,+BAAA,GACnB,WACCA,kBAAC,MAAA,MACCA;MAAC;MAAA;QAAE,MAAK;QACN,MAAK;QACL,OAAM;QACN,SAAS,MAAM;AACb,mBAAS;AACT,kBAAQ,KAAK;QACf;MAAA;MAEAA,kBAAC,OAAA,EAAI,OAAM,oCAAmC,MAAK,QAAO,SAAQ,aAAY,gBAAa,OAAM,QAAO,gBAAe,eAAY,OAAA,GACjIA,kBAAC,QAAA,EAAK,kBAAe,SAAQ,mBAAgB,SAAQ,GAAE,6OAAA,CAA6O,CACtS;MACAA,kBAACM,MAAK,WAAL,MAAe,SAAO;IACzB,CACF,IACE,QACJN,kBAAC,MAAA,MACCA,kBAAC,cAAA,IAAa,CAChB,GAEC,UAEA,MAAM,SAAS,IACdA,kBAAC,MAAA,EAAG,OAAM,kBAAA,GACRA,kBAAC,OAAA,EAAI,OAAM,gDAAA,GACTA,kBAACM,MAAK,WAAL,MAAe,OAAK,CACvB,GACAN,kBAAC,MAAA,EAAG,MAAK,QAAO,OAAM,YAAA,GACnB,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM;AAC1B,aAAOA,kBAAC,MAAA,MACNA,kBAAC,KAAA,EAAE,MAAM,KAAK,MAAM,QAAQ,IAAI,IAAI,QAAO,UAAS,KAAI,uBAAsB,OAAM,0HAAA,GAClFA,kBAAC,QAAA,EAAK,OAAM,mMAAA,GAAmM,GAAI,GACnNA,kBAAC,QAAA,EAAK,OAAM,WAAA,GAAY,IAAK,CAC/B,CACF;IACF,CAAC,CACH,CACF,IACE,MAEN,CACF,CACF,CACF,CACF,CACF,CACF,CACF;EACF,CAEJ;AACF;ACnLO,SAAS,OAAO,EAAE,eAAe,SAAAc,UAAS,UAAAC,UAAS,GAAoE;AAC5H,QAAM,EAAE,MAAAT,MAAK,IAAI,sBAAsB;AAEvC,QAAM,aAAc,iBAAiB,OAAO,iBAAiB,eAAgB,aAAa,QAAQ,aAAa,IAC7G,aAAa,QAAQ,aAAa,KAAK,SACvC;AACF,QAAM,cAAcQ,WAChBC,YACEf,kBAAC,KAAA,EAAE,MAAM,kDAAkDe,SAAQ,IAAI,QAAO,UAAS,KAAI,sBAAA,GAAsB,YACxGD,UAAQ,MAAGC,UAAS,UAAU,GAAG,CAAC,GAAE,GAC/C,IACED,WACF;AACJ,SACEd,kBAAC,UAAA,EAAO,OAAM,kCAAA,GACZA,kBAAC,OAAA,MACCA,kBAAC,KAAA,EAAE,OAAM,kCAAA,GACPA,kBAACM,MAAK,WAAL,MAAe,qBACGN,kBAAC,KAAA,EAAE,QAAO,UAAS,KAAI,uBAAsB,OAAM,mDAAkD,MAAK,oBAAA,GAAoB,WAAS,CAC1J,CACF,CACF,GACAA,kBAAC,OAAA,EAAI,OAAM,cAAA,CAAc,GACzBA,kBAAC,KAAA,EAAE,OAAM,kCAAA,GAAkC,oDACW,aAAa,GACnE,GACC,iBAAiB,cAEhBA,kBAAC,KAAA,EAAE,OAAM,kCAAA,GAAkC,iBAC3B,YAAY,KAC1BA;IAAC;IAAA;MACC,MAAK;MACL,SAAS,CAACC,QAAM;AACdA,QAAAA,IAAE,eAAe;AACjB,qBAAa,WAAW,aAAa;AACrC,eAAO,SAAS,OAAO;MACzB;IAAA;IACD;EAED,CACF,CAEJ;AAEJ;ACAO,SAAS,OAA8C;EAC5D;EACA;EACA;EACA,SAAS;EACT,GAAG;AACL,GAA0B;AACxB,QAAM,EAAE,MAAAK,MAAK,IAAI,sBAAsB;AACvC,QAAM,CAAC,SAAS,UAAU,IAAIH,GAAS,KAAK;AAC5C,SAAOH,kBAAC,UAAA,EAAQ,GAAG,MAAM,UAAU,YAAY,SAAS,SAAS,CAACC,QAAM;AACtEA,IAAAA,IAAE,eAAe;AACjB,QAAI,CAAC,SAAS;AAAE;IAAQ;AACxB,eAAW,IAAI;AACf,YAAQ,QAAQ,EAAE,KAAK,CAAC,SAAS;AAC/B,UAAI,MAAM;AACR,YAAI,KAAK,SAAS,MAAM;AACtB,gBAAM,SAA2B;AAEjC,gBAAM,MAAM,QAAQ,mBAAmB,MAAM;AAC7C,cAAI,KAAK;AACP,uBAAW,GAAG;UAChB;QACF;AACA,YAAI,KAAK,SAAS,QAAQ;AAExB,gBAAMI,SAA4B;AAElC,gBAAM,QAAQ,QAAQ,gBAAgBA,MAAK;AAC3C,kBAAQ,eAAe;YACrB;YACA,MAAM;YACN,aAAaA,OAAM,OAAO;YAC1B,OAAOA,OAAM;YACb,MAAMW,aAAa,IAAI;UACzB,CAAC;QACH;MACF;AACA,UAAI,QAAQ,qBAAqB;AAC/B,gBAAQ,oBAAoB;MAC9B;AACA,iBAAW,KAAK;IAClB,CAAC,EAAE,MAAM,CAAAX,WAAS;AAChB,cAAQ,MAAMA,MAAK;AAEnB,UAAIA,kBAAiBY,YAAY;AAC/B,gBAAQ,eAAe,gCAAgCX,OAAMD,MAAK,CAAC;MACrE,OAAO;AACL,cAAM,cAAeA,kBAAiB,QACpCA,OAAM,UAAU,OAAOA,MAAK;AAE9B,gBAAQ,eAAe;UACrB,OAAOC,MAAK;UACZ,MAAM;UACN;UACA,MAAMU,aAAa,IAAI;QACzB,CAAC;MACH;AAEA,UAAI,QAAQ,qBAAqB;AAC/B,gBAAQ,oBAAoB;MAC9B;AACA,iBAAW,KAAK;IAClB,CAAC;EACH,EAAA,GACG,UAAUhB,kBAAC,MAAA,IAAK,IAAK,QACxB;AACF;AAEA,SAAS,OAAc;AACrB,SAAOA,kBAACa,IAAA,MACNb,kBAAC,SAAA,MAAO;;;;;;;;;CAUR,GACAA,kBAAC,OAAA,EAAI,IAAG,KAAA,CAAK,CACf;AACF;AChHO,SAAS,oBAAoB;EAClC;EACA;AACF,GAGU;AACR,MAAI,WAAW;AACb,WAAOA,kBAAC,OAAA,EAAI,OAAM,aAAY,OAAO,EAAE,OAAO,MAAM,EAAA,GAAI,OAAQ;AAClE,SAAOA,kBAAC,OAAA,EAAI,OAAM,aAAY,OAAO,CAAE,EAAA,GAAG,GAAC;AAC7C;ACxBO,SAAS,wBAAwB,EAAE,cAAc,UAAU,GAAgE;AAChI,MAAI,CAAC;AAAc,WAAOA,kBAACa,IAAA,IAAS;AACpC,UAAQ,aAAa,QAAQ,MAAM;IACjC,KAAK;AACH,aAAOb,kBAAC,OAAA,EAAI,OAAM,WAAA,GAChBA,kBAAC,OAAA,EAAI,OAAM,6CAAA,GACTA,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAO,aAAa,QAAQ,OAAO,SAAS,MAAM;AACzE,qBAAa,YAAY;MAC3B,EAAA,GACG,aAAa,QAAQ,eACpBA,kBAAC,OAAA,EAAI,OAAM,4BAAA,GACR,aAAa,QAAQ,WACxB,GAED,aAAaA,kBAAC,OAAA,EAAI,OAAM,2BAAA,GACtB,aAAa,QAAQ,KACxB,CACF,CACF,CACF;IACF,KAAK;AACH,aAAOA,kBAAC,OAAA,EAAI,OAAM,WAAA,GAChBA,kBAAC,OAAA,EAAI,OAAM,6CAAA,GACTA,kBAAC,WAAA,EAAU,MAAK,WAAU,OAAO,aAAa,QAAQ,OAAO,SAAS,MAAM;AAC1E,qBAAa,YAAY;MAC3B,EAAA,CAAG,CAAE,CAAM;EACnB;AACF;ACIO,SAAS,cAAqB;AACnC,QAAM,SAAS,iBAAiB;AAChC,MAAI,OAAO,WAAW;AAAG,WAAOA,kBAACa,IAAA,IAAS;AAC1C,QAAM,OAAO,OAAO,OAAO,CAAAZ,QAAK,CAACA,IAAE,QAAQ,OAAO,CAACA,IAAE,QAAQ,OAAO;AACpE,MAAI,KAAK,WAAW;AAAG,WAAOD,kBAACa,IAAA,IAAS;AACxC,SAAOb,kBAAC,iBAAA,EAAgB,KAAK,KAAK,CAAC,EAAA,CAAG;AACxC;AAEA,SAAS,gBAAgB,EAAE,IAAI,GAA0B;AACvD,UAAQ,IAAI,QAAQ,MAAM;IACxB,KAAK;AACH,aAAOA,kBAAC,WAAA,EAAU,MAAK,UAAS,OAAO,IAAI,QAAQ,OAAO,SAAS,MAAM;AACvE,YAAI,YAAY;MAClB,GAAG,SAAS,4BAAA,GACT,IAAI,QAAQ,eACXA,kBAAC,OAAA,EAAI,OAAM,4BAAA,GACR,IAAI,QAAQ,WACf,CAEJ;IACF,KAAK;AACH,aAAOA,kBAAC,WAAA,EAAU,MAAK,WAAU,OAAO,IAAI,QAAQ,OAAO,SAAS,MAAM;AACxE,YAAI,YAAY;MAClB,GAAG,SAAS,4BAAA,CAAsB;EACtC;AACF;AKxCO,IAAM,cAAckB,EAA6B,CAAC,CAAC;;;AmBY1D;AACA;;;ACjCA;AACA,kBAAqC;;;ACDrC;AAGA,IAAM,iBAAiB,oBAAI,QAAQ;AAEnC,IAAM,cAAc,CAAC;AACrB,IAAM,gBAAgB,CAAC;AACvB,IAAM,OAAO,MAAI;AAAC;AAKlB,IAAM;AAAA;AAAA,EAA8B,KAAK;AAAA;AACzC,IAAM,SAAS;AACf,IAAM,cAAc,CAACC,OAAIA,OAAM;AAC/B,IAAM,aAAa,CAACA,OAAI,OAAOA,MAAK;AACpC,IAAM,eAAe,CAACC,IAAGC,QAAK;AAAA,EACtB,GAAGD;AAAA,EACH,GAAGC;AACP;AACJ,IAAM,gBAAgB;AAEtB,IAAM,kBAAkB,OAAO,UAAU;AACzC,IAAM,oBAAoB,OAAO,YAAY;AAC7C,IAAM,2BAA2B,MAAI,mBAAmB,OAAO,OAAO,uBAAuB,KAAK;AAClG,IAAM,oBAAoB,CAACC,QAAO,QAAM;AACpC,QAAM,QAAQ,eAAe,IAAIA,MAAK;AACtC,SAAO;AAAA;AAAA,IAEH,MAAIA,OAAM,IAAI,GAAG,KAAK;AAAA;AAAA,IAEtB,CAAC,SAAO;AACJ,UAAI,CAAC,YAAY,GAAG,GAAG;AACnB,cAAM,OAAOA,OAAM,IAAI,GAAG;AAG1B,YAAI,EAAE,OAAO,gBAAgB;AACzB,wBAAc,GAAG,IAAI;AAAA,QACzB;AACA,cAAM,CAAC,EAAE,KAAK,aAAa,MAAM,IAAI,GAAG,QAAQ,WAAW;AAAA,MAC/D;AAAA,IACJ;AAAA;AAAA,IAEA,MAAM,CAAC;AAAA;AAAA,IAEP,MAAI;AACA,UAAI,CAAC,YAAY,GAAG,GAAG;AAEnB,YAAI,OAAO;AAAe,iBAAO,cAAc,GAAG;AAAA,MACtD;AAEA,aAAOA,OAAM,IAAI,GAAG,KAAK;AAAA,IAC7B;AAAA,EACJ;AACJ;AAMA,IAAM,QAAQ,oBAAI,QAAQ;AAE1B,IAAI,UAAU;AASd,IAAM,aAAa,CAAC,QAAM;AACtB,QAAM,OAAO,OAAO;AACpB,QAAM,cAAc,OAAO,IAAI;AAC/B,QAAMC,UAAS,eAAe;AAC9B,MAAI;AACJ,MAAI;AACJ,MAAI,OAAO,GAAG,MAAM,OAAO,CAACA,WAAU,eAAe,QAAQ;AAGzD,aAAS,MAAM,IAAI,GAAG;AACtB,QAAI;AAAQ,aAAO;AAInB,aAAS,EAAE,UAAU;AACrB,UAAM,IAAI,KAAK,MAAM;AACrB,QAAI,eAAe,OAAO;AAEtB,eAAS;AACT,WAAI,QAAQ,GAAG,QAAQ,IAAI,QAAQ,SAAQ;AACvC,kBAAU,WAAW,IAAI,KAAK,CAAC,IAAI;AAAA,MACvC;AACA,YAAM,IAAI,KAAK,MAAM;AAAA,IACzB;AACA,QAAI,eAAe,QAAQ;AAEvB,eAAS;AACT,YAAM,OAAO,OAAO,KAAK,GAAG,EAAE,KAAK;AACnC,aAAM,CAAC,YAAY,QAAQ,KAAK,IAAI,CAAC,GAAE;AACnC,YAAI,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG;AAC1B,oBAAU,QAAQ,MAAM,WAAW,IAAI,KAAK,CAAC,IAAI;AAAA,QACrD;AAAA,MACJ;AACA,YAAM,IAAI,KAAK,MAAM;AAAA,IACzB;AAAA,EACJ,OAAO;AACH,aAASA,UAAS,IAAI,OAAO,IAAI,QAAQ,WAAW,IAAI,SAAS,IAAI,QAAQ,WAAW,KAAK,UAAU,GAAG,IAAI,KAAK;AAAA,EACvH;AACA,SAAO;AACX;AAQI,IAAI,SAAS;AACjB,IAAM,WAAW,MAAI;AAErB,IAAM,CAAC,eAAe,cAAc,IAAI,mBAAmB,OAAO,mBAAmB;AAAA,EACjF,OAAO,iBAAiB,KAAK,MAAM;AAAA,EACnC,OAAO,oBAAoB,KAAK,MAAM;AAC1C,IAAI;AAAA,EACA;AAAA,EACA;AACJ;AACA,IAAM,YAAY,MAAI;AAClB,QAAM,kBAAkB,qBAAqB,SAAS;AACtD,SAAO,YAAY,eAAe,KAAK,oBAAoB;AAC/D;AACA,IAAM,YAAY,CAAC,aAAW;AAE1B,MAAI,mBAAmB;AACnB,aAAS,iBAAiB,oBAAoB,QAAQ;AAAA,EAC1D;AACA,gBAAc,SAAS,QAAQ;AAC/B,SAAO,MAAI;AACP,QAAI,mBAAmB;AACnB,eAAS,oBAAoB,oBAAoB,QAAQ;AAAA,IAC7D;AACA,mBAAe,SAAS,QAAQ;AAAA,EACpC;AACJ;AACA,IAAM,gBAAgB,CAAC,aAAW;AAE9B,QAAM,WAAW,MAAI;AACjB,aAAS;AACT,aAAS;AAAA,EACb;AAEA,QAAM,YAAY,MAAI;AAClB,aAAS;AAAA,EACb;AACA,gBAAc,UAAU,QAAQ;AAChC,gBAAc,WAAW,SAAS;AAClC,SAAO,MAAI;AACP,mBAAe,UAAU,QAAQ;AACjC,mBAAe,WAAW,SAAS;AAAA,EACvC;AACJ;AACA,IAAM,SAAS;AAAA,EACX;AAAA,EACA;AACJ;AACA,IAAM,uBAAuB;AAAA,EACzB;AAAA,EACA;AACJ;AAEA,IAAM,kBAAkB,CAAC,GAAM;AAC/B,IAAM,YAAY,CAAC,mBAAmB,UAAU;AAEhD,IAAM,MAAM,CAACC,OAAI,yBAAyB,IAAI,OAAO,uBAAuB,EAAEA,EAAC,IAAI,WAAWA,IAAG,CAAC;AAIlG,IAAM,4BAA4B,YAAYC,KAAYC;AAE1D,IAAM,sBAAsB,OAAO,cAAc,eAAe,UAAU;AAE1E,IAAM,iBAAiB,CAAC,aAAa,wBAAwB;AAAA,EACzD;AAAA,EACA;AACJ,EAAE,SAAS,oBAAoB,aAAa,KAAK,oBAAoB;AAErE,IAAM,YAAY,CAAC,QAAM;AACrB,MAAI,WAAW,GAAG,GAAG;AACjB,QAAI;AACA,YAAM,IAAI;AAAA,IACd,SAAS,KAAK;AAEV,YAAM;AAAA,IACV;AAAA,EACJ;AAGA,QAAM,OAAO;AAEb,QAAM,OAAO,OAAO,WAAW,OAAO,MAAM,QAAQ,GAAG,IAAI,IAAI,SAAS,OAAO,WAAW,GAAG,IAAI;AACjG,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;AAGA,IAAI,cAAc;AAClB,IAAM,eAAe,MAAI,EAAE;AAE3B,IAAM,cAAc;AACpB,IAAM,kBAAkB;AACxB,IAAM,eAAe;AAErB,IAAI,YAAY;AAAA,EACd,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF;AAEA,eAAe,kBAAkB,MAAM;AACnC,QAAM,CAACJ,QAAO,MAAM,OAAO,KAAK,IAAI;AAGpC,QAAM,UAAU,aAAa;AAAA,IACzB,eAAe;AAAA,IACf,cAAc;AAAA,EAClB,GAAG,OAAO,UAAU,YAAY;AAAA,IAC5B,YAAY;AAAA,EAChB,IAAI,SAAS,CAAC,CAAC;AACf,MAAI,gBAAgB,QAAQ;AAC5B,QAAM,wBAAwB,QAAQ;AACtC,MAAI,iBAAiB,QAAQ;AAC7B,QAAM,aAAa,QAAQ,eAAe;AAC1C,QAAM,kBAAkB,CAACK,WAAQ;AAC7B,WAAO,OAAO,0BAA0B,aAAa,sBAAsBA,MAAK,IAAI,0BAA0B;AAAA,EAClH;AACA,QAAM,eAAe,QAAQ;AAG7B,MAAI,WAAW,IAAI,GAAG;AAClB,UAAM,YAAY;AAClB,UAAM,cAAc,CAAC;AACrB,UAAM,KAAKL,OAAM,KAAK;AACtB,aAAQ,QAAQ,GAAG,KAAK,GAAG,CAAC,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAE;AACtD,YAAM,MAAM,MAAM;AAClB;AAAA;AAAA,QACA,CAAC,IAAI,WAAW,OAAO,KAAK,UAAUA,OAAM,IAAI,GAAG,EAAE,EAAE;AAAA,QAAG;AACtD,oBAAY,KAAK,GAAG;AAAA,MACxB;AAAA,IACJ;AACA,WAAO,QAAQ,IAAI,YAAY,IAAI,WAAW,CAAC;AAAA,EACnD;AACA,SAAO,YAAY,IAAI;AACvB,iBAAe,YAAY,IAAI;AAE3B,UAAM,CAAC,GAAG,IAAI,UAAU,EAAE;AAC1B,QAAI,CAAC;AAAK;AACV,UAAM,CAAC,KAAK,GAAG,IAAI,kBAAkBA,QAAO,GAAG;AAC/C,UAAM,CAAC,oBAAoB,UAAU,KAAK,IAAI,eAAe,IAAIA,MAAK;AACtE,UAAM,eAAe,mBAAmB,GAAG;AAC3C,UAAM,kBAAkB,MAAI;AACxB,UAAI,YAAY;AAGZ,eAAO,MAAM,GAAG;AAChB,YAAI,gBAAgB,aAAa,CAAC,GAAG;AACjC,iBAAO,aAAa,CAAC,EAAE,YAAY,EAAE,KAAK,MAAI,IAAI,EAAE,IAAI;AAAA,QAC5D;AAAA,MACJ;AACA,aAAO,IAAI,EAAE;AAAA,IACjB;AAEA,QAAI,KAAK,SAAS,GAAG;AAEjB,aAAO,gBAAgB;AAAA,IAC3B;AACA,QAAI,OAAO;AACX,QAAIK;AAEJ,UAAM,mBAAmB,aAAa;AACtC,aAAS,GAAG,IAAI;AAAA,MACZ;AAAA,MACA;AAAA,IACJ;AACA,UAAM,oBAAoB,CAAC,YAAY,cAAc;AACrD,UAAM,QAAQ,IAAI;AAIlB,UAAM,gBAAgB,MAAM;AAC5B,UAAM,cAAc,MAAM;AAC1B,UAAM,gBAAgB,YAAY,WAAW,IAAI,gBAAgB;AAEjE,QAAI,mBAAmB;AACnB,uBAAiB,WAAW,cAAc,IAAI,eAAe,aAAa,IAAI;AAE9E,UAAI;AAAA,QACA,MAAM;AAAA,QACN,IAAI;AAAA,MACR,CAAC;AAAA,IACL;AACA,QAAI,WAAW,IAAI,GAAG;AAElB,UAAI;AACA,eAAO,KAAK,aAAa;AAAA,MAC7B,SAAS,KAAK;AAEV,QAAAA,SAAQ;AAAA,MACZ;AAAA,IACJ;AAEA,QAAI,QAAQ,WAAW,KAAK,IAAI,GAAG;AAG/B,aAAO,MAAM,KAAK,MAAM,CAAC,QAAM;AAC3B,QAAAA,SAAQ;AAAA,MACZ,CAAC;AAID,UAAI,qBAAqB,SAAS,GAAG,EAAE,CAAC,GAAG;AACvC,YAAIA;AAAO,gBAAMA;AACjB,eAAO;AAAA,MACX,WAAWA,UAAS,qBAAqB,gBAAgBA,MAAK,GAAG;AAG7D,wBAAgB;AAChB,eAAO;AAEP,YAAI;AAAA,UACA;AAAA,UACA,IAAI;AAAA,QACR,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,QAAI,eAAe;AACf,UAAI,CAACA,QAAO;AAER,YAAI,WAAW,aAAa,GAAG;AAC3B,iBAAO,cAAc,MAAM,aAAa;AAAA,QAC5C;AAEA,YAAI;AAAA,UACA;AAAA,UACA,IAAI;AAAA,QACR,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,aAAS,GAAG,EAAE,CAAC,IAAI,aAAa;AAEhC,UAAM,MAAM,MAAM,gBAAgB;AAGlC,QAAI;AAAA,MACA,IAAI;AAAA,IACR,CAAC;AAED,QAAIA,QAAO;AACP,UAAI;AAAc,cAAMA;AACxB;AAAA,IACJ;AACA,WAAO,gBAAgB,MAAM;AAAA,EACjC;AACJ;AAEA,IAAM,oBAAoB,CAAC,cAAc,SAAO;AAC5C,aAAU,OAAO,cAAa;AAC1B,QAAI,aAAa,GAAG,EAAE,CAAC;AAAG,mBAAa,GAAG,EAAE,CAAC,EAAE,IAAI;AAAA,EACvD;AACJ;AACA,IAAM,YAAY,CAAC,UAAU,YAAU;AAMnC,MAAI,CAAC,eAAe,IAAI,QAAQ,GAAG;AAC/B,UAAM,OAAO,aAAa,sBAAsB,OAAO;AAGvD,UAAM,qBAAqB,CAAC;AAC5B,UAAMC,UAAS,eAAe,KAAK,WAAW,QAAQ;AACtD,QAAI,UAAU;AACd,UAAM,gBAAgB,CAAC;AACvB,UAAM,YAAY,CAAC,KAAK,aAAW;AAC/B,YAAM,OAAO,cAAc,GAAG,KAAK,CAAC;AACpC,oBAAc,GAAG,IAAI;AACrB,WAAK,KAAK,QAAQ;AAClB,aAAO,MAAI,KAAK,OAAO,KAAK,QAAQ,QAAQ,GAAG,CAAC;AAAA,IACpD;AACA,UAAM,SAAS,CAAC,KAAK,OAAO,SAAO;AAC/B,eAAS,IAAI,KAAK,KAAK;AACvB,YAAM,OAAO,cAAc,GAAG;AAC9B,UAAI,MAAM;AACN,iBAAQC,KAAI,KAAK,QAAQA,QAAK;AAC1B,eAAKA,EAAC,EAAE,OAAO,IAAI;AAAA,QACvB;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,eAAe,MAAI;AACrB,UAAI,CAAC,eAAe,IAAI,QAAQ,GAAG;AAE/B,uBAAe,IAAI,UAAU;AAAA,UACzB;AAAA,UACA,CAAC;AAAA,UACD,CAAC;AAAA,UACD,CAAC;AAAA,UACDD;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AACD,YAAI,CAAC,WAAW;AAOZ,gBAAM,eAAe,KAAK,UAAU,WAAW,KAAK,WAAW,kBAAkB,KAAK,WAAW,oBAAoB,WAAW,CAAC,CAAC;AAClI,gBAAM,mBAAmB,KAAK,cAAc,WAAW,KAAK,WAAW,kBAAkB,KAAK,WAAW,oBAAoB,eAAe,CAAC,CAAC;AAC9I,oBAAU,MAAI;AACV,4BAAgB,aAAa;AAC7B,gCAAoB,iBAAiB;AAIrC,2BAAe,OAAO,QAAQ;AAAA,UAClC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,iBAAa;AAMb,WAAO;AAAA,MACH;AAAA,MACAA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AAAA,IACH;AAAA,IACA,eAAe,IAAI,QAAQ,EAAE,CAAC;AAAA,EAClC;AACJ;AAGA,IAAM,eAAe,CAACE,IAAG,IAAI,QAAQ,YAAY,SAAO;AACpD,QAAM,gBAAgB,OAAO;AAC7B,QAAM,oBAAoB,KAAK;AAE/B,QAAM,UAAU,CAAC,GAAG,KAAK,OAAO,IAAI,QAAQ,MAAM,oBAAoB,IAAI,oBAAoB,OAAO,OAAO;AAC5G,MAAI,CAAC,YAAY,aAAa,KAAK,oBAAoB,eAAe;AAClE;AAAA,EACJ;AACA,aAAW,YAAY,SAAS,IAAI;AACxC;AACA,IAAM,UAAU,CAAC,aAAa,YAAU,WAAW,WAAW,KAAK,WAAW,OAAO;AAErF,IAAM,CAAC,OAAO,MAAM,IAAI,UAAU,oBAAI,IAAI,CAAC;AAE3C,IAAM,gBAAgB;AAAA,EAAa;AAAA;AAAA,IAE/B,eAAe;AAAA,IACf,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA,aAAa;AAAA;AAAA,IAEb,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA;AAAA,IAEpB,oBAAoB,iBAAiB,MAAQ;AAAA,IAC7C,uBAAuB,IAAI;AAAA,IAC3B,kBAAkB,IAAI;AAAA,IACtB,gBAAgB,iBAAiB,MAAO;AAAA;AAAA,IAExC;AAAA,IACA,UAAU,MAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,EACf;AAAA;AAAA,EACA;AAAM;AAEN,IAAM,eAAe,CAACV,IAAGC,OAAI;AAEzB,QAAMF,KAAI,aAAaC,IAAGC,EAAC;AAE3B,MAAIA,IAAG;AACH,UAAM,EAAE,KAAK,IAAK,UAAU,GAAI,IAAID;AACpC,UAAM,EAAE,KAAKW,KAAK,UAAUC,IAAI,IAAIX;AACpC,QAAI,MAAMU,KAAI;AACV,MAAAZ,GAAE,MAAM,GAAG,OAAOY,GAAE;AAAA,IACxB;AACA,QAAI,MAAMC,KAAI;AACV,MAAAb,GAAE,WAAW,aAAa,IAAIa,GAAE;AAAA,IACpC;AAAA,EACJ;AACA,SAAOb;AACX;AAEA,IAAM,mBAAmB,EAAc,CAAC,CAAC;AACzC,IAAM,YAAY,CAAC,UAAQ;AACvB,QAAM,EAAE,MAAO,IAAI;AACnB,QAAM,eAAec,GAAW,gBAAgB;AAChD,QAAM,qBAAqB,WAAW,KAAK;AAC3C,QAAM,SAAS,EAAQ,MAAI,qBAAqB,MAAM,YAAY,IAAI,OAAO;AAAA,IACzE;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,iBAAiB,EAAQ,MAAI,qBAAqB,SAAS,aAAa,cAAc,MAAM,GAAG;AAAA,IACjG;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,WAAW,UAAU,OAAO;AAElC,QAAM,CAAC,YAAY,IAAIC,GAAS,MAAI,WAAW,UAAU,SAAS,eAAe,SAAS,KAAK,GAAG,MAAM,IAAI,SAAS;AAErH,MAAI,cAAc;AACd,mBAAe,QAAQ,aAAa,CAAC;AACrC,mBAAe,SAAS,aAAa,CAAC;AAAA,EAC1C;AAEA,4BAA0B,MAAI;AAC1B,QAAI,cAAc;AACd,mBAAa,CAAC,KAAK,aAAa,CAAC,EAAE;AACnC,aAAO,aAAa,CAAC;AAAA,IACzB;AAAA,EACJ,GAAG,CAAC,CAAC;AACL,SAAO,EAAc,iBAAiB,UAAU,aAAa,OAAO;AAAA,IAChE,OAAO;AAAA,EACX,CAAC,CAAC;AACN;AAGA,IAAM,iBAAiB,mBAAmB,OAAO;AACjD,IAAM,MAAM,iBAAiB,OAAO,uBAAuB,CAAC;AAC5D,IAAM,gBAAgB,MAAI;AACtB,MAAI,gBAAgB;AAEhB,WAAO,yBAAyB;AAAA,EACpC;AACJ;AAEA,IAAM,YAAY,CAAC,SAAO;AACtB,SAAO,WAAW,KAAK,CAAC,CAAC,IAAI;AAAA,IACzB,KAAK,CAAC;AAAA,IACN,KAAK,CAAC;AAAA,IACN,KAAK,CAAC,KAAK,CAAC;AAAA,EAChB,IAAI;AAAA,IACA,KAAK,CAAC;AAAA,IACN;AAAA,KACC,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAA,EAC/C;AACJ;AAEA,IAAM,eAAe,MAAI;AACrB,SAAO,aAAa,eAAeD,GAAW,gBAAgB,CAAC;AACnE;AAWA,IAAM,aAAa,CAAC,eAAa,CAAC,MAAM,UAAU,WAAS;AAEnD,QAAM,UAAU,aAAa,IAAI,SAAO;AACpC,UAAM,MAAM,UAAU,IAAI,EAAE,CAAC;AAC7B,UAAM,CAAC,EAAE,EAAE,EAAE,OAAO,IAAI,eAAe,IAAI,KAAK;AAChD,UAAM,MAAM,QAAQ,GAAG;AACvB,QAAI,KAAK;AACL,aAAO,QAAQ,GAAG;AAClB,aAAO;AAAA,IACX;AACA,WAAO,SAAS,GAAG,IAAI;AAAA,EAC3B;AACA,SAAO,WAAW,MAAM,SAAS,MAAM;AAC3C;AAEJ,IAAM,sBAAsB,IAAI,OAAO,UAAU;AAIjD,IAAM,WAAW,CAAC,SAAO;AACrB,SAAO,SAAS,cAAc,MAAM;AAEhC,UAAM,iBAAiB,aAAa;AAEpC,UAAM,CAAC,KAAKE,KAAI,OAAO,IAAI,UAAU,IAAI;AAEzC,UAAM,SAAS,aAAa,gBAAgB,OAAO;AAEnD,QAAI,OAAO;AACX,UAAM,EAAE,KAAAC,KAAK,IAAI;AACjB,UAAMC,eAAcD,QAAO,CAAC,GAAG,OAAO,mBAAmB;AACzD,aAAQE,KAAID,YAAW,QAAQC,QAAK;AAChC,aAAOD,YAAWC,EAAC,EAAE,IAAI;AAAA,IAC7B;AACA,WAAO,KAAK,KAAKH,OAAM,OAAO,WAAW,MAAM,MAAM;AAAA,EACzD;AACJ;AA0EA,IAAM,oBAAoB,CAAC,KAAK,WAAW,aAAW;AAClD,QAAM,oBAAoB,UAAU,GAAG,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/D,oBAAkB,KAAK,QAAQ;AAC/B,SAAO,MAAI;AACP,UAAM,QAAQ,kBAAkB,QAAQ,QAAQ;AAChD,QAAI,SAAS,GAAG;AAEZ,wBAAkB,KAAK,IAAI,kBAAkB,kBAAkB,SAAS,CAAC;AACzE,wBAAkB,IAAI;AAAA,IAC1B;AAAA,EACJ;AACJ;AAcA,cAAc;;;AD3sBd,IAAM,cAAc;AAAA,EAChB,QAAQ;AACZ;AACA,IAAM,gBAAgB,CAAC,MAAM,SAAS,WAAS;AAC3C,QAAM,EAAE,OAAAI,QAAQ,SAAAC,UAAU,UAAW,cAAe,mBAAoB,mBAAoB,iBAAkB,mBAAoB,oBAAqB,iBAAkB,IAAI;AAC7K,QAAM,CAAC,oBAAoB,UAAU,KAAK,IAAI,eAAe,IAAID,MAAK;AAMtE,QAAM,CAAC,KAAK,KAAK,IAAI,UAAU,IAAI;AAEnC,QAAM,oBAAoBE,GAAO,KAAK;AAGtC,QAAM,eAAeA,GAAO,KAAK;AAEjC,QAAM,SAASA,GAAO,GAAG;AACzB,QAAM,aAAaA,GAAO,OAAO;AACjC,QAAM,YAAYA,GAAO,MAAM;AAC/B,QAAM,YAAY,MAAI,UAAU;AAChC,QAAM,WAAW,MAAI,UAAU,EAAE,UAAU,KAAK,UAAU,EAAE,SAAS;AACrE,QAAM,CAAC,UAAU,UAAU,gBAAgB,eAAe,IAAI,kBAAkBF,QAAO,GAAG;AAC1F,QAAM,oBAAoBE,GAAO,CAAC,CAAC,EAAE;AACrC,QAAM,WAAW,YAAY,YAAY,IAAI,OAAO,SAAS,GAAG,IAAI;AACpE,QAAM,UAAU,CAAC,MAAM,YAAU;AAC7B,QAAI,QAAQ;AACZ,eAAUA,MAAK,mBAAkB;AAC7B,YAAMC,KAAID;AACV,UAAIC,OAAM,QAAQ;AACd,YAAI,CAACF,SAAQ,QAAQE,EAAC,GAAG,KAAKA,EAAC,CAAC,GAAG;AAC/B,cAAI,YAAY,KAAKA,EAAC,CAAC,GAAG;AACtB,gBAAI,CAACF,SAAQ,QAAQE,EAAC,GAAG,YAAY,GAAG;AACpC,sBAAQ;AAAA,YACZ;AAAA,UACJ,OAAO;AACH,oBAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ,OAAO;AACH,YAAI,QAAQA,EAAC,MAAM,KAAKA,EAAC,GAAG;AACxB,kBAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACA,QAAM,cAAc,EAAQ,MAAI;AAC5B,UAAM,sBAAsB,MAAI;AAC5B,UAAI,CAAC;AAAK,eAAO;AACjB,UAAI,CAAC;AAAS,eAAO;AAErB,UAAI,CAAC,YAAY,iBAAiB;AAAG,eAAO;AAE5C,UAAI,UAAU,EAAE,SAAS;AAAG,eAAO;AACnC,UAAI;AAAU,eAAO;AACrB,UAAI,CAAC,YAAY,iBAAiB;AAAG,eAAO;AAC5C,aAAO;AAAA,IACX,GAAG;AAEH,UAAM,mBAAmB,CAAC,UAAQ;AAE9B,YAAM,WAAW,aAAa,KAAK;AACnC,aAAO,SAAS;AAChB,UAAI,CAAC,oBAAoB;AACrB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,QACH,cAAc;AAAA,QACd,WAAW;AAAA,QACX,GAAG;AAAA,MACP;AAAA,IACJ;AAIA,QAAI,oBAAoB,iBAAiB,SAAS,CAAC;AACnD,UAAM,2BAA2B,iBAAiB,gBAAgB,CAAC;AACnE,WAAO;AAAA,MACH,MAAI;AACA,cAAM,cAAc,iBAAiB,SAAS,CAAC;AAC/C,eAAO,QAAQ,aAAa,iBAAiB,IAAI,oBAAoB,oBAAoB;AAAA,MAC7F;AAAA,MACA,MAAI;AAAA,IACR;AAAA,EAEJ,GAAG;AAAA,IACCH;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,aAAS,kCAAqBI;AAAA,IAAY,CAAC,aAAW,eAAe,KAAK,CAAC,SAAS,SAAO;AACzF,UAAI,CAAC,QAAQ,MAAM,OAAO;AAAG,iBAAS;AAAA,IAC1C,CAAC;AAAA;AAAA,IACL;AAAA,MACIJ;AAAA,MACA;AAAA,IACJ;AAAA,EAAC,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AAClC,QAAM,iBAAiB,CAAC,kBAAkB;AAC1C,QAAM,iBAAiB,mBAAmB,GAAG,KAAK,mBAAmB,GAAG,EAAE,SAAS;AACnF,QAAM,aAAa,OAAO;AAC1B,QAAM,OAAO,YAAY,UAAU,IAAI,WAAW;AAClD,QAAMK,SAAQ,OAAO;AAErB,QAAM,eAAeH,GAAO,IAAI;AAChC,QAAM,eAAe,mBAAmB,YAAY,UAAU,IAAI,aAAa,UAAU,aAAa;AAItG,QAAM,+BAA+B,MAAI;AAErC,QAAI,kBAAkB,CAAC,YAAYG,MAAK;AAAG,aAAO;AAElD,QAAI,kBAAkB,CAAC,YAAY,iBAAiB;AAAG,aAAO;AAE9D,QAAI,UAAU,EAAE,SAAS;AAAG,aAAO;AAInC,QAAI;AAAU,aAAO,YAAY,IAAI,IAAI,QAAQ;AAGjD,WAAO,YAAY,IAAI,KAAK;AAAA,EAChC,GAAG;AAGH,QAAM,yBAAyB,CAAC,EAAE,OAAO,WAAW,kBAAkB;AACtE,QAAM,eAAe,YAAY,OAAO,YAAY,IAAI,yBAAyB,OAAO;AACxF,QAAM,YAAY,YAAY,OAAO,SAAS,IAAI,yBAAyB,OAAO;AAGlF,QAAM,aAAaD;AAAA,IAAY,OAAO,mBAAiB;AACnD,YAAM,iBAAiB,WAAW;AAClC,UAAI,CAAC,OAAO,CAAC,kBAAkB,aAAa,WAAW,UAAU,EAAE,SAAS,GAAG;AAC3E,eAAO;AAAA,MACX;AACA,UAAI;AACJ,UAAI;AACJ,UAAI,UAAU;AACd,YAAM,OAAO,kBAAkB,CAAC;AAGhC,YAAM,wBAAwB,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK;AAWlD,YAAM,oBAAoB,MAAI;AAC3B,YAAI,iBAAiB;AACjB,iBAAO,CAAC,aAAa,WAAW,QAAQ,OAAO,WAAW,kBAAkB;AAAA,QAChF;AACA,eAAO,QAAQ,OAAO;AAAA,MAC1B;AAEA,YAAM,aAAa;AAAA,QACf,cAAc;AAAA,QACd,WAAW;AAAA,MACf;AACA,YAAM,8BAA8B,MAAI;AACpC,iBAAS,UAAU;AAAA,MACvB;AACA,YAAM,eAAe,MAAI;AAErB,cAAM,cAAc,MAAM,GAAG;AAC7B,YAAI,eAAe,YAAY,CAAC,MAAM,SAAS;AAC3C,iBAAO,MAAM,GAAG;AAAA,QACpB;AAAA,MACJ;AAEA,YAAM,eAAe;AAAA,QACjB,cAAc;AAAA,MAClB;AAGA,UAAI,YAAY,SAAS,EAAE,IAAI,GAAG;AAC9B,qBAAa,YAAY;AAAA,MAC7B;AACA,UAAI;AACA,YAAI,uBAAuB;AACvB,mBAAS,YAAY;AAGrB,cAAI,OAAO,kBAAkB,YAAY,SAAS,EAAE,IAAI,GAAG;AACvD,uBAAW,MAAI;AACX,kBAAI,WAAW,kBAAkB,GAAG;AAChC,0BAAU,EAAE,cAAc,KAAK,MAAM;AAAA,cACzC;AAAA,YACJ,GAAG,OAAO,cAAc;AAAA,UAC5B;AAGA,gBAAM,GAAG,IAAI;AAAA,YACT,eAAe,KAAK;AAAA,YACpB,aAAa;AAAA,UACjB;AAAA,QACJ;AACA,SAAC,SAAS,OAAO,IAAI,MAAM,GAAG;AAC9B,kBAAU,MAAM;AAChB,YAAI,uBAAuB;AAGvB,qBAAW,cAAc,OAAO,gBAAgB;AAAA,QACpD;AAOA,YAAI,CAAC,MAAM,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,MAAM,SAAS;AAC1C,cAAI,uBAAuB;AACvB,gBAAI,kBAAkB,GAAG;AACrB,wBAAU,EAAE,YAAY,GAAG;AAAA,YAC/B;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAEA,mBAAW,QAAQ;AAanB,cAAM,eAAe,SAAS,GAAG;AACjC,YAAI,CAAC,YAAY,YAAY;AAAA,SAC5B,WAAW,aAAa,CAAC;AAAA,QAC1B,WAAW,aAAa,CAAC;AAAA,QACzB,aAAa,CAAC,MAAM,IAAI;AACpB,sCAA4B;AAC5B,cAAI,uBAAuB;AACvB,gBAAI,kBAAkB,GAAG;AACrB,wBAAU,EAAE,YAAY,GAAG;AAAA,YAC/B;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAGA,cAAM,YAAY,SAAS,EAAE;AAG7B,mBAAW,OAAOH,SAAQ,WAAW,OAAO,IAAI,YAAY;AAE5D,YAAI,uBAAuB;AACvB,cAAI,kBAAkB,GAAG;AACrB,sBAAU,EAAE,UAAU,SAAS,KAAK,MAAM;AAAA,UAC9C;AAAA,QACJ;AAAA,MACJ,SAAS,KAAK;AACV,qBAAa;AACb,cAAM,gBAAgB,UAAU;AAChC,cAAM,EAAE,mBAAoB,IAAI;AAEhC,YAAI,CAAC,cAAc,SAAS,GAAG;AAE3B,qBAAW,QAAQ;AAGnB,cAAI,yBAAyB,kBAAkB,GAAG;AAC9C,0BAAc,QAAQ,KAAK,KAAK,aAAa;AAC7C,gBAAI,uBAAuB,QAAQ,WAAW,kBAAkB,KAAK,mBAAmB,GAAG,GAAG;AAC1F,kBAAI,SAAS,GAAG;AAIZ,8BAAc,aAAa,KAAK,KAAK,eAAe,YAAY;AAAA,kBAC5D,aAAa,KAAK,cAAc,KAAK;AAAA,kBACrC,QAAQ;AAAA,gBACZ,CAAC;AAAA,cACL;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,gBAAU;AAEV,kCAA4B;AAC5B,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA;AAAA,MACI;AAAA,MACAD;AAAA,IACJ;AAAA,EAAC;AAID,QAAM,cAAcI;AAAA;AAAA,IACpB,IAAI,SAAO;AACP,aAAO,eAAeJ,QAAO,OAAO,SAAS,GAAG,IAAI;AAAA,IACxD;AAAA;AAAA,IACA,CAAC;AAAA,EAAC;AAEF,4BAA0B,MAAI;AAC1B,eAAW,UAAU;AACrB,cAAU,UAAU;AAGpB,QAAI,CAAC,YAAY,UAAU,GAAG;AAC1B,mBAAa,UAAU;AAAA,IAC3B;AAAA,EACJ,CAAC;AAED,4BAA0B,MAAI;AAC1B,QAAI,CAAC;AAAK;AACV,UAAM,iBAAiB,WAAW,KAAK,WAAW,WAAW;AAG7D,QAAI,yBAAyB;AAC7B,UAAM,eAAe,CAAC,SAAO;AACzB,UAAI,QAAQ,UAAiB,aAAa;AACtC,cAAM,MAAM,KAAK,IAAI;AACrB,YAAI,UAAU,EAAE,qBAAqB,MAAM,0BAA0B,SAAS,GAAG;AAC7E,mCAAyB,MAAM,UAAU,EAAE;AAC3C,yBAAe;AAAA,QACnB;AAAA,MACJ,WAAW,QAAQ,UAAiB,iBAAiB;AACjD,YAAI,UAAU,EAAE,yBAAyB,SAAS,GAAG;AACjD,yBAAe;AAAA,QACnB;AAAA,MACJ,WAAW,QAAQ,UAAiB,cAAc;AAC9C,eAAO,WAAW;AAAA,MACtB;AACA;AAAA,IACJ;AACA,UAAM,cAAc,kBAAkB,KAAK,oBAAoB,YAAY;AAE3E,iBAAa,UAAU;AACvB,WAAO,UAAU;AACjB,sBAAkB,UAAU;AAE5B,aAAS;AAAA,MACL,IAAI;AAAA,IACR,CAAC;AAED,QAAI,6BAA6B;AAC7B,UAAI,YAAY,IAAI,KAAK,WAAW;AAEhC,uBAAe;AAAA,MACnB,OAAO;AAGH,YAAI,cAAc;AAAA,MACtB;AAAA,IACJ;AACA,WAAO,MAAI;AAEP,mBAAa,UAAU;AACvB,kBAAY;AAAA,IAChB;AAAA,EACJ,GAAG;AAAA,IACC;AAAA,EACJ,CAAC;AAED,4BAA0B,MAAI;AAC1B,QAAIM;AACJ,aAAS,OAAO;AAGZ,YAAM,WAAW,WAAW,eAAe,IAAI,gBAAgB,IAAI,IAAI;AAIvE,UAAI,YAAYA,WAAU,IAAI;AAC1B,QAAAA,SAAQ,WAAW,SAAS,QAAQ;AAAA,MACxC;AAAA,IACJ;AACA,aAAS,UAAU;AAGf,UAAI,CAAC,SAAS,EAAE,UAAU,qBAAqB,UAAU,EAAE,UAAU,OAAO,sBAAsB,UAAU,EAAE,SAAS,IAAI;AACvH,mBAAW,WAAW,EAAE,KAAK,IAAI;AAAA,MACrC,OAAO;AAEH,aAAK;AAAA,MACT;AAAA,IACJ;AACA,SAAK;AACL,WAAO,MAAI;AACP,UAAIA,QAAO;AACP,qBAAaA,MAAK;AAClB,QAAAA,SAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAED,EAAAC,GAAc,YAAY;AAK1B,MAAI,YAAY,YAAY,IAAI,KAAK,KAAK;AAItC,QAAI,CAAC,mBAAmB,WAAW;AAC/B,YAAM,IAAI,MAAM,uDAAuD;AAAA,IAC3E;AAEA,eAAW,UAAU;AACrB,cAAU,UAAU;AACpB,iBAAa,UAAU;AACvB,UAAM,YAAYF,MAAK,IAAI,WAAW,WAAW,IAAIA;AAAA,EACzD;AACA,SAAO;AAAA,IACH,QAAQ;AAAA,IACR,IAAI,OAAQ;AACR,wBAAkB,OAAO;AACzB,aAAO;AAAA,IACX;AAAA,IACA,IAAI,QAAS;AACT,wBAAkB,QAAQ;AAC1B,aAAOA;AAAA,IACX;AAAA,IACA,IAAI,eAAgB;AAChB,wBAAkB,eAAe;AACjC,aAAO;AAAA,IACX;AAAA,IACA,IAAI,YAAa;AACb,wBAAkB,YAAY;AAC9B,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;AACA,IAAMG,aAAY,OAAO,eAAe,WAAa,gBAAgB;AAAA,EACjE,OAAO;AACX,CAAC;AAgBG,IAAI,SAAS,SAAS,aAAa;;;AEpcvC;AASA;;;ACeO,IAAM,+BAA+B,MAC1C,oBAA8B,EAC3B,SAAS,UAAU,oBAAoB,UAAU,CAAC,EAClD,SAAS,YAAY,eAAe,CAAC,EACrC,SAAS,SAAS,eAAe,CAAuB,EACxD,SAAS,uBAAuB,gBAAgB,CAAC,EACjD,MAAM,uBAAuB;AAE3B,IAAM,8BAA8B,MACzC,oBAA6B,EAC1B,SAAS,UAAU,oBAAoB,SAAS,CAAC,EACjD,SAAS,YAAY,eAAe,CAAC,EACrC,SAAS,uBAAuB,gBAAgB,CAAC,EACjD,MAAM,sBAAsB;AAE1B,IAAM,gCAAgC,MAC3C,oBAA+B,EAC5B,SAAS,UAAU,oBAAoB,WAAW,CAAC,EACnD,MAAM,wBAAwB;AAE5B,IAAM,uBAAuB,MAClC,mBAAiC,EAC9B,eAAe,QAAQ,EACvB,YAAY,YAAY,6BAA6B,CAAC,EACtD,YAAY,aAAa,8BAA8B,CAAC,EACxD,YAAY,WAAW,4BAA4B,CAAC,EACpD,MAAM,cAAc;AAElB,IAAM,eAA6B;AAAA,EACxC,QAAQ;AACV;AASA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA,qBAAqB;AACvB;AAOO,SAAS,kBAAuC;AACrD,QAAM,EAAE,OAAO,OAAO,OAAO,IAAI;AAAA,IAC/B;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AACP,aAAO,YAAY;AAAA,IACrB;AAAA,IACA,UAAU;AACR,UAAI,MAAM,WAAW;AAAa;AAClC,YAAM,YAA0B;AAAA,QAC9B,QAAQ;AAAA,QACR,UAAU,MAAM;AAAA,QAChB,qBAAqB,MAAM,aAAa;AAAA,MAC1C;AACA,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,MAAM,MAAM;AAEV,YAAM,YAA0B;AAAA,QAC9B,QAAQ;AAAA,QACR,GAAG;AAAA,QACH,qBAAqB,KAAK,aAAa;AAAA,MACzC;AACA,aAAO,SAAS;AAChB,oBAAc;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,gBAAsB;AAC7B,SAAO,MAAM,MAAM,QAAW,EAAE,YAAY,MAAM,CAAC;AACrD;;;ACpHA;;;ACqBO,IAAM,sBAAsB,MACjC,oBAAiC,EAC9B,SAAS,yBAAyB,gBAAgB,CAAC,EACnD,SAAS,uBAAuB,gBAAgB,CAAC,EACjD,SAAS,qBAAqB,gBAAgB,CAAC,EAC/C,SAAS,kBAAkB,gBAAgB,CAAC,EAC5C,SAAS,iBAAiB,gBAAgB,CAAC,EAC3C,SAAS,uBAAuB,eAAe,CAAC,EAChD,MAAM,UAAU;AAErB,IAAM,qBAAkC;AAAA,EACtC,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,eAAe;AACjB;AAEA,IAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA,oBAAoB;AACtB;AAMO,SAAS,iBAGd;AACA,QAAM,EAAE,OAAO,OAAO,IAAI;AAAA,IACxB;AAAA,IACA;AAAA,EACF;AAEA,WAAS,YAAyCC,IAAMC,IAAmB;AACzE,UAAM,WAAW,EAAE,GAAG,OAAO,CAACD,EAAC,GAAGC,GAAE;AACpC,WAAO,QAAQ;AAAA,EACjB;AACA,SAAO,CAAC,OAAO,WAAW;AAC5B;AAEO,SAAS,2BAAqD;AACnE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,uBACdD,IACAE,OACkB;AAClB,UAAQF,IAAG;AAAA,IACT,KAAK;AACH,aAAOE,MAAK;AAAA,IACd,KAAK;AACH,aAAOA,MAAK;AAAA,IACd,KAAK;AACH,aAAOA,MAAK;AAAA,IACd,KAAK;AACH,aAAOA,MAAK;AAAA,IACd,KAAK;AACH,aAAOA,MAAK;AAAA,IACd,KAAK;AACH,aAAOA,MAAK;AAAA,EAChB;AACF;;;AD1FO,SAAS,sBAAsB,EAAE,OAAAC,OAAM,GAAiC;AAC7E,QAAM,CAAC,IAAI,IAAI,eAAe;AAC9B,SAAO,kBAAC,gBAAa,OAAOA,QAAO,YAAY,KAAK,eAAe;AACrE;;;AECA;AACA;;;ACkCO,SAAS,iBAAmC,KAAuB;AACxE,SAAO,OAAO,KAAK,GAAG,EAAE;AAAA,IACtB,CAACC,OAAO,IAA0BA,EAAC,MAAM;AAAA,EAC3C,IACI,MACA;AACN;AA0DO,IAAM,sBAAsB;AAG5B,IAAM,yBAAyB,sBAAsB;AA8FrD,IAAM,gBAAgB;AAAA,EAC3B,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,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,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,MAAM;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAA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",
- "names": ["undefined", "v", "n", "i", "x", "add", "a", "b", "r", "base", "l", "j", "y", "d", "c", "l2", "q", "self", "_2", "t", "fn", "p", "e", "isValid", "max", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "self", "table", "a", "r", "lexer", "c", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "this", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "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", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "createContext", "defaultValue", "contextId", "Consumer", "contextValue", "Provider", "subs", "ctx", "_props", "old", "splice", "isValidElement", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "getHookState", "index", "type", "options", "__h", "currentComponent", "currentHook", "hooks", "__H", "__", "length", "push", "__V", "EMPTY", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "currentIndex", "_reducer", "__c", "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", "useImperativeHandle", "ref", "createHandle", "concat", "factory", "useCallback", "useContext", "context", "provider", "sub", "value", "useDebugValue", "formatter", "useErrorBoundary", "cb", "errState", "componentDidCatch", "err", "errorInfo", "undefined", "useId", "root", "__v", "__m", "mask", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "invokeCleanup", "invokeEffect", "e", "__e", "afterNextFrame", "raf", "done", "clearTimeout", "timeout", "HAS_RAF", "cancelAnimationFrame", "setTimeout", "requestAnimationFrame", "hook", "comp", "cleanup", "oldArgs", "newArgs", "some", "arg", "f", "previousComponent", "prevRaf", "oldBeforeDiff", "oldBeforeRender", "oldAfterDiff", "oldCommit", "oldBeforeUnmount", "diffed", "unmount", "__b", "vnode", "commitQueue", "hasErrored", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "is", "x", "y", "PureComponent", "p", "this", "memo", "c", "comparer", "shouldUpdate", "nextProps", "ref", "updateRef", "call", "current", "Memoed", "shouldComponentUpdate", "createElement", "displayName", "name", "prototype", "isReactComponent", "forwardRef", "fn", "Forwarded", "clone", "$$typeof", "REACT_FORWARD_SYMBOL", "render", "__f", "detachedClone", "vnode", "detachedParent", "parentDom", "__c", "forEach", "effect", "__H", "__P", "__k", "map", "child", "removeOriginal", "originalParent", "__v", "__e", "insertBefore", "__d", "Suspense", "__u", "_suspenders", "suspended", "component", "__", "__a", "lazy", "loader", "prom", "error", "Lazy", "then", "exports", "default", "e", "SuspenseList", "_next", "_map", "ContextProvider", "getChildContext", "context", "children", "Portal", "_this", "container", "_container", "componentWillUnmount", "_temp", "nodeType", "parentNode", "childNodes", "appendChild", "push", "before", "removeChild", "splice", "indexOf", "createPortal", "el", "containerInfo", "parent", "callback", "textContent", "preactRender", "hydrate", "preactHydrate", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "createFactory", "type", "bind", "isValidElement", "element", "REACT_ELEMENT_TYPE", "cloneElement", "preactCloneElement", "apply", "arguments", "unmountComponentAtNode", "findDOMNode", "base", "Fragment", "startTransition", "cb", "useDeferredValue", "val", "useTransition", "useLayoutEffect", "useSyncExternalStore", "subscribe", "getSnapshot", "value", "_useState", "useState", "_instance", "_getSnapshot", "forceUpdate", "useEffect", "oldDiffHook", "mapFn", "Children", "oldCatchError", "oldUnmount", "resolve", "CAMEL_PROPS", "IS_DOM", "onChangeInputType", "oldEventHook", "currentComponent", "classNameDescriptor", "oldVNodeHook", "oldBeforeRender", "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", "version", "unstable_batchedUpdates", "flushSync", "StrictMode", "useInsertionEffect", "index", "Component", "isPureReactComponent", "state", "options", "__b", "Symbol", "for", "toChildArray", "count", "length", "only", "normalized", "toArray", "newVNode", "oldVNode", "errorInfo", "unmount", "__R", "__h", "promise", "suspendingVNode", "suspendingComponent", "resolved", "onResolved", "onSuspensionComplete", "suspendedVNode", "setState", "pop", "wasHydrating", "document", "detachedComponent", "__O", "fallback", "list", "node", "delete", "revealOrder", "size", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "reverse", "set", "componentDidUpdate", "componentDidMount", "test", "key", "Object", "defineProperty", "configurable", "v", "writable", "event", "persist", "nativeEvent", "class", "normalizedProps", "nonCustomElement", "toLowerCase", "replace", "multiple", "Array", "isArray", "selected", "defaultValue", "className", "enumerable", "__r", "ReactCurrentDispatcher", "readContext", "__n", "arg", "useId", "useReducer", "useRef", "useImperativeHandle", "useMemo", "useCallback", "useContext", "useDebugValue", "createContext", "createRef", "e", "h", "a", "b", "k", "l", "m", "n", "p", "q", "d", "f", "c", "g", "r", "t", "u", "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", "r", "i", "x", "n", "h", "l", "y", "d", "x", "y", "r", "a", "i", "o", "v", "c", "p", "q", "b", "t", "n", "j", "m", "d", "t2", "t3", "t22", "b2", "b3", "b4", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "s", "r", "x", "i", "j", "k", "r", "p", "q", "t", "s", "m", "n", "i", "t", "h", "p", "q", "i", "n", "b", "h", "fn", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "timer", "CancellationToken", "a", "r", "n", "x", "c", "a2", "x2", "a", "b", "n", "r", "s", "r2", "i", "names", "normal", "small", "fn", "counter", "k", "i", "n", "j", "w", "t", "m", "q", "i", "c", "a", "b", "R", "n", "counter", "e", "base", "res", "v", "URL", "URLSearchParams", "x", "URL", "e", "s", "i", "s2", "LogLevel", "m", "e", "location", "c", "p", "x", "d", "map", "i", "x", "c", "s", "x", "c", "e", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "TalerPreciseTimestamp", "t", "s", "TalerProtocolTimestamp", "t2", "Duration", "d", "s", "i", "d2", "n", "AbsoluteTime", "t2", "t", "at", "x", "c", "DenomKeyType", "t", "DenominationPubKey", "p2", "ExchangeProtocolVersion", "MerchantProtocolVersion", "n", "a", "d", "v", "N", "i", "j", "s", "c", "p", "hash", "d", "logger", "n", "TalerSignaturePurpose", "WalletAccountMergeFlags", "c", "p", "x", "bigint", "Edx25519", "L", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "decode", "encode", "p", "i", "d", "encode", "decode", "p", "x", "c", "p", "s", "URLSearchParams", "v", "k", "logger", "Headers", "r", "m", "v", "k", "e", "e", "r", "s", "error", "x", "c", "s", "p", "r", "TalerUriType", "TalerUriAction", "q", "URLSearchParams", "v", "k", "URL", "TalerCorebankApi", "MonitorTimeframeParam", "TanChannel", "TalerExchangeApi", "AmlState", "TalerMerchantApi", "TokenFamilyKind", "HttpStatusCode", "LibtoolVersion", "compare", "v", "logger", "logger", "d", "s", "ReserveTransactionType", "logger", "logger", "CreditDebitIndicator", "encodings", "a", "b", "c", "d", "i", "logger", "ContractTermsUtil", "i", "x", "h", "k", "e", "hash", "d", "c", "e", "err", "x", "fnutil", "f", "x", "TransactionMajorState", "TransactionMinorState", "TransactionAction", "TransactionType", "WithdrawalType", "DenomLossEventType", "PaymentStatus", "TransactionAmountMode", "BalanceFlag", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "ExchangeUpdateStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "ProviderPaymentType", "TalerBankConversionCacheEviction", "compare", "compare", "TalerCoreBankCacheEviction", "compare", "TalerMerchantInstanceCacheEviction", "TalerMerchantManagementCacheEviction", "logger", "strings", "s", "i", "c", "i", "x", "n", "c", "s", "NotificationType", "ObservabilityEventType", "e", "logger", "h", "v", "k", "_", "p", "h", "e", "match", "l", "initial", "storage", "storage", "n", "h", "hash", "AbsoluteTime", "useState", "useEffect", "i", "map", "i18n", "error", "error", "d", "logger", "RequestThrottler", "Duration", "DEFAULT_REQUEST_TIMEOUT_MS", "TalerError", "TalerErrorCode", "encodeBody", "getDefaultHeaders", "Headers", "e", "format", "_typeof", "obj", "defaultOptions", "MILLISECONDS_IN_WEEK", "formatDistance", "formatRelative", "ordinalNumber", "valueCallback", "_typeof", "obj", "o", "p", "_setPrototypeOf", "self", "e", "_getPrototypeOf", "i", "Setter", "ValueSetter", "_classCallCheck", "_defineProperties", "i", "_createClass", "Parser", "match", "_typeof", "obj", "_inherits", "_setPrototypeOf", "o", "p", "_createSuper", "_isNativeReflectConstruct", "_getPrototypeOf", "_possibleConstructorReturn", "self", "_assertThisInitialized", "e", "_defineProperty", "EraParser", "parse", "n", "YearParser", "valueCallback", "LocalWeekYearParser", "ISOWeekYearParser", "ExtendedYearParser", "QuarterParser", "StandAloneQuarterParser", "MonthParser", "StandAloneMonthParser", "LocalWeekParser", "ISOWeekParser", "DateParser", "DayOfYearParser", "defaultOptions", "DayParser", "LocalDayParser", "StandAloneLocalDayParser", "ISODayParser", "AMPMParser", "AMPMMidnightParser", "DayPeriodParser", "Hour1to12Parser", "Hour0to23Parser", "Hour0To11Parser", "Hour1To24Parser", "MinuteParser", "SecondParser", "FractionOfSecondParser", "ISOTimezoneWithZParser", "ISOTimezoneParser", "TimestampSecondsParser", "TimestampMillisecondsParser", "parsers", "formatDistanceLocale", "formatDistance", "formatDistance_default", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "formatLong_default", "formatRelativeLocale", "formatRelative", "formatRelative_default", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "localize", "argumentCallback", "localize_default", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "valueCallback", "match_default", "locale", "Context", "createContext", "initial", "useEffect", "h", "useContext", "useState", "i18n", "VERSION", "error", "TalerError", "createContext", "Context", "createContext", "useContext", "useState", "path", "params", "useEffect", "h", "__export", "p", "h", "e", "Duration", "useState", "useEffect", "error", "i18n", "TalerErrorCode", "assertUnreachable", "s", "supportedLang", "l", "lang", "Fragment", "VERSION", "GIT_HASH", "AbsoluteTime", "TalerError", "createContext", "v", "a", "b", "cache", "isDate", "f", "h", "s", "error", "mutate", "i", "_", "u2", "f2", "q", "p", "fn", "use", "middleware", "i", "cache", "compare", "_", "t", "T", "error", "timer", "x", "SWRConfig", "k", "v", "i18n", "error", "k", "i18n", "code", "codecForChallenge", "k", "v", "p", "i18n", "notify", "amount", "subject", "e", "v", "d", "error", "l", "result", "initial", "Context", "q", "n", "a", "i18n", "USERNAME_REGEX", "p", "i18n", "errors", "USERNAME_REGEX", "name", "username", "password", "e", "p", "i18n", "_", "h", "errors", "USERNAME_REGEX", "e", "useSWR", "token", "error", "p", "wid", "error", "useSWR", "h", "initial", "p", "error", "useSWR", "d", "token", "useComponentState", "x", "toInteger", "requiredArgs", "_typeof", "obj", "toDate", "requiredArgs", "requiredArgs", "toDate", "toInteger", "requiredArgs", "toDate", "toInteger", "_typeof", "obj", "add", "requiredArgs", "toInteger", "toDate", "requiredArgs", "toDate", "toInteger", "defaultOptions", "getDefaultOptions", "requiredArgs", "toDate", "requiredArgs", "requiredArgs", "toDate", "daysInYear", "maxTime", "millisecondsInMinute", "millisecondsInHour", "minTime", "maxTime", "secondsInHour", "secondsInDay", "secondsInHour", "secondsInWeek", "secondsInYear", "daysInYear", "secondsInMonth", "secondsInQuarter", "_typeof", "obj", "requiredArgs", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "millisecondsInHour", "requiredArgs", "millisecondsInMinute", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "requiredArgs", "toDate", "requiredArgs", "toInteger", "MILLISECONDS_IN_DAY", "requiredArgs", "toDate", "startOfUTCISOWeek", "requiredArgs", "toDate", "getUTCISOWeekYear", "requiredArgs", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "requiredArgs", "getUTCISOWeekYear", "startOfUTCISOWeek", "MILLISECONDS_IN_WEEK", "getUTCISOWeek", "requiredArgs", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "startOfUTCWeek", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "toDate", "getUTCWeekYear", "requiredArgs", "toDate", "defaultOptions", "getDefaultOptions", "toInteger", "startOfUTCWeek", "startOfUTCWeekYear", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "getUTCWeekYear", "startOfUTCWeek", "MILLISECONDS_IN_WEEK", "getUTCWeek", "requiredArgs", "toDate", "startOfUTCWeek", "startOfUTCWeekYear", "y", "M", "d", "a", "h", "H", "m", "s", "S", "formatters", "G", "localize", "y", "Y", "getUTCWeekYear", "R", "getUTCISOWeekYear", "u", "Q", "q", "M", "L", "w", "getUTCWeek", "I", "getUTCISOWeek", "d", "D", "E", "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", "formatDistanceLocale", "formatDistance", "formatDistance_default", "buildFormatLongFn", "format", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "buildFormatLongFn", "formatRelativeLocale", "formatRelative", "formatRelative_default", "buildLocalizeFn", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "localize", "buildLocalizeFn", "argumentCallback", "localize_default", "buildMatchFn", "findIndex", "findKey", "buildMatchPatternFn", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "buildMatchPatternFn", "valueCallback", "buildMatchFn", "match_default", "formatDistance_default", "formatRelative_default", "localize_default", "match_default", "requiredArgs", "defaultOptions", "getDefaultOptions", "locale", "toInteger", "toDate", "defaultOptions", "getDefaultOptions", "locale", "format", "delimiter", "m", "requiredArgs", "toDate", "format", "requiredArgs", "toDate", "add", "requiredArgs", "toInteger", "requiredArgs", "toInteger", "_typeof", "obj", "requiredArgs", "toInteger", "i18n", "p", "d", "i18n", "d", "p", "p", "useComponentState", "useComponentState", "failure", "p", "h", "_", "h", "qrcode", "i18n", "notify", "p", "e", "i18n", "notify", "e", "error", "p", "ReadyView", "h", "viewMapping", "ReadyView", "p", "useComponentState", "k", "i18n", "p", "notify", "errors", "e", "v", "i18n", "error", "h", "p", "error", "i18n", "p", "ReadyView", "viewMapping", "ReadyView", "p", "i18n", "error", "P", "h", "Wait", "p", "d", "i18n", "p", "n", "useSWR", "error", "p", "token", "error", "useSWR", "d", "c", "token", "c", "r", "error", "useSWR", "error", "useSWR", "token", "timeframe", "error", "useSWR", "i18n", "h", "p", "i18n", "i18n", "p", "notify", "errors", "ch", "e", "sub", "h", "i18n", "r", "p", "i18n", "useComponentState", "FailedView", "error", "i18n", "ReadyView", "d", "p", "viewMapping", "FailedView", "ReadyView", "p", "useComponentState", "i18n", "e", "p", "i18n", "p", "notify", "h", "errors", "e", "i18n", "p", "i18n", "p", "errors", "e", "s", "i18n", "p", "notify", "a", "payto", "i18n", "p", "errors", "notify", "e", "i18n", "p", "p", "locale", "i18n", "e", "i18n", "p", "notify", "a", "e", "i18n", "p", "e", "table", "i18n", "p", "notify", "errors", "e", "errors", "p", "useComponentState", "i18n", "notify", "p", "h", "e", "errors", "ShowCashoutDetails", "i18n", "i18n", "location", "notify", "h", "p", "ShowCashoutDetails", "e", "p", "h", "SWRConfig", "map", "e"]
+ "sources": ["../../../../node_modules/.pnpm/big-integer@1.6.52/node_modules/big-integer/BigInteger.js", "../../../../node_modules/.pnpm/jed@1.1.1/node_modules/jed/jed.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", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/util.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/PureComponent.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/memo.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/forwardRef.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/Children.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/suspense-list.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/portals.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/render.js", "../../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/src/index.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js", "../../../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/index.js", "../../../../node_modules/.pnpm/qrcode-generator@1.4.4/node_modules/qrcode-generator/qrcode.js", "../../../taler-util/src/nacl-fast.ts", "../../../taler-util/src/prng-browser.ts", "../../../taler-util/src/taler-error-codes.ts", "../../../taler-util/src/CancellationToken.ts", "../../../taler-util/src/amounts.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/logging.ts", "../../../taler-util/src/codec.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/bech32.ts", "../../../taler-util/src/segwit_addr.ts", "../../../taler-util/src/bitcoin.ts", "../../../taler-util/src/payto.ts", "../../../taler-util/src/http-common.ts", "../../../taler-util/src/operation.ts", "../../../taler-util/src/taleruri.ts", "../../../taler-util/src/http-client/types.ts", "../../../taler-util/src/http-status-codes.ts", "../../../taler-util/src/http-impl.missing.ts", "../../../taler-util/src/http.ts", "../../../taler-util/src/libtool-version.ts", "../../../taler-util/src/MerchantApiClient.ts", "../../../taler-util/src/RequestThrottler.ts", "../../../taler-util/src/ReserveTransaction.ts", "../../../taler-util/src/TaskThrottler.ts", "../../../taler-util/src/bank-api-client.ts", "../../../taler-util/src/base64.ts", "../../../taler-util/src/contract-terms.ts", "../../../taler-util/src/errors.ts", "../../../taler-util/src/fnutils.ts", "../../../taler-util/src/transactions-types.ts", "../../../taler-util/src/wallet-types.ts", "../../../taler-util/src/http-client/utils.ts", "../../../taler-util/src/http-client/bank-conversion.ts", "../../../taler-util/src/http-client/authentication.ts", "../../../taler-util/src/http-client/bank-core.ts", "../../../taler-util/src/http-client/merchant.ts", "../../../taler-util/src/http-client/challenger.ts", "../../../taler-util/src/http-client/exchange.ts", "../../../taler-util/src/i18n.ts", "../../../taler-util/src/iban.ts", "../../../taler-util/src/notifications.ts", "../../../taler-util/src/observability.ts", "../../../taler-util/src/timer.ts", "../../../taler-util/src/transaction-test-data.ts", "../../../taler-util/src/index.browser.ts", "../../../web-util/src/hooks/useLocalStorage.ts", "../../../web-util/src/utils/observable.ts", "../../../web-util/src/hooks/useLang.ts", "../../../web-util/src/hooks/useMemoryStorage.ts", "../../../web-util/src/hooks/useNotifications.ts", "../../../web-util/src/hooks/useAsyncAsHook.ts", "../../../web-util/src/utils/base64.ts", "../../../web-util/src/utils/request.ts", "../../../web-util/src/utils/http-impl.browser.ts", "../../../web-util/src/utils/http-impl.sw.ts", "../../../web-util/src/utils/route.ts", "../../../web-util/src/context/api.ts", "../../../web-util/src/context/translation.ts", "../../../../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/_lib/buildLocalizeFn/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/_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/startOfWeek/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/constants/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameDay/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/endOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/eachDayOfInterval/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfWeek/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/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/en-US/_lib/localize/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/_lib/assign/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMinutes/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getSeconds/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getYear/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Setter.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/constants.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/utils.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCDay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/setUTCISODay/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/_lib/parsers/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/parse/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isSameMonth/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subDays/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setHours/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/sub/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/de/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-GB/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/es/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatDistance/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatLong/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/formatRelative/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/localize/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/_lib/match/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/fr/index.js", "../../../web-util/src/context/bank-api.ts", "../../../web-util/src/context/activity.ts", "../../../web-util/src/context/challenger-api.ts", "../../../web-util/src/context/merchant-api.ts", "../../../web-util/src/context/exchange-api.ts", "../../../web-util/src/context/navigation.ts", "../../../web-util/src/context/wallet-integration.ts", "../../../web-util/src/components/utils.ts", "../../../web-util/src/components/Attention.tsx", "../../../web-util/src/components/CopyButton.tsx", "../../../web-util/src/components/ErrorLoading.tsx", "../../../web-util/src/components/LangSelector.tsx", "../../../web-util/src/components/Loading.tsx", "../../../web-util/src/components/Header.tsx", "../../../web-util/src/components/Footer.tsx", "../../../web-util/src/components/Button.tsx", "../../../web-util/src/components/ShowInputErrorLabel.tsx", "../../../web-util/src/components/NotificationBanner.tsx", "../../../web-util/src/components/ToastBanner.tsx", "../../../web-util/src/forms/Calendar.tsx", "../../../web-util/src/forms/Caption.tsx", "../../../web-util/src/forms/InputLine.tsx", "../../../web-util/src/forms/InputArray.tsx", "../../../web-util/src/forms/FormProvider.tsx", "../../../web-util/src/forms/forms.ts", "../../../web-util/src/forms/Group.tsx", "../../../web-util/src/forms/InputAbsoluteTime.tsx", "../../../web-util/src/forms/Dialog.tsx", "../../../web-util/src/forms/useField.ts", "../../../web-util/src/forms/InputAmount.tsx", "../../../web-util/src/forms/InputChoiceHorizontal.tsx", "../../../web-util/src/forms/InputChoiceStacked.tsx", "../../../web-util/src/forms/InputFile.tsx", "../../../web-util/src/forms/InputInteger.tsx", "../../../web-util/src/forms/InputSelectMultiple.tsx", "../../../web-util/src/forms/InputSelectOne.tsx", "../../../web-util/src/forms/InputText.tsx", "../../../web-util/src/forms/InputTextArea.tsx", "../../../web-util/src/forms/InputToggle.tsx", "../../../web-util/src/forms/DefaultForm.tsx", "../../../web-util/src/forms/TimePicker.tsx", "../../../web-util/src/forms/ui-form.ts", "../../../web-util/src/forms/converter.ts", "../../../web-util/src/stories.tsx", "../../src/app.tsx", "../../../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/core/dist/index.mjs", "../../../../node_modules/.pnpm/swr@2.0.3_react@18.2.0/node_modules/swr/_internal/dist/index.mjs", "../../src/Routing.tsx", "../../src/hooks/session.ts", "../../src/components/ErrorLoadingWithDebug.tsx", "../../src/hooks/preferences.ts", "../../src/pages/LoginForm.tsx", "../../src/utils.ts", "../../src/pages/PaytoWireTransferForm.tsx", "../../src/hooks/bank-state.ts", "../../src/pages/RegistrationPage.tsx", "../../src/context/settings.ts", "../../src/pages/rnd.ts", "../../src/hooks/account.ts", "../../src/pages/AccountPage/state.ts", "../../src/pages/AccountPage/views.tsx", "../../src/components/Transactions/state.ts", "../../../../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/formatISO/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/subDays/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js", "../../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/sub/index.js", "../../src/components/Transactions/views.tsx", "../../src/components/Time.tsx", "../../src/components/Transactions/index.ts", "../../src/pages/PaymentOptions.tsx", "../../src/pages/WalletWithdrawForm.tsx", "../../src/pages/OperationState/state.ts", "../../src/pages/OperationState/views.tsx", "../../src/components/QR.tsx", "../../src/pages/WithdrawalConfirmationQuestion.tsx", "../../src/pages/OperationState/index.ts", "../../src/pages/AccountPage/index.ts", "../../src/pages/BankFrame.tsx", "../../src/pages/PublicHistoriesPage.tsx", "../../src/pages/ShowNotifications.tsx", "../../src/pages/SolveChallengePage.tsx", "../../src/hooks/regional.ts", "../../src/pages/WithdrawalQRCode.tsx", "../../src/pages/QrCodeSection.tsx", "../../src/pages/WireTransfer.tsx", "../../src/pages/WithdrawalOperationPage.tsx", "../../src/pages/account/CashoutListForAccount.tsx", "../../src/components/Cashouts/state.ts", "../../src/components/Cashouts/views.tsx", "../../src/components/Cashouts/index.ts", "../../src/pages/ProfileNavigation.tsx", "../../src/pages/regional/CreateCashout.tsx", "../../src/pages/account/ShowAccountDetails.tsx", "../../src/pages/admin/AccountForm.tsx", "../../src/pages/account/UpdateAccountPassword.tsx", "../../src/pages/admin/AdminHome.tsx", "../../src/pages/admin/AccountList.tsx", "../../src/pages/admin/CreateNewAccount.tsx", "../../src/pages/admin/DownloadStats.tsx", "../../src/pages/admin/RemoveAccount.tsx", "../../src/pages/regional/ConversionConfig.tsx", "../../src/hooks/form.ts", "../../src/pages/regional/ShowCashoutDetails.tsx", "../../src/i18n/strings.ts", "../../src/settings.ts", "../../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 || alphabet) 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 || alphabet) 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", "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", "/**\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", "/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\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", "// 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 * An error response did not include an error code in the format expected by the client. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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. Details should be in the local logs. Check if you are using the latest available version or file a report with the developers.\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 in the expected format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 * The operation timed out. Trying again might help. Check the network connection.\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 protocol version given by the server does not follow the required format. Most likely, the server does not speak the GNU Taler protocol. Check the URL and/or the network connection to the server.\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 the right data format, but the content did not satisfy the protocol. Please file a bug report.\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 an option is set to an invalid value. Check the logs and fix the local 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 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. Please file a bug report.\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 token used by the client to authorize the request does not grant the required permissions for the request. Check the requirements and obtain a suitable authorization token to proceed.\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 GENERIC_TOKEN_PERMISSION_INSUFFICIENT = 16,\n\n\n /**\n * The HTTP method used is invalid for this endpoint. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you used the correct URL and/or file a report with the developers of the client software.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 were malformed and caused the server to not be able to handle the request. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. Check that you are using the correct syntax as of RFC 8905 and/or that you entered the bank account number correctly.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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 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 body in the request could not be decompressed by the server. This is likely a bug in the client implementation. Check if you are using the latest available version and/or file a report with the developers.\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_COMPRESSION_INVALID = 28,\n\n\n /**\n * The currency involved in the operation is not acceptable for this server. Check your configuration and make sure the currency specified for a given service provider is one of the currencies supported by that provider.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\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. If you believe this was a legitimate request, contact the server administrators and/or the software developers to increase the limit.\n * Returned with an HTTP status code of #MHD_HTTP_CONTENT_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 refused the request due to lack of proper 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 GENERIC_UNAUTHORIZED = 40,\n\n\n /**\n * The service refused the request as the given authorization token is unknown.\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 GENERIC_TOKEN_UNKNOWN = 41,\n\n\n /**\n * The service refused the request as the given authorization token expired.\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 GENERIC_TOKEN_EXPIRED = 42,\n\n\n /**\n * The service refused the request as the given authorization token is malformed.\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 GENERIC_TOKEN_MALFORMED = 43,\n\n\n /**\n * The service refused the request due to lack of proper rights on the resource.\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 GENERIC_FORBIDDEN = 44,\n\n\n /**\n * The service failed initialize its connection to the database. The system administrator should check that the service has permissions to access the database and that the database is running.\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. The system administrator should check that the database is running.\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. The system administrator should check that the database is running and review the service logs.\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. The system administrator should check that the database is running and review the service logs.\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 unrecoverable error trying to commit a transaction to the database. The system administrator should check that the database is running and review the service logs.\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; it should only happen if some client maliciously tries to create conflicting concurrent transactions. It could also be a sign of a missing index. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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). Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Check if you are using the latest available version and/or file a report with the developers.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. Restarting services periodically can help, especially if Postgres is using excessive amounts of memory. Check with the system administrator to investigate.\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. The system administrator should check if the resource files are installed in the correct location and are readable to the 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 GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply. The system administrator should investigate the logs and check if the templates are well-formed.\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 coin is not known to the exchange (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_GENERIC_COIN_UNKNOWN = 1019,\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 failed to start a KYC attribute conversion helper process. It is likely configured incorrectly.\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_KYC_CONVERTER_FAILED = 1037,\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 client provided an unknown commitment for an age-withdraw 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 EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN = 1161,\n\n\n /**\n * The total sum of amounts from the denominations did overflow.\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_AGE_WITHDRAW_AMOUNT_OVERFLOW = 1162,\n\n\n /**\n * The total sum of value and fees from the denominations differs from the committed amount with fees.\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_AGE_WITHDRAW_AMOUNT_INCORRECT = 1163,\n\n\n /**\n * The original commitment differs from the calculated hash\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_AGE_WITHDRAW_REVEAL_INVALID_HASH = 1164,\n\n\n /**\n * The maximum age in the commitment is too large for the reserve\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_MAXIMUM_AGE_TOO_LARGE = 1165,\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 coin 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_COIN_HISTORY_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_RESERVE_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 * Withdrawal from the reserve requires age restriction to be set.\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_AGE_RESTRICTION_REQUIRED = 1681,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys or the helpers had no denominations (properly) configured.\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_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_BAD_GATEWAY (502).\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 * TOTP key 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_TOTP_KEY_INVALID = 1980,\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 reward ID is unknown. This could happen if the reward 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_REWARD_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 backend could not find the OTP device(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_OTP_DEVICE_UNKNOWN = 2021,\n\n\n /**\n * The account 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_ACCOUNT_UNKNOWN = 2022,\n\n\n /**\n * The wire hash 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 MERCHANT_GENERIC_H_WIRE_MALFORMED = 2023,\n\n\n /**\n * The currency specified in the operation does not work with the current state of the given resource.\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_GENERIC_CURRENCY_MISMATCH = 2024,\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_BAD_REQUEST (400).\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_BAD_REQUEST (400).\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 exchange does not support the selected bank account of the merchant. Likely the merchant had stale data on the bank accounts of the exchange and thus selected an inappropriate exchange when making the offer.\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_WIRE_METHOD_UNSUPPORTED = 2175,\n\n\n /**\n * The payment requires the wallet to select a choice from the choices array and pass it in the 'choice_index' field of 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 MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_MISSING = 2176,\n\n\n /**\n * The 'choice_index' field is 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 MERCHANT_POST_ORDERS_ID_PAY_CHOICE_INDEX_OUT_OF_BOUNDS = 2177,\n\n\n /**\n * The provided 'tokens' array does not match with the required input tokens of the order.\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_INPUT_TOKENS_MISMATCH = 2178,\n\n\n /**\n * Invalid token issue signature (blindly signed by merchant) for provided token.\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_TOKEN_ISSUE_SIG_INVALID = 2179,\n\n\n /**\n * Invalid token use signature (EdDSA, signed by wallet) for provided token.\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_TOKEN_USE_SIG_INVALID = 2180,\n\n\n /**\n * The provided number of tokens does not match the required 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 MERCHANT_POST_ORDERS_ID_PAY_TOKEN_COUNT_MISMATCH = 2181,\n\n\n /**\n * The provided number of token envelopes does not match the specified 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 MERCHANT_POST_ORDERS_ID_PAY_TOKEN_ENVELOPE_COUNT_MISMATCH = 2182,\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 * A token family with this ID but conflicting data 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_POST_TOKEN_FAMILY_CONFLICT = 2225,\n\n\n /**\n * The backend is unaware of a token family with the given ID.\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_PATCH_TOKEN_FAMILY_NOT_FOUND = 2226,\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 are waiting for the exchange to provide us with key material before checking the wire transfer.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS = 2258,\n\n\n /**\n * We are waiting for the exchange to provide us with the list of aggregated transactions.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST = 2259,\n\n\n /**\n * The endpoint indicated in the wire transfer does not belong to a GNU Taler exchange.\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_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE = 2260,\n\n\n /**\n * The exchange indicated in the wire transfer claims to know nothing about the wire transfer.\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_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND = 2261,\n\n\n /**\n * The interaction with the exchange is delayed due to rate limiting.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED = 2262,\n\n\n /**\n * We experienced a transient failure in our interaction with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_ACCEPTED (202).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE = 2263,\n\n\n /**\n * The response from the exchange was unacceptable and should be reviewed with an auditor.\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_EXCHANGE_TRANSFERS_HARD_FAILURE = 2264,\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_REWARD_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_REWARD_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_REWARD_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The reward 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_REWARD_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_REWARD_PICKUP_AMOUNT_EXCEEDS_REWARD_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_REWARD_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The merchant instance has no active bank accounts configured. However, at least one bank account must be available to create 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 merchant backend failed to obtain the current local time.\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; likely 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 * A conflicting order (sharing the same order identifier) already exists at this merchant backend instance.\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 order creation request is invalid because the given 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 order creation request is invalid because the delivery date given 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 order creation request is invalid because a wire deadline of \"never\" 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_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The order creation request is invalid because the given payment deadline 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 order creation request is invalid because the given refund deadline 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 * The backend does not trust any exchange that would allow funds to be wired to any bank account of this instance using the wire method specified with the order. Note that right now, we do not support the use of exchange bank accounts with mandatory currency conversion.\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_NO_EXCHANGES_FOR_WIRE_METHOD = 2509,\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. Deletion may work later after the offer has expired if it remains unpaid.\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 exceeds the original price paid by the customer.\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 * Only paid orders can be refunded, and the frontend specified an unpaid order to issue a refund for.\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 ever 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 token family slug provided in this order could not be found in the merchant 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 MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN = 2533,\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 amount transferred differs between what was submitted and what the exchange claimed.\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_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS = 2563,\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 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 MERCHANT_PRIVATE_ACCOUNT_DELETE_UNKNOWN_ACCOUNT = 2626,\n\n\n /**\n * The bank account specified in the request already exists at the merchant.\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_ACCOUNT_EXISTS = 2627,\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 requested exchange does not allow rewards.\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_REWARDS_NOT_ALLOWED = 2701,\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 rewards 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_REWARD_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the rewards 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_REWARD_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the reward, and it was configured for rewardping. However, the funds remaining are insufficient to cover the reward, 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_REWARD_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the reward.\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_REWARD_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 * The OTP device 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_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS = 2851,\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 * The requested resource could not be 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 AUDITOR_RESOURCE_NOT_FOUND = 3102,\n\n\n /**\n * The URI is missing a path component.\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 AUDITOR_URI_MISSING_PATH_COMPONENT = 3103,\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 * 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 client tried to register a new account under a reserved username (like 'admin' for example).\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_RESERVED_USERNAME_CONFLICT = 5120,\n\n\n /**\n * The client tried to register a new account with an username 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 BANK_REGISTER_USERNAME_REUSE = 5121,\n\n\n /**\n * The client tried to register a new account with a payto:// URI 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 BANK_REGISTER_PAYTO_URI_REUSE = 5122,\n\n\n /**\n * The client tried to delete an account with a non null 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 BANK_ACCOUNT_BALANCE_NOT_ZERO = 5123,\n\n\n /**\n * The client tried to create a transaction or an operation that credit an unknown account.\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_UNKNOWN_CREDITOR = 5124,\n\n\n /**\n * The client tried to create a transaction or an operation that debit an unknown account.\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_UNKNOWN_DEBTOR = 5125,\n\n\n /**\n * The client tried to perform an action prohibited for exchange accounts.\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_ACCOUNT_IS_EXCHANGE = 5126,\n\n\n /**\n * The client tried to perform an action reserved for exchange accounts.\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_ACCOUNT_IS_NOT_EXCHANGE = 5127,\n\n\n /**\n * Received currency conversion is wrong.\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_BAD_CONVERSION = 5128,\n\n\n /**\n * The account referenced in this operation is missing tan info for the chosen channel.\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_MISSING_TAN_INFO = 5129,\n\n\n /**\n * The client attempted to confirm a transaction with incomplete info.\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_INCOMPLETE = 5130,\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 BANK_TAN_RATE_LIMITED = 5131,\n\n\n /**\n * This TAN channel is not supported.\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 BANK_TAN_CHANNEL_NOT_SUPPORTED = 5132,\n\n\n /**\n * Failed to send TAN using the helper script. Either script is not found, or script timeout, or script 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 BANK_TAN_CHANNEL_SCRIPT_FAILED = 5133,\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 BANK_TAN_CHALLENGE_FAILED = 5134,\n\n\n /**\n * A non-admin user has tried to change their legal 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_NON_ADMIN_PATCH_LEGAL_NAME = 5135,\n\n\n /**\n * A non-admin user has tried to change their debt limit.\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_NON_ADMIN_PATCH_DEBT_LIMIT = 5136,\n\n\n /**\n * A non-admin user has tried to change their password whihout providing the current 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 BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD = 5137,\n\n\n /**\n * Provided old password does not match current password.\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_PATCH_BAD_OLD_PASSWORD = 5138,\n\n\n /**\n * An admin user has tried to become an 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 BANK_PATCH_ADMIN_EXCHANGE = 5139,\n\n\n /**\n * A non-admin user has tried to change their cashout account.\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_NON_ADMIN_PATCH_CASHOUT = 5140,\n\n\n /**\n * A non-admin user has tried to change their contact info.\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_NON_ADMIN_PATCH_CONTACT = 5141,\n\n\n /**\n * The client tried to create a transaction that credit the admin account.\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_ADMIN_CREDITOR = 5142,\n\n\n /**\n * The referenced challenge 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_CHALLENGE_NOT_FOUND = 5143,\n\n\n /**\n * The referenced challenge has expired.\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_TAN_CHALLENGE_EXPIRED = 5144,\n\n\n /**\n * A non-admin user has tried to create an account with 2fa.\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_NON_ADMIN_SET_TAN_CHANNEL = 5145,\n\n\n /**\n * A non-admin user has tried to set their minimum cashout amount.\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_NON_ADMIN_SET_MIN_CASHOUT = 5146,\n\n\n /**\n * Amount of currency conversion it less than the minimum 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 BANK_CONVERSION_AMOUNT_TO_SMALL = 5147,\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_CONTENT_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_CONTENT_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 a reward) 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_REWARD_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 * The exchange's self-reported base URL does not match the one that the wallet is using.\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_BASE_URL_MISMATCH = 7030,\n\n\n /**\n * The order has already been paid 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_PAID = 7031,\n\n\n /**\n * An exchange that is required for some request is currently 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_EXCHANGE_UNAVAILABLE = 7032,\n\n\n /**\n * An exchange entry is still used by the exchange, thus it can't be deleted without purging.\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_ENTRY_USED = 7033,\n\n\n /**\n * The wallet database is unavailable and the wallet thus is not operational.\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_DB_UNAVAILABLE = 7034,\n\n\n /**\n * A taler:// URI is malformed and 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_TALER_URI_MALFORMED = 7035,\n\n\n /**\n * A wallet-core request was cancelled and thus can't provide a 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_CORE_REQUEST_CANCELLED = 7036,\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_CONTENT_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 * The Donau failed to perform the operation as it could not find the private keys. This is a problem with the Donau 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 DONAU_GENERIC_KEYS_MISSING = 8607,\n\n\n /**\n * The signature of the charity key 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 DONAU_CHARITY_SIGNATURE_INVALID = 8608,\n\n\n /**\n * The charity 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 DONAU_CHARITY_NOT_FOUND = 8609,\n\n\n /**\n * The donation amount specified in the request exceeds the limit of the charity.\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 DONAU_EXCEEDING_DONATION_LIMIT = 8610,\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 * The client is unknown or unauthorized.\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 CHALLENGER_GENERIC_CLIENT_UNKNOWN = 9750,\n\n\n /**\n * The client is not authorized to use the given redirect URI.\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 CHALLENGER_GENERIC_CLIENT_FORBIDDEN_BAD_REDIRECT_URI = 9751,\n\n\n /**\n * The service failed to execute its helper process to send the challenge.\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 CHALLENGER_HELPER_EXEC_FAILED = 9752,\n\n\n /**\n * The grant is unknown to the service (it could also have 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 CHALLENGER_GRANT_UNKNOWN = 9753,\n\n\n /**\n * The code given is not even well-formed.\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 CHALLENGER_CLIENT_FORBIDDEN_BAD_CODE = 9754,\n\n\n /**\n * The service is not aware of the referenced validation process.\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 CHALLENGER_GENERIC_VALIDATION_UNKNOWN = 9755,\n\n\n /**\n * The code given 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 CHALLENGER_CLIENT_FORBIDDEN_INVALID_CODE = 9756,\n\n\n /**\n * Too many attempts have been made, validation is temporarily disabled for this address.\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 CHALLENGER_TOO_MANY_ATTEMPTS = 9757,\n\n\n /**\n * The PIN code provided is incorrect.\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 CHALLENGER_INVALID_PIN = 9758,\n\n\n /**\n * The token cannot be valid as no address was ever provided by the client.\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 CHALLENGER_MISSING_ADDRESS = 9759,\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", "/*\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) 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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n codecForNumber,\n codecForString,\n renderContext,\n} from \"./codec.js\";\nimport { CurrencySpecification } from \"./index.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 * Separator character between integer and fractional\n */\nexport const FRAC_SEPARATOR = \".\";\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\n/**\n * Immutable amount.\n */\nexport class Amount {\n static from(a: AmountLike): Amount {\n return new Amount(Amounts.parseOrThrow(a), 0);\n }\n\n static zeroOfCurrency(currency: string): Amount {\n return new Amount(Amounts.zeroOfCurrency(currency), 0);\n }\n\n add(...a: AmountLike[]): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.add(this.val, ...a);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n mult(n: number): Amount {\n if (this.saturated) {\n return this;\n }\n const r = Amounts.mult(this, n);\n return new Amount(r.amount, r.saturated ? 1 : 0);\n }\n\n toJson(): AmountJson {\n return { ...this.val };\n }\n\n toString(): AmountString {\n return Amounts.stringify(this.val);\n }\n\n private constructor(\n private val: AmountJson,\n private saturated: number,\n ) {}\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 function codecForAmountString(): Codec<AmountString> {\n return {\n decode(x: any, c?: Context): AmountString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (Amounts.parse(x) === undefined) {\n throw new DecodingError(\n `invalid amount at ${renderContext(c)} got \"${x}\"`,\n );\n }\n return x as AmountString;\n },\n };\n}\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 = string | AmountString | AmountJson | Amount;\n\nexport interface DivmodResult {\n quotient: number;\n remainder: AmountJson;\n}\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 if (amt instanceof Amount) {\n return amt.toJson();\n }\n return amt;\n }\n\n static divmod(a1: AmountLike, a2: AmountLike): DivmodResult {\n const am1 = Amounts.jsonifyAmount(a1);\n const am2 = Amounts.jsonifyAmount(a2);\n if (am1.currency != am2.currency) {\n throw Error(`incompatible currency (${am1.currency} vs${am2.currency})`);\n }\n\n const x1 =\n BigInt(am1.value) * BigInt(amountFractionalBase) + BigInt(am1.fraction);\n const x2 =\n BigInt(am2.value) * BigInt(amountFractionalBase) + BigInt(am2.fraction);\n\n const quotient = x1 / x2;\n const remainderScaled = x1 % x2;\n\n return {\n quotient: Number(quotient),\n remainder: {\n currency: am1.currency,\n value: Number(remainderScaled / BigInt(amountFractionalBase)),\n fraction: Number(remainderScaled % BigInt(amountFractionalBase)),\n },\n };\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 * Check whether a string is a valid currency for a Taler amount.\n */\n static isCurrency(s: string): boolean {\n return /^[a-zA-Z]{1,11}$/.test(s);\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n *\n * Currency name size limit is 11 of ASCII letters\n * Fraction size limit is 8\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z]{1,11}):([0-9]+)([.][0-9]{1,8})?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || FRAC_SEPARATOR + \"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 (s instanceof Amount) {\n return s.toJson();\n }\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 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 multiplied 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): AmountString {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}` as AmountString;\n }\n\n static amountHasSameCurrency(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 isSameCurrency(curr1: string, curr2: string): boolean {\n return curr1.toLowerCase() === curr2.toLowerCase();\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 + FRAC_SEPARATOR;\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 static stringifyValueWithSpec(\n value: AmountJson,\n spec: CurrencySpecification,\n ): { currency: string; normal: string; small?: string } {\n const strValue = Amounts.stringifyValue(value);\n const pos = strValue.indexOf(FRAC_SEPARATOR);\n const originalPosition = pos < 0 ? strValue.length : pos;\n\n let currency = value.currency;\n const names = Object.keys(spec.alt_unit_names);\n let FRAC_POS_NEW_POSITION = originalPosition;\n //find symbol\n //FIXME: this should be based on a cache to speed up\n if (names.length > 0) {\n let unitIndex: string = \"0\"; //default entry by DD51\n names.forEach((index) => {\n const i = Number.parseInt(index, 10);\n if (Number.isNaN(i)) return; //skip\n if (originalPosition - i <= 0) return; //too big\n if (originalPosition - i < FRAC_POS_NEW_POSITION) {\n FRAC_POS_NEW_POSITION = originalPosition - i;\n unitIndex = index;\n }\n });\n currency = spec.alt_unit_names[unitIndex];\n }\n\n if (originalPosition === FRAC_POS_NEW_POSITION) {\n const { normal, small } = splitNormalAndSmall(\n strValue,\n originalPosition,\n spec,\n );\n return { currency, normal, small };\n }\n\n const intPart = strValue.substring(0, originalPosition);\n const fracPArt = strValue.substring(originalPosition + 1);\n //indexSize is always smaller than originalPosition\n const newValue =\n intPart.substring(0, FRAC_POS_NEW_POSITION) +\n FRAC_SEPARATOR +\n intPart.substring(FRAC_POS_NEW_POSITION) +\n fracPArt;\n const { normal, small } = splitNormalAndSmall(\n newValue,\n FRAC_POS_NEW_POSITION,\n spec,\n );\n return { currency, normal, small };\n }\n}\n\nfunction splitNormalAndSmall(\n decimal: string,\n fracSeparatorIndex: number,\n spec: CurrencySpecification,\n): { normal: string; small?: string } {\n let normal: string;\n let small: string | undefined;\n if (\n decimal.length - fracSeparatorIndex - 1 >\n spec.num_fractional_normal_digits\n ) {\n const limit = fracSeparatorIndex + spec.num_fractional_normal_digits + 1;\n normal = decimal.substring(0, limit);\n small = decimal.substring(limit);\n } else {\n normal = decimal;\n small = undefined;\n }\n return { normal, small };\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 //Include URL type for \"url\" and \"base\" params.\n constructor(url: string | URL, base?: string | URL) {\n let parsedBase = null;\n if (base !== undefined) {\n if (base instanceof URL) {\n base = base.href;\n }\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n if (url instanceof URL) {\n url = url.href;\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) 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\nlet globalLogLevel = LogLevel.Info;\nconst byTagLogLevel: Record<string, LogLevel> = {};\n\nlet nativeLogging: boolean = false;\n\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString\nError.prototype.toString = function () {\n if (\n this === null ||\n (typeof this !== \"object\" && typeof this !== \"function\")\n ) {\n throw new TypeError();\n }\n let name = this.name;\n name = name === undefined ? \"Error\" : `${name}`;\n let msg = this.message;\n msg = msg === undefined ? \"\" : `${msg}`;\n\n let cause = \"\";\n if (\"cause\" in this) {\n cause = `\\n Caused by: ${this.cause}`;\n }\n return `${name}: ${msg}${cause}`;\n};\n\nexport function getGlobalLogLevel(): string {\n return globalLogLevel;\n}\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nexport function enableNativeLogging() {\n nativeLogging = true;\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 writeNativeLog(\n message: any,\n tag: string,\n level: number,\n args: any[],\n): void {\n const logFn = (globalThis as any).__nativeLog;\n if (logFn) {\n let m: string;\n if (args.length == 0) {\n m = message;\n } else {\n m = message + \" \" + args.toString();\n }\n logFn(level, tag, message);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 2, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 3, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 4, args);\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 (nativeLogging) {\n writeNativeLog(message, this.tag, 1, args);\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", "/*\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\nimport { j2s } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\nconst logger = new Logger(\"codec.ts\");\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 * Return a codec for a value that must be a string.\n */\nexport function codecForStringURL(shouldEndWithSlash?: boolean): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return x;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n }\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForURL(shouldEndWithSlash?: boolean): Codec<URL> {\n return {\n decode(x: any, c?: Context): URL {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (shouldEndWithSlash && !x.endsWith(\"/\")) {\n throw new DecodingError(\n `expected URL string that ends with slash at ${renderContext(\n c,\n )} but got ${x}`,\n );\n }\n try {\n const url = new URL(x);\n return url;\n } catch (e) {\n if (e instanceof Error) {\n throw new DecodingError(e.message);\n } else {\n throw new DecodingError(\n `expected an URL string at ${renderContext(c)} but got \"${x}\"`,\n );\n }\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 function codecForLazy<V>(innerCodec: () => Codec<V>): Codec<V> {\n let instance: Codec<V> | undefined = undefined\n return {\n decode(x: any, c?: Context): V {\n if (instance === undefined) {\n instance = innerCodec()\n }\n return instance.decode(x, c);\n },\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 if (logger.shouldLogTrace()) {\n logger.trace(`offending value: ${j2s(x)}`);\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\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 reuse 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 * as argon2 from \"./argon2.js\";\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\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\nimport { AmountLike, Amounts } from \"./amounts.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 hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n ): 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 async function hashArgon2id(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n memorySize: number,\n hashLength: number,\n): Promise<Uint8Array> {\n if (tart) {\n return tart.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\n }\n return await argon2.hashArgon2id(\n password,\n salt,\n iterations,\n memorySize,\n hashLength,\n );\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 global/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 public 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 public 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\n/**\n * This makes the assumption that the uint64 fits a float,\n * which should be true for all Taler protocol messages.\n */\nexport function bufferForUint64(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(8);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n if (n < 0 || !Number.isInteger(n)) {\n throw Error(\"non-negative integer expected\");\n }\n dv.setBigUint64(0, BigInt(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 MERCHANT_REFUND = 1102,\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 WALLET_PURSE_DELETE = 1220,\n WALLET_COIN_HISTORY = 1209,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n TALER_SIGNATURE_AML_DECISION = 1350,\n TALER_SIGNATURE_AML_QUERY = 1351,\n TALER_SIGNATURE_MASTER_AML_KEY = 1017,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport 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 const PublishedAgeRestrictionBaseKey: Edx25519PublicKey = decodeCrock(\n \"CH0VKFDZ2GWRWHQBBGEK9MWV5YDQVJ0RXEE0KYT3NMB69F0R96TG\",\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 < numPrivs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-commitment\"),\n salt: bufferForUint32(i),\n });\n\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n privs.push(priv);\n }\n\n for (let i = numPrivs; i < numPubs; i++) {\n const deriveSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-factor\"),\n salt: bufferForUint32(i),\n });\n const pub = await Edx25519.publicKeyDerive(\n PublishedAgeRestrictionBaseKey,\n deriveSeed,\n );\n pubs.push(pub);\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!\nexport type 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\nexport async 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\nexport async 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 nonce: EncryptionNonce,\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(nonce, key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n nonce: EncryptionNonce,\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(nonce, 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\nexport function amountToBuffer(amount: AmountLike): Uint8Array {\n const amountJ = Amounts.jsonifyAmount(amount);\n const buffer = new ArrayBuffer(8 + 4 + 12);\n const dvbuf = new DataView(buffer);\n const u8buf = new Uint8Array(buffer);\n const curr = stringToBytes(amountJ.currency);\n if (typeof dvbuf.setBigUint64 !== \"undefined\") {\n dvbuf.setBigUint64(0, BigInt(amountJ.value));\n } else {\n const arr = bigint(amountJ.value).toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n dvbuf.setUint8(offset++, arr[i]);\n }\n }\n dvbuf.setUint32(8, amountJ.fraction);\n u8buf.set(curr, 8 + 4);\n\n return u8buf;\n}\n\nexport function timestampRoundedToBuffer(\n ts: TalerProtocolTimestamp,\n): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.t_s) * BigInt(1000 * 1000);\n v.setBigUint64(0, s);\n } else {\n const s =\n ts.t_s === \"never\" ? bigint.zero : bigint(ts.t_s).multiply(1000 * 1000);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\n}\n\nexport function durationRoundedToBuffer(ts: TalerProtocolDuration): Uint8Array {\n const b = new ArrayBuffer(8);\n const v = new DataView(b);\n // The buffer we sign over represents the timestamp in microseconds.\n if (typeof v.setBigUint64 !== \"undefined\") {\n const s = BigInt(ts.d_us);\n v.setBigUint64(0, s);\n } else {\n const s = ts.d_us === \"forever\" ? bigint.zero : bigint(ts.d_us);\n const arr = s.toArray(2 ** 8).value;\n let offset = 8 - arr.length;\n for (let i = 0; i < arr.length; i++) {\n v.setUint8(offset++, arr[i]);\n }\n }\n return new Uint8Array(b);\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, Context, renderContext } from \"./codec.js\";\n\ndeclare const flavor_AbsoluteTime: unique symbol;\ndeclare const flavor_TalerProtocolTimestamp: unique symbol;\ndeclare const flavor_TalerPreciseTimestamp: unique symbol;\n\nconst opaque_AbsoluteTime: unique symbol = Symbol(\"opaque_AbsoluteTime\");\n\n// FIXME: Make this opaque!\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n\n readonly _flavor?: typeof flavor_AbsoluteTime;\n\n // Make the type opaque, we only want our constructors\n // to able to create an AbsoluteTime value.\n [opaque_AbsoluteTime]: true;\n}\n\nexport interface TalerProtocolTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n readonly _flavor?: typeof flavor_TalerProtocolTimestamp;\n}\n\n/**\n * Precise timestamp, typically used in the wallet-core\n * API but not in other Taler APIs so far.\n */\nexport interface TalerPreciseTimestamp {\n /**\n * Seconds (as integer) since epoch.\n */\n readonly t_s: number | \"never\";\n\n /**\n * Optional microsecond offset (non-negative integer).\n */\n readonly off_us?: number;\n\n readonly _flavor?: typeof flavor_TalerPreciseTimestamp;\n}\n\nexport namespace TalerPreciseTimestamp {\n export function now(): TalerPreciseTimestamp {\n const absNow = AbsoluteTime.now();\n return AbsoluteTime.toPreciseTimestamp(absNow);\n }\n\n export function round(t: TalerPreciseTimestamp): TalerProtocolTimestamp {\n return {\n t_s: t.t_s,\n };\n }\n\n export function fromSeconds(s: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(s),\n off_us: Math.floor((s - Math.floor(s)) / 1000 / 1000),\n };\n }\n\n export function fromMilliseconds(ms: number): TalerPreciseTimestamp {\n return {\n t_s: Math.floor(ms / 1000),\n off_us: Math.floor((ms - Math.floor(ms / 1000) * 1000) * 1000),\n };\n }\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toProtocolTimestamp(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 isNever(t: TalerProtocolTimestamp): boolean {\n return t.t_s === \"never\";\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\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\n/**\n * Timeshift in milliseconds.\n */\nlet timeshift = 0;\n\n/**\n * Set timetravel offset in milliseconds.\n *\n * Use carefully and only for testing.\n */\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function toMilliseconds(d: Duration): number {\n if (d.d_ms === \"forever\") {\n return Number.MAX_VALUE;\n }\n return d.d_ms;\n }\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 /**\n * Compare two durations. Returns 0 when equal, -1 when a < b\n * and +1 when a > b.\n */\n export function cmp(d1: Duration, d2: Duration): 1 | 0 | -1 {\n if (d1.d_ms === \"forever\") {\n if (d2.d_ms === \"forever\") {\n return 0;\n }\n return 1;\n }\n if (d2.d_ms === \"forever\") {\n return -1;\n }\n if (d1.d_ms == d2.d_ms) {\n return 0;\n }\n if (d1.d_ms > d2.d_ms) {\n return 1;\n }\n return -1;\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 function fromSpec(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\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: Math.floor(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 fromMilliseconds(ms: number): Duration {\n return {\n d_ms: ms,\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 getStampMsNow(): number {\n return new Date().getTime();\n }\n\n export function getStampMsNever(): number {\n return Number.MAX_SAFE_INTEGER;\n }\n\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromMilliseconds(ms: number): AbsoluteTime {\n return {\n t_ms: ms,\n [opaque_AbsoluteTime]: true,\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, [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms), [opaque_AbsoluteTime]: true };\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 isNever(t: AbsoluteTime): boolean {\n return t.t_ms === \"never\";\n }\n\n export function fromProtocolTimestamp(\n t: TalerProtocolTimestamp,\n ): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n return {\n t_ms: t.t_s * 1000,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromStampMs(stampMs: number): AbsoluteTime {\n return {\n t_ms: stampMs,\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function fromPreciseTimestamp(t: TalerPreciseTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n const offsetUs = t.off_us ?? 0;\n return {\n t_ms: t.t_s * 1000 + Math.floor(offsetUs / 1000),\n [opaque_AbsoluteTime]: true,\n };\n }\n\n export function toStampMs(at: AbsoluteTime): number {\n if (at.t_ms === \"never\") {\n return Number.MAX_SAFE_INTEGER;\n }\n return at.t_ms;\n }\n\n export function toPreciseTimestamp(at: AbsoluteTime): TalerPreciseTimestamp {\n if (at.t_ms == \"never\") {\n return {\n t_s: \"never\",\n };\n }\n const t_s = Math.floor(at.t_ms / 1000);\n const off_us = Math.floor(1000 * (at.t_ms - t_s * 1000));\n return {\n t_s,\n off_us,\n };\n }\n\n export function toProtocolTimestamp(\n at: AbsoluteTime,\n ): 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\", [opaque_AbsoluteTime]: true };\n }\n return { t_ms: t1.t_ms + d.d_ms, [opaque_AbsoluteTime]: true };\n }\n\n /**\n * Get the remaining duration until {@param t1}.\n *\n * If {@param t1} already happened, the remaining duration\n * is zero.\n */\n export function remaining(t1: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return Duration.getForever();\n }\n const stampNow = now();\n if (stampNow.t_ms === \"never\") {\n throw Error(\"invariant violated\");\n }\n return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_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\", [opaque_AbsoluteTime]: true };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0, [opaque_AbsoluteTime]: true };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms), [opaque_AbsoluteTime]: true };\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 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 if (x === undefined) {\n throw Error(`got undefined and expected absolute time at ${renderContext(c)}`);\n }\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\", [opaque_AbsoluteTime]: true };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms, [opaque_AbsoluteTime]: true };\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 if (x === undefined) {\n throw Error(`got undefined and expected timestamp at ${renderContext(c)}`);\n }\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 protocol timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForPreciseTimestamp: Codec<TalerPreciseTimestamp> = {\n decode(x: any, c?: Context): TalerPreciseTimestamp {\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 throw Error(`expected precise 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 { Amounts, codecForAmountString } from \"./amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecForStringURL,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport {\n CurrencySpecification,\n codecForCurrencySpecificiation,\n codecForEither,\n codecForProduct,\n} from \"./index.js\";\nimport { Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForDuration,\n codecForTimestamp,\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 // The exchange's base URL.\n url: string;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKeyString;\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: EddsaPublicKeyString;\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 // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\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?: InternationalizedString;\n\n // The number of units of the product to deliver to the customer.\n quantity?: Integer;\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?: ImageDataUrl;\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 // The hash of the merchant instance's wire details.\n h_wire: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: TalerProtocolDuration;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: InternationalizedString;\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: string;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: TalerProtocolTimestamp;\n\n // More info about the merchant, see below.\n merchant: MerchantInfo;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: string;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: TalerProtocolTimestamp;\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: ExchangeHandle[];\n\n // List of products that are part of the purchase (see Product).\n products?: Product[];\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: TalerProtocolTimestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // Time when this contract was generated.\n timestamp: TalerProtocolTimestamp;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional, but either fulfillment_url\n // or fulfillment_message must be specified in every\n // contract terms.\n //\n // If a non-unique fulfillment URL is used, a customer can only\n // buy the order once and will be redirected to a previous purchase\n // when trying to buy an order with the same fulfillment URL a second\n // time. This is useful for digital goods that a customer only needs\n // to buy once but should be able to repeatedly download.\n //\n // For orders where the customer is expected to be able to make\n // repeated purchases (for equivalent goods), the fulfillment URL\n // should be made unique for every order. The easiest way to do\n // this is to include a unique order ID in the fulfillment URL.\n //\n // When POSTing to the merchant, the placeholder text \"${ORDER_ID}\"\n // is be replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL). Note that this placeholder can only be used once.\n // Front-ends may use other means to generate a unique fulfillment URL.\n fulfillment_url?: string;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: InternationalizedString;\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: string;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n // Must really be an Object (not a string, integer, float or array).\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\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 * 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 * Canonical, public base URL of the exchange.\n */\n base_url: string;\n\n currency: string;\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 accounts: ExchangeWireAccount[];\n\n wire_fees: { [methodName: string]: WireFeesJson[] };\n\n denominations: DenomGroup[];\n}\n\nexport type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n\nexport interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n\n // XOR of all the SHA-512 hash values of the denominations' public keys\n // in this group. Note that for hashing, the binary format of the\n // public keys is used, and not their base32 encoding.\n hash: HashCodeString;\n}\n\nexport interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignatureString;\n\n // When does the denomination key become valid?\n stamp_start: TalerProtocolTimestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: TalerProtocolTimestamp;\n\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n}\n\nexport type RsaPublicKeySring = string;\nexport type AgeMask = number;\nexport type ImageDataUrl = string;\n\n/**\n * 32-byte value representing a point on Curve25519.\n */\nexport type Cs25519Point = string;\n\nexport interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKeySring;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n}\n\nexport interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\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\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 status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\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 RewardPickupGetResponse {\n reward_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 pos_confirmation?: 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 // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: \"selected\" | \"aborted\" | \"confirmed\" | \"pending\";\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected or pending.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Deprecated field use status instead\n // The transfer has been confirmed and registered by the bank.\n // Does not guarantee that the funds have arrived at the exchange already.\n transfer_done: boolean;\n}\n\nexport const codeForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\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\ndeclare const __amount_str: unique symbol;\nexport type AmountString = string & { [__amount_str]: true };\n// export type AmountString = string;\nexport type Base32String = string;\nexport type EddsaSignatureString = string;\nexport type EddsaPublicKeyString = string;\nexport type EddsaPrivateKeyString = 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 codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\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\", codecForAmountString())\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\", codecForAmountString())\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\", codecForAmountString())\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 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\n// FIXME: Validate properly!\nexport const codecForNgDenominations: Codec<DenomGroup> = codecForAny();\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\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 .property(\"accounts\", codecForList(codecForExchangeWireAccount()))\n .property(\"wire_fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .property(\"denominations\", codecForList(codecForNgDenominations))\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 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(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"confirmed\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"pending\"),\n ),\n )\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 codecForRewardPickupGetResponse =\n (): Codec<RewardPickupGetResponse> =>\n buildCodecForObject<RewardPickupGetResponse>()\n .property(\"reward_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 codecForExchangeWithdrawBatchResponse =\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 .property(\"pos_confirmation\", codecOptional(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 codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\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 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 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\ninterface DepositConfirmationSignature {\n // The EdDSA signature of `TALER_DepositConfirmationPS` using a current\n // `signing key of the exchange <sign-key-priv>` 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: EddsaSignatureString;\n}\n\nexport interface BatchDepositSuccess {\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 // `Public EdDSA key of the exchange <sign-key-pub>` 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: EddsaPublicKeyString;\n\n // Array of deposit confirmation signatures from the exchange\n // Entries must be in the same order the coins were given\n // in the batch deposit request.\n exchange_sig: EddsaSignatureString;\n}\n\nexport const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> =>\n buildCodecForObject<BatchDepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"BatchDepositSuccess\");\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\n/**\n * @deprecated batch deposit should be used.\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 type WireSalt = string;\n\nexport interface ExchangeBatchDepositRequest {\n // The merchant's account details.\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: WireSalt;\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 // The list of coins that are going to be deposited with this Request.\n coins: BatchDepositRequestCoin[];\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 <merchant-pub>`, so that the client can identify the\n // merchant for refund requests.\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 batch-deposit.\n // This might be a refund, auction or escrow policy.\n policy?: any;\n}\n\nexport interface BatchDepositRequestCoin {\n // EdDSA public key of the coin being deposited.\n coin_pub: EddsaPublicKeyString;\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 // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: Amounts;\n\n // Signature over `TALER_DepositRequestPS`, made by the customer with the\n // `coin's private key <coin-priv>`.\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\nexport interface ExchangeRefundRequest {\n // Amount to be refunded, can be a fraction of the\n // coin's total deposit value (including deposit fee);\n // must be larger than the refund fee.\n refund_amount: AmountString;\n\n // SHA-512 hash of the contact of the merchant with the customer.\n h_contract_terms: HashCodeString;\n\n // 64-bit transaction id of the refund transaction between merchant and customer.\n rtransaction_id: number;\n\n // EdDSA public key of the merchant.\n merchant_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the merchant over a\n // TALER_RefundRequestPS with purpose\n // TALER_SIGNATURE_MERCHANT_REFUND\n // affirming the refund.\n merchant_sig: EddsaPublicKeyString;\n}\n\nexport interface ExchangeRefundSuccessResponse {\n // The EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND over\n // a TALER_RecoupRefreshConfirmationPS\n // 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\nexport const codecForExchangeRefundSuccessResponse =\n (): Codec<ExchangeRefundSuccessResponse> =>\n buildCodecForObject<ExchangeRefundSuccessResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .build(\"ExchangeRefundSuccessResponse\");\n\nexport type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n\nexport interface DenyAllAccountRestriction {\n type: \"deny\";\n}\n\n// Accounts interacting with this type of account\n// restriction must have a payto://-URI matching\n// the given regex.\nexport interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: InternationalizedString;\n}\n\nexport interface ExchangeWireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: string;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignatureString;\n\n // Display label wallets should use to show this\n // bank account.\n // Since protocol **v19**.\n bank_label?: string;\n priority?: number;\n}\n\nexport const codecForExchangeWireAccount = (): Codec<ExchangeWireAccount> =>\n buildCodecForObject<ExchangeWireAccount>()\n .property(\"conversion_url\", codecOptional(codecForStringURL()))\n .property(\"credit_restrictions\", codecForList(codecForAny()))\n .property(\"debit_restrictions\", codecForList(codecForAny()))\n .property(\"master_sig\", codecForString())\n .property(\"payto_uri\", codecForString())\n .property(\"bank_label\", codecOptional(codecForString()))\n .property(\"priority\", codecOptional(codecForNumber()))\n .build(\"WireAccount\");\n\nexport type Integer = number;\n\nexport interface BankConversionInfoConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n regional_currency: string;\n\n fiat_currency: string;\n\n // Currency used by this bank.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency_specification: CurrencySpecification;\n}\n\nexport const codecForBankConversionInfoConfig =\n (): Codec<BankConversionInfoConfig> =>\n buildCodecForObject<BankConversionInfoConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"fiat_currency\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .build(\"BankConversionInfoConfig\");\n\nexport interface DenominationExpiredMessage {\n // Taler error code. Note that beyond\n // expiration this message format is also\n // used if the key is not yet valid, or\n // has been revoked.\n code: number;\n\n // Signature by the exchange over a\n // TALER_DenominationExpiredAffirmationPS.\n // Must have purpose TALER_SIGNATURE_EXCHANGE_AFFIRM_DENOM_EXPIRED.\n exchange_sig: EddsaSignatureString;\n\n // Public key of the exchange used to create\n // the 'exchange_sig.\n exchange_pub: EddsaPublicKeyString;\n\n // Hash of the denomination public key that is unknown.\n h_denom_pub: HashCodeString;\n\n // When was the signature created.\n timestamp: TalerProtocolTimestamp;\n\n // What kind of operation was requested that now\n // failed?\n oper: string;\n}\n\nexport const codecForDenominationExpiredMessage = () =>\n buildCodecForObject<DenominationExpiredMessage>()\n .property(\"code\", codecForNumber())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"oper\", codecForString())\n .build(\"DenominationExpiredMessage\");\n\nexport interface CoinHistoryResponse {\n // Current balance of the coin.\n balance: AmountString;\n\n // Hash of the coin's denomination.\n h_denom_pub: HashCodeString;\n\n // Transaction history for the coin.\n history: any[];\n}\n\nexport const codecForCoinHistoryResponse = () =>\n buildCodecForObject<CoinHistoryResponse>()\n .property(\"balance\", codecForAmountString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"history\", codecForAny())\n .build(\"CoinHistoryResponse\");\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 { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { URLSearchParams } from \"./url.js\";\n\nexport type PaytoUri =\n | PaytoUriUnknown\n | PaytoUriIBAN\n | PaytoUriTalerBank\n | PaytoUriBitcoin;\n\ndeclare const __payto_str: unique symbol;\nexport type PaytoString = string & { [__payto_str]: true };\n\nexport function codecForPaytoString(): Codec<PaytoString> {\n return {\n decode(x: any, c?: Context): PaytoString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (!x.startsWith(paytoPfx)) {\n throw new DecodingError(\n `expected start with payto at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as PaytoString;\n },\n };\n}\n\nexport interface PaytoUriGeneric {\n targetType: PaytoType | 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 address: string;\n segwitAddrs: Array<string>;\n}\n\nconst paytoPfx = \"payto://\";\n\nexport type PaytoType = \"iban\" | \"bitcoin\" | \"x-taler-bank\";\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: PaytoType,\n first: string,\n second?: string,\n): PaytoUriGeneric {\n switch (type) {\n case \"bitcoin\": {\n const uppercased = first.toUpperCase();\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetType: \"bitcoin\",\n targetPath: first,\n address: uppercased,\n params: {},\n segwitAddrs: !second ? [] : generateFakeSegwitAddress(second, first),\n };\n return result;\n }\n case \"iban\": {\n const uppercased = first.toUpperCase();\n const result: PaytoUriIBAN = {\n isKnown: true,\n targetType: \"iban\",\n iban: uppercased,\n params: {},\n targetPath: !second ? uppercased : `${second}/${uppercased}`,\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): PaytoString {\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 as PaytoString;\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].toUpperCase();\n }\n if (parts.length === 2) {\n bic = parts[0];\n iban = parts[1].toUpperCase();\n } else {\n iban = targetPath.toUpperCase();\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 uppercased = targetType.toUpperCase();\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetPath,\n targetType,\n address: uppercased,\n params,\n segwitAddrs,\n };\n\n return result;\n }\n return {\n targetPath,\n targetType,\n params,\n isKnown: false,\n };\n}\n\nexport function talerPaytoFromExchangeReserve(\n exchangeBaseUrl: string,\n reservePub: string,\n): string {\n const url = new URL(exchangeBaseUrl);\n let proto: string;\n if (url.protocol === \"http:\") {\n proto = \"taler-reserve-http\";\n } else if (url.protocol === \"https:\") {\n proto = \"taler-reserve\";\n } else {\n throw Error(`unsupported exchange base URL protocol (${url.protocol})`);\n }\n\n let path = url.pathname;\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n return `payto://${proto}/${url.host}${url.pathname}${reservePub}`;\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 type { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport {\n TalerError,\n base64FromArrayBuffer,\n makeErrorDetail,\n stringToBytes,\n} from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AbsoluteTime, Duration } 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\" | \"PATCH\" | \"PUT\" | \"GET\" | \"DELETE\";\n headers?: { [name: string]: string | undefined };\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 * How to handle redirects.\n * Same semantics as WHATWG fetch.\n */\n redirect?: \"follow\" | \"error\" | \"manual\";\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 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\n/**\n * Read Taler error details from an HTTP response.\n */\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const contentType = httpResponse.headers.get(\"content-type\");\n if (contentType !== \"application/json\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n contentType: contentType || \"<null>\",\n },\n \"Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.\",\n );\n }\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\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 let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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\nexport async function readResponseJsonOrErrorCode<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<{ isError: boolean; response: T }> {\n let respJson;\n try {\n respJson = await httpResponse.json();\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 \"Couldn't parse JSON format from response\",\n );\n }\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: !(httpResponse.status >= 200 && httpResponse.status < 300),\n response: parsedResponse,\n };\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 expectSuccessResponseOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (httpResponse.status >= 200 && httpResponse.status <= 299) {\n return;\n }\n const errResp = await readTalerErrorResponse(httpResponse);\n throwUnexpectedRequestError(httpResponse, errResp);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 let errJson;\n try {\n errJson = await httpResponse.json();\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 \"Couldn't parse JSON format from error response\",\n );\n }\n\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 = AbsoluteTime.fromMilliseconds(expiryDateMs);\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 * Only allow HTTPS connections, not plain http.\n */\n requireTls?: boolean;\n printAsCurl?: 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/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport {\n HttpResponse,\n readResponseJsonOrErrorCode,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http-common.js\";\nimport {\n Codec,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TalerErrorDetail,\n} from \"./index.js\";\n\ntype OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =\n ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;\n\nexport type OperationResult<Body, ErrorEnum, K = never> =\n | OperationOk<Body>\n | OperationAlternative<ErrorEnum, any>\n | OperationFail<ErrorEnum>\n | OperationFailWithBodyOrNever<ErrorEnum, K>;\n\nexport function isOperationOk<T, E>(\n c: OperationResult<T, E>,\n): c is OperationOk<T> {\n return c.type === \"ok\";\n}\n\nexport function isOperationFail<T, E>(\n c: OperationResult<T, E>,\n): c is OperationFail<E> {\n return c.type === \"fail\";\n}\n\n/**\n * successful operation\n */\nexport interface OperationOk<BodyT> {\n type: \"ok\";\n\n /**\n * Parsed response body.\n */\n body: BodyT;\n}\n\n/**\n * unsuccessful operation, see details\n */\nexport interface OperationFail<T> {\n type: \"fail\";\n\n /**\n * Error case (either HTTP status code or TalerErrorCode)\n */\n case: T;\n\n detail: TalerErrorDetail;\n}\n\n/**\n * unsuccessful operation, see body\n */\nexport interface OperationAlternative<T, B> {\n type: \"fail\";\n\n case: T;\n body: B;\n}\n\nexport interface OperationFailWithBody<B> {\n type: \"fail\";\n\n case: keyof B;\n body: B[OperationFailWithBody<B>[\"case\"]];\n}\n\nexport async function opSuccessFromHttp<T>(\n resp: HttpResponse,\n codec: Codec<T>,\n): Promise<OperationOk<T>> {\n const body = await readSuccessResponseJsonOrThrow(resp, codec);\n return { type: \"ok\" as const, body };\n}\n\n/**\n * Success case, but instead of the body we're returning a fixed response\n * to the client.\n */\nexport function opFixedSuccess<T>(body: T): OperationOk<T> {\n return { type: \"ok\" as const, body };\n}\n\nexport function opEmptySuccess(resp: HttpResponse): OperationOk<void> {\n return { type: \"ok\" as const, body: void 0 };\n}\n\nexport async function opKnownFailureWithBody<B>(\n case_: keyof B,\n body: B[typeof case_],\n): Promise<OperationFailWithBody<B>> {\n return { type: \"fail\", case: case_, body };\n}\n\nexport async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(\n resp: HttpResponse,\n s: T,\n codec: Codec<B>,\n): Promise<OperationAlternative<T, B>> {\n const body = (await readResponseJsonOrErrorCode(resp, codec)).response;\n return { type: \"fail\", case: s, body };\n}\n\nexport async function opKnownHttpFailure<T extends HttpStatusCode>(\n s: T,\n resp: HttpResponse,\n): Promise<OperationFail<T>> {\n const detail = await readTalerErrorResponse(resp);\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opKnownTalerFailure<T extends TalerErrorCode>(\n s: T,\n detail: TalerErrorDetail,\n): OperationFail<T> {\n return { type: \"fail\", case: s, detail };\n}\n\nexport function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: resp.requestUrl,\n requestMethod: resp.requestMethod,\n httpStatusCode: resp.status,\n errorResponse: error,\n },\n `Unexpected HTTP status ${resp.status} in response`,\n );\n}\n\n/**\n * Convenience function to throw an error if the operation is not a success.\n */\nexport function narrowOpSuccessOrThrow<Body, ErrorEnum>(\n opName: string,\n opRes: OperationResult<Body, ErrorEnum>,\n): asserts opRes is OperationOk<Body> {\n if (opRes.type !== \"ok\") {\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR,\n {\n operation: opName,\n error: String(opRes.case),\n detail: \"detail\" in opRes ? opRes.detail : undefined,\n },\n `Operation ${opName} failed: ${String(opRes.case)}`,\n );\n }\n}\n\nexport type ResultByMethod<\n TT extends object,\n p extends keyof TT,\n> = TT[p] extends (...args: any[]) => infer Ret\n ? Ret extends Promise<infer Result>\n ? Result extends OperationResult<any, any>\n ? Result\n : never\n : never //api always use Promises\n : never; //error cases just for functions\n\nexport type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<\n ResultByMethod<TT, p>,\n OperationOk<any>\n>;\n\nexport type RedirectResult = { redirectURL: URL }\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\n/**\n * @fileoverview\n * Construction and parsing of taler:// URIs.\n * Specification: https://lsd.gnunet.org/lsd0006/\n */\n\n/**\n * Imports.\n */\nimport { Codec, Context, DecodingError, renderContext } from \"./codec.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { opFixedSuccess, opKnownTalerFailure } from \"./operation.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { URL, URLSearchParams } from \"./url.js\";\n/**\n * A parsed taler URI.\n */\nexport type TalerUri =\n | PayUriResult\n | PayTemplateUriResult\n | DevExperimentUri\n | PayPullUriResult\n | PayPushUriResult\n | BackupRestoreUri\n | RefundUriResult\n | WithdrawUriResult\n | WithdrawExchangeUri\n | AddExchangeUri;\n\ndeclare const __action_str: unique symbol;\nexport type TalerUriString = string & { [__action_str]: true };\n\nexport function codecForTalerUriString(): Codec<TalerUriString> {\n return {\n decode(x: any, c?: Context): TalerUriString {\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n }\n if (parseTalerUri(x) === undefined) {\n throw new DecodingError(\n `invalid taler URI at ${renderContext(c)} but got \"${x}\"`,\n );\n }\n return x as TalerUriString;\n },\n };\n}\n\nexport interface PayUriResult {\n type: TalerUriAction.Pay;\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken?: string;\n noncePriv?: string;\n}\n\nexport type TemplateParams = {\n amount?: string;\n summary?: string;\n};\n\nexport interface PayTemplateUriResult {\n type: TalerUriAction.PayTemplate;\n merchantBaseUrl: string;\n templateId: string;\n templateParams: TemplateParams;\n}\n\nexport interface WithdrawUriResult {\n type: TalerUriAction.Withdraw;\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n type: TalerUriAction.Refund;\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface PayPushUriResult {\n type: TalerUriAction.PayPush;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n type: TalerUriAction.PayPull;\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n type: TalerUriAction.DevExperiment;\n devExperimentId: string;\n}\n\nexport interface BackupRestoreUri {\n type: TalerUriAction.Restore;\n walletRootPriv: string;\n providers: Array<string>;\n}\n\nexport interface WithdrawExchangeUri {\n type: TalerUriAction.WithdrawExchange;\n exchangeBaseUrl: string;\n exchangePub?: string;\n amount?: AmountString;\n}\n\nexport interface AddExchangeUri {\n type: TalerUriAction.AddExchange;\n exchangeBaseUrl: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"withdraw\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 const result: WithdrawUriResult = {\n type: TalerUriAction.Withdraw,\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n withdrawalOperationId: withdrawId,\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const r = parseWithdrawUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseAddExchangeUriWithError(s: string) {\n const pi = parseProtoInfoWithError(s, \"add-exchange\");\n if (pi.type === \"fail\") {\n return pi;\n }\n const parts = pi.body.rest.split(\"/\");\n\n if (parts.length < 2) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\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 p = [host, ...pathSegments].join(\"/\");\n\n const result: AddExchangeUri = {\n type: TalerUriAction.AddExchange,\n exchangeBaseUrl: canonicalizeBaseUrl(\n `${pi.body.innerProto}://${p}/`,\n ),\n };\n return opFixedSuccess(result);\n}\n\n/**\n *\n * @deprecated use parseWithdrawUriWithError\n */\nexport function parseAddExchangeUri(s: string): AddExchangeUri | undefined {\n const r = parseAddExchangeUriWithError(s);\n if (r.type === \"fail\") return undefined;\n return r.body;\n}\n\n/**\n * @deprecated use TalerUriAction\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\nexport enum TalerUriAction {\n Pay = \"pay\",\n Withdraw = \"withdraw\",\n Refund = \"refund\",\n PayPull = \"pay-pull\",\n PayPush = \"pay-push\",\n PayTemplate = \"pay-template\",\n Restore = \"restore\",\n DevExperiment = \"dev-experiment\",\n WithdrawExchange = \"withdraw-exchange\",\n AddExchange = \"add-exchange\",\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\nfunction parseProtoInfoWithError(s: string, action: string) {\n if (\n !s.toLowerCase().startsWith(\"taler://\") &&\n !s.toLowerCase().startsWith(\"taler+http://\")\n ) {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return opFixedSuccess({\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n });\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return opFixedSuccess({\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n });\n } else {\n return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {\n code: TalerErrorCode.WALLET_TALER_URI_MALFORMED,\n });\n }\n}\n\ntype Parser = (s: string) => TalerUri | undefined;\nconst parsers: { [A in TalerUriAction]: Parser } = {\n [TalerUriAction.Pay]: parsePayUri,\n [TalerUriAction.PayPull]: parsePayPullUri,\n [TalerUriAction.PayPush]: parsePayPushUri,\n [TalerUriAction.PayTemplate]: parsePayTemplateUri,\n [TalerUriAction.Restore]: parseRestoreUri,\n [TalerUriAction.Refund]: parseRefundUri,\n [TalerUriAction.Withdraw]: parseWithdrawUri,\n [TalerUriAction.DevExperiment]: parseDevExperimentUri,\n [TalerUriAction.WithdrawExchange]: parseWithdrawExchangeUri,\n [TalerUriAction.AddExchange]: parseAddExchangeUri,\n};\n\nexport function parseTalerUri(string: string): TalerUri | undefined {\n const https = string.startsWith(\"taler://\");\n const http = string.startsWith(\"taler+http://\");\n if (!https && !http) return undefined;\n const actionStart = https ? 8 : 13;\n const actionEnd = string.indexOf(\"/\", actionStart + 1);\n const action = string.substring(actionStart, actionEnd);\n const found = Object.values(TalerUriAction).find((x) => x === action);\n if (!found) return undefined;\n return parsers[found](string);\n}\n\nexport function stringifyTalerUri(uri: TalerUri): string {\n switch (uri.type) {\n case TalerUriAction.DevExperiment: {\n return stringifyDevExperimentUri(uri);\n }\n case TalerUriAction.Pay: {\n return stringifyPayUri(uri);\n }\n case TalerUriAction.PayPull: {\n return stringifyPayPullUri(uri);\n }\n case TalerUriAction.PayPush: {\n return stringifyPayPushUri(uri);\n }\n case TalerUriAction.PayTemplate: {\n return stringifyPayTemplateUri(uri);\n }\n case TalerUriAction.Restore: {\n return stringifyRestoreUri(uri);\n }\n case TalerUriAction.Refund: {\n return stringifyRefundUri(uri);\n }\n case TalerUriAction.Withdraw: {\n return stringifyWithdrawUri(uri);\n }\n case TalerUriAction.WithdrawExchange: {\n return stringifyWithdrawExchange(uri);\n }\n case TalerUriAction.AddExchange: {\n return stringifyAddExchange(uri);\n }\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 type: TalerUriAction.Pay,\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n uriString: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(uriString, TalerUriAction.PayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi.rest.split(\"?\");\n\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n\n const q = new URLSearchParams(c[1] ?? \"\");\n const params: Record<string, string> = {};\n q.forEach((v, k) => {\n params[k] = v;\n });\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayTemplate,\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPush);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPush,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, TalerUriAction.PayPull);\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.PayPull,\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parseWithdrawExchangeUri(\n s: string,\n): WithdrawExchangeUri | undefined {\n const pi = parseProtoInfo(s, \"withdraw-exchange\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 1) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;\n const pathSegments = parts.slice(1, parts.length - 1);\n const hostAndSegments = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n const q = new URLSearchParams(c[1] ?? \"\");\n const amount = (q.get(\"a\") ?? undefined) as AmountString | undefined;\n\n return {\n type: TalerUriAction.WithdrawExchange,\n exchangeBaseUrl,\n exchangePub: exchangePub != \"\" ? exchangePub : undefined,\n amount,\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 hostAndSegments = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(\n `${pi.innerProto}://${hostAndSegments}/`,\n );\n\n return {\n type: TalerUriAction.Refund,\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 parts = c[0].split(\"/\");\n return {\n type: TalerUriAction.DevExperiment,\n devExperimentId: parts[0],\n };\n}\n\nexport function parseRestoreUri(uri: string): BackupRestoreUri | undefined {\n const pi = parseProtoInfo(uri, \"restore\");\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\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<string>();\n parts[1].split(\",\").map((name) => {\n const url = canonicalizeBaseUrl(\n `${pi.innerProto}://${decodeURIComponent(name)}/`,\n );\n providers.push(url);\n });\n return {\n type: TalerUriAction.Restore,\n walletRootPriv,\n providers,\n };\n}\n\n// ================================================\n// To string functions\n// ================================================\n\nexport function stringifyPayUri({\n merchantBaseUrl,\n orderId,\n sessionId,\n claimToken,\n noncePriv,\n}: Omit<PayUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, {\n c: claimToken,\n n: noncePriv,\n });\n return `${proto}://pay/${path}${orderId}/${sessionId}${query}`;\n}\n\nexport function stringifyPayPullUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPullUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://pay-pull/${path}${contractPriv}`;\n}\n\nexport function stringifyPayPushUri({\n contractPriv,\n exchangeBaseUrl,\n}: Omit<PayPushUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n\n return `${proto}://pay-push/${path}${contractPriv}`;\n}\n\nexport function stringifyRestoreUri({\n providers,\n walletRootPriv,\n}: Omit<BackupRestoreUri, \"type\">): string {\n const list = providers\n .map((url) => `${encodeURIComponent(new URL(url).href)}`)\n .join(\",\");\n return `taler://restore/${walletRootPriv}/${list}`;\n}\n\nexport function stringifyWithdrawExchange({\n exchangeBaseUrl,\n exchangePub,\n amount,\n}: Omit<WithdrawExchangeUri, \"type\">): string {\n const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {\n a: amount,\n });\n return `${proto}://withdraw-exchange/${path}${exchangePub ?? \"\"}${query}`;\n}\n\nexport function stringifyAddExchange({\n exchangeBaseUrl,\n}: Omit<AddExchangeUri, \"type\">): string {\n const { proto, path } = getUrlInfo(exchangeBaseUrl);\n return `${proto}://add-exchange/${path}`;\n}\n\nexport function stringifyDevExperimentUri({\n devExperimentId,\n}: Omit<DevExperimentUri, \"type\">): string {\n return `taler://dev-experiment/${devExperimentId}`;\n}\n\nexport function stringifyPayTemplateUri({\n merchantBaseUrl,\n templateId,\n templateParams,\n}: Omit<PayTemplateUriResult, \"type\">): string {\n const { proto, path, query } = getUrlInfo(merchantBaseUrl, templateParams);\n return `${proto}://pay-template/${path}${templateId}${query}`;\n}\n\nexport function stringifyRefundUri({\n merchantBaseUrl,\n orderId,\n}: Omit<RefundUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(merchantBaseUrl);\n return `${proto}://refund/${path}${orderId}/`;\n}\n\nexport function stringifyWithdrawUri({\n bankIntegrationApiBaseUrl,\n withdrawalOperationId,\n}: Omit<WithdrawUriResult, \"type\">): string {\n const { proto, path } = getUrlInfo(bankIntegrationApiBaseUrl);\n return `${proto}://withdraw/${path}${withdrawalOperationId}`;\n}\n\n/**\n * Use baseUrl to defined http or https\n * create path using host+port+pathname\n * use params to create a query parameter string or empty\n */\nfunction getUrlInfo(\n baseUrl: string,\n params: Record<string, string | undefined> = {},\n): { proto: string; path: string; query: string } {\n const url = new URL(baseUrl);\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 URL protocol in ${baseUrl}`);\n }\n let path = url.hostname;\n if (url.port) {\n path = path + \":\" + url.port;\n }\n if (url.pathname) {\n path = path + url.pathname;\n }\n if (!path.endsWith(\"/\")) {\n path = path + \"/\";\n }\n\n const qp = new URLSearchParams();\n let withParams = false;\n Object.entries(params).forEach(([name, value]) => {\n if (value !== undefined) {\n withParams = true;\n qp.append(name, value);\n }\n });\n const query = withParams ? \"?\" + qp.toString() : \"\";\n\n return { proto, path, query };\n}\n", "import { deprecate } from \"util\";\nimport { codecForAmountString } from \"../amounts.js\";\nimport {\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"../codec.js\";\nimport { PaytoString, codecForPaytoString } from \"../payto.js\";\nimport {\n AmountString,\n InternationalizedString,\n codecForInternationalizedString,\n codecForLocation,\n} from \"../taler-types.js\";\nimport { TalerUriString, codecForTalerUriString } from \"../taleruri.js\";\nimport {\n AbsoluteTime,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n} from \"../time.js\";\n\nexport type UserAndPassword = {\n username: string;\n password: string;\n};\n\nexport type UserAndToken = {\n username: string;\n token: AccessToken;\n};\n\ndeclare const opaque_OfficerAccount: unique symbol;\nexport type LockedAccount = string & { [opaque_OfficerAccount]: true };\n\ndeclare const opaque_OfficerId: unique symbol;\nexport type OfficerId = string & { [opaque_OfficerId]: true };\n\ndeclare const opaque_OfficerSigningKey: unique symbol;\nexport type SigningKey = Uint8Array & { [opaque_OfficerSigningKey]: true };\n\nexport interface OfficerAccount {\n id: OfficerId;\n signingKey: SigningKey;\n}\n\nexport type PaginationParams = {\n /**\n * row identifier as the starting point of the query\n */\n offset?: string;\n /**\n * max number of element in the result response\n * always greater than 0\n */\n limit?: number;\n /**\n * order\n */\n order?: \"asc\" | \"dec\";\n};\n\nexport type LongPollParams = {\n /**\n * milliseconds the server should wait for at least one result to be shown\n */\n timeoutMs?: number;\n};\n///\n/// HASH\n///\n\n// 64-byte hash code.\ntype HashCode = string;\n\ntype PaytoHash = string;\n\ntype AmlOfficerPublicKeyP = string;\n\n// 32-byte hash code.\ntype ShortHashCode = string;\n\n// 16-byte salt.\ntype WireSalt = string;\n\ntype SHA256HashCode = ShortHashCode;\n\ntype SHA512HashCode = HashCode;\n\n// 32-byte nonce value, must only be used once.\ntype CSNonce = string;\n\n// 32-byte nonce value, must only be used once.\ntype RefreshMasterSeed = string;\n\n// 32-byte value representing a point on Curve25519.\ntype Cs25519Point = string;\n\n// 32-byte value representing a scalar multiplier\n// for scalar operations on points on Curve25519.\ntype Cs25519Scalar = string;\n\n///\n/// KEYS\n///\n\n// 16-byte access token used to authorize access.\ntype ClaimToken = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPublicKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EddsaPrivateKey = string;\n\n// Edx25519 public keys are points on Curve25519 and represented using the\n// standard 256 bits Ed25519 compact format converted to Crockford\n// Base32.\ntype Edx25519PublicKey = string;\n\n// Edx25519 private keys are always points on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype Edx25519PrivateKey = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePublicKey = string;\n\n// Point on Curve25519 represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype CsRPublic = string;\n\n// EdDSA and ECDHE public keys always point on Curve25519\n// and represented using the standard 256 bits Ed25519 compact format,\n// converted to Crockford Base32.\ntype EcdhePrivateKey = string;\n\ntype CoinPublicKey = EddsaPublicKey;\n\n// RSA public key converted to Crockford Base32.\ntype RsaPublicKey = string;\n\ntype Integer = number;\n\ntype WireTransferIdentifierRawP = string;\n// Subset of numbers: Integers in the\n// inclusive range 0 .. (2^53 - 1).\ntype SafeUint64 = number;\n\n// The string must be a data URL according to RFC 2397\n// with explicit mediatype and base64 parameters.\n//\n// data:<mediatype>;base64,<data>\n//\n// Supported mediatypes are image/jpeg and image/png.\n// Invalid strings will be rejected by the wallet.\ntype ImageDataUrl = string;\n\ntype WadId = string;\n\ntype Timestamp = TalerProtocolTimestamp;\n\ntype RelativeTime = TalerProtocolDuration;\n\nexport interface LoginToken {\n token: AccessToken;\n expiration: Timestamp;\n}\n\ndeclare const __ac_token: unique symbol;\n/**\n * Use `createAccessToken(string)` function to build one.\n */\nexport type AccessToken = string & {\n [__ac_token]: true;\n};\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n * Encode the token with rfc7230 to send in a http header.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessTokenEncoded(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\")\n ? token\n : `secret-token:${encodeURIComponent(token)}`\n ) as AccessToken;\n}\n\n/**\n * Create a rfc8959 access token.\n * Adds secret-token: prefix if there is none.\n *\n * @param token\n * @returns\n */\nexport function createRFC8959AccessTokenPlain(token: string): AccessToken {\n return (\n token.startsWith(\"secret-token:\") ? token : `secret-token:${token}`\n ) as AccessToken;\n}\n\n/**\n * Convert string to access token.\n *\n * @param clientSecret\n * @returns\n */\nexport function createClientSecretAccessToken(\n clientSecret: string,\n): AccessToken {\n return clientSecret as AccessToken;\n}\n\ndeclare const __officer_signature: unique symbol;\nexport type OfficerSignature = string & {\n [__officer_signature]: true;\n};\n\nexport namespace TalerAuthentication {\n export interface TokenRequest {\n // Service-defined scope for the token.\n // Typical scopes would be \"readonly\" or \"readwrite\".\n scope: string;\n\n // Server may impose its own upper bound\n // on the token validity duration\n duration?: RelativeTime;\n\n // Is the token refreshable into a new token during its\n // validity?\n // Refreshable tokens effectively provide indefinite\n // access if they are refreshed in time.\n refreshable?: boolean;\n }\n\n export interface TokenSuccessResponse {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n access_token: AccessToken;\n }\n export interface TokenSuccessResponseMerchant {\n // Expiration determined by the server.\n // Can be based on the token_duration\n // from the request, but ultimately the\n // server decides the expiration.\n expiration: Timestamp;\n\n // Opque access token.\n token: AccessToken;\n }\n}\n\n// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html\nexport interface CurrencySpecification {\n // Name of the currency.\n name: string;\n\n // how many digits the user may enter after the decimal_separator\n num_fractional_input_digits: Integer;\n\n // Number of fractional digits to render in normal font and size.\n num_fractional_normal_digits: Integer;\n\n // Number of fractional digits to render always, if needed by\n // padding with zeros.\n num_fractional_trailing_zero_digits: Integer;\n\n // map of powers of 10 to alternative currency names / symbols, must\n // always have an entry under \"0\" that defines the base name,\n // e.g. \"0 => \u20AC\" or \"3 => k\u20AC\". For BTC, would be \"0 => BTC, -3 => mBTC\".\n // Communicates the currency symbol to be used.\n alt_unit_names: { [log10: string]: string };\n}\n\n//FIXME: implement this codec\nexport const codecForAccessToken = codecForString as () => Codec<AccessToken>;\nexport const codecForTokenSuccessResponse =\n (): Codec<TalerAuthentication.TokenSuccessResponse> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponse>()\n .property(\"access_token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponse\");\n\nexport const codecForTokenSuccessResponseMerchant =\n (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>\n buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()\n .property(\"token\", codecForAccessToken())\n .property(\"expiration\", codecForTimestamp)\n .build(\"TalerAuthentication.TokenSuccessResponseMerchant\");\n\nexport const codecForCurrencySpecificiation =\n (): Codec<CurrencySpecification> =>\n buildCodecForObject<CurrencySpecification>()\n .property(\"name\", codecForString())\n .property(\"num_fractional_input_digits\", codecForNumber())\n .property(\"num_fractional_normal_digits\", codecForNumber())\n .property(\"num_fractional_trailing_zero_digits\", codecForNumber())\n .property(\"alt_unit_names\", codecForMap(codecForString()))\n .build(\"CurrencySpecification\");\n\nexport const codecForIntegrationBankConfig =\n (): Codec<TalerCorebankApi.IntegrationConfig> =>\n buildCodecForObject<TalerCorebankApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .build(\"TalerCorebankApi.IntegrationConfig\");\n\nexport const codecForCoreBankConfig = (): Codec<TalerCorebankApi.Config> =>\n buildCodecForObject<TalerCorebankApi.Config>()\n .property(\"name\", codecForConstString(\"libeufin-bank\"))\n .property(\"version\", codecForString())\n .property(\"bank_name\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"allow_conversion\", codecForBoolean())\n .property(\"allow_registrations\", codecForBoolean())\n .property(\"allow_deletions\", codecForBoolean())\n .property(\"allow_edit_name\", codecForBoolean())\n .property(\"allow_edit_cashout_payto_uri\", codecForBoolean())\n .property(\"default_debit_threshold\", codecForAmountString())\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\n \"supported_tan_channels\",\n codecForList(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\"wire_type\", codecForString())\n .build(\"TalerCorebankApi.Config\");\n\n//FIXME: implement this codec\nexport const codecForURN = codecForString;\n\nexport const codecForExchangeConfigInfo =\n (): Codec<TalerMerchantApi.ExchangeConfigInfo> =>\n buildCodecForObject<TalerMerchantApi.ExchangeConfigInfo>()\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"master_pub\", codecForString())\n .build(\"TalerMerchantApi.ExchangeConfigInfo\");\n\nexport const codecForMerchantConfig =\n (): Codec<TalerMerchantApi.VersionResponse> =>\n buildCodecForObject<TalerMerchantApi.VersionResponse>()\n .property(\"name\", codecForConstString(\"taler-merchant\"))\n .property(\"currency\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currencies\", codecForMap(codecForCurrencySpecificiation()))\n .property(\"exchanges\", codecForList(codecForExchangeConfigInfo()))\n .build(\"TalerMerchantApi.VersionResponse\");\n\nexport const codecForClaimResponse =\n (): Codec<TalerMerchantApi.ClaimResponse> =>\n buildCodecForObject<TalerMerchantApi.ClaimResponse>()\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.ClaimResponse\");\n\nexport const codecForPaymentResponse =\n (): Codec<TalerMerchantApi.PaymentResponse> =>\n buildCodecForObject<TalerMerchantApi.PaymentResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"sig\", codecForString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForStatusPaid = (): Codec<TalerMerchantApi.StatusPaid> =>\n buildCodecForObject<TalerMerchantApi.StatusPaid>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refund_taken\", codecForAmountString())\n .property(\"refunded\", codecForBoolean())\n .property(\"type\", codecForConstString(\"paid\"))\n .build(\"TalerMerchantApi.StatusPaid\");\n\nexport const codecForStatusGoto =\n (): Codec<TalerMerchantApi.StatusGotoResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusGotoResponse>()\n .property(\"public_reorder_url\", codecForURL())\n .property(\"type\", codecForConstString(\"goto\"))\n .build(\"TalerMerchantApi.StatusGotoResponse\");\n\nexport const codecForStatusStatusUnpaid =\n (): Codec<TalerMerchantApi.StatusUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.StatusUnpaidResponse>()\n .property(\"type\", codecForConstString(\"unpaid\"))\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .build(\"TalerMerchantApi.PaymentResponse\");\n\nexport const codecForPaidRefundStatusResponse =\n (): Codec<TalerMerchantApi.PaidRefundStatusResponse> =>\n buildCodecForObject<TalerMerchantApi.PaidRefundStatusResponse>()\n .property(\"pos_confirmation\", codecOptional(codecForString()))\n .property(\"refunded\", codecForBoolean())\n .build(\"TalerMerchantApi.PaidRefundStatusResponse\");\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"TalerMerchantApi.MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<TalerMerchantApi.MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse =\n (): Codec<TalerMerchantApi.AbortResponse> =>\n buildCodecForObject<TalerMerchantApi.AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForWalletRefundResponse =\n (): Codec<TalerMerchantApi.WalletRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.WalletRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"TalerMerchantApi.AbortResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<TalerMerchantApi.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\", codecForAmountString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TalerMerchantApi.MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<TalerMerchantApi.MerchantCoinRefundStatus> =>\n buildCodecForUnion<TalerMerchantApi.MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"TalerMerchantApi.MerchantCoinRefundStatus\");\n\nexport const codecForQueryInstancesResponse =\n (): Codec<TalerMerchantApi.QueryInstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.QueryInstancesResponse>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"merchant_pub\", codecForString())\n .property(\"address\", codecForLocation())\n .property(\"jurisdiction\", codecForLocation())\n .property(\"use_stefan\", codecForBoolean())\n .property(\"default_wire_transfer_delay\", codecForDuration)\n .property(\"default_pay_delay\", codecForDuration)\n .property(\n \"auth\",\n buildCodecForObject<{\n method: \"external\" | \"token\";\n }>()\n .property(\n \"method\",\n codecForEither(\n codecForConstString(\"token\"),\n codecForConstString(\"external\"),\n ),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse.auth\"),\n )\n .build(\"TalerMerchantApi.QueryInstancesResponse\");\n\nexport const codecForAccountKycRedirects =\n (): Codec<TalerMerchantApi.AccountKycRedirects> =>\n buildCodecForObject<TalerMerchantApi.AccountKycRedirects>()\n .property(\n \"pending_kycs\",\n codecForList(codecForMerchantAccountKycRedirect()),\n )\n .property(\"timeout_kycs\", codecForList(codecForExchangeKycTimeout()))\n\n .build(\"TalerMerchantApi.AccountKycRedirects\");\n\nexport const codecForMerchantAccountKycRedirect =\n (): Codec<TalerMerchantApi.MerchantAccountKycRedirect> =>\n buildCodecForObject<TalerMerchantApi.MerchantAccountKycRedirect>()\n .property(\"kyc_url\", codecForURL())\n .property(\"aml_status\", codecForNumber())\n .property(\"exchange_url\", codecForURL())\n .property(\"payto_uri\", codecForPaytoString())\n .build(\"TalerMerchantApi.MerchantAccountKycRedirect\");\n\nexport const codecForExchangeKycTimeout =\n (): Codec<TalerMerchantApi.ExchangeKycTimeout> =>\n buildCodecForObject<TalerMerchantApi.ExchangeKycTimeout>()\n .property(\"exchange_url\", codecForURL())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .build(\"TalerMerchantApi.ExchangeKycTimeout\");\n\nexport const codecForAccountAddResponse =\n (): Codec<TalerMerchantApi.AccountAddResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountAddResponse>()\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .build(\"TalerMerchantApi.AccountAddResponse\");\n\nexport const codecForAccountsSummaryResponse =\n (): Codec<TalerMerchantApi.AccountsSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.AccountsSummaryResponse>()\n .property(\"accounts\", codecForList(codecForBankAccountSummaryEntry()))\n .build(\"TalerMerchantApi.AccountsSummaryResponse\");\n\nexport const codecForBankAccountSummaryEntry =\n (): Codec<TalerMerchantApi.BankAccountSummaryEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountSummaryEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .build(\"TalerMerchantApi.BankAccountSummaryEntry\");\n\nexport const codecForBankAccountEntry =\n (): Codec<TalerMerchantApi.BankAccountEntry> =>\n buildCodecForObject<TalerMerchantApi.BankAccountEntry>()\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"h_wire\", codecForString())\n .property(\"salt\", codecForString())\n .property(\"credit_facade_url\", codecOptional(codecForURL()))\n .property(\"active\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.BankAccountEntry\");\n\nexport const codecForInventorySummaryResponse =\n (): Codec<TalerMerchantApi.InventorySummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.InventorySummaryResponse>()\n .property(\"products\", codecForList(codecForInventoryEntry()))\n .build(\"TalerMerchantApi.InventorySummaryResponse\");\n\nexport const codecForInventoryEntry =\n (): Codec<TalerMerchantApi.InventoryEntry> =>\n buildCodecForObject<TalerMerchantApi.InventoryEntry>()\n .property(\"product_id\", codecForString())\n .property(\"product_serial\", codecForNumber())\n .build(\"TalerMerchantApi.InventoryEntry\");\n\nexport const codecForProductDetail =\n (): Codec<TalerMerchantApi.ProductDetail> =>\n buildCodecForObject<TalerMerchantApi.ProductDetail>()\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"unit\", codecForString())\n .property(\"price\", codecForAmountString())\n .property(\"image\", codecForString())\n .property(\"taxes\", codecForList(codecForTax()))\n .property(\"address\", codecForLocation())\n .property(\"next_restock\", codecForTimestamp)\n .property(\"total_stock\", codecForNumber())\n .property(\"total_sold\", codecForNumber())\n .property(\"total_lost\", codecForNumber())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"TalerMerchantApi.ProductDetail\");\n\nexport const codecForTax = (): Codec<TalerMerchantApi.Tax> =>\n buildCodecForObject<TalerMerchantApi.Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForAmountString())\n .build(\"TalerMerchantApi.Tax\");\n\nexport const codecForPostOrderResponse =\n (): Codec<TalerMerchantApi.PostOrderResponse> =>\n buildCodecForObject<TalerMerchantApi.PostOrderResponse>()\n .property(\"order_id\", codecForString())\n .property(\"token\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.PostOrderResponse\");\n\nexport const codecForOutOfStockResponse =\n (): Codec<TalerMerchantApi.OutOfStockResponse> =>\n buildCodecForObject<TalerMerchantApi.OutOfStockResponse>()\n .property(\"product_id\", codecForString())\n .property(\"available_quantity\", codecForNumber())\n .property(\"requested_quantity\", codecForNumber())\n .property(\"restock_expected\", codecForTimestamp)\n .build(\"TalerMerchantApi.OutOfStockResponse\");\n\nexport const codecForOrderHistory = (): Codec<TalerMerchantApi.OrderHistory> =>\n buildCodecForObject<TalerMerchantApi.OrderHistory>()\n .property(\"orders\", codecForList(codecForOrderHistoryEntry()))\n .build(\"TalerMerchantApi.OrderHistory\");\n\nexport const codecForOrderHistoryEntry =\n (): Codec<TalerMerchantApi.OrderHistoryEntry> =>\n buildCodecForObject<TalerMerchantApi.OrderHistoryEntry>()\n .property(\"order_id\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"refundable\", codecForBoolean())\n .property(\"paid\", codecForBoolean())\n .build(\"TalerMerchantApi.OrderHistoryEntry\");\n\nexport const codecForMerchant = (): Codec<TalerMerchantApi.Merchant> =>\n buildCodecForObject<TalerMerchantApi.Merchant>()\n .property(\"name\", codecForString())\n .property(\"email\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"website\", codecOptional(codecForString()))\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"TalerMerchantApi.MerchantInfo\");\n\nexport const codecForExchange = (): Codec<TalerMerchantApi.Exchange> =>\n buildCodecForObject<TalerMerchantApi.Exchange>()\n .property(\"master_pub\", codecForString())\n .property(\"priority\", codecForNumber())\n .property(\"url\", codecForString())\n .build(\"TalerMerchantApi.Exchange\");\n\nexport const codecForContractTerms =\n (): Codec<TalerMerchantApi.ContractTerms> =>\n buildCodecForObject<TalerMerchantApi.ContractTerms>()\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(\n \"summary_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"merchant\", codecForMerchant())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchange()))\n .property(\"products\", codecForList(codecForProduct()))\n .property(\"extra\", codecForAny())\n .build(\"TalerMerchantApi.ContractTerms\");\n\nexport const codecForProduct = (): Codec<TalerMerchantApi.Product> =>\n buildCodecForObject<TalerMerchantApi.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(codecForAmountString()))\n .property(\"image\", codecOptional(codecForString()))\n .property(\"taxes\", codecOptional(codecForList(codecForTax())))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .build(\"TalerMerchantApi.Product\");\n\nexport const codecForCheckPaymentPaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentPaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentPaidResponse>()\n .property(\"order_status\", codecForConstString(\"paid\"))\n .property(\"refunded\", codecForBoolean())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"wired\", codecForBoolean())\n .property(\"deposit_total\", codecForAmountString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"refund_amount\", codecForAmountString())\n .property(\"contract_terms\", codecForContractTerms())\n .property(\"wire_reports\", codecForList(codecForTransactionWireReport()))\n .property(\"wire_details\", codecForList(codecForTransactionWireTransfer()))\n .property(\"refund_details\", codecForList(codecForRefundDetails()))\n .property(\"order_status_url\", codecForURL())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentUnpaidResponse =\n (): Codec<TalerMerchantApi.CheckPaymentUnpaidResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentUnpaidResponse>()\n .property(\"order_status\", codecForConstString(\"unpaid\"))\n .property(\"taler_pay_uri\", codecForTalerUriString())\n .property(\"creation_time\", codecForTimestamp)\n .property(\"summary\", codecForString())\n .property(\"total_amount\", codecForAmountString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .property(\"already_paid_fulfillment_url\", codecOptional(codecForString()))\n .property(\"order_status_url\", codecForString())\n .build(\"TalerMerchantApi.CheckPaymentPaidResponse\");\n\nexport const codecForCheckPaymentClaimedResponse =\n (): Codec<TalerMerchantApi.CheckPaymentClaimedResponse> =>\n buildCodecForObject<TalerMerchantApi.CheckPaymentClaimedResponse>()\n .property(\"order_status\", codecForConstString(\"claimed\"))\n .property(\"contract_terms\", codecForContractTerms())\n .build(\"TalerMerchantApi.CheckPaymentClaimedResponse\");\n\nexport const codecForMerchantOrderPrivateStatusResponse =\n (): Codec<TalerMerchantApi.MerchantOrderStatusResponse> =>\n buildCodecForUnion<TalerMerchantApi.MerchantOrderStatusResponse>()\n .discriminateOn(\"order_status\")\n .alternative(\"paid\", codecForCheckPaymentPaidResponse())\n .alternative(\"unpaid\", codecForCheckPaymentUnpaidResponse())\n .alternative(\"claimed\", codecForCheckPaymentClaimedResponse())\n .build(\"TalerMerchantApi.MerchantOrderStatusResponse\");\n\nexport const codecForRefundDetails =\n (): Codec<TalerMerchantApi.RefundDetails> =>\n buildCodecForObject<TalerMerchantApi.RefundDetails>()\n .property(\"reason\", codecForString())\n .property(\"pending\", codecForBoolean())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .build(\"TalerMerchantApi.RefundDetails\");\n\nexport const codecForTransactionWireTransfer =\n (): Codec<TalerMerchantApi.TransactionWireTransfer> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireTransfer>()\n .property(\"exchange_url\", codecForURL())\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"amount\", codecForAmountString())\n .property(\"confirmed\", codecForBoolean())\n .build(\"TalerMerchantApi.TransactionWireTransfer\");\n\nexport const codecForTransactionWireReport =\n (): Codec<TalerMerchantApi.TransactionWireReport> =>\n buildCodecForObject<TalerMerchantApi.TransactionWireReport>()\n .property(\"code\", codecForNumber())\n .property(\"hint\", codecForString())\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"coin_pub\", codecForString())\n .build(\"TalerMerchantApi.TransactionWireReport\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<TalerMerchantApi.MerchantRefundResponse> =>\n buildCodecForObject<TalerMerchantApi.MerchantRefundResponse>()\n .property(\"taler_refund_uri\", codecForTalerUriString())\n .property(\"h_contract\", codecForString())\n .build(\"TalerMerchantApi.MerchantRefundResponse\");\n\nexport const codecForTansferList = (): Codec<TalerMerchantApi.TransferList> =>\n buildCodecForObject<TalerMerchantApi.TransferList>()\n .property(\"transfers\", codecForList(codecForTransferDetails()))\n .build(\"TalerMerchantApi.TransferList\");\n\nexport const codecForTransferDetails =\n (): Codec<TalerMerchantApi.TransferDetails> =>\n buildCodecForObject<TalerMerchantApi.TransferDetails>()\n .property(\"credit_amount\", codecForAmountString())\n .property(\"wtid\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"exchange_url\", codecForURL())\n .property(\"transfer_serial_id\", codecForNumber())\n .property(\"execution_time\", codecOptional(codecForTimestamp))\n .property(\"verified\", codecOptional(codecForBoolean()))\n .property(\"confirmed\", codecOptional(codecForBoolean()))\n .build(\"TalerMerchantApi.TransferDetails\");\n\nexport const codecForOtpDeviceSummaryResponse =\n (): Codec<TalerMerchantApi.OtpDeviceSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceSummaryResponse>()\n .property(\"otp_devices\", codecForList(codecForOtpDeviceEntry()))\n .build(\"TalerMerchantApi.OtpDeviceSummaryResponse\");\n\nexport const codecForOtpDeviceEntry =\n (): Codec<TalerMerchantApi.OtpDeviceEntry> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceEntry>()\n .property(\"otp_device_id\", codecForString())\n .property(\"device_description\", codecForString())\n .build(\"TalerMerchantApi.OtpDeviceEntry\");\n\nexport const codecForOtpDeviceDetails =\n (): Codec<TalerMerchantApi.OtpDeviceDetails> =>\n buildCodecForObject<TalerMerchantApi.OtpDeviceDetails>()\n .property(\"device_description\", codecForString())\n .property(\"otp_algorithm\", codecForNumber())\n .property(\"otp_ctr\", codecOptional(codecForNumber()))\n .property(\"otp_timestamp\", codecForNumber())\n .property(\"otp_code\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.OtpDeviceDetails\");\n\nexport const codecForTemplateSummaryResponse =\n (): Codec<TalerMerchantApi.TemplateSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.TemplateSummaryResponse>()\n .property(\"templates\", codecForList(codecForTemplateEntry()))\n .build(\"TalerMerchantApi.TemplateSummaryResponse\");\n\nexport const codecForTemplateEntry =\n (): Codec<TalerMerchantApi.TemplateEntry> =>\n buildCodecForObject<TalerMerchantApi.TemplateEntry>()\n .property(\"template_id\", codecForString())\n .property(\"template_description\", codecForString())\n .build(\"TalerMerchantApi.TemplateEntry\");\n\nexport const codecForTemplateDetails =\n (): Codec<TalerMerchantApi.TemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateDetails>()\n .property(\"template_description\", codecForString())\n .property(\"otp_id\", codecOptional(codecForString()))\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.TemplateDetails\");\n\nexport const codecForTemplateContractDetails =\n (): Codec<TalerMerchantApi.TemplateContractDetails> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetails>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecForNumber())\n .property(\"pay_duration\", codecForDuration)\n .build(\"TalerMerchantApi.TemplateContractDetails\");\n\nexport const codecForTemplateContractDetailsDefaults =\n (): Codec<TalerMerchantApi.TemplateContractDetailsDefaults> =>\n buildCodecForObject<TalerMerchantApi.TemplateContractDetailsDefaults>()\n .property(\"summary\", codecOptional(codecForString()))\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"amount\", codecOptional(codecForAmountString()))\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .property(\"pay_duration\", codecOptional(codecForDuration))\n .build(\"TalerMerchantApi.TemplateContractDetailsDefaults\");\n\nexport const codecForWalletTemplateDetails =\n (): Codec<TalerMerchantApi.WalletTemplateDetails> =>\n buildCodecForObject<TalerMerchantApi.WalletTemplateDetails>()\n .property(\"template_contract\", codecForTemplateContractDetails())\n .property(\"required_currency\", codecOptional(codecForString()))\n .property(\n \"editable_defaults\",\n codecOptional(codecForTemplateContractDetailsDefaults()),\n )\n .build(\"TalerMerchantApi.WalletTemplateDetails\");\n\nexport const codecForWebhookSummaryResponse =\n (): Codec<TalerMerchantApi.WebhookSummaryResponse> =>\n buildCodecForObject<TalerMerchantApi.WebhookSummaryResponse>()\n .property(\"webhooks\", codecForList(codecForWebhookEntry()))\n .build(\"TalerMerchantApi.WebhookSummaryResponse\");\n\nexport const codecForWebhookEntry = (): Codec<TalerMerchantApi.WebhookEntry> =>\n buildCodecForObject<TalerMerchantApi.WebhookEntry>()\n .property(\"webhook_id\", codecForString())\n .property(\"event_type\", codecForString())\n .build(\"TalerMerchantApi.WebhookEntry\");\n\nexport const codecForWebhookDetails =\n (): Codec<TalerMerchantApi.WebhookDetails> =>\n buildCodecForObject<TalerMerchantApi.WebhookDetails>()\n .property(\"event_type\", codecForString())\n .property(\"url\", codecForString())\n .property(\"http_method\", codecForString())\n .property(\"header_template\", codecOptional(codecForString()))\n .property(\"body_template\", codecOptional(codecForString()))\n .build(\"TalerMerchantApi.WebhookDetails\");\n\nexport const codecForTokenFamilyKind =\n (): Codec<TalerMerchantApi.TokenFamilyKind> =>\n codecForEither(\n codecForConstString(\"discount\"),\n codecForConstString(\"subscription\"),\n ) as any; //FIXME: create a codecForEnum\nexport const codecForTokenFamilyDetails =\n (): Codec<TalerMerchantApi.TokenFamilyDetails> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilyDetails>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"description\", codecForString())\n .property(\"description_i18n\", codecForInternationalizedString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"duration\", codecForDuration)\n .property(\"kind\", codecForTokenFamilyKind())\n .property(\"issued\", codecForNumber())\n .property(\"redeemed\", codecForNumber())\n .build(\"TalerMerchantApi.TokenFamilyDetails\");\n\nexport const codecForTokenFamiliesList =\n (): Codec<TalerMerchantApi.TokenFamiliesList> =>\n buildCodecForObject<TalerMerchantApi.TokenFamiliesList>()\n .property(\"token_families\", codecForList(codecForTokenFamilySummary()))\n .build(\"TalerMerchantApi.TokenFamiliesList\");\n\nexport const codecForTokenFamilySummary =\n (): Codec<TalerMerchantApi.TokenFamilySummary> =>\n buildCodecForObject<TalerMerchantApi.TokenFamilySummary>()\n .property(\"slug\", codecForString())\n .property(\"name\", codecForString())\n .property(\"valid_after\", codecForTimestamp)\n .property(\"valid_before\", codecForTimestamp)\n .property(\"kind\", codecForTokenFamilyKind())\n .build(\"TalerMerchantApi.TokenFamilySummary\");\n\nexport const codecForInstancesResponse =\n (): Codec<TalerMerchantApi.InstancesResponse> =>\n buildCodecForObject<TalerMerchantApi.InstancesResponse>()\n .property(\"instances\", codecForList(codecForInstance()))\n .build(\"TalerMerchantApi.InstancesResponse\");\n\nexport const codecForInstance = (): Codec<TalerMerchantApi.Instance> =>\n buildCodecForObject<TalerMerchantApi.Instance>()\n .property(\"name\", codecForString())\n .property(\"user_type\", codecForString())\n .property(\"website\", codecOptional(codecForString()))\n .property(\"logo\", codecOptional(codecForString()))\n .property(\"id\", codecForString())\n .property(\"merchant_pub\", codecForString())\n .property(\"payment_targets\", codecForList(codecForString()))\n .property(\"deleted\", codecForBoolean())\n .build(\"TalerMerchantApi.Instance\");\n\nexport const codecForExchangeConfig =\n (): Codec<TalerExchangeApi.ExchangeVersionResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeVersionResponse>()\n .property(\"version\", codecForString())\n .property(\"name\", codecForConstString(\"taler-exchange\"))\n .property(\"implementation\", codecOptional(codecForURN()))\n .property(\"currency\", codecForString())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"supported_kyc_requirements\", codecForList(codecForString()))\n .build(\"TalerExchangeApi.ExchangeVersionResponse\");\n\nexport const codecForExchangeKeys =\n (): Codec<TalerExchangeApi.ExchangeKeysResponse> =>\n buildCodecForObject<TalerExchangeApi.ExchangeKeysResponse>()\n .property(\"version\", codecForString())\n .property(\"base_url\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"TalerExchangeApi.ExchangeKeysResponse\");\n\nconst codecForBalance = (): Codec<TalerCorebankApi.Balance> =>\n buildCodecForObject<TalerCorebankApi.Balance>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"credit_debit_indicator\",\n codecForEither(\n codecForConstString(\"credit\"),\n codecForConstString(\"debit\"),\n ),\n )\n .build(\"TalerCorebankApi.Balance\");\n\nconst codecForPublicAccount = (): Codec<TalerCorebankApi.PublicAccount> =>\n buildCodecForObject<TalerCorebankApi.PublicAccount>()\n .property(\"username\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\"row_id\", codecOptional(codecForNumber()))\n .build(\"TalerCorebankApi.PublicAccount\");\n\nexport const codecForPublicAccountsResponse =\n (): Codec<TalerCorebankApi.PublicAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.PublicAccountsResponse>()\n .property(\"public_accounts\", codecForList(codecForPublicAccount()))\n .build(\"TalerCorebankApi.PublicAccountsResponse\");\n\nexport const codecForAccountMinimalData =\n (): Codec<TalerCorebankApi.AccountMinimalData> =>\n buildCodecForObject<TalerCorebankApi.AccountMinimalData>()\n .property(\"username\", codecForString())\n .property(\"name\", codecForString())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"balance\", codecForBalance())\n .property(\"row_id\", codecForNumber())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"min_cashout\", codecOptional(codecForAmountString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"status\",\n codecOptional(\n codecForEither(\n codecForConstString(\"active\"),\n codecForConstString(\"deleted\"),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountMinimalData\");\n\nexport const codecForListBankAccountsResponse =\n (): Codec<TalerCorebankApi.ListBankAccountsResponse> =>\n buildCodecForObject<TalerCorebankApi.ListBankAccountsResponse>()\n .property(\"accounts\", codecForList(codecForAccountMinimalData()))\n .build(\"TalerCorebankApi.ListBankAccountsResponse\");\n\nexport const codecForAccountData = (): Codec<TalerCorebankApi.AccountData> =>\n buildCodecForObject<TalerCorebankApi.AccountData>()\n .property(\"name\", codecForString())\n .property(\"balance\", codecForBalance())\n .property(\"payto_uri\", codecForPaytoString())\n .property(\"debit_threshold\", codecForAmountString())\n .property(\"min_cashout\", codecOptional(codecForAmountString()))\n .property(\"contact_data\", codecOptional(codecForChallengeContactData()))\n .property(\"cashout_payto_uri\", codecOptional(codecForPaytoString()))\n .property(\"is_public\", codecForBoolean())\n .property(\"is_taler_exchange\", codecForBoolean())\n .property(\n \"tan_channel\",\n codecOptional(\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n ),\n )\n .property(\n \"status\",\n codecOptional(\n codecForEither(\n codecForConstString(\"active\"),\n codecForConstString(\"deleted\"),\n ),\n ),\n )\n .build(\"TalerCorebankApi.AccountData\");\n\nexport const codecForChallengeContactData =\n (): Codec<TalerCorebankApi.ChallengeContactData> =>\n buildCodecForObject<TalerCorebankApi.ChallengeContactData>()\n .property(\"email\", codecOptional(codecForString()))\n .property(\"phone\", codecOptional(codecForString()))\n .build(\"TalerCorebankApi.ChallengeContactData\");\n\nexport const codecForWithdrawalPublicInfo =\n (): Codec<TalerCorebankApi.WithdrawalPublicInfo> =>\n buildCodecForObject<TalerCorebankApi.WithdrawalPublicInfo>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"username\", codecForString())\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\n \"selected_exchange_account\",\n codecOptional(codecForPaytoString()),\n )\n .build(\"TalerCorebankApi.WithdrawalPublicInfo\");\n\nexport const codecForBankAccountTransactionsResponse =\n (): Codec<TalerCorebankApi.BankAccountTransactionsResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionsResponse>()\n .property(\n \"transactions\",\n codecForList(codecForBankAccountTransactionInfo()),\n )\n .build(\"TalerCorebankApi.BankAccountTransactionsResponse\");\n\nexport const codecForBankAccountTransactionInfo =\n (): Codec<TalerCorebankApi.BankAccountTransactionInfo> =>\n buildCodecForObject<TalerCorebankApi.BankAccountTransactionInfo>()\n .property(\"creditor_payto_uri\", codecForPaytoString())\n .property(\"debtor_payto_uri\", codecForPaytoString())\n .property(\"amount\", codecForAmountString())\n .property(\n \"direction\",\n codecForEither(\n codecForConstString(\"debit\"),\n codecForConstString(\"credit\"),\n ),\n )\n .property(\"subject\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"date\", codecForTimestamp)\n .build(\"TalerCorebankApi.BankAccountTransactionInfo\");\n\nexport const codecForCreateTransactionResponse =\n (): Codec<TalerCorebankApi.CreateTransactionResponse> =>\n buildCodecForObject<TalerCorebankApi.CreateTransactionResponse>()\n .property(\"row_id\", codecForNumber())\n .build(\"TalerCorebankApi.CreateTransactionResponse\");\n\nexport const codecForRegisterAccountResponse =\n (): Codec<TalerCorebankApi.RegisterAccountResponse> =>\n buildCodecForObject<TalerCorebankApi.RegisterAccountResponse>()\n .property(\"internal_payto_uri\", codecForPaytoString())\n .build(\"TalerCorebankApi.RegisterAccountResponse\");\n\nexport const codecForBankAccountCreateWithdrawalResponse =\n (): Codec<TalerCorebankApi.BankAccountCreateWithdrawalResponse> =>\n buildCodecForObject<TalerCorebankApi.BankAccountCreateWithdrawalResponse>()\n .property(\"taler_withdraw_uri\", codecForTalerUriString())\n .property(\"withdrawal_id\", codecForString())\n .build(\"TalerCorebankApi.BankAccountCreateWithdrawalResponse\");\n\nexport const codecForCashoutPending =\n (): Codec<TalerCorebankApi.CashoutResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutResponse>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutPending\");\n\nexport const codecForCashoutConversionResponse =\n (): Codec<TalerBankConversionApi.CashoutConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashoutConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashoutConversionResponse\");\n\nexport const codecForCashinConversionResponse =\n (): Codec<TalerBankConversionApi.CashinConversionResponse> =>\n buildCodecForObject<TalerBankConversionApi.CashinConversionResponse>()\n .property(\"amount_credit\", codecForAmountString())\n .property(\"amount_debit\", codecForAmountString())\n .build(\"TalerCorebankApi.CashinConversionResponse\");\n\nexport const codecForCashouts = (): Codec<TalerCorebankApi.Cashouts> =>\n buildCodecForObject<TalerCorebankApi.Cashouts>()\n .property(\"cashouts\", codecForList(codecForCashoutInfo()))\n .build(\"TalerCorebankApi.Cashouts\");\n\nexport const codecForCashoutInfo = (): Codec<TalerCorebankApi.CashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.CashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .build(\"TalerCorebankApi.CashoutInfo\");\n\nexport const codecForGlobalCashouts =\n (): Codec<TalerCorebankApi.GlobalCashouts> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashouts>()\n .property(\"cashouts\", codecForList(codecForGlobalCashoutInfo()))\n .build(\"TalerCorebankApi.GlobalCashouts\");\n\nexport const codecForGlobalCashoutInfo =\n (): Codec<TalerCorebankApi.GlobalCashoutInfo> =>\n buildCodecForObject<TalerCorebankApi.GlobalCashoutInfo>()\n .property(\"cashout_id\", codecForNumber())\n .property(\"username\", codecForString())\n .build(\"TalerCorebankApi.GlobalCashoutInfo\");\n\nexport const codecForCashoutStatusResponse =\n (): Codec<TalerCorebankApi.CashoutStatusResponse> =>\n buildCodecForObject<TalerCorebankApi.CashoutStatusResponse>()\n .property(\"amount_debit\", codecForAmountString())\n .property(\"amount_credit\", codecForAmountString())\n .property(\"subject\", codecForString())\n .property(\"creation_time\", codecForTimestamp)\n .build(\"TalerCorebankApi.CashoutStatusResponse\");\n\nexport const codecForConversionRatesResponse =\n (): Codec<TalerCorebankApi.ConversionRatesResponse> =>\n buildCodecForObject<TalerCorebankApi.ConversionRatesResponse>()\n .property(\"buy_at_ratio\", codecForDecimalNumber())\n .property(\"buy_in_fee\", codecForDecimalNumber())\n .property(\"sell_at_ratio\", codecForDecimalNumber())\n .property(\"sell_out_fee\", codecForDecimalNumber())\n .build(\"TalerCorebankApi.ConversionRatesResponse\");\n\nexport const codecForMonitorResponse =\n (): Codec<TalerCorebankApi.MonitorResponse> =>\n buildCodecForUnion<TalerCorebankApi.MonitorResponse>()\n .discriminateOn(\"type\")\n .alternative(\"no-conversions\", codecForMonitorNoConversion())\n .alternative(\"with-conversions\", codecForMonitorWithCashout())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForMonitorNoConversion =\n (): Codec<TalerCorebankApi.MonitorNoConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorNoConversion>()\n .property(\"type\", codecForConstString(\"no-conversions\"))\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorJustPayouts\");\n\nexport const codecForMonitorWithCashout =\n (): Codec<TalerCorebankApi.MonitorWithConversion> =>\n buildCodecForObject<TalerCorebankApi.MonitorWithConversion>()\n .property(\"type\", codecForConstString(\"with-conversions\"))\n .property(\"cashinCount\", codecForNumber())\n .property(\"cashinFiatVolume\", codecForAmountString())\n .property(\"cashinRegionalVolume\", codecForAmountString())\n .property(\"cashoutCount\", codecForNumber())\n .property(\"cashoutFiatVolume\", codecForAmountString())\n .property(\"cashoutRegionalVolume\", codecForAmountString())\n .property(\"talerInCount\", codecForNumber())\n .property(\"talerInVolume\", codecForAmountString())\n .property(\"talerOutCount\", codecForNumber())\n .property(\"talerOutVolume\", codecForAmountString())\n .build(\"TalerCorebankApi.MonitorWithCashout\");\n\nexport const codecForBankVersion =\n (): Codec<TalerBankIntegrationApi.BankVersion> =>\n buildCodecForObject<TalerBankIntegrationApi.BankVersion>()\n .property(\"currency\", codecForCurrencyName())\n .property(\"currency_specification\", codecForCurrencySpecificiation())\n .property(\"name\", codecForConstString(\"taler-bank-integration\"))\n .property(\"version\", codecForLibtoolVersion())\n .build(\"TalerBankIntegrationApi.BankVersion\");\n\nexport const codecForBankWithdrawalOperationStatus =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"sender_wire\", codecOptional(codecForPaytoString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .property(\"wire_types\", codecForList(codecForString()))\n .property(\"selected_reserve_pub\", codecOptional(codecForString()))\n .property(\"selected_exchange_account\", codecOptional(codecForString()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationStatus\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationPostResponse>()\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"confirm_transfer_url\", codecOptional(codecForURL()))\n .build(\"TalerBankIntegrationApi.BankWithdrawalOperationPostResponse\");\n\nexport const codecForRevenueConfig = (): Codec<TalerRevenueApi.RevenueConfig> =>\n buildCodecForObject<TalerRevenueApi.RevenueConfig>()\n .property(\"name\", codecForConstString(\"taler-revenue\"))\n .property(\"version\", codecForString())\n .property(\"currency\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"TalerRevenueApi.RevenueConfig\");\n\nexport const codecForRevenueIncomingHistory =\n (): Codec<TalerRevenueApi.RevenueIncomingHistory> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForRevenueIncomingBankTransaction()),\n )\n .build(\"TalerRevenueApi.MerchantIncomingHistory\");\n\nexport const codecForRevenueIncomingBankTransaction =\n (): Codec<TalerRevenueApi.RevenueIncomingBankTransaction> =>\n buildCodecForObject<TalerRevenueApi.RevenueIncomingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"row_id\", codecForNumber())\n .property(\"subject\", codecForString())\n .build(\"TalerRevenueApi.RevenueIncomingBankTransaction\");\n\nexport const codecForTransferResponse =\n (): Codec<TalerWireGatewayApi.TransferResponse> =>\n buildCodecForObject<TalerWireGatewayApi.TransferResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.TransferResponse\");\n\nexport const codecForIncomingHistory =\n (): Codec<TalerWireGatewayApi.IncomingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingHistory>()\n .property(\"credit_account\", codecForPaytoString())\n .property(\n \"incoming_transactions\",\n codecForList(codecForIncomingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.IncomingHistory\");\n\nexport const codecForIncomingBankTransaction =\n (): Codec<TalerWireGatewayApi.IncomingBankTransaction> =>\n buildCodecForUnion<TalerWireGatewayApi.IncomingBankTransaction>()\n .discriminateOn(\"type\")\n .alternative(\"RESERVE\", codecForIncomingReserveTransaction())\n .alternative(\"WAD\", codecForIncomingWadTransaction())\n .build(\"TalerWireGatewayApi.IncomingBankTransaction\");\n\nexport const codecForIncomingReserveTransaction =\n (): Codec<TalerWireGatewayApi.IncomingReserveTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingReserveTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"reserve_pub\", codecForString())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"RESERVE\"))\n .build(\"TalerWireGatewayApi.IncomingReserveTransaction\");\n\nexport const codecForIncomingWadTransaction =\n (): Codec<TalerWireGatewayApi.IncomingWadTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.IncomingWadTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"debit_account\", codecForPaytoString())\n .property(\"origin_exchange_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"type\", codecForConstString(\"WAD\"))\n .property(\"wad_id\", codecForString())\n .build(\"TalerWireGatewayApi.IncomingWadTransaction\");\n\nexport const codecForOutgoingHistory =\n (): Codec<TalerWireGatewayApi.OutgoingHistory> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingHistory>()\n .property(\"debit_account\", codecForPaytoString())\n .property(\n \"outgoing_transactions\",\n codecForList(codecForOutgoingBankTransaction()),\n )\n .build(\"TalerWireGatewayApi.OutgoingHistory\");\n\nexport const codecForOutgoingBankTransaction =\n (): Codec<TalerWireGatewayApi.OutgoingBankTransaction> =>\n buildCodecForObject<TalerWireGatewayApi.OutgoingBankTransaction>()\n .property(\"amount\", codecForAmountString())\n .property(\"credit_account\", codecForPaytoString())\n .property(\"date\", codecForTimestamp)\n .property(\"exchange_base_url\", codecForURL())\n .property(\"row_id\", codecForNumber())\n .property(\"wtid\", codecForString())\n .build(\"TalerWireGatewayApi.OutgoingBankTransaction\");\n\nexport const codecForAddIncomingResponse =\n (): Codec<TalerWireGatewayApi.AddIncomingResponse> =>\n buildCodecForObject<TalerWireGatewayApi.AddIncomingResponse>()\n .property(\"row_id\", codecForNumber())\n .property(\"timestamp\", codecForTimestamp)\n .build(\"TalerWireGatewayApi.AddIncomingResponse\");\n\nexport const codecForAmlRecords = (): Codec<TalerExchangeApi.AmlRecords> =>\n buildCodecForObject<TalerExchangeApi.AmlRecords>()\n .property(\"records\", codecForList(codecForAmlRecord()))\n .build(\"TalerExchangeApi.AmlRecords\");\n\nexport const codecForAmlRecord = (): Codec<TalerExchangeApi.AmlRecord> =>\n buildCodecForObject<TalerExchangeApi.AmlRecord>()\n .property(\"current_state\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .property(\"rowid\", codecForNumber())\n .property(\"threshold\", codecForAmountString())\n .build(\"TalerExchangeApi.AmlRecord\");\n\nexport const codecForAmlDecisionDetails =\n (): Codec<TalerExchangeApi.AmlDecisionDetails> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetails>()\n .property(\"aml_history\", codecForList(codecForAmlDecisionDetail()))\n .property(\"kyc_attributes\", codecForList(codecForKycDetail()))\n .build(\"TalerExchangeApi.AmlDecisionDetails\");\n\nexport const codecForAmlDecisionDetail =\n (): Codec<TalerExchangeApi.AmlDecisionDetail> =>\n buildCodecForObject<TalerExchangeApi.AmlDecisionDetail>()\n .property(\"justification\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"new_threshold\", codecForAmountString())\n .property(\"decider_pub\", codecForString())\n .build(\"TalerExchangeApi.AmlDecisionDetail\");\n\nexport const codecForChallenge = (): Codec<TalerCorebankApi.Challenge> =>\n buildCodecForObject<TalerCorebankApi.Challenge>()\n .property(\"challenge_id\", codecForNumber())\n .build(\"TalerCorebankApi.Challenge\");\n\nexport const codecForTanTransmission =\n (): Codec<TalerCorebankApi.TanTransmission> =>\n buildCodecForObject<TalerCorebankApi.TanTransmission>()\n .property(\n \"tan_channel\",\n codecForEither(\n codecForConstString(TalerCorebankApi.TanChannel.SMS),\n codecForConstString(TalerCorebankApi.TanChannel.EMAIL),\n ),\n )\n .property(\"tan_info\", codecForString())\n .build(\"TalerCorebankApi.TanTransmission\");\n\ninterface KycDetail {\n provider_section: string;\n attributes?: Object;\n collection_time: Timestamp;\n expiration_time: Timestamp;\n}\nexport const codecForKycDetail = (): Codec<TalerExchangeApi.KycDetail> =>\n buildCodecForObject<TalerExchangeApi.KycDetail>()\n .property(\"provider_section\", codecForString())\n .property(\"attributes\", codecOptional(codecForAny()))\n .property(\"collection_time\", codecForTimestamp)\n .property(\"expiration_time\", codecForTimestamp)\n .build(\"TalerExchangeApi.KycDetail\");\n\nexport const codecForAmlDecision = (): Codec<TalerExchangeApi.AmlDecision> =>\n buildCodecForObject<TalerExchangeApi.AmlDecision>()\n .property(\"justification\", codecForString())\n .property(\"new_threshold\", codecForAmountString())\n .property(\"h_payto\", codecForString())\n .property(\"new_state\", codecForNumber())\n .property(\"officer_sig\", codecForString())\n .property(\"decision_time\", codecForTimestamp)\n .property(\"kyc_requirements\", codecOptional(codecForList(codecForString())))\n .build(\"TalerExchangeApi.AmlDecision\");\n\nexport const codecForConversionInfo =\n (): Codec<TalerBankConversionApi.ConversionInfo> =>\n buildCodecForObject<TalerBankConversionApi.ConversionInfo>()\n .property(\"cashin_fee\", codecForAmountString())\n .property(\"cashin_min_amount\", codecForAmountString())\n .property(\"cashin_ratio\", codecForDecimalNumber())\n .property(\n \"cashin_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashin_tiny_amount\", codecForAmountString())\n .property(\"cashout_fee\", codecForAmountString())\n .property(\"cashout_min_amount\", codecForAmountString())\n .property(\"cashout_ratio\", codecForDecimalNumber())\n .property(\n \"cashout_rounding_mode\",\n codecForEither(\n codecForConstString(\"zero\"),\n codecForConstString(\"up\"),\n codecForConstString(\"nearest\"),\n ),\n )\n .property(\"cashout_tiny_amount\", codecForAmountString())\n .build(\"ConversionBankConfig.ConversionInfo\");\n\nexport const codecForConversionBankConfig =\n (): Codec<TalerBankConversionApi.IntegrationConfig> =>\n buildCodecForObject<TalerBankConversionApi.IntegrationConfig>()\n .property(\"name\", codecForConstString(\"taler-conversion-info\"))\n .property(\"version\", codecForString())\n .property(\"regional_currency\", codecForString())\n .property(\n \"regional_currency_specification\",\n codecForCurrencySpecificiation(),\n )\n .property(\"fiat_currency\", codecForString())\n .property(\"fiat_currency_specification\", codecForCurrencySpecificiation())\n\n .property(\"conversion_rate\", codecForConversionInfo())\n .build(\"ConversionBankConfig.IntegrationConfig\");\n\nexport const codecForChallengerTermsOfServiceResponse =\n (): Codec<ChallengerApi.ChallengerTermsOfServiceResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerTermsOfServiceResponse>()\n .property(\"name\", codecForConstString(\"challenger\"))\n .property(\"version\", codecForString())\n .property(\"implementation\", codecOptional(codecForString()))\n .build(\"ChallengerApi.ChallengerTermsOfServiceResponse\");\n\nexport const codecForChallengeSetupResponse =\n (): Codec<ChallengerApi.ChallengeSetupResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeSetupResponse>()\n .property(\"nonce\", codecForString())\n .build(\"ChallengerApi.ChallengeSetupResponse\");\n\nexport const codecForChallengeStatus =\n (): Codec<ChallengerApi.ChallengeStatus> =>\n buildCodecForObject<ChallengerApi.ChallengeStatus>()\n .property(\"restrictions\", codecOptional(codecForMap(codecForAny())))\n .property(\"fix_address\", codecForBoolean())\n .property(\"last_address\", codecOptional(codecForMap(codecForAny())))\n .property(\"changes_left\", codecForNumber())\n .build(\"ChallengerApi.ChallengeStatus\");\nexport const codecForChallengeCreateResponse =\n (): Codec<ChallengerApi.ChallengeCreateResponse> =>\n buildCodecForObject<ChallengerApi.ChallengeCreateResponse>()\n .property(\"attempts_left\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"transmitted\", codecForBoolean())\n .property(\"next_tx_time\", codecForString())\n .build(\"ChallengerApi.ChallengeCreateResponse\");\n\nexport const codecForInvalidPinResponse =\n (): Codec<ChallengerApi.InvalidPinResponse> =>\n buildCodecForObject<ChallengerApi.InvalidPinResponse>()\n .property(\"ec\", codecOptional(codecForNumber()))\n .property(\"hint\", codecForAny())\n .property(\"addresses_left\", codecForNumber())\n .property(\"pin_transmissions_left\", codecForNumber())\n .property(\"auth_attempts_left\", codecForNumber())\n .property(\"exhausted\", codecForBoolean())\n .property(\"no_challenge\", codecForBoolean())\n .build(\"ChallengerApi.InvalidPinResponse\");\n\nexport const codecForChallengerAuthResponse =\n (): Codec<ChallengerApi.ChallengerAuthResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerAuthResponse>()\n .property(\"access_token\", codecForString())\n .property(\"token_type\", codecForAny())\n .property(\"expires_in\", codecForNumber())\n .build(\"ChallengerApi.ChallengerAuthResponse\");\n\nexport const codecForChallengerInfoResponse =\n (): Codec<ChallengerApi.ChallengerInfoResponse> =>\n buildCodecForObject<ChallengerApi.ChallengerInfoResponse>()\n .property(\"id\", codecForNumber())\n .property(\"address\", codecForAny())\n .property(\"address_type\", codecForString())\n .property(\"expires\", codecForTimestamp)\n .build(\"ChallengerApi.ChallengerInfoResponse\");\n\ntype EmailAddress = string;\ntype PhoneNumber = string;\ntype EddsaSignature = string;\n// base32 encoded RSA blinded signature.\ntype BlindedRsaSignature = string;\ntype Base32 = string;\n\ntype DecimalNumber = string;\ntype RsaSignature = string;\ntype Float = number;\ntype LibtoolVersion = string;\n// The type of a coin's blinded envelope depends on the cipher that is used\n// for signing with a denomination key.\ntype CoinEnvelope = RSACoinEnvelope | CSCoinEnvelope;\n// For denomination signatures based on RSA, the planchet is just a blinded\n// coin's public EdDSA key.\ninterface RSACoinEnvelope {\n cipher: \"RSA\" | \"RSA+age_restricted\";\n rsa_blinded_planchet: string; // Crockford Base32 encoded\n}\n// For denomination signatures based on Blind Clause-Schnorr, the planchet\n// consists of the public nonce and two Curve25519 scalars which are two\n// blinded challenges in the Blinded Clause-Schnorr signature scheme.\n// See https://taler.net/papers/cs-thesis.pdf for details.\ninterface CSCoinEnvelope {\n cipher: \"CS\" | \"CS+age_restricted\";\n cs_nonce: string; // Crockford Base32 encoded\n cs_blinded_c0: string; // Crockford Base32 encoded\n cs_blinded_c1: string; // Crockford Base32 encoded\n}\n// Secret for blinding/unblinding.\n// An RSA blinding secret, which is basically\n// a 256-bit nonce, converted to Crockford Base32.\ntype DenominationBlindingKeyP = string;\n\n//FIXME: implement this codec\nconst codecForURL = codecForString;\n//FIXME: implement this codec\nconst codecForLibtoolVersion = codecForString;\n//FIXME: implement this codec\nconst codecForCurrencyName = codecForString;\n//FIXME: implement this codec\nconst codecForDecimalNumber = codecForString;\n\nexport type WithdrawalOperationStatus =\n | \"pending\"\n | \"selected\"\n | \"aborted\"\n | \"confirmed\";\n\nexport namespace TalerWireGatewayApi {\n export interface TransferResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n\n export interface TransferRequest {\n // Nonce to make the request idempotent. Requests with the same\n // transaction_uid that differ in any of the other fields\n // are rejected.\n request_uid: HashCode;\n\n // Amount to transfer.\n amount: AmountString;\n\n // Base URL of the exchange. Shall be included by the bank gateway\n // in the appropriate section of the wire transfer details.\n exchange_base_url: string;\n\n // Wire transfer identifier chosen by the exchange,\n // used by the merchant to identify the Taler order(s)\n // associated with this wire transfer.\n wtid: ShortHashCode;\n\n // The recipient's account identifier as a payto URI.\n credit_account: PaytoString;\n }\n\n export interface IncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: IncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if incoming transaction is empty\n credit_account?: PaytoString;\n }\n\n // Union discriminated by the \"type\" field.\n export type IncomingBankTransaction =\n | IncomingReserveTransaction\n | IncomingWadTransaction;\n\n export interface IncomingReserveTransaction {\n type: \"RESERVE\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // The reserve public key extracted from the transaction details.\n reserve_pub: EddsaPublicKey;\n }\n\n export interface IncomingWadTransaction {\n type: \"WAD\";\n\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n // This must be one of the exchange's bank accounts.\n credit_account: PaytoString;\n\n // Payto URI to identify the sender of funds.\n debit_account: PaytoString;\n\n // Base URL of the exchange that originated the wad.\n origin_exchange_url: string;\n\n // The reserve public key extracted from the transaction details.\n wad_id: WadId;\n }\n\n export interface OutgoingHistory {\n // Array of outgoing transactions.\n outgoing_transactions: OutgoingBankTransaction[];\n\n // Payto URI to identify the sender of funds.\n // This must be one of the exchange's bank accounts.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n\n // undefined if outgoing transactions is empty\n debit_account?: PaytoString;\n }\n\n export interface OutgoingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the receiver of funds.\n credit_account: PaytoString;\n\n // The wire transfer ID in the outgoing transaction.\n wtid: ShortHashCode;\n\n // Base URL of the exchange.\n exchange_base_url: string;\n }\n\n export interface AddIncomingRequest {\n // Amount to transfer.\n amount: AmountString;\n\n // Reserve public key that is included in the wire transfer details\n // to identify the reserve that is being topped up.\n reserve_pub: EddsaPublicKey;\n\n // Account (as payto URI) that makes the wire transfer to the exchange.\n // Usually this account must be created by the test harness before this API is\n // used. An exception is the \"exchange-fakebank\", where any debit account can be\n // specified, as it is automatically created.\n debit_account: PaytoString;\n }\n\n export interface AddIncomingResponse {\n // Timestamp that indicates when the wire transfer will be executed.\n // In cases where the wire transfer gateway is unable to know when\n // the wire transfer will be executed, the time at which the request\n // has been received and stored will be returned.\n // The purpose of this field is for debugging (humans trying to find\n // the transaction) as well as for taxation (determining which\n // time period a transaction belongs to).\n timestamp: Timestamp;\n\n // Opaque ID of the transaction that the bank has made.\n row_id: SafeUint64;\n }\n}\n\nexport namespace TalerRevenueApi {\n export interface RevenueConfig {\n // Name of the API.\n name: \"taler-revenue\";\n\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this gateway.\n currency: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface RevenueIncomingHistory {\n // Array of incoming transactions.\n incoming_transactions: RevenueIncomingBankTransaction[];\n\n // Payto URI to identify the receiver of funds.\n // Credit account is shared by all incoming transactions\n // as per the nature of the request.\n credit_account: string;\n }\n\n export interface RevenueIncomingBankTransaction {\n // Opaque identifier of the returned record.\n row_id: SafeUint64;\n\n // Date of the transaction.\n date: Timestamp;\n\n // Amount transferred.\n amount: AmountString;\n\n // Payto URI to identify the sender of funds.\n debit_account: string;\n\n // The wire transfer subject.\n subject: string;\n }\n}\n\nexport namespace TalerBankConversionApi {\n export interface ConversionInfo {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: \"zero\" | \"up\" | \"nearest\";\n }\n\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the API.\n name: \"taler-conversion-info\";\n\n // Currency used by this bank.\n regional_currency: string;\n\n // How the bank SPA should render this currency.\n regional_currency_specification: CurrencySpecification;\n\n // External currency used during conversion.\n fiat_currency: string;\n\n // How the bank SPA should render this currency.\n fiat_currency_specification: CurrencySpecification;\n\n // Extra conversion rate information.\n // Only present if server opts in to report the static conversion rate.\n conversion_rate: ConversionInfo;\n }\n\n export interface CashinConversionResponse {\n // Amount that the user will get deducted from their fiat\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their regional\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export interface CashoutConversionResponse {\n // Amount that the user will get deducted from their regional\n // bank account, according to the 'amount_credit' value.\n amount_debit: AmountString;\n // Amount that the user will receive in their fiat\n // bank account, according to 'amount_debit'.\n amount_credit: AmountString;\n }\n\n export type RoundingMode = \"zero\" | \"up\" | \"nearest\";\n\n export interface ConversionRate {\n // Exchange rate to buy regional currency from fiat\n cashin_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashin ratio.\n cashin_fee: AmountString;\n\n // Minimum amount authorised for cashin, in fiat before conversion\n cashin_min_amount: AmountString;\n\n // Smallest possible regional amount, converted amount is rounded to this amount\n cashin_tiny_amount: AmountString;\n\n // Rounding mode used during cashin conversion\n cashin_rounding_mode: RoundingMode;\n\n // Exchange rate to sell regional currency for fiat\n cashout_ratio: DecimalNumber;\n\n // Fee to subtract after applying the cashout ratio.\n cashout_fee: AmountString;\n\n // Minimum amount authorised for cashout, in regional before conversion\n cashout_min_amount: AmountString;\n\n // Smallest possible fiat amount, converted amount is rounded to this amount\n cashout_tiny_amount: AmountString;\n\n // Rounding mode used during cashout conversion\n cashout_rounding_mode: RoundingMode;\n }\n}\n\nexport namespace TalerBankIntegrationApi {\n export interface BankVersion {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification?: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n\n export interface BankWithdrawalOperationStatus {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Bank account of the customer that is withdrawing, as a\n // payto URI.\n sender_wire?: PaytoString;\n\n // Suggestion for an exchange given by the bank.\n suggested_exchange?: string;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n\n // Wire transfer types supported by the bank.\n wire_types: string[];\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: string;\n }\n\n export interface BankWithdrawalOperationPostRequest {\n // Reserve public key.\n reserve_pub: string;\n\n // Payto address of the exchange selected for the withdrawal.\n selected_exchange: PaytoString;\n }\n\n export interface BankWithdrawalOperationPostResponse {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: Omit<\"pending\", WithdrawalOperationStatus>;\n\n // URL that the user needs to navigate to in order to\n // complete some final confirmation (e.g. 2FA).\n //\n // Only applicable when status is selected.\n // It may contain withdrawal operation id\n confirm_transfer_url?: string;\n }\n}\n\nexport namespace TalerCorebankApi {\n export interface IntegrationConfig {\n // libtool-style representation of the Bank protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // Name of the API.\n name: \"taler-bank-integration\";\n }\n export interface Config {\n // Name of this API, always \"taler-corebank\".\n name: \"libeufin-bank\";\n // name: \"taler-corebank\";\n\n // API version in the form $n:$n:$n\n version: string;\n\n // Bank display name to be used in user interfaces.\n // For consistency use \"Taler Bank\" if missing.\n // @since v4, will become mandatory in the next version.\n bank_name: string;\n\n // Advertised base URL to use when you sharing an URL with another\n // program.\n // @since v4.\n base_url?: string;\n\n // If 'true' the server provides local currency conversion support\n // If 'false' some parts of the API are not supported and return 501\n allow_conversion: boolean;\n\n // If 'true' anyone can register\n // If 'false' only the admin can\n allow_registrations: boolean;\n\n // If 'true' account can delete themselves\n // If 'false' only the admin can delete accounts\n allow_deletions: boolean;\n\n // If 'true' anyone can edit their name\n // If 'false' only admin can\n allow_edit_name: boolean;\n\n // If 'true' anyone can edit their cashout account\n // If 'false' only the admin\n allow_edit_cashout_payto_uri: boolean;\n\n // Default debt limit for newly created accounts\n default_debit_threshold: AmountString;\n\n // Currency used by this bank.\n currency: string;\n\n // How the bank SPA should render this currency.\n currency_specification: CurrencySpecification;\n\n // TAN channels supported by the server\n supported_tan_channels: TanChannel[];\n\n // Wire transfer type supported by the bank.\n // Default to 'iban' is missing\n // @since v4, may become mandatory in the future.\n wire_type: string;\n }\n\n export interface BankAccountCreateWithdrawalRequest {\n // Amount to withdraw.\n amount: AmountString;\n }\n export interface BankAccountCreateWithdrawalResponse {\n // ID of the withdrawal, can be used to view/modify the withdrawal operation.\n withdrawal_id: string;\n\n // URI that can be passed to the wallet to initiate the withdrawal.\n taler_withdraw_uri: TalerUriString;\n }\n export interface WithdrawalPublicInfo {\n // Current status of the operation\n // pending: the operation is pending parameters selection (exchange and reserve public key)\n // selected: the operations has been selected and is pending confirmation\n // aborted: the operation has been aborted\n // confirmed: the transfer has been confirmed and registered by the bank\n status: WithdrawalOperationStatus;\n\n // Amount that will be withdrawn with this operation\n // (raw amount without fee considerations).\n amount: AmountString;\n\n // Account username\n username: string;\n\n // Reserve public key selected by the exchange,\n // only non-null if status is selected or confirmed.\n selected_reserve_pub?: string;\n\n // Exchange account selected by the wallet\n // only non-null if status is selected or confirmed.\n selected_exchange_account?: PaytoString;\n }\n\n export interface BankAccountTransactionsResponse {\n transactions: BankAccountTransactionInfo[];\n }\n\n export interface BankAccountTransactionInfo {\n creditor_payto_uri: PaytoString;\n debtor_payto_uri: PaytoString;\n\n amount: AmountString;\n direction: \"debit\" | \"credit\";\n\n subject: string;\n\n // Transaction unique ID. Matches\n // $transaction_id from the URI.\n row_id: number;\n date: Timestamp;\n }\n\n export interface CreateTransactionRequest {\n // Address in the Payto format of the wire transfer receiver.\n // It needs at least the 'message' query string parameter.\n payto_uri: PaytoString;\n\n // Transaction amount (in the $currency:x.y format), optional.\n // However, when not given, its value must occupy the 'amount'\n // query string parameter of the 'payto' field. In case it\n // is given in both places, the paytoUri's takes the precedence.\n amount?: AmountString;\n\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n // @since v4, will become mandatory in the next version.\n request_uid?: ShortHashCode;\n }\n\n export interface CreateTransactionResponse {\n // ID identifying the transaction being created\n row_id: Integer;\n }\n\n export interface RegisterAccountResponse {\n // Internal payto URI of this bank account.\n internal_payto_uri: PaytoString;\n }\n\n export interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n contact_data?: ChallengeContactData;\n\n // 'payto' address of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n cashout_payto_uri?: PaytoString;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: PaytoString;\n\n // If present, set the max debit allowed for this user\n // Only admin can set this property.\n debit_threshold?: AmountString;\n\n // If present, set a custom minimum cashout amount for this account.\n // Only admin can set this property\n // @since v4\n min_cashout?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n // Only admin can set this property, other user can reconfig their account\n // after creation.\n tan_channel?: TanChannel;\n }\n\n export interface ChallengeContactData {\n // E-Mail address\n email?: EmailAddress;\n\n // Phone number.\n phone?: PhoneNumber;\n }\n\n export interface AccountReconfiguration {\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n // Only admin can change this property.\n contact_data?: ChallengeContactData;\n\n // 'payto' URI of a fiat bank account.\n // Payments will be sent to this bank account\n // when the user wants to convert the regional currency\n // back to fiat currency outside bank.\n // Only admin can change this property if not allowed in config\n cashout_payto_uri?: PaytoString;\n\n // If present, change the legal name associated with $username.\n // Only admin can change this property if not allowed in config\n name?: string;\n\n // Make this account visible to anyone?\n is_public?: boolean;\n\n // If present, change the max debit allowed for this user\n // Only admin can change this property.\n debit_threshold?: AmountString;\n\n // If present, change the custom minimum cashout amount for this account.\n // Only admin can set this property\n // @since v4\n min_cashout?: AmountString;\n\n // If present, enables 2FA and set the TAN channel used for challenges\n tan_channel?: TanChannel | null;\n }\n\n export interface AccountPasswordChange {\n // New password.\n new_password: string;\n // Old password. If present, check that the old password matches.\n // Optional for admin account.\n old_password?: string;\n }\n\n export interface PublicAccountsResponse {\n public_accounts: PublicAccount[];\n }\n export interface PublicAccount {\n // Username of the account\n username: string;\n\n // Internal payto URI of this bank account.\n payto_uri: string;\n\n // Current balance of the account\n balance: Balance;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n }\n\n export interface ListBankAccountsResponse {\n accounts: AccountMinimalData[];\n }\n export interface Balance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n }\n export interface AccountMinimalData {\n // Username\n username: string;\n\n // Legal name of the account owner.\n name: string;\n\n // Internal payto URI of this bank account.\n payto_uri: PaytoString;\n\n // current balance of the account\n balance: Balance;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Custom minimum cashout amount for this account.\n // If null or absent, the global conversion fee is used.\n // @since v4\n min_cashout?: AmountString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Opaque unique ID used for pagination.\n // @since v4, will become mandatory in the future.\n row_id?: Integer;\n\n // Current status of the account\n // active: the account can be used\n // deleted: the account has been deleted but is retained for compliance\n // reasons, only the administrator can access it\n // Default to 'active' is missing\n // @since v4, will become mandatory in the next version.\n status?: \"active\" | \"deleted\";\n }\n\n export interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: Balance;\n\n // payto://-URI of the account.\n payto_uri: PaytoString;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n // Custom minimum cashout amount for this account.\n // If null or absent, the global conversion fee is used.\n // @since v4\n min_cashout?: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: PaytoString;\n\n // Is this account visible to anyone?\n is_public: boolean;\n\n // Is this a taler exchange account?\n is_taler_exchange: boolean;\n\n // Is 2FA enabled and what channel is used for challenges?\n tan_channel?: TanChannel;\n \n // Current status of the account\n // active: the account can be used\n // deleted: the account has been deleted but is retained for compliance\n // reasons, only the administrator can access it\n // Default to 'active' is missing\n // @since v4, will become mandatory in the next version.\n status?: \"active\" | \"deleted\";\n }\n\n export interface CashoutRequest {\n // Nonce to make the request idempotent. Requests with the same\n // request_uid that differ in any of the other fields\n // are rejected.\n request_uid: ShortHashCode;\n\n // Optional subject to associate to the\n // cashout operation. This data will appear\n // as the incoming wire transfer subject in\n // the user's fiat bank account.\n subject?: string;\n\n // That is the plain amount that the user specified\n // to cashout. Its $currency is the (regional) currency of the\n // bank instance.\n amount_debit: AmountString;\n\n // That is the amount that will effectively be\n // transferred by the bank to the user's bank\n // account, that is external to the regional currency.\n // It is expressed in the fiat currency and\n // is calculated after the cashout fee and the\n // exchange rate. See the /cashout-rates call.\n // The client needs to calculate this amount\n // correctly based on the amount_debit and the cashout rate,\n // otherwise the request will fail.\n amount_credit: AmountString;\n }\n\n export interface CashoutResponse {\n // ID identifying the operation being created\n cashout_id: number;\n }\n\n /**\n * @deprecated since 4, use 2fa\n */\n export interface CashoutConfirmRequest {\n // the TAN that confirms $CASHOUT_ID.\n tan: string;\n }\n\n export interface Cashouts {\n // Every string represents a cash-out operation ID.\n cashouts: CashoutInfo[];\n }\n\n export interface CashoutInfo {\n cashout_id: number;\n /**\n * @deprecated since 4, use new 2fa\n */\n status?: \"pending\" | \"aborted\" | \"confirmed\";\n }\n export interface GlobalCashouts {\n // Every string represents a cash-out operation ID.\n cashouts: GlobalCashoutInfo[];\n }\n export interface GlobalCashoutInfo {\n cashout_id: number;\n username: string;\n }\n\n export interface CashoutStatusResponse {\n // Amount debited to the internal\n // regional currency bank account.\n amount_debit: AmountString;\n\n // Amount credited to the external bank account.\n amount_credit: AmountString;\n\n // Transaction subject.\n subject: string;\n\n // Time when the cashout was created.\n creation_time: Timestamp;\n }\n\n export interface ConversionRatesResponse {\n // Exchange rate to buy the local currency from the external one\n buy_at_ratio: DecimalNumber;\n\n // Exchange rate to sell the local currency for the external one\n sell_at_ratio: DecimalNumber;\n\n // Fee to subtract after applying the buy ratio.\n buy_in_fee: DecimalNumber;\n\n // Fee to subtract after applying the sell ratio.\n sell_out_fee: DecimalNumber;\n }\n\n export enum MonitorTimeframeParam {\n hour,\n day,\n month,\n year,\n decade,\n }\n\n export type MonitorResponse = MonitorNoConversion | MonitorWithConversion;\n\n // Monitoring stats when conversion is not supported\n export interface MonitorNoConversion {\n type: \"no-conversions\";\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n // Monitoring stats when conversion is supported\n export interface MonitorWithConversion {\n type: \"with-conversions\";\n\n // How many cashin operations were confirmed by a\n // wallet owner. Note: wallet owners\n // are NOT required to be customers of the libeufin-bank.\n cashinCount: number;\n\n // Overall regional currency that has been paid by the regional admin account\n // to regional bank accounts to fulfill all the confirmed cashin operations.\n cashinRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid to the fiat admin account\n // by fiat bank accounts to fulfill all the confirmed cashin operations.\n cashinFiatVolume: AmountString;\n\n // How many cashout operations were confirmed.\n cashoutCount: number;\n\n // Overall regional currency that has been paid to the regional admin account\n // by fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutRegionalVolume: AmountString;\n\n // Overall fiat currency that has been paid by the fiat admin account\n // to fiat bank accounts to fulfill all the confirmed cashout operations.\n cashoutFiatVolume: AmountString;\n\n // How many payments were made to a Taler exchange by another\n // bank account.\n talerInCount: number;\n\n // Overall volume that has been paid to a Taler\n // exchange by another bank account.\n talerInVolume: AmountString;\n\n // How many payments were made by a Taler exchange to another\n // bank account.\n talerOutCount: number;\n\n // Overall volume that has been paid by a Taler\n // exchange to another bank account.\n talerOutVolume: AmountString;\n }\n export interface TanTransmission {\n // Channel of the last successful transmission of the TAN challenge.\n tan_channel: TanChannel;\n\n // Info of the last successful transmission of the TAN challenge.\n tan_info: string;\n }\n\n export interface Challenge {\n // Unique identifier of the challenge to solve to run this protected\n // operation.\n challenge_id: number;\n }\n\n export interface ChallengeSolve {\n // The TAN code that solves $CHALLENGE_ID\n tan: string;\n }\n\n export enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n }\n}\n\nexport namespace TalerExchangeApi {\n export enum AmlState {\n normal = 0,\n pending = 1,\n frozen = 2,\n }\n\n export interface AmlRecords {\n // Array of AML records matching the query.\n records: AmlRecord[];\n }\n export interface AmlRecord {\n // Which payto-address is this record about.\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the current AML state.\n current_state: AmlState;\n\n // Monthly transaction threshold before a review will be triggered\n threshold: AmountString;\n\n // RowID of the record.\n rowid: Integer;\n }\n\n export interface AmlDecisionDetails {\n // Array of AML decisions made for this account. Possibly\n // contains only the most recent decision if \"history\" was\n // not set to 'true'.\n aml_history: AmlDecisionDetail[];\n\n // Array of KYC attributes obtained for this account.\n kyc_attributes: KycDetail[];\n }\n export interface AmlDecisionDetail {\n // What was the justification given?\n justification: string;\n\n // What is the new AML state.\n new_state: Integer;\n\n // When was this decision made?\n decision_time: Timestamp;\n\n // What is the new AML decision threshold (in monthly transaction volume)?\n new_threshold: AmountString;\n\n // Who made the decision?\n decider_pub: AmlOfficerPublicKeyP;\n }\n export interface KycDetail {\n // Name of the configuration section that specifies the provider\n // which was used to collect the KYC details\n provider_section: string;\n\n // The collected KYC data. NULL if the attribute data could not\n // be decrypted (internal error of the exchange, likely the\n // attribute key was changed).\n attributes?: Object;\n\n // Time when the KYC data was collected\n collection_time: Timestamp;\n\n // Time when the validity of the KYC data will expire\n expiration_time: Timestamp;\n }\n\n export interface AmlDecision {\n // Human-readable justification for the decision.\n justification: string;\n\n // At what monthly transaction volume should the\n // decision be automatically reviewed?\n new_threshold: AmountString;\n\n // Which payto-address is the decision about?\n // Identifies a GNU Taler wallet or an affected bank account.\n h_payto: PaytoHash;\n\n // What is the new AML state (e.g. frozen, unfrozen, etc.)\n // Numerical values are defined in AmlDecisionState.\n new_state: Integer;\n\n // Signature by the AML officer over a\n // TALER_MasterAmlOfficerStatusPS.\n // Must have purpose TALER_SIGNATURE_MASTER_AML_KEY.\n officer_sig: EddsaSignature;\n\n // When was the decision made?\n decision_time: Timestamp;\n\n // Optional argument to impose new KYC requirements\n // that the customer has to satisfy to unblock transactions.\n kyc_requirements?: string[];\n }\n\n export interface ExchangeVersionResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-exchange\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v18, may become mandatory in the future.\n implementation?: string;\n\n // Currency supported by this exchange, given\n // as a currency code (\"USD\" or \"EUR\").\n currency: string;\n\n // How wallets should render this currency.\n currency_specification: CurrencySpecification;\n\n // Names of supported KYC requirements.\n supported_kyc_requirements: string[];\n }\n\n export type AccountRestriction =\n | RegexAccountRestriction\n | DenyAllAccountRestriction;\n // Account restriction that disables this type of\n // account for the indicated operation categorically.\n export interface DenyAllAccountRestriction {\n type: \"deny\";\n }\n // Accounts interacting with this type of account\n // restriction must have a payto://-URI matching\n // the given regex.\n export interface RegexAccountRestriction {\n type: \"regex\";\n\n // Regular expression that the payto://-URI of the\n // partner account must follow. The regular expression\n // should follow posix-egrep, but without support for character\n // classes, GNU extensions, back-references or intervals. See\n // https://www.gnu.org/software/findutils/manual/html_node/find_html/posix_002degrep-regular-expression-syntax.html\n // for a description of the posix-egrep syntax. Applications\n // may support regexes with additional features, but exchanges\n // must not use such regexes.\n payto_regex: string;\n\n // Hint for a human to understand the restriction\n // (that is hopefully easier to comprehend than the regex itself).\n human_hint: string;\n\n // Map from IETF BCP 47 language tags to localized\n // human hints.\n human_hint_i18n?: { [lang_tag: string]: string };\n }\n\n export interface WireAccount {\n // payto:// URI identifying the account and wire method\n payto_uri: PaytoString;\n\n // URI to convert amounts from or to the currency used by\n // this wire account of the exchange. Missing if no\n // conversion is applicable.\n conversion_url?: string;\n\n // Restrictions that apply to bank accounts that would send\n // funds to the exchange (crediting this exchange bank account).\n // Optional, empty array for unrestricted.\n credit_restrictions: AccountRestriction[];\n\n // Restrictions that apply to bank accounts that would receive\n // funds from the exchange (debiting this exchange bank account).\n // Optional, empty array for unrestricted.\n debit_restrictions: AccountRestriction[];\n\n // Signature using the exchange's offline key over\n // a TALER_MasterWireDetailsPS\n // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.\n master_sig: EddsaSignature;\n }\n\n export interface ExchangeKeysResponse {\n // libtool-style representation of the Exchange protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // The exchange's base URL.\n base_url: string;\n\n // The exchange's currency or asset unit.\n currency: string;\n\n /**\n * FIXME: PARTIALLY IMPLEMENTED!!\n */\n\n // How wallets should render this currency.\n // currency_specification: CurrencySpecification;\n\n // // Absolute cost offset for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // stefan_abs: AmountString;\n\n // // Factor to multiply the logarithm of the amount\n // // with to (over) approximate fees payable by amount.\n // // Note that the total to be paid is first to be\n // // divided by the smallest denomination to obtain\n // // the value that the logarithm is to be taken of.\n // stefan_log: AmountString;\n\n // // Linear cost factor for the STEFAN curve used\n // // to (over) approximate fees payable by amount.\n // //\n // // Note that this is a scalar, as it is multiplied\n // // with the actual amount.\n // stefan_lin: Float;\n\n // // Type of the asset. \"fiat\", \"crypto\", \"regional\"\n // // or \"stock\". Wallets should adjust their UI/UX\n // // based on this value.\n // asset_type: string;\n\n // // Array of wire accounts operated by the exchange for\n // // incoming wire transfers.\n // accounts: WireAccount[];\n\n // // Object mapping names of wire methods (i.e. \"iban\" or \"x-taler-bank\")\n // // to wire fees.\n // wire_fees: { method: AggregateTransferFee[] };\n\n // // List of exchanges that this exchange is partnering\n // // with to enable wallet-to-wallet transfers.\n // wads: ExchangePartner[];\n\n // // Set to true if this exchange allows the use\n // // of reserves for rewards.\n // // @deprecated in protocol v18.\n // rewards_allowed: false;\n\n // // EdDSA master public key of the exchange, used to sign entries\n // // in denoms and signkeys.\n // master_public_key: EddsaPublicKey;\n\n // // Relative duration until inactive reserves are closed;\n // // not signed (!), can change without notice.\n // reserve_closing_delay: RelativeTime;\n\n // // Threshold amounts beyond which wallet should\n // // trigger the KYC process of the issuing\n // // exchange. Optional option, if not given there is no limit.\n // // Currency must match currency.\n // wallet_balance_limit_without_kyc?: AmountString[];\n\n // // Denominations offered by this exchange\n // denominations: DenomGroup[];\n\n // // Compact EdDSA signature (binary-only) over the\n // // contatentation of all of the master_sigs (in reverse\n // // chronological order by group) in the arrays under\n // // \"denominations\". Signature of TALER_ExchangeKeySetPS\n // exchange_sig: EddsaSignature;\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 signkeys. It is given\n // // explicitly as the client might otherwise be confused by clock skew as to\n // // which signing key was used for the exchange_sig.\n // exchange_pub: EddsaPublicKey;\n\n // // Denominations for which the exchange currently offers/requests recoup.\n // recoup: Recoup[];\n\n // // Array of globally applicable fees by time range.\n // global_fees: GlobalFees[];\n\n // // The date when the denomination keys were last updated.\n // list_issue_date: Timestamp;\n\n // // Auditors of the exchange.\n // auditors: AuditorKeys[];\n\n // // The exchange's signing keys.\n // signkeys: SignKey[];\n\n // // Optional field with a dictionary of (name, object) pairs defining the\n // // supported and enabled extensions, such as age_restriction.\n // extensions?: { name: ExtensionManifest };\n\n // // Signature by the exchange master key of the SHA-256 hash of the\n // // normalized JSON-object of field extensions, if it was set.\n // // The signature has purpose TALER_SIGNATURE_MASTER_EXTENSIONS.\n // extensions_sig?: EddsaSignature;\n }\n\n interface ExtensionManifest {\n // The criticality of the extension MUST be provided. It has the same\n // semantics as \"critical\" has for extensions in X.509:\n // - if \"true\", the client must \"understand\" the extension before\n // proceeding,\n // - if \"false\", clients can safely skip extensions they do not\n // understand.\n // (see https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)\n critical: boolean;\n\n // The version information MUST be provided in Taler's protocol version\n // ranges notation, see\n // https://docs.taler.net/core/api-common.html#protocol-version-ranges\n version: LibtoolVersion;\n\n // Optional configuration object, defined by the feature itself\n config?: object;\n }\n\n interface SignKey {\n // The actual exchange's EdDSA signing public key.\n key: EddsaPublicKey;\n\n // Initial validity date for the signing key.\n stamp_start: Timestamp;\n\n // Date when the exchange will stop using the signing key, allowed to overlap\n // slightly with the next signing key's validity to allow for clock skew.\n stamp_expire: Timestamp;\n\n // Date when all signatures made by the signing key expire and should\n // henceforth no longer be considered valid in legal disputes.\n stamp_end: Timestamp;\n\n // Signature over key and stamp_expire by the exchange master key.\n // Signature of TALER_ExchangeSigningKeyValidityPS.\n // Must have purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.\n master_sig: EddsaSignature;\n }\n\n interface AuditorKeys {\n // The auditor's EdDSA signing public key.\n auditor_pub: EddsaPublicKey;\n\n // The auditor's URL.\n auditor_url: string;\n\n // The auditor's name (for humans).\n auditor_name: string;\n\n // An array of denomination keys the auditor affirms with its signature.\n // Note that the message only includes the hash of the public key, while the\n // signature is actually over the expanded information including expiration\n // times and fees. The exact format is described below.\n denomination_keys: AuditorDenominationKey[];\n }\n interface AuditorDenominationKey {\n // Hash of the public RSA key used to sign coins of the respective\n // denomination. Note that the auditor's signature covers more than just\n // the hash, but this other information is already provided in denoms and\n // thus not repeated here.\n denom_pub_h: HashCode;\n\n // Signature of TALER_ExchangeKeyValidityPS.\n auditor_sig: EddsaSignature;\n }\n\n interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: Timestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: Timestamp;\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: RelativeTime;\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: Integer;\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: RelativeTime;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: EddsaSignature;\n }\n\n interface Recoup {\n // Hash of the public key of the denomination that is being revoked under\n // emergency protocol (see /recoup).\n h_denom_pub: HashCode;\n\n // We do not include any signature here, as the primary use-case for\n // this emergency involves the exchange having lost its signing keys,\n // so such a signature here would be pretty worthless. However, the\n // exchange will not honor /recoup requests unless they are for\n // denomination keys listed here.\n }\n\n interface AggregateTransferFee {\n // Per transfer wire transfer fee.\n wire_fee: AmountString;\n\n // Per transfer closing fee.\n closing_fee: AmountString;\n\n // What date (inclusive) does this fee go into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n start_date: Timestamp;\n\n // What date (exclusive) does this fee stop going into effect?\n // The different fees must cover the full time period in which\n // any of the denomination keys are valid without overlap.\n end_date: Timestamp;\n\n // Signature of TALER_MasterWireFeePS with\n // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.\n sig: EddsaSignature;\n }\n\n interface ExchangePartner {\n // Base URL of the partner exchange.\n partner_base_url: string;\n\n // Public master key of the partner exchange.\n partner_master_pub: EddsaPublicKey;\n\n // Per exchange-to-exchange transfer (wad) fee.\n wad_fee: AmountString;\n\n // Exchange-to-exchange wad (wire) transfer frequency.\n wad_frequency: RelativeTime;\n\n // When did this partnership begin (under these conditions)?\n start_date: Timestamp;\n\n // How long is this partnership expected to last?\n end_date: Timestamp;\n\n // Signature using the exchange's offline key over\n // TALER_WadPartnerSignaturePS\n // with purpose TALER_SIGNATURE_MASTER_PARTNER_DETAILS.\n master_sig: EddsaSignature;\n }\n\n type DenomGroup =\n | DenomGroupRsa\n | DenomGroupCs\n | DenomGroupRsaAgeRestricted\n | DenomGroupCsAgeRestricted;\n interface DenomGroupRsa extends DenomGroupCommon {\n cipher: \"RSA\";\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCs extends DenomGroupCommon {\n cipher: \"CS\";\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n\n // Binary representation of the age groups.\n // The bits set in the mask mark the edges at the beginning of a next age\n // group. F.e. for the age groups\n // 0-7, 8-9, 10-11, 12-13, 14-15, 16-17, 18-21, 21-*\n // the following bits are set:\n //\n // 31 24 16 8 0\n // | | | | |\n // oooooooo oo1oo1o1 o1o1o1o1 ooooooo1\n //\n // A value of 0 means that the exchange does not support the extension for\n // age-restriction.\n type AgeMask = Integer;\n\n interface DenomGroupRsaAgeRestricted extends DenomGroupCommon {\n cipher: \"RSA+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n rsa_pub: RsaPublicKey;\n } & DenomCommon)[];\n }\n interface DenomGroupCsAgeRestricted extends DenomGroupCommon {\n cipher: \"CS+age_restricted\";\n age_mask: AgeMask;\n\n denoms: ({\n cs_pub: Cs25519Point;\n } & DenomCommon)[];\n }\n // Common attributes for all denomination groups\n interface DenomGroupCommon {\n // How much are coins of this denomination worth?\n value: AmountString;\n\n // Fee charged by the exchange for withdrawing a coin of this denomination.\n fee_withdraw: AmountString;\n\n // Fee charged by the exchange for depositing a coin of this denomination.\n fee_deposit: AmountString;\n\n // Fee charged by the exchange for refreshing a coin of this denomination.\n fee_refresh: AmountString;\n\n // Fee charged by the exchange for refunding a coin of this denomination.\n fee_refund: AmountString;\n }\n interface DenomCommon {\n // Signature of TALER_DenominationKeyValidityPS.\n master_sig: EddsaSignature;\n\n // When does the denomination key become valid?\n stamp_start: Timestamp;\n\n // When is it no longer possible to withdraw coins\n // of this denomination?\n stamp_expire_withdraw: Timestamp;\n\n // When is it no longer possible to deposit coins\n // of this denomination?\n stamp_expire_deposit: Timestamp;\n\n // Timestamp indicating by when legal disputes relating to these coins must\n // be settled, as the exchange will afterwards destroy its evidence relating to\n // transactions involving this coin.\n stamp_expire_legal: Timestamp;\n\n // Set to 'true' if the exchange somehow \"lost\"\n // the private key. The denomination was not\n // necessarily revoked, but still cannot be used\n // to withdraw coins at this time (theoretically,\n // the private key could be recovered in the\n // future; coins signed with the private key\n // remain valid).\n lost?: boolean;\n }\n type DenominationKey = RsaDenominationKey | CSDenominationKey;\n interface RsaDenominationKey {\n cipher: \"RSA\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // RSA public key\n rsa_public_key: RsaPublicKey;\n }\n interface CSDenominationKey {\n cipher: \"CS\";\n\n // 32-bit age mask.\n age_mask: Integer;\n\n // Public key of the denomination.\n cs_public_key: Cs25519Point;\n }\n}\n\nexport namespace TalerMerchantApi {\n export interface VersionResponse {\n // libtool-style representation of the Merchant protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // Name of the protocol.\n name: \"taler-merchant\";\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since **v8**, may become mandatory in the future.\n implementation?: string;\n\n // Default (!) currency supported by this backend.\n // This is the currency that the backend should\n // suggest by default to the user when entering\n // amounts. See currencies for a list of\n // supported currencies and how to render them.\n currency: string;\n\n // How services should render currencies supported\n // by this backend. Maps\n // currency codes (e.g. \"EUR\" or \"KUDOS\") to\n // the respective currency specification.\n // All currencies in this map are supported by\n // the backend. Note that the actual currency\n // specifications are a *hint* for applications\n // that would like *advice* on how to render amounts.\n // Applications *may* ignore the currency specification\n // if they know how to render currencies that they are\n // used with.\n currencies: { [currency: string]: CurrencySpecification };\n\n // Array of exchanges trusted by the merchant.\n // Since protocol **v6**.\n exchanges: ExchangeConfigInfo[];\n }\n\n export interface ExchangeConfigInfo {\n // Base URL of the exchange REST API.\n base_url: string;\n\n // Currency for which the merchant is configured\n // to trust the exchange.\n // May not be the one the exchange actually uses,\n // but is the only one we would trust this exchange for.\n currency: string;\n\n // Offline master public key of the exchange. The\n // /keys data must be signed with this public\n // key for us to trust it.\n master_pub: EddsaPublicKey;\n }\n export interface ClaimRequest {\n // Nonce to identify the wallet that claimed the order.\n nonce: string;\n\n // Token that authorizes the wallet to claim the order.\n // *Optional* as the merchant may not have required it\n // (create_token set to false in PostOrderRequest).\n token?: ClaimToken;\n }\n\n export interface ClaimResponse {\n // Contract terms of the claimed order\n contract_terms: ContractTerms;\n\n // Signature by the merchant over the contract terms.\n sig: EddsaSignature;\n }\n\n export interface PaymentResponse {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Text to be shown to the point-of-sale staff as a proof of\n // payment.\n pos_confirmation?: string;\n }\n\n export interface PaymentStatusRequestParams {\n // Hash of the order\u2019s contract terms (this is used to\n // authenticate the wallet/customer in case\n // $ORDER_ID is guessable).\n // Required once an order was claimed.\n contractTermHash?: string;\n // Authorizes the request via the claim token that\n // was returned in the PostOrderResponse. Used with\n // unclaimed orders only. Whether token authorization is\n // required is determined by the merchant when the\n // frontend creates the order.\n claimToken?: string;\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // If specified, the merchant backend will wait up to\n // timeout_ms milliseconds for completion of the payment\n // before sending the HTTP response. A client must never\n // rely on this behavior, as the merchant backend may return\n // a response immediately.\n timeout?: number;\n // If set to \u201Cyes\u201D, poll for the order\u2019s pending refunds\n // to be picked up. timeout_ms specifies how long we\n // will wait for the refund.\n awaitRefundObtained?: boolean;\n // Indicates that we are polling for a refund above the\n // given AMOUNT. timeout_ms will specify how long we\n // will wait for the refund.\n refund?: AmountString;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface GetKycStatusRequestParams {\n // If specified, the KYC check should return\n // the KYC status only for this wire account.\n // Otherwise, for all wire accounts.\n wireHash?: string;\n // If specified, the KYC check should return\n // the KYC status only for the given exchange.\n // Otherwise, for all exchanges we interacted with.\n exchangeURL?: string;\n // If specified, the merchant will wait up to\n // timeout_ms milliseconds for the exchanges to\n // confirm completion of the KYC process(es).\n timeout?: number;\n }\n export interface GetOtpDeviceRequestParams {\n // Timestamp in seconds to use when calculating\n // the current OTP code of the device. Since protocol v10.\n faketime?: number;\n // Price to use when calculating the current OTP\n // code of the device. Since protocol v10.\n price?: AmountString;\n }\n export interface GetOrderRequestParams {\n // Session ID that the payment must be bound to.\n // If not specified, the payment is not session-bound.\n sessionId?: string;\n // Timeout in milliseconds to wait for a payment if\n // the answer would otherwise be negative (long polling).\n timeout?: number;\n // Since protocol v9 refunded orders are only returned\n // under \u201Calready_paid_order_id\u201D if this flag is set\n // explicitly to \u201CYES\u201D.\n allowRefundedForRepurchase?: boolean;\n }\n export interface ListWireTransferRequestParams {\n // Filter for transfers to the given bank account\n // (subject and amount MUST NOT be given in the payto URI).\n paytoURI?: string;\n // Filter for transfers executed before the given timestamp.\n before?: number;\n // Filter for transfers executed after the given timestamp.\n after?: number;\n // At most return the given number of results. Negative for\n // descending in execution time, positive for ascending in\n // execution time. Default is -20.\n limit?: number;\n // Starting transfer_serial_id for an iteration.\n offset?: string;\n // Filter transfers by verification status.\n verified?: boolean;\n order?: \"asc\" | \"dec\";\n }\n export interface ListOrdersRequestParams {\n // If set to yes, only return paid orders, if no only\n // unpaid orders. Do not give (or use \u201Call\u201D) to see all\n // orders regardless of payment status.\n paid?: boolean;\n // If set to yes, only return refunded orders, if no only\n // unrefunded orders. Do not give (or use \u201Call\u201D) to see\n // all orders regardless of refund status.\n refunded?: boolean;\n // If set to yes, only return wired orders, if no only\n // orders with missing wire transfers. Do not give (or\n // use \u201Call\u201D) to see all orders regardless of wire transfer\n // status.\n wired?: boolean;\n // At most return the given number of results. Negative\n // for descending by row ID, positive for ascending by\n // row ID. Default is 20. Since protocol v12.\n limit?: number;\n // Non-negative date in seconds after the UNIX Epoc, see delta\n // for its interpretation. If not specified, we default to the\n // oldest or most recent entry, depending on delta.\n date?: AbsoluteTime;\n // Starting product_serial_id for an iteration.\n // Since protocol v12.\n offset?: string;\n // Timeout in milliseconds to wait for additional orders if the\n // answer would otherwise be negative (long polling). Only useful\n // if delta is positive. Note that the merchant MAY still return\n // a response that contains fewer than delta orders.\n timeout?: number;\n // Since protocol v6. Filters by session ID.\n sessionId?: string;\n // Since protocol v6. Filters by fulfillment URL.\n fulfillmentUrl?: string;\n\n order?: \"asc\" | \"dec\";\n }\n\n export interface PayRequest {\n // The coins used to make the payment.\n coins: CoinPaySig[];\n\n // Custom inputs from the wallet for the contract.\n wallet_data?: Object;\n\n // The session for which the payment is made (or replayed).\n // Only set for session-based payments.\n session_id?: string;\n }\n export interface CoinPaySig {\n // Signature by the coin.\n coin_sig: EddsaSignature;\n\n // Public key of the coin being spent.\n coin_pub: EddsaPublicKey;\n\n // Signature made by the denomination public key.\n ub_sig: RsaSignature;\n\n // The hash of the denomination public key associated with this coin.\n h_denom: HashCode;\n\n // The amount that is subtracted from this coin with this payment.\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n }\n\n export interface StatusPaid {\n type: \"paid\";\n\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 export interface StatusGotoResponse {\n type: \"goto\";\n // The client should go to the reorder URL, there a fresh\n // order might be created as this one is taken by another\n // customer or wallet (or repurchase detection logic may\n // apply).\n public_reorder_url: string;\n }\n export interface StatusUnpaidResponse {\n type: \"unpaid\";\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n fulfillment_url?: string;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n }\n\n export interface PaidRefundStatusResponse {\n // Text to be shown to the point-of-sale staff as a proof of\n // payment (present only if reusable OTP algorithm is used).\n pos_confirmation?: string;\n\n // True if the order has been subjected to\n // refunds. False if it was simply paid.\n refunded: boolean;\n }\n export interface PaidRequest {\n // Signature on TALER_PaymentResponsePS with the public\n // key of the merchant instance.\n sig: EddsaSignature;\n\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer and to enable signature verification without\n // database access).\n h_contract: HashCode;\n\n // Hash over custom inputs from the wallet for the contract.\n wallet_data_hash?: HashCode;\n\n // Session id for which the payment is proven.\n session_id: string;\n }\n\n export 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: HashCode;\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 interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKey;\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 export 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 export type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n // Details about why a refund failed.\n export 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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\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.\n export 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: EddsaSignature;\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: EddsaPublicKey;\n }\n\n export interface WalletRefundRequest {\n // Hash of the order's contract terms (this is used to authenticate the\n // wallet/customer).\n h_contract: HashCode;\n }\n export interface WalletRefundResponse {\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Successful refunds for this payment, empty array for none.\n refunds: MerchantCoinRefundStatus[];\n\n // Public key of the merchant.\n merchant_pub: EddsaPublicKey;\n }\n export type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n // Details about why a refund failed.\n export interface MerchantCoinRefundFailureStatus {\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: Integer;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: Integer;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: Object;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\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.\n export interface MerchantCoinRefundSuccessStatus {\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: EddsaSignature;\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: EddsaPublicKey;\n\n // Refund transaction ID.\n rtransaction_id: Integer;\n\n // Public key of a coin that was refunded.\n coin_pub: EddsaPublicKey;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n // Timestamp when the merchant approved the refund.\n // Useful for grouping refunds.\n execution_time: Timestamp;\n }\n\n interface RewardInformation {\n // Exchange from which the reward will be withdrawn. Needed by the\n // wallet to determine denominations, fees, etc.\n exchange_url: string;\n\n // URL where to go after obtaining the reward.\n next_url: string;\n\n // (Remaining) amount of the reward (including fees).\n reward_amount: AmountString;\n\n // Timestamp indicating when the reward is set to expire (may be in the past).\n // Note that rewards that have expired MAY also result in a 404 response.\n expiration: Timestamp;\n }\n\n interface RewardPickupRequest {\n // List of planchets the wallet wants to use for the reward.\n planchets: PlanchetDetail[];\n }\n interface PlanchetDetail {\n // Hash of the denomination's public key (hashed to reduce\n // bandwidth consumption).\n denom_pub_hash: HashCode;\n\n // Coin's blinded public key.\n coin_ev: CoinEnvelope;\n }\n interface RewardResponse {\n // Blind RSA signatures over the planchets.\n // The order of the signatures matches the planchets list.\n blind_sigs: BlindSignature[];\n }\n interface BlindSignature {\n // The (blind) RSA signature. Still needs to be unblinded.\n blind_sig: BlindedRsaSignature;\n }\n\n export interface InstanceConfigurationMessage {\n // Name of the merchant instance to create (will become $INSTANCE).\n // Must match the regex ^[A-Za-z0-9][A-Za-z0-9_.@-]+$.\n id: string;\n\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Authentication settings for this instance\n auth: InstanceAuthConfigurationMessage;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstanceAuthConfigurationMessage {\n // Type of authentication.\n // \"external\": The mechant backend does not do\n // any authentication checks. Instead an API\n // gateway must do the authentication.\n // \"token\": The merchant checks an auth token.\n // See \"token\" for details.\n method: \"external\" | \"token\";\n\n // For method \"token\", this field is mandatory.\n // The token MUST begin with the string \"secret-token:\".\n // After the auth token has been set (with method \"token\"),\n // the value must be provided in a \"Authorization: Bearer $token\"\n // header.\n token?: AccessToken;\n }\n\n export interface InstanceReconfigurationMessage {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (business or individual).\n // Defaults to 'business'. Should become mandatory field\n // in the future, left as optional for API compatibility for now.\n user_type?: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n }\n\n export interface InstancesResponse {\n // List of instances that are present in the backend (see Instance).\n instances: Instance[];\n }\n\n export interface Instance {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Merchant instance this response is about ($INSTANCE).\n id: string;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // List of the payment targets supported by this instance. Clients can\n // specify the desired payment target in /order requests. Note that\n // front-ends do not have to support wallets selecting payment targets.\n payment_targets: string[];\n\n // Has this instance been deleted (but not purged)?\n deleted: boolean;\n }\n\n export interface QueryInstancesResponse {\n // Merchant name corresponding to this instance.\n name: string;\n\n // Type of the user (\"business\" or \"individual\").\n user_type: string;\n\n // Merchant email for customer contact.\n email?: string;\n\n // Merchant public website.\n website?: string;\n\n // Merchant logo.\n logo?: ImageDataUrl;\n\n // Public key of the merchant/instance, in Crockford Base32 encoding.\n merchant_pub: EddsaPublicKey;\n\n // The merchant's physical address (to be put into contracts).\n address: Location;\n\n // The jurisdiction under which the merchant conducts its business\n // (to be put into contracts).\n jurisdiction: Location;\n\n // Use STEFAN curves to determine default fees?\n // If false, no fees are allowed by default.\n // Can always be overridden by the frontend on a per-order basis.\n use_stefan: boolean;\n\n // If the frontend does NOT specify an execution date, how long should\n // we tell the exchange to wait to aggregate transactions before\n // executing the wire transfer? This delay is added to the current\n // time when we generate the advisory execution time for the exchange.\n default_wire_transfer_delay: RelativeTime;\n\n // If the frontend does NOT specify a payment deadline, how long should\n // offers we make be valid by default?\n default_pay_delay: RelativeTime;\n\n // Authentication configuration.\n // Does not contain the token when token auth is configured.\n auth: {\n method: \"external\" | \"token\";\n };\n }\n\n export interface AccountKycRedirects {\n // Array of pending KYCs.\n pending_kycs: MerchantAccountKycRedirect[];\n\n // Array of exchanges with no reply.\n timeout_kycs: ExchangeKycTimeout[];\n }\n\n export interface MerchantAccountKycRedirect {\n // URL that the user should open in a browser to\n // proceed with the KYC process (as returned\n // by the exchange's /kyc-check/ endpoint).\n // Optional, missing if the account is blocked\n // due to AML and not due to KYC.\n kyc_url?: string;\n\n // AML status of the account.\n aml_status: Integer;\n\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Our bank wire account this is about.\n payto_uri: PaytoString;\n }\n\n export interface ExchangeKycTimeout {\n // Base URL of the exchange this is about.\n exchange_url: string;\n\n // Numeric error code indicating errors the exchange\n // returned, or TALER_EC_INVALID for none.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information about the KYC status.\n // 0 if there was no response at all.\n exchange_http_status: number;\n }\n\n export interface AccountAddDetails {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export type FacadeCredentials =\n | NoFacadeCredentials\n | BasicAuthFacadeCredentials;\n export interface NoFacadeCredentials {\n type: \"none\";\n }\n export interface BasicAuthFacadeCredentials {\n type: \"basic\";\n\n // Username to use to authenticate\n username: string;\n\n // Password to use to authenticate\n password: string;\n }\n export interface AccountAddResponse {\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n }\n\n export interface AccountPatchDetails {\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // Credentials to use when accessing the credit facade.\n // Never returned on a GET (as this may be somewhat\n // sensitive data). Can be set in POST\n // or PATCH requests to update (or delete) credentials.\n // To really delete credentials, set them to the type: \"none\".\n // If the argument is omitted, the old credentials\n // are simply preserved.\n credit_facade_credentials?: FacadeCredentials;\n }\n\n export interface AccountsSummaryResponse {\n // List of accounts that are known for the instance.\n accounts: BankAccountSummaryEntry[];\n }\n\n // TODO: missing in docs\n export interface BankAccountSummaryEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n }\n export interface BankAccountEntry {\n // payto:// URI of the account.\n payto_uri: PaytoString;\n\n // Hash over the wire details (including over the salt).\n h_wire: HashCode;\n\n // Salt used to compute h_wire.\n salt: HashCode;\n\n // URL from where the merchant can download information\n // about incoming wire transfers to this account.\n credit_facade_url?: string;\n\n // true if this account is active,\n // false if it is historic.\n active?: boolean;\n }\n\n export interface ProductAddDetail {\n // Product ID to use.\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface ProductPatchDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image?: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes?: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost?: Integer;\n\n // Identifies where the product is in stock.\n address?: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age?: Integer;\n }\n\n export interface InventorySummaryResponse {\n // List of products that are present in the inventory.\n products: InventoryEntry[];\n }\n\n export interface InventoryEntry {\n // Product identifier, as found in the product.\n product_id: string;\n // product_serial_id of the product in the database.\n product_serial: Integer;\n }\n\n export interface ProductDetail {\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 // Unit in which the product is measured (liters, kilograms, packages, etc.).\n unit: string;\n\n // The price for one unit of the product. Zero is used\n // to imply that this product is not sold separately, or\n // that the price is not fixed, and must be supplied by the\n // front-end. If non-zero, this price MUST include applicable\n // taxes.\n price: AmountString;\n\n // An optional base64-encoded product image.\n image: ImageDataUrl;\n\n // A list of taxes paid by the merchant for one unit of this product.\n taxes: Tax[];\n\n // Number of units of the product in stock in sum in total,\n // including all existing sales ever. Given in product-specific\n // units.\n // A value of -1 indicates \"infinite\" (i.e. for \"electronic\" books).\n total_stock: Integer;\n\n // Number of units of the product that have already been sold.\n total_sold: Integer;\n\n // Number of units of the product that were lost (spoiled, stolen, etc.).\n total_lost: Integer;\n\n // Identifies where the product is in stock.\n address: Location;\n\n // Identifies when we expect the next restocking to happen.\n next_restock?: Timestamp;\n\n // Minimum age buyer must have (in years).\n minimum_age?: Integer;\n }\n export interface LockRequest {\n // UUID that identifies the frontend performing the lock\n // Must be unique for the lifetime of the lock.\n lock_uuid: string;\n\n // How long does the frontend intend to hold the lock?\n duration: RelativeTime;\n\n // How many units should be locked?\n quantity: Integer;\n }\n\n export interface PostOrderRequest {\n // The order must at least contain the minimal\n // order detail, but can override all.\n order: Order;\n\n // If set, the backend will then set the refund deadline to the current\n // time plus the specified delay. If it's not set, refunds will not be\n // possible.\n refund_delay?: RelativeTime;\n\n // Specifies the payment target preferred by the client. Can be used\n // to select among the various (active) wire methods supported by the instance.\n payment_target?: string;\n\n // Specifies that some products are to be included in the\n // order from the inventory. For these inventory management\n // is performed (so the products must be in stock) and\n // details are completed from the product data of the backend.\n inventory_products?: MinimalInventoryProduct[];\n\n // Specifies a lock identifier that was used to\n // lock a product in the inventory. Only useful if\n // inventory_products is set. Used in case a frontend\n // reserved quantities of the individual products while\n // the shopping cart was being built. Multiple UUIDs can\n // be used in case different UUIDs were used for different\n // products (i.e. in case the user started with multiple\n // shopping sessions that were combined during checkout).\n lock_uuids?: string[];\n\n // Should a token for claiming the order be generated?\n // False can make sense if the ORDER_ID is sufficiently\n // high entropy to prevent adversarial claims (like it is\n // if the backend auto-generates one). Default is 'true'.\n create_token?: boolean;\n\n // OTP device ID to associate with the order.\n // This parameter is optional.\n otp_id?: string;\n }\n\n type Order = MinimalOrderDetail | ContractTerms;\n\n interface MinimalOrderDetail {\n // Amount to be paid by the customer.\n amount: AmountString;\n\n // Short summary of the order.\n summary: string;\n\n // See documentation of fulfillment_url in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n // When creating an order, the fulfillment URL can\n // contain ${ORDER_ID} which will be substituted with the\n // order ID of the newly created order.\n fulfillment_url?: string;\n\n // See documentation of fulfillment_message in ContractTerms.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n }\n\n interface MinimalInventoryProduct {\n // Which product is requested (here mandatory!).\n product_id: string;\n\n // How many units of the product are requested.\n quantity: Integer;\n }\n\n export interface PostOrderResponse {\n // Order ID of the response that was just created.\n order_id: string;\n\n // Token that authorizes the wallet to claim the order.\n // Provided only if \"create_token\" was set to 'true'\n // in the request.\n token?: ClaimToken;\n }\n export interface OutOfStockResponse {\n // Product ID of an out-of-stock item.\n product_id: string;\n\n // Requested quantity.\n requested_quantity: Integer;\n\n // Available quantity (must be below requested_quantity).\n available_quantity: Integer;\n\n // When do we expect the product to be again in stock?\n // Optional, not given if unknown.\n restock_expected?: Timestamp;\n }\n\n export interface OrderHistory {\n // Timestamp-sorted array of all orders matching the query.\n // The order of the sorting depends on the sign of delta.\n orders: OrderHistoryEntry[];\n }\n export interface OrderHistoryEntry {\n // Order ID of the transaction related to this entry.\n order_id: string;\n\n // Row ID of the order in the database.\n row_id: number;\n\n // When the order was created.\n timestamp: Timestamp;\n\n // The amount of money the order is for.\n amount: AmountString;\n\n // The summary of the order.\n summary: string;\n\n // Whether some part of the order is refundable,\n // that is the refund deadline has not yet expired\n // and the total amount refunded so far is below\n // the value of the original transaction.\n refundable: boolean;\n\n // Whether the order has been paid or not.\n paid: boolean;\n }\n\n export type MerchantOrderStatusResponse =\n | CheckPaymentPaidResponse\n | CheckPaymentClaimedResponse\n | CheckPaymentUnpaidResponse;\n export interface CheckPaymentPaidResponse {\n // The customer paid for this contract.\n order_status: \"paid\";\n\n // Was the payment refunded (even partially)?\n refunded: boolean;\n\n // True if there are any approved refunds that the wallet has\n // not yet obtained.\n refund_pending: boolean;\n\n // Did the exchange wire us the funds?\n wired: boolean;\n\n // Total amount the exchange deposited into our bank account\n // for this contract, excluding fees.\n deposit_total: AmountString;\n\n // Numeric error code indicating errors the exchange\n // encountered tracking the wire transfer for this purchase (before\n // we even got to specific coin issues).\n // 0 if there were no issues.\n exchange_code: number;\n\n // HTTP status code returned by the exchange when we asked for\n // information to track the wire transfer for this purchase.\n // 0 if there were no issues.\n exchange_http_status: number;\n\n // Total amount that was refunded, 0 if refunded is false.\n refund_amount: AmountString;\n\n // Contract terms.\n contract_terms: ContractTerms;\n\n // The wire transfer status from the exchange for this order if\n // available, otherwise empty array.\n wire_details: TransactionWireTransfer[];\n\n // Reports about trouble obtaining wire transfer details,\n // empty array if no trouble were encountered.\n wire_reports: TransactionWireReport[];\n\n // The refund details for this order. One entry per\n // refunded coin; empty array if there are no refunds.\n refund_details: RefundDetails[];\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n }\n export interface CheckPaymentClaimedResponse {\n // A wallet claimed the order, but did not yet pay for the contract.\n order_status: \"claimed\";\n\n // Contract terms.\n contract_terms: ContractTerms;\n }\n export interface CheckPaymentUnpaidResponse {\n // The order was neither claimed nor paid.\n order_status: \"unpaid\";\n\n // URI that the wallet must process to complete the payment.\n taler_pay_uri: string;\n\n // when was the order created\n creation_time: Timestamp;\n\n // Order summary text.\n summary: string;\n\n // Total amount of the order (to be paid by the customer).\n total_amount: AmountString;\n\n // Alternative order ID which was paid for already in the same session.\n // Only given if the same product was purchased before in the same session.\n already_paid_order_id?: string;\n\n // Fulfillment URL of an already paid order. Only given if under this\n // session an already paid order with a fulfillment URL exists.\n already_paid_fulfillment_url?: string;\n\n // Status URL, can be used as a redirect target for the browser\n // to show the order QR code / trigger the wallet.\n order_status_url: string;\n\n // We do we NOT return the contract terms here because they may not\n // exist in case the wallet did not yet claim them.\n }\n export interface RefundDetails {\n // Reason given for the refund.\n reason: string;\n\n // Set to true if a refund is still available for the wallet for this payment.\n pending: boolean;\n\n // When was the refund approved.\n timestamp: Timestamp;\n\n // Total amount that was refunded (minus a refund fee).\n amount: AmountString;\n }\n export interface TransactionWireTransfer {\n // Responsible exchange.\n exchange_url: string;\n\n // 32-byte wire transfer identifier.\n wtid: Base32;\n\n // Execution time of the wire transfer.\n execution_time: Timestamp;\n\n // Total amount that has been wire transferred\n // to the merchant.\n amount: AmountString;\n\n // Was this transfer confirmed by the merchant via the\n // POST /transfers API, or is it merely claimed by the exchange?\n confirmed: boolean;\n }\n export interface TransactionWireReport {\n // Numerical error code.\n code: number;\n\n // Human-readable error description.\n hint: string;\n\n // Numerical error code from the exchange.\n exchange_code: number;\n\n // HTTP status code received from the exchange.\n exchange_http_status: number;\n\n // Public key of the coin for which we got the exchange error.\n coin_pub: CoinPublicKey;\n }\n\n export interface ForgetRequest {\n // Array of valid JSON paths to forgettable fields in the order's\n // contract terms.\n fields: string[];\n }\n\n export interface RefundRequest {\n // Amount to be refunded.\n refund: AmountString;\n\n // Human-readable refund justification.\n reason: string;\n }\n export interface MerchantRefundResponse {\n // URL (handled by the backend) that the wallet should access to\n // trigger refund processing.\n // taler://refund/...\n taler_refund_uri: string;\n\n // Contract hash that a client may need to authenticate an\n // HTTP request to obtain the above URI in a wallet-friendly way.\n h_contract: HashCode;\n }\n\n export interface TransferInformation {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n }\n\n export interface TransferList {\n // List of all the transfers that fit the filter that we know.\n transfers: TransferDetails[];\n }\n export interface TransferDetails {\n // How much was wired to the merchant (minus fees).\n credit_amount: AmountString;\n\n // Raw wire transfer identifier identifying the wire transfer (a base32-encoded value).\n wtid: WireTransferIdentifierRawP;\n\n // Target account that received the wire transfer.\n payto_uri: PaytoString;\n\n // Base URL of the exchange that made the wire transfer.\n exchange_url: string;\n\n // Serial number identifying the transfer in the merchant backend.\n // Used for filtering via offset.\n transfer_serial_id: number;\n\n // Time of the execution of the wire transfer by the exchange, according to the exchange\n // Only provided if we did get an answer from the exchange.\n execution_time?: Timestamp;\n\n // True if we checked the exchange's answer and are happy with it.\n // False if we have an answer and are unhappy, missing if we\n // do not have an answer from the exchange.\n verified?: boolean;\n\n // True if the merchant uses the POST /transfers API to confirm\n // that this wire transfer took place (and it is thus not\n // something merely claimed by the exchange).\n confirmed?: boolean;\n }\n\n\n export interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n // \"NONE\" or 0: No algorithm (no pos confirmation will be generated)\n // \"TOTP_WITHOUT_PRICE\" or 1: Without amounts (typical OTP device)\n // \"TOTP_WITH_PRICE\" or 2: With amounts (special-purpose OTP device)\n // The \"String\" variants are supported @since protocol **v7**.\n otp_algorithm: Integer | string;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDevicePatchDetails {\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A key encoded with RFC 3548 Base32.\n // IMPORTANT: This is not using the typical\n // Taler base32-crockford encoding.\n // Instead it uses the RFC 3548 encoding to\n // be compatible with the TOTP standard.\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n }\n\n export interface OtpDeviceSummaryResponse {\n // Array of devices that are present in our backend.\n otp_devices: OtpDeviceEntry[];\n }\n export interface OtpDeviceEntry {\n // Device identifier.\n otp_device_id: string;\n\n // Human-readable description for the device.\n device_description: string;\n }\n\n export interface OtpDeviceDetails {\n // Human-readable description for the device.\n device_description: string;\n\n // Algorithm for computing the POS confirmation.\n //\n // Currently, the following numbers are defined:\n // 0: None\n // 1: TOTP without price\n // 2: TOTP with price\n otp_algorithm: Integer;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: Integer;\n\n // Current time for time-based OTP devices.\n // Will match the faketime argument of the\n // query if one was present, otherwise the current\n // time at the backend.\n //\n // Available since protocol **v10**.\n otp_timestamp: Integer;\n\n // Current OTP confirmation string of the device.\n // Matches exactly the string that would be returned\n // as part of a payment confirmation for the given\n // amount and time (so may contain multiple OTP codes).\n //\n // If the otp_algorithm is time-based, the code is\n // returned for the current time, or for the faketime\n // if a TIMESTAMP query argument was provided by the client.\n //\n // When using OTP with counters, the counter is **NOT**\n // increased merely because this endpoint created\n // an OTP code (this is a GET request, after all!).\n //\n // If the otp_algorithm requires an amount, the\n // amount argument must be specified in the\n // query, otherwise the otp_code is not\n // generated.\n //\n // This field is *optional* in the response, as it is\n // only provided if we could compute it based on the\n // otp_algorithm and matching client query arguments.\n //\n // Available since protocol **v10**.\n otp_code?: string;\n }\n export interface TemplateAddDetails {\n // Template ID to use.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface TemplateContractDetails {\n // Human-readable summary for the template.\n summary?: string;\n\n // Required currency for payments to the template.\n // The user may specify any amount, but it must be\n // in this currency.\n // This parameter is optional and should not be present\n // if \"amount\" is given.\n currency?: string;\n\n // The price is imposed by the merchant and cannot be changed by the customer.\n // This parameter is optional.\n amount?: AmountString;\n\n // Minimum age buyer must have (in years). Default is 0.\n minimum_age: Integer;\n\n // The time the customer need to pay before his order will be deleted.\n // It is deleted if the customer did not pay and if the duration is over.\n pay_duration: RelativeTime;\n }\n\n export interface TemplateContractDetailsDefaults {\n summary?: string;\n\n currency?: string;\n\n amount?: AmountString;\n\n minimum_age?: Integer;\n\n pay_duration?: RelativeTime;\n }\n export interface TemplatePatchDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateSummaryResponse {\n // List of templates that are present in our backend.\n templates: TemplateEntry[];\n }\n\n export interface TemplateEntry {\n // Template identifier, as found in the template.\n template_id: string;\n\n // Human-readable description for the template.\n template_description: string;\n }\n\n export interface WalletTemplateDetails {\n // Hard-coded information about the contrac terms\n // for this template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n\n export interface TemplateDetails {\n // Human-readable description for the template.\n template_description: string;\n\n // OTP device ID.\n // This parameter is optional.\n otp_id?: string;\n\n // Additional information in a separate template.\n template_contract: TemplateContractDetails;\n\n // Key-value pairs matching a subset of the\n // fields from template_contract that are\n // user-editable defaults for this template.\n // Since protocol **v13**.\n editable_defaults?: TemplateContractDetailsDefaults;\n\n // Required currency for payments. Useful if no\n // amount is specified in the template_contract\n // but the user should be required to pay in a\n // particular currency anyway. Merchant backends\n // may reject requests if the template_contract\n // or editable_defaults do\n // specify an amount in a different currency.\n // This parameter is optional.\n // Since protocol **v13**.\n required_currency?: string;\n }\n export interface UsingTemplateDetails {\n // Summary of the template\n summary?: string;\n\n // The amount entered by the customer.\n amount?: AmountString;\n }\n\n export interface WebhookAddDetails {\n // Webhook ID to use.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookPatchDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface WebhookSummaryResponse {\n // Return webhooks that are present in our backend.\n webhooks: WebhookEntry[];\n }\n\n export interface WebhookEntry {\n // Webhook identifier, as found in the webhook.\n webhook_id: string;\n\n // The event of the webhook: why the webhook is used.\n event_type: string;\n }\n\n export interface WebhookDetails {\n // The event of the webhook: why the webhook is used.\n event_type: string;\n\n // URL of the webhook where the customer will be redirected.\n url: string;\n\n // Method used by the webhook\n http_method: string;\n\n // Header template of the webhook\n header_template?: string;\n\n // Body template by the webhook\n body_template?: string;\n }\n\n export interface TokenFamilyCreateRequest {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n // If not specified, merchant backend will use the current time.\n valid_after?: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export enum TokenFamilyKind {\n Discount = \"discount\",\n Subscription = \"subscription\",\n }\n\n export interface TokenFamilyUpdateRequest {\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n }\n\n export interface TokenFamiliesList {\n // All configured token families of this instance.\n token_families: TokenFamilySummary[];\n }\n\n export interface TokenFamilySummary {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n }\n\n export interface TokenFamilyDetails {\n // Identifier for the token family consisting of unreserved characters\n // according to RFC 3986.\n slug: string;\n\n // Human-readable name for the token family.\n name: string;\n\n // Human-readable description for the token family.\n description: string;\n\n // Optional map from IETF BCP 47 language tags to localized descriptions.\n description_i18n?: { [lang_tag: string]: string };\n\n // Start time of the token family's validity period.\n valid_after: Timestamp;\n\n // End time of the token family's validity period.\n valid_before: Timestamp;\n\n // Validity duration of an issued token.\n duration: RelativeTime;\n\n // Kind of the token family.\n kind: TokenFamilyKind;\n\n // How many tokens have been issued for this family.\n issued: Integer;\n\n // How many tokens have been redeemed for this family.\n redeemed: Integer;\n }\n export interface ContractTerms {\n // Human-readable description of the whole purchase.\n summary: string;\n\n // Map from IETF BCP 47 language tags to localized summaries.\n summary_i18n?: { [lang_tag: string]: string };\n\n // Unique, free-form identifier for the proposal.\n // Must be unique within a merchant instance.\n // For merchants that do not store proposals in their DB\n // before the customer paid for them, the order_id can be used\n // by the frontend to restore a proposal from the information\n // encoded in it (such as a short product identifier and timestamp).\n order_id: string;\n\n // Total price for the transaction.\n // The exchange will subtract deposit fees from that amount\n // before transferring it to the merchant.\n amount: AmountString;\n\n // URL where the same contract could be ordered again (if\n // available). Returned also at the public order endpoint\n // for people other than the actual buyer (hence public,\n // in case order IDs are guessable).\n public_reorder_url?: string;\n\n // URL that will show that the order was successful after\n // it has been paid for. Optional. When POSTing to the\n // merchant, the placeholder \"${ORDER_ID}\" will be\n // replaced with the actual order ID (useful if the\n // order ID is generated server-side and needs to be\n // in the URL).\n // Note that this placeholder can only be used once.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_url?: string;\n\n // Message shown to the customer after paying for the order.\n // Either fulfillment_url or fulfillment_message must be specified.\n fulfillment_message?: string;\n\n // Map from IETF BCP 47 language tags to localized fulfillment\n // messages.\n fulfillment_message_i18n?: { [lang_tag: string]: string };\n\n // Maximum total deposit fee accepted by the merchant for this contract.\n // Overrides defaults of the merchant instance.\n max_fee: AmountString;\n\n // List of products that are part of the purchase (see Product).\n products: Product[];\n\n // Time when this contract was generated.\n timestamp: Timestamp;\n\n // After this deadline has passed, no refunds will be accepted.\n refund_deadline: Timestamp;\n\n // After this deadline, the merchant won't accept payments for the contract.\n pay_deadline: Timestamp;\n\n // Transfer deadline for the exchange. Must be in the\n // deposit permissions of coins used to pay for this order.\n wire_transfer_deadline: Timestamp;\n\n // Merchant's public key used to sign this proposal; this information\n // is typically added by the backend. Note that this can be an ephemeral key.\n merchant_pub: EddsaPublicKey;\n\n // Base URL of the (public!) merchant backend API.\n // Must be an absolute URL that ends with a slash.\n merchant_base_url: string;\n\n // More info about the merchant, see below.\n merchant: Merchant;\n\n // The hash of the merchant instance's wire details.\n h_wire: HashCode;\n\n // Wire transfer method identifier for the wire method associated with h_wire.\n // The wallet may only select exchanges via a matching auditor if the\n // exchange also supports this wire method.\n // The wire transfer fees must be added based on this wire transfer method.\n wire_method: string;\n\n // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.\n exchanges: Exchange[];\n\n // Delivery location for (all!) products.\n delivery_location?: Location;\n\n // Time indicating when the order should be delivered.\n // May be overwritten by individual products.\n delivery_date?: Timestamp;\n\n // Nonce generated by the wallet and echoed by the merchant\n // in this field when the proposal is generated.\n nonce: string;\n\n // Specifies for how long the wallet should try to get an\n // automatic refund for the purchase. If this field is\n // present, the wallet should wait for a few seconds after\n // the purchase and then automatically attempt to obtain\n // a refund. The wallet should probe until \"delay\"\n // after the payment was successful (i.e. via long polling\n // or via explicit requests with exponential back-off).\n //\n // In particular, if the wallet is offline\n // at that time, it MUST repeat the request until it gets\n // one response from the merchant after the delay has expired.\n // If the refund is granted, the wallet MUST automatically\n // recover the payment. This is used in case a merchant\n // knows that it might be unable to satisfy the contract and\n // desires for the wallet to attempt to get the refund without any\n // customer interaction. Note that it is NOT an error if the\n // merchant does not grant a refund.\n auto_refund?: RelativeTime;\n\n // Extra data that is only interpreted by the merchant frontend.\n // Useful when the merchant needs to store extra information on a\n // contract without storing it separately in their database.\n extra?: any;\n\n // Minimum age the buyer must have (in years). Default is 0.\n // This value is at least as large as the maximum over all\n // minimum age requirements of the products in this contract.\n // It might also be set independent of any product, due to\n // legal requirements.\n minimum_age?: Integer;\n }\n\n export 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?: Integer;\n\n // 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?: ImageDataUrl;\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?: Timestamp;\n }\n\n export interface Tax {\n // The name of the tax.\n name: string;\n\n // Amount paid in tax.\n tax: AmountString;\n }\n export interface Merchant {\n // The merchant's legal name of business.\n name: string;\n\n // Label for a location with the business address of the merchant.\n email?: string;\n\n // Label for a location with the business address of the merchant.\n website?: string;\n\n // An optional base64-encoded product image.\n logo?: ImageDataUrl;\n\n // Label for a location with the business address of the merchant.\n address?: Location;\n\n // Label for a location that denotes the jurisdiction for disputes.\n // Some of the typical fields for a location (such as a street address) may be absent.\n jurisdiction?: Location;\n }\n // Delivery location, loosely modeled as a subset of\n // ISO20022's PostalAddress25.\n export 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 interface Auditor {\n // Official name.\n name: string;\n\n // Auditor's public key.\n auditor_pub: EddsaPublicKey;\n\n // Base URL of the auditor.\n url: string;\n }\n export interface Exchange {\n // The exchange's base URL.\n url: string;\n\n // How much would the merchant like to use this exchange.\n // The wallet should use a suitable exchange with high\n // priority. The following priority values are used, but\n // it should be noted that they are NOT in any way normative.\n //\n // 0: likely it will not work (recently seen with account\n // restriction that would be bad for this merchant)\n // 512: merchant does not know, might be down (merchant\n // did not yet get /wire response).\n // 1024: good choice (recently confirmed working)\n priority: Integer;\n\n // Master public key of the exchange.\n master_pub: EddsaPublicKey;\n }\n}\n\nexport namespace ChallengerApi {\n export interface ChallengerTermsOfServiceResponse {\n // Name of the service\n name: \"challenger\";\n\n // libtool-style representation of the Challenger protocol version, see\n // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning\n // The format is \"current:revision:age\".\n version: string;\n\n // URN of the implementation (needed to interpret 'revision' in version).\n // @since v0, may become mandatory in the future.\n implementation?: string;\n }\n\n export interface ChallengeSetupResponse {\n // Nonce to use when constructing /authorize endpoint.\n nonce: string;\n }\n\n export interface Restriction {\n regex?: string;\n hint?: string;\n hint_i18n?: InternationalizedString;\n }\n\n export interface ChallengeStatus {\n // Object; map of keys (names of the fields of the address\n // to be entered by the user) to objects with a \"regex\" (string)\n // containing an extended Posix regular expression for allowed\n // address field values, and a \"hint\"/\"hint_i18n\" giving a\n // human-readable explanation to display if the value entered\n // by the user does not match the regex. Keys that are not mapped\n // to such an object have no restriction on the value provided by\n // the user. See \"ADDRESS_RESTRICTIONS\" in the challenger configuration.\n restrictions: Record<string, Restriction> | undefined;\n\n // indicates if the given address cannot be changed anymore, the\n // form should be read-only if set to true.\n fix_address: boolean;\n\n // form values from the previous submission if available, details depend\n // on the ADDRESS_TYPE, should be used to pre-populate the form\n last_address: Record<string, string> | undefined;\n\n // number of times the address can still be changed, may or may not be\n // shown to the user\n changes_left: Integer;\n }\n\n export interface ChallengeCreateResponse {\n // how many more attempts are allowed, might be shown to the user,\n // highlighting might be appropriate for low values such as 1 or 2 (the\n // form will never be used if the value is zero)\n attempts_left: Integer;\n\n // the address that is being validated, might be shown or not\n address: Object;\n\n // true if we just retransmitted the challenge, false if we sent a\n // challenge recently and thus refused to transmit it again this time;\n // might make a useful hint to the user\n transmitted: boolean;\n\n // timestamp explaining when we would re-transmit the challenge the next\n // time (at the earliest) if requested by the user\n next_tx_time: string;\n }\n\n export interface InvalidPinResponse {\n // numeric Taler error code, should be shown to indicate the error\n // compactly for reporting to developers\n ec?: number;\n\n // human-readable Taler error code, should be shown for the user to\n // understand the error\n hint: string;\n\n // how many times is the user still allowed to change the address;\n // if 0, the user should not be shown a link to jump to the\n // address entry form\n addresses_left: Integer;\n\n // how many times might the PIN still be retransmitted\n pin_transmissions_left: Integer;\n\n // how many times might the user still try entering the PIN code\n auth_attempts_left: Integer;\n\n // if true, the PIN was not even evaluated as the user previously\n // exhausted the number of attempts\n exhausted: boolean;\n\n // if true, the PIN was not even evaluated as no challenge was ever\n // issued (the user must have skipped the step of providing their\n // address first!)\n no_challenge: boolean;\n }\n\n export interface ChallengerAuthResponse {\n // Token used to authenticate access in /info.\n access_token: string;\n\n // Type of the access token.\n token_type: \"Bearer\";\n\n // Amount of time that an access token is valid (in seconds).\n expires_in: Integer;\n }\n\n export interface ChallengerInfoResponse {\n // Unique ID of the record within Challenger\n // (identifies the rowid of the token).\n id: Integer;\n\n // Address that was validated.\n // Key-value pairs, details depend on the\n // address_type.\n address: Object;\n\n // Type of the address.\n address_type: string;\n\n // How long do we consider the address to be\n // valid for this user.\n expires: Timestamp;\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 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\n/**\n * Imports.\n */\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http.js\";\n\n/**\n * Implementation of the HTTP request library interface for node.\n */\nexport class HttpLibImpl implements HttpRequestLibrary {\n fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n throw new Error(\"Method not implemented.\");\n }\n}\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 * Helpers for doing XMLHttpRequest-s that are based on ES6 promises.\n * Allows for easy mocking for test cases.\n *\n * The API is inspired by the HTML5 fetch API.\n */\n\n/**\n * Imports\n */\n\nimport * as impl from \"#http-impl\";\nimport * as common from \"./http-common.js\";\n\nexport * from \"./http-common.js\";\n\nexport function createPlatformHttpLib(\n args?: common.HttpLibArgs,\n): common.HttpRequestLibrary {\n return new impl.HttpLibImpl(args);\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) 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 { codecForAny } from \"./codec.js\";\nimport {\n TalerMerchantApi,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n} from \"./http-client/types.js\";\nimport { HttpStatusCode } from \"./http-status-codes.js\";\nimport {\n createPlatformHttpLib,\n expectSuccessResponseOrThrow,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"./http.js\";\nimport { FacadeCredentials } from \"./libeufin-api-types.js\";\nimport { LibtoolVersion } from \"./libtool-version.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n MerchantInstancesResponse,\n MerchantPostOrderRequest,\n MerchantPostOrderResponse,\n MerchantTemplateAddDetails,\n codecForMerchantPostOrderResponse,\n} from \"./merchant-api-types.js\";\nimport {\n FailCasesByMethod,\n OperationFail,\n OperationOk,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"./operation.js\";\nimport { AmountString } from \"./taler-types.js\";\nimport { TalerProtocolDuration } from \"./time.js\";\n\nconst logger = new Logger(\"MerchantApiClient.ts\");\n\n// FIXME: Explain!\nexport type TalerMerchantResultByMethod<prop extends keyof MerchantApiClient> =\n ResultByMethod<MerchantApiClient, prop>;\n\n// FIXME: Explain!\nexport type TalerMerchantErrorsByMethod<prop extends keyof MerchantApiClient> =\n FailCasesByMethod<MerchantApiClient, prop>;\n\nexport interface MerchantAuthConfiguration {\n method: \"external\" | \"token\";\n token?: string;\n}\n\n// FIXME: Why do we need this? Describe / fix!\nexport interface PartialMerchantInstanceConfig {\n auth?: MerchantAuthConfiguration;\n id: string;\n name: string;\n paytoUris: string[];\n address?: unknown;\n jurisdiction?: unknown;\n defaultWireTransferDelay?: TalerProtocolDuration;\n defaultPayDelay?: TalerProtocolDuration;\n}\n\nexport interface CreateMerchantTippingReserveRequest {\n // Amount that the merchant promises to put into the reserve\n initial_balance: AmountString;\n\n // Exchange the merchant intends to use for tipping\n exchange_url: string;\n\n // Desired wire method, for example \"iban\" or \"x-taler-bank\"\n wire_method: string;\n}\n\nexport interface DeleteTippingReserveArgs {\n reservePub: string;\n purge?: boolean;\n}\n\ninterface MerchantBankAccount {\n // The payto:// URI where the wallet will send coins.\n payto_uri: string;\n\n // Optional base URL for a facade where the\n // merchant backend can see incoming wire\n // transfers to reconcile its accounting\n // with that of the exchange. Used by\n // taler-merchant-wirewatch.\n credit_facade_url?: string;\n\n // Credentials for accessing the credit facade.\n credit_facade_credentials?: FacadeCredentials;\n}\n\nexport interface MerchantInstanceConfig {\n auth: MerchantAuthConfiguration;\n id: string;\n name: string;\n address: unknown;\n jurisdiction: unknown;\n use_stefan: boolean;\n default_wire_transfer_delay: TalerProtocolDuration;\n default_pay_delay: TalerProtocolDuration;\n}\n\nexport interface PrivateOrderStatusQuery {\n instance?: string;\n orderId: string;\n sessionId?: string;\n}\n\nexport interface OtpDeviceAddDetails {\n // Device ID to use.\n otp_device_id: string;\n\n // Human-readable description for the device.\n otp_device_description: string;\n\n // A base64-encoded key\n otp_key: string;\n\n // Algorithm for computing the POS confirmation.\n otp_algorithm: number;\n\n // Counter for counter-based OTP devices.\n otp_ctr?: number;\n}\n\n/**\n * Client for the GNU Taler merchant backend.\n */\nexport class MerchantApiClient {\n /**\n * Base URL for the particular instance that this merchant API client\n * is for.\n */\n private baseUrl: string;\n\n readonly auth: MerchantAuthConfiguration;\n\n public readonly PROTOCOL_VERSION = \"6:0:2\";\n\n constructor(\n baseUrl: string,\n options: { auth?: MerchantAuthConfiguration } = {},\n ) {\n this.baseUrl = baseUrl;\n\n this.auth = options?.auth ?? {\n method: \"external\",\n };\n }\n\n httpClient = createPlatformHttpLib();\n\n async changeAuth(auth: MerchantAuthConfiguration): Promise<void> {\n const url = new URL(\"private/auth\", this.baseUrl);\n const res = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: auth,\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(res);\n }\n\n async getPrivateInstanceInfo(): Promise<any> {\n const url = new URL(\"private\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n return await resp.json();\n }\n\n async deleteInstance(instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n headers: this.makeAuthHeader(),\n });\n await expectSuccessResponseOrThrow(resp);\n }\n\n async createInstance(req: MerchantInstanceConfig): Promise<void> {\n const url = new URL(\"management/instances\", this.baseUrl);\n await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n }\n\n async getInstances(): Promise<MerchantInstancesResponse> {\n const url = new URL(\"management/instances\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getInstanceFullDetails(instanceId: string): Promise<any> {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n try {\n const resp = await this.httpClient.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return resp.json();\n } catch (e) {\n throw e;\n }\n }\n\n async createOrder(\n req: MerchantPostOrderRequest,\n ): Promise<MerchantPostOrderResponse> {\n let url = new URL(\"private/orders\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantPostOrderResponse(),\n );\n }\n\n async deleteOrder(req: { orderId: string; force?: boolean }): Promise<void> {\n let url = new URL(`private/orders/${req.orderId}`, this.baseUrl);\n if (req.force) {\n url.searchParams.set(\"force\", \"yes\");\n }\n const resp = await this.httpClient.fetch(url.href, {\n method: \"DELETE\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n if (resp.status !== 204) {\n throw Error(`failed to delete order (status ${resp.status})`);\n }\n }\n\n async queryPrivateOrderStatus(\n query: PrivateOrderStatusQuery,\n ): Promise<TalerMerchantApi.MerchantOrderStatusResponse> {\n const reqUrl = new URL(`private/orders/${query.orderId}`, this.baseUrl);\n if (query.sessionId) {\n reqUrl.searchParams.set(\"session_id\", query.sessionId);\n }\n const resp = await this.httpClient.fetch(reqUrl.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n }\n\n async giveRefund(r: {\n instance: string;\n orderId: string;\n amount: string;\n justification: string;\n }): Promise<{ talerRefundUri: string }> {\n const reqUrl = new URL(`private/orders/${r.orderId}/refund`, this.baseUrl);\n const resp = await this.httpClient.fetch(reqUrl.href, {\n method: \"POST\",\n body: {\n refund: r.amount,\n reason: r.justification,\n },\n });\n const respBody = await resp.json();\n return {\n talerRefundUri: respBody.taler_refund_uri,\n };\n }\n\n async createTemplate(req: MerchantTemplateAddDetails) {\n let url = new URL(\"private/templates\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async getTemplate(templateId: string) {\n let url = new URL(`private/templates/${templateId}`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAny());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig(): Promise<OperationOk<TalerMerchantApi.VersionResponse>> {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async createOtpDevice(\n req: OtpDeviceAddDetails,\n ): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>> {\n let url = new URL(\"private/otp-devices\", this.baseUrl);\n const resp = await this.httpClient.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n private makeAuthHeader(): Record<string, string> {\n switch (this.auth.method) {\n case \"external\":\n return {};\n case \"token\":\n return {\n Authorization: `Bearer ${this.auth.token}`,\n };\n }\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 TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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", "/*\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 { codecForAmountString } from \"./amounts.js\";\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\", codecForAmountString())\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\", codecForAmountString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForAmountString())\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\", codecForAmountString())\n .property(\"closing_fee\", codecForAmountString())\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\", codecForAmountString())\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 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, Duration } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\n/**\n * Logger.\n */\nconst logger = new Logger(\"OperationThrottler.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 task.\n */\nclass TaskState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n 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 TaskThrottler {\n private perTaskInfo: { [taskId: string]: TaskState } = {};\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): TaskState {\n const s = this.perTaskInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perTaskInfo[origin] = new TaskState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(taskId: string): boolean {\n for (let [k, v] of Object.entries(this.perTaskInfo)) {\n // Remove throttled tasks that haven't seen an update in more than one hour.\n if (\n Duration.cmp(\n AbsoluteTime.difference(v.lastUpdate, AbsoluteTime.now()),\n Duration.fromSpec({ hours: 1 }),\n ) > 1\n ) {\n delete this.perTaskInfo[k];\n }\n }\n return this.getState(taskId).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(taskId: string): Record<string, unknown> {\n const state = this.getState(taskId);\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", "/*\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 * Client for the Taler (demo-)bank.\n */\n\n/**\n * Imports.\n */\nimport {\n AmountString,\n base64FromArrayBuffer,\n buildCodecForObject,\n Codec,\n codecForAny,\n codecForString,\n encodeCrock,\n getRandomBytes,\n HttpStatusCode,\n j2s,\n Logger,\n opEmptySuccess,\n opKnownHttpFailure,\n opUnknownFailure,\n stringToBytes,\n TalerError,\n TalerErrorCode,\n} from \"@gnu-taler/taler-util\";\nimport {\n checkSuccessResponseOrThrow,\n createPlatformHttpLib,\n HttpRequestLibrary,\n readSuccessResponseJsonOrThrow,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"bank-api-client.ts\");\n\nexport enum CreditDebitIndicator {\n Credit = \"credit\",\n Debit = \"debit\",\n}\n\nexport interface BankAccountBalanceResponse {\n balance: {\n amount: AmountString;\n credit_debit_indicator: CreditDebitIndicator;\n };\n}\n\nexport interface BankUser {\n username: string;\n password: string;\n accountPaytoUri: string;\n}\n\nexport interface WithdrawalOperationInfo {\n withdrawal_id: string;\n taler_withdraw_uri: string;\n}\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nfunction makeBasicAuthHeader(username: string, password: string): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\nconst codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>\n buildCodecForObject<WithdrawalOperationInfo>()\n .property(\"withdrawal_id\", codecForString())\n .property(\"taler_withdraw_uri\", codecForString())\n .build(\"WithdrawalOperationInfo\");\n\nexport interface BankAccessApiClientArgs {\n auth?: { username: string; password: string };\n httpClient?: HttpRequestLibrary;\n}\n\nexport interface BankAccessApiCreateTransactionRequest {\n amount: AmountString;\n paytoUri: string;\n}\n\nexport class WireGatewayApiClientArgs {\n auth?: {\n username: string;\n password: string;\n };\n httpClient?: HttpRequestLibrary;\n}\n\n/**\n * This API look like it belongs to harness\n * but it will be nice to have in utils to be used by others\n */\nexport class WireGatewayApiClient {\n httpLib;\n\n constructor(\n private baseUrl: string,\n private args: WireGatewayApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n private makeAuthHeader(): Record<string, string> {\n const auth = this.args.auth;\n if (auth) {\n return {\n Authorization: makeBasicAuthHeader(auth.username, auth.password),\n };\n }\n return {};\n }\n\n async adminAddIncoming(params: {\n amount: string;\n reservePub: string;\n debitAccountPayto: string;\n }): Promise<void> {\n let url = new URL(`admin/add-incoming`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount: params.amount,\n reserve_pub: params.reservePub,\n debit_account: params.debitAccountPayto,\n },\n headers: this.makeAuthHeader(),\n });\n logger.info(`add-incoming response status: ${resp.status}`);\n await checkSuccessResponseOrThrow(resp);\n }\n}\n\nexport interface ChallengeContactData {\n // E-Mail address\n email?: string;\n\n // Phone number.\n phone?: string;\n}\n\nexport interface AccountBalance {\n amount: AmountString;\n credit_debit_indicator: \"credit\" | \"debit\";\n}\n\nexport interface RegisterAccountRequest {\n // Username\n username: string;\n\n // Password.\n password: string;\n\n // Legal name of the account owner\n name: string;\n\n // Defaults to false.\n is_public?: boolean;\n\n // Is this a taler exchange account?\n // If true:\n // - incoming transactions to the account that do not\n // have a valid reserve public key are automatically\n // - the account provides the taler-wire-gateway-api endpoints\n // Defaults to false.\n is_taler_exchange?: boolean;\n\n // Addresses where to send the TAN for transactions.\n // Currently only used for cashouts.\n // If missing, cashouts will fail.\n // In the future, might be used for other transactions\n // as well.\n challenge_contact_data?: ChallengeContactData;\n\n // 'payto' address pointing a bank account\n // external to the libeufin-bank.\n // Payments will be sent to this bank account\n // when the user wants to convert the local currency\n // back to fiat currency outside libeufin-bank.\n cashout_payto_uri?: string;\n\n // Internal payto URI of this bank account.\n // Used mostly for testing.\n payto_uri?: string;\n}\n\nexport interface AccountData {\n // Legal name of the account owner.\n name: string;\n\n // Available balance on the account.\n balance: AccountBalance;\n\n // payto://-URI of the account.\n payto_uri: string;\n\n // Number indicating the max debit allowed for the requesting user.\n debit_threshold: AmountString;\n\n contact_data?: ChallengeContactData;\n\n // 'payto' address pointing the bank account\n // where to send cashouts. This field is optional\n // because not all the accounts are required to participate\n // in the merchants' circuit. One example is the exchange:\n // that never cashouts. Registering these accounts can\n // be done via the access API.\n cashout_payto_uri?: string;\n}\n\nexport interface ConfirmWithdrawalArgs {\n withdrawalOperationId: string;\n}\n\n/**\n * Client for the Taler corebank API.\n */\nexport class TalerCorebankApiClient {\n httpLib: HttpRequestLibrary;\n\n constructor(\n private baseUrl: string,\n private args: BankAccessApiClientArgs = {},\n ) {\n this.httpLib = args.httpClient ?? createPlatformHttpLib();\n }\n\n setAuth(auth: { username: string; password: string }) {\n this.args.auth = auth;\n }\n\n private makeAuthHeader(): Record<string, string> {\n if (!this.args.auth) {\n return {};\n }\n const authHeaderValue = makeBasicAuthHeader(\n this.args.auth.username,\n this.args.auth.password,\n );\n return {\n Authorization: authHeaderValue,\n };\n }\n\n async getAccountBalance(\n username: string,\n ): Promise<BankAccountBalanceResponse> {\n const url = new URL(`accounts/${username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async getTransactions(username: string): Promise<void> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"GET\",\n headers: {\n ...this.makeAuthHeader(),\n },\n });\n\n const res = await readSuccessResponseJsonOrThrow(resp, codecForAny());\n logger.info(`result: ${j2s(res)}`);\n }\n\n async createTransaction(\n username: string,\n req: BankAccessApiCreateTransactionRequest,\n ): Promise<any> {\n const reqUrl = new URL(`accounts/${username}/transactions`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(reqUrl.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n return await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n\n async registerAccountExtended(req: RegisterAccountRequest): Promise<void> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: req,\n headers: this.makeAuthHeader(),\n });\n\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n }\n\n /**\n * Register a new account and return information about it.\n *\n * This is a helper, as it does both the registration and the\n * account info query.\n */\n async registerAccount(username: string, password: string): Promise<BankUser> {\n const url = new URL(\"accounts\", this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n username,\n password,\n name: username,\n },\n headers: this.makeAuthHeader(),\n });\n if (\n resp.status !== 200 &&\n resp.status !== 201 &&\n resp.status !== 202 &&\n resp.status !== 204\n ) {\n logger.error(`unexpected status ${resp.status} from POST ${url.href}`);\n logger.error(`${j2s(await resp.json())}`);\n throw TalerError.fromDetail(\n TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR,\n {\n httpStatusCode: resp.status,\n },\n );\n }\n // FIXME: Corebank should directly return this info!\n const infoUrl = new URL(`accounts/${username}`, this.baseUrl);\n const infoResp = await this.httpLib.fetch(infoUrl.href, {\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n });\n // FIXME: Validate!\n const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(\n infoResp,\n codecForAny(),\n );\n return {\n password,\n username,\n accountPaytoUri: acctInfo.payto_uri,\n };\n }\n\n async createRandomBankUser(): Promise<BankUser> {\n const username = \"user-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n const password = \"pw-\" + encodeCrock(getRandomBytes(10)).toLowerCase();\n return await this.registerAccount(username, password);\n }\n\n async createWithdrawalOperation(\n user: string,\n amount: string,\n ): Promise<WithdrawalOperationInfo> {\n const url = new URL(`accounts/${user}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {\n amount,\n },\n headers: this.makeAuthHeader(),\n });\n return readSuccessResponseJsonOrThrow(\n resp,\n codecForWithdrawalOperationInfo(),\n );\n }\n\n async confirmWithdrawalOperation(\n username: string,\n wopi: ConfirmWithdrawalArgs,\n ) {\n const url = new URL(\n `accounts/${username}/withdrawals/${wopi.withdrawalOperationId}/confirm`,\n this.baseUrl,\n );\n logger.info(`confirming withdrawal operation via ${url.href}`);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async abortWithdrawalOperation(wopi: WithdrawalOperationInfo): Promise<void> {\n const url = new URL(\n `withdrawals/${wopi.withdrawal_id}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: {},\n headers: this.makeAuthHeader(),\n });\n await readSuccessResponseJsonOrThrow(resp, codecForAny());\n }\n}\n", "// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then\n// use window.btoa' step. According to my tests, this appears to be a faster approach:\n// http://jsperf.com/encoding-xhr-image-data/5\n\n/*\nMIT LICENSE\nCopyright 2011 Jon Leighton\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function base64FromArrayBuffer(arrayBuffer: ArrayBuffer): string {\n var base64 = \"\";\n var encodings =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n var bytes = new Uint8Array(arrayBuffer);\n var byteLength = bytes.byteLength;\n var byteRemainder = byteLength % 3;\n var mainLength = byteLength - byteRemainder;\n\n var a, b, c, d;\n var chunk;\n\n // Main loop deals with bytes in chunks of 3\n for (var i = 0; i < mainLength; i = i + 3) {\n // Combine the three bytes into a single integer\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n\n // Use bitmasks to extract 6-bit segments from the triplet\n a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12\n c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6\n d = chunk & 63; // 63 = 2^6 - 1\n\n // Convert the raw binary segments to the appropriate ASCII encoding\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n }\n\n // Deal with the remaining bytes and padding\n if (byteRemainder == 1) {\n chunk = bytes[mainLength];\n\n a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n\n // Set the 4 least significant bits to zero\n b = (chunk & 3) << 4; // 3 = 2^2 - 1\n\n base64 += encodings[a] + encodings[b] + \"==\";\n } else if (byteRemainder == 2) {\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n\n a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4\n\n // Set the 2 least significant bits to zero\n c = (chunk & 15) << 2; // 15 = 2^4 - 1\n\n base64 += encodings[a] + encodings[b] + encodings[c] + \"=\";\n }\n\n return base64;\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\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) 2019-2020 Taler Systems SA\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Classes and helpers for error handling specific to wallet operations.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport {\n AbsoluteTime,\n CancellationToken,\n PaymentInsufficientBalanceDetails,\n TalerErrorCode,\n TalerErrorDetail,\n TransactionType,\n} from \"@gnu-taler/taler-util\";\n\ntype empty = Record<string, never>;\n\nexport interface DetailsMap {\n [TalerErrorCode.WALLET_PENDING_OPERATION_FAILED]: {\n innerError: TalerErrorDetail;\n transactionId?: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT]: {\n exchangeBaseUrl: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE]: {\n exchangeProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK]: empty;\n [TalerErrorCode.WALLET_REWARD_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_ORDER_ALREADY_CLAIMED]: {\n orderId: string;\n claimUrl: string;\n };\n [TalerErrorCode.WALLET_ORDER_ALREADY_PAID]: {\n orderId: string;\n fulfillmentUrl: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_MALFORMED]: empty;\n [TalerErrorCode.WALLET_CONTRACT_TERMS_SIGNATURE_INVALID]: {\n merchantPub: string;\n orderId: string;\n };\n [TalerErrorCode.WALLET_CONTRACT_TERMS_BASE_URL_MISMATCH]: {\n baseUrlForDownload: string;\n baseUrlFromContractTerms: string;\n };\n [TalerErrorCode.WALLET_INVALID_TALER_PAY_URI]: {\n talerPayUri: string;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n errorResponse?: any;\n };\n [TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION]: {\n stack?: string;\n };\n [TalerErrorCode.WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE]: {\n bankProtocolVersion: string;\n walletProtocolVersion: string;\n };\n [TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN]: {\n operation: string;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED]: {\n requestUrl: string;\n requestMethod: string;\n throttleStats: Record<string, unknown>;\n };\n [TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.GENERIC_TIMEOUT]: {\n requestUrl: string;\n requestMethod: string;\n timeoutMs: number;\n };\n [TalerErrorCode.WALLET_NETWORK_ERROR]: {\n requestUrl: string;\n requestMethod: string;\n };\n [TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE]: {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n validationError?: string;\n /**\n * Content type of the response, usually only specified if not the\n * expected content type.\n */\n contentType?: string;\n };\n [TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR]: {\n operation: string;\n error: string;\n detail: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: empty;\n [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: {\n numErrors: number;\n errorsPerCoin: Record<number, TalerErrorDetail>;\n };\n [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: {\n lastError?: TalerErrorDetail;\n };\n [TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR]: {\n httpStatusCode: number;\n };\n [TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR]: {\n requestError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_ERROR]: {\n innerError: TalerErrorDetail;\n };\n [TalerErrorCode.WALLET_CRYPTO_WORKER_BAD_REQUEST]: {\n detail: string;\n };\n [TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED]: {\n kycUrl: string;\n };\n [TalerErrorCode.WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE]: {\n insufficientBalanceDetails: PaymentInsufficientBalanceDetails;\n };\n [TalerErrorCode.WALLET_REFRESH_GROUP_INCOMPLETE]: {\n numErrors: number;\n /**\n * Errors, can be truncated.\n */\n errors: TalerErrorDetail[];\n };\n [TalerErrorCode.WALLET_EXCHANGE_BASE_URL_MISMATCH]: {\n urlWallet: string;\n urlExchange: string;\n };\n [TalerErrorCode.WALLET_EXCHANGE_UNAVAILABLE]: {\n exchangeBaseUrl: string;\n innerError: TalerErrorDetail | undefined;\n };\n [TalerErrorCode.WALLET_DB_UNAVAILABLE]: {\n innerError: TalerErrorDetail | undefined;\n };\n}\n\ntype ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : empty;\n\nexport function makeErrorDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n): TalerErrorDetail {\n if (!hint && !(detail as any).hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return { code, when, hint, ...detail };\n}\n\nexport function makePendingOperationFailedError(\n innerError: TalerErrorDetail,\n tag: TransactionType,\n uid: string,\n): TalerError {\n return TalerError.fromDetail(TalerErrorCode.WALLET_PENDING_OPERATION_FAILED, {\n innerError,\n transactionId: `${tag}:${uid}`,\n });\n}\n\nexport function summarizeTalerErrorDetail(ed: TalerErrorDetail): string {\n const errName = TalerErrorCode[ed.code] ?? \"<unknown>\";\n return `Error (${ed.code}/${errName})`;\n}\n\nfunction getDefaultHint(code: number): string {\n const errName = TalerErrorCode[code];\n if (errName) {\n return `Error (${errName})`;\n } else {\n return `Error (<unknown>)`;\n }\n}\n\nexport class TalerProtocolViolationError extends Error {\n constructor(hint?: string) {\n let msg: string;\n if (hint) {\n msg = `Taler protocol violation error (${hint})`;\n } else {\n msg = `Taler protocol violation error`;\n }\n super(msg);\n Object.setPrototypeOf(this, TalerProtocolViolationError.prototype);\n }\n}\n\n// compute a subset of TalerError, just for http request\ntype HttpErrors =\n | TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT\n | TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED\n | TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE\n | TalerErrorCode.WALLET_NETWORK_ERROR\n | TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR;\n\ntype TalerHttpErrorsDetails = {\n [code in HttpErrors]: TalerError<DetailsMap[code]>;\n};\n\nexport type TalerHttpError =\n TalerHttpErrorsDetails[keyof TalerHttpErrorsDetails];\n\nexport class TalerError<T = any> extends Error {\n errorDetail: TalerErrorDetail & T;\n cause: Error | undefined;\n private constructor(d: TalerErrorDetail & T, cause?: Error) {\n super(d.hint ?? `Error (code ${d.code})`);\n this.errorDetail = d;\n this.cause = cause;\n Object.setPrototypeOf(this, TalerError.prototype);\n }\n\n static fromDetail<C extends TalerErrorCode>(\n code: C,\n detail: ErrBody<C>,\n hint?: string,\n cause?: Error,\n ): TalerError {\n if (!hint) {\n hint = getDefaultHint(code);\n }\n const when = AbsoluteTime.now();\n return new TalerError<unknown>({ code, when, hint, ...detail }, cause);\n }\n\n static fromUncheckedDetail(d: TalerErrorDetail, c?: Error): TalerError {\n return new TalerError<unknown>({ ...d }, c);\n }\n\n static fromException(e: any): TalerError {\n const errDetail = getErrorDetailFromException(e);\n return new TalerError(errDetail, e);\n }\n\n hasErrorCode<C extends keyof DetailsMap>(\n code: C,\n ): this is TalerError<DetailsMap[C]> {\n return this.errorDetail.code === code;\n }\n\n toString(): string {\n return `TalerError: ${JSON.stringify(this.errorDetail)}`;\n }\n}\n\nexport function safeStringifyException(e: any): string {\n return JSON.stringify(getErrorDetailFromException(e), undefined, 2);\n}\n\n/**\n * Convert an exception (or anything that was thrown) into\n * a TalerErrorDetail object.\n */\nexport function getErrorDetailFromException(e: any): TalerErrorDetail {\n if (e instanceof TalerError) {\n return e.errorDetail;\n }\n if (e instanceof CancellationToken.CancellationError) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_CORE_REQUEST_CANCELLED,\n {},\n );\n return err;\n }\n if (e instanceof Error) {\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {\n stack: e.stack,\n },\n `unexpected exception (message: ${e.message})`,\n );\n return err;\n }\n // Something was thrown that is not even an exception!\n // Try to stringify it.\n let excString: string;\n try {\n excString = e.toString();\n } catch (e) {\n // Something went horribly wrong.\n excString = \"can't stringify exception\";\n }\n const err = makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION,\n {},\n `unexpected exception (not an exception, ${excString})`,\n );\n return err;\n}\n\nexport function assertUnreachable(x: never): never {\n throw new Error(\"Didn't expect to get here\");\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 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 {\n Codec,\n buildCodecForObject,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport {\n AmountString,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n} from \"./taler-types.js\";\nimport { TalerPreciseTimestamp, TalerProtocolTimestamp } from \"./time.js\";\nimport {\n RefreshReason,\n ScopeInfo,\n TalerErrorDetail,\n TransactionIdStr,\n TransactionStateFilter,\n WithdrawalExchangeAccountDetails,\n codecForScopeInfo,\n} from \"./wallet-types.js\";\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n *\n * it will be removed in next release\n *\n * @deprecated use scopeInfo\n */\n currency?: string;\n\n /**\n * return only transactions in the given scopeInfo\n */\n scopeInfo?: ScopeInfo;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * Sort order of the transaction items.\n * By default, items are sorted ascending by their\n * main timestamp.\n *\n * ascending: ascending by timestamp, but pending transactions first\n * descending: ascending by timestamp, but pending transactions first\n * stable-ascending: ascending by timestamp, with pending transactions amidst other transactions\n * (stable in the sense of: pending transactions don't jump around)\n */\n sort?: \"ascending\" | \"descending\" | \"stable-ascending\";\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n\n filterByState?: TransactionStateFilter;\n}\n\nexport interface TransactionState {\n major: TransactionMajorState;\n minor?: TransactionMinorState;\n}\n\nexport enum TransactionMajorState {\n // No state, only used when reporting transitions into the initial state\n None = \"none\",\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Suspended = \"suspended\",\n Dialog = \"dialog\",\n SuspendedAborting = \"suspended-aborting\",\n Failed = \"failed\",\n Expired = \"expired\",\n // Only used for the notification, never in the transaction history\n Deleted = \"deleted\",\n}\n\nexport enum TransactionMinorState {\n // Placeholder until D37 is fully implemented\n Unknown = \"unknown\",\n Deposit = \"deposit\",\n KycRequired = \"kyc\",\n AmlRequired = \"aml\",\n MergeKycRequired = \"merge-kyc\",\n Track = \"track\",\n SubmitPayment = \"submit-payment\",\n RebindSession = \"rebind-session\",\n Refresh = \"refresh\",\n Pickup = \"pickup\",\n AutoRefund = \"auto-refund\",\n User = \"user\",\n Bank = \"bank\",\n Exchange = \"exchange\",\n ClaimProposal = \"claim-proposal\",\n CheckRefund = \"check-refund\",\n CreatePurse = \"create-purse\",\n DeletePurse = \"delete-purse\",\n RefreshExpired = \"refresh-expired\",\n Ready = \"ready\",\n Merge = \"merge\",\n Repurchase = \"repurchase\",\n BankRegisterReserve = \"bank-register-reserve\",\n BankConfirmTransfer = \"bank-confirm-transfer\",\n WithdrawCoins = \"withdraw-coins\",\n ExchangeWaitReserve = \"exchange-wait-reserve\",\n AbortingBank = \"aborting-bank\",\n Aborting = \"aborting\",\n Refused = \"refused\",\n Withdraw = \"withdraw\",\n MerchantOrderProposed = \"merchant-order-proposed\",\n Proposed = \"proposed\",\n RefundAvailable = \"refund-available\",\n AcceptRefund = \"accept-refund\",\n PaidByOther = \"paid-by-other\",\n CompletedByOtherWallet = \"completed-by-other-wallet\",\n}\n\nexport enum TransactionAction {\n Delete = \"delete\",\n Suspend = \"suspend\",\n Resume = \"resume\",\n Abort = \"abort\",\n Fail = \"fail\",\n Retry = \"retry\",\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: TalerPreciseTimestamp;\n\n /**\n * Transaction state, as per DD37.\n */\n txState: TransactionState;\n\n /**\n * Possible transitions based on the current state.\n */\n txActions: TransactionAction[];\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 /**\n * If the transaction minor state is in KycRequired this field is going to\n * have the location where the user need to go to complete KYC information.\n */\n kycUrl?: string;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit\n | TransactionInternalWithdrawal\n | TransactionRecoup\n | TransactionDenomLoss;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n InternalWithdrawal = \"internal-withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n Recoup = \"recoup\",\n DenomLoss = \"denom-loss\",\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 * @deprecated in favor of exchangeCreditAccounts\n */\n exchangePaytoUris: string[];\n\n exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\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 exchangeCreditAccountDetails?: WithdrawalExchangeAccountDetails[];\n}\n\nexport enum DenomLossEventType {\n DenomExpired = \"denom-expired\",\n DenomVanished = \"denom-vanished\",\n DenomUnoffered = \"denom-unoffered\",\n}\n\n/**\n * A transaction to indicate financial loss due to denominations\n * that became unusable for deposits.\n */\nexport interface TransactionDenomLoss extends TransactionCommon {\n type: TransactionType.DenomLoss;\n lossEventType: DenomLossEventType;\n exchangeBaseUrl: string;\n}\n\n/**\n * A withdrawal transaction (either bank-integrated or manual).\n */\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\n/**\n * Internal withdrawal operation, only reported on request.\n *\n * Some transactions (peer-*-credit) internally do a withdrawal,\n * but only the peer-*-credit transaction is reported.\n *\n * The internal withdrawal transaction allows to access the details of\n * the underlying withdrawal for testing/debugging.\n *\n * It is usually not reported, so that amounts of transactions properly\n * add up, since the amountEffecive of the withdrawal is already reported\n * in the peer-*-credit transaction.\n */\nexport interface TransactionInternalWithdrawal extends TransactionCommon {\n type: TransactionType.InternalWithdrawal;\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 * Only available in the right state.\n */\n talerUri: string | undefined;\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 * Only present if the transaction is in a state where the other party can\n * 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\n/**\n * The exchange revoked a key and the wallet recoups funds.\n */\nexport interface TransactionRecoup extends TransactionCommon {\n type: TransactionType.Recoup;\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 * 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 /**\n * Does this purchase has an pos validation\n */\n posConfirmation: string | undefined;\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 * 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\n/**\n * Summary information about the payment that we got a refund for.\n */\nexport interface RefundPaymentInfo {\n summary: string;\n summary_i18n?: InternationalizedString;\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\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 // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n paymentInfo: RefundPaymentInfo | undefined;\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\nexport interface DepositTransactionTrackingState {\n // Raw wire transfer identifier of the deposit.\n wireTransferId: string;\n // When was the wire transfer given to the bank.\n timestampExecuted: TalerProtocolTimestamp;\n // Total amount transfer for this wtid (including fees)\n amountRaw: AmountString;\n // Wire fee amount for this exchange\n wireFee: 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 trackingState: Array<DepositTransactionTrackingState>;\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 interface WithdrawalTransactionByURIRequest {\n talerWithdrawUri: string;\n}\n\nexport const codecForWithdrawalTransactionByURIRequest =\n (): Codec<WithdrawalTransactionByURIRequest> =>\n buildCodecForObject<WithdrawalTransactionByURIRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .build(\"WithdrawalTransactionByURIRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"scopeInfo\", codecOptional(codecForScopeInfo()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\n \"sort\",\n codecOptional(\n codecForEither(\n codecForConstString(\"ascending\"),\n codecForConstString(\"descending\"),\n codecForConstString(\"stable-ascending\"),\n ),\n ),\n )\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(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n\nexport interface ListAssociatedRefreshesRequest {\n transactionId: string;\n}\n\nexport const codecForListAssociatedRefreshesRequest =\n (): Codec<ListAssociatedRefreshesRequest> =>\n buildCodecForObject<ListAssociatedRefreshesRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ListAssociatedRefreshesRequest\");\n\nexport interface ListAssociatedRefreshesResponse {\n transactionIds: string[];\n}\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 Codec,\n Context,\n DecodingError,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n renderContext,\n} from \"./codec.js\";\nimport {\n CurrencySpecification,\n TemplateParams,\n WithdrawalOperationStatus,\n canonicalizeBaseUrl,\n} from \"./index.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 AccountRestriction,\n AmountString,\n AuditorDenomSig,\n CoinEnvelope,\n DenomKeyType,\n DenominationPubKey,\n EddsaPrivateKeyString,\n ExchangeAuditor,\n ExchangeWireAccount,\n InternationalizedString,\n MerchantContractTerms,\n MerchantInfo,\n PeerContractTerms,\n UnblindedSignature,\n codecForExchangeWireAccount,\n codecForMerchantContractTerms,\n codecForPeerContractTerms,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n TalerPreciseTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n codecForAbsoluteTime,\n codecForPreciseTimestamp,\n codecForTimestamp,\n} from \"./time.js\";\nimport {\n OrderShortInfo,\n TransactionState,\n TransactionType,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\ndeclare const __txId: unique symbol;\nexport type TransactionIdStr = `txn:${string}:${string}` & { [__txId]: true };\n\n/**\n * Identifier for a pending task in the wallet.\n */\ndeclare const __pndId: unique symbol;\nexport type PendingIdStr = `pnd:${string}:${string}` & { [__pndId]: true };\n\ndeclare const __tmbId: unique symbol;\nexport type TombstoneIdStr = `tmb:${string}:${string}` & { [__tmbId]: true };\n\nfunction codecForTransactionIdStr(): Codec<TransactionIdStr> {\n return {\n decode(x: any, c?: Context): TransactionIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as TransactionIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForPendingIdStr(): Codec<PendingIdStr> {\n return {\n decode(x: any, c?: Context): PendingIdStr {\n if (typeof x === \"string\" && x.startsWith(\"txn:\")) {\n return x as PendingIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"txn:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nfunction codecForTombstoneIdStr(): Codec<TombstoneIdStr> {\n return {\n decode(x: any, c?: Context): TombstoneIdStr {\n if (typeof x === \"string\" && x.startsWith(\"tmb:\")) {\n return x as TombstoneIdStr;\n }\n throw new DecodingError(\n `expected string starting with \"tmb:\" at ${renderContext(\n c,\n )} but got ${x}`,\n );\n },\n };\n}\n\nexport function codecForCanonBaseUrl(): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x === \"string\") {\n const canon = canonicalizeBaseUrl(x);\n if (x !== canon) {\n throw new DecodingError(\n `expected canonicalized base URL at ${renderContext(\n c,\n )} but got value '${x}'`,\n );\n }\n return x;\n }\n throw new DecodingError(\n `expected base URL at ${renderContext(c)} but got type ${typeof x}`,\n );\n },\n };\n}\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\n/**\n * How the amount should be interpreted in a transaction\n * Effective = how the balance is change\n * Raw = effective amount without fee\n *\n * Depending on the transaction, raw can be higher than effective\n */\nexport enum TransactionAmountMode {\n Effective = \"effective\",\n Raw = \"raw\",\n}\n\nexport type GetPlanForOperationRequest =\n | GetPlanForWithdrawRequest\n | GetPlanForDepositRequest;\n// | GetPlanForPushDebitRequest\n// | GetPlanForPullCreditRequest\n// | GetPlanForPaymentRequest\n// | GetPlanForTipRequest\n// | GetPlanForRefundRequest\n// | GetPlanForPullDebitRequest\n// | GetPlanForPushCreditRequest;\n\ninterface GetPlanForWalletInitiatedOperation {\n instructedAmount: AmountString;\n mode: TransactionAmountMode;\n}\n\nexport interface ConvertAmountRequest {\n amount: AmountString;\n type: TransactionAmountMode;\n}\n\nexport const codecForConvertAmountRequest =\n buildCodecForObject<ConvertAmountRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\n \"type\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .build(\"ConvertAmountRequest\");\n\nexport interface GetAmountRequest {\n currency: string;\n}\n\nexport const codecForGetAmountRequest = buildCodecForObject<GetAmountRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetAmountRequest\");\n\ninterface GetPlanToCompleteOperation {\n instructedAmount: AmountString;\n}\n\nconst codecForGetPlanForWalletInitiatedOperation = <\n T extends GetPlanForWalletInitiatedOperation,\n>() =>\n buildCodecForObject<T>()\n .property(\n \"mode\",\n codecForEither(\n codecForConstString(TransactionAmountMode.Raw),\n codecForConstString(TransactionAmountMode.Effective),\n ),\n )\n .property(\"instructedAmount\", codecForAmountString());\n\ninterface GetPlanForWithdrawRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Withdrawal;\n exchangeUrl?: string;\n}\ninterface GetPlanForDepositRequest extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.Deposit;\n account: string; //payto string\n}\ninterface GetPlanForPushDebitRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPushDebit;\n}\n\ninterface GetPlanForPullCreditRequest\n extends GetPlanForWalletInitiatedOperation {\n type: TransactionType.PeerPullCredit;\n exchangeUrl: string;\n}\n\nconst codecForGetPlanForWithdrawRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForWithdrawRequest>()\n .property(\"type\", codecForConstString(TransactionType.Withdrawal))\n .property(\"exchangeUrl\", codecOptional(codecForString()))\n .build(\"GetPlanForWithdrawRequest\");\n\nconst codecForGetPlanForDepositRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForDepositRequest>()\n .property(\"type\", codecForConstString(TransactionType.Deposit))\n .property(\"account\", codecForString())\n .build(\"GetPlanForDepositRequest\");\n\nconst codecForGetPlanForPushDebitRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPushDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushDebit))\n .build(\"GetPlanForPushDebitRequest\");\n\nconst codecForGetPlanForPullCreditRequest =\n codecForGetPlanForWalletInitiatedOperation<GetPlanForPullCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullCredit))\n .property(\"exchangeUrl\", codecForString())\n .build(\"GetPlanForPullCreditRequest\");\n\ninterface GetPlanForPaymentRequest extends GetPlanToCompleteOperation {\n type: TransactionType.Payment;\n wireMethod: string;\n ageRestriction: number;\n maxDepositFee: AmountString;\n}\n\ninterface GetPlanForPullDebitRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPullDebit;\n}\n\ninterface GetPlanForPushCreditRequest extends GetPlanToCompleteOperation {\n type: TransactionType.PeerPushCredit;\n}\n\nconst codecForGetPlanForPaymentRequest =\n buildCodecForObject<GetPlanForPaymentRequest>()\n .property(\"type\", codecForConstString(TransactionType.Payment))\n .property(\"maxDepositFee\", codecForAmountString())\n .build(\"GetPlanForPaymentRequest\");\n\nconst codecForGetPlanForPullDebitRequest =\n buildCodecForObject<GetPlanForPullDebitRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPullDebit))\n .build(\"GetPlanForPullDebitRequest\");\n\nconst codecForGetPlanForPushCreditRequest =\n buildCodecForObject<GetPlanForPushCreditRequest>()\n .property(\"type\", codecForConstString(TransactionType.PeerPushCredit))\n .build(\"GetPlanForPushCreditRequest\");\n\nexport const codecForGetPlanForOperationRequest =\n (): Codec<GetPlanForOperationRequest> =>\n buildCodecForUnion<GetPlanForOperationRequest>()\n .discriminateOn(\"type\")\n .alternative(\n TransactionType.Withdrawal,\n codecForGetPlanForWithdrawRequest,\n )\n .alternative(TransactionType.Deposit, codecForGetPlanForDepositRequest)\n // .alternative(\n // TransactionType.PeerPushDebit,\n // codecForGetPlanForPushDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPullCredit,\n // codecForGetPlanForPullCreditRequest,\n // )\n // .alternative(TransactionType.Payment, codecForGetPlanForPaymentRequest)\n // .alternative(\n // TransactionType.PeerPullDebit,\n // codecForGetPlanForPullDebitRequest,\n // )\n // .alternative(\n // TransactionType.PeerPushCredit,\n // codecForGetPlanForPushCreditRequest,\n // )\n .build(\"GetPlanForOperationRequest\");\n\nexport interface GetPlanForOperationResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n counterPartyAmount?: AmountString;\n details: any;\n}\n\nexport const codecForGetPlanForOperationResponse =\n (): Codec<GetPlanForOperationResponse> =>\n buildCodecForObject<GetPlanForOperationResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .property(\"details\", codecForAny())\n .property(\"counterPartyAmount\", codecOptional(codecForAmountString()))\n .build(\"GetPlanForOperationResponse\");\n\nexport interface AmountResponse {\n effectiveAmount: AmountString;\n rawAmount: AmountString;\n}\n\nexport const codecForAmountResponse = (): Codec<AmountResponse> =>\n buildCodecForObject<AmountResponse>()\n .property(\"effectiveAmount\", codecForAmountString())\n .property(\"rawAmount\", codecForAmountString())\n .build(\"AmountResponse\");\n\nexport enum BalanceFlag {\n IncomingKyc = \"incoming-kyc\",\n IncomingAml = \"incoming-aml\",\n IncomingConfirmation = \"incoming-confirmation\",\n OutgoingKyc = \"outgoing-kyc\",\n}\n\nexport interface WalletBalance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n /**\n * Does the balance for this currency have a pending\n * transaction?\n *\n * @deprecated use flags and pendingIncoming/pendingOutgoing instead\n */\n hasPendingTransactions: boolean;\n\n /**\n * Is there a transaction that requires user input?\n *\n * @deprecated use flags instead\n */\n requiresUserInput: boolean;\n\n flags: BalanceFlag[];\n}\n\nexport const codecForScopeInfoGlobal = (): Codec<ScopeInfoGlobal> =>\n buildCodecForObject<ScopeInfoGlobal>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Global))\n .build(\"ScopeInfoGlobal\");\n\nexport const codecForScopeInfoExchange = (): Codec<ScopeInfoExchange> =>\n buildCodecForObject<ScopeInfoExchange>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Exchange))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoExchange\");\n\nexport const codecForScopeInfoAuditor = (): Codec<ScopeInfoAuditor> =>\n buildCodecForObject<ScopeInfoAuditor>()\n .property(\"currency\", codecForString())\n .property(\"type\", codecForConstString(ScopeType.Auditor))\n .property(\"url\", codecForString())\n .build(\"ScopeInfoAuditor\");\n\nexport const codecForScopeInfo = (): Codec<ScopeInfo> =>\n buildCodecForUnion<ScopeInfo>()\n .discriminateOn(\"type\")\n .alternative(ScopeType.Global, codecForScopeInfoGlobal())\n .alternative(ScopeType.Exchange, codecForScopeInfoExchange())\n .alternative(ScopeType.Auditor, codecForScopeInfoAuditor())\n .build(\"ScopeInfo\");\n\nexport interface GetCurrencySpecificationRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForGetCurrencyInfoRequest =\n (): Codec<GetCurrencySpecificationRequest> =>\n buildCodecForObject<GetCurrencySpecificationRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"GetCurrencySpecificationRequest\");\n\nexport interface ListExchangesForScopedCurrencyRequest {\n scope: ScopeInfo;\n}\n\nexport const codecForListExchangesForScopedCurrencyRequest =\n (): Codec<ListExchangesForScopedCurrencyRequest> =>\n buildCodecForObject<ListExchangesForScopedCurrencyRequest>()\n .property(\"scope\", codecForScopeInfo())\n .build(\"ListExchangesForScopedCurrencyRequest\");\n\nexport interface GetCurrencySpecificationResponse {\n currencySpecification: CurrencySpecification;\n}\n\nexport interface BuiltinExchange {\n exchangeBaseUrl: string;\n currencyHint: string;\n}\n\nexport interface PartialWalletRunConfig {\n builtin?: Partial<WalletRunConfig[\"builtin\"]>;\n testing?: Partial<WalletRunConfig[\"testing\"]>;\n features?: Partial<WalletRunConfig[\"features\"]>;\n}\n\nexport interface WalletRunConfig {\n /**\n * Initialization values useful for a complete startup.\n *\n * These are values may be overridden by different wallets\n */\n builtin: {\n exchanges: BuiltinExchange[];\n };\n\n /**\n * Unsafe options which it should only be used to create\n * testing environment.\n */\n testing: {\n /**\n * Allow withdrawal of denominations even though they are about to expire.\n */\n denomselAllowLate: boolean;\n devModeActive: boolean;\n insecureTrustExchange: boolean;\n preventThrottling: boolean;\n skipDefaults: boolean;\n emitObservabilityEvents?: boolean;\n };\n\n /**\n * Configurations values that may be safe to show to the user\n */\n features: {\n allowHttp: boolean;\n };\n}\n\nexport interface InitRequest {\n config?: PartialWalletRunConfig;\n}\n\nexport const codecForInitRequest = (): Codec<InitRequest> =>\n buildCodecForObject<InitRequest>()\n .property(\"config\", codecForAny())\n .build(\"InitRequest\");\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 ScopeInfoGlobal = { type: ScopeType.Global; currency: string };\nexport type ScopeInfoExchange = {\n type: ScopeType.Exchange;\n currency: string;\n url: string;\n};\nexport type ScopeInfoAuditor = {\n type: ScopeType.Auditor;\n currency: string;\n url: string;\n};\n\nexport type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;\n\nexport interface BalancesResponse {\n balances: WalletBalance[];\n}\n\nexport const codecForBalance = (): Codec<WalletBalance> =>\n buildCodecForObject<WalletBalance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForAmountString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForAmountString())\n .property(\"pendingOutgoing\", codecForAmountString())\n .property(\"requiresUserInput\", codecForBoolean())\n .property(\"flags\", codecForAny()) // FIXME\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 * Coin was lost as the denomination is not usable anymore.\n */\n DenomLoss = \"denom-loss\",\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: AmountString;\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: TransactionIdStr;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: TransactionIdStr;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecOptional(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\", codecForTransactionIdStr())\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\", codecForTransactionIdStr())\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 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(\"transactionId\", codecForTransactionIdStr())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\nexport interface BalanceDetails {}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PaymentInsufficientBalanceDetails {\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 balanceReceiverAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceReceiverDepositable: AmountString;\n\n balanceExchangeDepositable: AmountString;\n\n /**\n * Maximum effective amount that the wallet can spend,\n * when all fees are paid by the wallet.\n */\n maxEffectiveSpendAmount: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n balanceExchangeDepositable: AmountString;\n balanceAgeAcceptable: AmountString;\n balanceReceiverAcceptable: AmountString;\n balanceReceiverDepositable: AmountString;\n maxEffectiveSpendAmount: AmountString;\n /**\n * Exchange doesn't have global fees configured for the relevant year,\n * p2p payments aren't possible.\n */\n missingGlobalFees: boolean;\n };\n };\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PaymentInsufficientBalanceDetails> =>\n buildCodecForObject<PaymentInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceReceiverAcceptable\", codecForAmountString())\n .property(\"balanceReceiverDepositable\", codecForAmountString())\n .property(\"balanceExchangeDepositable\", codecForAmountString())\n .property(\"perExchange\", codecForAny())\n .property(\"maxEffectiveSpendAmount\", 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(\"transactionId\", codecForTransactionIdStr())\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\", codecOptional(codecForAmountString()))\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecForString())\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"transactionId\", codecForTransactionIdStr())\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 transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId instead\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n transactionId: TransactionIdStr;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: AmountString;\n talerUri: string;\n balanceDetails: PaymentInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n transactionId: TransactionIdStr;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: AmountString;\n amountEffective: AmountString | undefined;\n contractTermsHash: string;\n /**\n * @deprecated use transactionId\n */\n proposalId: string;\n talerUri: string;\n}\n\nexport interface BankWithdrawDetails {\n status: WithdrawalOperationStatus;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n operationId: string;\n apiBaseUrl: string;\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: TransactionIdStr;\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/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 AbortDeposit = \"abort-deposit\",\n AbortPeerPushDebit = \"abort-peer-push-debit\",\n AbortPeerPullDebit = \"abort-peer-pull-debit\",\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 * 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 ExchangesShortListResponse {\n exchanges: ShortExchangeListItem[];\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n implementationSemver: string;\n implementationGitHash: string;\n\n /**\n * Wallet-core protocol version supported by this implementation\n * of the API (\"server\" version).\n */\n version: string;\n exchange: string;\n merchant: string;\n\n bankIntegrationApiRange: string;\n bankConversionApiRange: string;\n corebankApiRange: string;\n\n /**\n * @deprecated as bank was split into multiple APIs with separate versioning\n */\n bank: string;\n\n /**\n * @deprecated\n */\n hash: string | undefined;\n\n /**\n * @deprecated will be removed\n */\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\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\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeWireAccount[];\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 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(codecForExchangeWireAccount()))\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 auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n Pending = \"pending\",\n Proposed = \"proposed\",\n Accepted = \"accepted\",\n}\n\nexport enum ExchangeEntryStatus {\n Preset = \"preset\",\n Ephemeral = \"ephemeral\",\n Used = \"used\",\n}\n\nexport enum ExchangeUpdateStatus {\n Initial = \"initial\",\n InitialUpdate = \"initial-update\",\n Suspended = \"suspended\",\n UnavailableUpdate = \"unavailable-update\",\n Ready = \"ready\",\n ReadyUpdate = \"ready-update\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\nexport interface ShortExchangeListItem {\n exchangeBaseUrl: string;\n}\n\n/**\n * Info about an exchange entry in the wallet.\n */\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n masterPub: string | undefined;\n currency: string;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n ageRestrictionOptions: number[];\n\n /**\n * P2P payments are disabled with this exchange\n * (e.g. because no global fees are configured).\n */\n peerPaymentsDisabled: boolean;\n\n /**\n * Set to true if this exchange doesn't charge any fees.\n */\n noFees: boolean;\n\n scopeInfo: ScopeInfo;\n\n lastUpdateTimestamp: TalerPreciseTimestamp | undefined;\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\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\", codecForCanonBaseUrl())\n .property(\"paytoUris\", codecForList(codecForString()))\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\", codecForCanonBaseUrl())\n .property(\"masterPub\", codecOptional(codecForString()))\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeEntryStatus\", codecForAny())\n .property(\"exchangeUpdateStatus\", codecForAny())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .property(\"scopeInfo\", codecForScopeInfo())\n .property(\"lastUpdateErrorInfo\", codecForAny())\n .property(\"lastUpdateTimestamp\", codecOptional(codecForPreciseTimestamp))\n .property(\"noFees\", codecForBoolean())\n .property(\"peerPaymentsDisabled\", codecForBoolean())\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 * @deprecated in favor of withdrawalAccountsList\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\n\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawalDetailsForAmount {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n *\n * @deprecated the client should query the exchange entry instead\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 * Number of coins that would be used for withdrawal.\n *\n * The UIs should warn if this number is too high (roughly at >100).\n */\n numCoins: number;\n\n /**\n * Ways to pay the exchange.\n *\n * @deprecated in favor of withdrawalAccountsList\n */\n paytoUris: string[];\n\n /**\n * Ways to pay the exchange, including accounts that require currency conversion.\n */\n withdrawalAccountsList: WithdrawalExchangeAccountDetails[];\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 * Scope info of the currency withdrawn.\n */\n scopeInfo: ScopeInfo;\n}\n\nexport interface DenomSelItem {\n denomPubHash: string;\n count: number;\n /**\n * Number of denoms/planchets to skip, because\n * a re-denomination effectively deleted them.\n */\n skip?: number;\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: DenomSelItem[];\n earliestDepositExpiration: TalerProtocolTimestamp;\n hasDenomWithAgeRestriction: boolean;\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 exchangeCreditAccountDetails: WithdrawalExchangeAccountDetails[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\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 scopeInfo: ScopeInfo;\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 /**\n * Language of the returned content.\n *\n * If missing, language is unknown.\n */\n contentLanguage: string | undefined;\n\n /**\n * Available languages as advertised by the exchange.\n */\n tosAvailableLanguages: string[];\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: AmountString;\n summary: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForTestPayArgs = (): Codec<TestPayArgs> =>\n buildCodecForObject<TestPayArgs>()\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amount\", codecForAmountString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: AmountString;\n amountToSpend: AmountString;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"IntegrationTestArgs\");\n\nexport interface IntegrationTestV2Args {\n exchangeBaseUrl: string;\n corebankApiBaseUrl: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n}\n\nexport const codecForIntegrationTestV2Args = (): Codec<IntegrationTestV2Args> =>\n buildCodecForObject<IntegrationTestV2Args>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"IntegrationTestV2Args\");\n\nexport interface GetExchangeEntryByUrlRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeEntryByUrlRequest =\n (): Codec<GetExchangeEntryByUrlRequest> =>\n buildCodecForObject<GetExchangeEntryByUrlRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"GetExchangeEntryByUrlRequest\");\n\nexport type GetExchangeEntryByUrlResponse = ExchangeListItem;\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use a separate API call to start a forced exchange update instead\n */\n forceUpdate?: boolean;\n\n masterPub?: string;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .property(\"masterPub\", codecOptional(codecForString()))\n .build(\"AddExchangeRequest\");\n\nexport interface UpdateExchangeEntryRequest {\n exchangeBaseUrl: string;\n force?: boolean;\n}\n\nexport const codecForUpdateExchangeEntryRequest =\n (): Codec<UpdateExchangeEntryRequest> =>\n buildCodecForObject<UpdateExchangeEntryRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"force\", codecOptional(codecForBoolean()))\n .build(\"UpdateExchangeEntryRequest\");\n\nexport interface GetExchangeResourcesRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForGetExchangeResourcesRequest =\n (): Codec<GetExchangeResourcesRequest> =>\n buildCodecForObject<GetExchangeResourcesRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"GetExchangeResourcesRequest\");\n\nexport interface GetExchangeResourcesResponse {\n hasResources: boolean;\n}\n\nexport interface DeleteExchangeRequest {\n exchangeBaseUrl: string;\n purge?: boolean;\n}\n\nexport const codecForDeleteExchangeRequest = (): Codec<DeleteExchangeRequest> =>\n buildCodecForObject<DeleteExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"purge\", codecOptional(codecForBoolean()))\n .build(\"DeleteExchangeRequest\");\n\nexport interface ForceExchangeUpdateRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForceExchangeUpdateRequest =\n (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"AddExchangeRequest\");\n\nexport interface GetExchangeTosRequest {\n exchangeBaseUrl: string;\n acceptedFormat?: string[];\n acceptLanguage?: string;\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .property(\"acceptLanguage\", codecOptional(codecForString()))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * Instead of generating a fresh, random reserve key pair,\n * use the provided reserve private key.\n *\n * Use with caution. Usage of this field may be restricted\n * to developer mode.\n */\n forceReservePriv?: EddsaPrivateKeyString;\n}\n\nexport const codecForAcceptManualWithdrawalRequest =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"forceReservePriv\", codecOptional(codecForString()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: AmountString;\n restrictAge?: number;\n\n /**\n * ID provided by the client to cancel the request.\n *\n * If the same request is made again with the same clientCancellationId,\n * all previous requests are cancelled.\n *\n * The cancelled request will receive an error response with\n * an error code that indicates the cancellation.\n *\n * The cancellation is best-effort, responses might still arrive.\n */\n clientCancellationId?: string;\n}\n\nexport interface PrepareBankIntegratedWithdrawalRequest {\n talerWithdrawUri: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\n restrictAge?: number;\n}\n\nexport const codecForPrepareBankIntegratedWithdrawalRequest =\n (): Codec<PrepareBankIntegratedWithdrawalRequest> =>\n buildCodecForObject<PrepareBankIntegratedWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"PrepareBankIntegratedWithdrawalRequest\");\n\nexport interface PrepareBankIntegratedWithdrawalResponse {\n transactionId: string;\n}\n\nexport interface ConfirmWithdrawalRequest {\n transactionId: string;\n}\n\nexport const codecForConfirmWithdrawalRequestRequest =\n (): Codec<ConfirmWithdrawalRequest> =>\n buildCodecForObject<ConfirmWithdrawalRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmWithdrawalRequest\");\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\", codecForCanonBaseUrl())\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\", codecForCanonBaseUrl())\n .property(\"amount\", codecForAmountString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .property(\"clientCancellationId\", codecOptional(codecForString()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ForgetExchangeTosRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForgetExchangeTosRequest =\n (): Codec<ForgetExchangeTosRequest> =>\n buildCodecForObject<ForgetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"ForgetExchangeTosRequest\");\n\nexport interface AcceptRefundRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<AcceptRefundRequest> =>\n buildCodecForObject<AcceptRefundRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AcceptRefundRequest\");\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 // @deprecated use transaction id\n proposalId?: string;\n transactionId?: string;\n}\n\nexport const codecForGetContractTermsDetails =\n (): Codec<GetContractTermsDetailsRequest> =>\n buildCodecForObject<GetContractTermsDetailsRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(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 SharePaymentRequest {\n merchantBaseUrl: string;\n orderId: string;\n}\nexport const codecForSharePaymentRequest = (): Codec<SharePaymentRequest> =>\n buildCodecForObject<SharePaymentRequest>()\n .property(\"merchantBaseUrl\", codecForCanonBaseUrl())\n .property(\"orderId\", codecForString())\n .build(\"SharePaymentRequest\");\n\nexport interface SharePaymentResult {\n privatePayUri: string;\n}\nexport const codecForSharePaymentResult = (): Codec<SharePaymentResult> =>\n buildCodecForObject<SharePaymentResult>()\n .property(\"privatePayUri\", codecForString())\n .build(\"SharePaymentResult\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams?: TemplateParams;\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 /**\n * @deprecated use transactionId instead\n */\n proposalId?: string;\n transactionId?: TransactionIdStr;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecOptional(codecForString()))\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\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}\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: AmountString;\n /**\n * Corebank API base URL.\n */\n corebankApiBaseUrl: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\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\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"corebankApiBaseUrl\", codecForCanonBaseUrl())\n .build(\"WithdrawTestBalanceRequest\");\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 RefreshCoinSpec {\n coinPub: string;\n amount?: AmountString;\n}\n\nexport const codecForRefreshCoinSpec = (): Codec<RefreshCoinSpec> =>\n buildCodecForObject<RefreshCoinSpec>()\n .property(\"amount\", codecForAmountString())\n .property(\"coinPub\", codecForString())\n .build(\"ForceRefreshRequest\");\n\nexport interface ForceRefreshRequest {\n refreshCoinSpecs: RefreshCoinSpec[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"refreshCoinSpecs\", codecForList(codecForRefreshCoinSpec()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport interface StartRefundQueryForUriResponse {\n /**\n * Transaction id of the *payment* where the refund query was started.\n */\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface StartRefundQueryRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForStartRefundQueryRequest =\n (): Codec<StartRefundQueryRequest> =>\n buildCodecForObject<StartRefundQueryRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"StartRefundQueryRequest\");\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForFailTransactionRequest =\n (): Codec<FailTransactionRequest> =>\n buildCodecForObject<FailTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"FailTransactionRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForResumeTransaction = (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface FailTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"AbortTransactionRequest\");\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n /**\n * Pre-allocated transaction ID.\n * Allows clients to easily handle notifications\n * that occur while the operation has been created but\n * before the creation request has returned.\n */\n transactionId?: TransactionIdStr;\n depositPaytoUri: string;\n amount: AmountString;\n}\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 fees: DepositGroupFees;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .property(\"transactionId\", codecOptional(codecForTransactionIdStr()))\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: TransactionIdStr;\n}\n\nexport interface TxIdResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface WithdrawUriInfoResponse {\n operationId: string;\n status: WithdrawalOperationStatus;\n confirmTransferUrl?: string;\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"operationId\", codecForString())\n .property(\"confirmTransferUrl\", codecOptional(codecForString()))\n .property(\n \"status\",\n codecForEither(\n codecForConstString(\"pending\"),\n codecForConstString(\"selected\"),\n codecForConstString(\"aborted\"),\n codecForConstString(\"confirmed\"),\n ),\n )\n .property(\"amount\", codecForAmountString())\n .property(\"defaultExchangeBaseUrl\", codecOptional(codecForCanonBaseUrl()))\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 TestingListTasksForTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface TestingListTasksForTransactionsResponse {\n taskIdList: string[];\n}\n\nexport const codecForTestingListTasksForTransactionRequest =\n (): Codec<TestingListTasksForTransactionRequest> =>\n buildCodecForObject<TestingListTasksForTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"TestingListTasksForTransactionRequest\");\n\nexport interface DeleteTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForTransactionIdStr())\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: TransactionIdStr;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: TransactionIdStr;\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: TransactionIdStr;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: TransactionIdStr;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: TalerPreciseTimestamp;\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 ActiveTask {\n taskId: string;\n transaction: TransactionIdStr | undefined;\n firstTry: AbsoluteTime | undefined;\n nextTry: AbsoluteTime | undefined;\n retryCounter: number | undefined;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport interface GetActiveTasksResponse {\n tasks: ActiveTask[];\n}\n\nexport const codecForActiveTask = (): Codec<ActiveTask> =>\n buildCodecForObject<ActiveTask>()\n .property(\"taskId\", codecForString())\n .property(\"transaction\", codecOptional(codecForTransactionIdStr()))\n .property(\"retryCounter\", codecOptional(codecForNumber()))\n .property(\"firstTry\", codecOptional(codecForAbsoluteTime))\n .property(\"nextTry\", codecOptional(codecForAbsoluteTime))\n .property(\"lastError\", codecOptional(codecForTalerErrorDetail()))\n .build(\"ActiveTask\");\n\nexport const codecForGetActiveTasks = (): Codec<GetActiveTasksResponse> =>\n buildCodecForObject<GetActiveTasksResponse>()\n .property(\"tasks\", codecForList(codecForActiveTask()))\n .build(\"GetActiveTasks\");\n\nexport interface ImportDbRequest {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDbRequest> =>\n buildCodecForObject<ImportDbRequest>()\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 /**\n * Number of coins used for the payment.\n */\n numCoins: number;\n}\n\nexport interface SelectedCoin {\n denomPubHash: string;\n coinPub: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\nexport interface SelectedProspectiveCoin {\n denomPubHash: string;\n contribution: AmountString;\n exchangeBaseUrl: string;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n coins: SelectedCoin[];\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 ProspectivePayCoinSelection {\n prospectiveCoins: SelectedProspectiveCoin[];\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(codecForCanonBaseUrl()))\n .property(\"amount\", codecForAmountString())\n .build(\"CheckPeerPushDebitRequest\");\n\nexport interface CheckPeerPushDebitResponse {\n amountRaw: AmountString;\n amountEffective: AmountString;\n exchangeBaseUrl: string;\n /**\n * Maximum expiration date, based on how close the coins\n * used for the payment are to expiry.\n *\n * The value is based on when the wallet would typically\n * automatically refresh the coins on its own, leaving enough\n * time to get a refund for the push payment and refresh the\n * coin.\n */\n maxExpirationDate: TalerProtocolTimestamp;\n}\n\nexport interface InitiatePeerPushDebitRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushDebitResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n transactionId: TransactionIdStr;\n}\n\nexport const codecForInitiatePeerPushDebitRequest =\n (): Codec<InitiatePeerPushDebitRequest> =>\n buildCodecForObject<InitiatePeerPushDebitRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushDebitRequest\");\n\nexport interface PreparePeerPushCreditRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n transactionId: TransactionIdStr;\n\n exchangeBaseUrl: string;\n\n /**\n * @deprecated use transaction ID instead.\n */\n peerPushCreditId: string;\n\n /**\n * @deprecated\n */\n amount: AmountString;\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 peerPullDebitId: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCreditRequest> =>\n buildCodecForObject<PreparePeerPushCreditRequest>()\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 transactionId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: TransactionIdStr;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n transactionId: TransactionIdStr;\n}\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(\"transactionId\", codecForTransactionIdStr())\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(codecForCanonBaseUrl()))\n .build(\"CheckPeerPullCreditRequest\");\n\nexport interface CheckPeerPullCreditResponse {\n exchangeBaseUrl: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n /**\n * Number of coins that will be used,\n * can be used by the UI to warn if excessively large.\n */\n numCoins: number;\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(codecForCanonBaseUrl()))\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 * @deprecated since it's not necessarily valid yet until the tx is in the right state\n */\n talerUri: string;\n\n transactionId: TransactionIdStr;\n}\n\nexport interface CanonicalizeBaseUrlRequest {\n url: string;\n}\n\nexport const codecForCanonicalizeBaseUrlRequest =\n (): Codec<CanonicalizeBaseUrlRequest> =>\n buildCodecForObject<CanonicalizeBaseUrlRequest>()\n .property(\"url\", codecForString())\n .build(\"CanonicalizeBaseUrlRequest\");\n\nexport interface CanonicalizeBaseUrlResponse {\n url: string;\n}\n\nexport interface ValidateIbanRequest {\n iban: string;\n}\n\nexport const codecForValidateIbanRequest = (): Codec<ValidateIbanRequest> =>\n buildCodecForObject<ValidateIbanRequest>()\n .property(\"iban\", codecForString())\n .build(\"ValidateIbanRequest\");\n\nexport interface ValidateIbanResponse {\n valid: boolean;\n}\n\nexport const codecForValidateIbanResponse = (): Codec<ValidateIbanResponse> =>\n buildCodecForObject<ValidateIbanResponse>()\n .property(\"valid\", codecForBoolean())\n .build(\"ValidateIbanResponse\");\n\nexport type TransactionStateFilter = \"nonfinal\";\n\nexport interface TransactionRecordFilter {\n onlyState?: TransactionStateFilter;\n onlyCurrency?: string;\n}\n\nexport interface StoredBackupList {\n storedBackups: {\n name: string;\n }[];\n}\n\nexport interface CreateStoredBackupResponse {\n name: string;\n}\n\nexport interface RecoverStoredBackupRequest {\n name: string;\n}\n\nexport interface DeleteStoredBackupRequest {\n name: string;\n}\n\nexport const codecForDeleteStoredBackupRequest =\n (): Codec<DeleteStoredBackupRequest> =>\n buildCodecForObject<DeleteStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"DeleteStoredBackupRequest\");\n\nexport const codecForRecoverStoredBackupRequest =\n (): Codec<RecoverStoredBackupRequest> =>\n buildCodecForObject<RecoverStoredBackupRequest>()\n .property(\"name\", codecForString())\n .build(\"RecoverStoredBackupRequest\");\n\nexport interface TestingSetTimetravelRequest {\n offsetMs: number;\n}\n\nexport const codecForTestingSetTimetravelRequest =\n (): Codec<TestingSetTimetravelRequest> =>\n buildCodecForObject<TestingSetTimetravelRequest>()\n .property(\"offsetMs\", codecForNumber())\n .build(\"TestingSetTimetravelRequest\");\n\nexport interface AllowedAuditorInfo {\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport interface AllowedExchangeInfo {\n exchangeBaseUrl: string;\n exchangePub: string;\n}\n\n/**\n * Data extracted from the contract terms that is relevant for payment\n * processing in the wallet.\n */\nexport interface WalletContractData {\n /**\n * Fulfillment URL, or the empty string if the order has no fulfillment URL.\n *\n * Stored as a non-nullable string as we use this field for IndexedDB indexing.\n */\n fulfillmentUrl: string;\n\n contractTermsHash: string;\n fulfillmentMessage?: string;\n fulfillmentMessageI18n?: InternationalizedString;\n merchantSig: string;\n merchantPub: string;\n merchant: MerchantInfo;\n amount: AmountString;\n orderId: string;\n merchantBaseUrl: string;\n summary: string;\n summaryI18n: { [lang_tag: string]: string } | undefined;\n autoRefund: TalerProtocolDuration | undefined;\n payDeadline: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n allowedExchanges: AllowedExchangeInfo[];\n timestamp: TalerProtocolTimestamp;\n wireMethod: string;\n wireInfoHash: string;\n maxDepositFee: AmountString;\n minimumAge?: number;\n}\n\nexport interface TestingWaitTransactionRequest {\n transactionId: TransactionIdStr;\n txState: TransactionState;\n}\n\nexport interface TestingGetDenomStatsRequest {\n exchangeBaseUrl: string;\n}\n\nexport interface TestingGetDenomStatsResponse {\n numKnown: number;\n numOffered: number;\n numLost: number;\n}\n\nexport const codecForTestingGetDenomStatsRequest =\n (): Codec<TestingGetDenomStatsRequest> =>\n buildCodecForObject<TestingGetDenomStatsRequest>()\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .build(\"TestingGetDenomStatsRequest\");\n\nexport interface WithdrawalExchangeAccountDetails {\n /**\n * Payto URI to credit the exchange.\n *\n * Depending on whether the (manual!) withdrawal is accepted or just\n * being checked, this already includes the subject with the\n * reserve public key.\n */\n paytoUri: string;\n\n /**\n * Status that indicates whether the account can be used\n * by the user to send funds for a withdrawal.\n *\n * ok: account should be shown to the user\n * error: account should not be shown to the user, UIs might render the error (in conversionError),\n * especially in dev mode.\n */\n status: \"ok\" | \"error\";\n\n /**\n * Transfer amount. Might be in a different currency than the requested\n * amount for withdrawal.\n *\n * Absent if this is a conversion account and the conversion failed.\n */\n transferAmount?: AmountString;\n\n /**\n * Currency specification for the external currency.\n *\n * Only included if this account requires a currency conversion.\n */\n currencySpecification?: CurrencySpecification;\n\n /**\n * Further restrictions for sending money to the\n * exchange.\n */\n creditRestrictions?: AccountRestriction[];\n\n /**\n * Label given to the account or the account's bank by the exchange.\n */\n bankLabel?: string;\n\n /*\n * Display priority assigned to this bank account by the exchange.\n */\n priority?: number;\n\n /**\n * Error that happened when attempting to request the conversion rate.\n */\n conversionError?: TalerErrorDetail;\n}\n\nexport interface PrepareWithdrawExchangeRequest {\n /**\n * A taler://withdraw-exchange URI.\n */\n talerUri: string;\n}\n\nexport const codecForPrepareWithdrawExchangeRequest =\n (): Codec<PrepareWithdrawExchangeRequest> =>\n buildCodecForObject<PrepareWithdrawExchangeRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PrepareWithdrawExchangeRequest\");\n\nexport interface PrepareWithdrawExchangeResponse {\n /**\n * Base URL of the exchange that already existed\n * or was ephemerally added as an exchange entry to\n * the wallet.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount from the taler://withdraw-exchange URI.\n * Only present if specified in the URI.\n */\n amount?: AmountString;\n}\n\nexport interface ExchangeEntryState {\n tosStatus: ExchangeTosStatus;\n exchangeEntryStatus: ExchangeEntryStatus;\n exchangeUpdateStatus: ExchangeUpdateStatus;\n}\n\nexport interface ListGlobalCurrencyAuditorsResponse {\n auditors: {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n }[];\n}\n\nexport interface ListGlobalCurrencyExchangesResponse {\n exchanges: {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n }[];\n}\n\nexport interface AddGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForAddGlobalCurrencyExchangeRequest =\n (): Codec<AddGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<AddGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"AddGlobalCurrencyExchangeRequest\");\n\nexport interface RemoveGlobalCurrencyExchangeRequest {\n currency: string;\n exchangeBaseUrl: string;\n exchangeMasterPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyExchangeRequest =\n (): Codec<RemoveGlobalCurrencyExchangeRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyExchangeRequest>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForCanonBaseUrl())\n .property(\"exchangeMasterPub\", codecForString())\n .build(\"RemoveGlobalCurrencyExchangeRequest\");\n\nexport interface AddGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForAddGlobalCurrencyAuditorRequest =\n (): Codec<AddGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<AddGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForCanonBaseUrl())\n .property(\"auditorPub\", codecForString())\n .build(\"AddGlobalCurrencyAuditorRequest\");\n\nexport interface RemoveGlobalCurrencyAuditorRequest {\n currency: string;\n auditorBaseUrl: string;\n auditorPub: string;\n}\n\nexport const codecForRemoveGlobalCurrencyAuditorRequest =\n (): Codec<RemoveGlobalCurrencyAuditorRequest> =>\n buildCodecForObject<RemoveGlobalCurrencyAuditorRequest>()\n .property(\"currency\", codecForString())\n .property(\"auditorBaseUrl\", codecForCanonBaseUrl())\n .property(\"auditorPub\", codecForString())\n .build(\"RemoveGlobalCurrencyAuditorRequest\");\n\n/**\n * Information about one provider.\n *\n * We don't store the account key here,\n * as that's derived from the wallet root key.\n */\nexport interface ProviderInfo {\n active: boolean;\n syncProviderBaseUrl: string;\n name: string;\n terms?: BackupProviderTerms;\n /**\n * Last communication issue with the provider.\n */\n lastError?: TalerErrorDetail;\n lastSuccessfulBackupTimestamp?: TalerPreciseTimestamp;\n lastAttemptedBackupTimestamp?: TalerPreciseTimestamp;\n paymentProposalIds: string[];\n backupProblem?: BackupProblem;\n paymentStatus: ProviderPaymentStatus;\n}\n\nexport interface BackupProviderTerms {\n supportedProtocolVersion: string;\n annualFee: AmountString;\n storageLimitInMegabytes: number;\n}\n\nexport type BackupProblem =\n | BackupUnreadableProblem\n | BackupConflictingDeviceProblem;\n\nexport interface BackupUnreadableProblem {\n type: \"backup-unreadable\";\n}\n\nexport interface BackupConflictingDeviceProblem {\n type: \"backup-conflicting-device\";\n otherDeviceId: string;\n myDeviceId: string;\n backupTimestamp: AbsoluteTime;\n}\n\nexport type ProviderPaymentStatus =\n | ProviderPaymentTermsChanged\n | ProviderPaymentPaid\n | ProviderPaymentInsufficientBalance\n | ProviderPaymentUnpaid\n | ProviderPaymentPending;\n\nexport enum ProviderPaymentType {\n Unpaid = \"unpaid\",\n Pending = \"pending\",\n InsufficientBalance = \"insufficient-balance\",\n Paid = \"paid\",\n TermsChanged = \"terms-changed\",\n}\n\nexport interface ProviderPaymentUnpaid {\n type: ProviderPaymentType.Unpaid;\n}\n\nexport interface ProviderPaymentInsufficientBalance {\n type: ProviderPaymentType.InsufficientBalance;\n amount: AmountString;\n}\n\nexport interface ProviderPaymentPending {\n type: ProviderPaymentType.Pending;\n talerUri?: string;\n}\n\nexport interface ProviderPaymentPaid {\n type: ProviderPaymentType.Paid;\n paidUntil: AbsoluteTime;\n}\n\nexport interface ProviderPaymentTermsChanged {\n type: ProviderPaymentType.TermsChanged;\n paidUntil: AbsoluteTime;\n oldTerms: BackupProviderTerms;\n newTerms: BackupProviderTerms;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport interface SyncTermsOfServiceResponse {\n // maximum backup size supported\n storage_limit_in_megabytes: number;\n\n // Fee for an account, per year.\n annual_fee: AmountString;\n\n // protocol version supported by the server,\n // for now always \"0.0\".\n version: string;\n}\n\n// FIXME: Does not really belong here, move to sync API\nexport const codecForSyncTermsOfServiceResponse =\n (): Codec<SyncTermsOfServiceResponse> =>\n buildCodecForObject<SyncTermsOfServiceResponse>()\n .property(\"storage_limit_in_megabytes\", codecForNumber())\n .property(\"annual_fee\", codecForAmountString())\n .property(\"version\", codecForString())\n .build(\"SyncTermsOfServiceResponse\");\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { base64FromArrayBuffer } from \"../base64.js\";\nimport { encodeCrock, getRandomBytes, stringToBytes } from \"../taler-crypto.js\";\nimport { AccessToken, LongPollParams, PaginationParams } from \"./types.js\";\n\n/**\n * Helper function to generate the \"Authorization\" HTTP header.\n */\nexport function makeBasicAuthHeader(\n username: string,\n password: string,\n): string {\n const auth = `${username}:${password}`;\n const authEncoded: string = base64FromArrayBuffer(stringToBytes(auth));\n return `Basic ${authEncoded}`;\n}\n\n/**\n * rfc8959\n * @param token\n * @returns\n */\nexport function makeBearerTokenAuthHeader(token: AccessToken): string {\n return `Bearer ${token}`;\n}\n\n/**\n * https://bugs.gnunet.org/view.php?id=7949\n */\nexport function addPaginationParams(url: URL, pagination?: PaginationParams) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"start\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"delta\", String(order * limit));\n}\n\nexport function addMerchantPaginationParams(\n url: URL,\n pagination?: PaginationParams,\n) {\n if (!pagination) return;\n if (pagination.offset) {\n url.searchParams.set(\"offset\", pagination.offset);\n }\n const order = !pagination || pagination.order === \"asc\" ? 1 : -1;\n const limit =\n !pagination || !pagination.limit || pagination.limit === 0\n ? 5\n : Math.abs(pagination.limit);\n //always send delta\n url.searchParams.set(\"limit\", String(order * limit));\n}\n\nexport function addLongPollingParam(url: URL, param?: LongPollParams) {\n if (!param) return;\n if (param.timeoutMs) {\n url.searchParams.set(\"long_poll_ms\", String(param.timeoutMs));\n }\n}\n\nexport interface CacheEvictor<T> {\n notifySuccess: (op: T) => Promise<void>;\n}\n\nexport const nullEvictor: CacheEvictor<unknown> = {\n notifySuccess: () => Promise.resolve(),\n};\n\nexport class IdempotencyRetry {\n public readonly uid: string;\n public readonly timesLeft: number;\n public readonly maxTries: number;\n\n private constructor(timesLeft: number, maxTimesLeft: number) {\n this.timesLeft = timesLeft;\n this.maxTries = maxTimesLeft;\n this.uid = encodeCrock(getRandomBytes(32))\n }\n \n static tryFiveTimes() {\n return new IdempotencyRetry(5, 5)\n }\n\n next(): IdempotencyRetry | undefined {\n const left = this.timesLeft -1\n if (left <= 0) {\n return undefined\n }\n return new IdempotencyRetry(left, this.maxTries);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 * Imports.\n */\nimport { AmountJson, Amounts } from \"../amounts.js\";\nimport { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport { TalerErrorCode } from \"../taler-error-codes.js\";\nimport { codecForTalerErrorDetail } from \"../wallet-types.js\";\nimport {\n AccessToken,\n TalerBankConversionApi,\n codecForCashinConversionResponse,\n codecForCashoutConversionResponse,\n codecForConversionBankConfig,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerBankConversionResultByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = ResultByMethod<TalerBankConversionHttpClient, prop>;\nexport type TalerBankConversionErrorsByMethod<\n prop extends keyof TalerBankConversionHttpClient,\n> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;\n\nexport enum TalerBankConversionCacheEviction {\n UPDATE_RATE,\n}\n\n/**\n * The API is used by the wallets.\n */\nexport class TalerBankConversionHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForConversionBankConfig());\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate\n *\n */\n async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) {\n const url = new URL(`cashin-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashinConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate\n *\n */\n async getCashoutRate(conversion: {\n debit?: AmountJson;\n credit?: AmountJson;\n }) {\n const url = new URL(`cashout-rate`, this.baseUrl);\n if (conversion.debit) {\n url.searchParams.set(\"amount_debit\", Amounts.stringify(conversion.debit));\n }\n if (conversion.credit) {\n url.searchParams.set(\n \"amount_credit\",\n Amounts.stringify(conversion.credit),\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutConversionResponse());\n case HttpStatusCode.BadRequest: {\n const body = await resp.json();\n const details = codecForTalerErrorDetail().decode(body);\n switch (details.code) {\n case TalerErrorCode.GENERIC_PARAMETER_MISSING:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_PARAMETER_MALFORMED:\n return opKnownHttpFailure(resp.status, resp);\n case TalerErrorCode.GENERIC_CURRENCY_MISMATCH:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, body);\n }\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate\n *\n */\n async updateConversionRate(\n auth: AccessToken,\n body: TalerBankConversionApi.ConversionRate,\n ) {\n const url = new URL(`conversion-rate`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerBankConversionCacheEviction.UPDATE_RATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\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 * Imports.\n */\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n makeBasicAuthHeader,\n readTalerErrorResponse,\n} from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n opEmptySuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n TalerAuthentication,\n codecForTokenSuccessResponse,\n codecForTokenSuccessResponseMerchant,\n} from \"./types.js\";\nimport { makeBearerTokenAuthHeader } from \"./utils.js\";\n\nexport class TalerAuthenticationHttpClient {\n public readonly PROTOCOL_VERSION = \"0:0:0\";\n\n httpLib: HttpRequestLibrary;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n * @returns\n */\n async createAccessTokenBasic(\n username: string,\n password: string,\n body: TalerAuthentication.TokenRequest,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBasicAuthHeader(username, password),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenSuccessResponse());\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n *\n * @returns\n */\n async createAccessTokenBearer(\n token: AccessToken,\n body: TalerAuthentication.TokenRequest,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenSuccessResponseMerchant());\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n async deleteAccessToken(token: AccessToken) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n LibtoolVersion,\n LongPollParams,\n OperationAlternative,\n OperationFail,\n OperationOk,\n TalerErrorCode,\n codecForChallenge,\n codecForTanTransmission,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opKnownTalerFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n PaginationParams,\n TalerCorebankApi,\n UserAndToken,\n WithdrawalOperationStatus,\n codecForAccountData,\n codecForBankAccountCreateWithdrawalResponse,\n codecForBankAccountTransactionInfo,\n codecForBankAccountTransactionsResponse,\n codecForCashoutPending,\n codecForCashoutStatusResponse,\n codecForCashouts,\n codecForCoreBankConfig,\n codecForCreateTransactionResponse,\n codecForGlobalCashouts,\n codecForListBankAccountsResponse,\n codecForMonitorResponse,\n codecForPublicAccountsResponse,\n codecForRegisterAccountResponse,\n codecForWithdrawalPublicInfo,\n} from \"./types.js\";\nimport {\n CacheEvictor,\n IdempotencyRetry,\n addLongPollingParam,\n addPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerCoreBankResultByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = ResultByMethod<TalerCoreBankHttpClient, prop>;\nexport type TalerCoreBankErrorsByMethod<\n prop extends keyof TalerCoreBankHttpClient,\n> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;\n\nexport enum TalerCoreBankCacheEviction {\n DELETE_ACCOUNT,\n CREATE_ACCOUNT,\n UPDATE_ACCOUNT,\n UPDATE_PASSWORD,\n CREATE_TRANSACTION,\n CONFIRM_WITHDRAWAL,\n ABORT_WITHDRAWAL,\n CREATE_WITHDRAWAL,\n CREATE_CASHOUT,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerCoreBankHttpClient {\n public readonly PROTOCOL_VERSION = \"4:0:0\";\n\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCoreBankConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // ACCOUNTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts\n *\n */\n async createAccount(\n auth: AccessToken | undefined,\n body: TalerCorebankApi.RegisterAccountRequest,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n const headers: Record<string, string> = {};\n if (auth) {\n headers.Authorization = makeBearerTokenAuthHeader(auth);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers: headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n TalerCoreBankCacheEviction.CREATE_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForRegisterAccountResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-corebank.html#delete--accounts-$USERNAME\n *\n */\n async deleteAccount(auth: UserAndToken, cid?: string) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME\n *\n */\n async updateAccount(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountReconfiguration,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#patch--accounts-$USERNAME-auth\n *\n */\n async updatePassword(\n auth: UserAndToken,\n body: TalerCorebankApi.AccountPasswordChange,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/auth`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--public-accounts\n *\n */\n async getPublicAccounts(\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`public-accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForPublicAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ public_accounts: [] });\n case HttpStatusCode.NotFound:\n return opFixedSuccess({ public_accounts: [] });\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts\n *\n */\n async getAccounts(\n auth: AccessToken,\n filter: { account?: string } = {},\n pagination?: PaginationParams,\n ) {\n const url = new URL(`accounts`, this.baseUrl);\n addPaginationParams(url, pagination);\n if (filter.account !== undefined) {\n url.searchParams.set(\"filter_name\", filter.account);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForListBankAccountsResponse());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ accounts: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME\n *\n */\n async getAccount(auth: UserAndToken) {\n const url = new URL(`accounts/${auth.username}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountData());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // TRANSACTIONS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions\n *\n */\n async getTransactions(\n auth: UserAndToken,\n params?: PaginationParams & LongPollParams,\n ) {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n addPaginationParams(url, params);\n addLongPollingParam(url, params);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountTransactionsResponse(),\n );\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ transactions: [] });\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-transactions-$TRANSACTION_ID\n *\n */\n async getTransactionById(auth: UserAndToken, txid: number) {\n const url = new URL(\n `accounts/${auth.username}/transactions/${String(txid)}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountTransactionInfo());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-transactions\n *\n */\n async createTransaction(\n auth: UserAndToken,\n body: TalerCorebankApi.CreateTransactionRequest,\n idempotencyCheck: IdempotencyRetry | undefined,\n cid?: string,\n ): Promise<\n //manually definition all return types because of recursion\n | OperationOk<TalerCorebankApi.CreateTransactionResponse>\n | OperationAlternative<HttpStatusCode.Accepted, TalerCorebankApi.Challenge>\n | OperationFail<HttpStatusCode.NotFound>\n | OperationFail<HttpStatusCode.BadRequest>\n | OperationFail<HttpStatusCode.Unauthorized>\n | OperationFail<TalerErrorCode.BANK_UNALLOWED_DEBIT>\n | OperationFail<TalerErrorCode.BANK_ADMIN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_SAME_ACCOUNT>\n | OperationFail<TalerErrorCode.BANK_UNKNOWN_CREDITOR>\n | OperationFail<TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED>\n > {\n const url = new URL(`accounts/${auth.username}/transactions`, this.baseUrl);\n if (idempotencyCheck) {\n body.request_uid = idempotencyCheck.uid;\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCreateTransactionResponse());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n if (!idempotencyCheck) {\n return opKnownTalerFailure(details.code, details);\n }\n const nextRetry = idempotencyCheck.next();\n return this.createTransaction(auth, body, nextRetry, cid);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // WITHDRAWALS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals\n *\n */\n async createWithdrawal(\n auth: UserAndToken,\n body: TalerCorebankApi.BankAccountCreateWithdrawalRequest,\n ) {\n const url = new URL(`accounts/${auth.username}/withdrawals`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForBankAccountCreateWithdrawalResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: missing in docs\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-confirm\n *\n */\n async confirmWithdrawalById(auth: UserAndToken, wid: string, cid?: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-withdrawals-$WITHDRAWAL_ID-abort\n *\n */\n async abortWithdrawalById(auth: UserAndToken, wid: string) {\n const url = new URL(\n `accounts/${auth.username}/withdrawals/${wid}/abort`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--withdrawals-$WITHDRAWAL_ID\n *\n */\n async getWithdrawalById(\n wid: string,\n params?: {\n old_state?: WithdrawalOperationStatus;\n } & LongPollParams,\n ) {\n const url = new URL(`withdrawals/${wid}`, this.baseUrl);\n addLongPollingParam(url, params);\n if (params) {\n url.searchParams.set(\n \"old_state\",\n !params.old_state ? \"pending\" : params.old_state,\n );\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWithdrawalPublicInfo());\n //FIXME: missing in docs\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // CASHOUTS\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-cashouts\n *\n */\n async createCashout(\n auth: UserAndToken,\n body: TalerCorebankApi.CashoutRequest,\n cid?: string,\n ) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n \"X-Challenge-Id\": cid,\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutPending());\n case HttpStatusCode.Accepted:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForChallenge(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONVERSION_AMOUNT_TO_SMALL:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts-$CASHOUT_ID\n *\n */\n async getCashoutById(auth: UserAndToken, cid: number) {\n const url = new URL(\n `accounts/${auth.username}/cashouts/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashoutStatusResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts\n *\n */\n async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {\n const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--cashouts\n *\n */\n async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {\n const url = new URL(`cashouts`, this.baseUrl);\n addPaginationParams(url, pagination);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForGlobalCashouts());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ cashouts: [] });\n case HttpStatusCode.NotImplemented:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // 2FA\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID\n *\n */\n async sendChallenge(auth: UserAndToken, cid: string) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTanTransmission());\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-challenge-$CHALLENGE_ID-confirm\n *\n */\n async confirmChallenge(\n auth: UserAndToken,\n cid: string,\n body: TalerCorebankApi.ChallengeSolve,\n ) {\n const url = new URL(\n `accounts/${auth.username}/challenge/${cid}/confirm`,\n this.baseUrl,\n );\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth.token),\n },\n body,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict: {\n const details = await readTalerErrorResponse(resp);\n switch (details.code) {\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return opKnownTalerFailure(details.code, details);\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return opKnownTalerFailure(details.code, details);\n default:\n return opUnknownFailure(resp, details);\n }\n }\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // MONITOR\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#get--monitor\n *\n */\n async getMonitor(\n auth: AccessToken,\n params: {\n timeframe?: TalerCorebankApi.MonitorTimeframeParam;\n date?: AbsoluteTime;\n } = {},\n ) {\n const url = new URL(`monitor`, this.baseUrl);\n if (params.timeframe) {\n url.searchParams.set(\n \"timeframe\",\n TalerCorebankApi.MonitorTimeframeParam[params.timeframe],\n );\n }\n if (params.date) {\n const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);\n if (seconds !== \"never\") {\n url.searchParams.set(\"date_s\", String(seconds));\n }\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(auth),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMonitorResponse());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Others API\n //\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getIntegrationAPI(): URL {\n return new URL(`taler-integration/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getWireGatewayAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-wire-gateway/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api\n *\n */\n getRevenueAPI(username: string): URL {\n return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getAuthenticationAPI(username: string): URL {\n return new URL(`accounts/${username}/`, this.baseUrl);\n }\n\n /**\n * https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token\n *\n */\n getConversionInfoAPI(): URL {\n return new URL(`conversion-info/`, this.baseUrl);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n FailCasesByMethod,\n HttpStatusCode,\n LibtoolVersion,\n PaginationParams,\n ResultByMethod,\n TalerMerchantApi,\n codecForAbortResponse,\n codecForAccountAddResponse,\n codecForAccountKycRedirects,\n codecForAccountsSummaryResponse,\n codecForBankAccountEntry,\n codecForClaimResponse,\n codecForInstancesResponse,\n codecForInventorySummaryResponse,\n codecForMerchantConfig,\n codecForMerchantOrderPrivateStatusResponse,\n codecForMerchantRefundResponse,\n codecForOrderHistory,\n codecForOtpDeviceDetails,\n codecForOtpDeviceSummaryResponse,\n codecForOutOfStockResponse,\n codecForPaidRefundStatusResponse,\n codecForPaymentResponse,\n codecForPostOrderResponse,\n codecForProductDetail,\n codecForQueryInstancesResponse,\n codecForStatusGoto,\n codecForStatusPaid,\n codecForStatusStatusUnpaid,\n codecForTansferList,\n codecForTemplateDetails,\n codecForTemplateSummaryResponse,\n codecForTokenFamiliesList,\n codecForTokenFamilyDetails,\n codecForWalletRefundResponse,\n codecForWalletTemplateDetails,\n codecForWebhookDetails,\n codecForWebhookSummaryResponse,\n opEmptySuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n} from \"@gnu-taler/taler-util\";\nimport {\n HttpRequestLibrary,\n HttpResponse,\n createPlatformHttpLib,\n readTalerErrorResponse,\n} from \"@gnu-taler/taler-util/http\";\nimport { opSuccessFromHttp, opUnknownFailure } from \"../operation.js\";\nimport {\n CacheEvictor,\n addMerchantPaginationParams,\n makeBearerTokenAuthHeader,\n nullEvictor,\n} from \"./utils.js\";\n\nexport type TalerMerchantInstanceResultByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = ResultByMethod<TalerMerchantInstanceHttpClient, prop>;\nexport type TalerMerchantInstanceErrorsByMethod<\n prop extends keyof TalerMerchantInstanceHttpClient,\n> = FailCasesByMethod<TalerMerchantInstanceHttpClient, prop>;\n\nexport enum TalerMerchantInstanceCacheEviction {\n CREATE_ORDER,\n UPDATE_ORDER,\n DELETE_ORDER,\n UPDATE_CURRENT_INSTANCE,\n DELETE_CURRENT_INSTANCE,\n CREATE_BANK_ACCOUNT,\n UPDATE_BANK_ACCOUNT,\n DELETE_BANK_ACCOUNT,\n CREATE_PRODUCT,\n UPDATE_PRODUCT,\n DELETE_PRODUCT,\n CREATE_TRANSFER,\n DELETE_TRANSFER,\n CREATE_DEVICE,\n UPDATE_DEVICE,\n DELETE_DEVICE,\n CREATE_TEMPLATE,\n UPDATE_TEMPLATE,\n DELETE_TEMPLATE,\n CREATE_WEBHOOK,\n UPDATE_WEBHOOK,\n DELETE_WEBHOOK,\n CREATE_TOKENFAMILY,\n UPDATE_TOKENFAMILY,\n DELETE_TOKENFAMILY,\n LAST,\n}\nexport enum TalerMerchantManagementCacheEviction {\n CREATE_INSTANCE = TalerMerchantInstanceCacheEviction.LAST + 1,\n UPDATE_INSTANCE,\n DELETE_INSTANCE,\n}\n/**\n * Protocol version spoken with the core bank.\n *\n * Endpoint must be ordered in the same way that in the docs\n * Response code (http and taler) must have the same order that in the docs\n * That way is easier to see changes\n *\n * Uses libtool's current:revision:age versioning.\n */\nexport class TalerMerchantInstanceHttpClient {\n public readonly PROTOCOL_VERSION = \"10:0:6\";\n\n readonly httpLib: HttpRequestLibrary;\n readonly cacheEvictor: CacheEvictor<TalerMerchantInstanceCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerMerchantInstanceCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForMerchantConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wallet API\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim\n */\n async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {\n const url = new URL(`orders/${orderId}/claim`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForClaimResponse());\n }\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-pay\n */\n async makePayment(orderId: string, body: TalerMerchantApi.PayRequest) {\n const url = new URL(`orders/${orderId}/pay`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaymentResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PaymentRequired:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.RequestTimeout:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.PreconditionFailed:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID\n */\n\n async getPaymentStatus(\n orderId: string,\n params: TalerMerchantApi.PaymentStatusRequestParams = {},\n ) {\n const url = new URL(`orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.awaitRefundObtained !== undefined) {\n url.searchParams.set(\n \"await_refund_obtained\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.claimToken !== undefined) {\n url.searchParams.set(\"token\", params.claimToken);\n }\n if (params.contractTermHash !== undefined) {\n url.searchParams.set(\"h_contract\", params.contractTermHash);\n }\n if (params.refund !== undefined) {\n url.searchParams.set(\"refund\", params.refund);\n }\n if (params.sessionId !== undefined) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout !== undefined) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n // body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForStatusPaid());\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForStatusGoto());\n // case HttpStatusCode.Found: not possible since content is not HTML\n case HttpStatusCode.PaymentRequired:\n return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#demonstrating-payment\n */\n async demostratePayment(orderId: string, body: TalerMerchantApi.PaidRequest) {\n const url = new URL(`orders/${orderId}/paid`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments\n */\n async abortIncompletePayment(\n orderId: string,\n body: TalerMerchantApi.AbortRequest,\n ) {\n const url = new URL(`orders/${orderId}/abort`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForAbortResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#obtaining-refunds\n */\n async obtainRefund(\n orderId: string,\n body: TalerMerchantApi.WalletRefundRequest,\n ) {\n const url = new URL(`orders/${orderId}/refund`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForWalletRefundResponse());\n }\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth\n */\n async updateCurrentInstanceAuthentication(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(`private/auth`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: // FIXME: missing in docs\n return opEmptySuccess(resp);\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private\n */\n async updateCurrentInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private\n *\n */\n async getCurrentInstanceDetails(token: AccessToken) {\n const url = new URL(`private`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private\n */\n async deleteCurrentInstance(\n token: AccessToken | undefined,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`private`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc\n */\n async getCurrentIntanceKycStatus(\n token: AccessToken | undefined,\n params: TalerMerchantApi.GetKycStatusRequestParams = {},\n ) {\n const url = new URL(`private/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForAccountKycRedirects(),\n );\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Bank Accounts\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts\n */\n async addBankAccount(\n token: AccessToken | undefined,\n body: TalerMerchantApi.AccountAddDetails,\n ) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT,\n );\n return opSuccessFromHttp(resp, codecForAccountAddResponse());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async updateBankAccount(\n token: AccessToken | undefined,\n wireAccount: string,\n body: TalerMerchantApi.AccountPatchDetails,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts\n */\n async listBankAccounts(token: AccessToken, params?: PaginationParams) {\n const url = new URL(`private/accounts`, this.baseUrl);\n\n // addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async getBankAccountDetails(\n token: AccessToken | undefined,\n wireAccount: string,\n ) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForBankAccountEntry());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE\n */\n async deleteBankAccount(token: AccessToken | undefined, wireAccount: string) {\n const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Inventory Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products\n */\n async addProduct(\n token: AccessToken | undefined,\n body: TalerMerchantApi.ProductAddDetail,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async updateProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.ProductPatchDetail,\n ) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products\n */\n async listProducts(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/products`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInventorySummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: not in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID\n */\n async getProductDetails(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForProductDetail());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#reserving-inventory\n */\n async lockProduct(\n token: AccessToken | undefined,\n productId: string,\n body: TalerMerchantApi.LockRequest,\n ) {\n const url = new URL(`private/products/${productId}/lock`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory\n */\n async deleteProduct(token: AccessToken | undefined, productId: string) {\n const url = new URL(`private/products/${productId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_PRODUCT,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Payment processing\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders\n */\n async createOrder(\n token: AccessToken | undefined,\n body: TalerMerchantApi.PostOrderRequest,\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n return this.procesOrderCreationResponse(resp);\n }\n\n private async procesOrderCreationResponse(resp: HttpResponse) {\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForPostOrderResponse());\n }\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-orders\n */\n async listOrders(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListOrdersRequestParams = {},\n ) {\n const url = new URL(`private/orders`, this.baseUrl);\n\n if (params.date) {\n url.searchParams.set(\"date_s\", String(params.date));\n }\n if (params.fulfillmentUrl) {\n url.searchParams.set(\"fulfillment_url\", params.fulfillmentUrl);\n }\n if (params.paid !== undefined) {\n url.searchParams.set(\"paid\", params.paid ? \"YES\" : \"NO\");\n }\n if (params.refunded !== undefined) {\n url.searchParams.set(\"refunded\", params.refunded ? \"YES\" : \"NO\");\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout\", String(params.timeout));\n }\n if (params.wired !== undefined) {\n url.searchParams.set(\"wired\", params.wired ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOrderHistory());\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async getOrderDetails(\n token: AccessToken | undefined,\n orderId: string,\n params: TalerMerchantApi.GetOrderRequestParams = {},\n ) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n if (params.allowRefundedForRepurchase !== undefined) {\n url.searchParams.set(\n \"allow_refunded_for_repurchase\",\n params.allowRefundedForRepurchase ? \"YES\" : \"NO\",\n );\n }\n if (params.sessionId) {\n url.searchParams.set(\"session_id\", params.sessionId);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForMerchantOrderPrivateStatusResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.GatewayTimeout:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForOutOfStockResponse(),\n );\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup\n */\n async forgetOrder(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.ForgetRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID\n */\n async deleteOrder(token: AccessToken | undefined, orderId: string) {\n const url = new URL(`private/orders/${orderId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_ORDER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Refunds\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund\n */\n async addRefund(\n token: AccessToken | undefined,\n orderId: string,\n body: TalerMerchantApi.RefundRequest,\n ) {\n const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_ORDER,\n );\n return opSuccessFromHttp(resp, codecForMerchantRefundResponse());\n }\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Gone:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Wire Transfer\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers\n */\n async informWireTransfer(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TransferInformation,\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers\n */\n async listWireTransfers(\n token: AccessToken | undefined,\n params: TalerMerchantApi.ListWireTransferRequestParams = {},\n ) {\n const url = new URL(`private/transfers`, this.baseUrl);\n\n if (params.after) {\n url.searchParams.set(\"after\", String(params.after));\n }\n if (params.before) {\n url.searchParams.set(\"before\", String(params.before));\n }\n if (params.paytoURI) {\n url.searchParams.set(\"payto_uri\", params.paytoURI);\n }\n if (params.verified !== undefined) {\n url.searchParams.set(\"verified\", params.verified ? \"YES\" : \"NO\");\n }\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTansferList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID\n */\n async deleteWireTransfer(token: AccessToken | undefined, transferId: string) {\n const url = new URL(`private/transfers/${transferId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TRANSFER,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // OTP Devices\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices\n */\n async addOtpDevice(\n token: AccessToken | undefined,\n body: TalerMerchantApi.OtpDeviceAddDetails,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async updateOtpDevice(\n token: AccessToken | undefined,\n deviceId: string,\n body: TalerMerchantApi.OtpDevicePatchDetails,\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices\n */\n async listOtpDevices(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/otp-devices`, this.baseUrl);\n\n addMerchantPaginationParams(url, params);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async getOtpDeviceDetails(\n token: AccessToken | undefined,\n deviceId: string,\n params: TalerMerchantApi.GetOtpDeviceRequestParams = {},\n ) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n if (params.faketime) {\n url.searchParams.set(\"faketime\", String(params.faketime));\n }\n if (params.price) {\n url.searchParams.set(\"price\", params.price);\n }\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForOtpDeviceDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID\n */\n async deleteOtpDevice(token: AccessToken | undefined, deviceId: string) {\n const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_DEVICE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // Templates\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates\n */\n async addTemplate(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TemplateAddDetails,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async updateTemplate(\n token: AccessToken | undefined,\n templateId: string,\n body: TalerMerchantApi.TemplatePatchDetails,\n ) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#inspecting-template\n */\n async listTemplates(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/templates`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async getTemplateDetails(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTemplateDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID\n */\n async deleteTemplate(token: AccessToken | undefined, templateId: string) {\n const url = new URL(`private/templates/${templateId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-templates-$TEMPLATE_ID\n */\n async useTemplateGetInfo(templateId: string) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWalletTemplateDetails());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID\n */\n async useTemplateCreateOrder(\n templateId: string,\n body: TalerMerchantApi.UsingTemplateDetails,\n ) {\n const url = new URL(`templates/${templateId}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n return this.procesOrderCreationResponse(resp);\n }\n\n //\n // Webhooks\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks\n */\n async addWebhook(\n token: AccessToken | undefined,\n body: TalerMerchantApi.WebhookAddDetails,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async updateWebhook(\n token: AccessToken | undefined,\n webhookId: string,\n body: TalerMerchantApi.WebhookPatchDetails,\n ) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks\n */\n async listWebhooks(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/webhooks`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForWebhookSummaryResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async getWebhookDetails(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opSuccessFromHttp(resp, codecForWebhookDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID\n */\n async deleteWebhook(token: AccessToken | undefined, webhookId: string) {\n const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n //\n // token families\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async createTokenFamily(\n token: AccessToken | undefined,\n body: TalerMerchantApi.TokenFamilyCreateRequest,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async updateTokenFamily(\n token: AccessToken | undefined,\n tokenSlug: string,\n body: TalerMerchantApi.TokenFamilyUpdateRequest,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY,\n );\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies\n */\n async listTokenFamilies(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`private/tokenfamilies`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamiliesList());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async getTokenFamilyDetails(\n token: AccessToken | undefined,\n tokenSlug: string,\n ) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForTokenFamilyDetails());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG\n */\n async deleteTokenFamily(token: AccessToken | undefined, tokenSlug: string) {\n const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheEvictor.notifySuccess(\n TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * Get the auth api against the current instance\n *\n * https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token\n * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token\n */\n getAuthenticationAPI(): URL {\n return new URL(`private/`, this.baseUrl);\n }\n}\n\nexport type TalerMerchantManagementResultByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = ResultByMethod<TalerMerchantManagementHttpClient, prop>;\nexport type TalerMerchantManagementErrorsByMethod<\n prop extends keyof TalerMerchantManagementHttpClient,\n> = FailCasesByMethod<TalerMerchantManagementHttpClient, prop>;\n\nexport class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {\n readonly cacheManagementEvictor: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >;\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n // cacheManagementEvictor?: CacheEvictor<TalerMerchantManagementCacheEviction>,\n cacheEvictor?: CacheEvictor<\n TalerMerchantInstanceCacheEviction | TalerMerchantManagementCacheEviction\n >,\n ) {\n super(baseUrl, httpClient, cacheEvictor);\n this.cacheManagementEvictor = cacheEvictor ?? nullEvictor;\n }\n\n getSubInstanceAPI(instanceId: string) {\n return new URL(`instances/${instanceId}/`, this.baseUrl);\n }\n\n //\n // Instance Management\n //\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances\n */\n async createInstance(\n token: AccessToken | undefined,\n body: TalerMerchantApi.InstanceConfigurationMessage,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.CREATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth\n */\n async updateInstanceAuthentication(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceAuthConfigurationMessage,\n ) {\n const url = new URL(\n `management/instances/${instanceId}/auth`,\n this.baseUrl,\n );\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE\n */\n async updateInstance(\n token: AccessToken | undefined,\n instanceId: string,\n body: TalerMerchantApi.InstanceReconfigurationMessage,\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"PATCH\",\n body,\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.UPDATE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances\n */\n async listInstances(\n token: AccessToken | undefined,\n params?: PaginationParams,\n ) {\n const url = new URL(`management/instances`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE\n *\n */\n async getInstanceDetails(token: AccessToken | undefined, instanceId: string) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForQueryInstancesResponse());\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE\n */\n async deleteInstance(\n token: AccessToken | undefined,\n instanceId: string,\n params: { purge?: boolean } = {},\n ) {\n const url = new URL(`management/instances/${instanceId}`, this.baseUrl);\n\n if (params.purge !== undefined) {\n url.searchParams.set(\"purge\", params.purge ? \"YES\" : \"NO\");\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"DELETE\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.NoContent: {\n this.cacheManagementEvictor.notifySuccess(\n TalerMerchantManagementCacheEviction.DELETE_INSTANCE,\n );\n return opEmptySuccess(resp);\n }\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc\n */\n async getIntanceKycStatus(\n token: AccessToken | undefined,\n instanceId: string,\n params: TalerMerchantApi.GetKycStatusRequestParams,\n ) {\n const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);\n\n if (params.wireHash) {\n url.searchParams.set(\"h_wire\", params.wireHash);\n }\n if (params.exchangeURL) {\n url.searchParams.set(\"exchange_url\", params.exchangeURL);\n }\n if (params.timeout) {\n url.searchParams.set(\"timeout_ms\", String(params.timeout));\n }\n\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = makeBearerTokenAuthHeader(token);\n }\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers,\n });\n switch (resp.status) {\n case HttpStatusCode.Accepted:\n return opSuccessFromHttp(resp, codecForAccountKycRedirects());\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n case HttpStatusCode.NotFound:\n return opEmptySuccess(resp);\n case HttpStatusCode.Unauthorized: // FIXME: missing in docs\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.BadGateway:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.ServiceUnavailable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { TalerCoreBankCacheEviction } from \"../index.node.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport {\n FailCasesByMethod,\n RedirectResult,\n ResultByMethod,\n opFixedSuccess,\n opKnownAlternativeFailure,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n AccessToken,\n codecForChallengeCreateResponse,\n codecForChallengeSetupResponse,\n codecForChallengeStatus,\n codecForChallengerAuthResponse,\n codecForChallengerInfoResponse,\n codecForChallengerTermsOfServiceResponse,\n codecForInvalidPinResponse,\n} from \"./types.js\";\nimport { CacheEvictor, makeBearerTokenAuthHeader, nullEvictor } from \"./utils.js\";\n\nexport type ChallengerResultByMethod<prop extends keyof ChallengerHttpClient> =\n ResultByMethod<ChallengerHttpClient, prop>;\nexport type ChallengerErrorsByMethod<prop extends keyof ChallengerHttpClient> =\n FailCasesByMethod<ChallengerHttpClient, prop>;\n\nexport enum ChallengerCacheEviction {\n CREATE_CHALLENGE,\n}\n\n/**\n */\nexport class ChallengerHttpClient {\n httpLib: HttpRequestLibrary;\n cacheEvictor: CacheEvictor<ChallengerCacheEviction>;\n public readonly PROTOCOL_VERSION = \"1:0:0\";\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<ChallengerCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(\n resp,\n codecForChallengerTermsOfServiceResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-challenger.html#post--setup-$CLIENT_ID\n *\n */\n async setup(clientId: string, token: AccessToken) {\n const url = new URL(`setup/${clientId}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeSetupResponse());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // LOGIN\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--authorize-$NONCE\n *\n */\n async login(\n nonce: string,\n clientId: string,\n redirectUri: string,\n state: string | undefined,\n ) {\n const url = new URL(`authorize/${nonce}`, this.baseUrl);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n if (state) {\n url.searchParams.set(\"state\", state);\n }\n // url.searchParams.set(\"scope\", \"code\");\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengeStatus());\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // CHALLENGE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--challenge-$NONCE\n *\n */\n async challenge(nonce: string, body: Record<\"email\", string>) {\n const url = new URL(`challenge/${nonce}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok: {\n await this.cacheEvictor.notifySuccess(\n ChallengerCacheEviction.CREATE_CHALLENGE,\n );\n return opSuccessFromHttp(resp, codecForChallengeCreateResponse());\n }\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // SOLVE\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--solve-$NONCE\n *\n */\n async solve(nonce: string, body: Record<string, string>) {\n const url = new URL(`solve/${nonce}`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body: new URLSearchParams(Object.entries(body)).toString(),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n redirect: \"manual\",\n });\n switch (resp.status) {\n case HttpStatusCode.Found:\n const redirect = resp.headers.get(\"Location\")!;\n return opFixedSuccess<RedirectResult>({\n redirectURL: new URL(redirect),\n });\n case HttpStatusCode.BadRequest:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Forbidden:\n return opKnownAlternativeFailure(\n resp,\n resp.status,\n codecForInvalidPinResponse(),\n );\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotAcceptable:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.TooManyRequests:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.InternalServerError:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // AUTH\n\n /**\n * https://docs.taler.net/core/api-challenger.html#post--token\n *\n */\n async token(\n client_id: string,\n redirect_uri: string,\n client_secret: AccessToken,\n code: string,\n ) {\n const url = new URL(`token`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams(\n Object.entries({\n client_id,\n redirect_uri,\n client_secret,\n code,\n grant_type: \"authorization_code\",\n }),\n ).toString(),\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerAuthResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // INFO\n\n /**\n * https://docs.taler.net/core/api-challenger.html#get--info\n *\n */\n async info(token: AccessToken) {\n const url = new URL(`info`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n Authorization: makeBearerTokenAuthHeader(token),\n },\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForChallengerInfoResponse());\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n", "import { HttpRequestLibrary, readTalerErrorResponse } from \"../http-common.js\";\nimport { HttpStatusCode } from \"../http-status-codes.js\";\nimport { createPlatformHttpLib } from \"../http.js\";\nimport { LibtoolVersion } from \"../libtool-version.js\";\nimport { hash } from \"../nacl-fast.js\";\nimport {\n FailCasesByMethod,\n ResultByMethod,\n opEmptySuccess,\n opFixedSuccess,\n opKnownHttpFailure,\n opSuccessFromHttp,\n opUnknownFailure,\n} from \"../operation.js\";\nimport {\n TalerSignaturePurpose,\n amountToBuffer,\n bufferForUint32,\n buildSigPS,\n decodeCrock,\n eddsaSign,\n encodeCrock,\n stringToBytes,\n timestampRoundedToBuffer,\n} from \"../taler-crypto.js\";\nimport {\n OfficerAccount,\n PaginationParams,\n SigningKey,\n TalerExchangeApi,\n codecForAmlDecisionDetails,\n codecForAmlRecords,\n codecForExchangeConfig,\n codecForExchangeKeys,\n} from \"./types.js\";\nimport { CacheEvictor, addPaginationParams, nullEvictor } from \"./utils.js\";\n\nexport type TalerExchangeResultByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = ResultByMethod<TalerExchangeHttpClient, prop>;\nexport type TalerExchangeErrorsByMethod<\n prop extends keyof TalerExchangeHttpClient,\n> = FailCasesByMethod<TalerExchangeHttpClient, prop>;\n\nexport enum TalerExchangeCacheEviction {\n CREATE_DESCISION,\n}\n\n\n/**\n */\nexport class TalerExchangeHttpClient {\n httpLib: HttpRequestLibrary;\n public readonly PROTOCOL_VERSION = \"18:0:1\";\n cacheEvictor: CacheEvictor<TalerExchangeCacheEviction>;\n\n constructor(\n readonly baseUrl: string,\n httpClient?: HttpRequestLibrary,\n cacheEvictor?: CacheEvictor<TalerExchangeCacheEviction>,\n ) {\n this.httpLib = httpClient ?? createPlatformHttpLib();\n this.cacheEvictor = cacheEvictor ?? nullEvictor;\n }\n\n isCompatible(version: string): boolean {\n const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);\n return compare?.compatible ?? false;\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--seed\n *\n */\n async getSeed() {\n const url = new URL(`seed`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n const buffer = await resp.bytes();\n const uintar = new Uint8Array(buffer);\n\n return opFixedSuccess(uintar);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-exchange.html#get--config\n *\n */\n async getConfig() {\n const url = new URL(`config`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeConfig());\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n /**\n * https://docs.taler.net/core/api-merchant.html#get--config\n *\n * PARTIALLY IMPLEMENTED!!\n */\n async getKeys() {\n const url = new URL(`keys`, this.baseUrl);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n });\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForExchangeKeys());\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n // TERMS\n\n //\n // AML operations\n //\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decisions-$STATE\n *\n */\n async getDecisionsByState(\n auth: OfficerAccount,\n state: TalerExchangeApi.AmlState,\n pagination?: PaginationParams,\n ) {\n const url = new URL(\n `aml/${auth.id}/decisions/${TalerExchangeApi.AmlState[state]}`,\n this.baseUrl,\n );\n addPaginationParams(url, pagination);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlRecords());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ records: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decision-$H_PAYTO\n *\n */\n async getDecisionDetails(auth: OfficerAccount, account: string) {\n const url = new URL(`aml/${auth.id}/decision/${account}`, this.baseUrl);\n\n const resp = await this.httpLib.fetch(url.href, {\n method: \"GET\",\n headers: {\n \"Taler-AML-Officer-Signature\": buildQuerySignature(auth.signingKey),\n },\n });\n\n switch (resp.status) {\n case HttpStatusCode.Ok:\n return opSuccessFromHttp(resp, codecForAmlDecisionDetails());\n case HttpStatusCode.NoContent:\n return opFixedSuccess({ aml_history: [], kyc_attributes: [] });\n //this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n\n /**\n * https://docs.taler.net/core/api-exchange.html#post--aml-$OFFICER_PUB-decision\n *\n */\n async addDecisionDetails(\n auth: OfficerAccount,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n ) {\n const url = new URL(`aml/${auth.id}/decision`, this.baseUrl);\n\n const body = buildDecisionSignature(auth.signingKey, decision);\n const resp = await this.httpLib.fetch(url.href, {\n method: \"POST\",\n body,\n });\n\n switch (resp.status) {\n case HttpStatusCode.NoContent:\n return opEmptySuccess(resp);\n //FIXME: this should be unauthorized\n case HttpStatusCode.Forbidden:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Unauthorized:\n return opKnownHttpFailure(resp.status, resp);\n //FIXME: this two need to be split by error code\n case HttpStatusCode.NotFound:\n return opKnownHttpFailure(resp.status, resp);\n case HttpStatusCode.Conflict:\n return opKnownHttpFailure(resp.status, resp);\n default:\n return opUnknownFailure(resp, await readTalerErrorResponse(resp));\n }\n }\n}\n\nfunction buildQuerySignature(key: SigningKey): string {\n const sigBlob = buildSigPS(\n TalerSignaturePurpose.TALER_SIGNATURE_AML_QUERY,\n ).build();\n\n return encodeCrock(eddsaSign(sigBlob, key));\n}\n\nfunction buildDecisionSignature(\n key: SigningKey,\n decision: Omit<TalerExchangeApi.AmlDecision, \"officer_sig\">,\n): TalerExchangeApi.AmlDecision {\n const zero = new Uint8Array(new ArrayBuffer(64));\n\n const sigBlob = buildSigPS(TalerSignaturePurpose.TALER_SIGNATURE_AML_DECISION)\n //TODO: new need the null terminator, also in the exchange\n .put(hash(stringToBytes(decision.justification))) //check null\n .put(timestampRoundedToBuffer(decision.decision_time))\n .put(amountToBuffer(decision.new_threshold))\n .put(decodeCrock(decision.h_payto))\n .put(zero) //kyc_requirement\n .put(bufferForUint32(decision.new_state))\n .build();\n\n const officer_sig = encodeCrock(eddsaSign(sigBlob, key));\n return {\n ...decision,\n officer_sig,\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) 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 * IBAN validation.\n *\n * Currently only validates the checksum.\n *\n * It does not validate:\n * - Country-specific length\n * - Country-specific checksums\n *\n * The country list is also not complete.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\nexport type IbanValidationResult =\n | { type: \"invalid\" }\n | {\n type: \"valid\";\n normalizedIban: string;\n };\n\nexport interface IbanCountryInfo {\n name: string;\n isSepa?: boolean;\n length?: number;\n}\n\n/**\n * Incomplete list, see https://www.swift.com/resource/iban-registry-pdf\n */\nexport const ibanCountryInfoTable: Record<string, IbanCountryInfo> = {\n AE: { name: \"U.A.E.\" },\n AF: { name: \"Afghanistan\" },\n AL: { name: \"Albania\" },\n AM: { name: \"Armenia\" },\n AN: { name: \"Netherlands Antilles\" },\n AR: { name: \"Argentina\" },\n AT: { name: \"Austria\" },\n AU: { name: \"Australia\" },\n AZ: { name: \"Azerbaijan\" },\n BA: { name: \"Bosnia and Herzegovina\" },\n BD: { name: \"Bangladesh\" },\n BE: { name: \"Belgium\" },\n BG: { name: \"Bulgaria\" },\n BH: { name: \"Bahrain\" },\n BN: { name: \"Brunei Darussalam\" },\n BO: { name: \"Bolivia\" },\n BR: { name: \"Brazil\" },\n BT: { name: \"Bhutan\" },\n BY: { name: \"Belarus\" },\n BZ: { name: \"Belize\" },\n CA: { name: \"Canada\" },\n CG: { name: \"Congo\" },\n CH: { name: \"Switzerland\" },\n CI: { name: \"Cote d'Ivoire\" },\n CL: { name: \"Chile\" },\n CM: { name: \"Cameroon\" },\n CN: { name: \"People's Republic of China\" },\n CO: { name: \"Colombia\" },\n CR: { name: \"Costa Rica\" },\n CS: { name: \"Serbia and Montenegro\" },\n CZ: { name: \"Czech Republic\" },\n DE: { name: \"Germany\" },\n DK: { name: \"Denmark\" },\n DO: { name: \"Dominican Republic\" },\n DZ: { name: \"Algeria\" },\n EC: { name: \"Ecuador\" },\n EE: { name: \"Estonia\" },\n EG: { name: \"Egypt\" },\n ER: { name: \"Eritrea\" },\n ES: { name: \"Spain\" },\n ET: { name: \"Ethiopia\" },\n FI: { name: \"Finland\" },\n FO: { name: \"Faroe Islands\" },\n FR: { name: \"France\" },\n GB: { name: \"United Kingdom\" },\n GD: { name: \"Caribbean\" },\n GE: { name: \"Georgia\" },\n GL: { name: \"Greenland\" },\n GR: { name: \"Greece\" },\n GT: { name: \"Guatemala\" },\n HK: { name: \"Hong Kong S.A.R.\" },\n HN: { name: \"Honduras\" },\n HR: { name: \"Croatia\" },\n HT: { name: \"Haiti\" },\n HU: { name: \"Hungary\" },\n ID: { name: \"Indonesia\" },\n IE: { name: \"Ireland\" },\n IL: { name: \"Israel\" },\n IN: { name: \"India\" },\n IQ: { name: \"Iraq\" },\n IR: { name: \"Iran\" },\n IS: { name: \"Iceland\" },\n IT: { name: \"Italy\" },\n JM: { name: \"Jamaica\" },\n JO: { name: \"Jordan\" },\n JP: { name: \"Japan\" },\n KE: { name: \"Kenya\" },\n KG: { name: \"Kyrgyzstan\" },\n KH: { name: \"Cambodia\" },\n KR: { name: \"South Korea\" },\n KW: { name: \"Kuwait\" },\n KZ: { name: \"Kazakhstan\" },\n LA: { name: \"Laos\" },\n LB: { name: \"Lebanon\" },\n LI: { name: \"Liechtenstein\" },\n LK: { name: \"Sri Lanka\" },\n LT: { name: \"Lithuania\" },\n LU: { name: \"Luxembourg\" },\n LV: { name: \"Latvia\" },\n LY: { name: \"Libya\" },\n MA: { name: \"Morocco\" },\n MC: { name: \"Principality of Monaco\" },\n MD: { name: \"Moldava\" },\n ME: { name: \"Montenegro\" },\n MK: { name: \"Former Yugoslav Republic of Macedonia\" },\n ML: { name: \"Mali\" },\n MM: { name: \"Myanmar\" },\n MN: { name: \"Mongolia\" },\n MO: { name: \"Macau S.A.R.\" },\n MT: { name: \"Malta\" },\n MV: { name: \"Maldives\" },\n MX: { name: \"Mexico\" },\n MY: { name: \"Malaysia\" },\n NG: { name: \"Nigeria\" },\n NI: { name: \"Nicaragua\" },\n NL: { name: \"Netherlands\" },\n NO: { name: \"Norway\" },\n NP: { name: \"Nepal\" },\n NZ: { name: \"New Zealand\" },\n OM: { name: \"Oman\" },\n PA: { name: \"Panama\" },\n PE: { name: \"Peru\" },\n PH: { name: \"Philippines\" },\n PK: { name: \"Islamic Republic of Pakistan\" },\n PL: { name: \"Poland\" },\n PR: { name: \"Puerto Rico\" },\n PT: { name: \"Portugal\" },\n PY: { name: \"Paraguay\" },\n QA: { name: \"Qatar\" },\n RE: { name: \"Reunion\" },\n RO: { name: \"Romania\" },\n RS: { name: \"Serbia\" },\n RU: { name: \"Russia\" },\n RW: { name: \"Rwanda\" },\n SA: { name: \"Saudi Arabia\" },\n SE: { name: \"Sweden\" },\n SG: { name: \"Singapore\" },\n SI: { name: \"Slovenia\" },\n SK: { name: \"Slovak\" },\n SN: { name: \"Senegal\" },\n SO: { name: \"Somalia\" },\n SR: { name: \"Suriname\" },\n SV: { name: \"El Salvador\" },\n SY: { name: \"Syria\" },\n TH: { name: \"Thailand\" },\n TJ: { name: \"Tajikistan\" },\n TM: { name: \"Turkmenistan\" },\n TN: { name: \"Tunisia\" },\n TR: { name: \"Turkey\" },\n TT: { name: \"Trinidad and Tobago\" },\n TW: { name: \"Taiwan\" },\n TZ: { name: \"Tanzania\" },\n UA: { name: \"Ukraine\" },\n US: { name: \"United States\" },\n UY: { name: \"Uruguay\" },\n VA: { name: \"Vatican\" },\n VE: { name: \"Venezuela\" },\n VN: { name: \"Viet Nam\" },\n YE: { name: \"Yemen\" },\n ZA: { name: \"South Africa\" },\n ZW: { name: \"Zimbabwe\" },\n};\n\nlet ccZero = \"0\".charCodeAt(0);\nlet ccNine = \"9\".charCodeAt(0);\nlet ccA = \"A\".charCodeAt(0);\nlet ccZ = \"Z\".charCodeAt(0);\n\n/**\n * Append a IBAN digit(s) based on a char code.\n */\nfunction appendDigit(digits: number[], cc: number): boolean {\n if (cc >= ccZero && cc <= ccNine) {\n digits.push(cc - ccZero);\n } else if (cc >= ccA && cc <= ccZ) {\n const n = cc - ccA + 10;\n digits.push(Math.floor(n / 10) % 10);\n digits.push(n % 10);\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Compute MOD-97-10 as per ISO/IEC 7064:2003.\n */\nfunction mod97(digits: number[]): number {\n let i = 0;\n let modAccum = 0;\n while (i < digits.length) {\n let n = 0;\n while (n < 9 && i < digits.length) {\n modAccum = modAccum * 10 + digits[i];\n i++;\n n++;\n }\n modAccum = modAccum % 97;\n }\n return modAccum;\n}\n\nexport function validateIban(ibanString: string): IbanValidationResult {\n let myIban = ibanString.toLocaleUpperCase().replace(\" \", \"\");\n let countryCode = myIban.substring(0, 2);\n let countryInfo = ibanCountryInfoTable[countryCode];\n\n if (!countryInfo) {\n return {\n type: \"invalid\",\n };\n }\n\n let digits: number[] = [];\n\n for (let i = 4; i < myIban.length; i++) {\n const cc = myIban.charCodeAt(i);\n if (!appendDigit(digits, cc)) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n for (let i = 0; i < 4; i++) {\n if (!appendDigit(digits, ibanString.charCodeAt(i))) {\n return {\n type: \"invalid\",\n };\n }\n }\n\n const rem = mod97(digits);\n if (rem === 1) {\n return {\n type: \"valid\",\n normalizedIban: myIban,\n };\n } else {\n return {\n type: \"invalid\",\n };\n }\n}\n\nexport function generateIban(countryCode: string, length: number): string {\n let ibanSuffix = \"\";\n let digits: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const cc = ccZero + (Math.floor(Math.random() * 100) % 10);\n appendDigit(digits, cc);\n ibanSuffix += String.fromCharCode(cc);\n }\n\n appendDigit(digits, countryCode.charCodeAt(0));\n appendDigit(digits, countryCode.charCodeAt(1));\n\n // Try using \"00\" as check digits\n appendDigit(digits, ccZero);\n appendDigit(digits, ccZero);\n\n const requiredChecksum = 98 - mod97(digits);\n\n const checkDigit1 = Math.floor(requiredChecksum / 10) % 10;\n const checkDigit2 = requiredChecksum % 10;\n\n return countryCode + checkDigit1 + checkDigit2 + ibanSuffix;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019-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 * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { AbsoluteTime } from \"./time.js\";\nimport { TransactionState } from \"./transactions-types.js\";\nimport { ExchangeEntryState, TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n BalanceChange = \"balance-change\",\n BackupOperationError = \"backup-error\",\n TransactionStateTransition = \"transaction-state-transition\",\n /**\n * @deprecated\n */\n WithdrawalOperationTransition = \"withdrawal-operation-transition\",\n ExchangeStateTransition = \"exchange-state-transition\",\n Idle = \"idle\",\n TaskObservabilityEvent = \"task-observability-event\",\n RequestObservabilityEvent = \"request-observability-event\",\n}\n\nexport interface ErrorInfoSummary {\n code: number;\n hint?: string;\n message?: string;\n}\n\nexport interface TransactionStateTransitionNotification {\n type: NotificationType.TransactionStateTransition;\n transactionId: string;\n oldTxState: TransactionState;\n newTxState: TransactionState;\n errorInfo?: ErrorInfoSummary;\n\n /**\n * Additional \"user data\" that is dependent on the\n * state transition.\n *\n * Usage should be avoided.\n *\n * Currently used to notify the iOS app about\n * the KYC URL.\n */\n experimentalUserData?: any;\n}\n\nexport interface ExchangeStateTransitionNotification {\n type: NotificationType.ExchangeStateTransition;\n /**\n * Identification of the exchange entry that this\n * notification is about.\n */\n exchangeBaseUrl: string;\n\n /**\n * If missing, the notification means that\n * the exchange entry is newly created.\n */\n oldExchangeState?: ExchangeEntryState;\n\n /**\n * New state of the exchange.\n */\n newExchangeState: ExchangeEntryState;\n\n /**\n * Summary of the error that occurred when trying to update the exchange entry,\n * if applicable.\n */\n errorInfo?: ErrorInfoSummary;\n}\n\nexport interface BalanceChangeNotification {\n type: NotificationType.BalanceChange;\n\n /**\n * Transaction ID of the transaction that caused the balance update.\n *\n * Only used as a hint for debugging, should not be relied upon by clients.\n */\n hintTransactionId: string;\n}\n\nexport interface TaskProgressNotification {\n type: NotificationType.TaskObservabilityEvent;\n taskId: string;\n event: ObservabilityEvent;\n}\n\nexport interface RequestProgressNotification {\n type: NotificationType.RequestObservabilityEvent;\n requestId: string;\n operation: string;\n event: ObservabilityEvent;\n}\n\nexport enum ObservabilityEventType {\n HttpFetchStart = \"http-fetch-start\",\n HttpFetchFinishError = \"http-fetch-finish-error\",\n HttpFetchFinishSuccess = \"http-fetch-finish-success\",\n DbQueryStart = \"db-query-start\",\n DbQueryFinishSuccess = \"db-query-finish-success\",\n DbQueryFinishError = \"db-query-finish-error\",\n RequestStart = \"request-start\",\n RequestFinishSuccess = \"request-finish-success\",\n RequestFinishError = \"request-finish-error\",\n TaskStart = \"task-start\",\n TaskStop = \"task-stop\",\n TaskReset = \"task-reset\",\n ShepherdTaskResult = \"sheperd-task-result\",\n DeclareTaskDependency = \"declare-task-dependency\",\n CryptoStart = \"crypto-start\",\n CryptoFinishSuccess = \"crypto-finish-success\",\n CryptoFinishError = \"crypto-finish-error\",\n Message = \"message\",\n}\n\nexport type ObservabilityEvent =\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchStart;\n url: string;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishSuccess;\n url: string;\n status: number;\n }\n | {\n id: string;\n when: AbsoluteTime;\n type: ObservabilityEventType.HttpFetchFinishError;\n url: string;\n error: TalerErrorDetail;\n }\n | {\n type: ObservabilityEventType.DbQueryStart;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishSuccess;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.DbQueryFinishError;\n name: string;\n location: string;\n }\n | {\n type: ObservabilityEventType.RequestStart;\n }\n | {\n type: ObservabilityEventType.RequestFinishSuccess;\n durationMs: number;\n }\n | {\n type: ObservabilityEventType.RequestFinishError;\n }\n | {\n type: ObservabilityEventType.TaskStart;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskStop;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.TaskReset;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.DeclareTaskDependency;\n taskId: string;\n }\n | {\n type: ObservabilityEventType.CryptoStart;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishSuccess;\n operation: string;\n }\n | {\n type: ObservabilityEventType.CryptoFinishError;\n operation: string;\n }\n | {\n type: ObservabilityEventType.ShepherdTaskResult;\n resultType: string;\n }\n | {\n type: ObservabilityEventType.Message;\n contents: string;\n };\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n/**\n * This notification is required to signal UI that\n * the withdrawal operation changed the state.\n *\n * https://bugs.gnunet.org/view.php?id=8099\n */\nexport interface WithdrawalOperationTransitionNotification {\n type: NotificationType.WithdrawalOperationTransition;\n uri: string;\n}\n\nexport interface IdleNotification {\n type: NotificationType.Idle;\n}\n\nexport type WalletNotification =\n | BalanceChangeNotification\n | WithdrawalOperationTransitionNotification\n | BackupOperationErrorNotification\n | ExchangeStateTransitionNotification\n | TransactionStateTransitionNotification\n | TaskProgressNotification\n | RequestProgressNotification\n | IdleNotification;\n", "/*\n This file is part of GNU Taler\n (C) 2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n CancellationToken,\n ObservabilityEvent,\n} from \"./index.js\";\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n} from \"./http-common.js\";\nimport { ObservabilityEventType } from \"./notifications.js\";\nimport { getErrorDetailFromException } from \"./errors.js\";\n\n/**\n * Observability sink can be passed into various operations (HTTP requests, DB access)\n * to do structured logging within a particular context (task, request, ...).\n */\nexport interface ObservabilityContext {\n observe(evt: ObservabilityEvent): void;\n}\n\nlet seqId = 1000;\n\nexport class ObservableHttpClientLibrary implements HttpRequestLibrary {\n private readonly cancelatorById = new Map<string, CancellationToken.Source>();\n constructor(\n private impl: HttpRequestLibrary,\n private oc: ObservabilityContext,\n ) {}\n\n public cancelRequest(id: string): void {\n const cancelator = this.cancelatorById.get(id);\n if (!cancelator) return;\n cancelator.cancel();\n }\n\n async fetch(\n url: string,\n opt?: HttpRequestOptions | undefined,\n ): Promise<HttpResponse> {\n const id = `req-${seqId}`;\n seqId = seqId + 1;\n\n const cancelator = CancellationToken.create();\n if (opt?.cancellationToken) {\n opt.cancellationToken.onCancelled(cancelator.cancel);\n }\n this.cancelatorById.set(id, cancelator);\n\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchStart,\n url: url,\n });\n\n const optsWithCancel = opt ?? {};\n optsWithCancel.cancellationToken = cancelator.token;\n try {\n const res = await this.impl.fetch(url, optsWithCancel);\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishSuccess,\n url,\n status: res.status,\n });\n return res;\n } catch (e) {\n this.oc.observe({\n id,\n when: AbsoluteTime.now(),\n type: ObservabilityEventType.HttpFetchFinishError,\n url,\n error: getErrorDetailFromException(e),\n });\n throw e;\n } finally {\n this.cancelatorById.delete(id);\n }\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 * Cross-platform timers.\n *\n * NodeJS and the browser use slightly different timer API,\n * this abstracts over these differences.\n */\n\n/**\n * Imports.\n */\nimport { Logger, Duration } from \"@gnu-taler/taler-util\";\n\nconst logger = new Logger(\"timer.ts\");\n\n/**\n * Cancelable timer.\n */\nexport interface TimerHandle {\n clear(): void;\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void;\n}\n\nclass IntervalHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearInterval(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\nclass TimeoutHandle {\n constructor(public h: any) {}\n\n clear(): void {\n clearTimeout(this.h);\n }\n\n /**\n * Make sure the event loop exits when the timer is the\n * only event left. Has no effect in the browser.\n */\n unref(): void {\n if (typeof this.h === \"object\" && \"unref\" in this.h) {\n this.h.unref();\n }\n }\n}\n\n/**\n * Get a performance counter in nanoseconds.\n */\nexport const performanceNow: () => bigint = (() => {\n // @ts-ignore\n if (typeof process !== \"undefined\" && process.hrtime) {\n return () => {\n return process.hrtime.bigint();\n };\n }\n\n // @ts-ignore\n if (typeof performance !== \"undefined\") {\n // @ts-ignore\n return () => BigInt(Math.floor(performance.now() * 1000)) * BigInt(1000);\n }\n\n return () => BigInt(new Date().getTime()) * BigInt(1000) * BigInt(1000);\n})();\n\nconst nullTimerHandle = {\n clear() {\n // do nothing\n return;\n },\n unref() {\n // do nothing\n return;\n },\n};\n\n/**\n * Group of timers that can be destroyed at once.\n */\nexport interface TimerAPI {\n after(delayMs: number, callback: () => void): TimerHandle;\n every(delayMs: number, callback: () => void): TimerHandle;\n}\n\nexport class SetTimeoutTimerAPI implements TimerAPI {\n /**\n * Call a function every time the delay given in milliseconds passes.\n */\n every(delayMs: number, callback: () => void): TimerHandle {\n return new IntervalHandle(setInterval(callback, delayMs));\n }\n\n /**\n * Call a function after the delay given in milliseconds passes.\n */\n after(delayMs: number, callback: () => void): TimerHandle {\n return new TimeoutHandle(setTimeout(callback, delayMs));\n }\n}\n\nexport const timer = new SetTimeoutTimerAPI();\n\n/**\n * Implementation of [[TimerGroup]] using setTimeout\n */\nexport class TimerGroup {\n private stopped = false;\n\n private readonly timerMap: { [index: number]: TimerHandle } = {};\n\n private idGen = 1;\n\n constructor(public readonly timerApi: TimerAPI) {}\n\n stopCurrentAndFutureTimers(): void {\n this.stopped = true;\n for (const x in this.timerMap) {\n if (!this.timerMap.hasOwnProperty(x)) {\n continue;\n }\n this.timerMap[x].clear();\n delete this.timerMap[x];\n }\n }\n\n resolveAfter(delayMs: Duration): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (delayMs.d_ms !== \"forever\") {\n this.after(delayMs.d_ms, () => {\n resolve();\n });\n }\n });\n }\n\n after(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.after(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\n }\n\n every(delayMs: number, callback: () => void): TimerHandle {\n if (this.stopped) {\n logger.warn(\"dropping timer since timer group is stopped\");\n return nullTimerHandle;\n }\n const h = this.timerApi.every(delayMs, callback);\n const myId = this.idGen++;\n this.timerMap[myId] = h;\n\n const tm = this.timerMap;\n\n return {\n clear() {\n h.clear();\n delete tm[myId];\n },\n unref() {\n h.unref();\n },\n };\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\nimport {\n TransactionType,\n PaymentStatus,\n TransactionMajorState,\n} from \"./transactions-types.js\";\nimport { RefreshReason } from \"./wallet-types.js\";\n\n/**\n * Sample transaction list entries.\n */\nexport const sampleWalletCoreTransactions = [\n {\n type: TransactionType.Payment,\n txState: {\n major: TransactionMajorState.Done,\n },\n amountRaw: \"KUDOS:10\",\n amountEffective: \"KUDOS:10\",\n totalRefundRaw: \"KUDOS:0\",\n totalRefundEffective: \"KUDOS:0\",\n status: PaymentStatus.Paid,\n refundPending: undefined,\n posConfirmation: undefined,\n pending: false,\n refunds: [],\n timestamp: {\n t_s: 1677166045,\n },\n transactionId:\n \"txn:payment:NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n proposalId: \"NRRD9KJ8970P5HDAGPW1MBA6HZHB1XMFKF5M3CNR6WA0GT98DHY0\",\n info: {\n merchant: {\n name: \"woocommerce\",\n website: \"woocommerce.demo.taler.net\",\n email: \"foo@example.com\",\n address: {},\n jurisdiction: {},\n },\n orderId: \"wc_order_KQCRldghIgDRB-100\",\n products: [\n {\n description: \"Using GCC\",\n quantity: 1,\n price: \"KUDOS:10\",\n product_id: \"28\",\n },\n ],\n summary: \"WooTalerShop #100\",\n contractTermsHash:\n \"A02E1M6ARWKBJ87K2TV4S6WQ4X5YH7BRVR6MYCHCTVAED8MBXTFD6PZ5Q50Y7Z5K18PYBTDA14NQ56XPC1VCQW1EVRWTSB7ZYT65B5G\",\n fulfillmentUrl:\n \"https://woocommerce.demo.taler.net/?wc-api=wc_gnutaler_gateway&order_id=wc_order_KQCRldghIgDRB-100\",\n },\n refundQueryActive: false,\n frozen: false,\n },\n {\n type: TransactionType.Refresh,\n txState: {\n major: TransactionMajorState.Pending,\n },\n refreshReason: RefreshReason.PayMerchant,\n amountEffective: \"KUDOS:0\",\n amountRaw: \"KUDOS:0\",\n refreshInputAmount: \"KUDOS:1.5\",\n refreshOutputAmount: \"KUDOS:1.4\",\n originatingTransactionId:\n \"txn:proposal:ZCGBZFE8KZ1CBYYGSC3ZC8E40KVJWV16VYCTHGC8FFSVZ5HD24BG\",\n pending: true,\n timestamp: {\n t_s: 1681376214,\n },\n transactionId:\n \"txn:refresh:QQSWHHXCRQ269G0E3RW14JMC6F7NFDYDW26NSFHRTXSKDS6CMCZ0\",\n frozen: false,\n error: {\n code: 7029,\n when: {\n t_ms: 1681376473665,\n },\n hint: \"Error (WALLET_REFRESH_GROUP_INCOMPLETE)\",\n numErrors: 1,\n errors: [\n {\n code: 7001,\n when: {\n t_ms: 1681376473189,\n },\n hint: \"unexpected exception (message: exchange wire fee signature invalid)\",\n stack:\n \" at validateWireInfo (../taler-wallet-core-qjs.mjs:23166)\\n\",\n },\n ],\n },\n },\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 { AbsoluteTime, Codec, codecForString } from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport {\n ObservableMap,\n browserStorageMap,\n localStorageMap,\n memoryMap,\n} from \"../utils/observable.js\";\n\ndeclare const opaque_StorageKey: unique symbol;\n\nexport type StorageKey<Key> = {\n id: string;\n [opaque_StorageKey]: true;\n codec: Codec<Key>;\n};\n\nexport function buildStorageKey<Key>(\n name: string,\n codec: Codec<Key>,\n): StorageKey<Key>;\nexport function buildStorageKey(name: string): StorageKey<string>;\nexport function buildStorageKey<Key = string>(\n name: string,\n codec?: Codec<Key>,\n): StorageKey<Key> {\n return {\n id: name,\n codec: codec ?? (codecForString() as Codec<Key>),\n } as StorageKey<Key>;\n}\n\nexport interface StorageState<Type = string> {\n value?: Type;\n update: (s: Type) => void;\n reset: () => void;\n}\n\nconst supportLocalStorage = typeof window !== \"undefined\";\nconst supportBrowserStorage =\n typeof chrome !== \"undefined\" && typeof chrome.storage !== \"undefined\";\n\n/**\n * Build setting storage\n */\nconst storage: ObservableMap<string, string> = (function buildStorage() {\n if (supportBrowserStorage) {\n //browser storage is like local storage but\n //with app sync.\n //Works for almost every browser\n if (supportLocalStorage) {\n return browserStorageMap(localStorageMap());\n } else {\n // service worker doesn't have local storage\n return browserStorageMap(memoryMap<string>());\n }\n } else if (supportLocalStorage) {\n // fallback if browser is too old\n return localStorageMap();\n } else {\n // new need to save settings somewhere\n return memoryMap<string>();\n }\n})();\n//with initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//without initial value\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n): StorageState<Type>;\n// impl\nexport function useLocalStorage<Type = string>(\n key: StorageKey<Type>,\n defaultValue?: Type,\n): StorageState<Type> {\n const current = convert(storage.get(key.id), key, defaultValue);\n\n const [_, setStoredValue] = useState(AbsoluteTime.now().t_ms);\n\n useEffect(() => {\n return storage.onUpdate(key.id, () => {\n // const newValue = storage.get(key.id);\n setStoredValue(AbsoluteTime.now().t_ms);\n });\n }, [key.id]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key.id);\n } else {\n storage.set(\n key.id,\n key.codec ? JSON.stringify(value) : (value as string),\n );\n }\n };\n\n return {\n value: current,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n\nfunction convert<Type>(updated: string | undefined, key: StorageKey<Type>, defaultValue?: Type): Type | undefined {\n if (updated === undefined) return defaultValue; //optional\n try {\n return key.codec.decode(JSON.parse(updated));\n } catch (e) {\n //decode error\n return defaultValue;\n }\n}\n", "import { isArrayBufferView } from \"util/types\";\n\nexport type ObservableMap<K, V> = Map<K, V> & {\n onAnyUpdate: (callback: () => void) => () => void;\n onUpdate: (key: string, callback: () => void) => () => void;\n};\n\n//FIXME: allow different type for different properties\nexport function memoryMap<T>(\n backend: Map<string, T> = new Map<string, T>(),\n): ObservableMap<string, T> {\n const obs = new EventTarget();\n const theMemoryMap: ObservableMap<string, T> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n return () => {\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const result = backend.delete(key);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return result;\n },\n set: (key: string, value: T) => {\n backend.set(key, value);\n //@ts-ignore\n theMemoryMap.size = backend.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theMemoryMap;\n },\n clear: () => {\n backend.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: backend.entries.bind(backend),\n forEach: backend.forEach.bind(backend),\n get: backend.get.bind(backend),\n has: backend.has.bind(backend),\n keys: backend.keys.bind(backend),\n size: backend.size,\n values: backend.values.bind(backend),\n [Symbol.iterator]: backend[Symbol.iterator],\n [Symbol.toStringTag]: \"theMemoryMap\",\n };\n return theMemoryMap;\n}\n\n//FIXME: change this implementation to match the\n// browser storage. instead of creating a sync implementation\n// of observable map it should reuse the memoryMap and\n// sync the state with local storage\nexport function localStorageMap(): ObservableMap<string, string> {\n const obs = new EventTarget();\n const theLocalStorageMap: ObservableMap<string, string> = {\n onAnyUpdate: (handler) => {\n obs.addEventListener(`update`, handler);\n obs.addEventListener(`clear`, handler);\n window.addEventListener(\"storage\", handler);\n return () => {\n window.removeEventListener(\"storage\", handler);\n obs.removeEventListener(`update`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n onUpdate: (key, handler) => {\n obs.addEventListener(`update-${key}`, handler);\n obs.addEventListener(`clear`, handler);\n function handleStorageEvent(ev: StorageEvent) {\n if (ev.key === null || ev.key === key) {\n handler();\n }\n }\n window.addEventListener(\"storage\", handleStorageEvent);\n return () => {\n window.removeEventListener(\"storage\", handleStorageEvent);\n obs.removeEventListener(`update-${key}`, handler);\n obs.removeEventListener(`clear`, handler);\n };\n },\n delete: (key: string) => {\n const exists = localStorage.getItem(key) !== null;\n localStorage.removeItem(key);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return exists;\n },\n set: (key: string, v: string) => {\n localStorage.setItem(key, v);\n //@ts-ignore\n theLocalStorageMap.size = localStorage.length;\n obs.dispatchEvent(new Event(`update-${key}`));\n obs.dispatchEvent(new Event(`update`));\n return theLocalStorageMap;\n },\n clear: () => {\n localStorage.clear();\n obs.dispatchEvent(new Event(`clear`));\n },\n entries: (): IterableIterator<[string, string]> => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: [key, item] };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n forEach: (cb) => {\n for (let index = 0; index < localStorage.length; index++) {\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n cb(key, item, theLocalStorageMap);\n }\n },\n get: (key: string) => {\n const item = localStorage.getItem(key);\n if (item === null) return undefined;\n return item;\n },\n has: (key: string) => {\n return localStorage.getItem(key) === null;\n },\n keys: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n index = index + 1;\n return { done: false, value: key };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n size: localStorage.length,\n values: () => {\n let index = 0;\n const total = localStorage.length;\n return {\n next() {\n if (index === total) return { done: true, value: undefined };\n const key = localStorage.key(index);\n if (key === null) {\n //we are going from 0 until last, this should not happen\n throw Error(\"key cant be null\");\n }\n const item = localStorage.getItem(key);\n if (item === null) {\n //the key exist, this should not happen\n throw Error(\"value cant be null\");\n }\n index = index + 1;\n return { done: false, value: item };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n },\n [Symbol.iterator]: function (): IterableIterator<[string, string]> {\n return theLocalStorageMap.entries();\n },\n [Symbol.toStringTag]: \"theLocalStorageMap\",\n };\n return theLocalStorageMap;\n}\n\nconst isFirefox =\n typeof (window as any) !== \"undefined\" &&\n typeof (window as any)[\"InstallTrigger\"] !== \"undefined\";\n\nasync function getAllContent() {\n //Firefox and Chrome has different storage api\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.get();\n } else {\n return chrome.storage.local.get();\n }\n}\n\nasync function updateContent(obj: Record<string, any>) {\n if (isFirefox) {\n // @ts-ignore\n return browser.storage.local.set(obj);\n } else {\n return chrome.storage.local.set(obj);\n }\n}\ntype Changes = { [key: string]: { oldValue?: any; newValue?: any } };\nfunction onBrowserStorageUpdate(cb: (changes: Changes) => void): void {\n if (isFirefox) {\n // @ts-ignore\n browser.storage.local.onChanged.addListener(cb);\n } else {\n chrome.storage.local.onChanged.addListener(cb);\n }\n}\n\nexport function browserStorageMap(\n backend: ObservableMap<string, string>,\n): ObservableMap<string, string> {\n getAllContent().then(content => {\n Object.entries(content ?? {}).forEach(([k, v]) => {\n backend.set(k, v as string);\n });\n })\n\n backend.onAnyUpdate(async () => {\n const result: Record<string, string> = {};\n for (const [key, value] of backend.entries()) {\n result[key] = value;\n }\n await updateContent(result);\n });\n\n onBrowserStorageUpdate((changes) => {\n //another chrome instance made the change\n const changedItems = Object.keys(changes);\n if (changedItems.length === 0) {\n backend.clear();\n } else {\n for (const key of changedItems) {\n if (!changes[key].newValue) {\n backend.delete(key);\n } else {\n if (changes[key].newValue !== changes[key].oldValue) {\n backend.set(key, changes[key].newValue);\n }\n }\n }\n }\n });\n\n return backend;\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 {\n StorageState,\n buildStorageKey,\n useLocalStorage,\n} from \"./useLocalStorage.js\";\n\nconst MIN_LANG_COVERAGE_THRESHOLD = 90;\n/**\n * choose the best from the browser config based on the completeness\n * on the translation\n */\nfunction getBrowserLang(completeness: Record<string, number>): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n\n if (window.navigator.language) {\n if (completeness[window.navigator.language] >= MIN_LANG_COVERAGE_THRESHOLD) {\n return window.navigator.language\n }\n }\n if (window.navigator.languages) {\n const match = Object.entries(completeness).filter(([code, value]) => {\n if (value < MIN_LANG_COVERAGE_THRESHOLD) return false; //do not consider langs below 90%\n return window.navigator.languages.findIndex(l => l.startsWith(code)) !== -1\n }).map(([code, value]) => ({ code, value }))\n\n if (match.length > 0) {\n let max = match[0]\n match.forEach(v => {\n if (v.value > max.value) {\n max = v\n }\n })\n return max.code\n }\n };\n\n return undefined;\n}\n\nconst langPreferenceKey = buildStorageKey(\"lang-preference\");\n\nexport function useLang(initial: string | undefined, completeness: Record<string, number>): Required<StorageState> {\n const defaultValue = (getBrowserLang(completeness) || initial || \"en\").substring(0, 2);\n return useLocalStorage(langPreferenceKey, defaultValue);\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\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ObservableMap, memoryMap } from \"../utils/observable.js\";\nimport { StorageKey, StorageState } from \"./useLocalStorage.js\";\n\nconst storage: ObservableMap<string, any> = memoryMap<any>();\n\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue: Type,\n): Required<StorageState<Type>>;\n//with initial value\nexport function useMemoryStorage<Type = string>(\n key: string,\n): StorageState<Type>;\n// impl\nexport function useMemoryStorage<Type = string>(\n key: string,\n defaultValue?: Type,\n): StorageState<Type> {\n const [storedValue, setStoredValue] = useState<Type | undefined>(\n (): Type | undefined => {\n const prev = storage.get(key);\n return prev === undefined ? defaultValue : prev;\n },\n );\n\n useEffect(() => {\n return storage.onUpdate(key, () => {\n const newValue = storage.get(key);\n setStoredValue(newValue === undefined ? defaultValue : newValue);\n });\n }, [key]);\n\n const setValue = (value?: Type): void => {\n if (value === undefined) {\n storage.delete(key);\n } else {\n storage.set(key, value);\n }\n };\n\n return {\n value: storedValue,\n update: setValue,\n reset: () => {\n setValue(defaultValue);\n },\n };\n}\n", "import {\n AbsoluteTime,\n Duration,\n OperationAlternative,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ButtonHandler, OnOperationFailReturnType, OnOperationSuccesReturnType } from \"../components/Button.js\";\nimport {\n InternationalizationAPI,\n memoryMap,\n useTranslationContext,\n} from \"../index.browser.js\";\n\nexport type NotificationMessage = ErrorNotification | InfoNotification;\n\nexport interface ErrorNotification {\n type: \"error\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n description?: TranslatedString;\n debug?: any;\n when: AbsoluteTime;\n}\nexport interface InfoNotification {\n type: \"info\";\n title: TranslatedString;\n ack?: boolean;\n timeout?: boolean;\n when: AbsoluteTime;\n}\n\nconst storage = memoryMap<Map<string, NotificationMessage>>();\nconst NOTIFICATION_KEY = \"notification\";\n\nexport const GLOBAL_NOTIFICATION_TIMEOUT = Duration.fromSpec({\n seconds: 5,\n});\n\nfunction updateInStorage(n: NotificationMessage) {\n const h = hash(n);\n const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = new Map(mem);\n newState.set(h, n);\n storage.set(NOTIFICATION_KEY, newState);\n}\n\nexport function notify(notif: NotificationMessage): void {\n const currentState: Map<string, NotificationMessage> =\n storage.get(NOTIFICATION_KEY) ?? new Map();\n const newState = currentState.set(hash(notif), notif);\n\n if (GLOBAL_NOTIFICATION_TIMEOUT.d_ms !== \"forever\") {\n setTimeout(() => {\n notif.timeout = true;\n updateInStorage(notif);\n }, GLOBAL_NOTIFICATION_TIMEOUT.d_ms);\n }\n\n storage.set(NOTIFICATION_KEY, newState);\n}\nexport function notifyError(\n title: TranslatedString,\n description: TranslatedString | undefined,\n debug?: any,\n) {\n notify({\n type: \"error\" as const,\n title,\n description,\n debug,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyException(title: TranslatedString, ex: Error) {\n notify({\n type: \"error\" as const,\n title,\n description: ex.message as TranslatedString,\n debug: ex.stack,\n when: AbsoluteTime.now(),\n });\n}\nexport function notifyInfo(title: TranslatedString) {\n notify({\n type: \"info\" as const,\n title,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type Notification = {\n message: NotificationMessage;\n acknowledge: () => void;\n};\n\nexport function useNotifications(): Notification[] {\n const [, setLastUpdate] = useState<number>();\n const value = storage.get(NOTIFICATION_KEY) ?? new Map();\n\n useEffect(() => {\n return storage.onUpdate(NOTIFICATION_KEY, () => {\n setLastUpdate(Date.now())\n // const mem = storage.get(NOTIFICATION_KEY) ?? new Map();\n // setter(structuredClone(mem));\n });\n });\n\n return Array.from(value.values()).map((message, idx) => {\n return {\n message,\n acknowledge: () => {\n message.ack = true;\n updateInStorage(message);\n },\n };\n });\n}\n\nfunction hashCode(str: string): string {\n if (str.length === 0) return \"0\";\n let hash = 0;\n let chr;\n for (let i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash.toString(16);\n}\n\nfunction hash(msg: NotificationMessage): string {\n let str = (msg.type + \":\" + msg.title) as string;\n if (msg.type === \"error\") {\n if (msg.description) {\n str += \":\" + msg.description;\n }\n if (msg.debug) {\n str += \":\" + msg.debug;\n }\n }\n return hashCode(str);\n}\n\nfunction errorMap<T extends OperationFail<unknown>>(\n resp: T,\n map: (d: T[\"case\"]) => TranslatedString,\n): void {\n notify({\n type: \"error\",\n title: map(resp.case),\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n}\n\nexport type ErrorNotificationHandler = (\n cb: (notify: typeof errorMap) => Promise<void>,\n) => Promise<void>;\n\n/**\n * @deprecated use useLocalNotificationHandler\n *\n * @returns\n */\nexport function useLocalNotification(): [\n Notification | undefined,\n (n: NotificationMessage) => void,\n ErrorNotificationHandler,\n] {\n const { i18n } = useTranslationContext();\n\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n async function errorHandling(cb: (notify: typeof errorMap) => Promise<void>) {\n try {\n return await cb(errorMap);\n } catch (error: unknown) {\n if (error instanceof TalerError) {\n notify(buildUnifiedRequestErrorMessage(i18n, error));\n } else {\n notifyError(\n i18n.str`Operation failed, please report`,\n (error instanceof Error\n ? error.message\n : JSON.stringify(error)) as TranslatedString,\n );\n }\n }\n }\n return [notif, setter, errorHandling];\n}\n\ntype HandlerMaker = <T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess: OnOperationSuccesReturnType<T>,\n onOperationFail?: OnOperationFailReturnType<T>,\n onOperationComplete?: () => void,\n) => ButtonHandler<T, A, B>;\n\nexport function useLocalNotificationHandler(): [\n Notification | undefined,\n HandlerMaker,\n (n: NotificationMessage) => void,\n] {\n const [value, setter] = useState<NotificationMessage>();\n const notif = !value\n ? undefined\n : {\n message: value,\n acknowledge: () => {\n setter(undefined);\n },\n };\n\n function makeHandler<T extends OperationResult<A, B>, A, B>(\n onClick: () => Promise<T | undefined>,\n onOperationSuccess:OnOperationSuccesReturnType<T>,\n onOperationFail?: OnOperationFailReturnType<T>,\n onOperationComplete?: () => void,\n ): ButtonHandler<T, A, B> {\n return {\n onClick,\n onNotification: setter,\n onOperationFail,\n onOperationSuccess,\n onOperationComplete,\n };\n }\n\n return [notif, makeHandler, setter];\n}\n\nexport function buildUnifiedRequestErrorMessage(\n i18n: InternationalizationAPI,\n cause: TalerError,\n): ErrorNotification {\n let result: ErrorNotification;\n switch (cause.errorDetail.code) {\n case TalerErrorCode.GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Request cancelled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n result = {\n type: \"error\",\n title: i18n.str`Request throttled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n result = {\n type: \"error\",\n title: i18n.str`Malformed response`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Network error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected request error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n default: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n }\n return result;\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport enum ErrorType {\n CLIENT,\n SERVER,\n UNREADABLE,\n TIMEOUT,\n UNEXPECTED,\n}\n\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 * @deprecated do not use it, it will be removed\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 secret-token:${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 || options.contentType === \"json\" ? \"application/json\" : \"text/plain\";\n\n if (options.talerAmlOfficerSignature) {\n requestHeaders[\"Taler-AML-Officer-Signature\"] =\n options.talerAmlOfficerSignature;\n }\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 const requestPreventCache = options.preventCache ?? false;\n const requestPreventCors = options.preventCors ?? false;\n\n const validURL = validateURL(baseUrl, endpoint);\n\n if (!validURL) {\n const error: HttpResponseUnexpectedError = {\n info: {\n url: `${baseUrl}${endpoint}`,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `invalid URL: \"${baseUrl}${endpoint}\"`,\n };\n throw new RequestError(error)\n }\n\n Object.entries(requestParams).forEach(([key, value]) => {\n validURL.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 const error: HttpResponseUnexpectedError = {\n info: {\n url: validURL.href,\n payload: {},\n hasToken: !!options.token,\n status: 0,\n options,\n },\n type: ErrorType.UNEXPECTED,\n exception: undefined,\n loading: false,\n message: `unsupported request body type: \"${typeof requestBody}\"`,\n };\n throw new RequestError(error)\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(validURL.href, {\n headers: requestHeaders,\n method: requestMethod,\n credentials: \"omit\",\n mode: requestPreventCors ? \"no-cors\" : \"cors\",\n cache: requestPreventCache ? \"no-cache\" : \"default\",\n body: payload,\n signal: controller.signal,\n });\n } catch (ex) {\n const info: RequestInfo = {\n payload,\n url: validURL.href,\n hasToken: !!options.token,\n status: 0,\n options,\n };\n\n if (ex instanceof Error) {\n if (ex.message === \"HTTP_REQUEST_TIMEOUT\") {\n const error: HttpRequestTimeoutError = {\n info,\n type: ErrorType.TIMEOUT,\n message: \"request timeout\",\n };\n throw new RequestError(error);\n }\n }\n\n const error: HttpResponseUnexpectedError = {\n info,\n type: ErrorType.UNEXPECTED,\n exception: ex,\n loading: false,\n message: (ex instanceof Error ? ex.message : \"\"),\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 validURL.href,\n payload,\n !!options.token,\n options,\n );\n return result;\n } else {\n const dataTxt = await response.text();\n const error = buildRequestFailed(\n validURL.href,\n dataTxt,\n response.status,\n payload,\n options,\n );\n throw new RequestError(error);\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponse<T, ErrorDetail> =\n | HttpResponseOk<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponsePaginated<T, ErrorDetail> =\n | HttpResponseOkPaginated<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestInfo {\n url: string;\n hasToken: boolean;\n payload: any;\n status: number;\n options: RequestOptions;\n}\n\ninterface HttpResponseLoading<T> {\n ok?: false;\n loading: true;\n clientError?: false;\n serverError?: false;\n\n data?: T;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface WithPagination {\n loadMore: () => void;\n loadMorePrev: () => void;\n isReachingEnd?: boolean;\n isReachingStart?: boolean;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport type HttpError<ErrorDetail> =\n | HttpRequestTimeoutError\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError;\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface HttpResponseServerError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.SERVER;\n payload: ErrorDetail;\n status: HttpStatusCode;\n message: string;\n info: RequestInfo;\n}\ninterface HttpRequestTimeoutError {\n ok?: false;\n loading?: false;\n type: ErrorType.TIMEOUT;\n\n info: RequestInfo;\n\n message: string;\n}\ninterface HttpResponseClientError<ErrorDetail> {\n ok?: false;\n loading?: false;\n type: ErrorType.CLIENT;\n\n info: RequestInfo;\n status: HttpStatusCode;\n payload: ErrorDetail;\n message: string;\n}\n\ninterface HttpResponseUnexpectedError {\n ok?: false;\n loading: false;\n type: ErrorType.UNEXPECTED;\n\n info: RequestInfo;\n status?: HttpStatusCode;\n exception: unknown;\n message: string;\n}\n\ninterface HttpResponseUnreadableError {\n ok?: false;\n loading: false;\n type: ErrorType.UNREADABLE;\n\n info: RequestInfo;\n status: HttpStatusCode;\n exception: unknown;\n body: string;\n message: string;\n}\n/**\n * @deprecated do not use it, it will be removed\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\n/**\n * @deprecated do not use it, it will be removed\n */\nexport interface RequestOptions {\n method?: Methods;\n token?: string;\n basicAuth?: {\n username: string;\n password: string;\n };\n preventCache?: boolean;\n preventCors?: boolean;\n data?: any;\n params?: unknown;\n timeout?: number;\n contentType?: \"text\" | \"json\";\n talerAmlOfficerSignature?: string;\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nasync function buildRequestOk<T>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n options: RequestOptions,\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 options,\n status: response.status,\n },\n };\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nexport function buildRequestFailed<ErrorDetail>(\n url: string,\n dataTxt: string,\n status: number,\n payload: any,\n maybeOptions?: RequestOptions,\n):\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnreadableError\n | HttpResponseUnexpectedError {\n const options = maybeOptions ?? {};\n const info: RequestInfo = {\n payload,\n url,\n hasToken: !!options.token,\n options,\n status: status || 0,\n };\n\n // const dataTxt = await response.text();\n try {\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n const errorCode = !data || !data.code ? \"\" : `(code: ${data.code})`;\n const errorHint =\n !data || !data.hint ? \"Not hint.\" : `${data.hint} ${errorCode}`;\n\n if (status && status >= 400 && status < 500) {\n const message =\n data === undefined\n ? `Client error (${status}) without data.`\n : errorHint;\n\n const error: HttpResponseClientError<ErrorDetail> = {\n type: ErrorType.CLIENT,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n if (status && status >= 500 && status < 600) {\n const message =\n data === undefined\n ? `Server error (${status}) without data.`\n : errorHint;\n const error: HttpResponseServerError<ErrorDetail> = {\n type: ErrorType.SERVER,\n status,\n info,\n message,\n payload: data,\n };\n return error;\n }\n return {\n info,\n loading: false,\n type: ErrorType.UNEXPECTED,\n status,\n exception: undefined,\n message: `http status code not handled: ${status}`,\n };\n } catch (ex) {\n const error: HttpResponseUnreadableError = {\n info,\n loading: false,\n status,\n type: ErrorType.UNREADABLE,\n exception: ex,\n body: dataTxt,\n message: \"Could not parse body as json\",\n };\n\n return error;\n }\n}\n\n/**\n * @deprecated do not use it, it will be removed\n */\nfunction validateURL(baseUrl: string, endpoint: string): URL | undefined {\n try {\n return new URL(`${baseUrl}${endpoint}`)\n } catch (ex) {\n return undefined\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 * Imports.\n */\nimport {\n Logger,\n RequestThrottler,\n TalerErrorCode,\n TalerError,\n Duration,\n} from \"@gnu-taler/taler-util\";\n\nimport {\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n Headers,\n getDefaultHeaders,\n encodeBody,\n DEFAULT_REQUEST_TIMEOUT_MS,\n HttpLibArgs,\n} from \"@gnu-taler/taler-util/http\";\n\nconst logger = new Logger(\"browserHttpLib\");\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n * \n * @deprecated use BrowserFetchHttpLib\n */\nexport class BrowserHttpLibDepreacted implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n let myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n return new Promise<HttpResponse>((resolve, reject) => {\n const myRequest = new XMLHttpRequest();\n\n myRequest.onerror = (e) => {\n logger.error(\"http request error\");\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"Could not make request\",\n ),\n );\n };\n\n myRequest.open(requestMethod, requestUrl);\n\n let timeoutId: any | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n myRequest.abort();\n reject(\n TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `request to ${requestUrl} timed out`,\n ),\n );\n }, requestTimeout.d_ms);\n }\n\n Object.keys(requestHeadersMap).forEach((headerName) => {\n myRequest.setRequestHeader(headerName, requestHeadersMap[headerName]);\n });\n\n myRequest.responseType = \"arraybuffer\";\n myRequest.send(myBody);\n\n myRequest.addEventListener(\"readystatechange\", (e) => {\n if (myRequest.readyState === XMLHttpRequest.DONE) {\n if (myRequest.status === 0) {\n const exc = TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestUrl,\n requestMethod,\n },\n \"HTTP request failed (status 0, maybe URI scheme was wrong?)\",\n );\n reject(exc);\n return;\n }\n const makeText = async (): Promise<string> => {\n const td = new TextDecoder();\n return td.decode(myRequest.response);\n };\n let responseJson: unknown = undefined;\n const makeJson = async (): Promise<any> => {\n if (responseJson === undefined) {\n try {\n const td = new TextDecoder();\n const responseString = td.decode(myRequest.response);\n responseJson = JSON.parse(responseString);\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: myRequest.status,\n },\n \"Invalid JSON from HTTP response\",\n );\n }\n return responseJson;\n };\n\n const headers = myRequest.getAllResponseHeaders();\n const arr = headers.trim().split(/[\\r\\n]+/);\n\n // Create a map of header names to values\n const headerMap: Headers = new Headers();\n arr.forEach(function (line) {\n const parts = line.split(\": \");\n const headerName = parts.shift();\n if (!headerName) {\n logger.warn(\"skipping invalid header\");\n return;\n }\n const value = parts.join(\": \");\n headerMap.set(headerName, value);\n });\n const resp: HttpResponse = {\n requestUrl: requestUrl,\n status: myRequest.status,\n headers: headerMap,\n requestMethod: requestMethod,\n json: makeJson,\n text: makeText,\n bytes: async () => myRequest.response,\n };\n resolve(resp);\n }\n });\n });\n }\n\n get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"GET\",\n ...opt,\n });\n }\n\n postJson(\n url: string,\n body: any,\n opt?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n return this.fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n ...opt,\n });\n }\n\n stop(): void {\n // Nothing to do\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 * Imports.\n */\nimport {\n Duration,\n RequestThrottler,\n TalerError,\n TalerErrorCode\n} from \"@gnu-taler/taler-util\";\n\nimport {\n DEFAULT_REQUEST_TIMEOUT_MS,\n Headers,\n HttpLibArgs,\n HttpRequestLibrary,\n HttpRequestOptions,\n HttpResponse,\n encodeBody,\n getDefaultHeaders,\n} from \"@gnu-taler/taler-util/http\";\n\n/**\n * An implementation of the [[HttpRequestLibrary]] using the\n * browser's XMLHttpRequest.\n */\nexport class BrowserFetchHttpLib implements HttpRequestLibrary {\n private throttle = new RequestThrottler();\n private throttlingEnabled = true;\n private requireTls = false;\n\n public constructor(args?: HttpLibArgs) {\n this.throttlingEnabled = args?.enableThrottling ?? true;\n this.requireTls = args?.requireTls ?? false;\n }\n\n async fetch(\n requestUrl: string,\n options?: HttpRequestOptions,\n ): Promise<HttpResponse> {\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.body;\n const requestHeader = options?.headers;\n const requestTimeout =\n options?.timeout ?? Duration.fromMilliseconds(DEFAULT_REQUEST_TIMEOUT_MS);\n const requestCancel = options?.cancellationToken;\n const requestRedirect = options?.redirect;\n\n const parsedUrl = new URL(requestUrl);\n if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED,\n {\n requestMethod,\n requestUrl,\n throttleStats: this.throttle.getThrottleStats(requestUrl),\n },\n `request to origin ${parsedUrl.origin} was throttled`,\n );\n }\n if (this.requireTls && parsedUrl.protocol !== \"https:\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_NETWORK_ERROR,\n {\n requestMethod: requestMethod,\n requestUrl: requestUrl,\n },\n `request to ${parsedUrl.origin} is not possible with protocol ${parsedUrl.protocol}`,\n );\n }\n\n const myBody: ArrayBuffer | undefined =\n requestMethod === \"POST\" || requestMethod === \"PUT\" || requestMethod === \"PATCH\"\n ? encodeBody(requestBody)\n : undefined;\n\n const requestHeadersMap = getDefaultHeaders(requestMethod);\n if (requestHeader) {\n Object.entries(requestHeader).forEach(([key, value]) => {\n if (value === undefined) return;\n requestHeadersMap[key] = value\n })\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (requestTimeout.d_ms !== \"forever\") {\n timeoutId = setTimeout(() => {\n controller.abort(TalerErrorCode.GENERIC_TIMEOUT);\n }, requestTimeout.d_ms);\n }\n if (requestCancel) {\n requestCancel.onCancelled(() => {\n controller.abort(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)\n });\n }\n\n try {\n const response = await fetch(requestUrl, {\n headers: requestHeadersMap,\n body: myBody,\n method: requestMethod,\n signal: controller.signal,\n redirect: requestRedirect\n });\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n const headerMap = new Headers();\n response.headers.forEach((value, key) => {\n headerMap.set(key, value);\n });\n return {\n headers: headerMap,\n status: response.status,\n requestMethod,\n requestUrl,\n json: makeJsonHandler(response, requestUrl, requestMethod),\n text: makeTextHandler(response, requestUrl, requestMethod),\n bytes: async () => (await response.blob()).arrayBuffer(),\n };\n } catch (e) {\n if (controller.signal) {\n throw TalerError.fromDetail(\n controller.signal.reason,\n {\n requestUrl,\n requestMethod,\n timeoutMs: requestTimeout.d_ms === \"forever\" ? 0 : requestTimeout.d_ms\n },\n `HTTP request failed.`,\n );\n }\n throw e;\n }\n }\n\n}\n\nfunction makeTextHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n return async function getTextFromResponse(): Promise<any> {\n let respText;\n try {\n respText = await response.text();\n } catch (e) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid text from HTTP response\",\n );\n }\n return respText;\n };\n}\n\nfunction makeJsonHandler(\n response: Response,\n requestUrl: string,\n requestMethod: string,\n) {\n let responseJson: unknown = undefined;\n return async function getJsonFromResponse(): Promise<any> {\n if (responseJson === undefined) {\n try {\n responseJson = await response.json();\n } catch (e) {\n const message = e instanceof Error ? `Invalid JSON from HTTP response: ${e.message}` : \"Invalid JSON from HTTP response\"\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n message,\n );\n }\n }\n if (responseJson === null || typeof responseJson !== \"object\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl,\n requestMethod,\n httpStatusCode: response.status,\n },\n \"Invalid JSON from HTTP response: null or not object\",\n );\n }\n return responseJson;\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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\ndeclare const __location: unique symbol;\n/**\n * special string that defined a location in the application\n *\n * this help to prevent wrong path\n */\nexport type AppLocation = string & {\n [__location]: true;\n};\n\nexport type EmptyObject = Record<string, never>;\n\nexport function urlPattern<\n T extends Record<string, string | undefined> = EmptyObject,\n>(pattern: RegExp, reverse: (p: T) => string): RouteDefinition<T> {\n const url = reverse as (p: T) => AppLocation;\n return {\n pattern: new RegExp(pattern),\n url,\n };\n}\n\n/**\n * defines a location in the app\n *\n * pattern: how a string will trigger this location\n * url(): how a state serialize to a location\n */\n\nexport type ObjectOf<T> = Record<string, T> | EmptyObject;\n\nexport type RouteDefinition<\n T extends ObjectOf<string | undefined> = EmptyObject,\n> = {\n pattern: RegExp;\n url: (p: T) => AppLocation;\n};\n\nconst nullRountDef = {\n pattern: new RegExp(/.*/),\n url: () => \"\" as AppLocation,\n};\nexport function buildNullRoutDefinition<\n T extends ObjectOf<string>,\n>(): RouteDefinition<T> {\n return nullRountDef;\n}\n\n/**\n * Search path in the pageList\n * get the values from the path found\n * add params from searchParams\n *\n * @param path\n * @param params\n */\nexport function findMatch<T extends ObjectOf<RouteDefinition>>(\n pagesMap: T,\n pageList: Array<keyof T>,\n path: string,\n params: Record<string, string[]>,\n): Location<T> | undefined {\n for (let idx = 0; idx < pageList.length; idx++) {\n const name = pageList[idx];\n const found = pagesMap[name].pattern.exec(path);\n if (found !== null) {\n const values = {} as Record<string, unknown>;\n\n if (found.groups !== undefined) {\n Object.entries(found.groups).forEach(([key, value]) => {\n values[key] = value;\n });\n }\n\n // @ts-expect-error values is a map string which is equivalent to the RouteParamsType\n return { name, parent: pagesMap, values, params };\n }\n }\n return undefined;\n}\n\n/**\n * get the type of the params of a location\n *\n */\ntype RouteParamsType<\n RouteType,\n Key extends keyof RouteType,\n> = RouteType[Key] extends RouteDefinition<infer ParamType> ? ParamType : never;\n\n/**\n * Helps to create a map of a type with the key\n */\ntype MapKeyValue<Type> = {\n [Key in keyof Type]: Key extends string\n ? {\n parent: Type;\n name: Key;\n values: RouteParamsType<Type, Key>;\n params: Record<string, string[]>;\n }\n : never;\n};\n\n/**\n * create a enumeration of value of a mapped type\n */\ntype EnumerationOf<T> = T[keyof T];\n\nexport type Location<T> = EnumerationOf<MapKeyValue<T>>;\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 { TalerBankIntegrationHttpClient, TalerCoreBankHttpClient, TalerRevenueHttpClient, TalerWireGatewayHttpClient } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { defaultRequestHandler } from \"../utils/request.js\";\n\ninterface Type {\n /**\n * @deprecated this show not be used\n */\n request: typeof defaultRequestHandler;\n bankCore: TalerCoreBankHttpClient,\n bankIntegration: TalerBankIntegrationHttpClient,\n bankWire: TalerWireGatewayHttpClient,\n bankRevenue: TalerRevenueHttpClient,\n}\n\nconst Context = createContext<Type>({ request: defaultRequestHandler } as any);\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\";\nimport { Locale } from \"date-fns\";\nimport {\n es as esLocale,\n enGB as enLocale,\n fr as frLocale,\n de as deLocale\n} from \"date-fns/locale\"\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 dateLocale: Locale,\n completeness: { [id in keyof typeof supportedLang]: number }\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};\n\nconst initial: Type = {\n lang: \"en\",\n supportedLang,\n changeLanguage: () => {\n // do not change anything\n },\n i18n,\n dateLocale: enLocale,\n completeness: {\n de: 0,\n en: 0,\n es: 0,\n fr: 0,\n it: 0,\n sv: 0,\n }\n};\nconst Context = createContext<Type>(initial);\n\ninterface Props {\n initial?: string;\n children: ComponentChildren;\n forceLang?: string;\n source: Record<string, any>;\n completeness?: Record<string, number>;\n}\n\n// Outmost UI wrapper.\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\n source,\n completeness: completenessProp\n}: Props): VNode => {\n const completeness = {\n en: 100,\n de: !completenessProp || !completenessProp[\"de\"] ? 0 : completenessProp[\"de\"],\n es: !completenessProp || !completenessProp[\"es\"] ? 0 : completenessProp[\"es\"],\n fr: !completenessProp || !completenessProp[\"fr\"] ? 0 : completenessProp[\"fr\"],\n it: !completenessProp || !completenessProp[\"it\"] ? 0 : completenessProp[\"it\"],\n sv: !completenessProp || !completenessProp[\"sv\"] ? 0 : completenessProp[\"sv\"],\n }\n const { value: lang, update: changeLanguage } = useLang(initial, completeness);\n\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 const dateLocale = lang === \"es\" ? esLocale :\n lang === \"fr\" ? frLocale :\n lang === \"de\" ? deLocale :\n enLocale;\n\n return h(Context.Provider, {\n value: { lang, changeLanguage, supportedLang, i18n, dateLocale, completeness },\n children,\n });\n};\n\nexport const useTranslationContext = (): Type => useContext(Context);\n", "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}", "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}", "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}", "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}", "import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\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}", "/**\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;", "import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\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 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 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 requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n var _options$step;\n\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start 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 start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\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 * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(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.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\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;", "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;", "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;", "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}", "export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n\n return target;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\n\nexport default function getMinutes(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var minutes = date.getMinutes();\n return minutes;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\n\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\n\nexport default function getSeconds(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var seconds = date.getSeconds();\n return seconds;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getFullYear();\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\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n function Setter() {\n _classCallCheck(this, Setter);\n\n _defineProperty(this, \"subPriority\", 0);\n }\n\n _createClass(Setter, [{\n key: \"validate\",\n value: function validate(_utcDate, _options) {\n return true;\n }\n }]);\n\n return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n _inherits(ValueSetter, _Setter);\n\n var _super = _createSuper(ValueSetter);\n\n function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n var _this;\n\n _classCallCheck(this, ValueSetter);\n\n _this = _super.call(this);\n _this.value = value;\n _this.validateValue = validateValue;\n _this.setValue = setValue;\n _this.priority = priority;\n\n if (subPriority) {\n _this.subPriority = subPriority;\n }\n\n return _this;\n }\n\n _createClass(ValueSetter, [{\n key: \"validate\",\n value: function validate(utcDate, options) {\n return this.validateValue(utcDate, this.value, options);\n }\n }, {\n key: \"set\",\n value: function set(utcDate, flags, options) {\n return this.setValue(utcDate, flags, this.value, options);\n }\n }]);\n\n return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n _inherits(DateToSystemTimezoneSetter, _Setter2);\n\n var _super2 = _createSuper(DateToSystemTimezoneSetter);\n\n function DateToSystemTimezoneSetter() {\n var _this2;\n\n _classCallCheck(this, DateToSystemTimezoneSetter);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n\n _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n\n return _this2;\n }\n\n _createClass(DateToSystemTimezoneSetter, [{\n key: \"set\",\n value: function set(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n }\n }]);\n\n return DateToSystemTimezoneSetter;\n}(Setter);", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: \"run\",\n value: function run(dateString, token, match, options) {\n var result = this.parse(dateString, token, match, options);\n\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n rest: result.rest\n };\n }\n }, {\n key: \"validate\",\n value: function validate(_utcDate, _value, _options) {\n return true;\n }\n }]);\n\n return Parser;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n _inherits(EraParser, _Parser);\n\n var _super = _createSuper(EraParser);\n\n function EraParser() {\n var _this;\n\n _classCallCheck(this, EraParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n\n return _this;\n }\n\n _createClass(EraParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(dateString, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(dateString, {\n width: 'wide'\n }) || match.era(dateString, {\n width: 'abbreviated'\n }) || match.era(dateString, {\n width: 'narrow'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return EraParser;\n}(Parser);", "export var numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};", "import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest\n };\n}\nexport function parseNumericPattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n var matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: dateString.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length)\n };\n}\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\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 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n _inherits(YearParser, _Parser);\n\n var _super = _createSuper(YearParser);\n\n function YearParser() {\n var _this;\n\n _classCallCheck(this, YearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(YearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return YearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekYearParser, _Parser);\n\n var _super = _createSuper(LocalWeekYearParser);\n\n function LocalWeekYearParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return mapValue(parseNDigits(4, dateString), valueCallback);\n\n case 'Yo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'year'\n }), valueCallback);\n\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n }]);\n\n return LocalWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\n\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekYearParser, _Parser);\n\n var _super = _createSuper(ISOWeekYearParser);\n\n function ISOWeekYearParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'R') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n }\n }]);\n\n return ISOWeekYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(ExtendedYearParser, _Parser);\n\n var _super = _createSuper(ExtendedYearParser);\n\n function ExtendedYearParser() {\n var _this;\n\n _classCallCheck(this, ExtendedYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ExtendedYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n if (token === 'u') {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ExtendedYearParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(QuarterParser, _Parser);\n\n var _super = _createSuper(QuarterParser);\n\n function QuarterParser() {\n var _this;\n\n _classCallCheck(this, QuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(QuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return QuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneQuarterParser, _Parser);\n\n var _super = _createSuper(StandAloneQuarterParser);\n\n function StandAloneQuarterParser() {\n var _this;\n\n _classCallCheck(this, StandAloneQuarterParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneQuarterParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(dateString, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneQuarterParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(MonthParser, _Parser);\n\n var _super = _createSuper(MonthParser);\n\n function MonthParser() {\n var _this;\n\n _classCallCheck(this, MonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n return _this;\n }\n\n _createClass(MonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return MonthParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneMonthParser, _Parser);\n\n var _super = _createSuper(StandAloneMonthParser);\n\n function StandAloneMonthParser() {\n var _this;\n\n _classCallCheck(this, StandAloneMonthParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneMonthParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'month'\n }), valueCallback);\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneMonthParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\n\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalWeekParser, _Parser);\n\n var _super = _createSuper(LocalWeekParser);\n\n function LocalWeekParser() {\n var _this;\n\n _classCallCheck(this, LocalWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'wo':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n }\n }]);\n\n return LocalWeekParser;\n}(Parser);", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\n\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOWeekParser, _Parser);\n\n var _super = _createSuper(ISOWeekParser);\n\n function ISOWeekParser() {\n var _this;\n\n _classCallCheck(this, ISOWeekParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISOWeekParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, dateString);\n\n case 'Io':\n return match.ordinalNumber(dateString, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value));\n }\n }]);\n\n return ISOWeekParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n _inherits(DateParser, _Parser);\n\n var _super = _createSuper(DateParser);\n\n function DateParser() {\n var _this;\n\n _classCallCheck(this, DateParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DateParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, dateString);\n\n case 'do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DateParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayOfYearParser, _Parser);\n\n var _super = _createSuper(DayOfYearParser);\n\n function DayOfYearParser() {\n var _this;\n\n _classCallCheck(this, DayOfYearParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayOfYearParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n case 'Do':\n return match.ordinalNumber(dateString, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(date, value) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayOfYearParser;\n}(Parser);", "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 setUTCDay(dirtyDate, dirtyDay, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(2, 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 = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\n\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayParser, _Parser);\n\n var _super = _createSuper(DayParser);\n\n function DayParser() {\n var _this;\n\n _classCallCheck(this, DayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return DayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\n\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(LocalDayParser, _Parser);\n\n var _super = _createSuper(LocalDayParser);\n\n function LocalDayParser() {\n var _this;\n\n _classCallCheck(this, LocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(LocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'eo':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'eee':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return LocalDayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\n\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n _inherits(StandAloneLocalDayParser, _Parser);\n\n var _super = _createSuper(StandAloneLocalDayParser);\n\n function StandAloneLocalDayParser() {\n var _this;\n\n _classCallCheck(this, StandAloneLocalDayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n\n return _this;\n }\n\n _createClass(StandAloneLocalDayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n\n case 'co':\n return mapValue(match.ordinalNumber(dateString, {\n unit: 'day'\n }), valueCallback);\n // Tue\n\n case 'ccc':\n return match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(dateString, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'short',\n context: 'standalone'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return StandAloneLocalDayParser;\n}(Parser);", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\n\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISODayParser, _Parser);\n\n var _super = _createSuper(ISODayParser);\n\n function ISODayParser() {\n var _this;\n\n _classCallCheck(this, ISODayParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n\n return _this;\n }\n\n _createClass(ISODayParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(dateString, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return mapValue(match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // T\n\n case 'iiiii':\n return mapValue(match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tu\n\n case 'iiiiii':\n return mapValue(match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n // Tuesday\n\n case 'iiii':\n default:\n return mapValue(match.day(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'short',\n context: 'formatting'\n }) || match.day(dateString, {\n width: 'narrow',\n context: 'formatting'\n }), valueCallback);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date = setUTCISODay(date, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n }]);\n\n return ISODayParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMParser, _Parser);\n\n var _super = _createSuper(AMPMParser);\n\n function AMPMParser() {\n var _this;\n\n _classCallCheck(this, AMPMParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n _inherits(AMPMMidnightParser, _Parser);\n\n var _super = _createSuper(AMPMMidnightParser);\n\n function AMPMMidnightParser() {\n var _this;\n\n _classCallCheck(this, AMPMMidnightParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(AMPMMidnightParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return AMPMMidnightParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n _inherits(DayPeriodParser, _Parser);\n\n var _super = _createSuper(DayPeriodParser);\n\n function DayPeriodParser() {\n var _this;\n\n _classCallCheck(this, DayPeriodParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n\n return _this;\n }\n\n _createClass(DayPeriodParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(dateString, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(dateString, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n }]);\n\n return DayPeriodParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1to12Parser, _Parser);\n\n var _super = _createSuper(Hour1to12Parser);\n\n function Hour1to12Parser() {\n var _this;\n\n _classCallCheck(this, Hour1to12Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1to12Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n case 'ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour1to12Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0to23Parser, _Parser);\n\n var _super = _createSuper(Hour0to23Parser);\n\n function Hour0to23Parser() {\n var _this;\n\n _classCallCheck(this, Hour0to23Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0to23Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n case 'Ho':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour0to23Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour0To11Parser, _Parser);\n\n var _super = _createSuper(Hour0To11Parser);\n\n function Hour0To11Parser() {\n var _this;\n\n _classCallCheck(this, Hour0To11Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour0To11Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n case 'Ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n }\n }]);\n\n return Hour0To11Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n _inherits(Hour1To24Parser, _Parser);\n\n var _super = _createSuper(Hour1To24Parser);\n\n function Hour1To24Parser() {\n var _this;\n\n _classCallCheck(this, Hour1To24Parser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n\n return _this;\n }\n\n _createClass(Hour1To24Parser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n case 'ko':\n return match.ordinalNumber(dateString, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n }\n }]);\n\n return Hour1To24Parser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n _inherits(MinuteParser, _Parser);\n\n var _super = _createSuper(MinuteParser);\n\n function MinuteParser() {\n var _this;\n\n _classCallCheck(this, MinuteParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(MinuteParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, dateString);\n\n case 'mo':\n return match.ordinalNumber(dateString, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n }\n }]);\n\n return MinuteParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(SecondParser, _Parser);\n\n var _super = _createSuper(SecondParser);\n\n function SecondParser() {\n var _this;\n\n _classCallCheck(this, SecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(SecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token, match) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, dateString);\n\n case 'so':\n return match.ordinalNumber(dateString, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n }, {\n key: \"validate\",\n value: function validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCSeconds(value, 0);\n return date;\n }\n }]);\n\n return SecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n _inherits(FractionOfSecondParser, _Parser);\n\n var _super = _createSuper(FractionOfSecondParser);\n\n function FractionOfSecondParser() {\n var _this;\n\n _classCallCheck(this, FractionOfSecondParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n\n return _this;\n }\n\n _createClass(FractionOfSecondParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }, {\n key: \"set\",\n value: function set(date, _flags, value) {\n date.setUTCMilliseconds(value);\n return date;\n }\n }]);\n\n return FractionOfSecondParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneWithZParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneWithZParser);\n\n function ISOTimezoneWithZParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneWithZParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneWithZParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneWithZParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n _inherits(ISOTimezoneParser, _Parser);\n\n var _super = _createSuper(ISOTimezoneParser);\n\n function ISOTimezoneParser() {\n var _this;\n\n _classCallCheck(this, ISOTimezoneParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n\n return _this;\n }\n\n _createClass(ISOTimezoneParser, [{\n key: \"parse\",\n value: function parse(dateString, token) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n }, {\n key: \"set\",\n value: function set(date, flags, value) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n }\n }]);\n\n return ISOTimezoneParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampSecondsParser, _Parser);\n\n var _super = _createSuper(TimestampSecondsParser);\n\n function TimestampSecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampSecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampSecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampSecondsParser;\n}(Parser);", "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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n _inherits(TimestampMillisecondsParser, _Parser);\n\n var _super = _createSuper(TimestampMillisecondsParser);\n\n function TimestampMillisecondsParser() {\n var _this;\n\n _classCallCheck(this, TimestampMillisecondsParser);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n\n _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n\n return _this;\n }\n\n _createClass(TimestampMillisecondsParser, [{\n key: \"parse\",\n value: function parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n }, {\n key: \"set\",\n value: function set(_date, _flags, value) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n }\n }]);\n\n return TimestampMillisecondsParser;\n}(Parser);", "import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\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 | | P | |\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 `parse` 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 */\n\nexport var parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser()\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\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/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 { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/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 notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\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 in the format string 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 *\n * Format of the format 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 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\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) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\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 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\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) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\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 | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | 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) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\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) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\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 | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | 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] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | 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) | 10 | 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 * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\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 * In `format` function, they will produce different result:\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 * `parse` will try to match both formatting and stand-alone units interchangably.\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:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. 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` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\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 [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. 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 * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `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 * 7. `D` and `DD` tokens represent days of the year but they are ofthen 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 * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\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 {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\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 {Date} the parsed date\n * @throws {TypeError} 3 arguments required\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} `options.locale` must contain `match` property\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 * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, 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(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\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\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\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 (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [new DateToSystemTimezoneSetter()];\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter in longFormatters) {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n var _iterator = _createForOfIteratorHelper(tokens),\n _step;\n\n try {\n var _loop = function _loop() {\n var token = _step.value;\n\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = usedTokens.find(function (usedToken) {\n return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n });\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return {\n v: new Date(NaN)\n };\n }\n\n setters.push(parseResult.setter);\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return {\n v: new Date(NaN)\n };\n }\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ret = _loop();\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n } // Check if the remaining input contains something other than whitespace\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var setter = _step2.value;\n\n if (!setter.validate(utcDate, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)\n\n if (Array.isArray(result)) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return utcDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}", "import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days 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 days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months 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 months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\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 subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from 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 subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(date, 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; // Subtract years and months\n\n var dateWithoutMonths = subMonths(date, months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}", "var formatDistanceLocale = {\n lessThanXSeconds: {\n standalone: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n },\n withPreposition: {\n one: 'weniger als 1 Sekunde',\n other: 'weniger als {{count}} Sekunden'\n }\n },\n xSeconds: {\n standalone: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n },\n withPreposition: {\n one: '1 Sekunde',\n other: '{{count}} Sekunden'\n }\n },\n halfAMinute: {\n standalone: 'halbe Minute',\n withPreposition: 'halben Minute'\n },\n lessThanXMinutes: {\n standalone: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n },\n withPreposition: {\n one: 'weniger als 1 Minute',\n other: 'weniger als {{count}} Minuten'\n }\n },\n xMinutes: {\n standalone: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n },\n withPreposition: {\n one: '1 Minute',\n other: '{{count}} Minuten'\n }\n },\n aboutXHours: {\n standalone: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n },\n withPreposition: {\n one: 'etwa 1 Stunde',\n other: 'etwa {{count}} Stunden'\n }\n },\n xHours: {\n standalone: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n },\n withPreposition: {\n one: '1 Stunde',\n other: '{{count}} Stunden'\n }\n },\n xDays: {\n standalone: {\n one: '1 Tag',\n other: '{{count}} Tage'\n },\n withPreposition: {\n one: '1 Tag',\n other: '{{count}} Tagen'\n }\n },\n aboutXWeeks: {\n standalone: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n },\n withPreposition: {\n one: 'etwa 1 Woche',\n other: 'etwa {{count}} Wochen'\n }\n },\n xWeeks: {\n standalone: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n },\n withPreposition: {\n one: '1 Woche',\n other: '{{count}} Wochen'\n }\n },\n aboutXMonths: {\n standalone: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monate'\n },\n withPreposition: {\n one: 'etwa 1 Monat',\n other: 'etwa {{count}} Monaten'\n }\n },\n xMonths: {\n standalone: {\n one: '1 Monat',\n other: '{{count}} Monate'\n },\n withPreposition: {\n one: '1 Monat',\n other: '{{count}} Monaten'\n }\n },\n aboutXYears: {\n standalone: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahre'\n },\n withPreposition: {\n one: 'etwa 1 Jahr',\n other: 'etwa {{count}} Jahren'\n }\n },\n xYears: {\n standalone: {\n one: '1 Jahr',\n other: '{{count}} Jahre'\n },\n withPreposition: {\n one: '1 Jahr',\n other: '{{count}} Jahren'\n }\n },\n overXYears: {\n standalone: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahre'\n },\n withPreposition: {\n one: 'mehr als 1 Jahr',\n other: 'mehr als {{count}} Jahren'\n }\n },\n almostXYears: {\n standalone: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahre'\n },\n withPreposition: {\n one: 'fast 1 Jahr',\n other: 'fast {{count}} Jahren'\n }\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = options !== null && options !== void 0 && options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\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}}', String(count));\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 'vor ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\n// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n full: 'EEEE, do MMMM y',\n // Montag, 7. Januar 2018\n long: 'do MMMM y',\n // 7. Januar 2018\n medium: 'do MMM y',\n // 7. Jan. 2018\n short: 'dd.MM.y' // 07.01.2018\n\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'um' {{time}}\",\n long: \"{{date}} 'um' {{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: \"'letzten' eeee 'um' p\",\n yesterday: \"'gestern um' p\",\n today: \"'heute um' p\",\n tomorrow: \"'morgen um' p\",\n nextWeek: \"eeee 'um' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['v.Chr.', 'n.Chr.'],\n abbreviated: ['v.Chr.', 'n.Chr.'],\n wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n}; // Note: in German, 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', 'M\u00E4r', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n wide: ['Januar', 'Februar', 'M\u00E4rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n}; // https://st.unicode.org/cldr-apps/v#/de/Gregorian/\n\nvar formattingMonthValues = {\n narrow: monthValues.narrow,\n abbreviated: ['Jan.', 'Feb.', 'M\u00E4rz', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n wide: monthValues.wide\n};\nvar dayValues = {\n narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n}; // https://www.unicode.org/cldr/charts/32/summary/de.html#1881\n\nvar dayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachm.',\n evening: 'Abend',\n night: 'Nacht'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachm.',\n evening: 'abends',\n night: 'nachts'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber) {\n var number = Number(dirtyNumber);\n return number + '.';\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 formattingValues: formattingMonthValues,\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;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i\n};\nvar parseEraPatterns = {\n any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(j[a\u00E4]n|feb|m\u00E4r[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\\.?/i,\n wide: /^(januar|februar|m\u00E4rz|april|mai|juni|juli|august|september|oktober|november|dezember)/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: [/^j[a\u00E4]/i, /^f/i, /^m\u00E4r/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smdmf]/i,\n short: /^(so|mo|di|mi|do|fr|sa)/i,\n abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\\.?/i,\n wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i\n};\nvar parseDayPatterns = {\n any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(vm\\.?|nm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n abbreviated: /^(vorm\\.?|nachm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^v/i,\n pm: /^n/i,\n midnight: /^Mitte/i,\n noon: /^Mitta/i,\n morning: /morgens/i,\n afternoon: /nachmittags/i,\n // will never be matched. Afternoon is matched by `pm`\n evening: /abends/i,\n night: /nachts/i // will never be matched. Night is matched by `pm`\n\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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: 'wide',\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 German locale.\n * @language German\n * @iso-639-2 deu\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Asia [@asia-t]{@link https://github.com/asia-t}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author RomanErnst [@pex]{@link https://github.com/pex}\n * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}\n */\nvar locale = {\n code: 'de',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, d MMMM yyyy',\n long: 'd MMMM yyyy',\n medium: 'd MMM yyyy',\n short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\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;", "import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\n\nvar locale = {\n code: 'en-GB',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'menos de un segundo',\n other: 'menos de {{count}} segundos'\n },\n xSeconds: {\n one: '1 segundo',\n other: '{{count}} segundos'\n },\n halfAMinute: 'medio minuto',\n lessThanXMinutes: {\n one: 'menos de un minuto',\n other: 'menos de {{count}} minutos'\n },\n xMinutes: {\n one: '1 minuto',\n other: '{{count}} minutos'\n },\n aboutXHours: {\n one: 'alrededor de 1 hora',\n other: 'alrededor de {{count}} horas'\n },\n xHours: {\n one: '1 hora',\n other: '{{count}} horas'\n },\n xDays: {\n one: '1 d\u00EDa',\n other: '{{count}} d\u00EDas'\n },\n aboutXWeeks: {\n one: 'alrededor de 1 semana',\n other: 'alrededor de {{count}} semanas'\n },\n xWeeks: {\n one: '1 semana',\n other: '{{count}} semanas'\n },\n aboutXMonths: {\n one: 'alrededor de 1 mes',\n other: 'alrededor de {{count}} meses'\n },\n xMonths: {\n one: '1 mes',\n other: '{{count}} meses'\n },\n aboutXYears: {\n one: 'alrededor de 1 a\u00F1o',\n other: 'alrededor de {{count}} a\u00F1os'\n },\n xYears: {\n one: '1 a\u00F1o',\n other: '{{count}} a\u00F1os'\n },\n overXYears: {\n one: 'm\u00E1s de 1 a\u00F1o',\n other: 'm\u00E1s de {{count}} a\u00F1os'\n },\n almostXYears: {\n one: 'casi 1 a\u00F1o',\n other: 'casi {{count}} a\u00F1os'\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 'en ' + result;\n } else {\n return 'hace ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'a las' {{time}}\",\n long: \"{{date}} 'a las' {{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: \"'el' eeee 'pasado a la' p\",\n yesterday: \"'ayer a la' p\",\n today: \"'hoy a la' p\",\n tomorrow: \"'ma\u00F1ana a la' p\",\n nextWeek: \"eeee 'a la' p\",\n other: 'P'\n};\nvar formatRelativeLocalePlural = {\n lastWeek: \"'el' eeee 'pasado a las' p\",\n yesterday: \"'ayer a las' p\",\n today: \"'hoy a las' p\",\n tomorrow: \"'ma\u00F1ana a las' p\",\n nextWeek: \"eeee 'a las' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n if (date.getUTCHours() !== 1) {\n return formatRelativeLocalePlural[token];\n } else {\n return formatRelativeLocale[token];\n }\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['AC', 'DC'],\n abbreviated: ['AC', 'DC'],\n wide: ['antes de cristo', 'despu\u00E9s de cristo']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['T1', 'T2', 'T3', 'T4'],\n wide: ['1\u00BA trimestre', '2\u00BA trimestre', '3\u00BA trimestre', '4\u00BA trimestre']\n};\nvar monthValues = {\n narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n abbreviated: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']\n};\nvar dayValues = {\n narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 's\u00E1'],\n abbreviated: ['dom', 'lun', 'mar', 'mi\u00E9', 'jue', 'vie', 's\u00E1b'],\n wide: ['domingo', 'lunes', 'martes', 'mi\u00E9rcoles', 'jueves', 'viernes', 's\u00E1bado']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'ma\u00F1ana',\n afternoon: 'tarde',\n evening: 'tarde',\n night: 'noche'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mn',\n noon: 'md',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'medianoche',\n noon: 'mediodia',\n morning: 'de la ma\u00F1ana',\n afternoon: 'de la tarde',\n evening: 'de la tarde',\n night: 'de la noche'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber);\n return number + '\u00BA';\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 Number(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;", "import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\u00BA)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|antes de la era com[u\u00FA]n|despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i\n};\nvar parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [/^(antes de cristo|antes de la era com[u\u00FA]n)/i, /^(despu[e\u00E9]s de cristo|era com[u\u00FA]n)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](\u00BA)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[efmajsond]/i,\n abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^e/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: [/^en/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]\n};\nvar matchDayPatterns = {\n narrow: /^[dlmjvs]/i,\n short: /^(do|lu|ma|mi|ju|vi|s[\u00E1a])/i,\n abbreviated: /^(dom|lun|mar|mi[\u00E9e]|jue|vie|s[\u00E1a]b)/i,\n wide: /^(domingo|lunes|martes|mi[\u00E9e]rcoles|jueves|viernes|s[\u00E1a]bado)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(de la|a las) (ma\u00F1ana|tarde|noche))/i,\n any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (ma\u00F1ana|tarde|noche))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn/i,\n noon: /^md/i,\n morning: /ma\u00F1ana/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noche/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 Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Fernando Ag\u00FCero [@fjaguero]{@link https://github.com/fjaguero}\n * @author Gast\u00F3n Haro [@harogaston]{@link https://github.com/harogaston}\n * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n code: 'es',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'moins d\u2019une seconde',\n other: 'moins de {{count}} secondes'\n },\n xSeconds: {\n one: '1 seconde',\n other: '{{count}} secondes'\n },\n halfAMinute: '30 secondes',\n lessThanXMinutes: {\n one: 'moins d\u2019une minute',\n other: 'moins de {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'environ 1 heure',\n other: 'environ {{count}} heures'\n },\n xHours: {\n one: '1 heure',\n other: '{{count}} heures'\n },\n xDays: {\n one: '1 jour',\n other: '{{count}} jours'\n },\n aboutXWeeks: {\n one: 'environ 1 semaine',\n other: 'environ {{count}} semaines'\n },\n xWeeks: {\n one: '1 semaine',\n other: '{{count}} semaines'\n },\n aboutXMonths: {\n one: 'environ 1 mois',\n other: 'environ {{count}} mois'\n },\n xMonths: {\n one: '1 mois',\n other: '{{count}} mois'\n },\n aboutXYears: {\n one: 'environ 1 an',\n other: 'environ {{count}} ans'\n },\n xYears: {\n one: '1 an',\n other: '{{count}} ans'\n },\n overXYears: {\n one: 'plus d\u2019un an',\n other: 'plus de {{count}} ans'\n },\n almostXYears: {\n one: 'presqu\u2019un an',\n other: 'presque {{count}} ans'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var form = formatDistanceLocale[token];\n\n if (typeof form === 'string') {\n result = form;\n } else if (count === 1) {\n result = form.one;\n } else {\n result = form.other.replace('{{count}}', String(count));\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'dans ' + result;\n } else {\n return 'il y a ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE d MMMM y',\n long: 'd MMMM y',\n medium: 'd MMM y',\n short: 'dd/MM/y'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} '\u00E0' {{time}}\",\n long: \"{{date}} '\u00E0' {{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: \"eeee 'dernier \u00E0' p\",\n yesterday: \"'hier \u00E0' p\",\n today: \"'aujourd\u2019hui \u00E0' p\",\n tomorrow: \"'demain \u00E0' p'\",\n nextWeek: \"eeee 'prochain \u00E0' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['av. J.-C', 'ap. J.-C'],\n abbreviated: ['av. J.-C', 'ap. J.-C'],\n wide: ['avant J\u00E9sus-Christ', 'apr\u00E8s J\u00E9sus-Christ']\n};\nvar quarterValues = {\n narrow: ['T1', 'T2', 'T3', 'T4'],\n abbreviated: ['1er trim.', '2\u00E8me trim.', '3\u00E8me trim.', '4\u00E8me trim.'],\n wide: ['1er trimestre', '2\u00E8me trimestre', '3\u00E8me trimestre', '4\u00E8me trimestre']\n};\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['janv.', 'f\u00E9vr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'ao\u00FBt', 'sept.', 'oct.', 'nov.', 'd\u00E9c.'],\n wide: ['janvier', 'f\u00E9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\u00FBt', 'septembre', 'octobre', 'novembre', 'd\u00E9cembre']\n};\nvar dayValues = {\n narrow: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\n short: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\n abbreviated: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n wide: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'mat.',\n afternoon: 'ap.m.',\n evening: 'soir',\n night: 'mat.'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'matin',\n afternoon: 'apr\u00E8s-midi',\n evening: 'soir',\n night: 'matin'\n },\n wide: {\n am: 'AM',\n pm: 'PM',\n midnight: 'minuit',\n noon: 'midi',\n morning: 'du matin',\n afternoon: 'de l\u2019apr\u00E8s-midi',\n evening: 'du soir',\n night: 'du matin'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, options) {\n var number = Number(dirtyNumber);\n var unit = options === null || options === void 0 ? void 0 : options.unit;\n if (number === 0) return '0';\n var feminineUnits = ['year', 'week', 'hour', 'minute', 'second'];\n var suffix;\n\n if (number === 1) {\n suffix = unit && feminineUnits.includes(unit) ? '\u00E8re' : 'er';\n } else {\n suffix = '\u00E8me';\n }\n\n return number + suffix;\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 })\n};\nexport default localize;", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(i\u00E8me|\u00E8re|\u00E8me|er|e)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(av\\.J\\.C|ap\\.J\\.C|ap\\.J\\.-C)/i,\n abbreviated: /^(av\\.J\\.-C|av\\.J-C|apr\\.J\\.-C|apr\\.J-C|ap\\.J-C)/i,\n wide: /^(avant J\u00E9sus-Christ|apr\u00E8s J\u00E9sus-Christ)/i\n};\nvar parseEraPatterns = {\n any: [/^av/i, /^ap/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^T?[1234]/i,\n abbreviated: /^[1234](er|\u00E8me|e)? trim\\.?/i,\n wide: /^[1234](er|\u00E8me|e)? trimestre/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(janv|f\u00E9vr|mars|avr|mai|juin|juill|juil|ao\u00FBt|sept|oct|nov|d\u00E9c)\\.?/i,\n wide: /^(janvier|f\u00E9vrier|mars|avril|mai|juin|juillet|ao\u00FBt|septembre|octobre|novembre|d\u00E9cembre)/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, /^av/i, /^ma/i, /^juin/i, /^juil/i, /^ao/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[lmjvsd]/i,\n short: /^(di|lu|ma|me|je|ve|sa)/i,\n abbreviated: /^(dim|lun|mar|mer|jeu|ven|sam)\\.?/i,\n wide: /^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i\n};\nvar parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^di/i, /^lu/i, /^ma/i, /^me/i, /^je/i, /^ve/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|minuit|midi|mat\\.?|ap\\.?m\\.?|soir|nuit)/i,\n any: /^([ap]\\.?\\s?m\\.?|du matin|de l'apr\u00E8s[-\\s]midi|du soir|de la nuit)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^min/i,\n noon: /^mid/i,\n morning: /mat/i,\n afternoon: /ap/i,\n evening: /soir/i,\n night: /nuit/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value);\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 * @type {Locale}\n * @category Locales\n * @summary French locale.\n * @language French\n * @iso-639-2 fra\n * @author Jean Dupouy [@izeau]{@link https://github.com/izeau}\n * @author Fran\u00E7ois B [@fbonzon]{@link https://github.com/fbonzon}\n */\n\nvar locale = {\n code: 'fr',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerBankConversionCacheEviction,\n TalerBankConversionHttpClient,\n TalerCoreBankCacheEviction,\n TalerCoreBankHttpClient,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { APIClient, ActiviyTracker, BankLib, Subscriber } from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type BankContextType = {\n url: URL;\n config: TalerCorebankApi.Config;\n lib: BankLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst BankContext = createContext<BankContextType>(undefined);\n\nexport const useBankCoreApiContext = (): BankContextType =>\n useContext(BankContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n conversion?: CacheEvictor<TalerBankConversionCacheEviction>;\n bank?: CacheEvictor<TalerCoreBankCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const BankApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerCorebankApi.Config>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildBankApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: BankContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildBankApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<BankLib, TalerCorebankApi.Config> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const bank = new TalerCoreBankHttpClient(url.href, httpLib, evictors.bank);\n const conversion = new TalerBankConversionHttpClient(\n bank.getConversionInfoAPI().href,\n httpLib,\n evictors.conversion,\n );\n const auth = (user: string) =>\n new TalerAuthenticationHttpClient(\n bank.getAuthenticationAPI(user).href,\n httpLib,\n );\n\n async function getRemoteConfig(): Promise<TalerCorebankApi.Config> {\n const resp = await bank.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: bank.PROTOCOL_VERSION,\n lib: {\n bank,\n conversion,\n auth,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const BankApiProviderTesting = ({\n children,\n value,\n}: {\n value: BankContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(BankContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { ChallengerHttpClient, ObservabilityEvent, TalerAuthenticationHttpClient, TalerBankConversionHttpClient, TalerCoreBankHttpClient, TalerExchangeHttpClient, TalerMerchantInstanceHttpClient, TalerMerchantManagementHttpClient } from \"@gnu-taler/taler-util\";\n\ntype Listener<Event> = (e: Event) => void;\ntype Unsuscriber = () => void;\nexport type Subscriber<Event> = (fn: Listener<Event>) => Unsuscriber;\n\nexport class ActiviyTracker<Event> {\n private observers = new Array<Listener<Event>>();\n constructor() {\n this.notify = this.notify.bind(this)\n this.subscribe = this.subscribe.bind(this)\n }\n notify(data: Event): void {\n this.observers.forEach((observer) => observer(data))\n }\n subscribe(func: Listener<Event>): Unsuscriber {\n this.observers.push(func);\n return () => {\n this.observers.forEach((observer, index) => {\n if (observer === func) {\n this.observers.splice(index, 1);\n }\n });\n };\n }\n}\n\n/**\n * build http client with cache breaker due to SWR\n * @param url\n * @returns\n */\nexport interface APIClient<T, C> {\n getRemoteConfig(): Promise<C>;\n VERSION: string;\n lib: T,\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest(id: string): void;\n}\n\nexport interface MerchantLib {\n instance: TalerMerchantManagementHttpClient;\n authenticate: TalerAuthenticationHttpClient;\n subInstanceApi: (instanceId: string) => MerchantLib;\n}\n\nexport interface ExchangeLib {\n exchange: TalerExchangeHttpClient;\n}\n\nexport interface BankLib {\n bank: TalerCoreBankHttpClient;\n conversion: TalerBankConversionHttpClient;\n auth: (user: string) => TalerAuthenticationHttpClient;\n}\n\nexport interface ChallengerLib {\n challenger: ChallengerHttpClient;\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n ChallengerApi,\n ChallengerCacheEviction,\n ChallengerHttpClient,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerError\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib, ErrorLoading } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n ChallengerLib,\n Subscriber\n} from \"./activity.js\";\nimport { useTranslationContext } from \"./translation.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type ChallengerContextType = {\n url: URL;\n config: ChallengerApi.ChallengerTermsOfServiceResponse;\n lib: ChallengerLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst ChallengerContext = createContext<ChallengerContextType>(undefined);\n\nexport const useChallengerApiContext = (): ChallengerContextType =>\n useContext(ChallengerContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n challenger?: CacheEvictor<ChallengerCacheEviction>;\n}\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const ChallengerApiProvider = ({\n baseUrl,\n children,\n frameOnError,\n evictors = {},\n}: {\n baseUrl: URL;\n children: ComponentChildren;\n evictors?: Evictors;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<ChallengerApi.ChallengerTermsOfServiceResponse>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildChallengerApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: ChallengerContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(ChallengerContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildChallengerApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<ChallengerLib, ChallengerApi.ChallengerTermsOfServiceResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const challenger = new ChallengerHttpClient(url.href, httpLib, evictors.challenger);\n\n async function getRemoteConfig(): Promise<ChallengerApi.ChallengerTermsOfServiceResponse> {\n const resp = await challenger.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: challenger.PROTOCOL_VERSION,\n lib: {\n challenger,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const ChallengerApiProviderTesting = ({\n children,\n value,\n}: {\n value: ChallengerContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(ChallengerContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerAuthenticationHttpClient,\n TalerError,\n TalerMerchantApi,\n TalerMerchantInstanceCacheEviction,\n TalerMerchantManagementCacheEviction,\n TalerMerchantManagementHttpClient,\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n MerchantLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type MerchantContextType = {\n url: URL;\n config: TalerMerchantApi.VersionResponse;\n lib: MerchantLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n changeBackend: (url: URL) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst MerchantContext = createContext<MerchantContextType>(undefined);\n\nexport const useMerchantApiContext = (): MerchantContextType =>\n useContext(MerchantContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n management?: CacheEvictor<\n TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction\n >;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\nexport type ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const MerchantApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{\n state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;\n }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerMerchantApi.VersionResponse>>();\n\n const [merchantEndpoint, changeMerchantEndpoint] = useState(baseUrl);\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildMerchantApiClient(merchantEndpoint, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (!checked || checked.type !== \"ok\") {\n return h(frameOnError, { state: checked }, []);\n }\n\n const value: MerchantContextType = {\n url: merchantEndpoint,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n changeBackend: changeMerchantEndpoint,\n hints: checked.hints,\n };\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildMerchantApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<MerchantLib, TalerMerchantApi.VersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const instance = new TalerMerchantManagementHttpClient(\n url.href,\n httpLib,\n evictors.management,\n );\n const authenticate = new TalerAuthenticationHttpClient(\n instance.getAuthenticationAPI().href,\n httpLib,\n );\n\n function getSubInstanceAPI(instanceId: string): MerchantLib {\n const api = buildMerchantApiClient(\n instance.getSubInstanceAPI(instanceId) as URL,\n evictors,\n );\n return api.lib;\n }\n\n async function getRemoteConfig(): Promise<TalerMerchantApi.VersionResponse> {\n const resp = await instance.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: instance.PROTOCOL_VERSION,\n lib: {\n instance,\n authenticate,\n subInstanceApi: getSubInstanceAPI,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const MerchantApiProviderTesting = ({\n children,\n value,\n}: {\n value: MerchantContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(MerchantContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n LibtoolVersion,\n ObservabilityEvent,\n ObservableHttpClientLibrary,\n TalerError,\n TalerExchangeApi,\n TalerExchangeCacheEviction,\n TalerExchangeHttpClient\n} from \"@gnu-taler/taler-util\";\nimport {\n ComponentChildren,\n FunctionComponent,\n VNode,\n createContext,\n h,\n} from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport { BrowserFetchHttpLib, ErrorLoading, useTranslationContext } from \"../index.browser.js\";\nimport {\n APIClient,\n ActiviyTracker,\n ExchangeLib,\n Subscriber,\n} from \"./activity.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type ExchangeContextType = {\n url: URL;\n config: TalerExchangeApi.ExchangeVersionResponse;\n lib: ExchangeLib;\n hints: VersionHint[];\n onActivity: Subscriber<ObservabilityEvent>;\n cancelRequest: (eventId: string) => void;\n};\n\n// FIXME: below\n// @ts-expect-error default value to undefined, should it be another thing?\nconst ExchangeContext = createContext<ExchangeContextType>(undefined);\n\nexport const useExchangeApiContext = (): ExchangeContextType =>\n useContext(ExchangeContext);\n\nenum VersionHint {\n NONE,\n}\n\ntype Evictors = {\n exchange?: CacheEvictor<TalerExchangeCacheEviction>;\n};\n\ntype ConfigResult<T> =\n | undefined\n | { type: \"ok\"; config: T; hints: VersionHint[] }\n | ConfigResultFail<T>;\n\ntype ConfigResultFail<T> =\n | { type: \"incompatible\"; result: T; supported: string }\n | { type: \"error\"; error: TalerError };\n\nconst CONFIG_FAIL_TRY_AGAIN_MS = 5000;\n\nexport const ExchangeApiProvider = ({\n baseUrl,\n children,\n evictors = {},\n frameOnError,\n}: {\n baseUrl: URL;\n evictors?: Evictors;\n children: ComponentChildren;\n frameOnError: FunctionComponent<{ children: ComponentChildren }>;\n}): VNode => {\n const [checked, setChecked] =\n useState<ConfigResult<TalerExchangeApi.ExchangeVersionResponse>>();\n const { i18n } = useTranslationContext();\n\n const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =\n buildExchangeApiClient(baseUrl, evictors);\n\n useEffect(() => {\n let keepRetrying = true;\n async function testConfig(): Promise<void> {\n try {\n const config = await getRemoteConfig();\n if (LibtoolVersion.compare(VERSION, config.version)) {\n setChecked({ type: \"ok\", config, hints: [] });\n } else {\n setChecked({\n type: \"incompatible\",\n result: config,\n supported: VERSION,\n });\n }\n } catch (error) {\n if (error instanceof TalerError) {\n if (keepRetrying) {\n setTimeout(() => {\n testConfig();\n }, CONFIG_FAIL_TRY_AGAIN_MS);\n }\n setChecked({ type: \"error\", error });\n } else {\n setChecked({ type: \"error\", error: TalerError.fromException(error) });\n }\n }\n }\n testConfig();\n return () => {\n // on unload, stop retry\n keepRetrying = false;\n };\n }, []);\n\n if (checked === undefined) {\n return h(frameOnError, {\n children: h(\"div\", {}, \"checking compatibility with server...\"),\n });\n }\n if (checked.type === \"error\") {\n return h(frameOnError, {\n children: h(ErrorLoading, { error: checked.error, showDetail: true }),\n });\n }\n if (checked.type === \"incompatible\") {\n return h(frameOnError, {\n children: h(\n \"div\",\n {},\n i18n.str`The server version is not supported. Supported version \"${checked.supported}\", server version \"${checked.result.version}\"`,\n ),\n });\n }\n\n const value: ExchangeContextType = {\n url: baseUrl,\n config: checked.config,\n onActivity: onActivity,\n lib,\n cancelRequest,\n hints: checked.hints,\n };\n return h(ExchangeContext.Provider, {\n value,\n children,\n });\n};\n\nfunction buildExchangeApiClient(\n url: URL,\n evictors: Evictors,\n): APIClient<ExchangeLib, TalerExchangeApi.ExchangeVersionResponse> {\n const httpFetch = new BrowserFetchHttpLib({\n enableThrottling: true,\n requireTls: false,\n });\n const tracker = new ActiviyTracker<ObservabilityEvent>();\n\n const httpLib = new ObservableHttpClientLibrary(httpFetch, {\n observe(ev) {\n tracker.notify(ev);\n },\n });\n\n const ex = new TalerExchangeHttpClient(url.href, httpLib, evictors.exchange);\n\n async function getRemoteConfig(): Promise<TalerExchangeApi.ExchangeVersionResponse> {\n const resp = await ex.getConfig();\n if (resp.type === \"fail\") {\n throw TalerError.fromUncheckedDetail(resp.detail);\n }\n return resp.body;\n }\n\n return {\n getRemoteConfig,\n VERSION: ex.PROTOCOL_VERSION,\n lib: {\n exchange: ex,\n },\n onActivity: tracker.subscribe,\n cancelRequest: httpLib.cancelRequest,\n };\n}\n\nexport const ExchangeApiProviderTesting = ({\n children,\n value,\n}: {\n value: ExchangeContextType;\n children: ComponentChildren;\n}): VNode => {\n return h(ExchangeContext.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect, useState } from \"preact/hooks\";\nimport {\n AppLocation,\n ObjectOf,\n Location,\n findMatch,\n RouteDefinition,\n} from \"../utils/route.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = {\n path: string;\n params: Record<string, string[]>;\n navigateTo: (path: AppLocation) => void;\n // addNavigationListener: (listener: (path: string, params: Record<string, string>) => void) => (() => void);\n};\n\n// @ts-expect-error should not be used without provider\nconst Context = createContext<Type>(undefined);\n\nexport const useNavigationContext = (): Type => useContext(Context);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useCurrentLocation<T extends ObjectOf<RouteDefinition<any>>>(\n pagesMap: T,\n): Location<T> | undefined {\n const pageList = Object.keys(pagesMap as object) as Array<keyof T>;\n const { path, params } = useNavigationContext();\n\n return findMatch(pagesMap, pageList, path, params);\n}\n\nfunction getPathAndParamsFromWindow(): {\n path: string;\n params: Record<string, string[]>;\n} {\n const path =\n typeof window !== \"undefined\" ? window.location.hash.substring(1) : \"/\";\n const params: Record<string, string[]> = {};\n if (typeof window !== \"undefined\") {\n for (const [key, value] of new URLSearchParams(window.location.search)) {\n if (!params[key]) {\n params[key] = [];\n }\n params[key].push(value);\n }\n }\n return { path, params };\n}\n\nconst { path: initialPath, params: initialParams } =\n getPathAndParamsFromWindow();\n\n// there is a possibility that if the browser does a redirection\n// (which doesn't go through navigatTo function) and that executed\n// too early (before addEventListener runs) it won't be taking\n// into account\nconst PopStateEventType = \"popstate\";\n\nexport const BrowserHashNavigationProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const [{ path, params }, setState] = useState({\n path: initialPath,\n params: initialParams,\n });\n if (typeof window === \"undefined\") {\n throw Error(\n \"Can't use BrowserHashNavigationProvider if there is no window object\",\n );\n }\n function navigateTo(path: string): void {\n const { params } = getPathAndParamsFromWindow();\n setState({ path, params });\n window.location.href = path;\n }\n\n useEffect(() => {\n function eventListener(): void {\n setState(getPathAndParamsFromWindow());\n }\n window.addEventListener(PopStateEventType, eventListener);\n return () => {\n window.removeEventListener(PopStateEventType, eventListener);\n };\n }, []);\n return h(Context.Provider, {\n value: { path, params, navigateTo },\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { stringifyTalerUri, TalerUri } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\n/**\n * https://docs.taler.net/design-documents/039-taler-browser-integration.html\n *\n * @param uri\n */\nfunction createHeadMetaTag(uri: TalerUri, onNotFound?: () => void) {\n const meta = document.createElement(\"meta\");\n meta.setAttribute(\"name\", \"taler-uri\");\n meta.setAttribute(\"content\", stringifyTalerUri(uri));\n\n document.head.appendChild(meta);\n\n let walletFound = false;\n window.addEventListener(\"beforeunload\", () => {\n walletFound = true;\n });\n setTimeout(() => {\n if (!walletFound && onNotFound) {\n onNotFound();\n }\n }, 10); //very short timeout\n}\ninterface Type {\n /**\n * Tell the active wallet that an action is found\n *\n * @param uri\n * @returns\n */\n publishTalerAction: (uri: TalerUri, onNotFound?: () => void) => void;\n}\n\n// @ts-expect-error default value to undefined, should it be another thing?\nconst Context = createContext<Type>(undefined);\n\nexport const useTalerWalletIntegrationAPI = (): Type => useContext(Context);\n\nexport const TalerWalletIntegrationBrowserProvider = ({\n children,\n}: {\n children: ComponentChildren;\n}): VNode => {\n const value: Type = {\n publishTalerAction: createHeadMetaTag,\n };\n return h(Context.Provider, {\n value,\n children,\n });\n};\n\nexport const TalerWalletIntegrationTestingProvider = ({\n children,\n value,\n}: {\n children: ComponentChildren;\n value: Type;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\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\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\nexport function recursive<PType>(\n hook: (p: PType) => RecursiveState<VNode>,\n): (p: PType) => VNode {\n\n function withHook(stateHook: () => RecursiveState<VNode>): () => 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 return 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/**\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", "import { Duration, TranslatedString, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\n\ninterface Props {\n type?: \"info\" | \"success\" | \"warning\" | \"danger\" | \"low\",\n onClose?: () => void,\n title: TranslatedString,\n children?: ComponentChildren,\n timeout?: Duration,\n}\nexport function Attention({ type = \"info\", title, children, onClose, timeout = Duration.getForever() }: Props): VNode {\n\n return <div class={`group attention-${type} mt-2 shadow-lg`}>\n {timeout.d_ms === \"forever\" ? undefined : <style>{`\n .progress {\n animation: notificationTimeoutBar ${Math.round(timeout.d_ms / 1000)}s ease-in-out;\n animation-fill-mode:both; \n }\n\n @keyframes notificationTimeoutBar {\n 0% { width: 0; }\n 100% { width: 100%; }\n }\n `}</style>\n }\n\n <div data-timed={timeout.d_ms !== \"forever\"} class=\"rounded-md data-[timed=true]:rounded-b-none group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 p-4 shadow\">\n <div class=\"flex\">\n <div >\n {type === \"low\" ? undefined :\n <svg xmlns=\"http://www.w3.org/2000/svg\" stroke=\"none\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-8 h-8 group-[.attention-info]:text-blue-400 group-[.attention-warning]:text-yellow-400 group-[.attention-danger]:text-red-400 group-[.attention-success]:text-green-400\">\n {(() => {\n switch (type) {\n case \"info\":\n return <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\" />\n case \"warning\":\n return <path fill-rule=\"evenodd\" d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"danger\":\n return <path fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n case \"success\":\n return <path fill-rule=\"evenodd\" d=\"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z\" />\n default:\n assertUnreachable(type)\n }\n })()}\n </svg>\n }\n </div>\n <div class=\"ml-3 w-full\">\n <h3 class=\"text-sm font-bold group-[.attention-info]:text-blue-800 group-[.attention-success]:text-green-800 group-[.attention-warning]:text-yellow-800 group-[.attention-danger]:text-red-800\">\n {title}\n </h3>\n <div class=\"mt-2 text-sm group-[.attention-info]:text-blue-700 group-[.attention-warning]:text-yellow-700 group-[.attention-danger]:text-red-700 group-[.attention-success]:text-green-700\">\n {children}\n </div>\n </div>\n {onClose &&\n <div>\n <button type=\"button\" class=\"font-semibold items-center rounded bg-transparent px-2 py-1 text-xs text-gray-900 hover:bg-gray-50\"\n onClick={(e) => {\n e.preventDefault();\n onClose();\n }}\n >\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n }\n </div>\n </div>\n {timeout.d_ms === \"forever\" ? undefined :\n <div class=\"meter group-[.attention-info]:bg-blue-50 group-[.attention-low]:bg-gray-100 group-[.attention-warning]:bg-yellow-50 group-[.attention-danger]:bg-red-50 group-[.attention-success]:bg-green-50 h-1 relative overflow-hidden -mt-1\">\n <span class=\"w-full h-full block\"><span class=\"h-full block progress group-[.attention-info]:bg-blue-600 group-[.attention-low]:bg-gray-600 group-[.attention-warning]:bg-yellow-600 group-[.attention-danger]:bg-red-600 group-[.attention-success]:bg-green-600\"></span></span>\n </div>\n }\n\n </div>\n}\n", "import { ComponentChildren, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nexport function CopyIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75\" />\n </svg>\n )\n};\n\nexport function CopiedIcon(): VNode {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n )\n};\n\nexport function CopyButton({ class: clazz, children, getContent }: { children?: ComponentChildren, class: string, getContent: () => string }): VNode {\n const [copied, setCopied] = useState(false);\n function copyText(): void {\n if (!navigator.clipboard && !window.isSecureContext) {\n alert('clipboard is not available on insecure context (http)')\n }\n if (navigator.clipboard) {\n navigator.clipboard.writeText(getContent() || \"\");\n setCopied(true);\n }\n }\n useEffect(() => {\n if (copied) {\n setTimeout(() => {\n setCopied(false);\n }, 1000);\n }\n }, [copied]);\n\n if (!copied) {\n return (\n <button class={clazz} onClick={e => {\n e.preventDefault()\n copyText()\n }} >\n <CopyIcon />\n {children}\n </button>\n );\n }\n return (\n <button class={clazz} disabled>\n <CopiedIcon />\n {children}\n </button>\n );\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\nimport { TalerError, TalerErrorCode, assertUnreachable } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function ErrorLoading({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {\n const { i18n } = useTranslationContext()\n switch (error.errorDetail.code) {\n //////////////////\n // Every error that can be produce in a Http Request\n //////////////////\n case TalerErrorCode.GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request was cancelled.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {\n const { requestMethod, requestUrl, timeoutMs } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The request reached a timeout, check your connection.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {\n const { requestMethod, requestUrl, throttleStats } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`A lot of request were made to the same server and this action was throttled`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {\n const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`The response of the request is malformed.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {\n const { requestMethod, requestUrl } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Could not complete the request due to a network problem.`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {\n const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail\n return <Attention type=\"danger\" title={i18n.str`Unexpected request error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)}\n </pre>\n }\n </Attention>\n }\n assertUnreachable(1 as never)\n }\n //////////////////\n // Every other error \n //////////////////\n // case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n // return <Attention type=\"danger\" title={i18n.str``}>\n // </Attention>\n // }\n //////////////////\n // Default message for unhandled case\n //////////////////\n default: return <Attention type=\"danger\" title={i18n.str`Unexpected error`}>\n {error.message}\n {showDetail &&\n <pre class=\"whitespace-break-spaces \">\n {JSON.stringify(error.errorDetail, undefined, 2)}\n </pre>\n }\n </Attention>\n }\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 */\n\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n// import { strings as messages } from \"../i18n/strings.js\";\nimport langIcon from \"../assets/lang.svg\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\ntype LangsNames = {\n [P: string]: 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): string {\n if (names[s]) return names[s];\n return String(s);\n}\n\nexport function LangSelector({ }: {}): VNode {\n const [updatingLang, setUpdatingLang] = useState(false);\n const { lang, changeLanguage, completeness, supportedLang } = useTranslationContext();\n const [hidden, setHidden] = useState(true);\n\n useEffect(() => {\n function bodyKeyPress(event: KeyboardEvent) {\n if (event.code === \"Escape\") setHidden(true);\n }\n function bodyOnClick(event: Event) {\n setHidden(true);\n }\n document.body.addEventListener(\"click\", bodyOnClick);\n document.body.addEventListener(\"keydown\", bodyKeyPress as any);\n return () => {\n document.body.removeEventListener(\"keydown\", bodyKeyPress as any);\n document.body.removeEventListener(\"click\", bodyOnClick);\n };\n }, []);\n return (\n <div>\n <div class=\"relative mt-2\">\n <button type=\"button\" class=\"relative w-full cursor-default rounded-md bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600 sm:text-sm sm:leading-6\" aria-haspopup=\"listbox\" aria-expanded=\"true\" aria-labelledby=\"listbox-label\"\n onClick={(e) => {\n setHidden(!hidden);\n e.stopPropagation()\n }}>\n <span class=\"flex items-center\">\n <img alt=\"language\" class=\"h-5 w-5 flex-shrink-0 rounded-full\" src={langIcon} />\n <span class=\"ml-3 block truncate\">{getLangName(lang)}</span>\n </span>\n <span class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <svg class=\"h-5 w-5 text-gray-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </button>\n\n {!hidden &&\n <ul class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\" tabIndex={-1} role=\"listbox\" aria-labelledby=\"listbox-label\" aria-activedescendant=\"listbox-option-3\">\n {Object.keys(supportedLang)\n .filter((l) => l !== lang)\n .map((lang) => (\n <li class=\"text-gray-900 hover:bg-indigo-600 hover:text-white cursor-pointer relative select-none py-2 pl-3 pr-9\" role=\"option\"\n onClick={() => {\n changeLanguage(lang);\n setUpdatingLang(false);\n setHidden(true)\n }}\n >\n <span class=\"font-normal truncate flex justify-between \">\n <span>{getLangName(lang)}</span>\n <span>{(completeness as any)[lang]}%</span>\n </span>\n\n <span class=\"text-indigo-600 absolute inset-y-0 right-0 flex items-center pr-4\">\n {/* <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clip-rule=\"evenodd\" />\n </svg> */}\n </span>\n </li>\n ))}\n\n </ul>\n }\n\n </div>\n </div>\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\nimport { h, VNode } from \"preact\";\n\nexport function Loading(): VNode {\n return (\n <div\n class=\"columns is-centered is-vcentered\"\n style={{\n width: \"100%\",\n height: \"200px\",\n display: \"flex\",\n margin: \"auto\",\n justifyContent: \"center\",\n }}\n >\n <Spinner />\n </div>\n );\n}\n\nfunction Spinner(): VNode {\n return (\n <div class=\"lds-ring\" style={{ margin: \"auto\" }}>\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n}\n", "import { useState } from \"preact/hooks\";\nimport { LangSelector, useNotifications, useTranslationContext } from \"../index.browser.js\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport logo from \"../assets/logo-2021.svg\";\n\ninterface Props {\n title: string;\n iconLinkURL: string;\n profileURL?: string;\n notificationURL?: string;\n children?: ComponentChildren;\n onLogout: (() => void) | undefined;\n sites: Array<Array<string>>;\n supportedLangs: string[]\n}\n\nexport function Header({ title, profileURL, notificationURL, iconLinkURL, sites, onLogout, children }: Props): VNode {\n const { i18n } = useTranslationContext();\n const [open, setOpen] = useState(false)\n const ns = useNotifications();\n\n return <Fragment>\n <header class=\"bg-indigo-600 w-full mx-auto px-2 border-b border-opacity-25 border-indigo-400\">\n <div class=\"flex flex-row h-16 items-center \">\n <div class=\"flex px-2 justify-start\">\n <div class=\"flex-shrink-0 bg-white rounded-lg\">\n <a href={iconLinkURL ?? \"#\"} name=\"logo\">\n <img\n class=\"h-8 w-auto\"\n src={logo}\n alt=\"GNU Taler\"\n style={{ height: \"1.5rem\", margin: \".5rem\" }}\n />\n </a>\n </div>\n <span class=\"flex items-center text-white text-lg font-bold ml-4\">\n {title}\n </span>\n </div>\n <div class=\"flex-1 ml-6 \">\n <div class=\"flex flex-1 space-x-4\">\n {sites.map((site) => {\n if (site.length !== 2) return;\n const [name, url] = site\n return <a href={url} name={`site header ${name}`} class=\"hidden sm:block text-white hover:bg-indigo-500 hover:bg-opacity-75 rounded-md py-2 px-3 text-sm font-medium\">{name}</a>\n })}\n </div>\n </div>\n <div class=\"flex justify-end\">\n {!notificationURL ? undefined :\n <a href={notificationURL} name=\"notifications\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Show notifications</i18n.Translate></span>\n {ns.length > 0 ?\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-10 h-10\">\n <path d=\"M5.85 3.5a.75.75 0 0 0-1.117-1 9.719 9.719 0 0 0-2.348 4.876.75.75 0 0 0 1.479.248A8.219 8.219 0 0 1 5.85 3.5ZM19.267 2.5a.75.75 0 1 0-1.118 1 8.22 8.22 0 0 1 1.987 4.124.75.75 0 0 0 1.48-.248A9.72 9.72 0 0 0 19.266 2.5Z\" />\n <path fill-rule=\"evenodd\" d=\"M12 2.25A6.75 6.75 0 0 0 5.25 9v.75a8.217 8.217 0 0 1-2.119 5.52.75.75 0 0 0 .298 1.206c1.544.57 3.16.99 4.831 1.243a3.75 3.75 0 1 0 7.48 0 24.583 24.583 0 0 0 4.83-1.244.75.75 0 0 0 .298-1.205 8.217 8.217 0 0 1-2.118-5.52V9A6.75 6.75 0 0 0 12 2.25ZM9.75 18c0-.034 0-.067.002-.1a25.05 25.05 0 0 0 4.496 0l.002.1a2.25 2.25 0 1 1-4.5 0Z\" clip-rule=\"evenodd\" />\n </svg>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\" />\n </svg>\n }\n </a>\n }\n {!profileURL ? undefined :\n <a href={profileURL} name=\"profile\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 mr-2 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\">\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open profile</i18n.Translate></span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-10 h-10\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </svg>\n </a>\n }\n <button type=\"button\" name=\"toggle sidebar\" class=\"relative inline-flex items-center justify-center rounded-md bg-indigo-600 p-1 text-indigo-200 hover:bg-indigo-500 hover:bg-opacity-75 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-indigo-600\" aria-controls=\"mobile-menu\" aria-expanded=\"false\"\n onClick={(e) => {\n setOpen(!open)\n }}>\n <span class=\"absolute -inset-0.5\"></span>\n <span class=\"sr-only\"><i18n.Translate>Open settings</i18n.Translate></span>\n <svg class=\"block h-10 w-10\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n </svg>\n </button>\n </div>\n </div>\n </header>\n\n {\n open &&\n <div class=\"relative z-10\" name=\"sidebar overlay\" aria-labelledby=\"slide-over-title\" role=\"dialog\" aria-modal=\"true\"\n onClick={() => {\n setOpen(false)\n }}>\n <div class=\"fixed inset-0\"></div>\n\n <div class=\"fixed inset-0 overflow-hidden\">\n <div class=\"absolute inset-0 overflow-hidden\">\n <div class=\"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10\">\n <div class=\"pointer-events-auto w-screen max-w-md\" >\n <div class=\"flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl\" onClick={(e) => {\n //do not trigger close if clicking inside the sidebar\n e.stopPropagation();\n }}>\n <div class=\"px-4 sm:px-6\" >\n <div class=\"flex items-start justify-between\" >\n <h2 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"slide-over-title\">\n <i18n.Translate>Menu</i18n.Translate>\n </h2>\n <div class=\"ml-3 flex h-7 items-center\">\n <button type=\"button\" name=\"close sidebar\" class=\"relative rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2\"\n onClick={(e) => {\n setOpen(false)\n }}\n\n >\n <span class=\"absolute -inset-2.5\"></span>\n <span class=\"sr-only\">\n <i18n.Translate>Close panel</i18n.Translate>\n </span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n <div class=\"relative mt-6 flex-1 px-4 sm:px-6\">\n <nav class=\"flex flex-1 flex-col\" aria-label=\"Sidebar\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n {onLogout ?\n <li>\n <a href=\"#\"\n name=\"logout\"\n class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\"\n onClick={() => {\n onLogout();\n setOpen(false)\n }}\n >\n <svg class=\"h-6 w-6 shrink-0 text-indigo-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\" />\n </svg>\n <i18n.Translate>Log out</i18n.Translate>\n </a>\n </li>\n : undefined}\n <li>\n <LangSelector />\n </li>\n {/* CHILDREN */}\n {children}\n {/* /CHILDREN */}\n {sites.length > 0 ?\n <li class=\"block sm:hidden\">\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Sites</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-1\">\n {sites.map(([name, url]) => {\n return <li>\n <a href={url} name={`site ${name}`} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-gray-700 hover:text-indigo-600 hover:bg-gray-100 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold\">\n <span class=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-lg border text-[0.625rem] font-medium bg-white text-gray-400 border-gray-200 group-hover:border-indigo-600 group-hover:text-indigo-600\">&gt;</span>\n <span class=\"truncate\">{name}</span>\n </a>\n </li>\n })}\n </ul>\n </li>\n : undefined\n }\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </Fragment >\n}\n", "import { useTranslationContext } from \"../index.browser.js\";\nimport { h } from \"preact\";\n\nexport function Footer({ testingUrlKey, VERSION, GIT_HASH }: { VERSION?: string, GIT_HASH?: string, testingUrlKey?: string }) {\n const { i18n } = useTranslationContext()\n\n const testingUrl = (testingUrlKey && typeof localStorage !== \"undefined\") && localStorage.getItem(testingUrlKey) ?\n localStorage.getItem(testingUrlKey) ?? undefined :\n undefined\n const versionText = VERSION\n ? GIT_HASH\n ? <a href={`https://git.taler.net/wallet-core.git/tree/?id=${GIT_HASH}`} target=\"_blank\" rel=\"noreferrer noopener\">\n Version {VERSION} ({GIT_HASH.substring(0, 8)})\n </a>\n : VERSION\n : \"\";\n return (\n <footer class=\"bottom-4 my-4 mx-8 bg-slate-200\">\n <div>\n <p class=\"text-xs leading-5 text-gray-400\">\n <i18n.Translate>\n Learn more about <a target=\"_blank\" rel=\"noreferrer noopener\" class=\"font-semibold text-gray-500 hover:text-gray-400\" href=\"https://taler.net\">GNU Taler</a>\n </i18n.Translate>\n </p>\n </div>\n <div style=\"flex-grow:1\" />\n <p class=\"text-xs leading-5 text-gray-400\">\n Copyright &copy; 2014&mdash;2023 Taler Systems SA. {versionText}{\" \"}\n </p>\n {testingUrlKey && testingUrl &&\n\n <p class=\"text-xs leading-5 text-gray-300\">\n Testing with {testingUrl}{\" \"}\n <a\n href=\"\"\n onClick={(e) => {\n e.preventDefault();\n localStorage.removeItem(testingUrlKey);\n window.location.reload();\n }}\n >\n stop testing\n </a>\n </p>\n }\n </footer>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n OperationAlternative,\n OperationFail,\n OperationOk,\n OperationResult,\n TalerError,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\n// import { NotificationMessage, notifyInfo } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { HTMLAttributes, useState } from \"preact/compat\";\nimport {\n NotificationMessage,\n buildUnifiedRequestErrorMessage,\n notifyInfo,\n useTranslationContext,\n} from \"../index.browser.js\";\n// import { useBankCoreApiContext } from \"../context/config.js\";\n\n// function errorMap<T extends OperationFail<unknown>>(resp: T, map: (d: T[\"case\"]) => TranslatedString): void {\n\nexport type OnOperationSuccesReturnType<T> = (\n result: T extends OperationOk<any> ? T : never,\n) => TranslatedString | void;\nexport type OnOperationFailReturnType<T> = (\n (d: (T extends OperationFail<any> ? T : never) | (T extends OperationAlternative<any,any> ? T : never)) => TranslatedString)\n\nexport interface ButtonHandler<T extends OperationResult<A, B>, A, B> {\n onClick: () => Promise<T | undefined>;\n onNotification: (n: NotificationMessage) => void;\n onOperationSuccess: OnOperationSuccesReturnType<T>;\n onOperationFail?: OnOperationFailReturnType<T>;\n onOperationComplete?: () => void;\n}\n\ninterface Props<T extends OperationResult<A, B>, A, B>\n extends HTMLAttributes<HTMLButtonElement> {\n handler: ButtonHandler<T, A, B> | undefined;\n}\n\n/**\n * This button accept an async function and report a notification\n * on error or success.\n *\n * When the async function is running the inner text will change into\n * a \"loading\" animation.\n *\n * @param param0\n * @returns\n */\nexport function Button<T extends OperationResult<A, B>, A, B>({\n handler,\n children,\n disabled,\n onClick: clickEvent,\n ...rest\n}: Props<T, A, B>): VNode {\n const { i18n } = useTranslationContext();\n const [running, setRunning] = useState(false);\n return (\n <button\n {...rest}\n disabled={disabled || running}\n onClick={(e) => {\n e.preventDefault();\n if (!handler) {\n return;\n }\n setRunning(true);\n handler\n .onClick()\n .then((resp) => {\n if (resp) {\n if (resp.type === \"ok\") {\n const result: OperationOk<any> = resp;\n // @ts-expect-error this is an operationOk\n const msg = handler.onOperationSuccess(result);\n if (msg) {\n notifyInfo(msg);\n }\n }\n if (resp.type === \"fail\") {\n const d = 'detail' in resp ? resp.detail : undefined\n \n const title = !handler.onOperationFail ? \"Unexpected error.\" as TranslatedString : handler.onOperationFail(resp as any);\n handler.onNotification({\n title,\n type: \"error\",\n description: d && d.hint ? d.hint as TranslatedString : undefined,\n debug: d,\n when: AbsoluteTime.now(),\n });\n }\n }\n if (handler.onOperationComplete) {\n handler.onOperationComplete();\n }\n setRunning(false);\n })\n .catch((error) => {\n console.error(error);\n\n if (error instanceof TalerError) {\n handler.onNotification(\n buildUnifiedRequestErrorMessage(i18n, error),\n );\n } else {\n const description = (\n error instanceof Error ? error.message : String(error)\n ) as TranslatedString;\n\n handler.onNotification({\n title: i18n.str`Operation failed`,\n type: \"error\",\n description,\n when: AbsoluteTime.now(),\n });\n }\n\n if (handler.onOperationComplete) {\n handler.onOperationComplete();\n }\n setRunning(false);\n });\n }}\n >\n {running ? <Wait /> : children}\n </button>\n );\n}\n\nfunction Wait(): VNode {\n return (\n <Fragment>\n <style>\n {`\n #l1 { width: 120px;\n height: 20px;\n -webkit-mask: radial-gradient(circle closest-side, currentColor 90%, #0000) left/20% 100%;\n background: linear-gradient(currentColor 0 0) left/0% 100% no-repeat #ddd;\n animation: l17 2s infinite steps(6);\n }\n @keyframes l17 {\n 100% {background-size:120% 100%}\n`}\n </style>\n <div id=\"l1\" />\n </Fragment>\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\nimport { Fragment, h, VNode } from \"preact\";\n\nexport function ShowInputErrorLabel({\n isDirty,\n message,\n}: {\n message: string | undefined;\n isDirty: boolean;\n}): VNode {\n if (message && isDirty)\n return <div class=\"text-base\" style={{ color: \"red\" }}>{message}</div>;\n return <div class=\"text-base\" style={{ }}> </div>;\n}\n", "import { h, Fragment, VNode } from \"preact\";\nimport { Attention } from \"./Attention.js\";\nimport { Notification } from \"../index.browser.js\";\n\nexport function LocalNotificationBanner({ notification, showDebug }: { notification?: Notification, showDebug?: boolean }): VNode {\n if (!notification) return <Fragment />\n switch (notification.message.type) {\n case \"error\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"danger\" title={notification.message.title} onClose={() => {\n notification.acknowledge()\n }}>\n {notification.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {notification.message.description}\n </div>\n }\n {showDebug && <pre class=\"whitespace-break-spaces \">\n {notification.message.debug}\n </pre>}\n </Attention>\n </div>\n </div>\n case \"info\":\n return <div class=\"relative\">\n <div class=\"fixed top-0 left-0 right-0 z-20 w-full p-4\">\n <Attention type=\"success\" title={notification.message.title} onClose={() => {\n notification.acknowledge();\n }} /></div></div>\n }\n}\n\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Fragment, VNode, h } from \"preact\"\nimport { Attention, GLOBAL_NOTIFICATION_TIMEOUT as GLOBAL_TOAST_TIMEOUT, Notification, useNotifications } from \"../index.browser.js\"\n\n/**\n * Toasts should be considered when displaying these types of information to the user:\n * \n * Low attention messages that do not require user action\n * Singular status updates\n * Confirmations\n * Information that does not need to be followed up\n * \n * Do not use toasts if the information contains the following:\n * \n * High attention and crtitical information\n * Time-sensitive information\n * Requires user action or input\n * Batch updates\n * \n * @returns \n */\nexport function ToastBanner(): VNode {\n const notifs = useNotifications()\n if (notifs.length === 0) return <Fragment />\n const show = notifs.filter(e => !e.message.ack && !e.message.timeout)\n if (show.length === 0) return <Fragment />\n return <AttentionByType msg={show[0]} />\n}\n\nfunction AttentionByType({ msg }: { msg: Notification }) {\n switch (msg.message.type) {\n case \"error\":\n return <Attention type=\"danger\" title={msg.message.title} onClose={() => {\n msg.acknowledge()\n }} timeout={GLOBAL_TOAST_TIMEOUT}>\n {msg.message.description &&\n <div class=\"mt-2 text-sm text-red-700\">\n {msg.message.description}\n </div>\n }\n </Attention>\n case \"info\":\n return <Attention type=\"success\" title={msg.message.title} onClose={() => {\n msg.acknowledge();\n }} timeout={GLOBAL_TOAST_TIMEOUT} />\n }\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport {\n add as dateAdd,\n sub as dateSub,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n getMonth,\n getYear,\n isSameDay,\n isSameMonth,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useTranslationContext } from \"../index.browser.js\";\n\nexport function Calendar({\n value,\n onChange,\n}: {\n value: AbsoluteTime | undefined;\n onChange: (v: AbsoluteTime) => void;\n}): VNode {\n const today = startOfDay(new Date());\n const selected = !value ? today : new Date(AbsoluteTime.toStampMs(value));\n const [showingDate, setShowingDate] = useState(selected);\n const month = getMonth(showingDate);\n const year = getYear(showingDate);\n\n const start = startOfWeek(startOfMonth(showingDate));\n const end = endOfWeek(endOfMonth(showingDate));\n const daysInMonth = eachDayOfInterval({ start, end });\n const { i18n } = useTranslationContext();\n const monthNames = [\n i18n.str`January`,\n i18n.str`February`,\n i18n.str`March`,\n i18n.str`April`,\n i18n.str`May`,\n i18n.str`June`,\n i18n.str`July`,\n i18n.str`August`,\n i18n.str`September`,\n i18n.str`October`,\n i18n.str`November`,\n i18n.str`December`,\n ];\n return (\n <div class=\"text-center p-2\">\n <div class=\"flex items-center text-gray-900\">\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { years: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Previous year`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{year}</div>\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { years: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Next year`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n <div class=\"mt-4 flex items-center text-gray-900\">\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 round-sm\"\n onClick={() => {\n setShowingDate(dateSub(showingDate, { months: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Previous month`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold\">{monthNames[month]}</div>\n <button\n type=\"button\"\n class=\"flex px-4 flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500 ring-2 rounded-sm \"\n onClick={() => {\n setShowingDate(dateAdd(showingDate, { months: 1 }));\n }}\n >\n <span class=\"sr-only\">{i18n.str`Next month`}</span>\n <svg\n class=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n <div class=\"mt-6 grid grid-cols-7 text-xs leading-6 text-gray-500\">\n <div>M</div>\n <div>T</div>\n <div>W</div>\n <div>T</div>\n <div>F</div>\n <div>S</div>\n <div>S</div>\n </div>\n <div class=\"isolate mt-2\">\n <div class=\"grid grid-cols-7 gap-px rounded-lg bg-gray-200 text-sm shadow ring-1 ring-gray-200\">\n {daysInMonth.map((current, idx) => (\n <button\n type=\"button\"\n key={idx}\n data-month={isSameMonth(current, showingDate)}\n data-today={isSameDay(current, today)}\n data-selected={isSameDay(current, selected)}\n onClick={() => {\n onChange(AbsoluteTime.fromStampMs(current.getTime()));\n }}\n class=\"text-gray-400 hover:bg-gray-700 focus:z-10 py-1.5 \n data-[month=false]:bg-gray-100 data-[month=true]:bg-white \n data-[today=true]:font-semibold \n data-[month=true]:text-gray-900\n data-[today=true]:bg-red-300 data-[today=true]:hover:bg-red-200\n data-[month=true]:hover:bg-gray-200\n data-[selected=true]:!bg-blue-400 data-[selected=true]:hover:!bg-blue-300 \"\n >\n <time\n dateTime={format(current, \"yyyy-MM-dd\")}\n class=\"mx-auto flex h-7 w-7 py-4 px-5 sm:px-8 items-center justify-center rounded-full\"\n >\n {format(current, \"dd\")}\n </time>\n </button>\n ))}\n </div>\n {daysInMonth.length < 40 ? <div class=\"w-7 h-7 m-1.5\" /> : undefined}\n </div>\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired, RenderAddon } from \"./InputLine.js\";\nimport { Addon } from \"./FormProvider.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: Addon;\n after?: Addon;\n}\n\nexport function Caption({ before, after, label, tooltip, help }: Props): VNode {\n return (\n <div class=\"sm:col-span-6 flex\">\n {before !== undefined && <RenderAddon addon={before} />}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && <RenderAddon addon={after} />}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { Addon, UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { useField } from \"./useField.js\";\n\n//@ts-ignore\nconst TooltipIcon = (\n <svg\n class=\"w-5 h-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n);\n\nexport function LabelWithTooltipMaybeRequired({\n label,\n required,\n tooltip,\n}: {\n label: TranslatedString;\n required?: boolean;\n tooltip?: TranslatedString;\n}): VNode {\n const Label = (\n <Fragment>\n <div class=\"flex justify-between\">\n <label\n htmlFor=\"email\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {label}\n </label>\n </div>\n </Fragment>\n );\n const WithTooltip = tooltip ? (\n <div class=\"relative flex flex-grow items-stretch focus-within:z-10\">\n {Label}\n <span class=\"relative flex items-center group pl-2\">\n {TooltipIcon}\n <div class=\"absolute bottom-0 -ml-10 hidden flex-col items-center mb-6 group-hover:flex w-28\">\n <div class=\"relative z-10 p-2 text-xs leading-none text-white whitespace-no-wrap bg-black shadow-lg\">\n {tooltip}\n </div>\n <div class=\"w-3 h-3 -mt-2 rotate-45 bg-black\"></div>\n </div>\n </span>\n </div>\n ) : (\n Label\n );\n if (required) {\n return (\n <div class=\"flex justify-between\">\n {WithTooltip}\n <span class=\"text-sm leading-6 text-red-600\">*</span>\n </div>\n );\n }\n return WithTooltip;\n}\n\nexport function RenderAddon({ disabled, addon }: { disabled?: boolean, addon: Addon }): VNode {\n switch (addon.type) {\n case \"text\": {\n return (\n <span class=\"inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm\">\n {addon.text}\n </span>\n );\n }\n case \"icon\": {\n return (\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n {addon.icon}\n </div>\n );\n }\n case \"button\": {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={addon.onClick}\n class=\"relative -ml-px inline-flex items-center gap-x-1.5 rounded-l-md px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50\"\n >\n {addon.children}\n </button>\n );\n }\n }\n}\n\nfunction InputWrapper<T extends object, K extends keyof T>({\n children,\n label,\n tooltip,\n before,\n after,\n help,\n error,\n disabled,\n required,\n}: {\n error?: string;\n disabled: boolean;\n children: ComponentChildren;\n} & UIFormProps<T, K>): VNode {\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <div class=\"relative mt-2 flex rounded-md shadow-sm\">\n {before && <RenderAddon disabled={disabled} addon={before} />}\n\n {children}\n\n {after && <RenderAddon disabled={disabled} addon={after} />}\n </div>\n {error && (\n <p class=\"mt-2 text-sm text-red-600\" id=\"email-error\">\n {error}\n </p>\n )}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n\nfunction defaultToString(v: unknown) {\n return v === undefined ? \"\" : typeof v !== \"object\" ? String(v) : \"\";\n}\nfunction defaultFromString(v: string) {\n return v;\n}\n\ntype InputType = \"text\" | \"text-area\" | \"password\" | \"email\" | \"number\";\n\nexport function InputLine<T extends object, K extends keyof T>(\n props: { type: InputType } & UIFormProps<T, K>,\n): VNode {\n const { name, placeholder, before, after, converter, type } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state, error } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n // const [text, setText] = useState(\"\");\n const fromString: (s: string) => any =\n converter?.fromStringUI ?? defaultFromString;\n const toString: (s: any) => string = converter?.toStringUI ?? defaultToString;\n\n // useEffect(() => {\n // const newValue = toString(value);\n // if (newValue) {\n // setText(newValue);\n // }\n // }, [value]);\n\n if (state.hidden) return <div />;\n\n let clazz =\n \"block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200\";\n if (before) {\n switch (before.type) {\n case \"icon\": {\n clazz += \" pl-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-r-md \";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-r-md rounded-none \";\n break;\n }\n }\n }\n if (after) {\n switch (after.type) {\n case \"icon\": {\n clazz += \" pr-10\";\n break;\n }\n case \"button\": {\n clazz += \" rounded-none rounded-l-md\";\n break;\n }\n case \"text\": {\n clazz += \" min-w-0 flex-1 rounded-l-md rounded-none \";\n break;\n }\n }\n }\n const showError = value !== undefined && error;\n if (showError) {\n clazz +=\n \" text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500\";\n } else {\n clazz +=\n \" text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-indigo-600\";\n }\n\n if (type === \"text-area\") {\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? error : undefined}\n >\n <textarea\n rows={4}\n name={String(name)}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n }\n\n return (\n <InputWrapper<T, K>\n {...props}\n help={props.help ?? state.help}\n disabled={state.disabled ?? false}\n error={showError ? error : undefined}\n >\n <input\n name={String(name)}\n type={type}\n onChange={(e) => {\n onChange(fromString(e.currentTarget.value));\n }}\n placeholder={placeholder ? placeholder : undefined}\n value={toString(value) ?? \"\"}\n // onBlur={() => {\n // onChange(fromString(value as any));\n // }}\n // defaultValue={toString(value)}\n disabled={state.disabled}\n aria-invalid={showError}\n // aria-describedby=\"email-error\"\n class={clazz}\n />\n </InputWrapper>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormProvider, UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { useField } from \"./useField.js\";\n\nfunction Option({\n label,\n disabled,\n isFirst,\n isLast,\n isSelected,\n onClick,\n}: {\n label: TranslatedString;\n isFirst?: boolean;\n isLast?: boolean;\n isSelected?: boolean;\n disabled?: boolean;\n onClick: () => void;\n}): VNode {\n let clazz = \"relative flex border p-4 focus:outline-none disabled:text-grey\";\n if (isFirst) {\n clazz += \" rounded-tl-md rounded-tr-md \";\n }\n if (isLast) {\n clazz += \" rounded-bl-md rounded-br-md \";\n }\n if (isSelected) {\n clazz += \" z-10 border-indigo-200 bg-indigo-50 \";\n } else {\n clazz += \" border-gray-200\";\n }\n if (disabled) {\n clazz +=\n \" cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray\";\n } else {\n clazz += \" cursor-pointer\";\n }\n return (\n <label class={clazz}>\n <input\n type=\"radio\"\n name=\"privacy-setting\"\n checked={isSelected}\n disabled={disabled}\n onClick={onClick}\n class=\"mt-0.5 h-4 w-4 shrink-0 text-indigo-600 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200 focus:ring-indigo-600\"\n aria-labelledby=\"privacy-setting-0-label\"\n aria-describedby=\"privacy-setting-0-description\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n id=\"privacy-setting-0-label\"\n disabled\n class=\"block text-sm font-medium\"\n >\n {label}\n </span>\n {/* <!-- Checked: \"text-indigo-700\", Not Checked: \"text-gray-500\" --> */}\n {/* <span\n id=\"privacy-setting-0-description\"\n class=\"block text-sm\"\n >\n This project would be available to anyone who has the link\n </span> */}\n </span>\n </label>\n );\n}\n\nexport function noHandlerPropsAndNoContextForField(\n field: string | number | symbol,\n): never {\n throw Error(\n `Field ${field.toString()} doesn't have handler and is not in a form provider context.`,\n );\n}\n\nexport function InputArray<T extends object, K extends keyof T>(\n props: {\n fields: UIFormField[];\n labelField: string;\n } & UIFormProps<T, K>,\n): VNode {\n const { fields, labelField, name, label, required, tooltip } = props;\n // const { value, onChange, state } = useField<T, K>(name);\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n if (!props.handler && !fieldCtx) {\n throw Error(\"\");\n }\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const list = (value ?? []) as Array<Record<string, string | undefined>>;\n const [selectedIndex, setSelected] = useState<number | undefined>(undefined);\n const selected =\n selectedIndex === undefined ? undefined : list[selectedIndex];\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n\n <div class=\"-space-y-px rounded-md bg-white \">\n {list.map((v, idx) => {\n return (\n <Option\n label={v[labelField] as TranslatedString}\n key={idx}\n isSelected={selectedIndex === idx}\n isLast={idx === list.length - 1}\n disabled={selectedIndex !== undefined && selectedIndex !== idx}\n isFirst={idx === 0}\n onClick={() => {\n setSelected(selectedIndex === idx ? undefined : idx);\n }}\n />\n );\n })}\n {!state.disabled && (\n <div class=\"pt-2\">\n <Option\n label={\"Add...\" as TranslatedString}\n isSelected={selectedIndex === list.length}\n isLast\n isFirst\n disabled={\n selectedIndex !== undefined && selectedIndex !== list.length\n }\n onClick={() => {\n setSelected(\n selectedIndex === list.length ? undefined : list.length,\n );\n }}\n />\n </div>\n )}\n </div>\n {selectedIndex !== undefined && (\n /**\n * This form provider act as a substate of the parent form\n * Consider creating an InnerFormProvider since not every feature is expected\n */\n <FormProvider\n initial={selected}\n readOnly={state.disabled}\n computeFormState={(v) => {\n // current state is ignored\n // the state is defined by the parent form\n\n // elements should be present in the state object since this is expected to be an array\n //@ts-ignore\n // return state.elements[selectedIndex];\n return {}\n }}\n onSubmit={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as any);\n setSelected(undefined);\n }}\n onUpdate={(v) => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1, v);\n onChange(newValue as any);\n }}\n >\n <div class=\"px-4 py-6\">\n <div class=\"grid grid-cols-1 gap-y-8 \">\n <RenderAllFieldsByUiConfig fields={fields} />\n </div>\n </div>\n </FormProvider>\n )}\n {selectedIndex !== undefined && (\n <div class=\"flex items-center pt-3\">\n <div class=\"flex-auto\">\n {selected !== undefined && (\n <button\n type=\"button\"\n onClick={() => {\n const newValue = [...list];\n newValue.splice(selectedIndex, 1);\n onChange(newValue as any);\n setSelected(undefined);\n }}\n class=\"block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 \"\n >\n Remove\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n", "import {\n AbsoluteTime,\n AmountJson,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, VNode, createContext, h } from \"preact\";\nimport { MutableRef, useState } from \"preact/hooks\";\n\nexport interface FormType<T extends object> {\n value: MutableRef<Partial<T>>;\n initial?: Partial<T>;\n readOnly?: boolean;\n onUpdate?: (v: Partial<T>) => void;\n computeFormState?: (v: Partial<T>) => FormState<T>;\n}\n\nexport const FormContext = createContext<FormType<any>| undefined>(undefined);\n\n/**\n * Map of {[field]:FieldUIOptions}\n * for every field of type\n * - any native (string, number, etc...)\n * - absoluteTime\n * - amountJson\n *\n * except for:\n * - object => recurse into\n * - array => behavior result and element field\n */\nexport type FormState<T extends object | undefined> = {\n [field in keyof T]?: T[field] extends AbsoluteTime\n ? FieldUIOptions\n : T[field] extends AmountJson\n ? FieldUIOptions\n : T[field] extends Array<infer P extends object>\n ? InputArrayFieldState<P>\n : T[field] extends object | undefined\n ? FormState<T[field]>\n : FieldUIOptions;\n};\n\n/**\n * Properties that can be defined by design or by computing state\n */\nexport type FieldUIOptions = {\n /* instruction to be shown in the field */\n placeholder?: TranslatedString;\n /* long text help to be shown on demand */\n tooltip?: TranslatedString;\n /* short text to be shown next to the field*/\n\n help?: TranslatedString;\n /* should show as disabled and readonly */\n disabled?: boolean;\n /* should not show */\n hidden?: boolean;\n\n /* show a mark as required*/\n required?: boolean;\n};\n\n/**\n * properties only to be defined on design time\n */\nexport interface UIFormProps<T extends object, K extends keyof T>\n extends FieldUIOptions {\n // property name of the object\n name: K;\n\n // label if the field\n label: TranslatedString;\n before?: Addon;\n after?: Addon;\n\n // converter to string and back\n converter?: StringConverter<T[K]>;\n\n handler?: UIFieldHandler;\n}\n\nexport type UIFieldHandler = {\n value: string | undefined;\n onChange: (s: string) => void;\n state: FieldUIOptions;\n error?: TranslatedString;\n};\n\nexport interface IconAddon {\n type: \"icon\";\n icon: VNode;\n}\nexport interface ButtonAddon {\n type: \"button\";\n onClick: () => void;\n children: ComponentChildren;\n}\nexport interface TextAddon {\n type: \"text\";\n text: TranslatedString;\n}\nexport type Addon = IconAddon | ButtonAddon | TextAddon;\n\nexport interface StringConverter<T> {\n toStringUI: (v?: T) => string;\n fromStringUI: (v?: string) => T;\n}\n\nexport interface InputArrayFieldState<P extends object> extends FieldUIOptions {\n elements?: FormState<P>[];\n}\n\nexport type FormProviderProps<T extends object> = Omit<FormType<T>, \"value\"> & {\n onSubmit?: (v: Partial<T>, s: FormState<T> | undefined) => void;\n children?: ComponentChildren;\n};\n\nexport function FormProvider<T extends object>({\n children,\n initial,\n onUpdate: notify,\n onSubmit,\n computeFormState,\n readOnly,\n}: FormProviderProps<T>): VNode {\n const [state, setState] = useState<Partial<T>>(initial ?? {});\n const value = { current: state };\n const onUpdate = (v: typeof state) => {\n setState(v);\n if (notify) notify(v);\n };\n return (\n <FormContext.Provider\n value={{ initial, value, onUpdate, computeFormState, readOnly }}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n //@ts-ignore\n if (onSubmit)\n onSubmit(\n value.current,\n !computeFormState ? undefined : computeFormState(value.current),\n );\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n", "import { h as create, Fragment, VNode } from \"preact\";\nimport { Caption } from \"./Caption.js\";\nimport { Group } from \"./Group.js\";\nimport { InputAbsoluteTime } from \"./InputAbsoluteTime.js\";\nimport { InputAmount } from \"./InputAmount.js\";\nimport { InputArray } from \"./InputArray.js\";\nimport { InputChoiceHorizontal } from \"./InputChoiceHorizontal.js\";\nimport { InputChoiceStacked } from \"./InputChoiceStacked.js\";\nimport { InputFile } from \"./InputFile.js\";\nimport { InputInteger } from \"./InputInteger.js\";\nimport { InputSelectMultiple } from \"./InputSelectMultiple.js\";\nimport { InputSelectOne } from \"./InputSelectOne.js\";\nimport { InputText } from \"./InputText.js\";\nimport { InputTextArea } from \"./InputTextArea.js\";\nimport { InputToggle } from \"./InputToggle.js\";\nimport { Addon, StringConverter, UIFieldHandler } from \"./FormProvider.js\";\nimport { InternationalizationAPI, UIFieldBaseDescription } from \"../index.browser.js\";\nimport { assertUnreachable, TranslatedString } from \"@gnu-taler/taler-util\";\nimport {UIFormFieldBaseConfig, UIFormFieldConfig} from \"./ui-form.js\";\n/**\n * Constrain the type with the ui props\n */\ntype FieldType<T extends object = any, K extends keyof T = any> = {\n group: Parameters<typeof Group>[0];\n caption: Parameters<typeof Caption>[0];\n array: Parameters<typeof InputArray<T, K>>[0];\n file: Parameters<typeof InputFile<T, K>>[0];\n selectOne: Parameters<typeof InputSelectOne<T, K>>[0];\n selectMultiple: Parameters<typeof InputSelectMultiple<T, K>>[0];\n text: Parameters<typeof InputText<T, K>>[0];\n textArea: Parameters<typeof InputTextArea<T, K>>[0];\n choiceStacked: Parameters<typeof InputChoiceStacked<T, K>>[0];\n choiceHorizontal: Parameters<typeof InputChoiceHorizontal<T, K>>[0];\n absoluteTime: Parameters<typeof InputAbsoluteTime<T, K>>[0];\n integer: Parameters<typeof InputInteger<T, K>>[0];\n toggle: Parameters<typeof InputToggle<T, K>>[0];\n amount: Parameters<typeof InputAmount<T, K>>[0];\n};\n\n/**\n * List all the form fields so typescript can type-check the form instance\n */\nexport type UIFormField =\n | { type: \"group\"; properties: FieldType[\"group\"] }\n | { type: \"caption\"; properties: FieldType[\"caption\"] }\n | { type: \"array\"; properties: FieldType[\"array\"] }\n | { type: \"file\"; properties: FieldType[\"file\"] }\n | { type: \"amount\"; properties: FieldType[\"amount\"] }\n | { type: \"selectOne\"; properties: FieldType[\"selectOne\"] }\n | {\n type: \"selectMultiple\";\n properties: FieldType[\"selectMultiple\"];\n }\n | { type: \"text\"; properties: FieldType[\"text\"] }\n | { type: \"textArea\"; properties: FieldType[\"textArea\"] }\n | {\n type: \"choiceStacked\";\n properties: FieldType[\"choiceStacked\"];\n }\n | {\n type: \"choiceHorizontal\";\n properties: FieldType[\"choiceHorizontal\"];\n }\n | { type: \"integer\"; properties: FieldType[\"integer\"] }\n | { type: \"toggle\"; properties: FieldType[\"toggle\"] }\n | {\n type: \"absoluteTime\";\n properties: FieldType[\"absoluteTime\"];\n };\n\ntype FieldComponentFunction<key extends keyof FieldType> = (\n props: FieldType[key],\n) => VNode;\n\ntype UIFormFieldMap = {\n [key in keyof FieldType]: FieldComponentFunction<key>;\n};\n\n/**\n * Maps input type with component implementation\n */\nconst UIFormConfiguration: UIFormFieldMap = {\n group: Group,\n caption: Caption,\n //@ts-ignore\n array: InputArray,\n text: InputText,\n //@ts-ignore\n file: InputFile,\n textArea: InputTextArea,\n //@ts-ignore\n absoluteTime: InputAbsoluteTime,\n //@ts-ignore\n choiceStacked: InputChoiceStacked,\n //@ts-ignore\n choiceHorizontal: InputChoiceHorizontal,\n integer: InputInteger,\n //@ts-ignore\n selectOne: InputSelectOne,\n //@ts-ignore\n selectMultiple: InputSelectMultiple,\n //@ts-ignore\n toggle: InputToggle,\n //@ts-ignore\n amount: InputAmount,\n};\n\nexport function RenderAllFieldsByUiConfig({\n fields,\n}: {\n fields: UIFormField[];\n}): VNode {\n return create(\n Fragment,\n {},\n fields.map((field, i) => {\n const Component = UIFormConfiguration[\n field.type\n ] as FieldComponentFunction<any>;\n return Component(field.properties);\n }),\n );\n}\n\n// type FormSet<T extends object> = {\n// Provider: typeof FormProvider<T>;\n// InputLine: <K extends keyof T>() => typeof InputLine<T, K>;\n// InputChoiceHorizontal: <K extends keyof T>() => typeof InputChoiceHorizontal<T, K>;\n// };\n\n/**\n * Helper function that created a typed object.\n *\n * @returns\n */\n// export function createNewForm<T extends object>() {\n// const res: FormSet<T> = {\n// Provider: FormProvider,\n// InputLine: () => InputLine,\n// InputChoiceHorizontal: () => InputChoiceHorizontal,\n// };\n// return {\n// Provider: res.Provider,\n// InputLine: res.InputLine(),\n// InputChoiceHorizontal: res.InputChoiceHorizontal(),\n// };\n// }\n\n/**\n * convert field configuration to render function\n * \n * @param i18n_ \n * @param fieldConfig \n * @param form \n * @returns \n */\nexport function convertUiField(\n i18n_: InternationalizationAPI,\n fieldConfig: UIFormFieldConfig[],\n form: object,\n getConverterById: GetConverterById,\n): UIFormField[] {\n return fieldConfig.map((config) => {\n // NON input fields\n switch (config.type) {\n case \"caption\": {\n const resp: UIFormField = {\n type: config.type,\n properties: converBaseFieldsProps(i18n_, config.properties),\n };\n return resp;\n }\n case \"group\": {\n const resp: UIFormField = {\n type: config.type,\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n fields: convertUiField(i18n_, config.properties.fields, form, getConverterById),\n },\n };\n return resp;\n }\n }\n // Input Fields\n switch (config.type) {\n case \"array\": {\n return {\n type: \"array\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n labelField: config.properties.labelFieldId,\n fields: convertUiField(i18n_, config.properties.fields, form, getConverterById),\n },\n } as UIFormField;\n }\n case \"absoluteTime\": {\n return {\n type: \"absoluteTime\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"amount\": {\n return {\n type: \"amount\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById), \n },\n } as UIFormField;\n }\n case \"choiceHorizontal\": {\n return {\n type: \"choiceHorizontal\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"choiceStacked\": {\n return {\n type: \"choiceStacked\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n \n },\n }as UIFormField;\n }\n case \"file\":{\n return {\n type: \"file\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n accept: config.properties.accept,\n maxBites: config.properties.maxBytes,\n },\n } as UIFormField;\n }\n case \"integer\":{\n return {\n type: \"integer\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"selectMultiple\":{\n return {\n type: \"selectMultiple\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"selectOne\": {\n return {\n type: \"selectOne\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n choices: config.properties.choices,\n },\n } as UIFormField;\n }\n case \"text\": {\n return {\n type: \"text\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"textArea\": {\n return {\n type: \"text\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n case \"toggle\": {\n return {\n type: \"toggle\",\n properties: {\n ...converBaseFieldsProps(i18n_, config.properties),\n ...converInputFieldsProps(form, config.properties, getConverterById),\n },\n } as UIFormField;\n }\n default: {\n assertUnreachable(config);\n }\n }\n });\n}\n\n\n\nfunction getAddonById(_id: string | undefined): Addon {\n return undefined!;\n}\n\n\ntype GetConverterById = (\n id: string | undefined,\n config: unknown,\n) => StringConverter<unknown>;\n\n\nfunction converInputFieldsProps(\n form: object,\n p: UIFormFieldBaseConfig,\n getConverterById: GetConverterById,\n) {\n return {\n converter: getConverterById(p.converterId, p),\n handler: getValueDeeper2(form, p.id.split(\".\")),\n name: p.name,\n required: p.required,\n disabled: p.disabled,\n help: p.help,\n placeholder: p.placeholder,\n tooltip: p.tooltip,\n label: p.label as TranslatedString,\n };\n}\n\nfunction converBaseFieldsProps(\n i18n_: InternationalizationAPI,\n p: UIFieldBaseDescription,\n) {\n return {\n after: getAddonById(p.addonAfterId),\n before: getAddonById(p.addonBeforeId),\n hidden: p.hidden,\n name: p.name,\n help: i18n_.str`${p.help}`,\n label: i18n_.str`${p.label}`,\n tooltip: i18n_.str`${p.tooltip}`,\n };\n}\n\nfunction getValueDeeper2(\n object: Record<string, any>,\n names: string[],\n): UIFieldHandler {\n if (names.length === 0) return object as UIFieldHandler;\n const [head, ...rest] = names;\n if (!head) {\n return getValueDeeper2(object, rest);\n }\n if (object === undefined) {\n throw Error(\"handler not found\");\n }\n return getValueDeeper2(object[head], rest);\n}\n\n\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { LabelWithTooltipMaybeRequired, RenderAddon } from \"./InputLine.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField, convertUiField } from \"./forms.js\";\nimport { Addon, FormProvider } from \"./FormProvider.js\";\nimport { useField } from \"./useField.js\";\nimport { useTranslationContext } from \"../index.browser.js\";\nimport { getConverterById } from \"./converter.js\";\n\ninterface Props {\n label: TranslatedString;\n tooltip?: TranslatedString;\n help?: TranslatedString;\n before?: Addon;\n after?: Addon;\n fields: UIFormField[];\n}\n\nexport function Group({\n before,\n after,\n label,\n tooltip,\n help,\n fields,\n}: Props): VNode {\n return (\n <div class=\"sm:col-span-6 p-4 rounded-lg border-r-2 border-2 bg-gray-50\">\n {before !== undefined && <RenderAddon addon={before} />}\n <LabelWithTooltipMaybeRequired label={label} tooltip={tooltip} />\n {after !== undefined && <RenderAddon addon={after} />}\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-2 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig \n fields={fields}\n />\n </div>\n </div>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\";\nimport { format, parse } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Calendar } from \"./Calendar.js\";\nimport { Dialog } from \"./Dialog.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputAbsoluteTime<T extends object, K extends keyof T>(\n properties: { pattern?: string } & UIFormProps<T, K>,\n): VNode {\n const pattern = properties.pattern ?? \"dd/MM/yyyy\";\n const [open, setOpen] = useState(false);\n\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(properties.name);\n const { value, onChange } =\n properties.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(properties.name);\n return (\n <Fragment>\n <InputLine<T, K>\n type=\"text\"\n after={{\n type: \"button\",\n onClick: () => {\n setOpen(true);\n },\n // icon: <CalendarIcon class=\"h-6 w-6\" />,\n children: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\"\n />\n </svg>\n ),\n }}\n converter={{\n //@ts-ignore\n fromStringUI: (v): AbsoluteTime | undefined => {\n if (!v) return undefined;\n try {\n const t_ms = parse(v, pattern, Date.now()).getTime();\n return AbsoluteTime.fromMilliseconds(t_ms);\n } catch (e) {\n return undefined;\n }\n },\n //@ts-ignore\n toStringUI: (v: AbsoluteTime | undefined) => {\n return !v || !v.t_ms\n ? undefined\n : v.t_ms === \"never\"\n ? \"never\"\n : format(v.t_ms, pattern);\n },\n }}\n {...properties}\n />\n {open && (\n <Dialog onClose={() => setOpen(false)}>\n <Calendar\n value={(value as AbsoluteTime) ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any);\n setOpen(false);\n }}\n />\n </Dialog>\n )}\n {/* {open &&\n <Dialog onClose={() => setOpen(false)} >\n <TimePicker value={value as AbsoluteTime ?? AbsoluteTime.now()}\n onChange={(v) => {\n onChange(v as any)\n }}\n onConfirm={() => {\n setOpen(false)\n }} />\n </Dialog>} */}\n </Fragment>\n );\n}\n", "import { ComponentChildren, VNode, h } from \"preact\";\n\nexport function Dialog({ children, onClose }: { onClose?: () => void; children: ComponentChildren }): VNode {\n return <div class=\"relative z-10\" aria-labelledby=\"modal-title\" role=\"dialog\" aria-modal=\"true\" onClick={onClose}>\n <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n <div class=\"flex min-h-full items-center justify-center p-4 text-center \">\n <div class=\"relative transform overflow-hidden rounded-lg bg-white p-1 text-left shadow-xl transition-all\" onClick={(e) => e.stopPropagation()}>\n {children}\n </div>\n </div>\n </div>\n </div>\n}\n", "import { useContext } from \"preact/compat\";\nimport { FieldUIOptions, FormContext } from \"./FormProvider.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n\nexport interface InputFieldHandler<Type> {\n value: Type;\n onChange: (s: Type) => void;\n state: FieldUIOptions;\n error?: TranslatedString | undefined;\n}\n\n/**\n * @depreacted removing this so we don't depend on context to create a form\n * @param name \n * @returns \n */\nexport function useField<T extends object, K extends keyof T>(\n name: K,\n): InputFieldHandler<T[K]> | undefined {\n const ctx = useContext(FormContext);\n if (!ctx) {\n //no context, can't be used\n return undefined;\n }\n const {\n value: formValue,\n computeFormState,\n onUpdate: notifyUpdate,\n readOnly: readOnlyForm,\n } = ctx\n\n type P = typeof name;\n type V = T[P];\n const formState = computeFormState ? computeFormState(formValue.current) : {};\n\n const fieldValue = readField(formValue.current, String(name)) as V;\n\n const fieldState =\n readField<Partial<FieldUIOptions>>(formState, String(name)) ?? {};\n\n //compute default state\n const state = {\n disabled: readOnlyForm ? true : (fieldState.disabled ?? false),\n hidden: fieldState.hidden ?? false,\n help: fieldState.help,\n elements: \"elements\" in fieldState ? fieldState.elements ?? [] : [],\n };\n\n function onChange(value: V): void {\n // setCurrentValue(value);\n formValue.current = setValueDeeper(\n formValue.current,\n String(name).split(\".\"),\n value,\n );\n if (notifyUpdate) {\n notifyUpdate(formValue.current);\n }\n }\n\n return {\n value: fieldValue,\n onChange,\n state,\n };\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 */\nfunction readField<T>(\n object: any,\n name: string,\n): T | undefined {\n return name.split(\".\").reduce((prev, current) => {\n return prev ? prev[current] : undefined;\n }, object);\n}\n\nfunction setValueDeeper(object: any, names: string[], value: any): any {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n if (object === undefined) {\n return { [head]: setValueDeeper({}, rest, value) };\n }\n return { ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) };\n}\n", "import { AmountJson, Amounts, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputAmount<T extends object, K extends keyof T>(\n props: { currency?: string } & UIFormProps<T, K>,\n): VNode {\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n const currency =\n !value || !(value as any).currency\n ? props.currency\n : (value as any).currency;\n return (\n <InputLine<T, K>\n type=\"text\"\n before={{\n type: \"text\",\n text: currency as TranslatedString,\n }}\n //@ts-ignore \n converter={ props.converter ?? {\n\n fromStringUI: (v): AmountJson => {\n return (\n Amounts.parse(`${currency}:${v}`) ??\n Amounts.zeroOfCurrency(currency)\n );\n },\n toStringUI: (v: AmountJson) => {\n return v === undefined ? \"\" : Amounts.stringifyValue(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport interface ChoiceH<V> {\n label: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceHorizontal<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceH<string>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { choices, label, tooltip, help, required, converter } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"isolate inline-flex rounded-md shadow-sm\">\n {choices.map((choice, idx) => {\n const isFirst = idx === 0;\n const isLast = idx === choices.length - 1;\n let clazz =\n \"relative inline-flex items-center px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 focus:z-10\";\n if (converter?.fromStringUI(choice.value as any) === value) {\n clazz +=\n \" text-white bg-indigo-600 hover:bg-indigo-500 ring-2 ring-indigo-600 hover:ring-indigo-500\";\n } else {\n clazz += \" hover:bg-gray-100 border-gray-300\";\n }\n if (isFirst) {\n clazz += \" rounded-l-md\";\n } else {\n clazz += \" -ml-px\";\n }\n if (isLast) {\n clazz += \" rounded-r-md\";\n }\n return (\n <button\n type=\"button\"\n key={idx}\n disabled={state.disabled}\n label={choice.label}\n class={clazz}\n onClick={(e) => {\n onChange(\n (value === choice.value ? undefined : converter?.fromStringUI(choice.value as any)) as any,\n );\n }}\n >\n {choice.label}\n </button>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport interface ChoiceS<V> {\n label: TranslatedString;\n description?: TranslatedString;\n value: V;\n}\n\nexport function InputChoiceStacked<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const {\n choices,\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n if (state.hidden) {\n return <Fragment />;\n }\n\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <fieldset class=\"mt-2\">\n <div class=\"space-y-4\">\n {choices.map((choice, idx) => {\n // const currentValue = !converter\n // ? choice.value\n // : converter.fromStringUI(choice.value) ?? \"\";\n\n let clazz =\n \"border relative block cursor-pointer rounded-lg bg-white px-6 py-4 shadow-sm focus:outline-none sm:flex sm:justify-between\";\n if (choice.value === value) {\n clazz +=\n \" border-transparent border-indigo-600 ring-2 ring-indigo-600\";\n } else {\n clazz += \" border-gray-300\";\n }\n\n return (\n <label key={idx} class={clazz}>\n <input\n type=\"radio\"\n name=\"server-size\"\n // defaultValue={choice.value}\n disabled={state.disabled}\n value={\n (!converter\n ? (choice.value as string)\n : converter?.toStringUI(choice.value)) ?? \"\"\n }\n onClick={(e) => {\n onChange(\n (value === choice.value\n ? undefined\n : choice.value) as any,\n );\n }}\n class=\"sr-only\"\n aria-labelledby=\"server-size-0-label\"\n aria-describedby=\"server-size-0-description-0 server-size-0-description-1\"\n />\n <span class=\"flex items-center\">\n <span class=\"flex flex-col text-sm\">\n <span\n id=\"server-size-0-label\"\n class=\"font-medium text-gray-900\"\n >\n {choice.label}\n </span>\n {choice.description !== undefined && (\n <span\n id=\"server-size-0-description-0\"\n class=\"text-gray-500\"\n >\n <span class=\"block sm:inline\">\n {choice.description}\n </span>\n </span>\n )}\n </span>\n </span>\n </label>\n );\n })}\n </div>\n </fieldset>\n {help && (\n <p class=\"mt-2 text-sm text-gray-500\" id=\"email-description\">\n {help}\n </p>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputFile<T extends object, K extends keyof T>(\n props: { maxBites: number; accept?: string } & UIFormProps<T, K>,\n): VNode {\n const {\n label,\n tooltip,\n required,\n help: propsHelp,\n maxBites,\n accept,\n } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const help = propsHelp ?? state.help;\n if (state.hidden) {\n return <div />;\n }\n\n const valueStr = !value ? \"\" : value.toString();\n const firstColon = valueStr.indexOf(\";\");\n\n const { fileName, dataUri } = valueStr.startsWith(\"file:\")\n ? {\n fileName: valueStr.substring(5, firstColon),\n dataUri: valueStr.substring(firstColon + 1),\n }\n : {\n fileName: \"\",\n dataUri: valueStr,\n };\n\n return (\n <div class=\"col-span-full\">\n <LabelWithTooltipMaybeRequired\n label={label}\n tooltip={tooltip}\n required={required}\n />\n {!dataUri ? (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 py-1\">\n <div class=\"text-center\">\n <svg\n class=\"mx-auto h-12 w-12 text-gray-300\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.5 6a2.25 2.25 0 012.25-2.25h16.5A2.25 2.25 0 0122.5 6v12a2.25 2.25 0 01-2.25 2.25H3.75A2.25 2.25 0 011.5 18V6zM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0021 18v-1.94l-2.69-2.689a1.5 1.5 0 00-2.12 0l-.88.879.97.97a.75.75 0 11-1.06 1.06l-5.16-5.159a1.5 1.5 0 00-2.12 0L3 16.061zm10.125-7.81a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n {!state.disabled && (\n <div class=\"my-2 flex text-sm leading-6 text-gray-600\">\n <label\n for={String(props.name)}\n class=\"relative cursor-pointer rounded-md bg-white font-semibold text-indigo-600 focus-within:outline-none focus-within:ring-2 focus-within:ring-indigo-600 focus-within:ring-offset-2 hover:text-indigo-500\"\n >\n <span>Upload a file</span>\n <input\n id={String(props.name)}\n type=\"file\"\n class=\"sr-only\"\n accept={accept}\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 > maxBites) {\n return onChange(undefined!);\n }\n const fileName = f[0].name;\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 if (fileName) {\n return onChange(\n `file:${fileName};data:${f[0].type};base64,${b64}` as any,\n );\n } else {\n return onChange(\n `data:${f[0].type};base64,${b64}` as any,\n );\n }\n });\n }}\n />\n </label>\n {/* <p class=\"pl-1\">or drag and drop</p> */}\n </div>\n )}\n </div>\n </div>\n ) : (\n <div class=\"mt-2 flex justify-center rounded-lg border border-dashed border-gray-900/25 relative\">\n {(dataUri as string).startsWith(\"data:image/\") ? (\n <img src={dataUri} class=\" h-24 w-full object-cover relative\" />\n ) : (\n <div />\n )}\n {fileName ? (\n <div class=\"absolute rounded-lg border flex justify-center text-xl items-center text-white \">\n {fileName}\n </div>\n ) : (\n <Fragment />\n )}\n\n {!state.disabled && (\n <div\n class=\"opacity-0 hover:opacity-70 duration-300 absolute rounded-lg border inset-0 z-10 flex justify-center text-xl items-center bg-black text-white cursor-pointer \"\n onClick={() => {\n onChange(undefined!);\n }}\n >\n Clear\n </div>\n )}\n </div>\n )}\n {help && <p class=\"text-xs leading-5 text-gray-600 mt-2\">{help}</p>}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputInteger<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return (\n <InputLine\n type=\"number\"\n converter={{\n //@ts-ignore\n fromStringUI: (v): number => {\n return !v ? 0 : Number.parseInt(v, 10);\n },\n //@ts-ignore\n toStringUI: (v?: number): string => {\n return v === undefined ? \"\" : String(v);\n },\n }}\n {...props}\n />\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputSelectMultiple<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n unique?: boolean;\n max?: number;\n } & UIFormProps<T, K>,\n): VNode {\n const { converter, label, choices, placeholder, tooltip, required, unique, max } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange, state } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce(\n (prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n },\n {} as Record<string, string>,\n );\n\n const list = (value ?? []) as string[];\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {list.map((v, idx) => {\n return (\n <span\n key={idx}\n class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 text-xs font-medium text-gray-600\"\n >\n {choiceMap[v]}\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n const newValue = [...list];\n newValue.splice(idx, 1);\n onChange(newValue as any);\n setFilter(undefined);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n );\n })}\n\n {!state.disabled && (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n key={idx}\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n if (unique && list.indexOf(v.value as string) !== -1) {\n return;\n }\n if (max !== undefined && list.length >= max) {\n return;\n }\n const newValue = [...list];\n newValue.splice(0, 0, v.value as string);\n onChange(newValue as any);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { ChoiceS } from \"./InputChoiceStacked.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\n\nexport function InputSelectOne<T extends object, K extends keyof T>(\n props: {\n choices: ChoiceS<T[K]>[];\n } & UIFormProps<T, K>,\n): VNode {\n const { label, choices, placeholder, tooltip, required } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n\n const [filter, setFilter] = useState<string | undefined>(undefined);\n const regex = new RegExp(`.*${filter}.*`, \"i\");\n const choiceMap = choices.reduce(\n (prev, curr) => {\n return { ...prev, [curr.value as string]: curr.label };\n },\n {} as Record<string, string>,\n );\n\n const filteredChoices =\n filter === undefined\n ? undefined\n : choices.filter((v) => {\n return regex.test(v.label);\n });\n return (\n <div class=\"sm:col-span-6\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n {value ? (\n <span class=\"inline-flex items-center gap-x-0.5 rounded-md bg-gray-100 p-1 mr-2 font-medium text-gray-600\">\n {choiceMap[value as string]}\n <button\n type=\"button\"\n onClick={() => {\n onChange(undefined!);\n }}\n class=\"group relative h-5 w-5 rounded-sm hover:bg-gray-500/20\"\n >\n <span class=\"sr-only\">Remove</span>\n <svg\n viewBox=\"0 0 14 14\"\n class=\"h-5 w-5 stroke-gray-700/50 group-hover:stroke-gray-700/75\"\n >\n <path d=\"M4 4l6 6m0-6l-6 6\" />\n </svg>\n <span class=\"absolute -inset-1\"></span>\n </button>\n </span>\n ) : (\n <div class=\"relative mt-2\">\n <input\n id=\"combobox\"\n type=\"text\"\n value={filter ?? \"\"}\n onChange={(e) => {\n setFilter(e.currentTarget.value);\n }}\n placeholder={placeholder}\n class=\"w-full rounded-md border-0 bg-white py-1.5 pl-3 pr-12 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n role=\"combobox\"\n aria-controls=\"options\"\n aria-expanded=\"false\"\n />\n <button\n type=\"button\"\n onClick={() => {\n setFilter(filter === undefined ? \"\" : undefined);\n }}\n class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\"\n >\n <svg\n class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n\n {filteredChoices !== undefined && (\n <ul\n class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\"\n id=\"options\"\n role=\"listbox\"\n >\n {filteredChoices.map((v, idx) => {\n return (\n <li\n key={idx}\n class=\"relative cursor-pointer select-none py-2 pl-3 pr-9 text-gray-900 hover:text-white hover:bg-indigo-600\"\n id=\"option-0\"\n role=\"option\"\n onClick={() => {\n setFilter(undefined);\n onChange(v.value as any);\n }}\n\n // tabindex=\"-1\"\n >\n {/* <!-- Selected: \"font-semibold\" --> */}\n <span class=\"block truncate\">{v.label}</span>\n\n {/* <!--\n Checkmark, only display for selected option.\n\n Active: \"text-white\", Not Active: \"text-indigo-600\"\n --> */}\n </li>\n );\n })}\n\n {/* <!--\n Combobox option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.\n\n Active: \"text-white bg-indigo-600\", Not Active: \"text-gray-900\"\n --> */}\n\n {/* <!-- More items... --> */}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { InputLine } from \"./InputLine.js\";\n\nexport function InputText<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { InputLine } from \"./InputLine.js\";\nimport { UIFormProps } from \"./FormProvider.js\";\n\nexport function InputTextArea<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n return <InputLine type=\"text-area\" {...props} />;\n}\n", "import { VNode, h } from \"preact\";\nimport { UIFormProps } from \"./FormProvider.js\";\nimport { noHandlerPropsAndNoContextForField } from \"./InputArray.js\";\nimport { LabelWithTooltipMaybeRequired } from \"./InputLine.js\";\nimport { useField } from \"./useField.js\";\n\nexport function InputToggle<T extends object, K extends keyof T>(\n props: UIFormProps<T, K>,\n): VNode {\n const {\n name,\n label,\n tooltip,\n help,\n placeholder,\n required,\n before,\n after,\n converter,\n } = props;\n //FIXME: remove deprecated\n const fieldCtx = useField<T, K>(props.name);\n const { value, onChange } =\n props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name);\n\n const isOn = !!value;\n return (\n <div class=\"sm:col-span-6\">\n <div class=\"flex items-center justify-between\">\n <LabelWithTooltipMaybeRequired\n label={label}\n required={required}\n tooltip={tooltip}\n />\n <button\n type=\"button\"\n data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n onChange(!isOn as any);\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={isOn}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n );\n}\n", "import { Fragment, VNode, h } from \"preact\";\nimport { FormProvider, FormProviderProps, FormState } from \"./FormProvider.js\";\nimport { RenderAllFieldsByUiConfig, UIFormField } from \"./forms.js\";\nimport { TranslatedString } from \"@gnu-taler/taler-util\";\n// import { FlexibleForm } from \"./ui-form.js\";\n\n/**\n * Flexible form uses a DoubleColumForm for design\n * and may have a dynamic properties defined by \n * behavior function.\n */\nexport interface FlexibleForm_Deprecated<T extends object> {\n design: DoubleColumnForm_Deprecated;\n behavior?: (form: Partial<T>) => FormState<T>;\n}\n\n/**\n * Double column form\n * \n * Form with sections, every sections have a title and may\n * have a description.\n * Every sections contain a set of fields.\n */\nexport type DoubleColumnForm_Deprecated = Array<DoubleColumnFormSection_Deprecated | undefined>;\n\nexport type DoubleColumnFormSection_Deprecated = {\n title: TranslatedString;\n description?: TranslatedString;\n fields: UIFormField[];\n};\n\n/**\n * Form Provider implementation that use FlexibleForm\n * to defined behavior and fields.\n */\nexport function DefaultForm<T extends object>({\n initial,\n onUpdate,\n form,\n onSubmit,\n children,\n readOnly,\n}: Omit<FormProviderProps<T>, \"computeFormState\"> & { form: FlexibleForm_Deprecated<T> }): VNode {\n return (\n <FormProvider\n initial={initial}\n onUpdate={onUpdate}\n onSubmit={onSubmit}\n readOnly={readOnly}\n // computeFormState={form.behavior}\n >\n <div class=\"space-y-10 divide-y -mt-5 divide-gray-900/10\">\n {form.design.map((section, i) => {\n if (!section) return <Fragment />;\n return (\n <div key={i} class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n {section.title}\n </h2>\n {section.description && (\n <p class=\"mt-1 text-sm leading-6 text-gray-600\">\n {section.description}\n </p>\n )}\n </div>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2\">\n <div class=\"p-3\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <RenderAllFieldsByUiConfig\n key={i}\n fields={section.fields}\n />\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {children}\n </FormProvider>\n );\n}\n", "import { AbsoluteTime } from \"@gnu-taler/taler-util\"\nimport { getHours, getMinutes, getSeconds, setHours } from \"date-fns\"\nimport { Fragment, VNode, h } from \"preact\"\nimport { useTranslationContext } from \"../index.browser.js\"\n\nexport function TimePicker({ value, onChange, onConfirm }: { value: AbsoluteTime | undefined, onChange: (v: AbsoluteTime) => void, onConfirm: () => void }): VNode {\n const date = !value ? new Date() : new Date(AbsoluteTime.toStampMs(value))\n const hours = getHours(date) % 12\n const minutes = getMinutes(date)\n const seconds = getSeconds(date)\n\n const { i18n } = useTranslationContext()\n\n return <Fragment>\n <div class=\"flex flex-col bg-white rounded-t-sm justify-around\" >\n {/* time selection */}\n <div id=\"\" class=\"bg-[#3b71ca] dark:bg-zinc-700 h-24 rounded-t-lg p-12 flex flex-row items-center justify-center\">\n <div class=\"flex w-full justify-evenly\">\n <div class=\"\">\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \"\n style=\"pointer-events: none;\">\n {new String(hours).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(minutes).padStart(2, \"0\")}\n </button>\n </span>\n <span type=\"button\" class=\"font-light leading-[1.2] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white \" >:</span>\n <span class=\"relative h-full\">\n <button type=\"button\" class=\"py-1 px-3 text-[3.75rem] font-light leading-[1.2] text-white opacity-[.54] border-none bg-transparent p-0 cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none \" >\n {new String(seconds).padStart(2, \"0\")}\n </button>\n </span>\n </div>\n <div class=\"flex flex-col justify-center text-[18px] text-[#ffffff8a] \">\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n AM\n </button>\n <button type=\"button\" class=\"py-1 px-3 bg-transparent border-none text-white cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none\" >\n PM\n </button>\n </div>\n </div>\n </div>\n {/* clock */}\n <div id=\"\" class=\"mt-2 min-w-[310px] max-w-[325px] min-h-[305px] overflow-x-hidden h-full flex justify-center mx-auto flex-col items-center dark:bg-zinc-500\" >\n <div class=\"relative rounded-[100%] w-[260px] h-[260px] cursor-default my-0 mx-auto bg-[#00000012] dark:bg-zinc-600/50 animate-[show-up-clock_350ms_linear]\" >\n\n <span class=\"top-1/2 left-1/2 w-[6px] h-[6px] -translate-y-1/2 -translate-x-1/2 rounded-[50%] bg-[#3b71ca] absolute\" ></span>\n <div class=\"bg-[#3b71ca] bottom-1/2 h-2/5 left-[calc(50%-1px)] rtl:!left-auto origin-[center_bottom_0] rtl:!origin-[50%_50%_0] w-[2px] absolute\" style={{ transform: \"rotateZ(60deg)\", height: \"calc(35% + 1px)\" }}>\n {/* <div class=\"-top-[21px] -left-[15px] w-[4px] border-[14px] border-solid border-[#3b71ca] h-[4px] box-content rounded-[100%] absolute\" style=\"background-color: rgb(25, 118, 210);\"></div> */}\n </div>\n\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 12).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 224px;\">\n <span>0</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 1).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 209.263px;\">\n <span >1</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 2).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" data-selected={true} style=\"left: 209.263px; bottom: 169px;\" >\n <span >2</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 3).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 224px; bottom: 114px;\">\n <span >3</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 4).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 209.263px; bottom: 59px;\">\n <span >4</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 5).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 169px; bottom: 18.7372px;\">\n <span >5</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 6).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 114px; bottom: 4px;\">\n <span >6</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 7).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 18.7372px;\">\n <span >7</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 8).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 59px;\">\n <span >8</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 9).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 4px; bottom: 114px;\">\n <span >9</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 10).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 18.7372px; bottom: 169px;\">\n <span >10</span>\n </span>\n <span onClick={() => onChange(AbsoluteTime.fromStampMs(setHours(date, 11).getTime()))} class=\"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent data-[selected=true]:text-white data-[selected=true]:bg-[#3b71ca] data-[selected=true]:font-normal\" style=\"left: 59px; bottom: 209.263px;\">\n <span >11</span>\n </span>\n </div>\n </div>\n </div>\n <div id=\"\" class=\"rounded-b-lg flex justify-between items-center w-full h-[56px] px-[12px] bg-white dark:bg-zinc-500\">\n <div class=\"w-full flex justify-end\">\n <button\n type=\"submit\"\n onClick={onConfirm}\n class=\"rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </div>\n </Fragment>\n}\n", "import {\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForBoolean,\n codecForConstString,\n codecForLazy,\n codecForList,\n codecForNumber,\n codecForString,\n codecForTimestamp,\n codecOptional,\n Integer,\n TalerProtocolTimestamp,\n} from \"@gnu-taler/taler-util\";\n\nexport type FlexibleForm = DoubleColumnForm;\n\nexport interface DoubleColumnForm {\n type: \"double-column\";\n design: Array<DoubleColumnFormSection>;\n // behavior?: (form: Partial<T>) => FormState<T>;\n}\n\nexport type DoubleColumnFormSection = {\n title: string;\n description?: string;\n fields: UIFormFieldConfig[];\n};\n\n// export interface BaseForm {\n// state: TalerExchangeApi.AmlState;\n// threshold: AmountJson;\n// }\n\nexport type UIFormFieldConfig =\n | UIFormFieldConfigAbsoluteTime\n | UIFormFieldConfigAmount\n | UIFormFieldConfigArray\n | UIFormFieldConfigCaption\n | UIFormFieldConfigChoiseHorizontal\n | UIFormFieldConfigChoiseStacked\n | UIFormFieldConfigFile\n | UIFormFieldConfigGroup\n | UIFormFieldConfigInteger\n | UIFormFieldConfigSelectMultiple\n | UIFormFieldConfigSelectOne\n | UIFormFieldConfigText\n | UIFormFieldConfigTextArea\n | UIFormFieldConfigToggle;\n\ntype UIFormFieldConfigAbsoluteTime = {\n type: \"absoluteTime\";\n properties: UIFormFieldBaseConfig & {\n max?: TalerProtocolTimestamp;\n min?: TalerProtocolTimestamp;\n pattern: string;\n };\n};\n\ntype UIFormFieldConfigAmount = {\n type: \"amount\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n currency: string;\n };\n};\n\ntype UIFormFieldConfigArray = {\n type: \"array\";\n properties: UIFormFieldBaseConfig & {\n // id of the field shown when the array is collapsed\n labelFieldId: UIHandlerId;\n fields: UIFormFieldConfig[];\n };\n};\n\ntype UIFormFieldConfigCaption = {\n type: \"caption\";\n properties: UIFieldBaseDescription;\n};\n\ntype UIFormFieldConfigGroup = {\n type: \"group\";\n properties: UIFieldBaseDescription & {\n fields: UIFormFieldConfig[];\n };\n};\n\ntype UIFormFieldConfigChoiseHorizontal = {\n type: \"choiceHorizontal\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\n\ntype UIFormFieldConfigChoiseStacked = {\n type: \"choiceStacked\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\n\ntype UIFormFieldConfigFile = {\n type: \"file\";\n properties: UIFormFieldBaseConfig & {\n maxBytes?: Integer;\n minBytes?: Integer;\n // comma-separated list of one or more file types\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept#unique_file_type_specifiers\n accept?: string;\n };\n};\ntype UIFormFieldConfigInteger = {\n type: \"integer\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n };\n};\n\ninterface SelectUiChoice {\n label: string;\n description?: string;\n value: string;\n}\n\ntype UIFormFieldConfigSelectMultiple = {\n type: \"selectMultiple\";\n properties: UIFormFieldBaseConfig & {\n max?: Integer;\n min?: Integer;\n unique?: boolean;\n choices: Array<SelectUiChoice>;\n };\n};\ntype UIFormFieldConfigSelectOne = {\n type: \"selectOne\";\n properties: UIFormFieldBaseConfig & {\n choices: Array<SelectUiChoice>;\n };\n};\ntype UIFormFieldConfigText = {\n type: \"text\";\n properties: UIFormFieldBaseConfig;\n};\ntype UIFormFieldConfigTextArea = {\n type: \"textArea\";\n properties: UIFormFieldBaseConfig;\n};\ntype UIFormFieldConfigToggle = {\n type: \"toggle\";\n properties: UIFormFieldBaseConfig;\n};\n\nexport type UIFieldBaseDescription = {\n /* label if the field, visible for the user */\n label: string;\n /* long text to be shown on user demand */\n tooltip?: string;\n\n /* short text to be shown close to the field */\n help?: string;\n\n /* name of the field, useful for a11y */\n name: string;\n\n /* if the field should be initialy hidden */\n hidden?: boolean;\n /* ui element to show before */\n addonBeforeId?: string;\n /* ui element to show after */\n addonAfterId?: string;\n};\n\nexport type UIFormFieldBaseConfig = UIFieldBaseDescription & {\n /* example to be shown inside the field */\n placeholder?: string;\n\n /* show a mark as required */\n required?: boolean;\n\n /* readonly and dim */\n disabled?: boolean;\n\n /* conversion id to conver the string into the value type\n the id should be known to the ui impl\n */\n converterId?: string;\n\n /* property id of the form */\n id: UIHandlerId;\n};\n\ndeclare const __handlerId: unique symbol;\nexport type UIHandlerId = string & { [__handlerId]: true };\n\n// FIXME: validate well formed ui field id\nconst codecForUiFieldId = codecForString as () => Codec<UIHandlerId>;\n\nconst codecForUIFormFieldBaseDescriptionTemplate = <\n T extends UIFieldBaseDescription,\n>() =>\n buildCodecForObject<T>()\n .property(\"addonAfterId\", codecOptional(codecForString()))\n .property(\"addonBeforeId\", codecOptional(codecForString()))\n .property(\"hidden\", codecOptional(codecForBoolean()))\n .property(\"help\", codecOptional(codecForString()))\n .property(\"label\", codecForString())\n .property(\"name\", codecForString())\n .property(\"tooltip\", codecOptional(codecForString()));\n\nconst codecForUIFormFieldBaseConfigTemplate = <\n T extends UIFormFieldBaseConfig,\n>() =>\n codecForUIFormFieldBaseDescriptionTemplate<T>()\n .property(\"id\", codecForUiFieldId())\n .property(\"converterId\", codecOptional(codecForString()))\n .property(\"disabled\", codecOptional(codecForBoolean()))\n .property(\"required\", codecOptional(codecForBoolean()))\n .property(\"placeholder\", codecOptional(codecForString()));\n\nconst codecForUIFormFieldBaseConfig = (): Codec<UIFormFieldBaseConfig> =>\n codecForUIFormFieldBaseConfigTemplate().build(\"UIFieldToggleProperties\");\n\nconst codecForUIFormFieldAbsoluteTimeConfig = (): Codec<\n UIFormFieldConfigAbsoluteTime[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigAbsoluteTime[\"properties\"]\n >()\n .property(\"pattern\", codecForString())\n .property(\"max\", codecOptional(codecForTimestamp))\n .property(\"min\", codecOptional(codecForTimestamp))\n .build(\"UIFormFieldConfigAbsoluteTime.properties\");\n\nconst codecForUiFormFieldAbsoluteTime =\n (): Codec<UIFormFieldConfigAbsoluteTime> =>\n buildCodecForObject<UIFormFieldConfigAbsoluteTime>()\n .property(\"type\", codecForConstString(\"absoluteTime\"))\n .property(\"properties\", codecForUIFormFieldAbsoluteTimeConfig())\n .build(\"UIFormFieldConfigAbsoluteTime\");\n\nconst codecForUIFormFieldAmountConfig = (): Codec<\n UIFormFieldConfigAmount[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigAmount[\"properties\"]>()\n .property(\"currency\", codecForString())\n .property(\"max\", codecOptional(codecForNumber()))\n .property(\"min\", codecOptional(codecForNumber()))\n .build(\"UIFormFieldConfigAmount.properties\");\n\nconst codecForUiFormFieldAmount = (): Codec<UIFormFieldConfigAmount> =>\n buildCodecForObject<UIFormFieldConfigAmount>()\n .property(\"type\", codecForConstString(\"amount\"))\n .property(\"properties\", codecForUIFormFieldAmountConfig())\n .build(\"UIFormFieldConfigAmount\");\n\nconst codecForUIFormFieldArrayConfig = (): Codec<\n UIFormFieldConfigArray[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigArray[\"properties\"]>()\n .property(\"labelFieldId\", codecForUiFieldId())\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"UIFormFieldConfigArray.properties\");\n\nconst codecForUiFormFieldArray = (): Codec<UIFormFieldConfigArray> =>\n buildCodecForObject<UIFormFieldConfigArray>()\n .property(\"type\", codecForConstString(\"array\"))\n .property(\"properties\", codecForUIFormFieldArrayConfig())\n .build(\"UIFormFieldConfigArray\");\n\nconst codecForUiFormFieldCaption = (): Codec<UIFormFieldConfigCaption> =>\n buildCodecForObject<UIFormFieldConfigCaption>()\n .property(\"type\", codecForConstString(\"caption\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigCaption\");\n\nconst codecForUiFormSelectUiChoice = (): Codec<SelectUiChoice> =>\n buildCodecForObject<SelectUiChoice>()\n .property(\"description\", codecOptional(codecForString()))\n .property(\"label\", codecForString())\n .property(\"value\", codecForString())\n .build(\"SelectUiChoice\");\n\nconst codecForUIFormFieldWithChoiseConfig = (): Codec<\n UIFormFieldConfigChoiseHorizontal[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigChoiseHorizontal[\"properties\"]\n >()\n .property(\"choices\", codecForList(codecForUiFormSelectUiChoice()))\n .build(\"UIFormFieldConfigChoiseHorizontal.properties\");\n\nconst codecForUiFormFieldChoiceHorizontal =\n (): Codec<UIFormFieldConfigChoiseHorizontal> =>\n buildCodecForObject<UIFormFieldConfigChoiseHorizontal>()\n .property(\"type\", codecForConstString(\"choiceHorizontal\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigChoiseHorizontal\");\n\nconst codecForUiFormFieldChoiceStacked =\n (): Codec<UIFormFieldConfigChoiseStacked> =>\n buildCodecForObject<UIFormFieldConfigChoiseStacked>()\n .property(\"type\", codecForConstString(\"choiceStacked\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigChoiseStacked\");\n\nconst codecForUIFormFieldFileConfig = (): Codec<\n UIFormFieldConfigFile[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<UIFormFieldConfigFile[\"properties\"]>()\n .property(\"accept\", codecOptional(codecForString()))\n .property(\"maxBytes\", codecOptional(codecForNumber()))\n .property(\"minBytes\", codecOptional(codecForNumber()))\n .build(\"UIFormFieldConfigFile.properties\");\n\nconst codecForUiFormFieldFile = (): Codec<UIFormFieldConfigFile> =>\n buildCodecForObject<UIFormFieldConfigFile>()\n .property(\"type\", codecForConstString(\"file\"))\n .property(\"properties\", codecForUIFormFieldFileConfig())\n .build(\"UIFormFieldConfigFile\");\n\nconst codecForUIFormFieldWithFieldsConfig = (): Codec<\n UIFormFieldConfigGroup[\"properties\"]\n> =>\n codecForUIFormFieldBaseDescriptionTemplate<\n UIFormFieldConfigGroup[\"properties\"]\n >()\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"UIFormFieldConfigGroup.properties\");\n\nconst codecForUiFormFieldGroup = (): Codec<UIFormFieldConfigGroup> =>\n buildCodecForObject<UIFormFieldConfigGroup>()\n .property(\"type\", codecForConstString(\"group\"))\n .property(\"properties\", codecForUIFormFieldWithFieldsConfig())\n .build(\"UiFormFieldGroup\");\n\nconst codecForUiFormFieldInteger = (): Codec<UIFormFieldConfigInteger> =>\n buildCodecForObject<UIFormFieldConfigInteger>()\n .property(\"type\", codecForConstString(\"integer\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigInteger\");\n\nconst codecForUIFormFieldSelectMultipleConfig = (): Codec<\n UIFormFieldConfigSelectMultiple[\"properties\"]\n> =>\n codecForUIFormFieldBaseConfigTemplate<\n UIFormFieldConfigSelectMultiple[\"properties\"]\n >()\n .property(\"max\", codecOptional(codecForNumber()))\n .property(\"min\", codecOptional(codecForNumber()))\n .property(\"unique\", codecOptional(codecForBoolean()))\n .property(\"choices\", codecForList(codecForUiFormSelectUiChoice()))\n .build(\"UIFormFieldConfigSelectMultiple.properties\");\n\nconst codecForUiFormFieldSelectMultiple =\n (): Codec<UIFormFieldConfigSelectMultiple> =>\n buildCodecForObject<UIFormFieldConfigSelectMultiple>()\n .property(\"type\", codecForConstString(\"selectMultiple\"))\n .property(\"properties\", codecForUIFormFieldSelectMultipleConfig())\n .build(\"UiFormFieldSelectMultiple\");\n\nconst codecForUiFormFieldSelectOne = (): Codec<UIFormFieldConfigSelectOne> =>\n buildCodecForObject<UIFormFieldConfigSelectOne>()\n .property(\"type\", codecForConstString(\"selectOne\"))\n .property(\"properties\", codecForUIFormFieldWithChoiseConfig())\n .build(\"UIFormFieldConfigSelectOne\");\n\nconst codecForUiFormFieldText = (): Codec<UIFormFieldConfigText> =>\n buildCodecForObject<UIFormFieldConfigText>()\n .property(\"type\", codecForConstString(\"text\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigText\");\n\nconst codecForUiFormFieldTextArea = (): Codec<UIFormFieldConfigTextArea> =>\n buildCodecForObject<UIFormFieldConfigTextArea>()\n .property(\"type\", codecForConstString(\"textArea\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigTextArea\");\n\nconst codecForUiFormFieldToggle = (): Codec<UIFormFieldConfigToggle> =>\n buildCodecForObject<UIFormFieldConfigToggle>()\n .property(\"type\", codecForConstString(\"toggle\"))\n .property(\"properties\", codecForUIFormFieldBaseConfig())\n .build(\"UIFormFieldConfigToggle\");\n\nconst codecForUiFormField = (): Codec<UIFormFieldConfig> =>\n buildCodecForUnion<UIFormFieldConfig>()\n .discriminateOn(\"type\")\n .alternative(\"array\", codecForLazy(codecForUiFormFieldArray))\n .alternative(\"group\", codecForLazy(codecForUiFormFieldGroup))\n .alternative(\"absoluteTime\", codecForUiFormFieldAbsoluteTime())\n .alternative(\"amount\", codecForUiFormFieldAmount())\n .alternative(\"caption\", codecForUiFormFieldCaption())\n .alternative(\"choiceHorizontal\", codecForUiFormFieldChoiceHorizontal())\n .alternative(\"choiceStacked\", codecForUiFormFieldChoiceStacked())\n .alternative(\"file\", codecForUiFormFieldFile())\n .alternative(\"integer\", codecForUiFormFieldInteger())\n .alternative(\"selectMultiple\", codecForUiFormFieldSelectMultiple())\n .alternative(\"selectOne\", codecForUiFormFieldSelectOne())\n .alternative(\"text\", codecForUiFormFieldText())\n .alternative(\"textArea\", codecForUiFormFieldTextArea())\n .alternative(\"toggle\", codecForUiFormFieldToggle())\n .build(\"UIFormField\");\n\nconst codecForDoubleColumnFormSection = (): Codec<DoubleColumnFormSection> =>\n buildCodecForObject<DoubleColumnFormSection>()\n .property(\"title\", codecForString())\n .property(\"description\", codecOptional(codecForString()))\n .property(\"fields\", codecForList(codecForUiFormField()))\n .build(\"DoubleColumnFormSection\");\n\nconst codecForDoubleColumnForm = (): Codec<DoubleColumnForm> =>\n buildCodecForObject<DoubleColumnForm>()\n .property(\"type\", codecForConstString(\"double-column\"))\n .property(\"design\", codecForList(codecForDoubleColumnFormSection()))\n .build(\"DoubleColumnForm\");\n\nconst codecForFlexibleForm = (): Codec<FlexibleForm> =>\n buildCodecForUnion<FlexibleForm>()\n .discriminateOn(\"type\")\n .alternative(\"double-column\", codecForDoubleColumnForm())\n .build<FlexibleForm>(\"FlexibleForm\");\n\nconst codecForFormMetadata = (): Codec<FormMetadata> =>\n buildCodecForObject<FormMetadata>()\n .property(\"label\", codecForString())\n .property(\"id\", codecForString())\n .property(\"version\", codecForNumber())\n .property(\"config\", codecForFlexibleForm())\n .build(\"FormMetadata\");\n\nexport const codecForUIForms = (): Codec<UiForms> =>\n buildCodecForObject<UiForms>()\n .property(\"forms\", codecForList(codecForFormMetadata()))\n .build(\"UiForms\");\n\nexport type FormMetadata = {\n label: string;\n id: string;\n version: number;\n config: FlexibleForm;\n};\n\nexport interface UiForms {\n // Where libeufin backend is localted\n // default: window.origin without \"webui/\"\n forms: Array<FormMetadata>;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n TalerExchangeApi,\n} from \"@gnu-taler/taler-util\";\nimport { format, parse } from \"date-fns\";\nimport { StringConverter } from \"./FormProvider.js\";\n\nexport const amlStateConverter = {\n toStringUI: stringifyAmlState,\n fromStringUI: parseAmlState,\n};\n\nfunction stringifyAmlState(s: TalerExchangeApi.AmlState | undefined): string {\n if (s === undefined) return \"\";\n switch (s) {\n case TalerExchangeApi.AmlState.normal:\n return \"normal\";\n case TalerExchangeApi.AmlState.pending:\n return \"pending\";\n case TalerExchangeApi.AmlState.frozen:\n return \"frozen\";\n }\n}\n\nfunction parseAmlState(s: string | undefined): TalerExchangeApi.AmlState {\n switch (s) {\n case \"normal\":\n return TalerExchangeApi.AmlState.normal;\n case \"pending\":\n return TalerExchangeApi.AmlState.pending;\n case \"frozen\":\n return TalerExchangeApi.AmlState.frozen;\n default:\n throw Error(`unknown AML state: ${s}`);\n }\n}\n\nfunction amountConverter(config: any): StringConverter<AmountJson> {\n const currency = config[\"currency\"];\n if (!currency || typeof currency !== \"string\") {\n throw Error(`amount converter needs a currency`);\n }\n return {\n fromStringUI(v: string | undefined): AmountJson {\n // FIXME: requires currency\n return Amounts.parse(`${currency}:${v}`) ?? Amounts.zeroOfCurrency(currency);\n },\n toStringUI(v: unknown): string {\n return v === undefined ? \"\" : Amounts.stringifyValue(v as AmountJson);\n },\n };\n}\n\nfunction absTimeConverter(config: any): StringConverter<AbsoluteTime> {\n const pattern = config[\"pattern\"];\n if (!pattern || typeof pattern !== \"string\") {\n throw Error(`absTime converter needs a pattern`);\n }\n return {\n fromStringUI(v: string | undefined): AbsoluteTime {\n if (v === undefined) {\n return AbsoluteTime.never();\n }\n try {\n const time = parse(v, pattern, new Date());\n return AbsoluteTime.fromMilliseconds(time.getTime());\n } catch(e) {\n return AbsoluteTime.never();\n }\n },\n toStringUI(v: unknown): string {\n if (v === undefined) return \"\";\n const d = v as AbsoluteTime;\n if (d.t_ms === \"never\") return \"never\";\n try {\n return format(d.t_ms, pattern)\n } catch (e) {\n return \"\"\n }\n },\n };\n}\n\nexport function getConverterById(\n id: string | undefined,\n config: unknown,\n): StringConverter<unknown> {\n if (id === \"Taler.AbsoluteTime\") {\n // @ts-expect-error check this\n return absTimeConverter(config);\n }\n if (id === \"Taler.Amount\") {\n // @ts-expect-error check this\n return amountConverter(config);\n }\n if (id === \"TalerExchangeApi.AmlState\") {\n // @ts-expect-error check this\n return amlStateConverter;\n }\n return undefined!;\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 {\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\";\nimport { ExampleItemSetup } from \"./tests/hook.js\";\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 contextProps: {},\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<Props extends object = {}> {\n name: string;\n examples: ExampleItem<Props>[];\n}\n\nexport interface ExampleItem<Props extends object = {}> {\n group: string;\n component: string;\n name: string;\n render: ExampleItemSetup<Props>;\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 url = new URL(window.location.href);\n const initialSelection = getSelectionFromLocationHash(\n url.hash,\n examplesInGroups,\n );\n\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 (url.hash) {\n const hash = url.hash.substring(1);\n const found = document.getElementById(hash);\n if (found) {\n setTimeout(() => {\n found.scrollIntoView({\n block: \"center\",\n });\n }, 50);\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", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 CacheEvictor,\n TalerBankConversionCacheEviction,\n TalerCoreBankCacheEviction,\n assertUnreachable,\n canonicalizeBaseUrl,\n getGlobalLogLevel,\n setGlobalLogLevelFromString,\n} from \"@gnu-taler/taler-util\";\nimport {\n BankApiProvider,\n BrowserHashNavigationProvider,\n Loading,\n TalerWalletIntegrationBrowserProvider,\n TranslationProvider,\n} from \"@gnu-taler/web-util/browser\";\nimport { h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { SWRConfig } from \"swr\";\nimport { Routing } from \"./Routing.js\";\nimport { SettingsProvider } from \"./context/settings.js\";\nimport { strings } from \"./i18n/strings.js\";\nimport { BankFrame } from \"./pages/BankFrame.js\";\nimport { UiSettings, fetchSettings } from \"./settings.js\";\nimport {\n revalidateAccountDetails,\n revalidatePublicAccounts,\n revalidateTransactions,\n} from \"./hooks/account.js\";\nimport {\n revalidateBusinessAccounts,\n revalidateCashouts,\n revalidateConversionInfo,\n} from \"./hooks/regional.js\";\nconst WITH_LOCAL_STORAGE_CACHE = false;\n\nexport function App() {\n const [settings, setSettings] = useState<UiSettings>();\n useEffect(() => {\n fetchSettings(setSettings);\n }, []);\n if (!settings) return <Loading />;\n\n const baseUrl = getInitialBackendBaseURL(settings.backendBaseURL);\n return (\n <SettingsProvider value={settings}>\n <TranslationProvider\n source={strings}\n completeness={{\n es: strings[\"es\"].completeness,\n de: strings[\"de\"].completeness,\n }}\n >\n <BankApiProvider\n baseUrl={new URL(\"/\", baseUrl)}\n frameOnError={BankFrame}\n evictors={{\n bank: evictBankSwrCache,\n conversion: evictConversionSwrCache,\n }}\n >\n <SWRConfig\n value={{\n provider: WITH_LOCAL_STORAGE_CACHE\n ? localStorageProvider\n : undefined,\n // normally, do not revalidate\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n revalidateOnMount: undefined,\n focusThrottleInterval: undefined,\n\n // normally, do not refresh\n refreshInterval: undefined,\n dedupingInterval: 2000,\n refreshWhenHidden: false,\n refreshWhenOffline: false,\n\n // ignore errors\n shouldRetryOnError: false,\n errorRetryCount: 0,\n errorRetryInterval: undefined,\n\n // do not go to loading again if already has data\n keepPreviousData: true,\n }}\n >\n <TalerWalletIntegrationBrowserProvider>\n <BrowserHashNavigationProvider>\n <Routing />\n </BrowserHashNavigationProvider>\n </TalerWalletIntegrationBrowserProvider>\n </SWRConfig>\n </BankApiProvider>\n </TranslationProvider>\n </SettingsProvider>\n );\n}\n\n// @ts-expect-error creating a new property for window object\nwindow.setGlobalLogLevelFromString = setGlobalLogLevelFromString;\n// @ts-expect-error creating a new property for window object\nwindow.getGlobalLevel = getGlobalLogLevel;\n\nfunction localStorageProvider(): Map<unknown, unknown> {\n const map = new Map(JSON.parse(localStorage.getItem(\"app-cache\") || \"[]\"));\n\n window.addEventListener(\"beforeunload\", () => {\n const appCache = JSON.stringify(Array.from(map.entries()));\n localStorage.setItem(\"app-cache\", appCache);\n });\n return map;\n}\n\nfunction getInitialBackendBaseURL(\n backendFromSettings: string | undefined,\n): string {\n const overrideUrl =\n typeof localStorage !== \"undefined\"\n ? localStorage.getItem(\"corebank-api-base-url\")\n : undefined;\n let result: string;\n\n if (!overrideUrl) {\n // normal path\n if (!backendFromSettings) {\n console.error(\n \"ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'\",\n );\n result = window.origin;\n } else {\n result = backendFromSettings;\n }\n } else {\n // testing/development path\n result = overrideUrl;\n }\n try {\n return canonicalizeBaseUrl(result);\n } catch (e) {\n // fall back\n return canonicalizeBaseUrl(window.origin);\n }\n}\n\nconst evictBankSwrCache: CacheEvictor<TalerCoreBankCacheEviction> = {\n async notifySuccess(op) {\n switch (op) {\n case TalerCoreBankCacheEviction.DELETE_ACCOUNT: {\n await Promise.all([\n revalidatePublicAccounts(),\n revalidateBusinessAccounts(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.CREATE_ACCOUNT: {\n // admin balance change on new account\n await Promise.all([\n revalidateAccountDetails(),\n revalidateTransactions(),\n revalidatePublicAccounts(),\n revalidateBusinessAccounts(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.UPDATE_ACCOUNT: {\n await Promise.all([revalidateAccountDetails()]);\n return;\n }\n case TalerCoreBankCacheEviction.CREATE_TRANSACTION: {\n await Promise.all([\n revalidateAccountDetails(),\n revalidateTransactions(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.CONFIRM_WITHDRAWAL: {\n await Promise.all([\n revalidateAccountDetails(),\n revalidateTransactions(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.CREATE_CASHOUT: {\n await Promise.all([\n revalidateAccountDetails(),\n revalidateCashouts(),\n revalidateTransactions(),\n ]);\n return;\n }\n case TalerCoreBankCacheEviction.UPDATE_PASSWORD:\n case TalerCoreBankCacheEviction.ABORT_WITHDRAWAL:\n case TalerCoreBankCacheEviction.CREATE_WITHDRAWAL:\n return;\n default:\n assertUnreachable(op);\n }\n },\n};\n\nconst evictConversionSwrCache: CacheEvictor<TalerBankConversionCacheEviction> =\n {\n async notifySuccess(op) {\n switch (op) {\n case TalerBankConversionCacheEviction.UPDATE_RATE: {\n await revalidateConversionInfo();\n return;\n }\n default:\n assertUnreachable(op);\n }\n },\n };\n", "import { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { OBJECT, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, serialize, createCacheHelper, isUndefined, getTimestamp, UNDEFINED, isFunction, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects, revalidateEvents } from 'swr/_internal';\nexport { mutate, preload, useSWRConfig } from 'swr/_internal';\n\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache , compare , suspense , fallbackData , revalidateOnMount , revalidateIfStale , refreshInterval , refreshWhenHidden , refreshWhenOffline , keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH] = SWRGlobalState.get(cache);\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 // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n const [key, fnArg] = serialize(_key);\n // If it's the initial render of this hook.\n const 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 const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n let equal = true;\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(current[t], prev[t])) {\n if (isUndefined(prev[t])) {\n if (!compare(current[t], returnedData)) {\n equal = false;\n }\n } else {\n equal = false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n equal = false;\n }\n }\n }\n return equal;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n if (!isUndefined(revalidateIfStale)) return revalidateIfStale;\n return true;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = getSelectedCache(getCache());\n const memorizedInitialSnapshot = getSelectedCache(getInitialCache());\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n return isEqual(newSnapshot, memorizedSnapshot) ? memorizedSnapshot : memorizedSnapshot = newSnapshot;\n },\n ()=>memorizedInitialSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined(cachedData) ? fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;\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 const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) 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 mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n [newData, startAt] = FETCH[key];\n newData = await newData;\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 (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, revalidate, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `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 [\n key,\n cache\n ]);\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 const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n let nextFocusRevalidatedAt = 0;\n const onRevalidate = (type)=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n }\n return;\n };\n const 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 // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation.\n if (shouldDoInitialRevalidation) {\n if (isUndefined(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\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 ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction(refreshInterval) ? refreshInterval(data) : refreshInterval;\n // We only start the 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 (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `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 // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any initial data. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using suspense in SSR.');\n }\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 returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n};\nconst SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\nconst unstable_serialize = (key)=>serialize(key)[0];\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (!data) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ var useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n", "import React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useState, createElement, useRef, useCallback } from 'react';\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can 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\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return cache.get(key) || EMPTY_CACHE;\n }\n ];\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).\nconst table = new WeakMap();\n// counter of the key\nlet 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// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const constructor = arg && arg.constructor;\n const isDate = constructor == Date;\n let result;\n let 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) 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 const 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 } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\n/**\n * Due to the 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 workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || 'Deno' in window;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\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.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nconst FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\n\nvar constants = {\n __proto__: null,\n FOCUS_EVENT: FOCUS_EVENT,\n RECONNECT_EVENT: RECONNECT_EVENT,\n MUTATE_EVENT: MUTATE_EVENT\n};\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const revalidate = options.revalidate !== false;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for(let keyIt = it.next(); !keyIt.done; keyIt = it.next()){\n const key = keyIt.value;\n if (// Skip the special useSWRInfinite keys.\n !key.startsWith('$inf$') && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH] = SWRGlobalState.get(cache);\n const revalidators = EVENT_REVALIDATORS[key];\n const startRevalidate = ()=>{\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(()=>get().data);\n }\n }\n return get().data;\n };\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 startRevalidate();\n }\n let data = _data;\n let error;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isFunction(data.then)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((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 if (beforeMutationTs !== MUTATION[key][0]) {\n if (error) throw error;\n return data;\n } else if (error && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n data = committedData;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data,\n _c: UNDEFINED\n });\n }\n }\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, committedData);\n }\n // Only update cached data if there's no error. Data can be `undefined` here.\n set({\n data,\n _c: UNDEFINED\n });\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n const res = await startRevalidate();\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n // Throw error or return data\n if (error) {\n if (throwOnError) throw error;\n return;\n }\n return populateCache ? res : data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (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 is bound to\n // the cache.\n // The 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 const 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 const EVENT_REVALIDATORS = {};\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = {};\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for(let i = subs.length; i--;){\n subs[i](value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n {},\n {},\n {},\n mutate,\n setter,\n subscribe\n ]);\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 be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\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 }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\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 [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = (currentData, newData)=>stableHash(currentData) == stableHash(newData);\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n 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,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1 , fallback: f1 } = a;\n const { use: u2 , fallback: f2 } = b;\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\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // Use a lazy initialized state to create the cache on first access.\n const [cacheContext] = useState(()=>provider ? initCache(provider(extendedConfig.cache || cache), config) : UNDEFINED);\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(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const key = serialize(key_)[0];\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(key_);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const key = serialize(key_)[0];\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n const req = PRELOAD[key];\n if (req) {\n delete PRELOAD[key];\n return req;\n }\n return fetcher_(...args);\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n/**\n * An implementation of state with dependency-tracking.\n */ const useStateWithDeps = (state)=>{\n const rerender = useState({})[1];\n const unmountedRef = useRef(false);\n const 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 const 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 */ const setState = useCallback((payload)=>{\n let shouldRerender = false;\n const currentState = stateRef.current;\n for(const _ in payload){\n const 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 if (IS_REACT_LEGACY) {\n rerender({});\n } else {\n React.startTransition(()=>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 useIsomorphicLayoutEffect(()=>{\n unmountedRef.current = false;\n return ()=>{\n unmountedRef.current = true;\n };\n });\n return [\n stateRef,\n stateDependenciesRef.current,\n setState\n ];\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const 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\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { IS_REACT_LEGACY, IS_SERVER, OBJECT, SWRConfig, SWRGlobalState, UNDEFINED, cache, compare, createCacheHelper, defaultConfig, defaultConfigOptions, getTimestamp, hasRequestAnimationFrame, initCache, internalMutate, isDocumentDefined, isFunction, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, mutate, noop, normalize, preload, preset, rAF, constants as revalidateEvents, serialize, slowConnection, stableHash, subscribeCallback, useIsomorphicLayoutEffect, useSWRConfig, useStateWithDeps, withArgs, withMiddleware };\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 LocalNotificationBanner,\n urlPattern,\n useBankCoreApiContext,\n useCurrentLocation,\n useLocalNotification,\n useNavigationContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\n\nimport {\n AbsoluteTime,\n AccessToken,\n HttpStatusCode,\n TranslatedString,\n assertUnreachable,\n createRFC8959AccessTokenEncoded\n} from \"@gnu-taler/taler-util\";\nimport { useEffect } from \"preact/hooks\";\nimport { useSessionState } from \"./hooks/session.js\";\nimport { AccountPage } from \"./pages/AccountPage/index.js\";\nimport { BankFrame } from \"./pages/BankFrame.js\";\nimport { LoginForm } from \"./pages/LoginForm.js\";\nimport { PublicHistoriesPage } from \"./pages/PublicHistoriesPage.js\";\nimport { RegistrationPage } from \"./pages/RegistrationPage.js\";\nimport { ShowNotifications } from \"./pages/ShowNotifications.js\";\nimport { SolveChallengePage } from \"./pages/SolveChallengePage.js\";\nimport { WireTransfer } from \"./pages/WireTransfer.js\";\nimport { WithdrawalOperationPage } from \"./pages/WithdrawalOperationPage.js\";\nimport { CashoutListForAccount } from \"./pages/account/CashoutListForAccount.js\";\nimport { ShowAccountDetails } from \"./pages/account/ShowAccountDetails.js\";\nimport { UpdateAccountPassword } from \"./pages/account/UpdateAccountPassword.js\";\nimport { AdminHome } from \"./pages/admin/AdminHome.js\";\nimport { CreateNewAccount } from \"./pages/admin/CreateNewAccount.js\";\nimport { DownloadStats } from \"./pages/admin/DownloadStats.js\";\nimport { RemoveAccount } from \"./pages/admin/RemoveAccount.js\";\nimport { ConversionConfig } from \"./pages/regional/ConversionConfig.js\";\nimport { CreateCashout } from \"./pages/regional/CreateCashout.js\";\nimport { ShowCashoutDetails } from \"./pages/regional/ShowCashoutDetails.js\";\n\nexport function Routing(): VNode {\n const session = useSessionState();\n\n if (session.state.status === \"loggedIn\") {\n const { isUserAdministrator, username } = session.state;\n return (\n <BankFrame\n account={username}\n routeAccountDetails={privatePages.myAccountDetails}\n >\n <PrivateRouting username={username} isAdmin={isUserAdministrator} />\n </BankFrame>\n );\n }\n return (\n <BankFrame>\n <PublicRounting\n onLoggedUser={(username, token) => {\n session.logIn({ username, token: token });\n }}\n />\n </BankFrame>\n );\n}\n\nconst publicPages = {\n login: urlPattern(/\\/login/, () => \"#/login\"),\n register: urlPattern(/\\/register/, () => \"#/register\"),\n publicAccounts: urlPattern(/\\/public-accounts/, () => \"#/public-accounts\"),\n operationDetails: urlPattern<{ wopid: string }>(\n /\\/operation\\/(?<wopid>[a-zA-Z0-9-]+)/,\n ({ wopid }) => `#/operation/${wopid}`,\n ),\n solveSecondFactor: urlPattern(/\\/2fa/, () => \"#/2fa\"),\n};\n\nfunction PublicRounting({\n onLoggedUser,\n}: {\n onLoggedUser: (username: string, token: AccessToken) => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const location = useCurrentLocation(publicPages);\n const { navigateTo } = useNavigationContext();\n const { config, lib } = useBankCoreApiContext();\n const [notification, notify, handleError] = useLocalNotification();\n\n useEffect(() => {\n if (location === undefined) {\n navigateTo(publicPages.login.url({}));\n }\n }, [location]);\n\n if (location === undefined) {\n return <Fragment />;\n }\n\n async function doAutomaticLogin(username: string, password: string) {\n await handleError(async () => {\n const resp = await lib\n .auth(username)\n .createAccessTokenBasic(username, password, {\n scope: \"readwrite\",\n duration: { d_us: \"forever\" },\n refreshable: true,\n });\n if (resp.type === \"ok\") {\n onLoggedUser(username, createRFC8959AccessTokenEncoded(resp.body.access_token));\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`Wrong credentials for \"${username}\"`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n switch (location.name) {\n case \"login\": {\n return (\n <Fragment>\n <div class=\"sm:mx-auto sm:w-full sm:max-w-sm\">\n <h2 class=\"text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">{i18n.str`Welcome to ${config.bank_name}!`}</h2>\n </div>\n <LoginForm routeRegister={publicPages.register} />\n </Fragment>\n );\n }\n case \"publicAccounts\": {\n return <PublicHistoriesPage />;\n }\n case \"operationDetails\": {\n return (\n <WithdrawalOperationPage\n operationId={location.values.wopid}\n routeWithdrawalDetails={publicPages.operationDetails}\n purpose=\"after-confirmation\"\n onOperationAborted={() => navigateTo(publicPages.login.url({}))}\n routeClose={publicPages.login}\n onAuthorizationRequired={() =>\n navigateTo(publicPages.solveSecondFactor.url({}))\n }\n />\n );\n }\n case \"register\": {\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n <RegistrationPage\n onRegistrationSuccesful={doAutomaticLogin}\n routeCancel={publicPages.login}\n />\n </Fragment>\n );\n }\n case \"solveSecondFactor\": {\n return (\n <SolveChallengePage\n onChallengeCompleted={() => navigateTo(publicPages.login.url({}))}\n routeClose={publicPages.login}\n />\n );\n }\n default:\n assertUnreachable(location);\n }\n}\n\nexport const privatePages = {\n homeChargeWallet: urlPattern(\n /\\/account\\/charge-wallet/,\n () => \"#/account/charge-wallet\",\n ),\n homeWireTransfer: urlPattern<{\n account?: string;\n subject?: string;\n amount?: string;\n }>(/\\/account\\/wire-transfer/, () => \"#/account/wire-transfer\"),\n home: urlPattern(/\\/account/, () => \"#/account\"),\n notifications: urlPattern(/\\/notifications/, () => \"#/notifications\"),\n solveSecondFactor: urlPattern(/\\/2fa/, () => \"#/2fa\"),\n cashoutCreate: urlPattern(/\\/new-cashout/, () => \"#/new-cashout\"),\n cashoutDetails: urlPattern<{ cid: string }>(\n /\\/cashout\\/(?<cid>[a-zA-Z0-9]+)/,\n ({ cid }) => `#/cashout/${cid}`,\n ),\n wireTranserCreate: urlPattern<{\n account?: string;\n subject?: string;\n amount?: string;\n }>(\n /\\/wire-transfer\\/(?<account>[a-zA-Z0-9]+)/,\n ({ account }) => `#/wire-transfer/${account}`,\n ),\n publicAccountList: urlPattern(/\\/public-accounts/, () => \"#/public-accounts\"),\n statsDownload: urlPattern(/\\/download-stats/, () => \"#/download-stats\"),\n accountCreate: urlPattern(/\\/new-account/, () => \"#/new-account\"),\n myAccountDelete: urlPattern(\n /\\/delete-my-account/,\n () => \"#/delete-my-account\",\n ),\n myAccountDetails: urlPattern(/\\/my-profile/, () => \"#/my-profile\"),\n myAccountPassword: urlPattern(/\\/my-password/, () => \"#/my-password\"),\n myAccountCashouts: urlPattern(/\\/my-cashouts/, () => \"#/my-cashouts\"),\n conversionConfig: urlPattern(/\\/conversion/, () => \"#/conversion\"),\n accountDetails: urlPattern<{ account: string }>(\n /\\/profile\\/(?<account>[a-zA-Z0-9_-]+)\\/details/,\n ({ account }) => `#/profile/${account}/details`,\n ),\n accountChangePassword: urlPattern<{ account: string }>(\n /\\/profile\\/(?<account>[a-zA-Z0-9_-]+)\\/change-password/,\n ({ account }) => `#/profile/${account}/change-password`,\n ),\n accountDelete: urlPattern<{ account: string }>(\n /\\/profile\\/(?<account>[a-zA-Z0-9_-]+)\\/delete/,\n ({ account }) => `#/profile/${account}/delete`,\n ),\n accountCashouts: urlPattern<{ account: string }>(\n /\\/profile\\/(?<account>[a-zA-Z0-9_-]+)\\/cashouts/,\n ({ account }) => `#/profile/${account}/cashouts`,\n ),\n startOperation: urlPattern<{ wopid: string }>(\n /\\/start-operation\\/(?<wopid>[a-zA-Z0-9-]+)/,\n ({ wopid }) => `#/start-operation/${wopid}`,\n ),\n operationDetails: urlPattern<{ wopid: string }>(\n /\\/operation\\/(?<wopid>[a-zA-Z0-9-]+)/,\n ({ wopid }) => `#/operation/${wopid}`,\n ),\n};\n\nfunction PrivateRouting({\n username,\n isAdmin,\n}: {\n username: string;\n isAdmin: boolean;\n}): VNode {\n const { navigateTo } = useNavigationContext();\n const location = useCurrentLocation(privatePages);\n useEffect(() => {\n if (location === undefined) {\n navigateTo(privatePages.home.url({}));\n }\n }, [location]);\n\n if (location === undefined) {\n return <Fragment />;\n }\n\n switch (location.name) {\n case \"operationDetails\": {\n return (\n <WithdrawalOperationPage\n operationId={location.values.wopid}\n routeWithdrawalDetails={privatePages.operationDetails}\n purpose=\"after-confirmation\"\n onOperationAborted={() => navigateTo(privatePages.home.url({}))}\n routeClose={privatePages.home}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n />\n );\n }\n case \"startOperation\": {\n return (\n <WithdrawalOperationPage\n operationId={location.values.wopid}\n routeWithdrawalDetails={privatePages.operationDetails}\n purpose=\"after-creation\"\n onOperationAborted={() => navigateTo(privatePages.home.url({}))}\n routeClose={privatePages.home}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n />\n );\n }\n case \"solveSecondFactor\": {\n return (\n <SolveChallengePage\n onChallengeCompleted={() => navigateTo(privatePages.home.url({}))}\n routeClose={privatePages.home}\n />\n );\n }\n case \"publicAccountList\": {\n return <PublicHistoriesPage />;\n }\n case \"statsDownload\": {\n return <DownloadStats routeCancel={privatePages.home} />;\n }\n case \"accountCreate\": {\n return (\n <CreateNewAccount\n routeCancel={privatePages.home}\n onCreateSuccess={() => navigateTo(privatePages.home.url({}))}\n />\n );\n }\n case \"accountDetails\": {\n return (\n <ShowAccountDetails\n account={location.values.account}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n routeHere={privatePages.accountDetails}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"accountChangePassword\": {\n return (\n <UpdateAccountPassword\n focus\n account={location.values.account}\n routeHere={privatePages.accountChangePassword}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"accountDelete\": {\n return (\n <RemoveAccount\n account={location.values.account}\n routeHere={privatePages.accountDelete}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeCancel={privatePages.home}\n />\n );\n }\n case \"accountCashouts\": {\n return (\n <CashoutListForAccount\n account={location.values.account}\n routeCreateCashout={privatePages.cashoutCreate}\n routeCashoutDetails={privatePages.cashoutDetails}\n routeClose={privatePages.home}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onCashout={() =>\n navigateTo(privatePages.home.url({}))\n }\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n />\n );\n }\n case \"myAccountDelete\": {\n return (\n <RemoveAccount\n account={username}\n routeHere={privatePages.accountDelete}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeCancel={privatePages.home}\n />\n );\n }\n case \"myAccountDetails\": {\n return (\n <ShowAccountDetails\n account={username}\n routeHere={privatePages.accountDetails}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeConversionConfig={privatePages.conversionConfig}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"myAccountPassword\": {\n return (\n <UpdateAccountPassword\n focus\n account={username}\n routeHere={privatePages.accountChangePassword}\n onUpdateSuccess={() => navigateTo(privatePages.home.url({}))}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"myAccountCashouts\": {\n return (\n <CashoutListForAccount\n account={username}\n routeCashoutDetails={privatePages.cashoutDetails}\n routeCreateCashout={privatePages.cashoutCreate}\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n onCashout={() =>\n navigateTo(privatePages.home.url({}))\n }\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeClose={privatePages.home}\n />\n );\n }\n case \"home\": {\n if (isAdmin) {\n return (\n <AdminHome\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeCreate={privatePages.accountCreate}\n routeRemoveAccount={privatePages.accountDelete}\n routeShowAccount={privatePages.accountDetails}\n routeShowCashoutsAccount={privatePages.accountCashouts}\n routeUpdatePasswordAccount={privatePages.accountChangePassword}\n routeCreateWireTransfer={privatePages.wireTranserCreate}\n routeDownloadStats={privatePages.statsDownload}\n />\n );\n }\n return (\n <AccountPage\n account={username}\n tab={undefined}\n routeCreateWireTransfer={privatePages.wireTranserCreate}\n routePublicAccounts={privatePages.publicAccountList}\n routeOperationDetails={privatePages.startOperation}\n routeChargeWallet={privatePages.homeChargeWallet}\n routeWireTransfer={privatePages.homeWireTransfer}\n routeSolveSecondFactor={privatePages.solveSecondFactor}\n routeCashout={privatePages.myAccountCashouts}\n routeClose={privatePages.home}\n onClose={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n onOperationCreated={(wopid) =>\n navigateTo(privatePages.startOperation.url({ wopid }))\n }\n />\n );\n }\n case \"cashoutCreate\": {\n return (\n <CreateCashout\n account={username}\n routeHere={privatePages.cashoutCreate}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n onCashout={() => navigateTo(privatePages.home.url({}))}\n routeClose={privatePages.home}\n />\n );\n }\n case \"cashoutDetails\": {\n return (\n <ShowCashoutDetails\n id={location.values.cid}\n routeClose={privatePages.myAccountCashouts}\n />\n );\n }\n case \"wireTranserCreate\": {\n return (\n <WireTransfer\n toAccount={location.values.account}\n withAmount={location.values.amount}\n withSubject={location.values.subject}\n routeHere={privatePages.wireTranserCreate}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n routeCancel={privatePages.home}\n onSuccess={() => navigateTo(privatePages.home.url({}))}\n />\n );\n }\n case \"homeChargeWallet\": {\n return (\n <AccountPage\n account={username}\n tab=\"charge-wallet\"\n routeChargeWallet={privatePages.homeChargeWallet}\n routeWireTransfer={privatePages.homeWireTransfer}\n routeCreateWireTransfer={privatePages.wireTranserCreate}\n routePublicAccounts={privatePages.publicAccountList}\n routeOperationDetails={privatePages.startOperation}\n routeCashout={privatePages.myAccountCashouts}\n routeSolveSecondFactor={privatePages.solveSecondFactor}\n routeClose={privatePages.home}\n onClose={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n onOperationCreated={(wopid) =>\n navigateTo(privatePages.startOperation.url({ wopid }))\n }\n />\n );\n }\n case \"conversionConfig\": {\n return (\n <ConversionConfig\n routeMyAccountCashout={privatePages.myAccountCashouts}\n routeMyAccountDelete={privatePages.myAccountDelete}\n routeMyAccountDetails={privatePages.myAccountDetails}\n routeMyAccountPassword={privatePages.myAccountPassword}\n routeConversionConfig={privatePages.conversionConfig}\n routeCancel={privatePages.home}\n onUpdateSuccess={() => {\n navigateTo(privatePages.home.url({}));\n }}\n />\n );\n }\n case \"homeWireTransfer\": {\n return (\n <AccountPage\n account={username}\n tab=\"wire-transfer\"\n routeChargeWallet={privatePages.homeChargeWallet}\n routeWireTransfer={privatePages.homeWireTransfer}\n routeCreateWireTransfer={privatePages.wireTranserCreate}\n routePublicAccounts={privatePages.publicAccountList}\n routeOperationDetails={privatePages.startOperation}\n routeSolveSecondFactor={privatePages.solveSecondFactor}\n routeCashout={privatePages.myAccountCashouts}\n routeClose={privatePages.home}\n onClose={() => navigateTo(privatePages.home.url({}))}\n onAuthorizationRequired={() =>\n navigateTo(privatePages.solveSecondFactor.url({}))\n }\n onOperationCreated={(wopid) =>\n navigateTo(privatePages.startOperation.url({ wopid }))\n }\n />\n );\n }\n case \"notifications\": {\n return <ShowNotifications />;\n }\n default:\n assertUnreachable(location);\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n Codec,\n buildCodecForObject,\n buildCodecForUnion,\n codecForBoolean,\n codecForConstString,\n codecForString,\n} from \"@gnu-taler/taler-util\";\nimport { buildStorageKey, useLocalStorage } from \"@gnu-taler/web-util/browser\";\nimport { mutate } from \"swr\";\n\n/**\n * Has the information to reach and\n * authenticate at the bank's backend.\n */\nexport type SessionState = LoggedIn | LoggedOut | Expired;\n\ninterface LoggedIn {\n status: \"loggedIn\";\n isUserAdministrator: boolean;\n username: string;\n token: AccessToken;\n}\ninterface Expired {\n status: \"expired\";\n isUserAdministrator: boolean;\n username: string;\n}\ninterface LoggedOut {\n status: \"loggedOut\";\n}\n\nexport const codecForSessionStateLoggedIn = (): Codec<LoggedIn> =>\n buildCodecForObject<LoggedIn>()\n .property(\"status\", codecForConstString(\"loggedIn\"))\n .property(\"username\", codecForString())\n .property(\"token\", codecForString() as Codec<AccessToken>)\n .property(\"isUserAdministrator\", codecForBoolean())\n .build(\"SessionState.LoggedIn\");\n\nexport const codecForSessionStateExpired = (): Codec<Expired> =>\n buildCodecForObject<Expired>()\n .property(\"status\", codecForConstString(\"expired\"))\n .property(\"username\", codecForString())\n .property(\"isUserAdministrator\", codecForBoolean())\n .build(\"SessionState.Expired\");\n\nexport const codecForSessionStateLoggedOut = (): Codec<LoggedOut> =>\n buildCodecForObject<LoggedOut>()\n .property(\"status\", codecForConstString(\"loggedOut\"))\n .build(\"SessionState.LoggedOut\");\n\nexport const codecForSessionState = (): Codec<SessionState> =>\n buildCodecForUnion<SessionState>()\n .discriminateOn(\"status\")\n .alternative(\"loggedIn\", codecForSessionStateLoggedIn())\n .alternative(\"loggedOut\", codecForSessionStateLoggedOut())\n .alternative(\"expired\", codecForSessionStateExpired())\n .build(\"SessionState\");\n\nexport const defaultState: SessionState = {\n status: \"loggedOut\",\n};\n\nexport interface SessionStateHandler {\n state: SessionState;\n logOut(): void;\n expired(): void;\n logIn(info: { username: string; token: AccessToken }): void;\n}\n\nconst SESSION_STATE_KEY = buildStorageKey(\n \"bank-session\",\n codecForSessionState(),\n);\n\n/**\n * Return getters and setters for\n * login credentials and backend's\n * base URL.\n */\nexport function useSessionState(): SessionStateHandler {\n const { value: state, update } = useLocalStorage(\n SESSION_STATE_KEY,\n defaultState,\n );\n\n return {\n state,\n logOut() {\n update(defaultState);\n },\n expired() {\n if (state.status === \"loggedOut\") return;\n const nextState: SessionState = {\n status: \"expired\",\n username: state.username,\n isUserAdministrator: state.username === \"admin\",\n };\n update(nextState);\n },\n logIn(info) {\n // admin is defined by the username\n const nextState: SessionState = {\n status: \"loggedIn\",\n ...info,\n isUserAdministrator: info.username === \"admin\",\n };\n update(nextState);\n cleanAllCache();\n },\n };\n}\n\nfunction cleanAllCache(): void {\n mutate(() => true, undefined, { revalidate: false });\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError } from \"@gnu-taler/taler-util\";\nimport { ErrorLoading } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { usePreferences } from \"../hooks/preferences.js\";\n\nexport function ErrorLoadingWithDebug({ error }: { error: TalerError }): VNode {\n const [pref] = usePreferences();\n return <ErrorLoading error={error} showDetail={pref.showDebugInfo} />;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Codec,\n TranslatedString,\n buildCodecForObject,\n codecForBoolean,\n codecForNumber,\n} from \"@gnu-taler/taler-util\";\nimport {\n buildStorageKey,\n useLocalStorage,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\n\ninterface Preferences {\n showWithdrawalSuccess: boolean;\n showDemoDescription: boolean;\n showInstallWallet: boolean;\n maxWithdrawalAmount: number;\n fastWithdrawal: boolean;\n showDebugInfo: boolean;\n}\n\nexport const codecForPreferences = (): Codec<Preferences> =>\n buildCodecForObject<Preferences>()\n .property(\"showWithdrawalSuccess\", codecForBoolean())\n .property(\"showDemoDescription\", codecForBoolean())\n .property(\"showInstallWallet\", codecForBoolean())\n .property(\"fastWithdrawal\", codecForBoolean())\n .property(\"showDebugInfo\", codecForBoolean())\n .property(\"maxWithdrawalAmount\", codecForNumber())\n .build(\"Settings\");\n\nconst defaultPreferences: Preferences = {\n showWithdrawalSuccess: true,\n showDemoDescription: true,\n showInstallWallet: true,\n maxWithdrawalAmount: 25,\n fastWithdrawal: false,\n showDebugInfo: false,\n};\n\nconst BANK_PREFERENCES_KEY = buildStorageKey(\n \"bank-preferences\",\n codecForPreferences(),\n);\n/**\n * User preferences.\n *\n * @returns tuple of [state, update()]\n */\nexport function usePreferences(): [\n Readonly<Preferences>,\n <T extends keyof Preferences>(key: T, value: Preferences[T]) => void,\n] {\n const { value, update } = useLocalStorage(\n BANK_PREFERENCES_KEY,\n defaultPreferences,\n );\n\n function updateField<T extends keyof Preferences>(k: T, v: Preferences[T]) {\n const newValue = { ...value, [k]: v };\n update(newValue);\n }\n return [value, updateField];\n}\n\nexport function getAllBooleanPreferences(): Array<keyof Preferences> {\n return [\n \"fastWithdrawal\",\n \"showDebugInfo\",\n \"showDemoDescription\",\n \"showInstallWallet\",\n \"showWithdrawalSuccess\",\n ];\n}\n\nexport function getLabelForPreferences(\n k: keyof Preferences,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): TranslatedString {\n switch (k) {\n case \"maxWithdrawalAmount\":\n return i18n.str`Max withdrawal amount`;\n case \"showWithdrawalSuccess\":\n return i18n.str`Show withdrawal confirmation`;\n case \"showDemoDescription\":\n return i18n.str`Show demo description`;\n case \"showInstallWallet\":\n return i18n.str`Show install wallet first`;\n case \"fastWithdrawal\":\n return i18n.str`Use fast withdrawal form`;\n case \"showDebugInfo\":\n return i18n.str`Show debug info`;\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createRFC8959AccessTokenEncoded, createRFC8959AccessTokenPlain } from \"@gnu-taler/taler-util\";\nimport {\n Button,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n useLocalNotificationHandler,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useEffect, useRef, useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../utils.js\";\nimport { doAutoFocus } from \"./PaytoWireTransferForm.js\";\nimport { USERNAME_REGEX } from \"./RegistrationPage.js\";\n\n/**\n * Collect and submit login data.\n */\nexport function LoginForm({\n currentUser,\n fixedUser,\n routeRegister,\n}: {\n fixedUser?: boolean;\n currentUser?: string;\n routeRegister?: RouteDefinition;\n}): VNode {\n const session = useSessionState();\n\n const sessionUser =\n session.state.status !== \"loggedOut\" ? session.state.username : undefined;\n const [username, setUsername] = useState<string | undefined>(\n currentUser ?? sessionUser,\n );\n const [password, setPassword] = useState<string | undefined>();\n const { i18n } = useTranslationContext();\n const {\n lib: { auth: authenticator },\n } = useBankCoreApiContext();\n const [notification, withErrorHandler] = useLocalNotificationHandler();\n const { config } = useBankCoreApiContext();\n\n const ref = useRef<HTMLInputElement>(null);\n useEffect(function focusInput() {\n ref.current?.focus();\n }, []);\n\n const errors = undefinedIfEmpty({\n username: !username\n ? i18n.str`Missing username`\n : !USERNAME_REGEX.test(username)\n ? i18n.str`Use letters, numbers or any of these characters: - . _ ~`\n : undefined,\n password: !password ? i18n.str`Missing password` : undefined,\n });\n\n async function doLogout() {\n session.logOut();\n }\n\n const loginHandler =\n !username || !password\n ? undefined\n : withErrorHandler(\n async () =>\n authenticator(username).createAccessTokenBasic(username, password, {\n scope: \"readwrite\",\n duration: { d_us: \"forever\" },\n refreshable: true,\n }),\n (result) => {\n session.logIn({ username, token: createRFC8959AccessTokenEncoded(result.body.access_token) });\n },\n (fail) => {\n switch (fail.case) {\n case HttpStatusCode.Unauthorized:\n return i18n.str`Wrong credentials for \"${username}\"`;\n case HttpStatusCode.NotFound:\n return i18n.str`Account not found`;\n }\n },\n );\n\n return (\n <div class=\"flex min-h-full flex-col justify-center \">\n <LocalNotificationBanner notification={notification} />\n <div class=\"mt-10 sm:mx-auto sm:w-full sm:max-w-sm\">\n <form\n class=\"space-y-6\"\n noValidate\n onSubmit={(e) => {\n e.preventDefault();\n }}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n >\n <div>\n <label\n for=\"username\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Username</i18n.Translate>\n </label>\n <div class=\"mt-2\">\n <input\n ref={doAutoFocus}\n type=\"text\"\n name=\"username\"\n id=\"username\"\n class=\"block w-full disabled:bg-gray-200 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={username ?? \"\"}\n disabled={fixedUser}\n enterkeyhint=\"next\"\n placeholder=\"identification\"\n autocomplete=\"username\"\n title={i18n.str`Username of the account`}\n required\n onInput={(e): void => {\n setUsername(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.username}\n isDirty={username !== undefined}\n />\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center justify-between\">\n <label\n for=\"password\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Password</i18n.Translate>\n </label>\n </div>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n name=\"password\"\n id=\"password\"\n autocomplete=\"current-password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n enterkeyhint=\"send\"\n value={password ?? \"\"}\n placeholder=\"Password\"\n title={i18n.str`Password of the account`}\n required\n onInput={(e): void => {\n setPassword(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.password}\n isDirty={password !== undefined}\n />\n </div>\n </div>\n\n {session.state.status !== \"loggedOut\" ? (\n <div class=\"flex justify-between\">\n <button\n type=\"submit\"\n name=\"cancel\"\n class=\"rounded-md bg-white-600 px-3 py-1.5 text-sm font-semibold leading-6 text-black shadow-sm hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600\"\n onClick={(e) => {\n e.preventDefault();\n doLogout();\n }}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n\n <Button\n type=\"submit\"\n name=\"check\"\n class=\"rounded-md bg-indigo-600 disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n handler={loginHandler}\n >\n <i18n.Translate>Check</i18n.Translate>\n </Button>\n </div>\n ) : (\n <div>\n <Button\n type=\"submit\"\n name=\"login\"\n class=\"flex w-full justify-center rounded-md bg-indigo-600 disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n handler={loginHandler}\n >\n <i18n.Translate>Log in</i18n.Translate>\n </Button>\n </div>\n )}\n </form>\n\n {config.allow_registrations && routeRegister && (\n <a\n name=\"register\"\n href={routeRegister.url({})}\n class=\"flex justify-center border-t mt-4 rounded-md bg-blue-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-blue-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600\"\n >\n <i18n.Translate>Register</i18n.Translate>\n </a>\n )}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountString,\n PaytoString,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n} from \"@gnu-taler/taler-util\";\nimport {\n ErrorNotification,\n InternationalizationAPI,\n notify,\n notifyError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\n\n/**\n * Validate (the number part of) an amount. If needed,\n * replace comma with a dot. Returns 'false' whenever\n * the input is invalid, the valid amount otherwise.\n */\nconst amountRegex = /^[0-9]+(.[0-9]+)?$/;\nexport function validateAmount(\n maybeAmount: string | undefined,\n): string | undefined {\n if (!maybeAmount || !amountRegex.test(maybeAmount)) {\n return;\n }\n return maybeAmount;\n}\n\n/**\n * Extract IBAN from a Payto URI.\n */\nexport function getIbanFromPayto(url: string): string {\n const pathSplit = new URL(url).pathname.split(\"/\");\n let lastIndex = pathSplit.length - 1;\n // Happens if the path ends with \"/\".\n if (pathSplit[lastIndex] === \"\") lastIndex--;\n const iban = pathSplit[lastIndex];\n return iban;\n}\n\nexport function undefinedIfEmpty<T extends object>(obj: T): T | undefined {\n return Object.keys(obj).some(\n (k) => (obj as Record<string, T>)[k] !== undefined,\n )\n ? obj\n : undefined;\n}\n\nexport type PartialButDefined<T> = {\n [P in keyof T]: T[P] | undefined;\n};\n\n/**\n * every non-map field can be undefined\n */\nexport type WithIntermediate<Type> = {\n [prop in keyof Type]: Type[prop] extends PaytoString\n ? Type[prop] | undefined\n : Type[prop] extends AmountString\n ? Type[prop] | undefined\n : Type[prop] extends TranslatedString\n ? Type[prop] | undefined\n : Type[prop] extends object\n ? WithIntermediate<Type[prop]>\n : Type[prop] | undefined;\n};\nexport type RecursivePartial<Type> = {\n [P in keyof Type]?: Type[P] extends (infer U)[]\n ? RecursivePartial<U>[]\n : Type[P] extends object\n ? RecursivePartial<Type[P]>\n : Type[P];\n};\nexport type ErrorMessageMappingFor<Type> = {\n [prop in keyof Type]+?: Exclude<Type[prop], undefined> extends PaytoString // enumerate known object\n ? TranslatedString\n : Exclude<Type[prop], undefined> extends AmountString\n ? TranslatedString\n : Exclude<Type[prop], undefined> extends TranslatedString\n ? TranslatedString\n : // arrays: every element\n Exclude<Type[prop], undefined> extends (infer U)[]\n ? ErrorMessageMappingFor<U>[]\n : // map: every field\n Exclude<Type[prop], undefined> extends object\n ? ErrorMessageMappingFor<Type[prop]>\n : TranslatedString;\n};\n\nexport enum TanChannel {\n SMS = \"sms\",\n EMAIL = \"email\",\n}\nexport enum CashoutStatus {\n // The payment was initiated after a valid\n // TAN was received by the bank.\n CONFIRMED = \"confirmed\",\n\n // The cashout was created and now waits\n // for the TAN by the author.\n PENDING = \"pending\",\n}\n\n\nexport const PAGINATED_LIST_SIZE = 5;\n// when doing paginated request, ask for one more\n// and use it to know if there are more to request\nexport const PAGINATED_LIST_REQUEST = PAGINATED_LIST_SIZE + 1;\n\ntype Translator = ReturnType<typeof useTranslationContext>[\"i18n\"];\n\nexport async function withRuntimeErrorHandling<T>(\n i18n: Translator,\n cb: () => Promise<T>,\n): Promise<void> {\n try {\n await cb();\n } catch (error: unknown) {\n if (error instanceof TalerError) {\n notify(buildRequestErrorMessage(i18n, error));\n } else {\n notifyError(\n i18n.str`Operation failed, please report`,\n (error instanceof Error\n ? error.message\n : JSON.stringify(error)) as TranslatedString,\n );\n }\n }\n}\n\nexport function buildRequestErrorMessage(\n i18n: Translator,\n cause: TalerError,\n): ErrorNotification {\n let result: ErrorNotification;\n switch (cause.errorDetail.code) {\n case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {\n result = {\n type: \"error\",\n title: i18n.str`Request timeout`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {\n result = {\n type: \"error\",\n title: i18n.str`Request throttled`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {\n result = {\n type: \"error\",\n title: i18n.str`Malformed response`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_NETWORK_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Network error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected request error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n default: {\n result = {\n type: \"error\",\n title: i18n.str`Unexpected error`,\n description: cause.message as TranslatedString,\n debug: JSON.stringify(cause.errorDetail, undefined, 2),\n when: AbsoluteTime.now(),\n };\n break;\n }\n }\n return result;\n}\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/**\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 */\nconst IBAN_REGEX = /^[A-Z][A-Z0-9]*$/;\nexport function validateIBAN(\n account: string,\n i18n: InternationalizationAPI,\n): TranslatedString | undefined {\n if (!IBAN_REGEX.test(account)) {\n return i18n.str`IBAN only have uppercased letters and numbers`;\n }\n // Check total length\n if (account.length < 4) return i18n.str`IBAN numbers have more that 4 digits`;\n if (account.length > 34)\n return i18n.str`IBAN numbers have less that 34 digits`;\n\n const A_code = \"A\".charCodeAt(0);\n const Z_code = \"Z\".charCodeAt(0);\n const IBAN = account.toUpperCase();\n // check supported country\n const code = IBAN.substring(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.substring(4) + account.substring(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 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\nfunction calculate_iban_checksum(str: string): number {\n const numberStr = str.substring(0, 5);\n const rest = str.substring(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\nconst USERNAME_REGEX = /^[A-Za-z][A-Za-z0-9]*$/;\n\nexport function validateTalerBank(\n account: string,\n i18n: InternationalizationAPI,\n): TranslatedString | undefined {\n if (!USERNAME_REGEX.test(account)) {\n return i18n.str`Account only have letters and numbers`;\n }\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n AmountString,\n Amounts,\n CurrencySpecification,\n FRAC_SEPARATOR,\n HttpStatusCode,\n PaytoString,\n PaytoUri,\n TalerCorebankApi,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n buildPayto,\n parsePaytoUri,\n stringifyPaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n InternationalizationAPI,\n LocalNotificationBanner,\n RouteDefinition,\n ShowInputErrorLabel,\n notifyInfo,\n useBankCoreApiContext,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, Ref, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { mutate } from \"swr\";\nimport { IdempotencyRetry } from \"../../../taler-util/lib/http-client/utils.js\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { undefinedIfEmpty, validateIBAN, validateTalerBank } from \"../utils.js\";\n\ninterface Props {\n focus?: boolean;\n withAccount?: string;\n withSubject?: string;\n withAmount?: string;\n onSuccess: () => void;\n onAuthorizationRequired: () => void;\n routeCancel?: RouteDefinition;\n routeCashout?: RouteDefinition;\n routeHere: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n limit: AmountJson;\n balance: AmountJson;\n}\n\nexport function PaytoWireTransferForm({\n focus,\n withAccount,\n withSubject,\n withAmount,\n onSuccess,\n routeCancel,\n routeCashout,\n routeHere,\n onAuthorizationRequired,\n limit,\n}: Props): VNode {\n const [inputType, setInputType] = useState<\"form\" | \"payto\" | \"qr\">(\"form\");\n const isRawPayto = inputType !== \"form\";\n\n const { state: credentials } = useSessionState();\n const {\n lib: { bank: api },\n config,\n url,\n } = useBankCoreApiContext();\n\n const sendingToFixedAccount = withAccount !== undefined;\n\n const [account, setAccount] = useState<string | undefined>(withAccount);\n const [subject, setSubject] = useState<string | undefined>(withSubject);\n const [amount, setAmount] = useState<string | undefined>(withAmount);\n const [, updateBankState] = useBankState();\n\n const [rawPaytoInput, rawPaytoInputSetter] = useState<string | undefined>(\n undefined,\n );\n const { i18n } = useTranslationContext();\n\n const trimmedAmountStr = amount?.trim();\n const parsedAmount = Amounts.parse(`${limit.currency}:${trimmedAmountStr}`);\n const [notification, notify, handleError] = useLocalNotification();\n\n const paytoType =\n config.wire_type === \"X_TALER_BANK\"\n ? (\"x-taler-bank\" as const)\n : (\"iban\" as const);\n\n const errorsWire = undefinedIfEmpty({\n account: !account\n ? i18n.str`Required`\n : paytoType === \"iban\"\n ? validateIBAN(account, i18n)\n : paytoType === \"x-taler-bank\"\n ? validateTalerBank(account, i18n)\n : undefined,\n subject: !subject ? i18n.str`Required` : validateSubject(subject, i18n),\n amount: !trimmedAmountStr\n ? i18n.str`Required`\n : !parsedAmount\n ? i18n.str`Not valid`\n : validateAmount(parsedAmount, limit, i18n),\n });\n\n const parsed = !rawPaytoInput ? undefined : parsePaytoUri(rawPaytoInput);\n\n const errorsPayto = undefinedIfEmpty({\n rawPaytoInput: !rawPaytoInput\n ? i18n.str`Required`\n : !parsed\n ? i18n.str`Does not follow the pattern`\n : validateRawPayto(parsed, limit, url.host, i18n, paytoType),\n });\n\n async function doSend() {\n let payto_uri: PaytoString | undefined;\n let sendingAmount: AmountString | undefined;\n\n if (credentials.status !== \"loggedIn\") return;\n let acName: string | undefined;\n if (isRawPayto) {\n const p = parsePaytoUri(rawPaytoInput!);\n if (!p) return;\n sendingAmount = p.params.amount as AmountString;\n delete p.params.amount;\n // if this payto is valid then it already have message\n payto_uri = stringifyPaytoUri(p);\n acName = !p.isKnown\n ? undefined\n : p.targetType === \"iban\"\n ? p.iban\n : p.targetType === \"bitcoin\"\n ? p.address\n : p.targetType === \"x-taler-bank\"\n ? p.account\n : assertUnreachable(p);\n } else {\n if (!account || !subject) return;\n let payto;\n acName = account;\n switch (paytoType) {\n case \"x-taler-bank\": {\n payto = buildPayto(\"x-taler-bank\", url.host, account);\n\n break;\n }\n case \"iban\": {\n payto = buildPayto(\"iban\", account, undefined);\n break;\n }\n default:\n assertUnreachable(paytoType);\n }\n\n payto.params.message = encodeURIComponent(subject);\n payto_uri = stringifyPaytoUri(payto);\n sendingAmount = `${limit.currency}:${trimmedAmountStr}` as AmountString;\n }\n const puri = payto_uri;\n const sAmount = sendingAmount;\n\n await handleError(async function createTransactionHandleError() {\n const request: TalerCorebankApi.CreateTransactionRequest = {\n payto_uri: puri,\n amount: sAmount,\n };\n const check = IdempotencyRetry.tryFiveTimes();\n const resp = await api.createTransaction(credentials, request, check);\n mutate(() => true);\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The request was invalid or the payto://-URI used unacceptable features.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`Not enough permission to complete the operation.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_ADMIN_CREDITOR:\n return notify({\n type: \"error\",\n title: i18n.str`Bank administrator can't be the transfer creditor.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNKNOWN_CREDITOR:\n return notify({\n type: \"error\",\n title: i18n.str`The destination account \"${\n acName ?? puri\n }\" was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_SAME_ACCOUNT:\n return notify({\n type: \"error\",\n title: i18n.str`The origin and the destination of the transfer can't be the same.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`Your balance is not enough.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The origin account \"${puri}\" was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED: {\n return notify({\n type: \"error\",\n title: i18n.str`Tried to create the transaction ${check.maxTries} times with different UID but failed.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"create-transaction\",\n id: String(resp.body.challenge_id),\n location: routeHere.url({\n account: account ?? \"\",\n amount,\n subject,\n }),\n sent: AbsoluteTime.never(),\n request,\n });\n return onAuthorizationRequired();\n }\n default:\n assertUnreachable(resp);\n }\n }\n notifyInfo(i18n.str`Wire transfer created!`);\n onSuccess();\n setAmount(undefined);\n setAccount(undefined);\n setSubject(undefined);\n rawPaytoInputSetter(undefined);\n });\n }\n\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 my-4 md:grid-cols-3 bg-gray-100 px-4 pb-4 rounded-lg\">\n {/* <div class=\"\">\n <div class=\"px-2 grid grid-cols-1 gap-y-4 sm:gap-x-4\">\n <label\n class={\n \"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none\" +\n (!isRawPayto\n ? \"border-indigo-600 ring-2 ring-indigo-600\"\n : \"border-gray-300\")\n }\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Newsletter\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-0-label\"\n aria-describedby=\"project-type-0-description-0 project-type-0-description-1\"\n onChange={() => {\n setIsRawPayto(false);\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Using a form</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n\n {sendingToFixedAccount ? undefined : (\n <label\n class={\n \"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none\" +\n (isRawPayto\n ? \"border-indigo-600 ring-2 ring-indigo-600\"\n : \"border-gray-300\")\n }\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-1-label\"\n aria-describedby=\"project-type-1-description-0 project-type-1-description-1\"\n onChange={() => {\n\n setIsRawPayto(true);\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Import payto:// URI</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n )}\n {routeCashout ? (\n <a\n name=\"do cashout\"\n href={routeCashout.url({})}\n class=\"bg-white p-4 rounded-lg text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cashout</i18n.Translate>\n </a>\n ) : undefined}\n </div>\n </div> */}\n\n <div>\n <fieldset class=\"px-2 grid grid-cols-1 gap-y-4 sm:gap-x-4\">\n <legend class=\"sr-only\">\n <i18n.Translate>Input wire transfer detail</i18n.Translate>\n </legend>\n <div class=\"-space-y-px rounded-md \">\n <label\n data-checked={inputType === \"form\"}\n class=\"group rounded-tl-md rounded-tr-md relative flex cursor-pointer border p-4 focus:outline-none bg-white data-[checked=true]:z-10 data-[checked=true]:border-indigo-200 data-[checked=true]:bg-indigo-50\"\n >\n <input\n type=\"radio\"\n name=\"input-type\"\n onChange={() => {\n if (parsed && parsed.isKnown) {\n switch (parsed.targetType) {\n case \"iban\": {\n setAccount(parsed.iban);\n break;\n }\n case \"x-taler-bank\": {\n setAccount(parsed.account);\n break;\n }\n case \"bitcoin\": {\n break;\n }\n default: {\n assertUnreachable(parsed);\n }\n }\n const amountStr = !parsed.params\n ? undefined\n : parsed.params[\"amount\"];\n if (amountStr) {\n const amount = Amounts.parse(amountStr);\n if (amount) {\n setAmount(Amounts.stringifyValue(amount));\n }\n }\n const subject = parsed.params[\"message\"];\n if (subject) {\n setSubject(subject);\n }\n }\n setInputType(\"form\");\n }}\n checked={inputType === \"form\"}\n value=\"form\"\n class=\"mt-0.5 h-4 w-4 shrink-0 cursor-pointer text-indigo-600 border-gray-300 focus:ring-indigo-600 active:ring-2 active:ring-offset-2 active:ring-indigo-600\"\n />\n <span class=\"ml-3 flex flex-col\">\n {/* <!-- Checked: \"text-indigo-900\", Not Checked: \"text-gray-900\" --> */}\n <span\n data-checked={inputType === \"form\"}\n class=\"block text-sm font-medium data-[checked=true]:text-indigo-900\"\n >\n <i18n.Translate>Using a form</i18n.Translate>\n </span>\n </span>\n </label>\n {sendingToFixedAccount ? undefined : (\n <Fragment>\n <label\n data-checked={inputType === \"payto\"}\n class=\"relative flex cursor-pointer border p-4 focus:outline-none bg-white data-[checked=true]:z-10 data-[checked=true]:border-indigo-200 data-[checked=true]:bg-indigo-50\"\n >\n <input\n type=\"radio\"\n name=\"input-type\"\n onChange={() => {\n if (account) {\n let payto;\n switch (paytoType) {\n case \"x-taler-bank\": {\n payto = buildPayto(\n \"x-taler-bank\",\n url.host,\n account,\n );\n if (parsedAmount) {\n payto.params[\"amount\"] =\n Amounts.stringify(parsedAmount);\n }\n if (subject) {\n payto.params[\"message\"] = subject;\n }\n break;\n }\n case \"iban\": {\n payto = buildPayto(\"iban\", account, undefined);\n if (parsedAmount) {\n payto.params[\"amount\"] =\n Amounts.stringify(parsedAmount);\n }\n if (subject) {\n payto.params[\"message\"] = subject;\n }\n break;\n }\n default:\n assertUnreachable(paytoType);\n }\n rawPaytoInputSetter(stringifyPaytoUri(payto));\n }\n setInputType(\"payto\");\n }}\n checked={inputType === \"payto\"}\n value=\"payto\"\n class=\"mt-0.5 h-4 w-4 shrink-0 cursor-pointer text-indigo-600 border-gray-300 focus:ring-indigo-600 active:ring-2 active:ring-offset-2 active:ring-indigo-600\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n data-checked={inputType === \"payto\"}\n class=\"block font-medium data-[checked=true]:text-indigo-900\"\n >\n payto:// URI\n </span>\n <span\n data-checked={inputType === \"payto\"}\n class=\"block text-sm text-gray-500 data-[checked=true]:text-indigo-600\"\n >\n <i18n.Translate>\n A special URI that indicate the transfer amount and\n account target.\n </i18n.Translate>\n </span>\n </span>\n </label>\n {\n //FIXME: add QR support\n false && (\n <label\n data-checked={inputType === \"qr\"}\n class=\"rounded-bl-md rounded-br-md relative flex cursor-pointer border p-4 focus:outline-none bg-white data-[checked=true]:z-10 data-[checked=true]:border-indigo-200 data-[checked=true]:bg-indigo-50\"\n >\n <input\n type=\"radio\"\n name=\"input-type\"\n onChange={() => {\n setInputType(\"qr\");\n }}\n checked={inputType === \"qr\"}\n value=\"qr\"\n class=\"mt-0.5 h-4 w-4 shrink-0 cursor-pointer text-indigo-600 border-gray-300 focus:ring-indigo-600 active:ring-2 active:ring-offset-2 active:ring-indigo-600\"\n />\n <span class=\"ml-3 flex flex-col\">\n <span\n data-checked={inputType === \"qr\"}\n class=\"block font-medium data-[checked=true]:text-indigo-900\"\n >\n <i18n.Translate>QR code</i18n.Translate>\n </span>\n <span\n data-checked={inputType === \"qr\"}\n class=\"block text-sm text-gray-500 data-[checked=true]:text-indigo-600\"\n >\n <i18n.Translate>\n If you have a camera in this device you can import a\n payto:// URI from a QR code.\n </i18n.Translate>\n </span>\n </span>\n </label>\n )\n }\n </Fragment>\n )}\n </div>\n {routeCashout ? (\n <a\n name=\"do cashout\"\n href={routeCashout.url({})}\n class=\"bg-white p-4 rounded-lg text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cashout</i18n.Translate>\n </a>\n ) : undefined}\n </fieldset>\n </div>\n\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md sm:rounded-xl md:col-span-2 w-fit mx-auto\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"p-4 sm:p-8\">\n {!isRawPayto ? (\n <div class=\"grid max-w-xs grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n {(() => {\n switch (paytoType) {\n case \"x-taler-bank\": {\n return (\n <TextField\n id=\"x-taler-bank\"\n required\n label={i18n.str`Recipient`}\n help={i18n.str`Id of the recipient's account`}\n error={errorsWire?.account}\n onChange={setAccount}\n value={account}\n placeholder={i18n.str`username`}\n focus={focus}\n disabled={sendingToFixedAccount}\n />\n );\n }\n case \"iban\": {\n return (\n <TextField\n id=\"iban\"\n required\n label={i18n.str`Recipient`}\n help={i18n.str`IBAN of the recipient's account`}\n placeholder={\"CC0123456789\" as TranslatedString}\n error={errorsWire?.account}\n onChange={(v) => setAccount(v.toUpperCase())}\n value={account}\n focus={focus}\n disabled={sendingToFixedAccount}\n />\n );\n }\n default:\n assertUnreachable(paytoType);\n }\n })()}\n\n <div class=\"sm:col-span-5\">\n <label\n for=\"subject\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {i18n.str`Transfer subject`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"subject\"\n id=\"subject\"\n autocomplete=\"off\"\n placeholder={i18n.str`Subject`}\n value={subject ?? \"\"}\n required\n onInput={(e): void => {\n setSubject(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errorsWire?.subject}\n isDirty={subject !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Some text to identify the transfer\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n for=\"amount\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {i18n.str`Amount`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <InputAmount\n name=\"amount\"\n left\n currency={limit.currency}\n value={trimmedAmountStr}\n onChange={(d) => {\n setAmount(d);\n }}\n />\n <ShowInputErrorLabel\n message={errorsWire?.amount}\n isDirty={trimmedAmountStr !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Amount to transfer</i18n.Translate>\n </p>\n </div>\n </div>\n ) : (\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6 w-full\">\n <div class=\"sm:col-span-6\">\n <label\n for=\"address\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n {i18n.str`Payto URI:`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <textarea\n ref={focus ? doAutoFocus : undefined}\n name=\"address\"\n id=\"address\"\n type=\"textarea\"\n rows={5}\n class=\"block overflow-hidden w-44 sm:w-96 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={rawPaytoInput ?? \"\"}\n required\n title={i18n.str`Uniform resource identifier of the target account`}\n placeholder={((): TranslatedString => {\n switch (paytoType) {\n case \"x-taler-bank\":\n return i18n.str`payto://x-taler-bank/[bank-host]/[receiver-account]?message=[subject]&amount=[${limit.currency}:X.Y]`;\n case \"iban\":\n return i18n.str`payto://iban/[receiver-iban]?message=[subject]&amount=[${limit.currency}:X.Y]`;\n }\n })()}\n onInput={(e): void => {\n rawPaytoInputSetter(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errorsPayto?.rawPaytoInput}\n isDirty={rawPaytoInput !== undefined}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n {routeCancel ? (\n <a\n name=\"cancel\"\n href={routeCancel.url({})}\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n ) : (\n <div />\n )}\n <button\n type=\"submit\"\n name=\"send\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={isRawPayto ? !!errorsPayto : !!errorsWire}\n onClick={(e) => {\n e.preventDefault();\n doSend();\n }}\n >\n <i18n.Translate>Send</i18n.Translate>\n </button>\n </div>\n <LocalNotificationBanner notification={notification} />\n </form>\n </div>\n );\n}\n\n/**\n * Show the element when the load ended\n * @param element\n */\nexport function doAutoFocus(element: HTMLElement | null) {\n if (element) {\n setTimeout(() => {\n element.focus({ preventScroll: true });\n element.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n }, 100);\n }\n}\n\nexport function InputAmount(\n {\n currency,\n name,\n value,\n error,\n left,\n onChange,\n }: {\n error?: string;\n currency: string;\n name: string;\n left?: boolean | undefined;\n value: string | undefined;\n onChange?: (s: string) => void;\n },\n ref: Ref<HTMLInputElement>,\n): VNode {\n const { config } = useBankCoreApiContext();\n return (\n <div class=\"mt-2\">\n <div class=\"flex rounded-md shadow-sm border-0 ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600\">\n <div class=\"pointer-events-none inset-y-0 flex items-center px-3\">\n <span class=\"text-gray-500 sm:text-sm\">{currency}</span>\n </div>\n <input\n type=\"number\"\n data-left={left}\n class=\"disabled:bg-gray-200 text-right rounded-md rounded-l-none data-[left=true]:text-left w-full py-1.5 pl-3 text-gray-900 placeholder:text-gray-400 sm:text-sm sm:leading-6\"\n placeholder=\"0.00\"\n aria-describedby=\"price-currency\"\n ref={ref}\n name={name}\n id={name}\n autocomplete=\"off\"\n value={value ?? \"\"}\n disabled={!onChange}\n onInput={(e) => {\n if (!onChange) return;\n const l = e.currentTarget.value.length;\n const sep_pos = e.currentTarget.value.indexOf(FRAC_SEPARATOR);\n if (\n sep_pos !== -1 &&\n l - sep_pos - 1 >\n config.currency_specification.num_fractional_input_digits\n ) {\n e.currentTarget.value = e.currentTarget.value.substring(\n 0,\n sep_pos +\n config.currency_specification.num_fractional_input_digits +\n 1,\n );\n }\n onChange(e.currentTarget.value);\n }}\n />\n </div>\n <ShowInputErrorLabel message={error} isDirty={value !== undefined} />\n </div>\n );\n}\n\nexport function RenderAmount({\n value,\n spec,\n negative,\n withColor,\n hideSmall,\n}: {\n spec: CurrencySpecification;\n value: AmountJson;\n hideSmall?: boolean;\n negative?: boolean;\n withColor?: boolean;\n}): VNode {\n const neg = !!negative; // convert to true or false\n\n const { currency, normal, small } = Amounts.stringifyValueWithSpec(\n value,\n spec,\n );\n\n return (\n <span\n data-negative={withColor ? neg : undefined}\n class=\"whitespace-nowrap data-[negative=false]:text-green-600 data-[negative=true]:text-red-600\"\n >\n {negative ? \"- \" : undefined}\n {currency} {normal}{\" \"}\n {!hideSmall && small && <sup class=\"-ml-1\">{small}</sup>}\n </span>\n );\n}\n\nfunction validateRawPayto(\n parsed: PaytoUri,\n limit: AmountJson,\n host: string,\n i18n: InternationalizationAPI,\n type: \"iban\" | \"x-taler-bank\",\n): TranslatedString | undefined {\n if (!parsed.isKnown) {\n return i18n.str`The target type is unknown, use \"${type}\"`;\n }\n let result: TranslatedString | undefined;\n switch (type) {\n case \"x-taler-bank\": {\n if (parsed.targetType !== \"x-taler-bank\") {\n return i18n.str`Only \"x-taler-bank\" target are supported`;\n }\n\n if (parsed.host !== host) {\n return i18n.str`Only this host is allowed. Use \"${host}\"`;\n }\n\n if (!parsed.account) {\n return i18n.str`Missing account name`;\n }\n const result = validateTalerBank(parsed.account, i18n);\n if (result) return result;\n break;\n }\n case \"iban\": {\n if (parsed.targetType !== \"iban\") {\n return i18n.str`Only \"IBAN\" target are supported`;\n }\n const result = validateIBAN(parsed.iban, i18n);\n if (result) return result;\n break;\n }\n default:\n assertUnreachable(type);\n }\n if (!parsed.params.amount) {\n return i18n.str`Missing \"amount\" parameter to specify the amount to be transferred`;\n }\n const amount = Amounts.parse(parsed.params.amount);\n if (!amount) {\n return i18n.str`The \"amount\" parameter is not valid`;\n }\n result = validateAmount(amount, limit, i18n);\n if (result) return result;\n\n if (!parsed.params.message) {\n return i18n.str`Missing the \"message\" parameter to specify a reference text for the transfer`;\n }\n const subject = parsed.params.message;\n result = validateSubject(subject, i18n);\n if (result) return result;\n\n return undefined;\n}\n\nfunction validateAmount(\n amount: AmountJson,\n limit: AmountJson,\n i18n: InternationalizationAPI,\n): TranslatedString | undefined {\n if (amount.currency !== limit.currency) {\n return i18n.str`The only currency allowed is \"${limit.currency}\"`;\n }\n if (Amounts.isZero(amount)) {\n return i18n.str`Can't transfer zero amount`;\n }\n if (Amounts.cmp(limit, amount) === -1) {\n return i18n.str`Balance is not enough`;\n }\n return undefined;\n}\n\nfunction validateSubject(\n text: string,\n i18n: InternationalizationAPI,\n): TranslatedString | undefined {\n if (text.length < 2) {\n return i18n.str`Use a longer subject`;\n }\n return undefined;\n}\n\ninterface PaytoFieldProps {\n id: string;\n label: TranslatedString;\n required?: boolean;\n help?: TranslatedString;\n placeholder?: TranslatedString;\n error: string | undefined;\n value: string | undefined;\n rightIcons?: VNode;\n onChange: (p: string) => void;\n focus?: boolean;\n disabled?: boolean;\n}\n\nfunction Wrapper({\n withIcon,\n children,\n}: {\n withIcon: boolean;\n children: ComponentChildren;\n}): VNode {\n if (withIcon) {\n return <div class=\"flex justify-between\">{children}</div>;\n }\n return <Fragment>{children}</Fragment>;\n}\n\nexport function TextField({\n id,\n label,\n help,\n focus,\n disabled,\n onChange,\n placeholder,\n rightIcons,\n required,\n value,\n error,\n}: PaytoFieldProps): VNode {\n return (\n <div class=\"sm:col-span-5\">\n <label for={id} class=\"block text-sm font-medium leading-6 text-gray-900\">\n {label}\n {required && <b style={{ color: \"red\" }}> *</b>}\n </label>\n <div class=\"mt-2\">\n <Wrapper withIcon={rightIcons !== undefined}>\n <input\n ref={focus ? doAutoFocus : undefined}\n type=\"text\"\n class=\"block w-full disabled:bg-gray-200 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name={id}\n id={id}\n disabled={disabled}\n value={value ?? \"\"}\n placeholder={placeholder}\n autocomplete=\"off\"\n required\n onInput={(e): void => {\n onChange(e.currentTarget.value);\n }}\n />\n {rightIcons}\n </Wrapper>\n <ShowInputErrorLabel message={error} isDirty={value !== undefined} />\n </div>\n {help && <p class=\"mt-2 text-sm text-gray-500\">{help}</p>}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Codec,\n TalerCorebankApi,\n buildCodecForObject,\n buildCodecForUnion,\n codecForAbsoluteTime,\n codecForAny,\n codecForConstString,\n codecForString,\n codecForTanTransmission,\n codecOptional,\n} from \"@gnu-taler/taler-util\";\nimport { buildStorageKey, useLocalStorage } from \"@gnu-taler/web-util/browser\";\nimport { AppLocation } from \"@gnu-taler/web-util/browser\";\n\nexport type ChallengeInProgess =\n | DeleteAccountChallenge\n | UpdateAccountChallenge\n | UpdatePasswordChallenge\n | CreateTransactionChallenge\n | ConfirmWithdrawalChallenge\n | CashoutChallenge;\n\ntype BaseChallenge<OpType extends string, ReqType> = {\n id: string;\n operation: OpType;\n sent: AbsoluteTime;\n location: AppLocation;\n info?: TalerCorebankApi.TanTransmission;\n request: ReqType;\n};\n\ntype DeleteAccountChallenge = BaseChallenge<\"delete-account\", string>;\ntype UpdateAccountChallenge = BaseChallenge<\n \"update-account\",\n TalerCorebankApi.AccountReconfiguration\n>;\ntype UpdatePasswordChallenge = BaseChallenge<\n \"update-password\",\n TalerCorebankApi.AccountPasswordChange\n>;\ntype CreateTransactionChallenge = BaseChallenge<\n \"create-transaction\",\n TalerCorebankApi.CreateTransactionRequest\n>;\ntype ConfirmWithdrawalChallenge = BaseChallenge<\"confirm-withdrawal\", string>;\ntype CashoutChallenge = BaseChallenge<\n \"create-cashout\",\n TalerCorebankApi.CashoutRequest\n>;\n\nconst codecForChallengeUpdatePassword = (): Codec<UpdatePasswordChallenge> =>\n buildCodecForObject<UpdatePasswordChallenge>()\n .property(\"operation\", codecForConstString(\"update-password\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForAny())\n .build(\"UpdatePasswordChallenge\");\n\nconst codecForChallengeDeleteAccount = (): Codec<DeleteAccountChallenge> =>\n buildCodecForObject<DeleteAccountChallenge>()\n .property(\"operation\", codecForConstString(\"delete-account\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"request\", codecForString())\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .build(\"DeleteAccountChallenge\");\n\nconst codecForChallengeUpdateAccount = (): Codec<UpdateAccountChallenge> =>\n buildCodecForObject<UpdateAccountChallenge>()\n .property(\"operation\", codecForConstString(\"update-account\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForAny())\n .build(\"UpdateAccountChallenge\");\n\nconst codecForChallengeCreateTransaction =\n (): Codec<CreateTransactionChallenge> =>\n buildCodecForObject<CreateTransactionChallenge>()\n .property(\"operation\", codecForConstString(\"create-transaction\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForAny())\n .build(\"CreateTransactionChallenge\");\n\nconst codecForChallengeConfirmWithdrawal =\n (): Codec<ConfirmWithdrawalChallenge> =>\n buildCodecForObject<ConfirmWithdrawalChallenge>()\n .property(\"operation\", codecForConstString(\"confirm-withdrawal\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForString())\n .build(\"ConfirmWithdrawalChallenge\");\n\nconst codecForAppLocation = codecForString as () => Codec<AppLocation>;\n\nconst codecForChallengeCashout = (): Codec<CashoutChallenge> =>\n buildCodecForObject<CashoutChallenge>()\n .property(\"operation\", codecForConstString(\"create-cashout\"))\n .property(\"id\", codecForString())\n .property(\"location\", codecForAppLocation())\n .property(\"sent\", codecForAbsoluteTime)\n .property(\"info\", codecOptional(codecForTanTransmission()))\n .property(\"request\", codecForAny())\n .build(\"CashoutChallenge\");\n\nconst codecForChallenge = (): Codec<ChallengeInProgess> =>\n buildCodecForUnion<ChallengeInProgess>()\n .discriminateOn(\"operation\")\n .alternative(\"confirm-withdrawal\", codecForChallengeConfirmWithdrawal())\n .alternative(\"create-cashout\", codecForChallengeCashout())\n .alternative(\"create-transaction\", codecForChallengeCreateTransaction())\n .alternative(\"delete-account\", codecForChallengeDeleteAccount())\n .alternative(\"update-account\", codecForChallengeUpdateAccount())\n .alternative(\"update-password\", codecForChallengeUpdatePassword())\n .build(\"ChallengeInProgess\");\n\ninterface BankState {\n currentWithdrawalOperationId: string | undefined;\n currentChallenge: ChallengeInProgess | undefined;\n}\n\nexport const codecForBankState = (): Codec<BankState> =>\n buildCodecForObject<BankState>()\n .property(\"currentWithdrawalOperationId\", codecOptional(codecForString()))\n .property(\"currentChallenge\", codecOptional(codecForChallenge()))\n .build(\"BankState\");\n\nconst defaultBankState: BankState = {\n currentWithdrawalOperationId: undefined,\n currentChallenge: undefined,\n};\n\nconst BANK_STATE_KEY = buildStorageKey(\"bank-app-state\", codecForBankState());\n\n/**\n * Client state saved in local storage.\n *\n * This information is saved in the client because\n * the backend server session API is not enough.\n *\n * @returns tuple of [state, update(), reset()]\n */\nexport function useBankState(): [\n Readonly<BankState>,\n <T extends keyof BankState>(key: T, value: BankState[T]) => void,\n () => void,\n] {\n const { value, update } = useLocalStorage(BANK_STATE_KEY, defaultBankState);\n\n function updateField<T extends keyof BankState>(k: T, v: BankState[T]) {\n const newValue = { ...value, [k]: v };\n update(newValue);\n }\n function reset() {\n update(defaultBankState);\n }\n return [value, updateField, reset];\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { HttpStatusCode, TalerErrorCode } from \"@gnu-taler/taler-util\";\nimport {\n LocalNotificationBanner,\n RouteDefinition,\n ShowInputErrorLabel,\n useBankCoreApiContext,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useSettingsContext } from \"../context/settings.js\";\nimport { undefinedIfEmpty } from \"../utils.js\";\nimport { getRandomPassword, getRandomUsername } from \"./rnd.js\";\n\nexport function RegistrationPage({\n onRegistrationSuccesful,\n routeCancel,\n}: {\n onRegistrationSuccesful: (user: string, password: string) => void;\n routeCancel: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n if (!config.allow_registrations) {\n return (\n <p>{i18n.str`Currently, the bank is not accepting new registrations!`}</p>\n );\n }\n return (\n <RegistrationForm\n onRegistrationSuccesful={onRegistrationSuccesful}\n routeCancel={routeCancel}\n />\n );\n}\n\n// eslint-disable-next-line no-useless-escape\nexport const USERNAME_REGEX = /^[a-zA-Z0-9\\-\\.\\_\\~]*$/;\nexport const PHONE_REGEX = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]\\d{3}[\\s.-]\\d{4}$/;\nexport const EMAIL_REGEX = /^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/;\n\n/**\n * Collect and submit registration data.\n */\nfunction RegistrationForm({\n onRegistrationSuccesful,\n routeCancel,\n}: {\n onRegistrationSuccesful: (user: string, password: string) => void;\n routeCancel: RouteDefinition;\n}): VNode {\n const [username, setUsername] = useState<string | undefined>();\n const [name, setName] = useState<string | undefined>();\n const [password, setPassword] = useState<string | undefined>();\n // const [phone, setPhone] = useState<string | undefined>();\n // const [email, setEmail] = useState<string | undefined>();\n const [repeatPassword, setRepeatPassword] = useState<string | undefined>();\n const [notification, , handleError] = useLocalNotification();\n const settings = useSettingsContext();\n\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n // const { register } = useTestingAPI();\n const { i18n } = useTranslationContext();\n\n const errors = undefinedIfEmpty({\n name: !name ? i18n.str`Missing name` : undefined,\n username: !username\n ? i18n.str`Missing username`\n : !USERNAME_REGEX.test(username)\n ? i18n.str`Use letters, numbers or any of these characters: - . _ ~`\n : undefined,\n // phone: !phone\n // ? undefined\n // : !PHONE_REGEX.test(phone)\n // ? i18n.str`Use letters and numbers only, and start with a lowercase letter`\n // : undefined,\n // email: !email\n // ? undefined\n // : !EMAIL_REGEX.test(email)\n // ? i18n.str`Use letters and numbers only, and start with a lowercase letter`\n // : undefined,\n password: !password ? i18n.str`Missing password` : undefined,\n repeatPassword: !repeatPassword\n ? i18n.str`Missing password`\n : repeatPassword !== password\n ? i18n.str`Passwords don't match`\n : undefined,\n });\n\n async function doRegistrationAndLogin(\n name: string,\n username: string,\n password: string,\n onComplete: () => void,\n ) {\n await handleError(async (onError) => {\n const resp = await api.createAccount(undefined, {\n name,\n username,\n password,\n });\n if (resp.type === \"ok\") {\n onComplete();\n } else {\n onError(resp, (_case) => {\n switch (_case) {\n case HttpStatusCode.BadRequest:\n return i18n.str`Server replied with invalid phone or email.`;\n case HttpStatusCode.Unauthorized:\n return i18n.str`No enough permission to create that account.`;\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return i18n.str`Registration is disabled because the bank ran out of bonus credit.`;\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return i18n.str`That username can't be used because is reserved.`;\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return i18n.str`That username is already taken.`;\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return i18n.str`That account id is already taken.`;\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return i18n.str`No information for the selected authentication channel.`;\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return i18n.str`Authentication channel is not supported.`;\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return i18n.str`Only admin is allow to set debt limit.`;\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT:\n return i18n.str`Only the administrator can change the minimun cashout limit.`;\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return i18n.str`Only admin can create accounts with second factor authentication.`;\n }\n });\n }\n });\n }\n\n async function doRegistrationStep() {\n if (!username || !password || !name) return;\n await doRegistrationAndLogin(name, username, password, () => {\n setUsername(undefined);\n setPassword(undefined);\n setRepeatPassword(undefined);\n onRegistrationSuccesful(username, password);\n });\n }\n\n async function doRandomRegistration() {\n const user = getRandomUsername();\n\n const password = settings.simplePasswordForRandomAccounts\n ? \"123\"\n : getRandomPassword();\n const username = `_${user.first}-${user.second}_`;\n const name = `${capitalizeFirstLetter(user.first)} ${capitalizeFirstLetter(\n user.second,\n )}`;\n await doRegistrationAndLogin(name, username, password, () => {\n onRegistrationSuccesful(username, password);\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"flex min-h-full flex-col justify-center\">\n <div class=\"sm:mx-auto sm:w-full sm:max-w-sm\">\n <h2 class=\"text-center text-2xl font-bold leading-9 tracking-tight text-gray-900\">{i18n.str`Account registration`}</h2>\n </div>\n\n <div class=\"mt-10 sm:mx-auto sm:w-full sm:max-w-sm\">\n <form\n class=\"space-y-6\"\n noValidate\n onSubmit={(e) => {\n e.preventDefault();\n }}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n >\n <div>\n <label\n for=\"username\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Login username</i18n.Translate>\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n autoFocus\n type=\"text\"\n name=\"username\"\n id=\"username\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={username ?? \"\"}\n enterkeyhint=\"next\"\n placeholder=\"account identification to login\"\n autocomplete=\"username\"\n required\n onInput={(e): void => {\n setUsername(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.username}\n isDirty={username !== undefined}\n />\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center justify-between\">\n <label\n for=\"password\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Password</i18n.Translate>\n <b style={{ color: \"red\" }}> *</b>\n </label>\n </div>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n name=\"password\"\n id=\"password\"\n autocomplete=\"current-password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n enterkeyhint=\"send\"\n value={password ?? \"\"}\n placeholder=\"Password\"\n required\n onInput={(e): void => {\n setPassword(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.password}\n isDirty={password !== undefined}\n />\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center justify-between\">\n <label\n for=\"register-repeat\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Repeat password</i18n.Translate>\n <b style={{ color: \"red\" }}> *</b>\n </label>\n </div>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n name=\"register-repeat\"\n id=\"register-repeat\"\n autocomplete=\"current-password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n enterkeyhint=\"send\"\n value={repeatPassword ?? \"\"}\n placeholder=\"Same password\"\n required\n onInput={(e): void => {\n setRepeatPassword(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.repeatPassword}\n isDirty={repeatPassword !== undefined}\n />\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center justify-between\">\n <label\n for=\"name\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >\n <i18n.Translate>Full name</i18n.Translate>\n <b style={{ color: \"red\" }}> *</b>\n </label>\n </div>\n <div class=\"mt-2\">\n <input\n autoFocus\n type=\"text\"\n name=\"name\"\n id=\"name\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={name ?? \"\"}\n enterkeyhint=\"next\"\n placeholder=\"John Doe\"\n autocomplete=\"name\"\n required\n onInput={(e): void => {\n setName(e.currentTarget.value);\n }}\n />\n {/* <ShowInputErrorLabel\n message={errors?.name}\n isDirty={name !== undefined}\n /> */}\n </div>\n </div>\n\n {/* <div>\n <label for=\"phone\" class=\"block text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Phone</i18n.Translate>\n </label>\n <div class=\"mt-2\">\n <input\n autoFocus\n type=\"text\"\n name=\"phone\"\n id=\"phone\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={phone ?? \"\"}\n enterkeyhint=\"next\"\n placeholder=\"your phone\"\n autocomplete=\"none\"\n onInput={(e): void => {\n setPhone(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.phone}\n isDirty={phone !== undefined}\n />\n </div>\n </div>\n <div>\n <label for=\"email\" class=\"block text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Email</i18n.Translate>\n </label>\n <div class=\"mt-2\">\n <input\n autoFocus\n type=\"text\"\n name=\"email\"\n id=\"email\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={email ?? \"\"}\n enterkeyhint=\"next\"\n placeholder=\"your email\"\n autocomplete=\"email\"\n onInput={(e): void => {\n setEmail(e.currentTarget.value);\n }}\n />\n <ShowInputErrorLabel\n message={errors?.email}\n isDirty={email !== undefined}\n />\n </div>\n </div> */}\n\n <div class=\"flex w-full justify-between\">\n <a\n name=\"cancel\"\n href={routeCancel.url({})}\n class=\"ring-1 ring-gray-600 rounded-md bg-white disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-black shadow-sm hover:bg-white-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"register\"\n class=\" rounded-md bg-indigo-600 disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n onClick={async (e) => {\n e.preventDefault();\n\n doRegistrationStep();\n }}\n >\n <i18n.Translate>Register</i18n.Translate>\n </button>\n </div>\n </form>\n\n {settings.allowRandomAccountCreation && (\n <p class=\"mt-10 text-center text-sm text-gray-500 border-t\">\n <button\n type=\"submit\"\n name=\"create random\"\n class=\"flex mt-4 w-full justify-center rounded-md bg-green-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\"\n onClick={(e) => {\n e.preventDefault();\n doRandomRegistration();\n }}\n >\n <i18n.Translate>Create a random temporary user</i18n.Translate>\n </button>\n </p>\n )}\n </div>\n </div>\n </Fragment>\n );\n}\n\nfunction capitalizeFirstLetter(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { UiSettings } from \"../settings.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport type Type = UiSettings;\n\nconst initial: UiSettings = {};\nconst Context = createContext<Type>(initial);\n\nexport const useSettingsContext = (): Type => useContext(Context);\n\nexport const SettingsProvider = ({\n children,\n value,\n}: {\n value: UiSettings;\n children: ComponentChildren;\n}): VNode => {\n return h(Context.Provider, {\n value,\n children,\n });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { encodeCrock, getRandomBytes } from \"@gnu-taler/taler-util\";\n\nconst noun = [\n \"people\",\n \"history\",\n \"way\",\n \"art\",\n \"world\",\n \"information\",\n \"map\",\n \"two\",\n \"family\",\n \"government\",\n \"health\",\n \"system\",\n \"computer\",\n \"meat\",\n \"year\",\n \"thanks\",\n \"music\",\n \"person\",\n \"reading\",\n \"method\",\n \"data\",\n \"food\",\n \"understanding\",\n \"theory\",\n \"law\",\n \"bird\",\n \"literature\",\n \"problem\",\n \"software\",\n \"control\",\n \"knowledge\",\n \"power\",\n \"ability\",\n \"economics\",\n \"love\",\n \"internet\",\n \"television\",\n \"science\",\n \"library\",\n \"nature\",\n \"fact\",\n \"product\",\n \"idea\",\n \"temperature\",\n \"investment\",\n \"area\",\n \"society\",\n \"activity\",\n \"story\",\n \"industry\",\n \"media\",\n \"thing\",\n \"oven\",\n \"community\",\n \"definition\",\n \"safety\",\n \"quality\",\n \"development\",\n \"language\",\n \"management\",\n \"player\",\n \"variety\",\n \"video\",\n \"week\",\n \"security\",\n \"country\",\n \"exam\",\n \"movie\",\n \"organization\",\n \"equipment\",\n \"physics\",\n \"analysis\",\n \"policy\",\n \"series\",\n \"thought\",\n \"basis\",\n \"boyfriend\",\n \"direction\",\n \"strategy\",\n \"technology\",\n \"army\",\n \"camera\",\n \"freedom\",\n \"paper\",\n \"environment\",\n \"child\",\n \"instance\",\n \"month\",\n \"truth\",\n \"marketing\",\n \"university\",\n \"writing\",\n \"article\",\n \"department\",\n \"difference\",\n \"goal\",\n \"news\",\n \"audience\",\n \"fishing\",\n \"growth\",\n \"income\",\n \"marriage\",\n \"user\",\n \"combination\",\n \"failure\",\n \"meaning\",\n \"medicine\",\n \"philosophy\",\n \"teacher\",\n \"communication\",\n \"night\",\n \"chemistry\",\n \"disease\",\n \"disk\",\n \"energy\",\n \"nation\",\n \"road\",\n \"role\",\n \"soup\",\n \"advertising\",\n \"location\",\n \"success\",\n \"addition\",\n \"apartment\",\n \"education\",\n \"math\",\n \"moment\",\n \"painting\",\n \"politics\",\n \"attention\",\n \"decision\",\n \"event\",\n \"property\",\n \"shopping\",\n \"student\",\n \"wood\",\n \"competition\",\n \"distribution\",\n \"entertainment\",\n \"office\",\n \"population\",\n \"president\",\n \"unit\",\n \"category\",\n \"cigarette\",\n \"context\",\n \"introduction\",\n \"opportunity\",\n \"performance\",\n \"driver\",\n \"flight\",\n \"length\",\n \"magazine\",\n \"newspaper\",\n \"relationship\",\n \"teaching\",\n \"cell\",\n \"dealer\",\n \"finding\",\n \"lake\",\n \"member\",\n \"message\",\n \"phone\",\n \"scene\",\n \"appearance\",\n \"association\",\n \"concept\",\n \"customer\",\n \"death\",\n \"discussion\",\n \"housing\",\n \"inflation\",\n \"insurance\",\n \"mood\",\n \"woman\",\n \"advice\",\n \"blood\",\n \"effort\",\n \"expression\",\n \"importance\",\n \"opinion\",\n \"payment\",\n \"reality\",\n \"responsibility\",\n \"situation\",\n \"skill\",\n \"statement\",\n \"wealth\",\n \"application\",\n \"city\",\n \"county\",\n \"depth\",\n \"estate\",\n \"foundation\",\n \"grandmother\",\n \"heart\",\n \"perspective\",\n \"photo\",\n \"recipe\",\n \"studio\",\n \"topic\",\n \"collection\",\n \"depression\",\n \"imagination\",\n \"passion\",\n \"percentage\",\n \"resource\",\n \"setting\",\n \"ad\",\n \"agency\",\n \"college\",\n \"connection\",\n \"criticism\",\n \"debt\",\n \"description\",\n \"memory\",\n \"patience\",\n \"secretary\",\n \"solution\",\n \"administration\",\n \"aspect\",\n \"attitude\",\n \"director\",\n \"personality\",\n \"psychology\",\n \"recommendation\",\n \"response\",\n \"selection\",\n \"storage\",\n \"version\",\n \"alcohol\",\n \"argument\",\n \"complaint\",\n \"contract\",\n \"emphasis\",\n \"highway\",\n \"loss\",\n \"membership\",\n \"possession\",\n \"preparation\",\n \"steak\",\n \"union\",\n \"agreement\",\n \"cancer\",\n \"currency\",\n \"employment\",\n \"engineering\",\n \"entry\",\n \"interaction\",\n \"mixture\",\n \"preference\",\n \"region\",\n \"republic\",\n \"tradition\",\n \"virus\",\n \"actor\",\n \"classroom\",\n \"delivery\",\n \"device\",\n \"difficulty\",\n \"drama\",\n \"election\",\n \"engine\",\n \"football\",\n \"guidance\",\n \"hotel\",\n \"owner\",\n \"priority\",\n \"protection\",\n \"suggestion\",\n \"tension\",\n \"variation\",\n \"anxiety\",\n \"atmosphere\",\n \"awareness\",\n \"bath\",\n \"bread\",\n \"candidate\",\n \"climate\",\n \"comparison\",\n \"confusion\",\n \"construction\",\n \"elevator\",\n \"emotion\",\n \"employee\",\n \"employer\",\n \"guest\",\n \"height\",\n \"leadership\",\n \"mall\",\n \"manager\",\n \"operation\",\n \"recording\",\n \"sample\",\n \"transportation\",\n \"charity\",\n \"cousin\",\n \"disaster\",\n \"editor\",\n \"efficiency\",\n \"excitement\",\n \"extent\",\n \"feedback\",\n \"guitar\",\n \"homework\",\n \"leader\",\n \"mom\",\n \"outcome\",\n \"permission\",\n \"presentation\",\n \"promotion\",\n \"reflection\",\n \"refrigerator\",\n \"resolution\",\n \"revenue\",\n \"session\",\n \"singer\",\n \"tennis\",\n \"basket\",\n \"bonus\",\n \"cabinet\",\n \"childhood\",\n \"church\",\n \"clothes\",\n \"coffee\",\n \"dinner\",\n \"drawing\",\n \"hair\",\n \"hearing\",\n \"initiative\",\n \"judgment\",\n \"lab\",\n \"measurement\",\n \"mode\",\n \"mud\",\n \"orange\",\n \"poetry\",\n \"police\",\n \"possibility\",\n \"procedure\",\n \"queen\",\n \"ratio\",\n \"relation\",\n \"restaurant\",\n \"satisfaction\",\n \"sector\",\n \"signature\",\n \"significance\",\n \"song\",\n \"tooth\",\n \"town\",\n \"vehicle\",\n \"volume\",\n \"wife\",\n \"accident\",\n \"airport\",\n \"appointment\",\n \"arrival\",\n \"assumption\",\n \"baseball\",\n \"chapter\",\n \"committee\",\n \"conversation\",\n \"database\",\n \"enthusiasm\",\n \"error\",\n \"explanation\",\n \"farmer\",\n \"gate\",\n \"girl\",\n \"hall\",\n \"historian\",\n \"hospital\",\n \"injury\",\n \"instruction\",\n \"maintenance\",\n \"manufacturer\",\n \"meal\",\n \"perception\",\n \"pie\",\n \"poem\",\n \"presence\",\n \"proposal\",\n \"reception\",\n \"replacement\",\n \"revolution\",\n \"river\",\n \"son\",\n \"speech\",\n \"tea\",\n \"village\",\n \"warning\",\n \"winner\",\n \"worker\",\n \"writer\",\n \"assistance\",\n \"breath\",\n \"buyer\",\n \"chest\",\n \"chocolate\",\n \"conclusion\",\n \"contribution\",\n \"cookie\",\n \"courage\",\n \"dad\",\n \"desk\",\n \"drawer\",\n \"establishment\",\n \"examination\",\n \"garbage\",\n \"grocery\",\n \"honey\",\n \"impression\",\n \"improvement\",\n \"independence\",\n \"insect\",\n \"inspection\",\n \"inspector\",\n \"king\",\n \"ladder\",\n \"menu\",\n \"penalty\",\n \"piano\",\n \"potato\",\n \"profession\",\n \"professor\",\n \"quantity\",\n \"reaction\",\n \"requirement\",\n \"salad\",\n \"sister\",\n \"supermarket\",\n \"tongue\",\n \"weakness\",\n \"wedding\",\n \"affair\",\n \"ambition\",\n \"analyst\",\n \"apple\",\n \"assignment\",\n \"assistant\",\n \"bathroom\",\n \"bedroom\",\n \"beer\",\n \"birthday\",\n \"celebration\",\n \"championship\",\n \"cheek\",\n \"client\",\n \"consequence\",\n \"departure\",\n \"diamond\",\n \"dirt\",\n \"ear\",\n \"fortune\",\n \"friendship\",\n \"funeral\",\n \"gene\",\n \"girlfriend\",\n \"hat\",\n \"indication\",\n \"intention\",\n \"lady\",\n \"midnight\",\n \"negotiation\",\n \"obligation\",\n \"passenger\",\n \"pizza\",\n \"platform\",\n \"poet\",\n \"pollution\",\n \"recognition\",\n \"reputation\",\n \"shirt\",\n \"sir\",\n \"speaker\",\n \"stranger\",\n \"surgery\",\n \"sympathy\",\n \"tale\",\n \"throat\",\n \"trainer\",\n \"uncle\",\n \"youth\",\n \"time\",\n \"work\",\n \"film\",\n \"water\",\n \"money\",\n \"example\",\n \"while\",\n \"business\",\n \"study\",\n \"game\",\n \"life\",\n \"form\",\n \"air\",\n \"day\",\n \"place\",\n \"number\",\n \"part\",\n \"field\",\n \"fish\",\n \"back\",\n \"process\",\n \"heat\",\n \"hand\",\n \"experience\",\n \"job\",\n \"book\",\n \"end\",\n \"point\",\n \"type\",\n \"home\",\n \"economy\",\n \"value\",\n \"body\",\n \"market\",\n \"guide\",\n \"interest\",\n \"state\",\n \"radio\",\n \"course\",\n \"company\",\n \"price\",\n \"size\",\n \"card\",\n \"list\",\n \"mind\",\n \"trade\",\n \"line\",\n \"care\",\n \"group\",\n \"risk\",\n \"word\",\n \"fat\",\n \"force\",\n \"key\",\n \"light\",\n \"training\",\n \"name\",\n \"school\",\n \"top\",\n \"amount\",\n \"level\",\n \"order\",\n \"practice\",\n \"research\",\n \"sense\",\n \"service\",\n \"piece\",\n \"web\",\n \"boss\",\n \"sport\",\n \"fun\",\n \"house\",\n \"page\",\n \"term\",\n \"test\",\n \"answer\",\n \"sound\",\n \"focus\",\n \"matter\",\n \"kind\",\n \"soil\",\n \"board\",\n \"oil\",\n \"picture\",\n \"access\",\n \"garden\",\n \"range\",\n \"rate\",\n \"reason\",\n \"future\",\n \"site\",\n \"demand\",\n \"exercise\",\n \"image\",\n \"case\",\n \"cause\",\n \"coast\",\n \"action\",\n \"age\",\n \"bad\",\n \"boat\",\n \"record\",\n \"result\",\n \"section\",\n \"building\",\n \"mouse\",\n \"cash\",\n \"class\",\n \"nothing\",\n \"period\",\n \"plan\",\n \"store\",\n \"tax\",\n \"side\",\n \"subject\",\n \"space\",\n \"rule\",\n \"stock\",\n \"weather\",\n \"chance\",\n \"figure\",\n \"man\",\n \"model\",\n \"source\",\n \"beginning\",\n \"earth\",\n \"program\",\n \"chicken\",\n \"design\",\n \"feature\",\n \"head\",\n \"material\",\n \"purpose\",\n \"question\",\n \"rock\",\n \"salt\",\n \"act\",\n \"birth\",\n \"car\",\n \"dog\",\n \"object\",\n \"scale\",\n \"sun\",\n \"note\",\n \"profit\",\n \"rent\",\n \"speed\",\n \"style\",\n \"war\",\n \"bank\",\n \"craft\",\n \"half\",\n \"inside\",\n \"outside\",\n \"standard\",\n \"bus\",\n \"exchange\",\n \"eye\",\n \"fire\",\n \"position\",\n \"pressure\",\n \"stress\",\n \"advantage\",\n \"benefit\",\n \"box\",\n \"frame\",\n \"issue\",\n \"step\",\n \"cycle\",\n \"face\",\n \"item\",\n \"metal\",\n \"paint\",\n \"review\",\n \"room\",\n \"screen\",\n \"structure\",\n \"view\",\n \"account\",\n \"ball\",\n \"discipline\",\n \"medium\",\n \"share\",\n \"balance\",\n \"bit\",\n \"black\",\n \"bottom\",\n \"choice\",\n \"gift\",\n \"impact\",\n \"machine\",\n \"shape\",\n \"tool\",\n \"wind\",\n \"address\",\n \"average\",\n \"career\",\n \"culture\",\n \"morning\",\n \"pot\",\n \"sign\",\n \"table\",\n \"task\",\n \"condition\",\n \"contact\",\n \"credit\",\n \"egg\",\n \"hope\",\n \"ice\",\n \"network\",\n \"north\",\n \"square\",\n \"attempt\",\n \"date\",\n \"effect\",\n \"link\",\n \"post\",\n \"star\",\n \"voice\",\n \"capital\",\n \"challenge\",\n \"friend\",\n \"self\",\n \"shot\",\n \"brush\",\n \"couple\",\n \"debate\",\n \"exit\",\n \"front\",\n \"function\",\n \"lack\",\n \"living\",\n \"plant\",\n \"plastic\",\n \"spot\",\n \"summer\",\n \"taste\",\n \"theme\",\n \"track\",\n \"wing\",\n \"brain\",\n \"button\",\n \"click\",\n \"desire\",\n \"foot\",\n \"gas\",\n \"influence\",\n \"notice\",\n \"rain\",\n \"wall\",\n \"base\",\n \"damage\",\n \"distance\",\n \"feeling\",\n \"pair\",\n \"savings\",\n \"staff\",\n \"sugar\",\n \"target\",\n \"text\",\n \"animal\",\n \"author\",\n \"budget\",\n \"discount\",\n \"file\",\n \"ground\",\n \"lesson\",\n \"minute\",\n \"officer\",\n \"phase\",\n \"reference\",\n \"register\",\n \"sky\",\n \"stage\",\n \"stick\",\n \"title\",\n \"trouble\",\n \"bowl\",\n \"bridge\",\n \"campaign\",\n \"character\",\n \"club\",\n \"edge\",\n \"evidence\",\n \"fan\",\n \"letter\",\n \"lock\",\n \"maximum\",\n \"novel\",\n \"option\",\n \"pack\",\n \"park\",\n \"plenty\",\n \"quarter\",\n \"skin\",\n \"sort\",\n \"weight\",\n \"baby\",\n \"background\",\n \"carry\",\n \"dish\",\n \"factor\",\n \"fruit\",\n \"glass\",\n \"joint\",\n \"master\",\n \"muscle\",\n \"red\",\n \"strength\",\n \"traffic\",\n \"trip\",\n \"vegetable\",\n \"appeal\",\n \"chart\",\n \"gear\",\n \"ideal\",\n \"kitchen\",\n \"land\",\n \"log\",\n \"mother\",\n \"net\",\n \"party\",\n \"principle\",\n \"relative\",\n \"sale\",\n \"season\",\n \"signal\",\n \"spirit\",\n \"street\",\n \"tree\",\n \"wave\",\n \"belt\",\n \"bench\",\n \"commission\",\n \"copy\",\n \"drop\",\n \"minimum\",\n \"path\",\n \"progress\",\n \"project\",\n \"sea\",\n \"south\",\n \"status\",\n \"stuff\",\n \"ticket\",\n \"tour\",\n \"angle\",\n \"blue\",\n \"breakfast\",\n \"confidence\",\n \"daughter\",\n \"degree\",\n \"doctor\",\n \"dot\",\n \"dream\",\n \"duty\",\n \"essay\",\n \"father\",\n \"fee\",\n \"finance\",\n \"hour\",\n \"juice\",\n \"limit\",\n \"luck\",\n \"milk\",\n \"mouth\",\n \"peace\",\n \"pipe\",\n \"seat\",\n \"stable\",\n \"storm\",\n \"substance\",\n \"team\",\n \"trick\",\n \"afternoon\",\n \"bat\",\n \"beach\",\n \"blank\",\n \"catch\",\n \"chain\",\n \"consideration\",\n \"cream\",\n \"crew\",\n \"detail\",\n \"gold\",\n \"interview\",\n \"kid\",\n \"mark\",\n \"match\",\n \"mission\",\n \"pain\",\n \"pleasure\",\n \"score\",\n \"screw\",\n \"sex\",\n \"shop\",\n \"shower\",\n \"suit\",\n \"tone\",\n \"window\",\n \"agent\",\n \"band\",\n \"block\",\n \"bone\",\n \"calendar\",\n \"cap\",\n \"coat\",\n \"contest\",\n \"corner\",\n \"court\",\n \"cup\",\n \"district\",\n \"door\",\n \"east\",\n \"finger\",\n \"garage\",\n \"guarantee\",\n \"hole\",\n \"hook\",\n \"implement\",\n \"layer\",\n \"lecture\",\n \"lie\",\n \"manner\",\n \"meeting\",\n \"nose\",\n \"parking\",\n \"partner\",\n \"profile\",\n \"respect\",\n \"rice\",\n \"routine\",\n \"schedule\",\n \"swimming\",\n \"telephone\",\n \"tip\",\n \"winter\",\n \"airline\",\n \"bag\",\n \"battle\",\n \"bed\",\n \"bill\",\n \"bother\",\n \"cake\",\n \"code\",\n \"curve\",\n \"designer\",\n \"dimension\",\n \"dress\",\n \"ease\",\n \"emergency\",\n \"evening\",\n \"extension\",\n \"farm\",\n \"fight\",\n \"gap\",\n \"grade\",\n \"holiday\",\n \"horror\",\n \"horse\",\n \"host\",\n \"husband\",\n \"loan\",\n \"mistake\",\n \"mountain\",\n \"nail\",\n \"noise\",\n \"occasion\",\n \"package\",\n \"patient\",\n \"pause\",\n \"phrase\",\n \"proof\",\n \"race\",\n \"relief\",\n \"sand\",\n \"sentence\",\n \"shoulder\",\n \"smoke\",\n \"stomach\",\n \"string\",\n \"tourist\",\n \"towel\",\n \"vacation\",\n \"west\",\n \"wheel\",\n \"wine\",\n \"arm\",\n \"aside\",\n \"associate\",\n \"bet\",\n \"blow\",\n \"border\",\n \"branch\",\n \"breast\",\n \"brother\",\n \"buddy\",\n \"bunch\",\n \"chip\",\n \"coach\",\n \"cross\",\n \"document\",\n \"draft\",\n \"dust\",\n \"expert\",\n \"floor\",\n \"god\",\n \"golf\",\n \"habit\",\n \"iron\",\n \"judge\",\n \"knife\",\n \"landscape\",\n \"league\",\n \"mail\",\n \"mess\",\n \"native\",\n \"opening\",\n \"parent\",\n \"pattern\",\n \"pin\",\n \"pool\",\n \"pound\",\n \"request\",\n \"salary\",\n \"shame\",\n \"shelter\",\n \"shoe\",\n \"silver\",\n \"tackle\",\n \"tank\",\n \"trust\",\n \"assist\",\n \"bake\",\n \"bar\",\n \"bell\",\n \"bike\",\n \"blame\",\n \"boy\",\n \"brick\",\n \"chair\",\n \"closet\",\n \"clue\",\n \"collar\",\n \"comment\",\n \"conference\",\n \"devil\",\n \"diet\",\n \"fear\",\n \"fuel\",\n \"glove\",\n \"jacket\",\n \"lunch\",\n \"monitor\",\n \"mortgage\",\n \"nurse\",\n \"pace\",\n \"panic\",\n \"peak\",\n \"plane\",\n \"reward\",\n \"row\",\n \"sandwich\",\n \"shock\",\n \"spite\",\n \"spray\",\n \"surprise\",\n \"till\",\n \"transition\",\n \"weekend\",\n \"welcome\",\n \"yard\",\n \"alarm\",\n \"bend\",\n \"bicycle\",\n \"bite\",\n \"blind\",\n \"bottle\",\n \"cable\",\n \"candle\",\n \"clerk\",\n \"cloud\",\n \"concert\",\n \"counter\",\n \"flower\",\n \"grandfather\",\n \"harm\",\n \"knee\",\n \"lawyer\",\n \"leather\",\n \"load\",\n \"mirror\",\n \"neck\",\n \"pension\",\n \"plate\",\n \"purple\",\n \"ruin\",\n \"ship\",\n \"skirt\",\n \"slice\",\n \"snow\",\n \"specialist\",\n \"stroke\",\n \"switch\",\n \"trash\",\n \"tune\",\n \"zone\",\n \"anger\",\n \"award\",\n \"bid\",\n \"bitter\",\n \"boot\",\n \"bug\",\n \"camp\",\n \"candy\",\n \"carpet\",\n \"cat\",\n \"champion\",\n \"channel\",\n \"clock\",\n \"comfort\",\n \"cow\",\n \"crack\",\n \"engineer\",\n \"entrance\",\n \"fault\",\n \"grass\",\n \"guy\",\n \"hell\",\n \"highlight\",\n \"incident\",\n \"island\",\n \"joke\",\n \"jury\",\n \"leg\",\n \"lip\",\n \"mate\",\n \"motor\",\n \"nerve\",\n \"passage\",\n \"pen\",\n \"pride\",\n \"priest\",\n \"prize\",\n \"promise\",\n \"resident\",\n \"resort\",\n \"ring\",\n \"roof\",\n \"rope\",\n \"sail\",\n \"scheme\",\n \"script\",\n \"sock\",\n \"station\",\n \"toe\",\n \"tower\",\n \"truck\",\n \"witness\",\n \"a\",\n \"you\",\n \"it\",\n \"can\",\n \"will\",\n \"if\",\n \"one\",\n \"many\",\n \"most\",\n \"other\",\n \"use\",\n \"make\",\n \"good\",\n \"look\",\n \"help\",\n \"go\",\n \"great\",\n \"being\",\n \"few\",\n \"might\",\n \"still\",\n \"public\",\n \"read\",\n \"keep\",\n \"start\",\n \"give\",\n \"human\",\n \"local\",\n \"general\",\n \"she\",\n \"specific\",\n \"long\",\n \"play\",\n \"feel\",\n \"high\",\n \"tonight\",\n \"put\",\n \"common\",\n \"set\",\n \"change\",\n \"simple\",\n \"past\",\n \"big\",\n \"possible\",\n \"particular\",\n \"today\",\n \"major\",\n \"personal\",\n \"current\",\n \"national\",\n \"cut\",\n \"natural\",\n \"physical\",\n \"show\",\n \"try\",\n \"check\",\n \"second\",\n \"call\",\n \"move\",\n \"pay\",\n \"let\",\n \"increase\",\n \"single\",\n \"individual\",\n \"turn\",\n \"ask\",\n \"buy\",\n \"guard\",\n \"hold\",\n \"main\",\n \"offer\",\n \"potential\",\n \"professional\",\n \"international\",\n \"travel\",\n \"cook\",\n \"alternative\",\n \"following\",\n \"special\",\n \"working\",\n \"whole\",\n \"dance\",\n \"excuse\",\n \"cold\",\n \"commercial\",\n \"low\",\n \"purchase\",\n \"deal\",\n \"primary\",\n \"worth\",\n \"fall\",\n \"necessary\",\n \"positive\",\n \"produce\",\n \"search\",\n \"present\",\n \"spend\",\n \"talk\",\n \"creative\",\n \"tell\",\n \"cost\",\n \"drive\",\n \"green\",\n \"support\",\n \"glad\",\n \"remove\",\n \"return\",\n \"run\",\n \"complex\",\n \"due\",\n \"effective\",\n \"middle\",\n \"regular\",\n \"reserve\",\n \"independent\",\n \"leave\",\n \"original\",\n \"reach\",\n \"rest\",\n \"serve\",\n \"watch\",\n \"beautiful\",\n \"charge\",\n \"active\",\n \"break\",\n \"negative\",\n \"safe\",\n \"stay\",\n \"visit\",\n \"visual\",\n \"affect\",\n \"cover\",\n \"report\",\n \"rise\",\n \"walk\",\n \"white\",\n \"beyond\",\n \"junior\",\n \"pick\",\n \"unique\",\n \"anything\",\n \"classic\",\n \"final\",\n \"lift\",\n \"mix\",\n \"private\",\n \"stop\",\n \"teach\",\n \"western\",\n \"concern\",\n \"familiar\",\n \"fly\",\n \"official\",\n \"broad\",\n \"comfortable\",\n \"gain\",\n \"maybe\",\n \"rich\",\n \"save\",\n \"stand\",\n \"young\",\n \"fail\",\n \"heavy\",\n \"hello\",\n \"lead\",\n \"listen\",\n \"valuable\",\n \"worry\",\n \"handle\",\n \"leading\",\n \"meet\",\n \"release\",\n \"sell\",\n \"finish\",\n \"normal\",\n \"press\",\n \"ride\",\n \"secret\",\n \"spread\",\n \"spring\",\n \"tough\",\n \"wait\",\n \"brown\",\n \"deep\",\n \"display\",\n \"flow\",\n \"hit\",\n \"objective\",\n \"shoot\",\n \"touch\",\n \"cancel\",\n \"chemical\",\n \"cry\",\n \"dump\",\n \"extreme\",\n \"push\",\n \"conflict\",\n \"eat\",\n \"fill\",\n \"formal\",\n \"jump\",\n \"kick\",\n \"opposite\",\n \"pass\",\n \"pitch\",\n \"remote\",\n \"total\",\n \"treat\",\n \"vast\",\n \"abuse\",\n \"beat\",\n \"burn\",\n \"deposit\",\n \"print\",\n \"raise\",\n \"sleep\",\n \"somewhere\",\n \"advance\",\n \"anywhere\",\n \"consist\",\n \"dark\",\n \"double\",\n \"draw\",\n \"equal\",\n \"fix\",\n \"hire\",\n \"internal\",\n \"join\",\n \"kill\",\n \"sensitive\",\n \"tap\",\n \"win\",\n \"attack\",\n \"claim\",\n \"constant\",\n \"drag\",\n \"drink\",\n \"guess\",\n \"minor\",\n \"pull\",\n \"raw\",\n \"soft\",\n \"solid\",\n \"wear\",\n \"weird\",\n \"wonder\",\n \"annual\",\n \"count\",\n \"dead\",\n \"doubt\",\n \"feed\",\n \"forever\",\n \"impress\",\n \"nobody\",\n \"repeat\",\n \"round\",\n \"sing\",\n \"slide\",\n \"strip\",\n \"whereas\",\n \"wish\",\n \"combine\",\n \"command\",\n \"dig\",\n \"divide\",\n \"equivalent\",\n \"hang\",\n \"hunt\",\n \"initial\",\n \"march\",\n \"mention\",\n \"smell\",\n \"spiritual\",\n \"survey\",\n \"tie\",\n \"adult\",\n \"brief\",\n \"crazy\",\n \"escape\",\n \"gather\",\n \"hate\",\n \"prior\",\n \"repair\",\n \"rough\",\n \"sad\",\n \"scratch\",\n \"sick\",\n \"strike\",\n \"employ\",\n \"external\",\n \"hurt\",\n \"illegal\",\n \"laugh\",\n \"lay\",\n \"mobile\",\n \"nasty\",\n \"ordinary\",\n \"respond\",\n \"royal\",\n \"senior\",\n \"split\",\n \"strain\",\n \"struggle\",\n \"swim\",\n \"train\",\n \"upper\",\n \"wash\",\n \"yellow\",\n \"convert\",\n \"crash\",\n \"dependent\",\n \"fold\",\n \"funny\",\n \"grab\",\n \"hide\",\n \"miss\",\n \"permit\",\n \"quote\",\n \"recover\",\n \"resolve\",\n \"roll\",\n \"sink\",\n \"slip\",\n \"spare\",\n \"suspect\",\n \"sweet\",\n \"swing\",\n \"twist\",\n \"upstairs\",\n \"usual\",\n \"abroad\",\n \"brave\",\n \"calm\",\n \"concentrate\",\n \"estimate\",\n \"grand\",\n \"male\",\n \"mine\",\n \"prompt\",\n \"quiet\",\n \"refuse\",\n \"regret\",\n \"reveal\",\n \"rush\",\n \"shake\",\n \"shift\",\n \"shine\",\n \"steal\",\n \"suck\",\n \"surround\",\n \"anybody\",\n \"bear\",\n \"brilliant\",\n \"dare\",\n \"dear\",\n \"delay\",\n \"drunk\",\n \"female\",\n \"hurry\",\n \"inevitable\",\n \"invite\",\n \"kiss\",\n \"neat\",\n \"pop\",\n \"punch\",\n \"quit\",\n \"reply\",\n \"representative\",\n \"resist\",\n \"rip\",\n \"rub\",\n \"silly\",\n \"smile\",\n \"spell\",\n \"stretch\",\n \"stupid\",\n \"tear\",\n \"temporary\",\n \"tomorrow\",\n \"wake\",\n \"wrap\",\n \"yesterday\",\n];\n\nconst adj = [\n \"abandoned\",\n \"able\",\n \"absolute\",\n \"adorable\",\n \"adventurous\",\n \"academic\",\n \"acceptable\",\n \"acclaimed\",\n \"accomplished\",\n \"accurate\",\n \"aching\",\n \"acidic\",\n \"acrobatic\",\n \"active\",\n \"actual\",\n \"adept\",\n \"admirable\",\n \"admired\",\n \"adolescent\",\n \"adorable\",\n \"adored\",\n \"advanced\",\n \"afraid\",\n \"affectionate\",\n \"aged\",\n \"aggravating\",\n \"aggressive\",\n \"agile\",\n \"agitated\",\n \"agonizing\",\n \"agreeable\",\n \"ajar\",\n \"alarmed\",\n \"alarming\",\n \"alert\",\n \"alienated\",\n \"alive\",\n \"all\",\n \"altruistic\",\n \"amazing\",\n \"ambitious\",\n \"ample\",\n \"amused\",\n \"amusing\",\n \"anchored\",\n \"ancient\",\n \"angelic\",\n \"angry\",\n \"anguished\",\n \"animated\",\n \"annual\",\n \"another\",\n \"antique\",\n \"anxious\",\n \"any\",\n \"apprehensive\",\n \"appropriate\",\n \"apt\",\n \"arctic\",\n \"arid\",\n \"aromatic\",\n \"artistic\",\n \"ashamed\",\n \"assured\",\n \"astonishing\",\n \"athletic\",\n \"attached\",\n \"attentive\",\n \"attractive\",\n \"austere\",\n \"authentic\",\n \"authorized\",\n \"automatic\",\n \"avaricious\",\n \"average\",\n \"aware\",\n \"awesome\",\n \"awful\",\n \"awkward\",\n \"babyish\",\n \"bad\",\n \"back\",\n \"baggy\",\n \"bare\",\n \"barren\",\n \"basic\",\n \"beautiful\",\n \"belated\",\n \"beloved\",\n \"beneficial\",\n \"better\",\n \"best\",\n \"bewitched\",\n \"big\",\n \"big-hearted\",\n \"biodegradable\",\n \"bite-sized\",\n \"bitter\",\n \"black\",\n \"black-and-white\",\n \"bland\",\n \"blank\",\n \"blaring\",\n \"bleak\",\n \"blind\",\n \"blissful\",\n \"blond\",\n \"blue\",\n \"blushing\",\n \"bogus\",\n \"boiling\",\n \"bold\",\n \"bony\",\n \"boring\",\n \"bossy\",\n \"both\",\n \"bouncy\",\n \"bountiful\",\n \"bowed\",\n \"brave\",\n \"breakable\",\n \"brief\",\n \"bright\",\n \"brilliant\",\n \"brisk\",\n \"broken\",\n \"bronze\",\n \"brown\",\n \"bruised\",\n \"bubbly\",\n \"bulky\",\n \"bumpy\",\n \"buoyant\",\n \"burdensome\",\n \"burly\",\n \"bustling\",\n \"busy\",\n \"buttery\",\n \"buzzing\",\n \"calculating\",\n \"calm\",\n \"candid\",\n \"canine\",\n \"capital\",\n \"carefree\",\n \"careful\",\n \"careless\",\n \"caring\",\n \"cautious\",\n \"cavernous\",\n \"celebrated\",\n \"charming\",\n \"cheap\",\n \"cheerful\",\n \"cheery\",\n \"chief\",\n \"chilly\",\n \"chubby\",\n \"circular\",\n \"classic\",\n \"clean\",\n \"clear\",\n \"clear-cut\",\n \"clever\",\n \"close\",\n \"closed\",\n \"cloudy\",\n \"clueless\",\n \"clumsy\",\n \"cluttered\",\n \"coarse\",\n \"cold\",\n \"colorful\",\n \"colorless\",\n \"colossal\",\n \"comfortable\",\n \"common\",\n \"compassionate\",\n \"competent\",\n \"complete\",\n \"complex\",\n \"complicated\",\n \"composed\",\n \"concerned\",\n \"concrete\",\n \"confused\",\n \"conscious\",\n \"considerate\",\n \"constant\",\n \"content\",\n \"conventional\",\n \"cooked\",\n \"cool\",\n \"cooperative\",\n \"coordinated\",\n \"corny\",\n \"corrupt\",\n \"costly\",\n \"courageous\",\n \"courteous\",\n \"crafty\",\n \"crazy\",\n \"creamy\",\n \"creative\",\n \"creepy\",\n \"criminal\",\n \"crisp\",\n \"critical\",\n \"crooked\",\n \"crowded\",\n \"cruel\",\n \"crushing\",\n \"cuddly\",\n \"cultivated\",\n \"cultured\",\n \"cumbersome\",\n \"curly\",\n \"curvy\",\n \"cute\",\n \"cylindrical\",\n \"damaged\",\n \"damp\",\n \"dangerous\",\n \"dapper\",\n \"daring\",\n \"darling\",\n \"dark\",\n \"dazzling\",\n \"dead\",\n \"deadly\",\n \"deafening\",\n \"dear\",\n \"dearest\",\n \"decent\",\n \"decimal\",\n \"decisive\",\n \"deep\",\n \"defenseless\",\n \"defensive\",\n \"defiant\",\n \"deficient\",\n \"definite\",\n \"definitive\",\n \"delayed\",\n \"delectable\",\n \"delicious\",\n \"delightful\",\n \"delirious\",\n \"demanding\",\n \"dense\",\n \"dental\",\n \"dependable\",\n \"dependent\",\n \"descriptive\",\n \"deserted\",\n \"detailed\",\n \"determined\",\n \"devoted\",\n \"different\",\n \"difficult\",\n \"digital\",\n \"diligent\",\n \"dim\",\n \"dimpled\",\n \"dimwitted\",\n \"direct\",\n \"disastrous\",\n \"discrete\",\n \"disfigured\",\n \"disgusting\",\n \"disloyal\",\n \"dismal\",\n \"distant\",\n \"downright\",\n \"dreary\",\n \"dirty\",\n \"disguised\",\n \"dishonest\",\n \"dismal\",\n \"distant\",\n \"distinct\",\n \"distorted\",\n \"dizzy\",\n \"dopey\",\n \"doting\",\n \"double\",\n \"downright\",\n \"drab\",\n \"drafty\",\n \"dramatic\",\n \"dreary\",\n \"droopy\",\n \"dry\",\n \"dual\",\n \"dull\",\n \"dutiful\",\n \"each\",\n \"eager\",\n \"earnest\",\n \"early\",\n \"easy\",\n \"easy-going\",\n \"ecstatic\",\n \"edible\",\n \"educated\",\n \"elaborate\",\n \"elastic\",\n \"elated\",\n \"elderly\",\n \"electric\",\n \"elegant\",\n \"elementary\",\n \"elliptical\",\n \"embarrassed\",\n \"embellished\",\n \"eminent\",\n \"emotional\",\n \"empty\",\n \"enchanted\",\n \"enchanting\",\n \"energetic\",\n \"enlightened\",\n \"enormous\",\n \"enraged\",\n \"entire\",\n \"envious\",\n \"equal\",\n \"equatorial\",\n \"essential\",\n \"esteemed\",\n \"ethical\",\n \"euphoric\",\n \"even\",\n \"evergreen\",\n \"everlasting\",\n \"every\",\n \"evil\",\n \"exalted\",\n \"excellent\",\n \"exemplary\",\n \"exhausted\",\n \"excitable\",\n \"excited\",\n \"exciting\",\n \"exotic\",\n \"expensive\",\n \"experienced\",\n \"expert\",\n \"extraneous\",\n \"extroverted\",\n \"extra-large\",\n \"extra-small\",\n \"fabulous\",\n \"failing\",\n \"faint\",\n \"fair\",\n \"faithful\",\n \"fake\",\n \"false\",\n \"familiar\",\n \"famous\",\n \"fancy\",\n \"fantastic\",\n \"far\",\n \"faraway\",\n \"far-flung\",\n \"far-off\",\n \"fast\",\n \"fat\",\n \"fatal\",\n \"fatherly\",\n \"favorable\",\n \"favorite\",\n \"fearful\",\n \"fearless\",\n \"feisty\",\n \"feline\",\n \"female\",\n \"feminine\",\n \"few\",\n \"fickle\",\n \"filthy\",\n \"fine\",\n \"finished\",\n \"firm\",\n \"first\",\n \"firsthand\",\n \"fitting\",\n \"fixed\",\n \"flaky\",\n \"flamboyant\",\n \"flashy\",\n \"flat\",\n \"flawed\",\n \"flawless\",\n \"flickering\",\n \"flimsy\",\n \"flippant\",\n \"flowery\",\n \"fluffy\",\n \"fluid\",\n \"flustered\",\n \"focused\",\n \"fond\",\n \"foolhardy\",\n \"foolish\",\n \"forceful\",\n \"forked\",\n \"formal\",\n \"forsaken\",\n \"forthright\",\n \"fortunate\",\n \"fragrant\",\n \"frail\",\n \"frank\",\n \"frayed\",\n \"free\",\n \"French\",\n \"fresh\",\n \"frequent\",\n \"friendly\",\n \"frightened\",\n \"frightening\",\n \"frigid\",\n \"frilly\",\n \"frizzy\",\n \"frivolous\",\n \"front\",\n \"frosty\",\n \"frozen\",\n \"frugal\",\n \"fruitful\",\n \"full\",\n \"fumbling\",\n \"functional\",\n \"funny\",\n \"fussy\",\n \"fuzzy\",\n \"gargantuan\",\n \"gaseous\",\n \"general\",\n \"generous\",\n \"gentle\",\n \"genuine\",\n \"giant\",\n \"giddy\",\n \"gigantic\",\n \"gifted\",\n \"giving\",\n \"glamorous\",\n \"glaring\",\n \"glass\",\n \"gleaming\",\n \"gleeful\",\n \"glistening\",\n \"glittering\",\n \"gloomy\",\n \"glorious\",\n \"glossy\",\n \"glum\",\n \"golden\",\n \"good\",\n \"good-natured\",\n \"gorgeous\",\n \"graceful\",\n \"gracious\",\n \"grand\",\n \"grandiose\",\n \"granular\",\n \"grateful\",\n \"grave\",\n \"gray\",\n \"great\",\n \"greedy\",\n \"green\",\n \"gregarious\",\n \"grim\",\n \"grimy\",\n \"gripping\",\n \"grizzled\",\n \"gross\",\n \"grotesque\",\n \"grouchy\",\n \"grounded\",\n \"growing\",\n \"growling\",\n \"grown\",\n \"grubby\",\n \"gruesome\",\n \"grumpy\",\n \"guilty\",\n \"gullible\",\n \"gummy\",\n \"hairy\",\n \"half\",\n \"handmade\",\n \"handsome\",\n \"handy\",\n \"happy\",\n \"happy-go-lucky\",\n \"hard\",\n \"hard-to-find\",\n \"harmful\",\n \"harmless\",\n \"harmonious\",\n \"harsh\",\n \"hasty\",\n \"hateful\",\n \"haunting\",\n \"healthy\",\n \"heartfelt\",\n \"hearty\",\n \"heavenly\",\n \"heavy\",\n \"hefty\",\n \"helpful\",\n \"helpless\",\n \"hidden\",\n \"hideous\",\n \"high\",\n \"high-level\",\n \"hilarious\",\n \"hoarse\",\n \"hollow\",\n \"homely\",\n \"honest\",\n \"honorable\",\n \"honored\",\n \"hopeful\",\n \"horrible\",\n \"hospitable\",\n \"hot\",\n \"huge\",\n \"humble\",\n \"humiliating\",\n \"humming\",\n \"humongous\",\n \"hungry\",\n \"hurtful\",\n \"husky\",\n \"icky\",\n \"icy\",\n \"ideal\",\n \"idealistic\",\n \"identical\",\n \"idle\",\n \"idiotic\",\n \"idolized\",\n \"ignorant\",\n \"ill\",\n \"illegal\",\n \"ill-fated\",\n \"ill-informed\",\n \"illiterate\",\n \"illustrious\",\n \"imaginary\",\n \"imaginative\",\n \"immaculate\",\n \"immaterial\",\n \"immediate\",\n \"immense\",\n \"impassioned\",\n \"impeccable\",\n \"impartial\",\n \"imperfect\",\n \"imperturbable\",\n \"impish\",\n \"impolite\",\n \"important\",\n \"impossible\",\n \"impractical\",\n \"impressionable\",\n \"impressive\",\n \"improbable\",\n \"impure\",\n \"inborn\",\n \"incomparable\",\n \"incompatible\",\n \"incomplete\",\n \"inconsequential\",\n \"incredible\",\n \"indelible\",\n \"inexperienced\",\n \"indolent\",\n \"infamous\",\n \"infantile\",\n \"infatuated\",\n \"inferior\",\n \"infinite\",\n \"informal\",\n \"innocent\",\n \"insecure\",\n \"insidious\",\n \"insignificant\",\n \"insistent\",\n \"instructive\",\n \"insubstantial\",\n \"intelligent\",\n \"intent\",\n \"intentional\",\n \"interesting\",\n \"internal\",\n \"international\",\n \"intrepid\",\n \"ironclad\",\n \"irresponsible\",\n \"irritating\",\n \"itchy\",\n \"jaded\",\n \"jagged\",\n \"jam-packed\",\n \"jaunty\",\n \"jealous\",\n \"jittery\",\n \"joint\",\n \"jolly\",\n \"jovial\",\n \"joyful\",\n \"joyous\",\n \"jubilant\",\n \"judicious\",\n \"juicy\",\n \"jumbo\",\n \"junior\",\n \"jumpy\",\n \"juvenile\",\n \"kaleidoscopic\",\n \"keen\",\n \"key\",\n \"kind\",\n \"kindhearted\",\n \"kindly\",\n \"klutzy\",\n \"knobby\",\n \"knotty\",\n \"knowledgeable\",\n \"knowing\",\n \"known\",\n \"kooky\",\n \"kosher\",\n \"lame\",\n \"lanky\",\n \"large\",\n \"last\",\n \"lasting\",\n \"late\",\n \"lavish\",\n \"lawful\",\n \"lazy\",\n \"leading\",\n \"lean\",\n \"leafy\",\n \"left\",\n \"legal\",\n \"legitimate\",\n \"light\",\n \"lighthearted\",\n \"likable\",\n \"likely\",\n \"limited\",\n \"limp\",\n \"limping\",\n \"linear\",\n \"lined\",\n \"liquid\",\n \"little\",\n \"live\",\n \"lively\",\n \"livid\",\n \"loathsome\",\n \"lone\",\n \"lonely\",\n \"long\",\n \"long-term\",\n \"loose\",\n \"lopsided\",\n \"lost\",\n \"loud\",\n \"lovable\",\n \"lovely\",\n \"loving\",\n \"low\",\n \"loyal\",\n \"lucky\",\n \"lumbering\",\n \"luminous\",\n \"lumpy\",\n \"lustrous\",\n \"luxurious\",\n \"mad\",\n \"made-up\",\n \"magnificent\",\n \"majestic\",\n \"major\",\n \"male\",\n \"mammoth\",\n \"married\",\n \"marvelous\",\n \"masculine\",\n \"massive\",\n \"mature\",\n \"meager\",\n \"mealy\",\n \"mean\",\n \"measly\",\n \"meaty\",\n \"medical\",\n \"mediocre\",\n \"medium\",\n \"meek\",\n \"mellow\",\n \"melodic\",\n \"memorable\",\n \"menacing\",\n \"merry\",\n \"messy\",\n \"metallic\",\n \"mild\",\n \"milky\",\n \"mindless\",\n \"miniature\",\n \"minor\",\n \"minty\",\n \"miserable\",\n \"miserly\",\n \"misguided\",\n \"misty\",\n \"mixed\",\n \"modern\",\n \"modest\",\n \"moist\",\n \"monstrous\",\n \"monthly\",\n \"monumental\",\n \"moral\",\n \"mortified\",\n \"motherly\",\n \"motionless\",\n \"mountainous\",\n \"muddy\",\n \"muffled\",\n \"multicolored\",\n \"mundane\",\n \"murky\",\n \"mushy\",\n \"musty\",\n \"muted\",\n \"mysterious\",\n \"naive\",\n \"narrow\",\n \"nasty\",\n \"natural\",\n \"naughty\",\n \"nautical\",\n \"near\",\n \"neat\",\n \"necessary\",\n \"needy\",\n \"negative\",\n \"neglected\",\n \"negligible\",\n \"neighboring\",\n \"nervous\",\n \"new\",\n \"next\",\n \"nice\",\n \"nifty\",\n \"nimble\",\n \"nippy\",\n \"nocturnal\",\n \"noisy\",\n \"nonstop\",\n \"normal\",\n \"notable\",\n \"noted\",\n \"noteworthy\",\n \"novel\",\n \"noxious\",\n \"numb\",\n \"nutritious\",\n \"nutty\",\n \"obedient\",\n \"obese\",\n \"oblong\",\n \"oily\",\n \"oblong\",\n \"obvious\",\n \"occasional\",\n \"odd\",\n \"oddball\",\n \"offbeat\",\n \"offensive\",\n \"official\",\n \"old\",\n \"old-fashioned\",\n \"only\",\n \"open\",\n \"optimal\",\n \"optimistic\",\n \"opulent\",\n \"orange\",\n \"orderly\",\n \"organic\",\n \"ornate\",\n \"ornery\",\n \"ordinary\",\n \"original\",\n \"other\",\n \"our\",\n \"outlying\",\n \"outgoing\",\n \"outlandish\",\n \"outrageous\",\n \"outstanding\",\n \"oval\",\n \"overcooked\",\n \"overdue\",\n \"overjoyed\",\n \"overlooked\",\n \"palatable\",\n \"pale\",\n \"paltry\",\n \"parallel\",\n \"parched\",\n \"partial\",\n \"passionate\",\n \"past\",\n \"pastel\",\n \"peaceful\",\n \"peppery\",\n \"perfect\",\n \"perfumed\",\n \"periodic\",\n \"perky\",\n \"personal\",\n \"pertinent\",\n \"pesky\",\n \"pessimistic\",\n \"petty\",\n \"phony\",\n \"physical\",\n \"piercing\",\n \"pink\",\n \"pitiful\",\n \"plain\",\n \"plaintive\",\n \"plastic\",\n \"playful\",\n \"pleasant\",\n \"pleased\",\n \"pleasing\",\n \"plump\",\n \"plush\",\n \"polished\",\n \"polite\",\n \"political\",\n \"pointed\",\n \"pointless\",\n \"poised\",\n \"poor\",\n \"popular\",\n \"portly\",\n \"posh\",\n \"positive\",\n \"possible\",\n \"potable\",\n \"powerful\",\n \"powerless\",\n \"practical\",\n \"precious\",\n \"present\",\n \"prestigious\",\n \"pretty\",\n \"precious\",\n \"previous\",\n \"pricey\",\n \"prickly\",\n \"primary\",\n \"prime\",\n \"pristine\",\n \"private\",\n \"prize\",\n \"probable\",\n \"productive\",\n \"profitable\",\n \"profuse\",\n \"proper\",\n \"proud\",\n \"prudent\",\n \"punctual\",\n \"pungent\",\n \"puny\",\n \"pure\",\n \"purple\",\n \"pushy\",\n \"putrid\",\n \"puzzled\",\n \"puzzling\",\n \"quaint\",\n \"qualified\",\n \"quarrelsome\",\n \"quarterly\",\n \"queasy\",\n \"querulous\",\n \"questionable\",\n \"quick\",\n \"quick-witted\",\n \"quiet\",\n \"quintessential\",\n \"quirky\",\n \"quixotic\",\n \"quizzical\",\n \"radiant\",\n \"ragged\",\n \"rapid\",\n \"rare\",\n \"rash\",\n \"raw\",\n \"recent\",\n \"reckless\",\n \"rectangular\",\n \"ready\",\n \"real\",\n \"realistic\",\n \"reasonable\",\n \"red\",\n \"reflecting\",\n \"regal\",\n \"regular\",\n \"reliable\",\n \"relieved\",\n \"remarkable\",\n \"remorseful\",\n \"remote\",\n \"repentant\",\n \"required\",\n \"respectful\",\n \"responsible\",\n \"repulsive\",\n \"revolving\",\n \"rewarding\",\n \"rich\",\n \"rigid\",\n \"right\",\n \"ringed\",\n \"ripe\",\n \"roasted\",\n \"robust\",\n \"rosy\",\n \"rotating\",\n \"rotten\",\n \"rough\",\n \"round\",\n \"rowdy\",\n \"royal\",\n \"rubbery\",\n \"rundown\",\n \"ruddy\",\n \"rude\",\n \"runny\",\n \"rural\",\n \"rusty\",\n \"sad\",\n \"safe\",\n \"salty\",\n \"same\",\n \"sandy\",\n \"sane\",\n \"sarcastic\",\n \"sardonic\",\n \"satisfied\",\n \"scaly\",\n \"scarce\",\n \"scared\",\n \"scary\",\n \"scented\",\n \"scholarly\",\n \"scientific\",\n \"scornful\",\n \"scratchy\",\n \"scrawny\",\n \"second\",\n \"secondary\",\n \"second-hand\",\n \"secret\",\n \"self-assured\",\n \"self-reliant\",\n \"selfish\",\n \"sentimental\",\n \"separate\",\n \"serene\",\n \"serious\",\n \"serpentine\",\n \"several\",\n \"severe\",\n \"shabby\",\n \"shadowy\",\n \"shady\",\n \"shallow\",\n \"shameful\",\n \"shameless\",\n \"sharp\",\n \"shimmering\",\n \"shiny\",\n \"shocked\",\n \"shocking\",\n \"shoddy\",\n \"short\",\n \"short-term\",\n \"showy\",\n \"shrill\",\n \"shy\",\n \"sick\",\n \"silent\",\n \"silky\",\n \"silly\",\n \"silver\",\n \"similar\",\n \"simple\",\n \"simplistic\",\n \"sinful\",\n \"single\",\n \"sizzling\",\n \"skeletal\",\n \"skinny\",\n \"sleepy\",\n \"slight\",\n \"slim\",\n \"slimy\",\n \"slippery\",\n \"slow\",\n \"slushy\",\n \"small\",\n \"smart\",\n \"smoggy\",\n \"smooth\",\n \"smug\",\n \"snappy\",\n \"snarling\",\n \"sneaky\",\n \"sniveling\",\n \"snoopy\",\n \"sociable\",\n \"soft\",\n \"soggy\",\n \"solid\",\n \"somber\",\n \"some\",\n \"spherical\",\n \"sophisticated\",\n \"sore\",\n \"sorrowful\",\n \"soulful\",\n \"soupy\",\n \"sour\",\n \"Spanish\",\n \"sparkling\",\n \"sparse\",\n \"specific\",\n \"spectacular\",\n \"speedy\",\n \"spicy\",\n \"spiffy\",\n \"spirited\",\n \"spiteful\",\n \"splendid\",\n \"spotless\",\n \"spotted\",\n \"spry\",\n \"square\",\n \"squeaky\",\n \"squiggly\",\n \"stable\",\n \"staid\",\n \"stained\",\n \"stale\",\n \"standard\",\n \"starchy\",\n \"stark\",\n \"starry\",\n \"steep\",\n \"sticky\",\n \"stiff\",\n \"stimulating\",\n \"stingy\",\n \"stormy\",\n \"straight\",\n \"strange\",\n \"steel\",\n \"strict\",\n \"strident\",\n \"striking\",\n \"striped\",\n \"strong\",\n \"studious\",\n \"stunning\",\n \"stupendous\",\n \"stupid\",\n \"sturdy\",\n \"stylish\",\n \"subdued\",\n \"submissive\",\n \"substantial\",\n \"subtle\",\n \"suburban\",\n \"sudden\",\n \"sugary\",\n \"sunny\",\n \"super\",\n \"superb\",\n \"superficial\",\n \"superior\",\n \"supportive\",\n \"sure-footed\",\n \"surprised\",\n \"suspicious\",\n \"svelte\",\n \"sweaty\",\n \"sweet\",\n \"sweltering\",\n \"swift\",\n \"sympathetic\",\n \"tall\",\n \"talkative\",\n \"tame\",\n \"tan\",\n \"tangible\",\n \"tart\",\n \"tasty\",\n \"tattered\",\n \"taut\",\n \"tedious\",\n \"teeming\",\n \"tempting\",\n \"tender\",\n \"tense\",\n \"tepid\",\n \"terrible\",\n \"terrific\",\n \"testy\",\n \"thankful\",\n \"that\",\n \"these\",\n \"thick\",\n \"thin\",\n \"third\",\n \"thirsty\",\n \"this\",\n \"thorough\",\n \"thorny\",\n \"those\",\n \"thoughtful\",\n \"threadbare\",\n \"thrifty\",\n \"thunderous\",\n \"tidy\",\n \"tight\",\n \"timely\",\n \"tinted\",\n \"tiny\",\n \"tired\",\n \"torn\",\n \"total\",\n \"tough\",\n \"traumatic\",\n \"treasured\",\n \"tremendous\",\n \"tragic\",\n \"trained\",\n \"tremendous\",\n \"triangular\",\n \"tricky\",\n \"trifling\",\n \"trim\",\n \"trivial\",\n \"troubled\",\n \"true\",\n \"trusting\",\n \"trustworthy\",\n \"trusty\",\n \"truthful\",\n \"tubby\",\n \"turbulent\",\n \"twin\",\n \"ugly\",\n \"ultimate\",\n \"unacceptable\",\n \"unaware\",\n \"uncomfortable\",\n \"uncommon\",\n \"unconscious\",\n \"understated\",\n \"unequaled\",\n \"uneven\",\n \"unfinished\",\n \"unfit\",\n \"unfolded\",\n \"unfortunate\",\n \"unhappy\",\n \"unhealthy\",\n \"uniform\",\n \"unimportant\",\n \"unique\",\n \"united\",\n \"unkempt\",\n \"unknown\",\n \"unlawful\",\n \"unlined\",\n \"unlucky\",\n \"unnatural\",\n \"unpleasant\",\n \"unrealistic\",\n \"unripe\",\n \"unruly\",\n \"unselfish\",\n \"unsightly\",\n \"unsteady\",\n \"unsung\",\n \"untidy\",\n \"untimely\",\n \"untried\",\n \"untrue\",\n \"unused\",\n \"unusual\",\n \"unwelcome\",\n \"unwieldy\",\n \"unwilling\",\n \"unwitting\",\n \"unwritten\",\n \"upbeat\",\n \"upright\",\n \"upset\",\n \"urban\",\n \"usable\",\n \"used\",\n \"useful\",\n \"useless\",\n \"utilized\",\n \"utter\",\n \"vacant\",\n \"vague\",\n \"vain\",\n \"valid\",\n \"valuable\",\n \"vapid\",\n \"variable\",\n \"vast\",\n \"velvety\",\n \"venerated\",\n \"vengeful\",\n \"verifiable\",\n \"vibrant\",\n \"vicious\",\n \"victorious\",\n \"vigilant\",\n \"vigorous\",\n \"villainous\",\n \"violet\",\n \"violent\",\n \"virtual\",\n \"virtuous\",\n \"visible\",\n \"vital\",\n \"vivacious\",\n \"vivid\",\n \"voluminous\",\n \"wan\",\n \"warlike\",\n \"warm\",\n \"warmhearted\",\n \"warped\",\n \"wary\",\n \"wasteful\",\n \"watchful\",\n \"waterlogged\",\n \"watery\",\n \"wavy\",\n \"wealthy\",\n \"weak\",\n \"weary\",\n \"webbed\",\n \"weed\",\n \"weekly\",\n \"weepy\",\n \"weighty\",\n \"weird\",\n \"welcome\",\n \"well-documented\",\n \"well-groomed\",\n \"well-informed\",\n \"well-lit\",\n \"well-made\",\n \"well-off\",\n \"well-to-do\",\n \"well-worn\",\n \"wet\",\n \"which\",\n \"whimsical\",\n \"whirlwind\",\n \"whispered\",\n \"white\",\n \"whole\",\n \"whopping\",\n \"wicked\",\n \"wide\",\n \"wide-eyed\",\n \"wiggly\",\n \"wild\",\n \"willing\",\n \"wilted\",\n \"winding\",\n \"windy\",\n \"winged\",\n \"wiry\",\n \"wise\",\n \"witty\",\n \"wobbly\",\n \"woeful\",\n \"wonderful\",\n \"wooden\",\n \"woozy\",\n \"wordy\",\n \"worldly\",\n \"worn\",\n \"worried\",\n \"worrisome\",\n \"worse\",\n \"worst\",\n \"worthless\",\n \"worthwhile\",\n \"worthy\",\n \"wrathful\",\n \"wretched\",\n \"writhing\",\n \"wrong\",\n \"wry\",\n \"yawning\",\n \"yearly\",\n \"yellow\",\n \"yellowish\",\n \"young\",\n \"youthful\",\n \"yummy\",\n \"zany\",\n \"zealous\",\n \"zesty\",\n \"zigzag\",\n];\n\nexport function getRandomUsername(): { first: string; second: string } {\n const n = Math.floor(Math.random() * noun.length);\n const a = Math.floor(Math.random() * adj.length);\n return {\n first: adj[a],\n second: noun[n],\n };\n}\n\nexport function getRandomPassword(): string {\n return encodeCrock(getRandomBytes(16));\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n OperationOk,\n TalerCoreBankResultByMethod,\n TalerHttpError,\n WithdrawalOperationStatus,\n} from \"@gnu-taler/taler-util\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { useSessionState } from \"./session.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils.js\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface InstanceTemplateFilter {\n // FIXME: add filter to the template list\n position?: string;\n}\n\nexport function revalidateAccountDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getAccount\",\n undefined,\n { revalidate: true },\n );\n}\n\nexport function useAccountDetails(account: string) {\n const { state: credentials } = useSessionState();\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([username, token]: [string, AccessToken]) {\n return await api.getAccount({ username, token });\n }\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getAccount\">,\n TalerHttpError\n >([account, token, \"getAccount\"], fetcher, {});\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateWithdrawalDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getWithdrawalById\",\n undefined,\n { revalidate: true },\n );\n}\n\nexport function useWithdrawalDetails(wid: string) {\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const [latestStatus, setLatestStatus] = useState<WithdrawalOperationStatus>();\n\n async function fetcher([wid, old_state]: [\n string,\n WithdrawalOperationStatus | undefined,\n ]) {\n return await api.getWithdrawalById(\n wid,\n old_state === undefined ? undefined : { old_state, timeoutMs: 15000 },\n );\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getWithdrawalById\">,\n TalerHttpError\n >([wid, latestStatus, \"getWithdrawalById\"], fetcher, {\n refreshInterval: 3000,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n errorRetryCount: 0,\n errorRetryInterval: 1,\n shouldRetryOnError: false,\n keepPreviousData: true,\n });\n\n const currentStatus =\n data !== undefined && data.type === \"ok\" ? data.body.status : undefined;\n\n useEffect(() => {\n if (currentStatus !== undefined && currentStatus !== latestStatus) {\n setLatestStatus(currentStatus);\n }\n }, [currentStatus]);\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateTransactionDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getTransactionById\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useTransactionDetails(account: string, tid: number) {\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([username, token, txid]: [\n string,\n AccessToken,\n number,\n ]) {\n return await api.getTransactionById({ username, token }, txid);\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getTransactionById\">,\n TalerHttpError\n >([account, token, tid, \"getTransactionById\"], 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 keepPreviousData: true,\n });\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport async function revalidatePublicAccounts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getPublicAccounts\",\n undefined,\n { revalidate: true },\n );\n}\nexport function usePublicAccounts(\n filterAccount: string | undefined,\n initial?: number,\n) {\n const [offset, setOffset] = useState<number | undefined>(initial);\n\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([account, txid]: [\n string | undefined,\n number | undefined,\n ]) {\n return await api.getPublicAccounts(\n { account },\n {\n limit: PAGINATED_LIST_REQUEST,\n offset: txid ? String(txid) : undefined,\n order: \"asc\",\n },\n );\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getPublicAccounts\">,\n TalerHttpError\n >([filterAccount, offset, \"getPublicAccounts\"], 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 keepPreviousData: true,\n });\n\n if (error) return error;\n if (data === undefined) return undefined;\n // if (data.type !== \"ok\") return data;\n\n //TODO: row_id should not be optional\n return buildPaginatedResult(\n data.body.public_accounts,\n offset,\n setOffset,\n (d) => d.row_id ?? 0,\n );\n}\n\ntype PaginatedResult<T> = OperationOk<T> & {\n isLastPage: boolean;\n isFirstPage: boolean;\n loadNext(): void;\n loadFirst(): void;\n};\n//TODO: consider sending this to web-util\nexport function buildPaginatedResult<DataType, OffsetId>(\n data: DataType[],\n offset: OffsetId | undefined,\n setOffset: (o: OffsetId | undefined) => void,\n getId: (r: DataType) => OffsetId,\n): PaginatedResult<DataType[]> {\n const isLastPage = data.length < PAGINATED_LIST_REQUEST;\n const isFirstPage = offset === undefined;\n\n const result = structuredClone(data);\n if (result.length == PAGINATED_LIST_REQUEST) {\n //do now show the last element, used to know if this is the last page\n result.pop();\n }\n return {\n type: \"ok\",\n body: result,\n isLastPage,\n isFirstPage,\n loadNext: () => {\n if (!result.length) return;\n const id = getId(result[result.length - 1]);\n setOffset(id);\n },\n loadFirst: () => {\n setOffset(undefined);\n },\n };\n}\n\nexport function revalidateTransactions() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getTransactions\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useTransactions(account: string, initial?: number) {\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n\n const [offset, setOffset] = useState<number | undefined>(initial);\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([username, token, txid]: [\n string,\n AccessToken,\n number | undefined,\n ]) {\n return await api.getTransactions(\n { username, token },\n {\n limit: PAGINATED_LIST_REQUEST,\n offset: txid ? String(txid) : undefined,\n order: \"dec\",\n },\n );\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getTransactions\">,\n TalerHttpError\n >([account, token, offset, \"getTransactions\"], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n refreshWhenOffline: false,\n // revalidateOnMount: false,\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n });\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n return buildPaginatedResult(\n data.body.transactions,\n offset,\n setOffset,\n (d) => d.row_id,\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport { useAccountDetails } from \"../../hooks/account.js\";\nimport { Props, State } from \"./index.js\";\n\nexport function useComponentState({\n account,\n tab,\n routeChargeWallet,\n routeCreateWireTransfer,\n routePublicAccounts,\n routeSolveSecondFactor,\n routeOperationDetails,\n routeWireTransfer,\n routeCashout,\n onOperationCreated,\n onClose,\n routeClose,\n onAuthorizationRequired,\n}: Props): State {\n const result = useAccountDetails(account);\n\n if (!result) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n\n if (result instanceof TalerError) {\n return {\n status: \"loading-error\",\n error: result,\n };\n }\n\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n return {\n status: \"login\",\n reason: \"forbidden\",\n };\n case HttpStatusCode.NotFound:\n return {\n status: \"login\",\n reason: \"not-found\",\n };\n default: {\n assertUnreachable(result);\n }\n }\n }\n\n const { body: data } = result;\n\n const balance = Amounts.parseOrThrow(data.balance.amount);\n\n const debitThreshold = Amounts.parseOrThrow(data.debit_threshold);\n const payto = parsePaytoUri(data.payto_uri);\n\n if (\n !payto ||\n !payto.isKnown ||\n (payto.targetType !== \"iban\" && payto.targetType !== \"x-taler-bank\")\n ) {\n return {\n status: \"invalid-iban\",\n error: data,\n };\n }\n\n const balanceIsDebit = data.balance.credit_debit_indicator == \"debit\";\n const limit = balanceIsDebit\n ? Amounts.sub(debitThreshold, balance).amount\n : Amounts.add(balance, debitThreshold).amount;\n\n const positiveBalance = balanceIsDebit\n ? Amounts.zeroOfAmount(balance)\n : balance;\n\n return {\n status: \"ready\",\n onOperationCreated,\n error: undefined,\n tab,\n routeCashout,\n routeOperationDetails,\n routeCreateWireTransfer,\n routePublicAccounts,\n routeSolveSecondFactor,\n onAuthorizationRequired,\n onClose,\n routeClose,\n routeChargeWallet,\n routeWireTransfer,\n account,\n limit,\n balance: positiveBalance,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TranslatedString } from \"@gnu-taler/taler-util\";\nimport { Attention, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Transactions } from \"../../components/Transactions/index.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { usePreferences } from \"../../hooks/preferences.js\";\nimport { PaymentOptions } from \"../PaymentOptions.js\";\nimport { State } from \"./index.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport function InvalidIbanView({ error }: State.InvalidIban) {\n return (\n <div>Payto from server is not valid &quot;{error.payto_uri}&quot;</div>\n );\n}\n\nconst IS_PUBLIC_ACCOUNT_ENABLED = false;\n\nfunction ShowDemoInfo({\n routePublicAccounts,\n}: {\n routePublicAccounts: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [settings, updateSettings] = usePreferences();\n if (!settings.showDemoDescription) return <Fragment />;\n return (\n <Attention\n title={i18n.str`This is a demo bank`}\n onClose={() => {\n updateSettings(\"showDemoDescription\", false);\n }}\n >\n {IS_PUBLIC_ACCOUNT_ENABLED ? (\n <i18n.Translate>\n This part of the demo shows how a bank that supports Taler directly\n would work. In addition to using your own bank account, you can also\n see the transaction history of some{\" \"}\n <a name=\"public account\" href={routePublicAccounts.url({})}>\n Public Accounts\n </a>\n .\n </i18n.Translate>\n ) : (\n <i18n.Translate>\n This part of the demo shows how a bank that supports Taler directly\n would work.\n </i18n.Translate>\n )}\n </Attention>\n );\n}\n\nfunction ShowPedingOperation({\n routeSolveSecondFactor,\n}: {\n routeSolveSecondFactor: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [bankState, updateBankState] = useBankState();\n if (!bankState.currentChallenge) return <Fragment />;\n const title = ((op): TranslatedString => {\n switch (op) {\n case \"delete-account\":\n return i18n.str`Pending account delete operation`;\n case \"update-account\":\n return i18n.str`Pending account update operation`;\n case \"update-password\":\n return i18n.str`Pending password update operation`;\n case \"create-transaction\":\n return i18n.str`Pending transaction operation`;\n case \"confirm-withdrawal\":\n return i18n.str`Pending withdrawal operation`;\n case \"create-cashout\":\n return i18n.str`Pending cashout operation`;\n }\n })(bankState.currentChallenge.operation);\n return (\n <Attention\n title={title}\n type=\"warning\"\n onClose={() => {\n updateBankState(\"currentChallenge\", undefined);\n }}\n >\n <i18n.Translate>\n You can complete or cancel the operation in\n </i18n.Translate>{\" \"}\n <a\n class=\"font-semibold text-yellow-700 hover:text-yellow-600\"\n name=\"complete operation\"\n href={routeSolveSecondFactor.url({})}\n >\n <i18n.Translate>this page</i18n.Translate>\n </a>\n </Attention>\n );\n}\n\nexport function ReadyView({\n tab,\n account,\n routeChargeWallet,\n routeWireTransfer,\n limit,\n balance,\n routeCashout,\n routeCreateWireTransfer,\n routePublicAccounts,\n routeOperationDetails,\n routeSolveSecondFactor,\n onClose,\n routeClose,\n onOperationCreated,\n onAuthorizationRequired,\n}: State.Ready): VNode {\n return (\n <Fragment>\n <ShowPedingOperation routeSolveSecondFactor={routeSolveSecondFactor} />\n <ShowDemoInfo routePublicAccounts={routePublicAccounts} />\n <PaymentOptions\n tab={tab}\n routeOperationDetails={routeOperationDetails}\n routeCashout={routeCashout}\n routeChargeWallet={routeChargeWallet}\n routeWireTransfer={routeWireTransfer}\n limit={limit}\n balance={balance}\n routeClose={routeClose}\n onClose={onClose}\n onOperationCreated={onOperationCreated}\n onAuthorizationRequired={onAuthorizationRequired}\n />\n <Transactions\n account={account}\n routeCreateWireTransfer={routeCreateWireTransfer}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport { useTransactions } from \"../../hooks/account.js\";\nimport { Props, State, Transaction } from \"./index.js\";\n\nexport function useComponentState({\n account,\n routeCreateWireTransfer,\n}: Props): State {\n const result = useTransactions(account);\n if (!result) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n if (result instanceof TalerError) {\n return {\n status: \"loading-error\",\n error: result,\n };\n }\n if (result.type === \"fail\") {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n\n const transactions = result.body\n .map((tx) => {\n const negative = tx.direction === \"debit\";\n const cp = parsePaytoUri(\n negative ? tx.creditor_payto_uri : tx.debtor_payto_uri,\n );\n const counterpart =\n (cp === undefined || !cp.isKnown\n ? undefined\n : cp.targetType === \"iban\"\n ? cp.iban\n : cp.targetType === \"x-taler-bank\"\n ? cp.account\n : cp.targetType === \"bitcoin\"\n ? `${cp.address.substring(0, 6)}...`\n : undefined) ?? \"unknown\";\n\n const when = AbsoluteTime.fromProtocolTimestamp(tx.date);\n const amount = Amounts.parse(tx.amount);\n const subject = tx.subject;\n return {\n negative,\n counterpart,\n when,\n amount,\n subject,\n };\n })\n .filter((x): x is Transaction => x !== undefined);\n\n return {\n status: \"ready\",\n error: undefined,\n routeCreateWireTransfer,\n transactions,\n onGoNext: result.isLastPage ? undefined : result.loadNext,\n onGoStart: result.isFirstPage ? undefined : result.loadFirst,\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 toDate from \"../toDate/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.\n * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time with local time zone, or both.\n * @returns {String} the formatted date string (in local time zone)\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.format` must be 'extended' or 'basic'\n * @throws {RangeError} `options.representation` must be 'date', 'time' or 'complete'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\n\nexport default function formatISO(date, options) {\n var _options$format, _options$representati;\n\n requiredArgs(1, arguments);\n var originalDate = toDate(date);\n\n if (isNaN(originalDate.getTime())) {\n throw new RangeError('Invalid time value');\n }\n\n var format = String((_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : 'extended');\n var representation = String((_options$representati = options === null || options === void 0 ? void 0 : options.representation) !== null && _options$representati !== void 0 ? _options$representati : 'complete');\n\n if (format !== 'extended' && format !== 'basic') {\n throw new RangeError(\"format must be 'extended' or 'basic'\");\n }\n\n if (representation !== 'date' && representation !== 'time' && representation !== 'complete') {\n throw new RangeError(\"representation must be 'date', 'time', or 'complete'\");\n }\n\n var result = '';\n var tzOffset = '';\n var dateDelimiter = format === 'extended' ? '-' : '';\n var timeDelimiter = format === 'extended' ? ':' : ''; // Representation is either 'date' or 'complete'\n\n if (representation !== 'time') {\n var day = addLeadingZeros(originalDate.getDate(), 2);\n var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n var year = addLeadingZeros(originalDate.getFullYear(), 4); // yyyyMMdd or yyyy-MM-dd.\n\n result = \"\".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day);\n } // Representation is either 'time' or 'complete'\n\n\n if (representation !== 'date') {\n // Add the timezone.\n var offset = originalDate.getTimezoneOffset();\n\n if (offset !== 0) {\n var absoluteOffset = Math.abs(offset);\n var hourOffset = addLeadingZeros(Math.floor(absoluteOffset / 60), 2);\n var minuteOffset = addLeadingZeros(absoluteOffset % 60, 2); // If less than 0, the sign is +, because it is ahead of time.\n\n var sign = offset < 0 ? '+' : '-';\n tzOffset = \"\".concat(sign).concat(hourOffset, \":\").concat(minuteOffset);\n } else {\n tzOffset = 'Z';\n }\n\n var hour = addLeadingZeros(originalDate.getHours(), 2);\n var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n var second = addLeadingZeros(originalDate.getSeconds(), 2); // If there's also date, separate it with time with 'T'\n\n var separator = result === '' ? '' : 'T'; // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n\n var time = [hour, minute, second].join(timeDelimiter); // HHmmss or HH:mm:ss.\n\n result = \"\".concat(result).concat(separator).concat(time).concat(tzOffset);\n }\n\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 addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days 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 days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months 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 months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\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 subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from 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 subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(date, 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; // Subtract years and months\n\n var dateWithoutMonths = subMonths(date, months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Attention,\n useBankCoreApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { RenderAmount } from \"../../pages/PaytoWireTransferForm.js\";\nimport { Time } from \"../Time.js\";\nimport { State } from \"./index.js\";\n\nexport function ReadyView({\n transactions,\n routeCreateWireTransfer,\n onGoNext,\n onGoStart,\n}: State.Ready): VNode {\n const { i18n, dateLocale } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n\n if (!transactions.length) {\n return (\n <div class=\"px-4 mt-4\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Transactions history</i18n.Translate>\n </h1>\n </div>\n </div>\n\n <Attention type=\"low\" title={i18n.str`No transactions yet.`}>\n <i18n.Translate>\n You can start sending a wire transfer or withdrawing to your wallet.\n </i18n.Translate>\n </Attention>\n </div>\n );\n }\n\n const txByDate = transactions.reduce(\n (prev, cur) => {\n const d =\n cur.when.t_ms === \"never\"\n ? \"\"\n : format(cur.when.t_ms, \"dd/MM/yyyy\", { locale: dateLocale });\n if (!prev[d]) {\n prev[d] = [];\n }\n prev[d].push(cur);\n return prev;\n },\n {} as Record<string, typeof transactions>,\n );\n return (\n <div class=\"px-4 mt-8\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Transactions history</i18n.Translate>\n </h1>\n </div>\n </div>\n <div class=\"-mx-4 mt-5 ring-1 ring-gray-300 sm:mx-0 rounded-lg min-w-fit bg-white\">\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n class=\"pl-2 py-3.5 text-left text-sm font-semibold text-gray-900 \"\n >{i18n.str`Date`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900 \"\n >{i18n.str`Amount`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900 \"\n >{i18n.str`Counterpart`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900 \"\n >{i18n.str`Subject`}</th>\n </tr>\n </thead>\n <tbody>\n {Object.entries(txByDate).map(([date, txs], idx) => {\n return (\n <Fragment key={idx}>\n <tr class=\"border-t border-gray-200\">\n <th\n colSpan={4}\n scope=\"colgroup\"\n class=\"bg-gray-50 py-2 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-3\"\n >\n {date}\n </th>\n </tr>\n {txs.map((item) => {\n return (\n <tr\n key={idx}\n class=\"border-b border-gray-200 last:border-none\"\n >\n <td class=\"relative py-2 pl-2 pr-2 text-sm \">\n <div class=\"font-medium text-gray-900\">\n <Time\n format=\"HH:mm:ss\"\n timestamp={item.when}\n // relative={Duration.fromSpec({ days: 1 })}\n />\n </div>\n <dl class=\"font-normal sm:hidden\">\n <dt class=\"sr-only sm:hidden\">\n <i18n.Translate>Amount</i18n.Translate>\n </dt>\n <dd class=\"mt-1 truncate text-gray-700\">\n {item.negative\n ? i18n.str`sent`\n : i18n.str`received`}{\" \"}\n {item.amount ? (\n <span\n data-negative={\n item.negative ? \"true\" : \"false\"\n }\n class=\"data-[negative=false]:text-green-600 data-[negative=true]:text-red-600\"\n >\n <RenderAmount\n value={item.amount}\n spec={config.currency_specification}\n />\n </span>\n ) : (\n <span style={{ color: \"grey\" }}>\n &lt;{i18n.str`Invalid value`}&gt;\n </span>\n )}\n </dd>\n\n <dt class=\"sr-only sm:hidden\">\n <i18n.Translate>Counterpart</i18n.Translate>\n </dt>\n <dd class=\"mt-1 truncate text-gray-500 sm:hidden\">\n {item.negative ? i18n.str`to` : i18n.str`from`}{\" \"}\n {!routeCreateWireTransfer ? (\n item.counterpart\n ) : (\n <a\n name={`transfer to ${item.counterpart}`}\n href={routeCreateWireTransfer.url({\n account: item.counterpart,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n {item.counterpart}\n </a>\n )}\n </dd>\n <dd class=\"mt-1 text-gray-500 sm:hidden\">\n <pre class=\"break-words w-56 whitespace-break-spaces p-2 rounded-md mx-auto my-2 bg-gray-100\">\n {item.subject}\n </pre>\n </dd>\n </dl>\n </td>\n <td\n data-negative={item.negative ? \"true\" : \"false\"}\n class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-gray-500 \"\n >\n {item.amount ? (\n <RenderAmount\n value={item.amount}\n negative={item.negative}\n withColor\n spec={config.currency_specification}\n />\n ) : (\n <span style={{ color: \"grey\" }}>\n &lt;{i18n.str`Invalid value`}&gt;\n </span>\n )}\n </td>\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-gray-500\">\n {!routeCreateWireTransfer ? (\n item.counterpart\n ) : (\n <a\n name={`wire transfer to ${item.counterpart}`}\n href={routeCreateWireTransfer.url({\n account: item.counterpart,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n {item.counterpart}\n </a>\n )}\n </td>\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-gray-500 break-all min-w-md\">\n {item.subject}\n </td>\n </tr>\n );\n })}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n\n <nav\n class=\"flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 rounded-lg\"\n aria-label=\"Pagination\"\n >\n <div class=\"flex flex-1 justify-between sm:justify-end\">\n <button\n name=\"first page\"\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onGoStart}\n onClick={onGoStart}\n >\n <i18n.Translate>First page</i18n.Translate>\n </button>\n <button\n name=\"next page\"\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 ml-3 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onGoNext}\n onClick={onGoNext}\n >\n <i18n.Translate>Next</i18n.Translate>\n </button>\n </div>\n </nav>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, Duration } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport {\n formatISO,\n format,\n formatDuration,\n intervalToDuration,\n} from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\n\n/**\n *\n * @param timestamp time to be formatted\n * @param relative duration threshold, if the difference is lower\n * the timestamp will be formatted as relative time from \"now\"\n *\n * @returns\n */\nexport function Time({\n timestamp,\n relative,\n format: formatString,\n}: {\n timestamp: AbsoluteTime | undefined;\n relative?: Duration;\n format: string;\n}): VNode {\n const { i18n, dateLocale } = useTranslationContext();\n if (!timestamp) return <Fragment />;\n\n if (timestamp.t_ms === \"never\") {\n return <time>{i18n.str`never`}</time>;\n }\n\n const now = AbsoluteTime.now();\n const diff = AbsoluteTime.difference(now, timestamp);\n if (relative && now.t_ms !== \"never\" && Duration.cmp(diff, relative) === -1) {\n const d = intervalToDuration({\n start: now.t_ms,\n end: timestamp.t_ms,\n });\n d.seconds = 0;\n const duration = formatDuration(d, { locale: dateLocale });\n const isFuture = AbsoluteTime.cmp(now, timestamp) < 0;\n if (isFuture) {\n return (\n <time dateTime={formatISO(timestamp.t_ms)}>\n <i18n.Translate>in {duration}</i18n.Translate>\n </time>\n );\n } else {\n return (\n <time dateTime={formatISO(timestamp.t_ms)}>\n <i18n.Translate>{duration} ago</i18n.Translate>\n </time>\n );\n }\n }\n return (\n <time dateTime={formatISO(timestamp.t_ms)}>\n {format(timestamp.t_ms, formatString, { locale: dateLocale })}\n </time>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AbsoluteTime, AmountJson, TalerError } from \"@gnu-taler/taler-util\";\nimport { Loading, utils } from \"@gnu-taler/web-util/browser\";\nimport { ErrorLoadingWithDebug } from \"../ErrorLoadingWithDebug.js\";\nimport { useComponentState } from \"./state.js\";\nimport { ReadyView } from \"./views.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport interface Props {\n account: string;\n routeCreateWireTransfer:\n | RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>\n | undefined;\n}\n\nexport type State = State.Loading | State.LoadingUriError | State.Ready;\n\nexport namespace State {\n export interface Loading {\n status: \"loading\";\n error: undefined;\n }\n\n export interface LoadingUriError {\n status: \"loading-error\";\n error: TalerError;\n }\n\n export interface BaseInfo {\n error: undefined;\n }\n export interface Ready extends BaseInfo {\n status: \"ready\";\n error: undefined;\n routeCreateWireTransfer:\n | RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>\n | undefined;\n transactions: Transaction[];\n onGoStart?: () => void;\n onGoNext?: () => void;\n }\n}\n\nexport interface Transaction {\n negative: boolean;\n counterpart: string;\n when: AbsoluteTime;\n amount: AmountJson | undefined;\n subject: string;\n}\n\nconst viewMapping: utils.StateViewMap<State> = {\n loading: Loading,\n \"loading-error\": ErrorLoadingWithDebug,\n ready: ReadyView,\n};\n\nexport const Transactions = utils.compose(\n (p: Props) => useComponentState(p),\n viewMapping,\n);\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountJson, TalerError } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect } from \"preact/hooks\";\nimport { useWithdrawalDetails } from \"../hooks/account.js\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { PaytoWireTransferForm } from \"./PaytoWireTransferForm.js\";\nimport { WalletWithdrawForm } from \"./WalletWithdrawForm.js\";\n\nfunction ShowOperationPendingTag({\n woid,\n onOperationAlreadyCompleted,\n}: {\n woid: string;\n onOperationAlreadyCompleted?: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const result = useWithdrawalDetails(woid);\n const loading = !result;\n const error =\n !loading && (result instanceof TalerError || result.type === \"fail\");\n const pending =\n !loading &&\n !error &&\n (result.body.status === \"pending\" || result.body.status === \"selected\") &&\n credentials.status === \"loggedIn\" &&\n credentials.username === result.body.username;\n useEffect(() => {\n if (!loading && !pending && onOperationAlreadyCompleted) {\n onOperationAlreadyCompleted();\n }\n }, [pending]);\n\n if (error || !pending) {\n return <Fragment />;\n }\n\n return (\n <span class=\"flex items-center gap-x-1.5 w-fit rounded-md bg-green-100 px-2 py-1 text-xs font-medium text-green-700 whitespace-pre\">\n <svg\n class=\"h-1.5 w-1.5 fill-green-500\"\n viewBox=\"0 0 6 6\"\n aria-hidden=\"true\"\n >\n <circle cx=\"3\" cy=\"3\" r=\"3\" />\n </svg>\n <i18n.Translate>Operation ready</i18n.Translate>\n </span>\n );\n}\n\n/**\n * Let the user choose a payment option,\n * then specify the details trigger the action.\n */\nexport function PaymentOptions({\n routeClose,\n routeCashout,\n routeChargeWallet,\n routeWireTransfer,\n tab,\n limit,\n balance,\n onOperationCreated,\n onClose,\n routeOperationDetails,\n onAuthorizationRequired,\n}: {\n limit: AmountJson;\n balance: AmountJson;\n tab: \"charge-wallet\" | \"wire-transfer\" | undefined;\n onAuthorizationRequired: () => void;\n onOperationCreated: (wopid: string) => void;\n onClose: () => void;\n\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n routeClose: RouteDefinition;\n routeCashout: RouteDefinition;\n routeChargeWallet: RouteDefinition;\n routeWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [bankState, updateBankState] = useBankState();\n\n return (\n <div class=\"mt-4\">\n <fieldset>\n <legend class=\"px-4 text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Send money</i18n.Translate>\n </legend>\n\n <div class=\"px-4 mt-4 grid grid-cols-1 gap-y-6 sm:grid-cols-2 sm:gap-x-4\">\n {/* <!-- Active: \"border-indigo-600 ring-2 ring-indigo-600\", Not Active: \"border-gray-300\" --> */}\n <a name=\"charge wallet\" href={routeChargeWallet.url({})}>\n <label\n class={\n \"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none\" +\n (tab === \"charge-wallet\"\n ? \"border-indigo-600 ring-2 ring-indigo-600\"\n : \"border-gray-300\")\n }\n >\n <div class=\"flex flex-col\">\n <span class=\"flex\">\n <div class=\"text-4xl mr-4 my-auto\">&#x1F4B5;</div>\n <span class=\"grow self-center text-lg text-gray-900 align-middle text-center\">\n <i18n.Translate>to a Taler wallet</i18n.Translate>\n </span>\n <svg\n class=\"self-center flex-none h-5 w-5 text-indigo-600\"\n style={{\n visibility:\n tab === \"charge-wallet\" ? \"visible\" : \"hidden\",\n }}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n <div class=\"mt-1 flex items-center text-sm text-gray-500\">\n <i18n.Translate>\n Withdraw digital money into your mobile wallet or browser\n extension\n </i18n.Translate>\n </div>\n {!!bankState.currentWithdrawalOperationId && (\n <ShowOperationPendingTag\n woid={bankState.currentWithdrawalOperationId}\n onOperationAlreadyCompleted={() => {\n updateBankState(\n \"currentWithdrawalOperationId\",\n undefined,\n );\n }}\n />\n )}\n </div>\n </label>\n </a>\n\n <a name=\"wire transfer\" href={routeWireTransfer.url({})}>\n <label\n class={\n \"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none\" +\n (tab === \"wire-transfer\"\n ? \"border-indigo-600 ring-2 ring-indigo-600\"\n : \"border-gray-300\")\n }\n >\n <div class=\"flex flex-col\">\n <span class=\"flex\">\n <div class=\"text-4xl mr-4 my-auto\">&#x2194;</div>\n <span class=\"grow self-center text-lg font-medium text-gray-900 align-middle text-center\">\n <i18n.Translate>to another bank account</i18n.Translate>\n </span>\n <svg\n class=\"self-center flex-none h-5 w-5 text-indigo-600\"\n style={{\n visibility:\n tab === \"wire-transfer\" ? \"visible\" : \"hidden\",\n }}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n <div class=\"mt-1 flex items-center text-sm text-gray-500\">\n <i18n.Translate>\n Make a wire transfer to an account with known bank account\n number.\n </i18n.Translate>\n </div>\n </div>\n </label>\n </a>\n </div>\n {tab === \"charge-wallet\" && (\n <WalletWithdrawForm\n routeOperationDetails={routeOperationDetails}\n focus\n limit={limit}\n balance={balance}\n onAuthorizationRequired={onAuthorizationRequired}\n onOperationCreated={onOperationCreated}\n onOperationAborted={onClose}\n routeCancel={routeClose}\n />\n )}\n {tab === \"wire-transfer\" && (\n <PaytoWireTransferForm\n focus\n routeHere={routeWireTransfer}\n limit={limit}\n balance={balance}\n onAuthorizationRequired={onAuthorizationRequired}\n onSuccess={onClose}\n routeCashout={routeCashout}\n routeCancel={routeClose}\n />\n )}\n </fieldset>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n HttpStatusCode,\n TranslatedString,\n assertUnreachable,\n parseWithdrawUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n notifyError,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { forwardRef } from \"preact/compat\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { usePreferences } from \"../hooks/preferences.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../utils.js\";\nimport { OperationState } from \"./OperationState/index.js\";\nimport {\n InputAmount,\n RenderAmount,\n doAutoFocus,\n} from \"./PaytoWireTransferForm.js\";\n\nconst RefAmount = forwardRef(InputAmount);\n\nfunction OldWithdrawalForm({\n onOperationCreated,\n limit,\n balance,\n routeCancel,\n focus,\n routeOperationDetails,\n}: {\n limit: AmountJson;\n balance: AmountJson;\n focus?: boolean;\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n onOperationCreated: (wopid: string) => void;\n routeCancel: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreferences();\n\n // const walletInegrationApi = useTalerWalletIntegrationAPI()\n // const { navigateTo } = useNavigationContext();\n\n const [bankState, updateBankState] = useBankState();\n const {\n lib: { bank: api },\n config,\n } = useBankCoreApiContext();\n\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n\n const [amountStr, setAmountStr] = useState<string | undefined>(\n `${settings.maxWithdrawalAmount}`,\n );\n const [notification, notify, handleError] = useLocalNotification();\n\n if (bankState.currentWithdrawalOperationId) {\n // FIXME: doing the preventDefault is not optimal\n\n // const suri = stringifyWithdrawUri({\n // bankIntegrationApiBaseUrl: api.getIntegrationAPI().baseUrl,\n // withdrawalOperationId: bankState.currentWithdrawalOperationId,\n // });\n // const uri = parseWithdrawUri(suri)!\n const url = routeOperationDetails.url({\n wopid: bankState.currentWithdrawalOperationId,\n });\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`There is an operation already`}\n onClose={() => {\n updateBankState(\"currentWithdrawalOperationId\", undefined);\n }}\n >\n <span ref={focus ? doAutoFocus : undefined} />\n <i18n.Translate>Complete the operation in</i18n.Translate>{\" \"}\n <a\n class=\"font-semibold text-yellow-700 hover:text-yellow-600\"\n name=\"complete operation\"\n href={url}\n // onClick={(e) => {\n // e.preventDefault()\n // walletInegrationApi.publishTalerAction(uri, () => {\n // navigateTo(url)\n // })\n // }}\n >\n <i18n.Translate>this page</i18n.Translate>\n </a>\n </Attention>\n );\n }\n\n const trimmedAmountStr = amountStr?.trim();\n\n const parsedAmount = trimmedAmountStr\n ? Amounts.parse(`${limit.currency}:${trimmedAmountStr}`)\n : undefined;\n\n const errors = undefinedIfEmpty({\n amount:\n trimmedAmountStr == null\n ? i18n.str`Required`\n : !parsedAmount\n ? i18n.str`Invalid`\n : Amounts.cmp(limit, parsedAmount) === -1\n ? i18n.str`Balance is not enough`\n : undefined,\n });\n\n async function doStart() {\n if (!parsedAmount || !creds) return;\n await handleError(async () => {\n const resp = await api.createWithdrawal(creds, {\n amount: Amounts.stringify(parsedAmount),\n });\n if (resp.type === \"ok\") {\n const uri = parseWithdrawUri(resp.body.taler_withdraw_uri);\n if (!uri) {\n return notifyError(\n i18n.str`Server responded with an invalid withdraw URI`,\n i18n.str`Withdraw URI: ${resp.body.taler_withdraw_uri}`,\n );\n } else {\n updateBankState(\n \"currentWithdrawalOperationId\",\n uri.withdrawalOperationId,\n );\n onOperationCreated(uri.withdrawalOperationId);\n }\n } else {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n notify({\n type: \"error\",\n title: i18n.str`The operation was rejected due to insufficient funds`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n break;\n }\n case HttpStatusCode.Unauthorized: {\n notify({\n type: \"error\",\n title: i18n.str`The operation was rejected due to insufficient funds`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n break;\n }\n case HttpStatusCode.NotFound: {\n notify({\n type: \"error\",\n title: i18n.str`Account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n break;\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n return (\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2 mt-4\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"px-4 py-6 \">\n <div class=\"grid max-w-xs grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label for=\"withdraw-amount\">{i18n.str`Amount`}</label>\n <RefAmount\n currency={limit.currency}\n value={amountStr}\n name=\"withdraw-amount\"\n onChange={(v) => {\n setAmountStr(v);\n }}\n error={errors?.amount}\n ref={focus ? doAutoFocus : undefined}\n />\n </div>\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Current balance is{\" \"}\n <RenderAmount\n value={balance}\n spec={config.currency_specification}\n />\n </i18n.Translate>\n </p>\n {Amounts.cmp(limit, balance) > 0 ? (\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Your account allows you to withdraw{\" \"}\n <RenderAmount\n value={limit}\n spec={config.currency_specification}\n />\n </i18n.Translate>\n </p>\n ) : undefined}\n <div class=\"mt-4\">\n <div class=\"sm:inline\">\n <button\n type=\"button\"\n name=\"set 50\"\n class=\" inline-flex px-6 py-4 text-sm items-center rounded-l-md bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n setAmountStr(\"50.00\");\n }}\n >\n 50.00\n </button>\n <button\n type=\"button\"\n name=\"set 25\"\n class=\" -ml-px -mr-px inline-flex px-6 py-4 text-sm items-center rounded-r-md sm:rounded-none bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n setAmountStr(\"25.00\");\n }}\n >\n 25.00\n </button>\n </div>\n <div class=\"mt-4 sm:inline\">\n <button\n type=\"button\"\n name=\"set 10\"\n class=\" -ml-px -mr-px inline-flex px-6 py-4 text-sm items-center rounded-l-md sm:rounded-none bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n setAmountStr(\"10.00\");\n }}\n >\n 10.00\n </button>\n <button\n type=\"button\"\n name=\"set 5\"\n class=\" inline-flex px-6 py-4 text-sm items-center rounded-r-md bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n setAmountStr(\"5.00\");\n }}\n >\n 5.00\n </button>\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeCancel.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"continue\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n // disabled={isRawPayto ? !!errorsPayto : !!errorsWire}\n onClick={(e) => {\n e.preventDefault();\n doStart();\n }}\n >\n <i18n.Translate>Continue</i18n.Translate>\n </button>\n </div>\n </form>\n );\n}\n\nexport function WalletWithdrawForm({\n focus,\n limit,\n balance,\n routeCancel,\n onAuthorizationRequired,\n onOperationCreated,\n onOperationAborted,\n routeOperationDetails,\n}: {\n limit: AmountJson;\n balance: AmountJson;\n focus?: boolean;\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n onAuthorizationRequired: () => void;\n onOperationCreated: (wopid: string) => void;\n onOperationAborted: () => void;\n routeCancel: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const [settings, updateSettings] = usePreferences();\n\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Prepare your Taler wallet</i18n.Translate>\n </h2>\n <p class=\"mt-1 text-sm text-gray-500\">\n <i18n.Translate>\n After using your wallet you will need to confirm or cancel the\n operation on this site.\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"col-span-2\">\n {settings.showInstallWallet && (\n <Attention\n title={i18n.str`You need a Taler wallet`}\n onClose={() => {\n updateSettings(\"showInstallWallet\", false);\n }}\n >\n <i18n.Translate>\n If you don't have one yet you can follow the instruction in\n </i18n.Translate>{\" \"}\n <a\n target=\"_blank\"\n name=\"wallet page\"\n rel=\"noreferrer noopener\"\n class=\"font-semibold text-blue-700 hover:text-blue-600\"\n href=\"https://taler.net/en/wallet.html\"\n >\n <i18n.Translate>this page</i18n.Translate>\n </a>\n </Attention>\n )}\n\n {!settings.fastWithdrawal ? (\n <OldWithdrawalForm\n focus={focus}\n routeOperationDetails={routeOperationDetails}\n limit={limit}\n balance={balance}\n routeCancel={routeCancel}\n onOperationCreated={onOperationCreated}\n />\n ) : (\n <OperationState\n currency={limit.currency}\n onAuthorizationRequired={onAuthorizationRequired}\n routeClose={routeCancel}\n routeHere={routeOperationDetails}\n onAbort={onOperationAborted}\n // route={routeCancel}\n />\n )}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerCoreBankErrorsByMethod,\n TalerError,\n assertUnreachable,\n parsePaytoUri,\n parseWithdrawUri,\n stringifyWithdrawUri,\n} from \"@gnu-taler/taler-util\";\nimport { utils } from \"@gnu-taler/web-util/browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { mutate } from \"swr\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useWithdrawalDetails } from \"../../hooks/account.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { usePreferences } from \"../../hooks/preferences.js\";\nimport { Props, State } from \"./index.js\";\n\nexport function useComponentState({\n currency,\n routeClose,\n onAbort,\n routeHere,\n onAuthorizationRequired,\n}: Props): utils.RecursiveState<State> {\n const [settings] = usePreferences();\n const [bankState, updateBankState] = useBankState();\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const {\n lib: { bank },\n } = useBankCoreApiContext();\n\n const [failure, setFailure] = useState<\n TalerCoreBankErrorsByMethod<\"createWithdrawal\"> | undefined\n >();\n const amount = settings.maxWithdrawalAmount;\n\n async function doSilentStart() {\n // FIXME: if amount is not enough use balance\n const parsedAmount = Amounts.parseOrThrow(`${currency}:${amount}`);\n if (!creds) return;\n const resp = await bank.createWithdrawal(creds, {\n amount: Amounts.stringify(parsedAmount),\n });\n if (resp.type === \"fail\") {\n setFailure(resp);\n return;\n }\n updateBankState(\"currentWithdrawalOperationId\", resp.body.withdrawal_id);\n }\n\n const withdrawalOperationId = bankState.currentWithdrawalOperationId;\n useEffect(() => {\n if (withdrawalOperationId === undefined) {\n doSilentStart();\n }\n }, [settings.fastWithdrawal, amount]);\n\n if (failure) {\n return {\n status: \"failed\",\n error: failure,\n };\n }\n\n if (!withdrawalOperationId) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n\n const wid = withdrawalOperationId;\n\n async function doAbort() {\n if (!creds) return;\n const resp = await bank.abortWithdrawalById(creds, wid);\n if (resp.type === \"ok\") {\n // updateBankState(\"currentWithdrawalOperationId\", undefined)\n onAbort();\n } else {\n return resp;\n }\n }\n\n async function doConfirm(): Promise<\n TalerCoreBankErrorsByMethod<\"confirmWithdrawalById\"> | undefined\n > {\n if (!creds) return;\n const resp = await bank.confirmWithdrawalById(creds, wid);\n if (resp.type === \"ok\") {\n mutate(() => true); //clean withdrawal state\n } else {\n return resp;\n }\n }\n\n const uri = stringifyWithdrawUri({\n bankIntegrationApiBaseUrl: bank.getIntegrationAPI().href,\n withdrawalOperationId,\n });\n const parsedUri = parseWithdrawUri(uri);\n if (!parsedUri) {\n return {\n status: \"invalid-withdrawal\",\n error: undefined,\n uri,\n };\n }\n\n return (): utils.RecursiveState<State> => {\n const result = useWithdrawalDetails(withdrawalOperationId);\n const shouldCreateNewOperation = result && !(result instanceof TalerError);\n\n useEffect(() => {\n if (shouldCreateNewOperation) {\n doSilentStart();\n }\n }, []);\n if (!result) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n if (result instanceof TalerError) {\n return {\n status: \"loading-error\",\n error: result,\n };\n }\n\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.NotFound: {\n return {\n status: \"aborted\",\n error: undefined,\n routeClose,\n };\n }\n default:\n assertUnreachable(result);\n }\n }\n\n const { body: data } = result;\n if (data.status === \"aborted\") {\n return {\n status: \"aborted\",\n error: undefined,\n routeClose,\n };\n }\n\n if (data.status === \"confirmed\") {\n if (!settings.showWithdrawalSuccess) {\n updateBankState(\"currentWithdrawalOperationId\", undefined);\n // onClose()\n }\n return {\n status: \"confirmed\",\n error: undefined,\n routeClose,\n };\n }\n\n if (data.status === \"pending\") {\n return {\n status: \"ready\",\n error: undefined,\n uri: parsedUri,\n routeClose,\n onAbort: !creds\n ? async () => {\n onAbort();\n return undefined;\n }\n : doAbort,\n };\n }\n\n if (!data.selected_reserve_pub) {\n return {\n status: \"invalid-reserve\",\n error: undefined,\n reserve: data.selected_reserve_pub,\n };\n }\n\n const account = !data.selected_exchange_account\n ? undefined\n : parsePaytoUri(data.selected_exchange_account);\n\n if (!account) {\n return {\n status: \"invalid-payto\",\n error: undefined,\n payto: data.selected_exchange_account,\n };\n }\n\n return {\n status: \"need-confirmation\",\n error: undefined,\n routeHere,\n onAuthorizationRequired,\n account: data.username,\n id: withdrawalOperationId,\n onAbort: !creds ? undefined : doAbort,\n onConfirm: !creds ? undefined : doConfirm,\n };\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n stringifyWithdrawUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n notifyInfo,\n useLocalNotification,\n useTalerWalletIntegrationAPI,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect } from \"preact/hooks\";\nimport { QR } from \"../../components/QR.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { usePreferences } from \"../../hooks/preferences.js\";\nimport { ShouldBeSameUser } from \"../WithdrawalConfirmationQuestion.js\";\nimport { State } from \"./index.js\";\n\nexport function InvalidPaytoView({ payto }: State.InvalidPayto) {\n return <div>Payto from server is not valid &quot;{payto}&quot;</div>;\n}\nexport function InvalidWithdrawalView({ uri }: State.InvalidWithdrawal) {\n return <div>Withdrawal uri from server is not valid &quot;{uri}&quot;</div>;\n}\nexport function InvalidReserveView({ reserve }: State.InvalidReserve) {\n return <div>Reserve from server is not valid &quot;{reserve}&quot;</div>;\n}\n\nexport function NeedConfirmationView({\n onAbort: doAbort,\n onConfirm: doConfirm,\n routeHere,\n account,\n id,\n onAuthorizationRequired,\n}: State.NeedConfirmation) {\n const { i18n } = useTranslationContext();\n const [settings] = usePreferences();\n const [notification, notify, errorHandler] = useLocalNotification();\n const [, updateBankState] = useBankState();\n\n async function onCancel() {\n errorHandler(async () => {\n if (!doAbort) return;\n const resp = await doAbort();\n if (!resp) return;\n switch (resp.case) {\n case HttpStatusCode.Conflict:\n return notify({\n type: \"error\",\n title: i18n.str`The reserve operation has been confirmed previously and can't be aborted`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n });\n }\n\n async function onConfirm() {\n errorHandler(async () => {\n if (!doConfirm) return;\n const resp = await doConfirm();\n if (!resp) {\n if (!settings.showWithdrawalSuccess) {\n notifyInfo(i18n.str`Wire transfer completed!`);\n }\n return;\n }\n switch (resp.case) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return notify({\n type: \"error\",\n title: i18n.str`The withdrawal has been aborted previously and can't be confirmed`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return notify({\n type: \"error\",\n title: i18n.str`The withdrawal operation can't be confirmed before a wallet accepted the transaction.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`Your balance is not enough.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"confirm-withdrawal\",\n id: String(resp.body.challenge_id),\n sent: AbsoluteTime.never(),\n location: routeHere.url({ wopid: id }),\n request: id,\n });\n return onAuthorizationRequired();\n }\n default:\n assertUnreachable(resp);\n }\n });\n }\n\n return (\n <div class=\"bg-white shadow sm:rounded-lg\">\n <LocalNotificationBanner notification={notification} />\n <div class=\"px-4 py-5 sm:p-6\">\n <h3 class=\"text-base font-semibold text-gray-900\">\n <i18n.Translate>Confirm the withdrawal operation</i18n.Translate>\n </h3>\n <div class=\"mt-3 text-sm leading-6\">\n <ShouldBeSameUser username={account}>\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <button\n type=\"button\"\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n onClick={(e) => {\n e.preventDefault();\n onCancel();\n }}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n type=\"submit\"\n name=\"transfer\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n onClick={(e) => {\n e.preventDefault();\n onConfirm();\n }}\n >\n <i18n.Translate>Transfer</i18n.Translate>\n </button>\n </div>\n </form>\n </ShouldBeSameUser>\n </div>\n </div>\n </div>\n );\n}\nexport function FailedView({ error }: State.Failed) {\n const { i18n } = useTranslationContext();\n switch (error.case) {\n case HttpStatusCode.Unauthorized:\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`Unauthorized to make the operation, maybe the session has expired or the password changed.`}\n >\n <div class=\"mt-2 text-sm text-red-700\">{error.detail.hint}</div>\n </Attention>\n );\n case HttpStatusCode.Conflict:\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation was rejected due to insufficient funds.`}\n >\n <div class=\"mt-2 text-sm text-red-700\">{error.detail.hint}</div>\n </Attention>\n );\n case HttpStatusCode.NotFound:\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation was rejected due to insufficient funds.`}\n >\n <div class=\"mt-2 text-sm text-red-700\">{error.detail.hint}</div>\n </Attention>\n );\n default:\n assertUnreachable(error);\n }\n}\n\nexport function AbortedView() {\n return <div>aborted</div>;\n}\n\nexport function ConfirmedView({ routeClose }: State.Confirmed) {\n const { i18n } = useTranslationContext();\n const [settings, updateSettings] = usePreferences();\n return (\n <Fragment>\n <div class=\"relative ml-auto mr-auto transform overflow-hidden rounded-lg bg-white p-4 text-left shadow-xl transition-all \">\n <div class=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-100\">\n <svg\n class=\"h-6 w-6 text-green-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4.5 12.75l6 6 9-13.5\"\n />\n </svg>\n </div>\n <div class=\"mt-3 text-center sm:mt-5\">\n <h3\n class=\"text-base font-semibold leading-6 text-gray-900\"\n id=\"modal-title\"\n >\n <i18n.Translate>Withdrawal confirmed</i18n.Translate>\n </h3>\n <div class=\"mt-2\">\n <p class=\"text-sm text-gray-500\">\n <i18n.Translate>\n The wire transfer to the Taler operator has been initiated. You\n will soon receive the requested amount in your Taler wallet.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Do not show this again</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name=\"toggle withdrawal\"\n data-enabled={!settings.showWithdrawalSuccess}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n updateSettings(\n \"showWithdrawalSuccess\",\n !settings.showWithdrawalSuccess,\n );\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={!settings.showWithdrawalSuccess}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n type=\"button\"\n name=\"close\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </Fragment>\n );\n}\n\nexport function ReadyView({ uri, onAbort: doAbort }: State.Ready): VNode {\n const { i18n } = useTranslationContext();\n const walletInegrationApi = useTalerWalletIntegrationAPI();\n const [notification, notify, errorHandler] = useLocalNotification();\n\n const talerWithdrawUri = stringifyWithdrawUri(uri);\n useEffect(() => {\n walletInegrationApi.publishTalerAction(uri);\n }, []);\n\n async function onAbort() {\n errorHandler(async () => {\n const hasError = await doAbort();\n if (!hasError) return;\n switch (hasError.case) {\n case HttpStatusCode.Conflict:\n return notify({\n type: \"error\",\n title: i18n.str`The reserve operation has been confirmed previously and can't be aborted`,\n description: hasError.detail.hint as TranslatedString,\n debug: hasError.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: hasError.detail.hint as TranslatedString,\n debug: hasError.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: hasError.detail.hint as TranslatedString,\n debug: hasError.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(hasError);\n }\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"flex justify-end mt-4\">\n <button\n type=\"button\"\n name=\"cancel\"\n class=\"inline-flex items-center rounded-md bg-red-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-500\"\n onClick={onAbort}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n </div>\n\n <div class=\"bg-white shadow sm:rounded-lg mt-4\">\n <div class=\"p-4\">\n <h3 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>On this device</i18n.Translate>\n </h3>\n <div class=\"mt-2 sm:flex sm:items-start sm:justify-between\">\n <div class=\"max-w-xl text-sm text-gray-500\">\n <p>\n <i18n.Translate>\n If you are using a web browser on desktop you can also\n </i18n.Translate>\n </p>\n </div>\n <div class=\"mt-5 sm:ml-6 sm:mt-0 sm:flex sm:flex-shrink-0 sm:items-center\">\n <a\n href={talerWithdrawUri}\n name=\"start\"\n class=\"inline-flex items-center disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Start</i18n.Translate>\n </a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bg-white shadow sm:rounded-lg mt-2\">\n <div class=\"p-4\">\n <h3 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>On a mobile phone</i18n.Translate>\n </h3>\n <div class=\"mt-2 sm:flex sm:items-start sm:justify-between\">\n <div class=\"max-w-xl text-sm text-gray-500\">\n <p>\n <i18n.Translate>\n Scan the QR code with your mobile device.\n </i18n.Translate>\n </p>\n </div>\n </div>\n <div class=\"mt-2 max-w-md ml-auto mr-auto\">\n <QR text={talerWithdrawUri} />\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"left\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n marginRight: \"auto\",\n marginLeft: \"auto\",\n }}\n ref={divRef}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n HttpStatusCode,\n PaytoUri,\n PaytoUriIBAN,\n PaytoUriTalerBank,\n TalerErrorCode,\n TranslatedString,\n WithdrawUriResult,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { mutate } from \"swr\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { usePreferences } from \"../hooks/preferences.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { LoginForm } from \"./LoginForm.js\";\nimport { RenderAmount } from \"./PaytoWireTransferForm.js\";\n\ninterface Props {\n onAborted: () => void;\n withdrawUri: WithdrawUriResult;\n routeHere: RouteDefinition<{ wopid: string }>;\n details: {\n account: PaytoUri;\n reserve: string;\n username: string;\n amount: AmountJson;\n };\n onAuthorizationRequired: () => void;\n}\n/**\n * Additional authentication required to complete the operation.\n * Not providing a back button, only abort.\n */\nexport function WithdrawalConfirmationQuestion({\n onAborted,\n details,\n onAuthorizationRequired,\n routeHere,\n withdrawUri,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const [settings] = usePreferences();\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const [, updateBankState] = useBankState();\n\n const [notification, notify, handleError] = useLocalNotification();\n\n const {\n config,\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function doTransfer() {\n await handleError(async () => {\n if (!creds) return;\n const resp = await api.confirmWithdrawalById(\n creds,\n withdrawUri.withdrawalOperationId,\n );\n if (resp.type === \"ok\") {\n mutate(() => true); // clean any info that we have\n if (!settings.showWithdrawalSuccess) {\n notifyInfo(i18n.str`Wire transfer completed!`);\n }\n } else {\n switch (resp.case) {\n case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:\n return notify({\n type: \"error\",\n title: i18n.str`The withdrawal has been aborted previously and can't be confirmed`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return notify({\n type: \"error\",\n title: i18n.str`The withdrawal operation can't be confirmed before a wallet accepted the transaction.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`Your balance is not enough for the operation.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"confirm-withdrawal\",\n id: String(resp.body.challenge_id),\n location: routeHere.url({\n wopid: withdrawUri.withdrawalOperationId,\n }),\n sent: AbsoluteTime.never(),\n request: withdrawUri.withdrawalOperationId,\n });\n return onAuthorizationRequired();\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n async function doCancel() {\n await handleError(async () => {\n if (!creds) return;\n const resp = await api.abortWithdrawalById(\n creds,\n withdrawUri.withdrawalOperationId,\n );\n if (resp.type === \"ok\") {\n onAborted();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Conflict:\n return notify({\n type: \"error\",\n title: i18n.str`The reserve operation has been confirmed previously and can't be aborted`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`The operation id is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The operation was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default: {\n assertUnreachable(resp);\n }\n }\n }\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"bg-white shadow sm:rounded-lg\">\n <div class=\"px-4 py-5 sm:p-6\">\n <h3 class=\"text-base font-semibold text-gray-900\">\n <i18n.Translate>Confirm the withdrawal operation</i18n.Translate>\n </h3>\n <div class=\"mt-3 text-sm leading-6\">\n <ShouldBeSameUser username={details.username}>\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-10 md:grid-cols-2 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 mt-4\">\n <div class=\"w-full\">\n <div class=\"px-4 sm:px-0 text-sm\">\n <p>\n <i18n.Translate>Wire transfer details</i18n.Translate>\n </p>\n </div>\n <div class=\"mt-6 border-t border-gray-100\">\n <dl class=\"divide-y divide-gray-100\">\n {((): VNode => {\n if (!details.account.isKnown) {\n return (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.targetPath}\n </dd>\n </div>\n );\n }\n switch (details.account.targetType) {\n case \"iban\": {\n const name =\n details.account.params[\"receiver-name\"];\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account number\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.iban}\n </dd>\n </div>\n {name && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's name\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {name}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n case \"x-taler-bank\": {\n const name =\n details.account.params[\"receiver-name\"];\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account bank\n hostname\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.host}\n </dd>\n </div>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account id\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.account}\n </dd>\n </div>\n {name && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's name\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {name}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n case \"bitcoin\": {\n const name =\n details.account.params[\"receiver-name\"];\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's account address\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.account.address}\n </dd>\n </div>\n {name && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Payment provider's name\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {name}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n default: {\n assertUnreachable(details.account);\n }\n }\n })()}\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Amount</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={details.amount}\n spec={config.currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <button\n type=\"button\"\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n onClick={doCancel}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n type=\"submit\"\n name=\"transfer\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n onClick={(e) => {\n e.preventDefault();\n doTransfer();\n }}\n >\n <i18n.Translate>Transfer</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n </ShouldBeSameUser>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n\nexport function ShouldBeSameUser({\n username,\n children,\n}: {\n username: string;\n children: ComponentChildren;\n}): VNode {\n const { state: credentials } = useSessionState();\n const { i18n } = useTranslationContext();\n if (credentials.status === \"loggedOut\") {\n return (\n <Fragment>\n <Attention type=\"info\" title={i18n.str`Authentication required`} />\n <LoginForm currentUser={username} fixedUser />\n </Fragment>\n );\n }\n if (credentials.username !== username) {\n return (\n <Fragment>\n <Attention\n type=\"warning\"\n title={i18n.str`This operation was created with other username`}\n />\n <LoginForm currentUser={username} fixedUser />\n </Fragment>\n );\n }\n return <Fragment>{children}</Fragment>;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n TalerCoreBankErrorsByMethod,\n TalerError,\n WithdrawUriResult,\n} from \"@gnu-taler/taler-util\";\nimport { Loading, utils } from \"@gnu-taler/web-util/browser\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useComponentState } from \"./state.js\";\nimport {\n AbortedView,\n ConfirmedView,\n FailedView,\n InvalidPaytoView,\n InvalidReserveView,\n InvalidWithdrawalView,\n NeedConfirmationView,\n ReadyView,\n} from \"./views.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport interface Props {\n currency: string;\n onAuthorizationRequired: () => void;\n routeClose: RouteDefinition;\n onAbort: () => void;\n routeHere: RouteDefinition<{ wopid: string }>;\n}\n\nexport type State =\n | State.Loading\n | State.LoadingError\n | State.Ready\n | State.Failed\n | State.Aborted\n | State.Confirmed\n | State.InvalidPayto\n | State.InvalidWithdrawal\n | State.InvalidReserve\n | State.NeedConfirmation;\n\nexport namespace State {\n export interface Loading {\n status: \"loading\";\n error: undefined;\n }\n\n export interface Failed {\n status: \"failed\";\n error: TalerCoreBankErrorsByMethod<\"createWithdrawal\">;\n }\n\n export interface LoadingError {\n status: \"loading-error\";\n error: TalerError;\n }\n\n /**\n * Need to open the wallet\n */\n export interface Ready {\n status: \"ready\";\n error: undefined;\n uri: WithdrawUriResult;\n onAbort: () => Promise<\n TalerCoreBankErrorsByMethod<\"abortWithdrawalById\"> | undefined\n >;\n routeClose: RouteDefinition;\n }\n\n export interface InvalidPayto {\n status: \"invalid-payto\";\n error: undefined;\n payto: string | undefined;\n }\n export interface InvalidWithdrawal {\n status: \"invalid-withdrawal\";\n error: undefined;\n uri: string;\n }\n export interface InvalidReserve {\n status: \"invalid-reserve\";\n error: undefined;\n reserve: string | undefined;\n }\n export interface NeedConfirmation {\n status: \"need-confirmation\";\n onAuthorizationRequired: () => void;\n account: string;\n routeHere: RouteDefinition<{ wopid: string }>;\n onAbort:\n | undefined\n | (() => Promise<\n TalerCoreBankErrorsByMethod<\"abortWithdrawalById\"> | undefined\n >);\n onConfirm:\n | undefined\n | (() => Promise<\n TalerCoreBankErrorsByMethod<\"confirmWithdrawalById\"> | undefined\n >);\n error: undefined;\n id: string;\n }\n export interface Aborted {\n status: \"aborted\";\n error: undefined;\n routeClose: RouteDefinition;\n }\n export interface Confirmed {\n status: \"confirmed\";\n error: undefined;\n routeClose: RouteDefinition;\n }\n}\n\nexport interface Transaction {\n negative: boolean;\n counterpart: string;\n when: AbsoluteTime;\n amount: AmountJson | undefined;\n subject: string;\n}\n\nconst viewMapping: utils.StateViewMap<State> = {\n loading: Loading,\n failed: FailedView,\n \"invalid-payto\": InvalidPaytoView,\n \"invalid-withdrawal\": InvalidWithdrawalView,\n \"invalid-reserve\": InvalidReserveView,\n \"need-confirmation\": NeedConfirmationView,\n aborted: AbortedView,\n confirmed: ConfirmedView,\n \"loading-error\": ErrorLoadingWithDebug,\n ready: ReadyView,\n};\n\nexport const OperationState = utils.compose(\n (p: Props) => useComponentState(p),\n viewMapping,\n);\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport { Loading, utils } from \"@gnu-taler/web-util/browser\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { LoginForm } from \"../LoginForm.js\";\nimport { useComponentState } from \"./state.js\";\nimport { InvalidIbanView, ReadyView } from \"./views.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport interface Props {\n account: string;\n onAuthorizationRequired: () => void;\n onOperationCreated: (wopid: string) => void;\n onClose: () => void;\n tab: \"charge-wallet\" | \"wire-transfer\" | undefined;\n routeClose: RouteDefinition;\n routeCashout: RouteDefinition;\n routeChargeWallet: RouteDefinition;\n routeWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n routePublicAccounts: RouteDefinition;\n routeCreateWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n routeSolveSecondFactor: RouteDefinition;\n}\n\nexport type State =\n | State.Loading\n | State.LoadingError\n | State.Ready\n | State.InvalidIban\n | State.UserNotFound;\n\nexport namespace State {\n export interface Loading {\n status: \"loading\";\n error: undefined;\n }\n\n export interface LoadingError {\n status: \"loading-error\";\n error: TalerError;\n }\n\n export interface BaseInfo {\n error: undefined;\n }\n\n export interface Ready extends BaseInfo {\n status: \"ready\";\n error: undefined;\n account: string;\n tab: \"charge-wallet\" | \"wire-transfer\" | undefined;\n limit: AmountJson;\n balance: AmountJson;\n onAuthorizationRequired: () => void;\n onOperationCreated: (wopid: string) => void;\n onClose: () => void;\n routeClose: RouteDefinition;\n routeCashout: RouteDefinition;\n routeChargeWallet: RouteDefinition;\n routePublicAccounts: RouteDefinition;\n routeWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n routeCreateWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n routeOperationDetails: RouteDefinition<{ wopid: string }>;\n routeSolveSecondFactor: RouteDefinition;\n }\n\n export interface InvalidIban {\n status: \"invalid-iban\";\n error: TalerCorebankApi.AccountData;\n }\n\n export interface UserNotFound {\n status: \"login\";\n reason: \"not-found\" | \"forbidden\";\n routeRegister?: RouteDefinition;\n }\n}\n\nexport interface Transaction {\n negative: boolean;\n counterpart: string;\n when: AbsoluteTime;\n amount: AmountJson | undefined;\n subject: string;\n}\n\nconst viewMapping: utils.StateViewMap<State> = {\n loading: Loading,\n login: LoginForm,\n \"invalid-iban\": InvalidIbanView,\n \"loading-error\": ErrorLoadingWithDebug,\n ready: ReadyView,\n};\n\nexport const AccountPage = utils.compose(\n (p: Props) => useComponentState(p),\n viewMapping,\n);\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n ObservabilityEventType,\n TalerError,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Footer,\n Header,\n Loading,\n RouteDefinition,\n ToastBanner,\n notifyError,\n notifyException,\n useBankCoreApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, Fragment, VNode, h } from \"preact\";\nimport { useEffect, useErrorBoundary, useState } from \"preact/hooks\";\nimport { privatePages } from \"../Routing.js\";\nimport { useSettingsContext } from \"../context/settings.js\";\nimport { useAccountDetails } from \"../hooks/account.js\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport {\n getAllBooleanPreferences,\n getLabelForPreferences,\n usePreferences,\n} from \"../hooks/preferences.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RenderAmount } from \"./PaytoWireTransferForm.js\";\n\nconst GIT_HASH = typeof __GIT_HASH__ !== \"undefined\" ? __GIT_HASH__ : undefined;\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : undefined;\n\nexport function BankFrame({\n children,\n account,\n routeAccountDetails,\n}: {\n account?: string;\n routeAccountDetails?: RouteDefinition;\n children: ComponentChildren;\n}): VNode {\n const { i18n } = useTranslationContext();\n const session = useSessionState();\n const settings = useSettingsContext();\n const [preferences, updatePreferences] = usePreferences();\n const [, , resetBankState] = useBankState();\n\n const [error, resetError] = useErrorBoundary();\n\n useEffect(() => {\n if (error) {\n if (error instanceof Error) {\n console.log(\"Internal error, please report\", error);\n notifyException(i18n.str`Internal error, please report.`, error);\n } else {\n console.log(\"Internal error, please report\", error);\n notifyError(\n i18n.str`Internal error, please report.`,\n String(error) as TranslatedString,\n );\n }\n resetError();\n }\n }, [error]);\n\n return (\n <div\n class=\"min-h-full flex flex-col m-0 bg-slate-200\"\n style=\"min-height: 100vh;\"\n >\n <div class=\"bg-indigo-600 pb-32\">\n <Header\n title=\"Bank\"\n iconLinkURL={settings.iconLinkURL ?? \"#\"}\n profileURL={routeAccountDetails?.url({})}\n notificationURL={\n preferences.showDebugInfo\n ? privatePages.notifications.url({})\n : undefined\n }\n onLogout={\n session.state.status !== \"loggedIn\"\n ? undefined\n : () => {\n session.logOut();\n resetBankState();\n }\n }\n sites={\n !settings.topNavSites ? [] : Object.entries(settings.topNavSites)\n }\n supportedLangs={[\"en\", \"es\", \"de\"]}\n >\n <li>\n <div class=\"text-xs font-semibold leading-6 text-gray-400\">\n <i18n.Translate>Preferences</i18n.Translate>\n </div>\n <ul role=\"list\" class=\"space-y-4\">\n {getAllBooleanPreferences().map((set) => {\n const isOn: boolean = !!preferences[set];\n return (\n <li key={set} class=\"pl-2\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n {getLabelForPreferences(set, i18n)}\n </span>\n </span>\n <button\n type=\"button\"\n name={`${set} switch`}\n data-enabled={isOn}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n updatePreferences(set, !isOn);\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={isOn}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </li>\n );\n })}\n </ul>\n </li>\n </Header>\n </div>\n\n <div class=\"fixed z-20 top-14 w-full\">\n <div class=\"mx-auto w-4/5\">\n <ToastBanner />\n {/* <Attention type=\"success\" title={\"hola\" as TranslatedString} onClose={() => { }} /> */}\n </div>\n </div>\n\n <main class=\"-mt-32 flex-1\">\n {account && routeAccountDetails && (\n <header class=\"py-6 bg-indigo-600\">\n <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n <h1 class=\" flex flex-wrap items-center justify-between sm:flex-nowrap\">\n <span class=\"text-2xl font-bold tracking-tight text-white\">\n <WelcomeAccount\n account={account}\n routeAccountDetails={routeAccountDetails}\n />\n </span>\n <span class=\"text-2xl font-bold tracking-tight text-white\">\n <AccountBalance account={account} />\n </span>\n </h1>\n </div>\n </header>\n )}\n\n <div class=\"mx-auto max-w-7xl px-4 pb-4 sm:px-6 lg:px-8\">\n <div class=\"rounded-lg bg-white px-5 py-6 shadow sm:px-6\">\n {children}\n </div>\n </div>\n </main>\n\n <AppActivity />\n\n <Footer\n testingUrlKey=\"corebank-api-base-url\"\n GIT_HASH={GIT_HASH}\n VERSION={VERSION}\n />\n </div>\n );\n}\n\nfunction Wait({ class: clazz }: { class?: string }): VNode {\n return (\n <Fragment>\n <style>{`\n .animated-loader {\n display: inline-block;\n --b: 5px; \n border-radius: 50%;\n aspect-ratio: 1;\n padding: 1px;\n background: conic-gradient(#0000 10%,#4f46e5) content-box;\n -webkit-mask:\n repeating-conic-gradient(#0000 0deg,#000 1deg 20deg,#0000 21deg 36deg),\n radial-gradient(farthest-side,#0000 calc(100% - var(--b) - 1px),#000 calc(100% - var(--b)));\n -webkit-mask-composite: destination-in;\n mask-composite: intersect;\n animation:spinning-loader 1s infinite steps(10);\n }\n @keyframes spinning-loader {to{transform: rotate(1turn)}} \n `}</style>\n <div class={`animated-loader ${clazz}`} />\n </Fragment>\n );\n}\n\nfunction AppActivity(): VNode {\n const [lastEvent, setLastEvent] = useState<{\n url: string;\n id: string;\n when: AbsoluteTime;\n }>();\n const [status, setStatus] = useState<\"ok\" | \"fail\">();\n const d = useBankCoreApiContext();\n const onBackendActivity = !d ? undefined : d.onActivity;\n const cancelRequest = !d ? undefined : d.cancelRequest;\n const [pref] = usePreferences();\n useEffect(() => {\n // console.log(\"ASDASDS\", onBackendActivity)\n if (!pref.showDebugInfo) return;\n if (!onBackendActivity) return;\n return onBackendActivity((ev) => {\n switch (ev.type) {\n case ObservabilityEventType.HttpFetchStart: {\n setLastEvent(ev);\n setStatus(undefined);\n return;\n }\n case ObservabilityEventType.HttpFetchFinishError: {\n setStatus(\"fail\");\n return;\n }\n case ObservabilityEventType.HttpFetchFinishSuccess: {\n setStatus(\"ok\");\n return;\n }\n /**\n * all of this are ignored\n */\n case ObservabilityEventType.DbQueryStart:\n case ObservabilityEventType.DbQueryFinishSuccess:\n case ObservabilityEventType.DbQueryFinishError:\n case ObservabilityEventType.RequestStart:\n case ObservabilityEventType.RequestFinishSuccess:\n case ObservabilityEventType.RequestFinishError:\n case ObservabilityEventType.TaskStart:\n case ObservabilityEventType.TaskStop:\n case ObservabilityEventType.TaskReset:\n case ObservabilityEventType.ShepherdTaskResult:\n case ObservabilityEventType.DeclareTaskDependency:\n case ObservabilityEventType.CryptoStart:\n case ObservabilityEventType.CryptoFinishSuccess:\n case ObservabilityEventType.CryptoFinishError:\n case ObservabilityEventType.Message:\n return;\n default: {\n assertUnreachable(ev);\n }\n }\n });\n });\n if (!pref.showDebugInfo || !lastEvent) return <Fragment />;\n return (\n <div\n data-status={status}\n class=\"fixed z-20 bottom-0 w-full ease-in-out delay-1000 transition-transform data-[status=ok]:scale-y-0\"\n >\n <div\n data-status={status}\n class=\"mx-auto w-4/5 center flex p-1 bg-gray-300 m-1 data-[status=fail]:bg-red-200 data-[status=ok]:bg-green-200 \"\n >\n {!status ? <Wait class=\"w-6 h-6\" /> : <div class=\"w-6 h-6\" />}\n\n <p class=\"ml-2 my-auto text-sm text-gray-500\">{lastEvent.url}</p>\n {!status ? (\n <button\n onClick={() => {\n if (cancelRequest) cancelRequest(lastEvent.id);\n }}\n >\n cancel\n </button>\n ) : undefined}\n </div>\n </div>\n );\n}\n\nfunction WelcomeAccount({\n account,\n routeAccountDetails,\n}: {\n account: string;\n routeAccountDetails: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const result = useAccountDetails(account);\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <div />;\n }\n if (result.type === \"fail\") {\n return (\n <a\n name=\"account details\"\n href={routeAccountDetails.url({})}\n class=\"underline underline-offset-2\"\n >\n <i18n.Translate>Welcome</i18n.Translate>\n </a>\n );\n }\n return (\n <a\n name=\"account details\"\n href={routeAccountDetails.url({})}\n class=\"underline underline-offset-2\"\n >\n <i18n.Translate>\n Welcome, <span class=\"whitespace-nowrap\">{result.body.name}</span>\n </i18n.Translate>\n </a>\n );\n}\n\nfunction AccountBalance({ account }: { account: string }): VNode {\n const result = useAccountDetails(account);\n const { config } = useBankCoreApiContext();\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <div />;\n }\n if (result.type === \"fail\") return <div />;\n\n return (\n <RenderAmount\n value={Amounts.parseOrThrow(result.body.balance.amount)}\n negative={result.body.balance.credit_debit_indicator === \"debit\"}\n spec={config.currency_specification}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError } from \"@gnu-taler/taler-util\";\nimport { Loading, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Transactions } from \"../components/Transactions/index.js\";\nimport { usePublicAccounts } from \"../hooks/account.js\";\n\n/**\n * Show histories of public accounts.\n */\nexport function PublicHistoriesPage(): VNode {\n const { i18n } = useTranslationContext();\n\n // TODO: implemented filter by account name\n const result = usePublicAccounts(undefined);\n const firstAccount =\n result && !(result instanceof TalerError) && result.body.length > 0\n ? result.body[0].username\n : undefined;\n\n const [showAccount, setShowAccount] = useState(firstAccount);\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <Loading />;\n }\n\n const { body: accountList } = result;\n\n const txs: Record<string, h.JSX.Element> = {};\n const accountsBar = [];\n\n // Ask story of all the public accounts.\n for (const account of accountList) {\n const isSelected = account.username == showAccount;\n accountsBar.push(\n <li\n class={\n isSelected\n ? \"pure-menu-selected pure-menu-item\"\n : \"pure-menu-item pure-menu\"\n }\n >\n <a\n href=\"#\"\n name={`show account ${account.username}`}\n class=\"pure-menu-link\"\n onClick={() => setShowAccount(account.username)}\n >\n {account.username}\n </a>\n </li>,\n );\n txs[account.username] = (\n <Transactions\n account={account.username}\n routeCreateWireTransfer={undefined}\n />\n );\n }\n\n return (\n <Fragment>\n <h1 class=\"nav\">{i18n.str`History of public accounts`}</h1>\n <section id=\"main\">\n <article>\n <div class=\"pure-menu pure-menu-horizontal\" name=\"accountMenu\">\n <ul class=\"pure-menu-list\">{accountsBar}</ul>\n {typeof showAccount !== \"undefined\" ? (\n txs[showAccount]\n ) : (\n <p>No public transactions found.</p>\n )}\n <br />\n </div>\n </article>\n </section>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useNotifications } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { Time } from \"../components/Time.js\";\n\nexport function ShowNotifications(): VNode {\n const ns = useNotifications();\n if (!ns.length) {\n return <div>no notifications</div>;\n }\n return (\n <div>\n <p>Notifications</p>\n <table>\n <thead></thead>\n <tbody>\n {ns.map((n, idx) => {\n return (\n <tr key={idx}>\n <td>\n <Time\n timestamp={n.message.when}\n format=\"dd/MM/yyyy HH:mm:ss\"\n />\n </td>\n <td>{n.message.title}</td>\n <td>\n {n.message.type === \"error\"\n ? n.message.description\n : undefined}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {/* <ToastBanner all /> */}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n Duration,\n HttpStatusCode,\n TalerCorebankApi,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n useLocalNotification,\n useNavigationContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../components/ErrorLoadingWithDebug.js\";\nimport { Time } from \"../components/Time.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useWithdrawalDetails } from \"../hooks/account.js\";\nimport { ChallengeInProgess, useBankState } from \"../hooks/bank-state.js\";\nimport { useConversionInfo } from \"../hooks/regional.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../utils.js\";\nimport { RenderAmount } from \"./PaytoWireTransferForm.js\";\nimport { OperationNotFound } from \"./WithdrawalQRCode.js\";\nimport { IdempotencyRetry } from \"../../../taler-util/lib/http-client/utils.js\";\n\nconst TAN_PREFIX = \"T-\";\nconst TAN_REGEX = /^([Tt](-)?)?[0-9]*$/;\nexport function SolveChallengePage({\n onChallengeCompleted,\n routeClose,\n}: {\n onChallengeCompleted: () => void;\n routeClose: RouteDefinition;\n}): VNode {\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const { i18n } = useTranslationContext();\n const [bankState, updateBankState] = useBankState();\n const [code, setCode] = useState<string | undefined>(undefined);\n const [notification, notify, handleError] = useLocalNotification();\n const { state } = useSessionState();\n const creds = state.status !== \"loggedIn\" ? undefined : state;\n const { navigateTo } = useNavigationContext();\n\n if (!bankState.currentChallenge) {\n return (\n <div>\n <span>no challenge to solve </span>\n <a\n href={routeClose.url({})}\n name=\"close\"\n class=\"inline-flex items-center rounded-md bg-red-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-500\"\n >\n <i18n.Translate>Continue</i18n.Translate>\n </a>\n </div>\n );\n }\n\n const ch = bankState.currentChallenge;\n const errors = undefinedIfEmpty({\n code: !code\n ? i18n.str`Required`\n : !TAN_REGEX.test(code)\n ? i18n.str`Confirmation codes are numerical, possibly beginning with 'T-.'`\n : undefined,\n });\n\n async function startChallenge() {\n if (!creds) return;\n await handleError(async () => {\n const resp = await api.sendChallenge(creds, ch.id);\n if (resp.type === \"ok\") {\n const newCh = structuredClone(ch);\n newCh.sent = AbsoluteTime.now();\n newCh.info = resp.body;\n updateBankState(\"currentChallenge\", newCh);\n } else {\n const newCh = structuredClone(ch);\n newCh.sent = AbsoluteTime.now();\n newCh.info = undefined;\n updateBankState(\"currentChallenge\", newCh);\n switch (resp.case) {\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Cashout not found. It may be also mean that it was already aborted.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`Cashout not found. It may be also mean that it was already aborted.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return notify({\n type: \"error\",\n title: i18n.str`Cashout not found. It may be also mean that it was already aborted.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n async function completeChallenge() {\n if (!creds || !code) return;\n const tan = code.toUpperCase().startsWith(TAN_PREFIX)\n ? code.substring(TAN_PREFIX.length)\n : code;\n await handleError(async () => {\n {\n const resp = await api.confirmChallenge(creds, ch.id, { tan });\n if (resp.type === \"fail\") {\n setCode(\"\");\n switch (resp.case) {\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Challenge not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`This user is not authorized to complete this challenge.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.TooManyRequests:\n return notify({\n type: \"error\",\n title: i18n.str`Too many attempts, try another code.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:\n return notify({\n type: \"error\",\n title: i18n.str`The confirmation code is wrong, try again.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:\n return notify({\n type: \"error\",\n title: i18n.str`The operation expired.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n default:\n assertUnreachable(resp);\n }\n }\n }\n {\n const resp = await (async (ch: ChallengeInProgess) => {\n switch (ch.operation) {\n case \"delete-account\":\n return await api.deleteAccount(creds, ch.id);\n case \"update-account\":\n return await api.updateAccount(creds, ch.request, ch.id);\n case \"update-password\":\n return await api.updatePassword(creds, ch.request, ch.id);\n case \"create-transaction\":\n return await api.createTransaction(creds, ch.request, undefined, ch.id);\n case \"confirm-withdrawal\":\n return await api.confirmWithdrawalById(creds, ch.request, ch.id);\n case \"create-cashout\":\n return await api.createCashout(creds, ch.request, ch.id);\n default:\n assertUnreachable(ch);\n }\n })(ch);\n\n if (resp.type === \"fail\") {\n if (resp.case !== HttpStatusCode.Accepted) {\n return notify({\n type: \"error\",\n title: i18n.str`The operation failed.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n // another challenge required, save the request and the ID\n // @ts-expect-error no need to check the type of request, since it will be the same as the previous request\n updateBankState(\"currentChallenge\", {\n operation: ch.operation,\n id: String(resp.body.challenge_id),\n location: ch.location,\n sent: AbsoluteTime.never(),\n request: ch.request,\n });\n return notify({\n type: \"info\",\n title: i18n.str`The operation needs another confirmation to complete.`,\n when: AbsoluteTime.now(),\n });\n }\n updateBankState(\"currentChallenge\", undefined);\n return onChallengeCompleted();\n }\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <span\n class=\"text-sm text-black font-semibold leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Confirm the operation</i18n.Translate>\n </span>\n </h2>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n This operation is protected with second factor authentication. In\n order to complete it we need to verify your identity using the\n authentication channel you provided.\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\">\n <ChallengeDetails\n challenge={bankState.currentChallenge}\n onStart={startChallenge}\n onCancel={() => {\n updateBankState(\"currentChallenge\", undefined);\n navigateTo(ch.location);\n }}\n />\n {ch.info && (\n <div class=\"mt-2\">\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-4\">\n <label for=\"withdraw-amount\">\n <i18n.Translate>Enter the confirmation code</i18n.Translate>\n </label>\n <div class=\"mt-2\">\n <div class=\"relative rounded-md shadow-sm\">\n <input\n type=\"text\"\n // class=\"block w-full rounded-md border-0 py-1.5 pl-16 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n aria-describedby=\"answer\"\n autoFocus\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n value={code ?? \"\"}\n required\n onPaste={(e) => {\n e.preventDefault();\n const pasted = e.clipboardData?.getData(\"text/plain\");\n if (!pasted) return;\n if (pasted.toUpperCase().startsWith(TAN_PREFIX)) {\n const sub = pasted.substring(TAN_PREFIX.length);\n setCode(sub);\n return;\n }\n setCode(pasted);\n }}\n name=\"answer\"\n id=\"answer\"\n autocomplete=\"off\"\n onChange={(e): void => {\n setCode(e.currentTarget.value);\n }}\n />\n </div>\n <ShowInputErrorLabel\n message={errors?.code}\n isDirty={code !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n {((ch: TalerCorebankApi.TanChannel): VNode => {\n switch (ch) {\n case TalerCorebankApi.TanChannel.SMS:\n return (\n <i18n.Translate>\n You should have received a code in your phone.\n </i18n.Translate>\n );\n case TalerCorebankApi.TanChannel.EMAIL:\n return (\n <i18n.Translate>\n You should have received a code in your email.\n </i18n.Translate>\n );\n default:\n assertUnreachable(ch);\n }\n })(ch.info.tan_channel)}\n </p>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n The confirmation code starts with \"{TAN_PREFIX}\" followed\n by numbers.\n </i18n.Translate>\n </p>\n </div>\n <div class=\"flex items-center justify-between border-gray-900/10 px-4 py-4 \">\n <div />\n <button\n type=\"submit\"\n name=\"confirm\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n onClick={(e) => {\n completeChallenge();\n e.preventDefault();\n }}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n )}\n </div>\n </div>\n </Fragment>\n );\n}\n\nfunction ChallengeDetails({\n challenge,\n onStart,\n onCancel,\n}: {\n challenge: ChallengeInProgess;\n onStart: () => void;\n onCancel: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n\n const firstTime = AbsoluteTime.isNever(challenge.sent);\n useEffect(() => {\n if (firstTime) {\n onStart();\n }\n }, []);\n\n const subtitle = ((op): TranslatedString => {\n switch (op) {\n case \"delete-account\":\n return i18n.str`Removing account`;\n case \"update-account\":\n return i18n.str`Updating account values`;\n case \"update-password\":\n return i18n.str`Updating password`;\n case \"create-transaction\":\n return i18n.str`Making a wire transfer`;\n case \"confirm-withdrawal\":\n return i18n.str`Confirming withdrawal`;\n case \"create-cashout\":\n return i18n.str`Making a cashout`;\n }\n })(challenge.operation);\n\n return (\n <div class=\"px-4 mt-4 \">\n <div class=\"w-full\">\n <div class=\"border-gray-100\">\n <h2 class=\"text-base font-semibold leading-10 text-gray-900\">\n <span class=\" text-black font-semibold leading-6 \">\n <i18n.Translate>Operation:</i18n.Translate>\n </span>{\" \"}\n &nbsp;\n <span class=\" text-black font-normal leading-6 \">{subtitle}</span>\n </h2>\n <dl class=\"divide-y divide-gray-100\">\n {((): VNode => {\n switch (challenge.operation) {\n case \"delete-account\":\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Type</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <i18n.Translate>\n Updating account settings\n </i18n.Translate>\n </dd>\n </div>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Account</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request}\n </dd>\n </div>\n </Fragment>\n );\n case \"create-transaction\": {\n const payto = parsePaytoUri(challenge.request.payto_uri)!;\n return (\n <Fragment>\n {challenge.request.amount && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Amount</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(\n challenge.request.amount,\n )}\n spec={config.currency_specification}\n />\n </dd>\n </div>\n )}\n {payto.isKnown && payto.targetType === \"iban\" && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>To account</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {payto.iban}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n case \"confirm-withdrawal\":\n return <ShowWithdrawalDetails id={challenge.request} />;\n case \"create-cashout\": {\n return <ShowCashoutDetails request={challenge.request} />;\n }\n case \"update-account\": {\n return (\n <Fragment>\n {challenge.request.cashout_payto_uri !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Cashout account</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.cashout_payto_uri}\n </dd>\n </div>\n )}\n {challenge.request.contact_data?.email !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Email</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.contact_data?.email}\n </dd>\n </div>\n )}\n {challenge.request.contact_data?.phone !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Phone</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.contact_data?.phone}\n </dd>\n </div>\n )}\n {challenge.request.debit_threshold !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Debit threshold</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(\n challenge.request.debit_threshold,\n )}\n spec={config.currency_specification}\n />\n </dd>\n </div>\n )}\n {challenge.request.is_public !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Is this account public?\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.is_public\n ? i18n.str`Enable`\n : i18n.str`Disable`}\n </dd>\n </div>\n )}\n {challenge.request.name !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Name</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.name}\n </dd>\n </div>\n )}\n {challenge.request.tan_channel !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>\n Authentication channel\n </i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.tan_channel ?? i18n.str`Remove`}\n </dd>\n </div>\n )}\n </Fragment>\n );\n }\n case \"update-password\": {\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>New password</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.request.new_password}\n </dd>\n </div>\n </Fragment>\n );\n }\n default:\n assertUnreachable(challenge);\n }\n })()}\n </dl>\n {challenge.info && (\n <h2 class=\"text-base font-semibold leading-7 text-gray-900 mt-4\">\n <span\n class=\"text-sm text-black font-semibold leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Challenge details</i18n.Translate>\n </span>\n </h2>\n )}\n <dl class=\"divide-y divide-gray-100\">\n {challenge.sent.t_ms !== \"never\" && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Sent at</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <Time\n format=\"dd/MM/yyyy HH:mm:ss\"\n timestamp={challenge.sent}\n relative={Duration.fromSpec({ days: 1 })}\n />\n </dd>\n </div>\n )}\n {challenge.info && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n {((ch: TalerCorebankApi.TanChannel): VNode => {\n switch (ch) {\n case TalerCorebankApi.TanChannel.SMS:\n return <i18n.Translate>To phone</i18n.Translate>;\n case TalerCorebankApi.TanChannel.EMAIL:\n return <i18n.Translate>To email</i18n.Translate>;\n default:\n assertUnreachable(ch);\n }\n })(challenge.info.tan_channel)}\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {challenge.info.tan_info}\n </dd>\n </div>\n )}\n </dl>\n </div>\n <div class=\"mt-6 mb-4 flex justify-between\">\n <button\n type=\"button\"\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n onClick={onCancel}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n {challenge.info ? (\n <button\n type=\"submit\"\n name=\"send again\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n onClick={(e) => {\n onStart();\n e.preventDefault();\n }}\n >\n <i18n.Translate>Send again</i18n.Translate>\n </button>\n ) : (\n <div> sending code ...</div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction ShowWithdrawalDetails({ id }: { id: string }): VNode {\n const details = useWithdrawalDetails(id);\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n if (!details) {\n return <Loading />;\n }\n if (details instanceof TalerError) {\n return <ErrorLoadingWithDebug error={details} />;\n }\n if (details.type === \"fail\") {\n switch (details.case) {\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.NotFound:\n return <OperationNotFound routeClose={undefined} />;\n default:\n assertUnreachable(details);\n }\n }\n\n return (\n <Fragment>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">Amount</dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(details.body.amount)}\n spec={config.currency_specification}\n />\n </dd>\n </div>\n {details.body.selected_reserve_pub !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Withdraw id</i18n.Translate>\n </dt>\n <dd\n class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\"\n title={details.body.selected_reserve_pub}\n >\n {details.body.selected_reserve_pub.substring(0, 16)}...\n </dd>\n </div>\n )}\n {details.body.selected_exchange_account !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>To account</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {details.body.selected_exchange_account}\n </dd>\n </div>\n )}\n </Fragment>\n );\n}\n\nfunction ShowCashoutDetails({\n request,\n}: {\n request: TalerCorebankApi.CashoutRequest;\n}): VNode {\n const { i18n } = useTranslationContext();\n const info = useConversionInfo();\n if (!info) {\n return <Loading />;\n }\n\n if (info instanceof TalerError) {\n return <ErrorLoadingWithDebug error={info} />;\n }\n if (info.type === \"fail\") {\n switch (info.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(info.case);\n }\n }\n\n return (\n <Fragment>\n {request.subject !== undefined && (\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">\n <i18n.Translate>Subject</i18n.Translate>\n </dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n {request.subject}\n </dd>\n </div>\n )}\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">Debit</dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(request.amount_credit)}\n spec={info.body.regional_currency_specification}\n />\n </dd>\n </div>\n <div class=\"px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0\">\n <dt class=\"text-sm font-medium leading-6 text-gray-900\">Credit</dt>\n <dd class=\"mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0\">\n <RenderAmount\n value={Amounts.parseOrThrow(request.amount_credit)}\n spec={info.body.fiat_currency_specification}\n />\n </dd>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { useSessionState } from \"./session.js\";\n\nimport {\n AbsoluteTime,\n AccessToken,\n AmountJson,\n Amounts,\n HttpStatusCode,\n OperationOk,\n TalerBankConversionResultByMethod,\n TalerCoreBankErrorsByMethod,\n TalerCoreBankResultByMethod,\n TalerCorebankApi,\n TalerError,\n TalerHttpError,\n opFixedSuccess,\n} from \"@gnu-taler/taler-util\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useState } from \"preact/hooks\";\nimport _useSWR, { SWRHook, mutate } from \"swr\";\nimport { buildPaginatedResult } from \"./account.js\";\nimport { PAGINATED_LIST_REQUEST } from \"../utils.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport type TransferCalculation =\n | {\n debit: AmountJson;\n credit: AmountJson;\n beforeFee: AmountJson;\n }\n | \"amount-is-too-small\";\ntype EstimatorFunction = (\n amount: AmountJson,\n fee: AmountJson,\n) => Promise<TransferCalculation>;\n\ntype ConversionEstimators = {\n estimateByCredit: EstimatorFunction;\n estimateByDebit: EstimatorFunction;\n};\n\nexport function revalidateConversionInfo() {\n return mutate(\n (key) =>\n Array.isArray(key) && key[key.length - 1] === \"getConversionInfoAPI\",\n );\n}\nexport function useConversionInfo() {\n const {\n lib: { conversion },\n config,\n } = useBankCoreApiContext();\n\n async function fetcher() {\n return await conversion.getConfig();\n }\n const { data, error } = useSWR<\n TalerBankConversionResultByMethod<\"getConfig\">,\n TalerHttpError\n >(!config.allow_conversion ? undefined : [\"getConversionInfoAPI\"], 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 keepPreviousData: true,\n });\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function useCashinEstimator(): ConversionEstimators {\n const {\n lib: { conversion },\n } = useBankCoreApiContext();\n return {\n estimateByCredit: async (fiatAmount, fee) => {\n const resp = await conversion.getCashinRate({\n credit: fiatAmount,\n });\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n return \"amount-is-too-small\";\n }\n // this below can't happen\n case HttpStatusCode.NotImplemented: //it should not be able to call this function\n case HttpStatusCode.BadRequest: //we are using just one parameter\n throw TalerError.fromDetail(resp.detail.code, {}, resp.detail.hint);\n }\n }\n const credit = Amounts.parseOrThrow(resp.body.amount_credit);\n const debit = Amounts.parseOrThrow(resp.body.amount_debit);\n const beforeFee = Amounts.sub(credit, fee).amount;\n\n return {\n debit,\n beforeFee,\n credit,\n };\n },\n estimateByDebit: async (regionalAmount, fee) => {\n const resp = await conversion.getCashinRate({\n debit: regionalAmount,\n });\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n return \"amount-is-too-small\";\n }\n // this below can't happen\n case HttpStatusCode.NotImplemented: //it should not be able to call this function\n case HttpStatusCode.BadRequest: //we are using just one parameter\n throw TalerError.fromDetail(resp.detail.code, {}, resp.detail.hint);\n }\n }\n const credit = Amounts.parseOrThrow(resp.body.amount_credit);\n const debit = Amounts.parseOrThrow(resp.body.amount_debit);\n const beforeFee = Amounts.add(credit, fee).amount;\n\n return {\n debit,\n beforeFee,\n credit,\n };\n },\n };\n}\n\nexport function useCashoutEstimator(): ConversionEstimators {\n const {\n lib: { conversion },\n } = useBankCoreApiContext();\n return {\n estimateByCredit: async (fiatAmount, fee) => {\n const resp = await conversion.getCashoutRate({\n credit: fiatAmount,\n });\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n return \"amount-is-too-small\";\n }\n // this below can't happen\n case HttpStatusCode.NotImplemented: //it should not be able to call this function\n case HttpStatusCode.BadRequest: //we are using just one parameter\n throw TalerError.fromDetail(resp.detail.code, {}, resp.detail.hint);\n }\n }\n const credit = Amounts.parseOrThrow(resp.body.amount_credit);\n const debit = Amounts.parseOrThrow(resp.body.amount_debit);\n const beforeFee = Amounts.sub(credit, fee).amount;\n\n return {\n debit,\n beforeFee,\n credit,\n };\n },\n estimateByDebit: async (regionalAmount, fee) => {\n const resp = await conversion.getCashoutRate({\n debit: regionalAmount,\n });\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.Conflict: {\n return \"amount-is-too-small\";\n }\n // this below can't happen\n case HttpStatusCode.NotImplemented: //it should not be able to call this function\n case HttpStatusCode.BadRequest: //we are using just one parameter\n throw TalerError.fromDetail(resp.detail.code, {}, resp.detail.hint);\n }\n }\n const credit = Amounts.parseOrThrow(resp.body.amount_credit);\n const debit = Amounts.parseOrThrow(resp.body.amount_debit);\n const beforeFee = Amounts.add(credit, fee).amount;\n\n return {\n debit,\n beforeFee,\n credit,\n };\n },\n };\n}\n\n/**\n * @deprecated use useCashoutEstimator\n */\nexport function useEstimator(): ConversionEstimators {\n return useCashoutEstimator();\n}\n\nexport async function revalidateBusinessAccounts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getAccounts\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useBusinessAccounts() {\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const [offset, setOffset] = useState<number | undefined>();\n\n function fetcher([token, aid]: [AccessToken, number]) {\n // FIXME: add account name filter\n return api.getAccounts(\n token,\n {},\n {\n limit: PAGINATED_LIST_REQUEST,\n offset: aid ? String(aid) : undefined,\n order: \"asc\",\n },\n );\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getAccounts\">,\n TalerHttpError\n >([token, offset ?? 0, \"getAccounts\"], 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 keepPreviousData: true,\n });\n\n if (error) return error;\n if (data === undefined) return undefined;\n if (data.type !== \"ok\") return data;\n\n //TODO: row_id should not be optional\n return buildPaginatedResult(\n data.body.accounts,\n offset,\n setOffset,\n (d) => d.row_id ?? 0,\n );\n}\n\ntype CashoutWithId = TalerCorebankApi.CashoutStatusResponse & { id: number };\nfunction notUndefined(c: CashoutWithId | undefined): c is CashoutWithId {\n return c !== undefined;\n}\nexport function revalidateOnePendingCashouts() {\n return mutate(\n (key) =>\n Array.isArray(key) && key[key.length - 1] === \"useOnePendingCashouts\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useOnePendingCashouts(account: string) {\n const { state: credentials } = useSessionState();\n const {\n lib: { bank: api },\n config,\n } = useBankCoreApiContext();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n\n async function fetcher([username, token]: [string, AccessToken]) {\n const list = await api.getAccountCashouts({ username, token });\n if (list.type !== \"ok\") {\n return list;\n }\n const pendingCashout =\n list.body.cashouts.length > 0 ? list.body.cashouts[0] : undefined;\n if (!pendingCashout) return opFixedSuccess(undefined);\n const cashoutInfo = await api.getCashoutById(\n { username, token },\n pendingCashout.cashout_id,\n );\n if (cashoutInfo.type !== \"ok\") {\n return cashoutInfo;\n }\n return opFixedSuccess({\n ...cashoutInfo.body,\n id: pendingCashout.cashout_id,\n });\n }\n\n const { data, error } = useSWR<\n | OperationOk<CashoutWithId | undefined>\n | TalerCoreBankErrorsByMethod<\"getAccountCashouts\">\n | TalerCoreBankErrorsByMethod<\"getCashoutById\">,\n TalerHttpError\n >(\n !config.allow_conversion\n ? undefined\n : [account, token, \"useOnePendingCashouts\"],\n fetcher,\n {\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 keepPreviousData: true,\n },\n );\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateCashouts() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"useCashouts\",\n );\n}\nexport function useCashouts(account: string) {\n const { state: credentials } = useSessionState();\n const {\n lib: { bank: api },\n config,\n } = useBankCoreApiContext();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n\n async function fetcher([username, token]: [string, AccessToken]) {\n const list = await api.getAccountCashouts({ username, token });\n if (list.type !== \"ok\") {\n return list;\n }\n const all: Array<CashoutWithId | undefined> = await Promise.all(\n list.body.cashouts.map(async (c) => {\n const r = await api.getCashoutById({ username, token }, c.cashout_id);\n if (r.type === \"fail\") {\n return undefined;\n }\n return { ...r.body, id: c.cashout_id };\n }),\n );\n const cashouts = all.filter(notUndefined);\n return { type: \"ok\" as const, body: { cashouts } };\n }\n const { data, error } = useSWR<\n | OperationOk<{ cashouts: CashoutWithId[] }>\n | TalerCoreBankErrorsByMethod<\"getAccountCashouts\">,\n TalerHttpError\n >(\n !config.allow_conversion ? undefined : [account, token, \"useCashouts\"],\n fetcher,\n {\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 keepPreviousData: true,\n },\n );\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n\nexport function revalidateCashoutDetails() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"getCashoutById\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useCashoutDetails(cashoutId: number | undefined) {\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n async function fetcher([username, token, id]: [string, AccessToken, number]) {\n return api.getCashoutById({ username, token }, id);\n }\n\n const { data, error } = useSWR<\n TalerCoreBankResultByMethod<\"getCashoutById\">,\n TalerHttpError\n >(\n cashoutId === undefined\n ? undefined\n : [creds?.username, creds?.token, cashoutId, \"getCashoutById\"],\n fetcher,\n {\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 keepPreviousData: true,\n },\n );\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\nexport type MonitorMetrics = {\n lastHour: TalerCoreBankResultByMethod<\"getMonitor\">;\n lastDay: TalerCoreBankResultByMethod<\"getMonitor\">;\n lastMonth: TalerCoreBankResultByMethod<\"getMonitor\">;\n};\n\nexport type LastMonitor = {\n current: TalerCoreBankResultByMethod<\"getMonitor\">;\n previous: TalerCoreBankResultByMethod<\"getMonitor\">;\n};\nexport function revalidateLastMonitorInfo() {\n return mutate(\n (key) => Array.isArray(key) && key[key.length - 1] === \"useLastMonitorInfo\",\n undefined,\n { revalidate: true },\n );\n}\nexport function useLastMonitorInfo(\n currentMoment: AbsoluteTime,\n previousMoment: AbsoluteTime,\n timeframe: TalerCorebankApi.MonitorTimeframeParam,\n) {\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n\n async function fetcher([token, timeframe]: [\n AccessToken,\n TalerCorebankApi.MonitorTimeframeParam,\n ]) {\n const [current, previous] = await Promise.all([\n api.getMonitor(token, { timeframe, date: currentMoment }),\n api.getMonitor(token, { timeframe, date: previousMoment }),\n ]);\n return {\n current,\n previous,\n };\n }\n\n const { data, error } = useSWR<LastMonitor, TalerHttpError>(\n !token ? undefined : [token, timeframe, \"useLastMonitorInfo\"],\n fetcher,\n {\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 keepPreviousData: true,\n },\n );\n\n if (data) return data;\n if (error) return error;\n return undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerError,\n WithdrawUriResult,\n assertUnreachable,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n notifyInfo,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { ErrorLoadingWithDebug } from \"../components/ErrorLoadingWithDebug.js\";\nimport { useWithdrawalDetails } from \"../hooks/account.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { QrCodeSection } from \"./QrCodeSection.js\";\nimport { WithdrawalConfirmationQuestion } from \"./WithdrawalConfirmationQuestion.js\";\n\ninterface Props {\n withdrawUri: WithdrawUriResult;\n onOperationAborted: () => void;\n routeClose: RouteDefinition;\n routeWithdrawalDetails: RouteDefinition<{ wopid: string }>;\n onAuthorizationRequired: () => void;\n}\n/**\n * Offer the QR code (and a clickable taler://-link) to\n * permit the passing of exchange and reserve details to\n * the bank. Poll the backend until such operation is done.\n */\nexport function WithdrawalQRCode({\n withdrawUri,\n onOperationAborted,\n routeClose,\n routeWithdrawalDetails,\n onAuthorizationRequired,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const result = useWithdrawalDetails(withdrawUri.withdrawalOperationId);\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.NotFound:\n return <OperationNotFound routeClose={routeClose} />;\n default:\n assertUnreachable(result);\n }\n }\n\n const { body: data } = result;\n\n if (data.status === \"aborted\") {\n return (\n <div class=\"relative ml-auto mr-auto transform overflow-hidden rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-sm sm:p-6\">\n <div>\n <div class=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-yellow-100\">\n <svg\n class=\"h-5 w-5 text-yellow-400\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </div>\n <div class=\"mt-3 text-center sm:mt-5\">\n <h3\n class=\"text-base font-semibold leading-6 text-gray-900\"\n id=\"modal-title\"\n >\n <i18n.Translate>Operation aborted</i18n.Translate>\n </h3>\n <div class=\"mt-2\">\n <p class=\"text-sm text-gray-500\">\n <i18n.Translate>\n The wire transfer to the payment provider's account was\n aborted from somewhere else, your balance was not affected.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n name=\"continue\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Continue</i18n.Translate>\n </a>\n </div>\n </div>\n );\n }\n\n if (data.status === \"confirmed\") {\n return (\n <div class=\"relative ml-auto mr-auto transform overflow-hidden rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-sm sm:p-6\">\n <div>\n <div class=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-100\">\n <svg\n class=\"h-6 w-6 text-green-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4.5 12.75l6 6 9-13.5\"\n />\n </svg>\n </div>\n <div class=\"mt-3 text-center sm:mt-5\">\n <h3\n class=\"text-base font-semibold leading-6 text-gray-900\"\n id=\"modal-title\"\n >\n <i18n.Translate>Withdrawal confirmed</i18n.Translate>\n </h3>\n <div class=\"mt-2\">\n <p class=\"text-sm text-gray-500\">\n <i18n.Translate>\n The wire transfer to the Taler operator has been initiated.\n You will soon receive the requested amount in your Taler\n wallet.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n name=\"done\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Done</i18n.Translate>\n </a>\n </div>\n </div>\n );\n }\n\n if (data.status === \"pending\") {\n return (\n <QrCodeSection\n withdrawUri={withdrawUri}\n onAborted={() => {\n notifyInfo(i18n.str`Operation canceled`);\n onOperationAborted();\n }}\n />\n );\n }\n\n const account = !data.selected_exchange_account\n ? undefined\n : parsePaytoUri(data.selected_exchange_account);\n\n if (!data.selected_reserve_pub && account) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation is marked as 'selected' but some step in the withdrawal failed`}\n >\n <i18n.Translate>\n The account is selected but no withdrawal identification found.\n </i18n.Translate>\n </Attention>\n );\n }\n\n if (!account && data.selected_reserve_pub) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation is marked as 'selected' but some step in the withdrawal failed`}\n >\n <i18n.Translate>\n There is a withdrawal identification but no account has been selected\n or the selected account is invalid.\n </i18n.Translate>\n </Attention>\n );\n }\n\n if (!account || !data.selected_reserve_pub) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The operation is marked as 'selected' but some step in the withdrawal failed`}\n >\n <i18n.Translate>\n No withdrawal ID found and no account has been selected or the\n selected account is invalid.\n </i18n.Translate>\n </Attention>\n );\n }\n\n return (\n <WithdrawalConfirmationQuestion\n withdrawUri={withdrawUri}\n routeHere={routeWithdrawalDetails}\n details={{\n username: data.username,\n account,\n reserve: data.selected_reserve_pub,\n amount: Amounts.parseOrThrow(data.amount),\n }}\n onAuthorizationRequired={onAuthorizationRequired}\n onAborted={() => {\n notifyInfo(i18n.str`Operation canceled`);\n onOperationAborted();\n }}\n />\n );\n}\n\nexport function OperationNotFound({\n routeClose,\n}: {\n routeClose: RouteDefinition | undefined;\n}): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"relative ml-auto mr-auto transform overflow-hidden rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-sm sm:p-6\">\n <div>\n <div class=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-red-100 \">\n <svg\n class=\"h-6 w-6 text-red-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\"\n />\n </svg>\n </div>\n\n <div class=\"mt-3 text-center sm:mt-5\">\n <h3\n class=\"text-base font-semibold leading-6 text-gray-900\"\n id=\"modal-title\"\n >\n <i18n.Translate>Operation not found</i18n.Translate>\n </h3>\n <div class=\"mt-2\">\n <p class=\"text-sm text-gray-500\">\n <i18n.Translate>\n This operation is not known by the server. The operation id is\n wrong or the server deleted the operation information before\n reaching here.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n {routeClose && (\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n name=\"continue to dashboard\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Cotinue to dashboard</i18n.Translate>\n </a>\n </div>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 HttpStatusCode,\n stringifyWithdrawUri,\n WithdrawUriResult,\n} from \"@gnu-taler/taler-util\";\nimport {\n Button,\n LocalNotificationBanner,\n useLocalNotificationHandler,\n useTalerWalletIntegrationAPI,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect } from \"preact/hooks\";\nimport { QR } from \"../components/QR.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../hooks/session.js\";\n\nexport function QrCodeSection({\n withdrawUri,\n onAborted,\n}: {\n withdrawUri: WithdrawUriResult;\n onAborted: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const walletInegrationApi = useTalerWalletIntegrationAPI();\n const talerWithdrawUri = stringifyWithdrawUri(withdrawUri);\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n\n useEffect(() => {\n walletInegrationApi.publishTalerAction(withdrawUri);\n }, []);\n\n const [notification, handleError] = useLocalNotificationHandler();\n\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const onAbortHandler = handleError(\n async () => {\n if (!creds) return undefined;\n return api.abortWithdrawalById(creds, withdrawUri.withdrawalOperationId);\n },\n onAborted,\n (fail) => {\n switch (fail.case) {\n case HttpStatusCode.BadRequest:\n return i18n.str`The operation id is invalid.`;\n case HttpStatusCode.NotFound:\n return i18n.str`The operation was not found.`;\n case HttpStatusCode.Conflict:\n return i18n.str`The reserve operation has been confirmed previously and can't be aborted`;\n }\n },\n );\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n <div class=\"bg-white shadow-xl sm:rounded-lg\">\n <div class=\"px-4 py-5 sm:p-6\">\n <h3 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>\n If you have a Taler wallet installed in this device\n </i18n.Translate>\n </h3>\n <div class=\"mt-4 mb-4 text-sm text-gray-500\">\n <p>\n <i18n.Translate>\n You will see the details of the operation in your wallet\n including the fees (if applies). If you still don't have one you\n can install it following instructions in\n </i18n.Translate>{\" \"}\n <a\n class=\"font-semibold text-gray-500 hover:text-gray-400\"\n name=\"wallet page\"\n href=\"https://taler.net/en/wallet.html\"\n >\n <i18n.Translate>this page</i18n.Translate>\n </a>\n .\n </p>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 pt-2 mt-2 \">\n <Button\n type=\"button\"\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n handler={onAbortHandler}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </Button>\n <a\n href={talerWithdrawUri}\n name=\"withdraw\"\n class=\"inline-flex items-center disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Withdraw</i18n.Translate>\n </a>\n </div>\n </div>\n </div>\n\n <div class=\"bg-white shadow-xl sm:rounded-lg mt-8\">\n <div class=\"px-4 py-5 sm:p-6\">\n <h3 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>\n Or if you have the Taler wallet in another device\n </i18n.Translate>\n </h3>\n <div class=\"mt-4 max-w-xl text-sm text-gray-500\">\n <i18n.Translate>\n Scan the QR below to start the withdrawal.\n </i18n.Translate>\n </div>\n <div class=\"mt-2 max-w-md ml-auto mr-auto\">\n <QR text={talerWithdrawUri} />\n </div>\n </div>\n <div class=\"flex items-center justify-center gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <Button\n type=\"button\"\n // class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md px-3 py-2 text-sm font-semibold text-black shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n handler={onAbortHandler}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </Button>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Loading,\n notifyInfo,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { ErrorLoadingWithDebug } from \"../components/ErrorLoadingWithDebug.js\";\nimport { useAccountDetails } from \"../hooks/account.js\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { LoginForm } from \"./LoginForm.js\";\nimport { PaytoWireTransferForm } from \"./PaytoWireTransferForm.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport function WireTransfer({\n toAccount,\n withSubject,\n withAmount,\n onAuthorizationRequired,\n routeCancel,\n routeHere,\n onSuccess,\n}: {\n onSuccess?: () => void;\n routeHere: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n toAccount?: string;\n withSubject?: string;\n withAmount?: string;\n routeCancel?: RouteDefinition;\n onAuthorizationRequired: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const r = useSessionState();\n const account = r.state.status !== \"loggedOut\" ? r.state.username : \"admin\";\n const result = useAccountDetails(account);\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n return <LoginForm currentUser={account} />;\n case HttpStatusCode.NotFound:\n return <LoginForm currentUser={account} />;\n default:\n assertUnreachable(result);\n }\n }\n const { body: data } = result;\n\n const balance = Amounts.parseOrThrow(data.balance.amount);\n const balanceIsDebit = data.balance.credit_debit_indicator == \"debit\";\n\n const debitThreshold = Amounts.parseOrThrow(data.debit_threshold);\n\n if (!balance) return <Fragment />;\n\n const limit = balanceIsDebit\n ? Amounts.sub(debitThreshold, balance).amount\n : Amounts.add(balance, debitThreshold).amount;\n\n const positiveBalance = balanceIsDebit\n ? Amounts.zeroOfAmount(balance)\n : balance;\n return (\n <div class=\"px-4 mt-8\">\n <div class=\"sm:flex sm:items-center mb-4\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Make a wire transfer</i18n.Translate>\n </h1>\n </div>\n </div>\n\n <PaytoWireTransferForm\n withAccount={toAccount}\n withAmount={withAmount}\n balance={positiveBalance}\n withSubject={withSubject}\n routeHere={routeHere}\n limit={limit}\n onAuthorizationRequired={onAuthorizationRequired}\n onSuccess={() => {\n notifyInfo(i18n.str`Wire transfer created!`);\n if (onSuccess) onSuccess();\n }}\n routeCancel={routeCancel}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { parseWithdrawUri, stringifyWithdrawUri } from \"@gnu-taler/taler-util\";\nimport { Attention, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useBankState } from \"../hooks/bank-state.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { WithdrawalQRCode } from \"./WithdrawalQRCode.js\";\n\nexport function WithdrawalOperationPage({\n operationId,\n onAuthorizationRequired,\n onOperationAborted,\n routeClose,\n routeWithdrawalDetails,\n}: {\n onAuthorizationRequired: () => void;\n operationId: string;\n purpose: \"after-creation\" | \"after-confirmation\";\n onOperationAborted: () => void;\n routeClose: RouteDefinition;\n routeWithdrawalDetails: RouteDefinition<{ wopid: string }>;\n}): VNode {\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const uri = stringifyWithdrawUri({\n bankIntegrationApiBaseUrl: api.getIntegrationAPI().href,\n withdrawalOperationId: operationId,\n });\n const parsedUri = parseWithdrawUri(uri);\n const { i18n } = useTranslationContext();\n const [, updateBankState] = useBankState();\n\n if (!parsedUri) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`The Withdrawal URI is not valid`}\n >\n {uri}\n </Attention>\n );\n }\n\n return (\n <WithdrawalQRCode\n withdrawUri={parsedUri}\n routeWithdrawalDetails={routeWithdrawalDetails}\n onAuthorizationRequired={onAuthorizationRequired}\n onOperationAborted={() => {\n updateBankState(\"currentWithdrawalOperationId\", undefined);\n onOperationAborted();\n }}\n routeClose={routeClose}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { Cashouts } from \"../../components/Cashouts/index.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { ProfileNavigation } from \"../ProfileNavigation.js\";\nimport { CreateCashout } from \"../regional/CreateCashout.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\ninterface Props {\n account: string;\n routeClose: RouteDefinition;\n onAuthorizationRequired: () => void;\n onCashout: () => void;\n routeCashoutDetails: RouteDefinition<{ cid: string }>;\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeCreateCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n}\n\nexport function CashoutListForAccount({\n account,\n onAuthorizationRequired,\n onCashout,\n routeCreateCashout,\n routeCashoutDetails,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeConversionConfig,\n routeMyAccountPassword,\n routeClose,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const { state: credentials } = useSessionState();\n\n const accountIsTheCurrentUser =\n credentials.status === \"loggedIn\"\n ? credentials.username === account\n : false;\n\n return (\n <Fragment>\n {accountIsTheCurrentUser ? (\n <ProfileNavigation\n current=\"cashouts\"\n routeMyAccountCashout={routeMyAccountCashout}\n routeMyAccountDelete={routeMyAccountDelete}\n routeMyAccountDetails={routeMyAccountDetails}\n routeMyAccountPassword={routeMyAccountPassword}\n routeConversionConfig={routeConversionConfig}\n />\n ) : (\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Cashout for account {account}</i18n.Translate>\n </h1>\n )}\n\n <CreateCashout\n focus\n routeHere={routeCreateCashout}\n routeClose={routeClose}\n onCashout={onCashout}\n onAuthorizationRequired={onAuthorizationRequired}\n account={account}\n />\n\n <Cashouts account={account} routeCashoutDetails={routeCashoutDetails} />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { TalerError } from \"@gnu-taler/taler-util\";\nimport { useCashouts } from \"../../hooks/regional.js\";\nimport { Props, State } from \"./index.js\";\n\nexport function useComponentState({\n account,\n routeCashoutDetails,\n}: Props): State {\n const result = useCashouts(account);\n if (!result) {\n return {\n status: \"loading\",\n error: undefined,\n };\n }\n if (result instanceof TalerError) {\n return {\n status: \"loading-error\",\n error: result,\n };\n }\n if (result.type === \"fail\") {\n return {\n status: \"failed\",\n error: result,\n };\n }\n\n return {\n status: \"ready\",\n error: undefined,\n cashouts: result.body.cashouts,\n routeCashoutDetails,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useConversionInfo } from \"../../hooks/regional.js\";\nimport { RenderAmount } from \"../../pages/PaytoWireTransferForm.js\";\nimport { ErrorLoadingWithDebug } from \"../ErrorLoadingWithDebug.js\";\nimport { Time } from \"../Time.js\";\nimport { State } from \"./index.js\";\n\nexport function FailedView({ error }: State.Failed) {\n const { i18n } = useTranslationContext();\n switch (error.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(error.case);\n }\n}\n\nexport function ReadyView({\n cashouts,\n routeCashoutDetails,\n}: State.Ready): VNode {\n const { i18n, dateLocale } = useTranslationContext();\n const resp = useConversionInfo();\n if (!resp) {\n return <Loading />;\n }\n if (resp instanceof TalerError) {\n return <ErrorLoadingWithDebug error={resp} />;\n }\n if (resp.type === \"fail\") {\n switch (resp.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(resp.case);\n }\n }\n\n if (!cashouts.length) return <div />;\n const txByDate = cashouts.reduce(\n (prev, cur) => {\n const d =\n cur.creation_time.t_s === \"never\"\n ? \"\"\n : format(cur.creation_time.t_s * 1000, \"dd/MM/yyyy\", {\n locale: dateLocale,\n });\n if (!prev[d]) {\n prev[d] = [];\n }\n prev[d].push(cur);\n return prev;\n },\n {} as Record<string, typeof cashouts>,\n );\n return (\n <div class=\"px-4 mt-4\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Latest cashouts</i18n.Translate>\n </h1>\n </div>\n </div>\n <div class=\"-mx-4 mt-5 ring-1 ring-gray-300 sm:mx-0 rounded-lg min-w-fit bg-white\">\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n class=\" pl-2 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Created`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Total debit`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Total credit`}</th>\n <th\n scope=\"col\"\n class=\"hidden sm:table-cell pl-2 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Subject`}</th>\n </tr>\n </thead>\n <tbody>\n {Object.entries(txByDate).map(([date, txs], idx) => {\n return (\n <Fragment key={idx}>\n <tr class=\"border-t border-gray-200\">\n <th\n colSpan={6}\n scope=\"colgroup\"\n class=\"bg-gray-50 py-2 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-3\"\n >\n {date}\n </th>\n </tr>\n {txs.map((item) => {\n return (\n <a\n name=\"cashout details\"\n key={idx}\n class=\"table-row border-b border-gray-200 hover:bg-gray-200 last:border-none\"\n // class=\"table-row\"\n href={routeCashoutDetails.url({\n cid: String(item.id),\n })}\n >\n <td class=\"relative py-2 pl-2 pr-2 text-sm \">\n <div class=\"font-medium text-gray-900\">\n <Time\n format=\"HH:mm:ss\"\n timestamp={AbsoluteTime.fromProtocolTimestamp(\n item.creation_time,\n )}\n // relative={Duration.fromSpec({ days: 1 })}\n />\n </div>\n {\n //FIXME: implement responsive view\n }\n {/* <dl class=\"font-normal sm:hidden\">\n <dt class=\"sr-only sm:hidden\"><i18n.Translate>Amount</i18n.Translate></dt>\n <dd class=\"mt-1 truncate text-gray-700\">\n {item.negative ? i18n.str`sent` : i18n.str`received`} {item.amount ? (\n <span data-negative={item.negative ? \"true\" : \"false\"} class=\"data-[negative=false]:text-green-600 data-[negative=true]:text-red-600\">\n <RenderAmount value={item.amount} />\n </span>\n ) : (\n <span style={{ color: \"grey\" }}>&lt;{i18n.str`invalid value`}&gt;</span>\n )}</dd>\n\n <dt class=\"sr-only sm:hidden\"><i18n.Translate>Counterpart</i18n.Translate></dt>\n <dd class=\"mt-1 truncate text-gray-500 sm:hidden\">\n {item.negative ? i18n.str`to` : i18n.str`from`} {item.counterpart}\n </dd>\n <dd class=\"mt-1 text-gray-500 sm:hidden\" >\n <pre class=\"break-words w-56 whitespace-break-spaces p-2 rounded-md mx-auto my-2 bg-gray-100\">\n {item.subject}\n </pre>\n </dd>\n </dl> */}\n </td>\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-red-600 cursor-pointer\">\n <RenderAmount\n value={Amounts.parseOrThrow(item.amount_debit)}\n spec={resp.body.regional_currency_specification}\n />\n </td>\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-green-600 cursor-pointer\">\n <RenderAmount\n value={Amounts.parseOrThrow(item.amount_credit)}\n spec={resp.body.fiat_currency_specification}\n />\n </td>\n\n <td class=\"hidden sm:table-cell px-3 py-3.5 text-sm text-gray-500 break-all min-w-md\">\n {item.subject}\n </td>\n </a>\n );\n })}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { Loading, RouteDefinition, utils } from \"@gnu-taler/web-util/browser\";\nimport {\n AbsoluteTime,\n AmountJson,\n TalerCoreBankErrorsByMethod,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport { ErrorLoadingWithDebug } from \"../ErrorLoadingWithDebug.js\";\nimport { useComponentState } from \"./state.js\";\nimport { FailedView, ReadyView } from \"./views.js\";\n\nexport interface Props {\n account: string;\n routeCashoutDetails: RouteDefinition<{ cid: string }>;\n}\n\nexport type State =\n | State.Loading\n | State.Failed\n | State.LoadingUriError\n | State.Ready;\n\nexport namespace State {\n export interface Loading {\n status: \"loading\";\n error: undefined;\n }\n\n export interface LoadingUriError {\n status: \"loading-error\";\n error: TalerError;\n }\n\n export interface Failed {\n status: \"failed\";\n error: TalerCoreBankErrorsByMethod<\"getAccountCashouts\">;\n }\n\n export interface BaseInfo {\n error: undefined;\n }\n export interface Ready extends BaseInfo {\n status: \"ready\";\n error: undefined;\n cashouts: (TalerCorebankApi.CashoutStatusResponse & { id: number })[];\n routeCashoutDetails: RouteDefinition<{ cid: string }>;\n }\n}\n\nexport interface Transaction {\n negative: boolean;\n counterpart: string;\n when: AbsoluteTime;\n amount: AmountJson | undefined;\n subject: string;\n}\n\nconst viewMapping: utils.StateViewMap<State> = {\n loading: Loading,\n \"loading-error\": ErrorLoadingWithDebug,\n failed: FailedView,\n ready: ReadyView,\n};\n\nexport const Cashouts = utils.compose(\n (p: Props) => useComponentState(p),\n viewMapping,\n);\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { assertUnreachable } from \"@gnu-taler/taler-util\";\nimport {\n useNavigationContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport function ProfileNavigation({\n current,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeMyAccountPassword,\n routeConversionConfig,\n}: {\n current: \"details\" | \"delete\" | \"credentials\" | \"cashouts\" | \"conversion\";\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n const { state: credentials } = useSessionState();\n const isAdminUser =\n credentials.status !== \"loggedIn\" ? false : credentials.isUserAdministrator;\n const nonAdminUser = !isAdminUser;\n\n const { navigateTo } = useNavigationContext();\n return (\n <div>\n <div class=\"sm:hidden\">\n <label for=\"tabs\" class=\"sr-only\">\n <i18n.Translate>Select a section</i18n.Translate>\n </label>\n <select\n id=\"tabs\"\n name=\"tabs\"\n class=\"block w-full rounded-md border-gray-300 focus:border-indigo-500 focus:ring-indigo-500\"\n onChange={(e) => {\n const op = e.currentTarget.value as typeof current;\n switch (op) {\n case \"details\": {\n navigateTo(routeMyAccountDetails.url({}));\n return;\n }\n case \"delete\": {\n navigateTo(routeMyAccountDelete.url({}));\n return;\n }\n case \"credentials\": {\n navigateTo(routeMyAccountPassword.url({}));\n return;\n }\n case \"cashouts\": {\n navigateTo(routeMyAccountCashout.url({}));\n return;\n }\n case \"conversion\": {\n navigateTo(routeConversionConfig.url({}));\n return;\n }\n default:\n assertUnreachable(op);\n }\n }}\n >\n <option value=\"details\" selected={current == \"details\"}>\n <i18n.Translate>Details</i18n.Translate>\n </option>\n {!config.allow_deletions ? undefined : (\n <option value=\"delete\" selected={current == \"delete\"}>\n <i18n.Translate>Delete</i18n.Translate>\n </option>\n )}\n <option value=\"credentials\" selected={current == \"credentials\"}>\n <i18n.Translate>Credentials</i18n.Translate>\n </option>\n {config.allow_conversion ? (\n <Fragment>\n <option value=\"cashouts\" selected={current == \"cashouts\"}>\n <i18n.Translate>Cashouts</i18n.Translate>\n </option>\n <option value=\"conversion\" selected={current == \"cashouts\"}>\n <i18n.Translate>Conversion</i18n.Translate>\n </option>\n </Fragment>\n ) : undefined}\n </select>\n </div>\n <div class=\"hidden sm:block\">\n <nav\n class=\"isolate flex divide-x divide-gray-200 rounded-lg shadow\"\n aria-label=\"Tabs\"\n >\n <a\n name=\"my account details\"\n href={routeMyAccountDetails.url({})}\n data-selected={current == \"details\"}\n class=\"rounded-l-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Details</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"details\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n {!config.allow_deletions ? undefined : (\n <a\n name=\"my account delete\"\n href={routeMyAccountDelete.url({})}\n data-selected={current == \"delete\"}\n aria-current=\"page\"\n class=\" text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Delete</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"delete\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n )}\n <a\n name=\"my account password\"\n href={routeMyAccountPassword.url({})}\n data-selected={current == \"credentials\"}\n aria-current=\"page\"\n class=\" text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Credentials</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"credentials\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n {config.allow_conversion && nonAdminUser ? (\n <a\n name=\"my account cashout\"\n href={routeMyAccountCashout.url({})}\n data-selected={current == \"cashouts\"}\n class=\"rounded-r-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Cashouts</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"cashouts\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n ) : undefined}\n {config.allow_conversion && isAdminUser ? (\n <a\n name=\"conversion config\"\n href={routeConversionConfig.url({})}\n data-selected={current == \"conversion\"}\n class=\"rounded-r-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Conversion</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={current == \"conversion\"}\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </a>\n ) : undefined}\n </nav>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n encodeCrock,\n getRandomBytes,\n parsePaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useAccountDetails } from \"../../hooks/account.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport {\n TransferCalculation,\n useCashoutEstimator,\n useConversionInfo,\n} from \"../../hooks/regional.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { TanChannel, undefinedIfEmpty } from \"../../utils.js\";\nimport { LoginForm } from \"../LoginForm.js\";\nimport {\n InputAmount,\n RenderAmount,\n doAutoFocus,\n} from \"../PaytoWireTransferForm.js\";\n\ninterface Props {\n account: string;\n focus?: boolean;\n onAuthorizationRequired: () => void;\n onCashout: () => void;\n routeClose: RouteDefinition;\n routeHere: RouteDefinition;\n}\n\ntype FormType = {\n isDebit: boolean;\n amount: string;\n subject: string;\n channel: TanChannel;\n};\ntype ErrorFrom<T> = {\n [P in keyof T]+?: string;\n};\n\nexport function CreateCashout({\n account: accountName,\n onAuthorizationRequired,\n onCashout,\n focus,\n routeHere,\n routeClose,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n const resultAccount = useAccountDetails(accountName);\n const {\n estimateByCredit: calculateFromCredit,\n estimateByDebit: calculateFromDebit,\n } = useCashoutEstimator();\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const [, updateBankState] = useBankState();\n\n const {\n lib: { bank: api },\n config,\n } = useBankCoreApiContext();\n const [form, setForm] = useState<Partial<FormType>>({ isDebit: true });\n const [notification, notify, handleError] = useLocalNotification();\n const info = useConversionInfo();\n\n if (!config.allow_conversion) {\n return (\n <Fragment>\n <Attention type=\"warning\" title={i18n.str`Unable to create a cashout`}>\n <i18n.Translate>\n The bank configuration does not support cashout operations.\n </i18n.Translate>\n </Attention>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeClose.url({})}\n name=\"close\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </Fragment>\n );\n }\n\n if (!resultAccount) {\n return <Loading />;\n }\n if (resultAccount instanceof TalerError) {\n return <ErrorLoadingWithDebug error={resultAccount} />;\n }\n if (resultAccount.type === \"fail\") {\n switch (resultAccount.case) {\n case HttpStatusCode.Unauthorized:\n return <LoginForm currentUser={accountName} />;\n case HttpStatusCode.NotFound:\n return <LoginForm currentUser={accountName} />;\n default:\n assertUnreachable(resultAccount);\n }\n }\n if (!info) {\n return <Loading />;\n }\n\n if (info instanceof TalerError) {\n return <ErrorLoadingWithDebug error={info} />;\n }\n if (info.type === \"fail\") {\n switch (info.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(info.case);\n }\n }\n\n const conversionInfo = info.body.conversion_rate;\n if (!conversionInfo) {\n return (\n <div>conversion enabled but server replied without conversion_rate</div>\n );\n }\n\n const {\n fiat_currency,\n regional_currency,\n fiat_currency_specification,\n regional_currency_specification,\n } = info.body;\n const regionalZero = Amounts.zeroOfCurrency(regional_currency);\n const fiatZero = Amounts.zeroOfCurrency(fiat_currency);\n\n const account = {\n balance: Amounts.parseOrThrow(resultAccount.body.balance.amount),\n balanceIsDebit:\n resultAccount.body.balance.credit_debit_indicator == \"debit\",\n debitThreshold: Amounts.parseOrThrow(resultAccount.body.debit_threshold),\n minCashout: resultAccount.body.min_cashout === undefined ? regionalZero : Amounts.parseOrThrow(resultAccount.body.min_cashout)\n };\n\n const limit = account.balanceIsDebit\n ? Amounts.sub(account.debitThreshold, account.balance).amount\n : Amounts.add(account.balance, account.debitThreshold).amount;\n\n const zeroCalc = {\n debit: regionalZero,\n credit: fiatZero,\n beforeFee: fiatZero,\n };\n const [calculationResult, setCalculation] =\n useState<TransferCalculation>(zeroCalc);\n const sellFee = Amounts.parseOrThrow(conversionInfo.cashout_fee);\n const sellRate = conversionInfo.cashout_ratio;\n /**\n * can be in regional currency or fiat currency\n * depending on the isDebit flag\n */\n const inputAmount = Amounts.parseOrThrow(\n `${form.isDebit ? regional_currency : fiat_currency}:${\n !form.amount ? \"0\" : form.amount\n }`,\n );\n\n useEffect(() => {\n async function doAsync() {\n await handleError(async () => {\n const higerThanMin = form.isDebit\n ? Amounts.cmp(inputAmount, conversionInfo.cashout_min_amount) === 1\n : true;\n const notZero = Amounts.isNonZero(inputAmount);\n if (notZero && higerThanMin) {\n const resp = await (form.isDebit\n ? calculateFromDebit(inputAmount, sellFee)\n : calculateFromCredit(inputAmount, sellFee));\n setCalculation(resp);\n } else {\n setCalculation(zeroCalc);\n }\n });\n }\n doAsync();\n }, [form.amount, form.isDebit]);\n\n const calc =\n calculationResult === \"amount-is-too-small\" ? zeroCalc : calculationResult;\n\n const balanceAfter = Amounts.sub(account.balance, calc.debit).amount;\n\n function updateForm(newForm: typeof form): void {\n setForm(newForm);\n }\n const errors = undefinedIfEmpty<ErrorFrom<typeof form>>({\n subject: !form.subject ? i18n.str`Required` : undefined,\n amount: !form.amount\n ? i18n.str`Required`\n : !inputAmount\n ? i18n.str`Invalid`\n : Amounts.cmp(limit, calc.debit) === -1\n ? i18n.str`Balance is not enough`\n : calculationResult === \"amount-is-too-small\"\n ? i18n.str`Amount needs to be higher`\n : Amounts.cmp(calc.debit, conversionInfo.cashout_min_amount) < 0\n ? i18n.str`No account can't cashout less than ${\n Amounts.stringifyValueWithSpec(\n Amounts.parseOrThrow(conversionInfo.cashout_min_amount),\n regional_currency_specification,\n ).normal\n }`\n : Amounts.cmp(calc.debit, account.minCashout) < 0\n ? i18n.str`Your account can't cashout less than ${\n Amounts.stringifyValueWithSpec(\n Amounts.parseOrThrow(account.minCashout),\n regional_currency_specification,\n ).normal\n }`\n \n : Amounts.isZero(calc.credit)\n ? i18n.str`The total transfer at destination will be zero`\n : undefined,\n });\n const trimmedAmountStr = form.amount?.trim();\n\n async function createCashout() {\n const request_uid = encodeCrock(getRandomBytes(32));\n await handleError(async () => {\n if (!creds || !form.subject) return;\n const request = {\n request_uid,\n amount_credit: Amounts.stringify(calc.credit),\n amount_debit: Amounts.stringify(calc.debit),\n subject: form.subject,\n };\n const resp = await api.createCashout(creds, request);\n if (resp.type === \"ok\") {\n notifyInfo(i18n.str`Cashout created`);\n onCashout();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"create-cashout\",\n id: String(resp.body.challenge_id),\n sent: AbsoluteTime.never(),\n location: routeHere.url({}),\n request,\n });\n return onAuthorizationRequired();\n }\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:\n return notify({\n type: \"error\",\n title: i18n.str`Duplicated request detected, check if the operation succeeded or try again.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_BAD_CONVERSION:\n return notify({\n type: \"error\",\n title: i18n.str`The conversion rate was incorrectly applied`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`The account does not have sufficient funds`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotImplemented:\n return notify({\n type: \"error\",\n title: i18n.str`Cashout are disabled`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:\n return notify({\n type: \"error\",\n title: i18n.str`Missing cashout URI in the profile`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_CONVERSION_AMOUNT_TO_SMALL:\n return notify({\n type: \"error\",\n title: i18n.str`The amount is less than the minimum allowed.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n\n case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:\n return notify({\n type: \"error\",\n title: i18n.str`Sending the confirmation message failed, retry later or contact the administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n assertUnreachable(resp);\n }\n });\n }\n const cashoutDisabled =\n config.supported_tan_channels.length < 1 ||\n !resultAccount.body.cashout_payto_uri;\n\n const cashoutAccount = !resultAccount.body.cashout_payto_uri\n ? undefined\n : parsePaytoUri(resultAccount.body.cashout_payto_uri);\n const cashoutAccountName = !cashoutAccount\n ? undefined\n : cashoutAccount.targetPath;\n\n const cashoutLegalName = !cashoutAccount\n ? undefined\n : cashoutAccount.params[\"receiver-name\"];\n\n return (\n <div>\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <section class=\"mt-4 rounded-sm px-4 py-6 p-8 \">\n <h2 id=\"summary-heading\" class=\"font-medium text-lg\">\n <i18n.Translate>Cashout</i18n.Translate>\n </h2>\n\n <dl class=\"mt-4 space-y-4\">\n <div class=\"justify-between items-center flex\">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Conversion rate</i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">{sellRate}</dd>\n </div>\n\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Balance</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={account.balance}\n spec={regional_currency_specification}\n />\n </dd>\n </div>\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Fee</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={sellFee}\n spec={fiat_currency_specification}\n />\n </dd>\n </div>\n {cashoutAccountName && cashoutLegalName ? (\n <Fragment>\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>To account</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">{cashoutAccountName}</dd>\n </div>\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Legal name</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">{cashoutLegalName}</dd>\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n If this name doesn't match the account holder's name your\n transaction may fail.\n </i18n.Translate>\n </p>\n </Fragment>\n ) : (\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <Attention type=\"warning\" title={i18n.str`No cashout account`}>\n <i18n.Translate>\n Before doing a cashout you need to complete your profile\n </i18n.Translate>\n </Attention>\n </div>\n )}\n </dl>\n </section>\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n {/* subject */}\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"subject\"\n >\n {i18n.str`Transfer subject`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n ref={focus ? doAutoFocus : undefined}\n type=\"text\"\n class=\"block w-full rounded-md disabled:bg-gray-200 border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"subject\"\n id=\"subject\"\n disabled={cashoutDisabled}\n data-error={!!errors?.subject && form.subject !== undefined}\n value={form.subject ?? \"\"}\n onChange={(e) => {\n form.subject = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.subject}\n isDirty={form.subject !== undefined}\n />\n </div>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"subject\"\n >\n {i18n.str`Currency`}\n </label>\n\n <div class=\"mt-2\">\n <button\n type=\"button\"\n name=\"set 50\"\n class=\" inline-flex p-4 text-sm items-center rounded-l-md bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n form.isDebit = true;\n updateForm(structuredClone(form));\n }}\n >\n {form.isDebit ? (\n <svg\n class=\"self-center flex-none h-5 w-5 text-indigo-600\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n ) : (\n <svg\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-5 h-5\"\n >\n <path d=\"M15 12H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" />\n </svg>\n )}\n\n <i18n.Translate>Send {regional_currency}</i18n.Translate>\n </button>\n <button\n type=\"button\"\n name=\"set 25\"\n class=\" -ml-px -mr-px inline-flex p-4 text-sm items-center rounded-r-md bg-white text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n onClick={(e) => {\n e.preventDefault();\n form.isDebit = false;\n updateForm(structuredClone(form));\n }}\n >\n {!form.isDebit ? (\n <svg\n class=\"self-center flex-none h-5 w-5 text-indigo-600\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n ) : (\n <svg\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-5 h-5\"\n >\n <path d=\"M15 12H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" />\n </svg>\n )}\n\n <i18n.Translate>Receive {fiat_currency}</i18n.Translate>\n </button>\n </div>\n </div>\n\n {/* amount */}\n <div class=\"sm:col-span-5\">\n <div class=\"flex justify-between\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"amount\"\n >\n {i18n.str`Amount`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n {/* <button\n type=\"button\"\n data-enabled={form.isDebit}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n form.isDebit = !form.isDebit;\n updateForm(structuredClone(form));\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={form.isDebit}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button> */}\n </div>\n <div class=\"mt-2\">\n <InputAmount\n name=\"amount\"\n left\n currency={form.isDebit ? regional_currency : fiat_currency}\n value={trimmedAmountStr}\n onChange={\n cashoutDisabled\n ? undefined\n : (value) => {\n form.amount = value;\n updateForm(structuredClone(form));\n }\n }\n />\n <ShowInputErrorLabel\n message={errors?.amount}\n isDirty={form.amount !== undefined}\n />\n </div>\n </div>\n\n {Amounts.isZero(calc.credit) ? undefined : (\n <div class=\"sm:col-span-5\">\n <dl class=\"mt-4 space-y-4\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Total cost</i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={calc.debit}\n negative\n withColor\n spec={regional_currency_specification}\n />\n </dd>\n </div>\n\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Balance left</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={balanceAfter}\n spec={regional_currency_specification}\n />\n </dd>\n </div>\n {Amounts.isZero(sellFee) ||\n Amounts.isZero(calc.beforeFee) ? undefined : (\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Before fee</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={calc.beforeFee}\n spec={fiat_currency_specification}\n />\n </dd>\n </div>\n )}\n <div class=\"flex justify-between items-center border-t-2 afu pt-4\">\n <dt class=\"text-lg text-gray-900 font-medium\">\n <i18n.Translate>Total cashout transfer</i18n.Translate>\n </dt>\n <dd class=\"text-lg text-gray-900 font-medium\">\n <RenderAmount\n value={calc.credit}\n withColor\n spec={fiat_currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n )}\n </div>\n </div>\n\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeClose.url({})}\n name=\"cancel\"\n type=\"button\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"cashout\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n onClick={(e) => {\n e.preventDefault();\n createCashout();\n }}\n >\n <i18n.Translate>Cashout</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerCorebankApi,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n parsePaytoUri\n} from \"@gnu-taler/taler-util\";\nimport {\n CopyButton,\n Loading,\n LocalNotificationBanner,\n RouteDefinition,\n notifyInfo,\n useBankCoreApiContext,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useAccountDetails } from \"../../hooks/account.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { LoginForm } from \"../LoginForm.js\";\nimport { ProfileNavigation } from \"../ProfileNavigation.js\";\nimport { AccountForm } from \"../admin/AccountForm.js\";\n\nexport function ShowAccountDetails({\n account,\n routeClose,\n onUpdateSuccess,\n onAuthorizationRequired,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeHere,\n routeMyAccountPassword,\n routeConversionConfig,\n}: {\n routeClose: RouteDefinition;\n routeHere: RouteDefinition<{ account: string }>;\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n onUpdateSuccess: () => void;\n onAuthorizationRequired: () => void;\n account: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const creds = credentials.status !== \"loggedIn\" ? undefined : credentials;\n const {\n lib: { bank },\n } = useBankCoreApiContext();\n const accountIsTheCurrentUser =\n credentials.status === \"loggedIn\"\n ? credentials.username === account\n : false;\n\n const [submitAccount, setSubmitAccount] = useState<\n TalerCorebankApi.AccountReconfiguration | undefined\n >();\n const [notification, notify, handleError] = useLocalNotification();\n const [, updateBankState] = useBankState();\n\n const result = useAccountDetails(account);\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n return <LoginForm currentUser={account} />;\n default:\n assertUnreachable(result);\n }\n }\n\n async function doUpdate() {\n if (!submitAccount || !creds) return;\n await handleError(async () => {\n const resp = await bank.updateAccount(\n {\n token: creds.token,\n username: account,\n },\n submitAccount,\n );\n\n if (resp.type === \"ok\") {\n notifyInfo(i18n.str`Account updated`);\n onUpdateSuccess();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`The rights to change the account are not sufficient`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The username was not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:\n return notify({\n type: \"error\",\n title: i18n.str`You can't change the legal name, please contact the your account administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return notify({\n type: \"error\",\n title: i18n.str`You can't change the debt limit, please contact the your account administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:\n return notify({\n type: \"error\",\n title: i18n.str`You can't change the cashout address, please contact the your account administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return notify({\n type: \"error\",\n title: i18n.str`No information for the selected authentication channel.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"update-account\",\n id: String(resp.body.challenge_id),\n location: routeHere.url({ account }),\n sent: AbsoluteTime.never(),\n request: submitAccount,\n });\n return onAuthorizationRequired();\n }\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED: {\n return notify({\n type: \"error\",\n title: i18n.str`Authentication channel is not supported.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT: {\n return notify({\n type: \"error\",\n title: i18n.str`Only the administrator can change the minimun cashout limit.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n const url = bank.getRevenueAPI(account);\n url.username = account;\n const baseURL = url.href;\n\n const ac = parsePaytoUri(result.body.payto_uri);\n const payto = !ac?.isKnown ? undefined : ac;\n let accountLetter: string | undefined = undefined;\n if (payto) {\n switch (payto.targetType) {\n case \"iban\": {\n accountLetter = `account-info-url=${url.href}\\naccount-type=${payto.targetType}\\niban=${payto.iban}\\nreceiver-name=${result.body.name}\\n`;\n break;\n }\n case \"x-taler-bank\": {\n accountLetter = `account-info-url=${url.href}\\naccount-type=${payto.targetType}\\naccount=${payto.account}\\nhost=${payto.host}\\nreceiver-name=${result.body.name}\\n`;\n break;\n }\n case \"bitcoin\": {\n accountLetter = `account-info-url=${url.href}\\naccount-type=${payto.targetType}\\naddress=${payto.address}\\nreceiver-name=${result.body.name}\\n`;\n break;\n }\n }\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} showDebug={true} />\n {accountIsTheCurrentUser ? (\n <ProfileNavigation\n current=\"details\"\n routeMyAccountCashout={routeMyAccountCashout}\n routeMyAccountDelete={routeMyAccountDelete}\n routeConversionConfig={routeConversionConfig}\n routeMyAccountDetails={routeMyAccountDetails}\n routeMyAccountPassword={routeMyAccountPassword}\n />\n ) : (\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Account \"{account}\"</i18n.Translate>\n </h1>\n )}\n\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-semibold leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Change details</i18n.Translate>\n </span>\n </span>\n </div>\n </h2>\n </div>\n\n <AccountForm\n focus={true}\n username={account}\n template={result.body}\n purpose=\"update\"\n onChange={(a) => setSubmitAccount(a)}\n >\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeClose.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"update\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!submitAccount}\n onClick={doUpdate}\n >\n <i18n.Translate>Update</i18n.Translate>\n </button>\n </div>\n </AccountForm>\n </div>\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-semibold leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Merchant integration</i18n.Translate>\n </span>\n </span>\n </div>\n </h2>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Use this information to link your Taler Merchant Backoffice\n account with the current bank account. You can start by copying\n the values, then go to your merchant backoffice service provider,\n login into your account and look for the \"import\" button in the\n \"bank account\" section.\n </i18n.Translate>\n </p>\n </div>\n\n {payto !== undefined && (\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\">\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"account-type\"\n >\n {i18n.str`Account type`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"account-type\"\n id=\"account-type\"\n disabled={true}\n value={account}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Method to use for wire transfer.\n </i18n.Translate>\n </p>\n </div>\n {((payto) => {\n switch (payto.targetType) {\n case \"iban\": {\n return (\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`IBAN`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={payto.iban}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n International Bank Account Number.\n </i18n.Translate>\n </p>\n </div>\n );\n }\n case \"x-taler-bank\": {\n return (\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`IBAN`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={payto.account}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n International Bank Account Number.\n </i18n.Translate>\n </p>\n </div>\n );\n }\n case \"bitcoin\": {\n return (\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`Address`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={\"DE1231231231\"}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n International Bank Account Number.\n </i18n.Translate>\n </p>\n </div>\n );\n }\n }\n })(payto)}\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`Owner's name`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={result.body.name}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Legal name of the person holding the account.\n </i18n.Translate>\n </p>\n </div>\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"iban\"\n >\n {i18n.str`Account info URL`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"iban\"\n id=\"iban\"\n disabled={true}\n value={baseURL}\n autocomplete=\"off\"\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n From where the merchant can download information about\n incoming wire transfers to this account.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeClose.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <CopyButton\n getContent={() => accountLetter ?? \"\"}\n class=\"flex text-center disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Copy</i18n.Translate>\n </CopyButton>\n </div>\n </div>\n )}\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AmountString,\n Amounts,\n PaytoString,\n TalerCorebankApi,\n assertUnreachable,\n buildPayto,\n parsePaytoUri,\n stringifyPaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport {\n CopyButton,\n ShowInputErrorLabel,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { ComponentChildren, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport {\n ErrorMessageMappingFor,\n TanChannel,\n undefinedIfEmpty,\n validateIBAN,\n validateTalerBank,\n} from \"../../utils.js\";\nimport {\n InputAmount,\n TextField,\n doAutoFocus,\n} from \"../PaytoWireTransferForm.js\";\nimport { getRandomPassword } from \"../rnd.js\";\n\nconst EMAIL_REGEX =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst REGEX_JUST_NUMBERS_REGEX = /^\\+[0-9 ]*$/;\n\nexport type AccountFormData = {\n debit_threshold?: string;\n min_cashout?: string;\n isExchange?: boolean;\n isPublic?: boolean;\n name?: string;\n username?: string;\n payto_uri?: string;\n cashout_payto_uri?: string;\n email?: string;\n phone?: string;\n tan_channel?: TanChannel | \"remove\";\n};\n\ntype ChangeByPurposeType = {\n create: (a: TalerCorebankApi.RegisterAccountRequest | undefined) => void;\n update: (a: TalerCorebankApi.AccountReconfiguration | undefined) => void;\n show: undefined;\n};\n/**\n * FIXME:\n * is_public is missing on PATCH\n * account email/password should require 2FA\n *\n *\n * @param param0\n * @returns\n */\nexport function AccountForm<PurposeType extends keyof ChangeByPurposeType>({\n template,\n username,\n purpose,\n onChange,\n focus,\n children,\n}: {\n focus?: boolean;\n children: ComponentChildren;\n username?: string;\n template: TalerCorebankApi.AccountData | undefined;\n onChange: ChangeByPurposeType[PurposeType];\n purpose: PurposeType;\n}): VNode {\n const { config, url } = useBankCoreApiContext();\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const [form, setForm] = useState<AccountFormData>({});\n\n const [errors, setErrors] = useState<\n ErrorMessageMappingFor<typeof defaultValue> | undefined\n >(undefined);\n\n const paytoType =\n config.wire_type === \"X_TALER_BANK\"\n ? (\"x-taler-bank\" as const)\n : (\"iban\" as const);\n const cashoutPaytoType: typeof paytoType = \"iban\" as const;\n\n const defaultValue: AccountFormData = {\n debit_threshold: Amounts.stringifyValue(\n template?.debit_threshold ?? config.default_debit_threshold,\n ),\n min_cashout: Amounts.stringifyValue(\n template?.min_cashout ?? `${config.currency}:0`,\n ),\n isExchange: template?.is_taler_exchange,\n isPublic: template?.is_public,\n name: template?.name ?? \"\",\n cashout_payto_uri:\n getAccountId(cashoutPaytoType, template?.cashout_payto_uri) ??\n (\"\" as PaytoString),\n payto_uri:\n getAccountId(paytoType, template?.payto_uri) ?? (\"\" as PaytoString),\n email: template?.contact_data?.email ?? \"\",\n phone: template?.contact_data?.phone ?? \"\",\n username: username ?? \"\",\n tan_channel: template?.tan_channel,\n };\n\n const userIsAdmin =\n credentials.status !== \"loggedIn\" ? false : credentials.isUserAdministrator;\n\n const editableUsername = purpose === \"create\";\n const editableName =\n purpose === \"create\" ||\n (purpose === \"update\" && (config.allow_edit_name || userIsAdmin));\n\n const isCashoutEnabled = config.allow_conversion;\n const editableCashout =\n purpose === \"create\" ||\n (purpose === \"update\" &&\n (config.allow_edit_cashout_payto_uri || userIsAdmin));\n const editableThreshold =\n userIsAdmin && (purpose === \"create\" || purpose === \"update\");\n const editableMinCashout =\n userIsAdmin && (purpose === \"create\" || purpose === \"update\");\n const editableAccount = purpose === \"create\" && userIsAdmin;\n\n function updateForm(newForm: typeof defaultValue): void {\n const trimmedMinCashoutStr = newForm.min_cashout?.trim();\n const parsedMinCashout = Amounts.parse(\n `${config.currency}:${trimmedMinCashoutStr}`,\n );\n const trimmedDebitThresholdStr = newForm.debit_threshold?.trim();\n const parsedDebitThreshold = Amounts.parse(\n `${config.currency}:${trimmedDebitThresholdStr}`,\n );\n\n const errors = undefinedIfEmpty<\n ErrorMessageMappingFor<typeof defaultValue>\n >({\n cashout_payto_uri: !newForm.cashout_payto_uri\n ? undefined\n : !editableCashout\n ? undefined\n : !newForm.cashout_payto_uri\n ? undefined\n : cashoutPaytoType === \"iban\"\n ? validateIBAN(newForm.cashout_payto_uri, i18n)\n : cashoutPaytoType === \"x-taler-bank\"\n ? validateTalerBank(newForm.cashout_payto_uri, i18n)\n : undefined,\n\n payto_uri: !newForm.payto_uri\n ? undefined\n : !editableAccount\n ? undefined\n : !newForm.payto_uri\n ? undefined\n : paytoType === \"iban\"\n ? validateIBAN(newForm.payto_uri, i18n)\n : paytoType === \"x-taler-bank\"\n ? validateTalerBank(newForm.payto_uri, i18n)\n : undefined,\n\n email: !newForm.email\n ? undefined\n : !EMAIL_REGEX.test(newForm.email)\n ? i18n.str`Doesn't have the pattern of an email`\n : undefined,\n phone: !newForm.phone\n ? undefined\n : !newForm.phone.startsWith(\"+\") // FIXME: better phone number check\n ? i18n.str`Should start with +`\n : !REGEX_JUST_NUMBERS_REGEX.test(newForm.phone)\n ? i18n.str`Phone number can't have other than numbers`\n : undefined,\n debit_threshold: !editableThreshold\n ? undefined\n : !trimmedDebitThresholdStr\n ? undefined\n : !parsedDebitThreshold\n ? i18n.str`Not valid`\n : undefined,\n min_cashout: !editableMinCashout\n ? undefined\n : !trimmedMinCashoutStr\n ? undefined\n : !parsedMinCashout\n ? i18n.str`Not valid`\n : undefined,\n name: !editableName\n ? undefined // disabled\n : purpose === \"update\" && newForm.name === undefined ? undefined // the field hasn't been changed\n : !newForm.name\n ? i18n.str`Required`\n : undefined,\n username: !editableUsername\n ? undefined\n : !newForm.username\n ? i18n.str`Required`\n : undefined,\n });\n setErrors(errors);\n\n setForm(newForm);\n if (!onChange) return;\n\n if (errors) {\n onChange(undefined);\n } else {\n let cashout;\n if (newForm.cashout_payto_uri)\n switch (cashoutPaytoType) {\n case \"x-taler-bank\": {\n cashout = buildPayto(\n \"x-taler-bank\",\n url.host,\n newForm.cashout_payto_uri,\n );\n break;\n }\n case \"iban\": {\n cashout = buildPayto(\"iban\", newForm.cashout_payto_uri, undefined);\n break;\n }\n default:\n assertUnreachable(cashoutPaytoType);\n }\n const cashoutURI = !cashout ? undefined : stringifyPaytoUri(cashout);\n let internal;\n if (newForm.payto_uri)\n switch (paytoType) {\n case \"x-taler-bank\": {\n internal = buildPayto(\"x-taler-bank\", url.host, newForm.payto_uri);\n break;\n }\n case \"iban\": {\n internal = buildPayto(\"iban\", newForm.payto_uri, undefined);\n break;\n }\n default:\n assertUnreachable(paytoType);\n }\n const internalURI = !internal ? undefined : stringifyPaytoUri(internal);\n\n const threshold = !parsedDebitThreshold\n ? undefined\n : Amounts.stringify(parsedDebitThreshold);\n const minCashout = !parsedMinCashout\n ? undefined\n : Amounts.stringify(parsedMinCashout);\n\n switch (purpose) {\n case \"create\": {\n // typescript doesn't correctly narrow a generic type\n const callback = onChange as ChangeByPurposeType[\"create\"];\n const result: TalerCorebankApi.RegisterAccountRequest = {\n name: newForm.name!,\n password: getRandomPassword(),\n username: newForm.username!,\n contact_data: undefinedIfEmpty({\n email: !newForm.email ? undefined : newForm.email,\n phone: !newForm.phone ? undefined : newForm.phone,\n }),\n debit_threshold: threshold ?? config.default_debit_threshold,\n min_cashout: minCashout,\n cashout_payto_uri: cashoutURI,\n payto_uri: internalURI,\n is_public: newForm.isPublic,\n is_taler_exchange: newForm.isExchange,\n tan_channel:\n newForm.tan_channel === \"remove\"\n ? undefined\n : newForm.tan_channel,\n };\n callback(result);\n return;\n }\n case \"update\": {\n // typescript doesn't correctly narrow a generic type\n const callback = onChange as ChangeByPurposeType[\"update\"];\n\n const result: TalerCorebankApi.AccountReconfiguration = {\n cashout_payto_uri: cashoutURI,\n contact_data: undefinedIfEmpty({\n email: !newForm.email ? undefined : newForm.email,\n phone: !newForm.phone ? undefined : newForm.phone,\n }),\n debit_threshold: threshold,\n min_cashout: minCashout,\n is_public: newForm.isPublic,\n name: newForm.name,\n tan_channel:\n newForm.tan_channel === \"remove\" ? null : newForm.tan_channel,\n };\n callback(result);\n return;\n }\n case \"show\": {\n return;\n }\n default: {\n assertUnreachable(purpose);\n }\n }\n }\n }\n return (\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"username\"\n >\n {i18n.str`Login username`}\n {editableUsername && <b style={{ color: \"red\" }}> *</b>}\n </label>\n <div class=\"mt-2\">\n <input\n ref={focus && purpose === \"create\" ? doAutoFocus : undefined}\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"username\"\n id=\"username\"\n data-error={!!errors?.username && form.username !== undefined}\n disabled={!editableUsername}\n value={form.username ?? defaultValue.username}\n onChange={(e) => {\n form.username = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n // placeholder=\"\"\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.username}\n isDirty={form.username !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Account id for authentication</i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"name\"\n >\n {i18n.str`Full name`}\n {editableName && <b style={{ color: \"red\" }}> *</b>}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"name\"\n data-error={!!errors?.name && form.name !== undefined}\n id=\"name\"\n disabled={!editableName}\n value={form.name ?? defaultValue.name}\n onChange={(e) => {\n form.name = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n // placeholder=\"\"\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.name}\n isDirty={form.name !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Name of the account holder</i18n.Translate>\n </p>\n </div>\n\n {purpose === \"create\" ? undefined : (\n <TextField\n id=\"internal-account\"\n label={i18n.str`Internal account`}\n help={\n purpose === \"create\"\n ? i18n.str`If empty a random account id will be assigned`\n : i18n.str`Share this id to receive bank transfers`\n }\n error={errors?.payto_uri}\n onChange={(e) => {\n form.payto_uri = e as PaytoString;\n updateForm(structuredClone(form));\n }}\n rightIcons={\n <CopyButton\n class=\"p-2 rounded-full text-black shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 \"\n getContent={() =>\n form.payto_uri ?? defaultValue.payto_uri ?? \"\"\n }\n />\n }\n value={(form.payto_uri ?? defaultValue.payto_uri) as PaytoString}\n disabled={!editableAccount}\n />\n )}\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"email\"\n >\n {i18n.str`Email`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"email\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"email\"\n id=\"email\"\n data-error={!!errors?.email && form.email !== undefined}\n disabled={purpose === \"show\"}\n value={form.email ?? defaultValue.email}\n onChange={(e) => {\n form.email = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.email}\n isDirty={form.email !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n To be used when second factor authentication is enabled\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"phone\"\n >\n {i18n.str`Phone`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"phone\"\n id=\"phone\"\n disabled={purpose === \"show\"}\n value={form.phone ?? defaultValue.phone}\n data-error={!!errors?.phone && form.phone !== undefined}\n onChange={(e) => {\n form.phone = e.currentTarget.value;\n updateForm(structuredClone(form));\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.phone}\n isDirty={form.phone !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n To be used when second factor authentication is enabled\n </i18n.Translate>\n </p>\n </div>\n\n {isCashoutEnabled && (\n <TextField\n id=\"cashout-account\"\n label={i18n.str`Cashout account`}\n help={i18n.str`External account number where the money is going to be sent when doing cashouts`}\n error={errors?.cashout_payto_uri}\n onChange={(e) => {\n form.cashout_payto_uri = e as PaytoString;\n updateForm(structuredClone(form));\n }}\n value={\n (form.cashout_payto_uri ??\n defaultValue.cashout_payto_uri) as PaytoString\n }\n disabled={!editableCashout}\n />\n )}\n\n <div class=\"sm:col-span-5\">\n <label\n for=\"debit\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Max debt`}</label>\n <InputAmount\n name=\"debit\"\n left\n currency={config.currency}\n value={form.debit_threshold ?? defaultValue.debit_threshold}\n onChange={\n !editableThreshold\n ? undefined\n : (e) => {\n form.debit_threshold = e as AmountString;\n updateForm(structuredClone(form));\n }\n }\n />\n <ShowInputErrorLabel\n message={\n errors?.debit_threshold\n ? String(errors?.debit_threshold)\n : undefined\n }\n isDirty={form.debit_threshold !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n How much the balance can go below zero.\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n for=\"minCashout\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Minimum cashout`}</label>\n <InputAmount\n name=\"minCashout\"\n left\n currency={config.currency}\n value={form.min_cashout ?? defaultValue.min_cashout}\n onChange={\n !editableMinCashout\n ? undefined\n : (e) => {\n form.min_cashout = e as AmountString;\n updateForm(structuredClone(form));\n }\n }\n />\n <ShowInputErrorLabel\n message={\n errors?.min_cashout ? String(errors?.min_cashout) : undefined\n }\n isDirty={form.min_cashout !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Custom minimum cashout amount for this account.\n </i18n.Translate>\n </p>\n </div>\n\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Is this account public?</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name=\"is public\"\n data-enabled={\n form.isPublic ?? defaultValue.isPublic ? \"true\" : \"false\"\n }\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n form.isPublic = !(form.isPublic ?? defaultValue.isPublic);\n updateForm(structuredClone(form));\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={\n form.isPublic ?? defaultValue.isPublic ? \"true\" : \"false\"\n }\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Public accounts have their balance publicly accessible\n </i18n.Translate>\n </p>\n </div>\n\n {purpose !== \"create\" || !userIsAdmin ? undefined : (\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>\n Is this account a payment provider?\n </i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name=\"is exchange\"\n data-enabled={\n form.isExchange ?? defaultValue.isExchange\n ? \"true\"\n : \"false\"\n }\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n form.isExchange = !form.isExchange;\n updateForm(structuredClone(form));\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={\n form.isExchange ?? defaultValue.isExchange\n ? \"true\"\n : \"false\"\n }\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n {children}\n </form>\n );\n}\n\nfunction getAccountId(\n type: \"iban\" | \"x-taler-bank\",\n s: PaytoString | undefined,\n): string | undefined {\n if (s === undefined) return undefined;\n const p = parsePaytoUri(s);\n if (p === undefined) return undefined;\n if (!p.isKnown) return \"<unknown>\";\n if (type === \"iban\" && p.targetType === \"iban\") return p.iban;\n if (type === \"x-taler-bank\" && p.targetType === \"x-taler-bank\")\n return p.account;\n return \"<unsupported>\";\n}\n\n{\n /* <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"cashout\"\n >\n {}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n ref={focus && purpose === \"update\" ? doAutoFocus : undefined}\n data-error={!!errors?.cashout_payto_uri && form.cashout_payto_uri !== undefined}\n class=\"block w-full disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"cashout\"\n id=\"cashout\"\n disabled={purpose === \"show\"}\n value={form.cashout_payto_uri ?? defaultValue.cashout_payto_uri}\n onChange={(e) => {\n form.cashout_payto_uri = e.currentTarget.value as PaytoString;\n if (!form.cashout_payto_uri) {\n form.cashout_payto_uri = undefined\n }\n updateForm(structuredClone(form));\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.cashout_payto_uri}\n isDirty={form.cashout_payto_uri !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\" >\n <i18n.Translate></i18n.Translate>\n </p>\n </div> */\n}\n\n// function PaytoField({\n// name,\n// label,\n// help,\n// type,\n// value,\n// disabled,\n// onChange,\n// error,\n// }: {\n// error: TranslatedString | undefined;\n// name: string;\n// label: TranslatedString;\n// help: TranslatedString;\n// onChange: (s: string) => void;\n// type: \"iban\" | \"x-taler-bank\" | \"bitcoin\";\n// disabled?: boolean;\n// value: string | undefined;\n// }): VNode {\n// if (type === \"iban\") {\n// return (\n// <div class=\"sm:col-span-5\">\n// <label\n// class=\"block text-sm font-medium leading-6 text-gray-900\"\n// for={name}\n// >\n// {label}\n// </label>\n// <div class=\"mt-2\">\n// <div class=\"flex justify-between\">\n// <input\n// type=\"text\"\n// class=\"mr-4 w-full block-inline disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n// name={name}\n// id={name}\n// disabled={disabled}\n// value={value ?? \"\"}\n// onChange={(e) => {\n// onChange(e.currentTarget.value);\n// }}\n// />\n// <CopyButton\n// class=\"p-2 rounded-full text-black shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 \"\n// getContent={() => value ?? \"\"}\n// />\n// </div>\n// <ShowInputErrorLabel message={error} isDirty={value !== undefined} />\n// </div>\n// <p class=\"mt-2 text-sm text-gray-500\">{help}</p>\n// </div>\n// );\n// }\n// if (type === \"x-taler-bank\") {\n// return (\n// <div class=\"sm:col-span-5\">\n// <label\n// class=\"block text-sm font-medium leading-6 text-gray-900\"\n// for={name}\n// >\n// {label}\n// </label>\n// <div class=\"mt-2\">\n// <div class=\"flex justify-between\">\n// <input\n// type=\"text\"\n// class=\"mr-4 w-full block-inline disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n// name={name}\n// id={name}\n// disabled={disabled}\n// value={value ?? \"\"}\n// onChange={(e) => {\n// onChange(e.currentTarget.value);\n// }}\n// />\n// <CopyButton\n// class=\"p-2 rounded-full text-black shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 \"\n// getContent={() => value ?? \"\"}\n// />\n// </div>\n// <ShowInputErrorLabel message={error} isDirty={value !== undefined} />\n// </div>\n// <p class=\"mt-2 text-sm text-gray-500\">\n// {help}\n// </p>\n// </div>\n// );\n// }\n// if (type === \"bitcoin\") {\n// return (\n// <div class=\"sm:col-span-5\">\n// <label\n// class=\"block text-sm font-medium leading-6 text-gray-900\"\n// for={name}\n// >\n// {label}\n// </label>\n// <div class=\"mt-2\">\n// <div class=\"flex justify-between\">\n// <input\n// type=\"text\"\n// class=\"mr-4 w-full block-inline disabled:bg-gray-100 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n// name={name}\n// id={name}\n// disabled={disabled}\n// value={value ?? \"\"}\n// />\n// <CopyButton\n// class=\"p-2 rounded-full text-black shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 \"\n// getContent={() => value ?? \"\"}\n// />\n// <ShowInputErrorLabel\n// message={error}\n// isDirty={value !== undefined}\n// />\n// </div>\n// </div>\n// <p class=\"mt-2 text-sm text-gray-500\">\n// {/* <i18n.Translate>bitcoin address</i18n.Translate> */}\n// {help}\n// </p>\n// </div>\n// );\n// }\n// assertUnreachable(type);\n// }\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n LocalNotificationBanner,\n ShowInputErrorLabel,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../../utils.js\";\nimport { doAutoFocus } from \"../PaytoWireTransferForm.js\";\nimport { ProfileNavigation } from \"../ProfileNavigation.js\";\n\nexport function UpdateAccountPassword({\n account: accountName,\n routeClose,\n onUpdateSuccess,\n onAuthorizationRequired,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeMyAccountPassword,\n routeConversionConfig,\n focus,\n routeHere,\n}: {\n routeClose: RouteDefinition;\n routeHere: RouteDefinition<{ account: string }>;\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n focus?: boolean;\n onAuthorizationRequired: () => void;\n onUpdateSuccess: () => void;\n account: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const [current, setCurrent] = useState<string | undefined>();\n const [password, setPassword] = useState<string | undefined>();\n const [repeat, setRepeat] = useState<string | undefined>();\n const [, updateBankState] = useBankState();\n\n const accountIsTheCurrentUser =\n credentials.status === \"loggedIn\"\n ? credentials.username === accountName\n : false;\n\n const errors = undefinedIfEmpty({\n current: !accountIsTheCurrentUser\n ? undefined\n : !current\n ? i18n.str`Required`\n : undefined,\n password: !password ? i18n.str`Required` : undefined,\n repeat: !repeat\n ? i18n.str`Required`\n : password !== repeat\n ? i18n.str`Repeated password doesn't match`\n : undefined,\n });\n const [notification, notify, handleError] = useLocalNotification();\n\n async function doChangePassword() {\n if (!!errors || !password || !token) return;\n await handleError(async () => {\n const request = {\n old_password: current,\n new_password: password,\n };\n const resp = await api.updatePassword(\n { username: accountName, token },\n request,\n );\n if (resp.type === \"ok\") {\n notifyInfo(i18n.str`Password changed`);\n onUpdateSuccess();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`Not authorized to change the password, maybe the session is invalid.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`Account not found`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:\n return notify({\n type: \"error\",\n title: i18n.str`You need to provide the old password. If you don't have it contact your account administrator.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:\n return notify({\n type: \"error\",\n title: i18n.str`Your current password doesn't match, can't change to a new password.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"update-password\",\n id: String(resp.body.challenge_id),\n location: routeHere.url({ account: accountName }),\n sent: AbsoluteTime.never(),\n request,\n });\n return onAuthorizationRequired();\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n return (\n <Fragment>\n <LocalNotificationBanner notification={notification} />\n {accountIsTheCurrentUser ? (\n <ProfileNavigation\n current=\"credentials\"\n routeMyAccountCashout={routeMyAccountCashout}\n routeMyAccountDelete={routeMyAccountDelete}\n routeMyAccountDetails={routeMyAccountDetails}\n routeMyAccountPassword={routeMyAccountPassword}\n routeConversionConfig={routeConversionConfig}\n />\n ) : (\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Account \"{accountName}\"</i18n.Translate>\n </h1>\n )}\n\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Update password</i18n.Translate>\n </h2>\n </div>\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n {accountIsTheCurrentUser ? (\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"password\"\n >\n {i18n.str`Current password`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"current\"\n id=\"current-password\"\n data-error={!!errors?.current && current !== undefined}\n value={current ?? \"\"}\n onChange={(e) => {\n setCurrent(e.currentTarget.value);\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.current}\n isDirty={current !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Your current password, for security\n </i18n.Translate>\n </p>\n </div>\n ) : undefined}\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"password\"\n >\n {i18n.str`New password`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n ref={focus ? doAutoFocus : undefined}\n type=\"password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"password\"\n id=\"password\"\n data-error={!!errors?.password && password !== undefined}\n value={password ?? \"\"}\n onChange={(e) => {\n setPassword(e.currentTarget.value);\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.password}\n isDirty={password !== undefined}\n />\n </div>\n </div>\n\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"repeat\"\n >\n {i18n.str`Type it again`}\n <b style={{ color: \"red\" }}> *</b>\n </label>\n <div class=\"mt-2\">\n <input\n type=\"password\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"repeat\"\n id=\"repeat\"\n data-error={!!errors?.repeat && repeat !== undefined}\n value={repeat ?? \"\"}\n onChange={(e) => {\n setRepeat(e.currentTarget.value);\n }}\n // placeholder=\"\"\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.repeat}\n isDirty={repeat !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Repeat the same password</i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeClose.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"change\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!!errors}\n onClick={(e) => {\n e.preventDefault();\n doChangePassword();\n }}\n >\n <i18n.Translate>Change</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountString,\n Amounts,\n CurrencySpecification,\n HttpStatusCode,\n TalerCorebankApi,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n RouteDefinition,\n useBankCoreApiContext,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport {\n format,\n sub\n} from \"date-fns\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { Transactions } from \"../../components/Transactions/index.js\";\nimport { useConversionInfo, useLastMonitorInfo } from \"../../hooks/regional.js\";\nimport { RenderAmount } from \"../PaytoWireTransferForm.js\";\nimport { WireTransfer } from \"../WireTransfer.js\";\nimport { AccountList } from \"./AccountList.js\";\n\n/**\n * Query account information and show QR code if there is pending withdrawal\n */\ninterface Props {\n routeCreate: RouteDefinition;\n routeDownloadStats: RouteDefinition;\n routeCreateWireTransfer: RouteDefinition<{\n account?: string;\n subject?: string;\n amount?: string;\n }>;\n\n routeShowAccount: RouteDefinition<{ account: string }>;\n routeRemoveAccount: RouteDefinition<{ account: string }>;\n routeUpdatePasswordAccount: RouteDefinition<{ account: string }>;\n routeShowCashoutsAccount: RouteDefinition<{ account: string }>;\n onAuthorizationRequired: () => void;\n}\nexport function AdminHome({\n routeCreate,\n routeRemoveAccount,\n routeShowAccount,\n routeUpdatePasswordAccount,\n routeDownloadStats,\n routeCreateWireTransfer,\n onAuthorizationRequired,\n}: Props): VNode {\n return (\n <Fragment>\n <Metrics routeDownloadStats={routeDownloadStats} />\n <WireTransfer\n routeHere={routeCreateWireTransfer}\n onAuthorizationRequired={onAuthorizationRequired}\n />\n <Transactions\n account=\"admin\"\n routeCreateWireTransfer={routeCreateWireTransfer}\n />\n <AccountList\n routeCreate={routeCreate}\n routeRemoveAccount={routeRemoveAccount}\n routeShowAccount={routeShowAccount}\n routeUpdatePasswordAccount={routeUpdatePasswordAccount}\n />\n </Fragment>\n );\n}\n\nfunction getDateForTimeframe(\n date: AbsoluteTime,\n timeframe: TalerCorebankApi.MonitorTimeframeParam,\n locale: Locale,\n): string {\n if (date.t_ms === \"never\") return \"--\";\n switch (timeframe) {\n case TalerCorebankApi.MonitorTimeframeParam.hour:\n return `${format(date.t_ms, \"HH\", { locale })}hs`;\n case TalerCorebankApi.MonitorTimeframeParam.day:\n return format(date.t_ms, \"EEEE\", { locale });\n case TalerCorebankApi.MonitorTimeframeParam.month:\n return format(date.t_ms, \"MMMM\", { locale });\n case TalerCorebankApi.MonitorTimeframeParam.year:\n return format(date.t_ms, \"yyyy\", { locale });\n case TalerCorebankApi.MonitorTimeframeParam.decade:\n return format(date.t_ms, \"yyyy\", { locale });\n }\n assertUnreachable(timeframe);\n}\n\nexport function getTimeframesForDate(\n time: Date,\n timeframe: TalerCorebankApi.MonitorTimeframeParam,\n): { current: AbsoluteTime; previous: AbsoluteTime } {\n switch (timeframe) {\n case TalerCorebankApi.MonitorTimeframeParam.hour:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { hours: 1 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { hours: 2 }).getTime(),\n ),\n };\n case TalerCorebankApi.MonitorTimeframeParam.day:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { days: 1 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { days: 4 }).getTime(),\n ),\n };\n case TalerCorebankApi.MonitorTimeframeParam.month:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { months: 1 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { months: 2 }).getTime(),\n ),\n };\n case TalerCorebankApi.MonitorTimeframeParam.year:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { years: 1 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { years: 2 }).getTime(),\n ),\n };\n case TalerCorebankApi.MonitorTimeframeParam.decade:\n return {\n current: AbsoluteTime.fromMilliseconds(\n sub(time, { years: 10 }).getTime(),\n ),\n previous: AbsoluteTime.fromMilliseconds(\n sub(time, { years: 20 }).getTime(),\n ),\n };\n default:\n assertUnreachable(timeframe);\n }\n}\n\nfunction Metrics({\n routeDownloadStats,\n}: {\n routeDownloadStats: RouteDefinition;\n}): VNode {\n const { i18n, dateLocale } = useTranslationContext();\n const [metricType, setMetricType] =\n useState<TalerCorebankApi.MonitorTimeframeParam>(\n TalerCorebankApi.MonitorTimeframeParam.hour,\n );\n const { config } = useBankCoreApiContext();\n const respInfo = useConversionInfo();\n const params = getTimeframesForDate(new Date(), metricType);\n\n const resp = useLastMonitorInfo(params.current, params.previous, metricType);\n if (!resp) return <Fragment />;\n if (resp instanceof TalerError) {\n return <ErrorLoadingWithDebug error={resp} />;\n }\n if (!respInfo) return <Fragment />;\n if (respInfo instanceof TalerError) {\n return <ErrorLoadingWithDebug error={respInfo} />;\n }\n if (respInfo.type === \"fail\") {\n switch (respInfo.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default: {\n assertUnreachable(respInfo.case);\n }\n }\n }\n\n if (resp.current.type !== \"ok\") {\n switch (resp.current.case) {\n case HttpStatusCode.BadRequest:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`Querying for the current stats failed`}\n >\n <i18n.Translate>The request parameters are wrong</i18n.Translate>\n </Attention>\n );\n case HttpStatusCode.Unauthorized:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`Querying for the current stats failed`}\n >\n <i18n.Translate>The user is unauthorized</i18n.Translate>\n </Attention>\n );\n default: {\n assertUnreachable(resp.current);\n }\n }\n }\n if (resp.previous.type !== \"ok\") {\n switch (resp.previous.case) {\n case HttpStatusCode.BadRequest:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`Querying for the previous stats failed`}\n >\n <i18n.Translate>The request parameters are wrong</i18n.Translate>\n </Attention>\n );\n case HttpStatusCode.Unauthorized:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`Querying for the previous stats failed`}\n >\n <i18n.Translate>The user is unauthorized</i18n.Translate>\n </Attention>\n );\n default: {\n assertUnreachable(resp.previous);\n }\n }\n }\n return (\n <div class=\"px-4 mt-4\">\n <div class=\"sm:flex sm:items-center mb-4\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Transaction volume report</i18n.Translate>\n </h1>\n </div>\n </div>\n\n <div class=\"sm:hidden\">\n <label for=\"tabs\" class=\"sr-only\">\n <i18n.Translate>Select a section</i18n.Translate>\n </label>\n <select\n id=\"tabs\"\n name=\"tabs\"\n class=\"block w-full rounded-md border-gray-300 focus:border-indigo-500 focus:ring-indigo-500\"\n onChange={(e) => {\n setMetricType(\n parseInt(e.currentTarget\n .value, 10) as TalerCorebankApi.MonitorTimeframeParam,\n );\n }}\n >\n <option\n value={TalerCorebankApi.MonitorTimeframeParam.hour}\n selected={metricType == TalerCorebankApi.MonitorTimeframeParam.hour}\n >\n <i18n.Translate>Last hour</i18n.Translate>\n </option>\n <option\n value={TalerCorebankApi.MonitorTimeframeParam.day}\n selected={metricType == TalerCorebankApi.MonitorTimeframeParam.day}\n >\n <i18n.Translate>Previous day</i18n.Translate>\n </option>\n <option\n value={TalerCorebankApi.MonitorTimeframeParam.month}\n selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.month\n }\n >\n <i18n.Translate>Last month</i18n.Translate>\n </option>\n <option\n value={TalerCorebankApi.MonitorTimeframeParam.year}\n selected={metricType == TalerCorebankApi.MonitorTimeframeParam.year}\n >\n <i18n.Translate>Last year</i18n.Translate>\n </option>\n </select>\n </div>\n <div class=\"hidden sm:block\">\n {/* FIXME: This should be LINKS */}\n <nav\n class=\"isolate flex divide-x divide-gray-200 rounded-lg shadow\"\n aria-label=\"Tabs\"\n >\n <button\n type=\"button\"\n name=\"set last hour\"\n onClick={(e) => {\n e.preventDefault();\n setMetricType(TalerCorebankApi.MonitorTimeframeParam.hour);\n }}\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.hour\n }\n class=\"rounded-l-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Last hour</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.hour\n }\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </button>\n <button\n type=\"button\"\n name=\"set previous day\"\n onClick={(e) => {\n e.preventDefault();\n setMetricType(TalerCorebankApi.MonitorTimeframeParam.day);\n }}\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.day\n }\n class=\" text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Previous day</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.day\n }\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </button>\n <button\n type=\"button\"\n name=\"set last month\"\n onClick={(e) => {\n e.preventDefault();\n setMetricType(TalerCorebankApi.MonitorTimeframeParam.month);\n }}\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.month\n }\n class=\"rounded-r-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Last month</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.month\n }\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </button>\n <button\n type=\"button\"\n name=\"set last year\"\n onClick={(e) => {\n e.preventDefault();\n setMetricType(TalerCorebankApi.MonitorTimeframeParam.year);\n }}\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.year\n }\n class=\"rounded-r-lg text-gray-500 hover:text-gray-700 data-[selected=true]:text-gray-900 group relative min-w-0 flex-1 overflow-hidden bg-white py-4 px-4 text-center text-sm font-medium hover:bg-gray-50 focus:z-10\"\n >\n <span>\n <i18n.Translate>Last Year</i18n.Translate>\n </span>\n <span\n aria-hidden=\"true\"\n data-selected={\n metricType == TalerCorebankApi.MonitorTimeframeParam.year\n }\n class=\"bg-transparent data-[selected=true]:bg-indigo-500 absolute inset-x-0 bottom-0 h-0.5\"\n ></span>\n </button>\n </nav>\n </div>\n\n <div class=\"w-full flex justify-between\">\n <h1 class=\"text-base text-gray-900 mt-5\">\n {i18n.str`Trading volume on ${getDateForTimeframe(\n params.current,\n metricType,\n dateLocale,\n )} compared to ${getDateForTimeframe(\n params.previous,\n metricType,\n dateLocale,\n )}`}\n </h1>\n </div>\n <dl class=\"mt-5 grid grid-cols-1 md:grid-cols-2 divide-y divide-gray-200 overflow-hidden rounded-lg bg-white shadow-lg md:divide-x md:divide-y-0\">\n {resp.current.body.type !== \"with-conversions\" ||\n resp.previous.body.type !== \"with-conversions\" ? undefined : (\n <Fragment>\n <div class=\"px-4 py-5 sm:p-6\">\n <dt class=\"text-base font-normal text-gray-900\">\n <i18n.Translate>Cashin</i18n.Translate>\n <div class=\"text-xs text-gray-500\">\n <i18n.Translate>\n Transferred from an external account to an account in this\n bank.\n </i18n.Translate>\n </div>\n </dt>\n <MetricValue\n current={resp.current.body.cashinFiatVolume}\n previous={resp.previous.body.cashinFiatVolume}\n spec={respInfo.body.fiat_currency_specification}\n />\n </div>\n <div class=\"px-4 py-5 sm:p-6\">\n <dt class=\"text-base font-normal text-gray-900\">\n <i18n.Translate>Cashout</i18n.Translate>\n </dt>\n <div class=\"text-xs text-gray-500\">\n <i18n.Translate>\n Transferred from an account in this bank to an external\n account.\n </i18n.Translate>\n </div>\n <MetricValue\n current={resp.current.body.cashoutFiatVolume}\n previous={resp.previous.body.cashoutFiatVolume}\n spec={respInfo.body.fiat_currency_specification}\n />\n </div>\n </Fragment>\n )}\n <div class=\"px-4 py-5 sm:p-6\">\n <dt class=\"text-base font-normal text-gray-900\">\n <i18n.Translate>Payin</i18n.Translate>\n <div class=\"text-xs text-gray-500\">\n <i18n.Translate>\n Transferred from an account to a Taler exchange.\n </i18n.Translate>\n </div>\n </dt>\n <MetricValue\n current={resp.current.body.talerInVolume}\n previous={resp.previous.body.talerInVolume}\n spec={config.currency_specification}\n />\n </div>\n <div class=\"px-4 py-5 sm:p-6\">\n <dt class=\"text-base font-normal text-gray-900\">\n <i18n.Translate>Payout</i18n.Translate>\n <div class=\"text-xs text-gray-500\">\n <i18n.Translate>\n Transferred from a Taler exchange to another account.\n </i18n.Translate>\n </div>\n </dt>\n <MetricValue\n current={resp.current.body.talerOutVolume}\n previous={resp.previous.body.talerOutVolume}\n spec={config.currency_specification}\n />\n </div>\n </dl>\n <div class=\"flex justify-end mt-4\">\n <a\n href={routeDownloadStats.url({})}\n name=\"download stats\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Download stats as CSV</i18n.Translate>\n </a>\n </div>\n </div>\n );\n}\n\nfunction MetricValue({\n current,\n previous,\n spec,\n}: {\n spec: CurrencySpecification;\n current: AmountString | undefined;\n previous: AmountString | undefined;\n}): VNode {\n const { i18n } = useTranslationContext();\n const cmp = current && previous ? Amounts.cmp(current, previous) : 0;\n const cv = !current ? undefined : Amounts.stringifyValue(current);\n const currAmount = !cv ? undefined : Number.parseFloat(cv);\n const prevAmount = !previous\n ? undefined\n : Number.parseFloat(Amounts.stringifyValue(previous));\n\n const rate =\n !currAmount ||\n Number.isNaN(currAmount) ||\n !prevAmount ||\n Number.isNaN(prevAmount)\n ? 0\n : cmp === -1\n ? 1 - Math.round(currAmount) / Math.round(prevAmount)\n : cmp === 1\n ? Math.round(currAmount) / Math.round(prevAmount) - 1\n : 0;\n\n const negative = cmp === 0 ? undefined : cmp === -1;\n const rateStr = `${(Math.abs(rate) * 100).toFixed(2)}%`;\n return (\n <Fragment>\n <dd class=\"mt-1 block \">\n <div class=\"flex justify-start text-2xl items-baseline font-semibold text-indigo-600\">\n {!current ? (\n \"-\"\n ) : (\n <RenderAmount\n value={Amounts.parseOrThrow(current)}\n spec={spec}\n hideSmall\n />\n )}\n </div>\n <div class=\"flex flex-col\">\n <div class=\"flex justify-end items-baseline text-2xl font-semibold text-indigo-600\">\n <small class=\"ml-2 text-sm font-medium text-gray-500\">\n <i18n.Translate>from</i18n.Translate>{\" \"}\n {!previous ? (\n \"-\"\n ) : (\n <RenderAmount\n value={Amounts.parseOrThrow(previous)}\n spec={spec}\n hideSmall\n />\n )}\n </small>\n </div>\n {!!rate && (\n <span\n data-negative={negative}\n class=\"flex items-center gap-x-1.5 w-fit rounded-md bg-green-100 text-green-800 data-[negative=true]:bg-red-100 px-2 py-1 text-xs font-medium data-[negative=true]:text-red-700 whitespace-pre\"\n >\n {negative ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 4.5v15m0 0l6.75-6.75M12 19.5l-6.75-6.75\"\n />\n </svg>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 19.5v-15m0 0l-6.75 6.75M12 4.5l6.75 6.75\"\n />\n </svg>\n )}\n\n {negative ? (\n <span class=\"sr-only\">\n <i18n.Translate>Decreased by</i18n.Translate>\n </span>\n ) : (\n <span class=\"sr-only\">\n <i18n.Translate>Increased by</i18n.Translate>\n </span>\n )}\n {rateStr}\n </span>\n )}\n </div>\n </dd>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport { Loading, useTranslationContext } from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useBusinessAccounts } from \"../../hooks/regional.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { RenderAmount } from \"../PaytoWireTransferForm.js\";\n\ninterface Props {\n routeCreate: RouteDefinition;\n\n routeShowAccount: RouteDefinition<{ account: string }>;\n routeRemoveAccount: RouteDefinition<{ account: string }>;\n routeUpdatePasswordAccount: RouteDefinition<{ account: string }>;\n}\n\nexport function AccountList({\n routeCreate,\n routeRemoveAccount,\n routeShowAccount,\n routeUpdatePasswordAccount,\n}: Props): VNode {\n const result = useBusinessAccounts();\n const { i18n } = useTranslationContext();\n const { config } = useBankCoreApiContext();\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n return <Fragment />;\n default:\n assertUnreachable(result.case);\n }\n }\n\n const onGoStart = result.isFirstPage ? undefined : result.loadFirst;\n const onGoNext = result.isLastPage ? undefined : result.loadNext;\n\n const accounts = result.body;\n return (\n <Fragment>\n <div class=\"px-4 sm:px-6 lg:px-8 mt-8\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n <i18n.Translate>Accounts</i18n.Translate>\n </h1>\n </div>\n <div class=\"mt-4 sm:ml-16 sm:mt-0 sm:flex-none\">\n <a\n href={routeCreate.url({})}\n name=\"create account\"\n type=\"button\"\n class=\"block rounded-md bg-indigo-600 px-3 py-2 text-center text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Create account</i18n.Translate>\n </a>\n </div>\n </div>\n <div class=\"mt-4 flow-root\">\n <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n {!accounts.length ? (\n <div>{/* FIXME: ADD empty list */}</div>\n ) : (\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n class=\"py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-0\"\n >{i18n.str`Username`}</th>\n <th\n scope=\"col\"\n class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Name`}</th>\n <th\n scope=\"col\"\n class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900\"\n >{i18n.str`Balance`}</th>\n <th scope=\"col\" class=\"relative py-3.5 pl-3 pr-4 sm:pr-0\">\n <span class=\"sr-only\">{i18n.str`Actions`}</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200\">\n {accounts.map((item, idx) => {\n const balance = !item.balance\n ? undefined\n : Amounts.parse(item.balance.amount);\n const noBalance = Amounts.isZero(item.balance.amount);\n const balanceIsDebit =\n item.balance &&\n item.balance.credit_debit_indicator == \"debit\";\n\n return (\n <tr key={idx}>\n <td class=\"whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900 sm:pl-0\">\n <a\n name={`show account ${item.username}`}\n href={routeShowAccount.url({\n account: item.username,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n {item.username}\n </a>\n </td>\n <td class=\"whitespace-nowrap px-3 py-4 text-sm text-gray-500\">\n {item.name}\n </td>\n <td\n data-negative={\n noBalance\n ? undefined\n : balanceIsDebit\n ? \"true\"\n : \"false\"\n }\n class=\"whitespace-nowrap px-3 py-4 text-sm text-gray-500 data-[negative=false]:text-green-600 data-[negative=true]:text-red-600 \"\n >\n {!balance ? (\n i18n.str`Unknown`\n ) : (\n <span class=\"amount\">\n <RenderAmount\n value={balance}\n negative={balanceIsDebit}\n spec={config.currency_specification}\n />\n </span>\n )}\n </td>\n <td class=\"relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-0\">\n <a\n name={`update password ${item.username}`}\n href={routeUpdatePasswordAccount.url({\n account: item.username,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n <i18n.Translate>Change password</i18n.Translate>\n </a>\n <br />\n {/* {config.allow_conversion ?\n <Fragment>\n\n <a\n name={`show cashout ${item.username}`}\n href={routeShowCashoutsAccount.url({\n account: item.username,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n <i18n.Translate>Cashouts</i18n.Translate>\n </a>\n <br />\n </Fragment>\n : undefined} */}\n {noBalance ? (\n <a\n name={`remove account ${item.username}`}\n href={routeRemoveAccount.url({\n account: item.username,\n })}\n class=\"text-indigo-600 hover:text-indigo-900\"\n >\n <i18n.Translate>Remove</i18n.Translate>\n </a>\n ) : undefined}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n )}\n </div>\n <nav\n class=\"flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 rounded-lg\"\n aria-label=\"Pagination\"\n >\n <div class=\"flex flex-1 justify-between sm:justify-end\">\n <button\n name=\"first page\"\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onGoStart}\n onClick={onGoStart}\n >\n <i18n.Translate>First page</i18n.Translate>\n </button>\n <button\n name=\"next page\"\n class=\"relative disabled:bg-gray-100 disabled:text-gray-500 ml-3 inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline-offset-0\"\n disabled={!onGoNext}\n onClick={onGoNext}\n >\n <i18n.Translate>Next</i18n.Translate>\n </button>\n </div>\n </nav>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n HttpStatusCode,\n TalerCorebankApi,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { AccountForm } from \"./AccountForm.js\";\n\nexport function CreateNewAccount({\n routeCancel,\n onCreateSuccess,\n}: {\n routeCancel: RouteDefinition;\n onCreateSuccess: () => void;\n}): VNode {\n const { i18n } = useTranslationContext();\n const { state: credentials } = useSessionState();\n const token =\n credentials.status !== \"loggedIn\" ? undefined : credentials.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const [submitAccount, setSubmitAccount] = useState<\n TalerCorebankApi.RegisterAccountRequest | undefined\n >();\n const [notification, notify, handleError] = useLocalNotification();\n\n async function doCreate() {\n if (!submitAccount || !token) return;\n await handleError(async () => {\n const resp = await api.createAccount(token, submitAccount);\n if (resp.type === \"ok\") {\n notifyInfo(\n i18n.str`Account created with password \"${submitAccount.password}\".`,\n );\n onCreateSuccess();\n } else {\n switch (resp.case) {\n case HttpStatusCode.BadRequest:\n return notify({\n type: \"error\",\n title: i18n.str`Server replied that phone or email is invalid`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`The rights to perform the operation are not sufficient`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:\n return notify({\n type: \"error\",\n title: i18n.str`Account username is already taken`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:\n return notify({\n type: \"error\",\n title: i18n.str`Account id is already taken`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_UNALLOWED_DEBIT:\n return notify({\n type: \"error\",\n title: i18n.str`Bank ran out of bonus credit.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return notify({\n type: \"error\",\n title: i18n.str`Account username can't be used because is reserved`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:\n return notify({\n type: \"error\",\n title: i18n.str`Only admin is allow to set debt limit.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_MISSING_TAN_INFO:\n return notify({\n type: \"error\",\n title: i18n.str`No information for the selected authentication channel.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:\n return notify({\n type: \"error\",\n title: i18n.str`Authentication channel is not supported.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:\n return notify({\n type: \"error\",\n title: i18n.str`Only admin can create accounts with second factor authentication.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_NON_ADMIN_SET_MIN_CASHOUT: {\n return notify({\n type: \"error\",\n title: i18n.str`Only the administrator can change the minimun cashout limit.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n if (!(credentials.status === \"loggedIn\" && credentials.isUserAdministrator)) {\n return (\n <Fragment>\n <Attention type=\"warning\" title={i18n.str`Can't create accounts`}>\n <i18n.Translate>\n Only system admin can create accounts.\n </i18n.Translate>\n </Attention>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeCancel.url({})}\n name=\"close\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </Fragment>\n );\n }\n\n return (\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>New bank account</i18n.Translate>\n </h2>\n </div>\n <AccountForm\n template={undefined}\n purpose=\"create\"\n onChange={(a) => {\n setSubmitAccount(a);\n }}\n >\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeCancel.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"create\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={!submitAccount}\n onClick={(e) => {\n e.preventDefault();\n doCreate();\n }}\n >\n <i18n.Translate>Create</i18n.Translate>\n </button>\n </div>\n </AccountForm>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AccessToken,\n AmountString,\n TalerCoreBankHttpClient,\n TalerCorebankApi,\n TalerError,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n LocalNotificationBanner,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { getTimeframesForDate } from \"./AdminHome.js\";\n\ninterface Props {\n routeCancel: RouteDefinition;\n}\n\ntype Options = {\n dayMetric: boolean;\n hourMetric: boolean;\n monthMetric: boolean;\n yearMetric: boolean;\n compareWithPrevious: boolean;\n endOnFirstFail: boolean;\n includeHeader: boolean;\n};\n\n/**\n * Show histories of public accounts.\n */\nexport function DownloadStats({ routeCancel }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const { state: credentials } = useSessionState();\n const creds =\n credentials.status !== \"loggedIn\" || !credentials.isUserAdministrator\n ? undefined\n : credentials;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n\n const [options, setOptions] = useState<Options>({\n compareWithPrevious: true,\n dayMetric: true,\n endOnFirstFail: false,\n hourMetric: true,\n includeHeader: true,\n monthMetric: true,\n yearMetric: true,\n });\n const [lastStep, setLastStep] = useState<{ step: number; total: number }>();\n const [downloaded, setDownloaded] = useState<string>();\n const referenceDates = [new Date()];\n const [notification, , handleError] = useLocalNotification();\n\n if (!creds) {\n return <div>only admin can download stats</div>;\n }\n\n return (\n <div>\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <LocalNotificationBanner notification={notification} />\n\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Download bank stats</i18n.Translate>\n </h2>\n </div>\n\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include hour metric</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`hour switch`}\n data-enabled={options.hourMetric}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n hourMetric: !options.hourMetric,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.hourMetric}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include day metric</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`day switch`}\n data-enabled={!!options.dayMetric}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({ ...options, dayMetric: !options.dayMetric });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.dayMetric}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include month metric</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`month switch`}\n data-enabled={!!options.monthMetric}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n monthMetric: !options.monthMetric,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.monthMetric}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include year metric</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`year switch`}\n data-enabled={!!options.yearMetric}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n yearMetric: !options.yearMetric,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.yearMetric}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Include table header</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`header switch`}\n data-enabled={!!options.includeHeader}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n includeHeader: !options.includeHeader,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.includeHeader}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>\n Add previous metric for compare\n </i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`compare switch`}\n data-enabled={!!options.compareWithPrevious}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n compareWithPrevious: !options.compareWithPrevious,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.compareWithPrevious}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n <div class=\"sm:col-span-5\">\n <div class=\"flex items-center justify-between\">\n <span class=\"flex flex-grow flex-col\">\n <span\n class=\"text-sm text-black font-medium leading-6 \"\n id=\"availability-label\"\n >\n <i18n.Translate>Fail on first error</i18n.Translate>\n </span>\n </span>\n <button\n type=\"button\"\n name={`fail switch`}\n data-enabled={!!options.endOnFirstFail}\n class=\"bg-indigo-600 data-[enabled=false]:bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2\"\n role=\"switch\"\n aria-checked=\"false\"\n aria-labelledby=\"availability-label\"\n aria-describedby=\"availability-description\"\n onClick={() => {\n setOptions({\n ...options,\n endOnFirstFail: !options.endOnFirstFail,\n });\n }}\n >\n <span\n aria-hidden=\"true\"\n data-enabled={options.endOnFirstFail}\n class=\"translate-x-5 data-[enabled=false]:translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out\"\n ></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n name=\"cancel\"\n href={routeCancel.url({})}\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"download\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n disabled={lastStep !== undefined}\n onClick={async () => {\n setDownloaded(undefined);\n await handleError(async () => {\n const csv = await fetchAllStatus(\n api,\n creds.token,\n options,\n referenceDates,\n (step, total) => {\n setLastStep({ step, total });\n },\n );\n setDownloaded(csv);\n });\n setLastStep(undefined);\n }}\n >\n <i18n.Translate>Download</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n {!lastStep || lastStep.step === lastStep.total ? (\n <div class=\"h-5 mb-5\" />\n ) : (\n <div>\n <div class=\"relative mb-5 h-5 rounded-full bg-gray-200\">\n <div\n class=\"h-full animate-pulse rounded-full bg-blue-500\"\n style={{\n width: `${Math.round((lastStep.step / lastStep.total) * 100)}%`,\n }}\n >\n <span class=\"absolute inset-0 flex items-center justify-center text-xs font-semibold text-white\">\n <i18n.Translate>\n downloading...{\" \"}\n {Math.round((lastStep.step / lastStep.total) * 100)}\n </i18n.Translate>\n </span>\n </div>\n </div>\n </div>\n )}\n {!downloaded ? (\n <div class=\"h-5 mb-5\" />\n ) : (\n <a\n href={\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(downloaded)\n }\n name=\"save file\"\n download={\"bank-stats.csv\"}\n >\n <Attention title={i18n.str`Download completed`}>\n <i18n.Translate>\n Click here to save the file in your computer.\n </i18n.Translate>\n </Attention>\n </a>\n )}\n </div>\n );\n}\n\nasync function fetchAllStatus(\n api: TalerCoreBankHttpClient,\n token: AccessToken,\n options: Options,\n references: Date[],\n progress: (current: number, total: number) => void,\n): Promise<string> {\n const allMetrics: TalerCorebankApi.MonitorTimeframeParam[] = [];\n if (options.hourMetric) {\n allMetrics.push(TalerCorebankApi.MonitorTimeframeParam.hour);\n }\n if (options.dayMetric) {\n allMetrics.push(TalerCorebankApi.MonitorTimeframeParam.day);\n }\n if (options.monthMetric) {\n allMetrics.push(TalerCorebankApi.MonitorTimeframeParam.month);\n }\n if (options.yearMetric) {\n allMetrics.push(TalerCorebankApi.MonitorTimeframeParam.year);\n }\n\n /**\n * convert request into frames\n */\n const allFrames = allMetrics.flatMap((timeframe) =>\n references.map((reference) => ({\n reference,\n timeframe,\n moment: getTimeframesForDate(reference, timeframe),\n })),\n );\n const total = allFrames.length;\n\n /**\n * call API for info\n */\n const allInfo = await allFrames.reduce(\n async (prev, frame, index) => {\n const accumulatedMap = await prev;\n progress(index, total);\n // await delay()\n const previous = options.compareWithPrevious\n ? await api.getMonitor(token, {\n timeframe: frame.timeframe,\n date: frame.moment.previous,\n })\n : undefined;\n\n if (previous && previous.type === \"fail\" && options.endOnFirstFail) {\n throw TalerError.fromUncheckedDetail(previous.detail);\n }\n\n const current = await api.getMonitor(token, {\n timeframe: frame.timeframe,\n date: frame.moment.current,\n });\n\n if (current.type === \"fail\" && options.endOnFirstFail) {\n throw TalerError.fromUncheckedDetail(current.detail);\n }\n\n const metricName =\n TalerCorebankApi.MonitorTimeframeParam[allMetrics[index]];\n accumulatedMap[metricName] = {\n reference: frame.reference,\n current: current.type !== \"ok\" ? undefined : current.body,\n previous:\n !previous || previous.type !== \"ok\" ? undefined : previous.body,\n };\n return accumulatedMap;\n },\n Promise.resolve({} as Record<string, Data>),\n );\n progress(total, total);\n\n /**\n * convert into table format\n *\n */\n const table: Array<string[]> = [];\n if (options.includeHeader) {\n table.push([\n \"date\",\n \"metric\",\n \"reference\",\n \"talerInCount\",\n \"talerInVolume\",\n \"talerOutCount\",\n \"talerOutVolume\",\n \"cashinCount\",\n \"cashinFiatVolume\",\n \"cashinRegionalVolume\",\n \"cashoutCount\",\n \"cashoutFiatVolume\",\n \"cashoutRegionalVolume\",\n ]);\n }\n Object.entries(allInfo).forEach(([name, data]) => {\n if (data.current) {\n const row: TableRow = {\n date: data.reference.getTime(),\n metric: name,\n reference: \"current\",\n ...dataToRow(data.current),\n };\n table.push(Object.values(row) as string[]);\n }\n\n if (data.previous) {\n const row: TableRow = {\n date: data.reference.getTime(),\n metric: name,\n reference: \"previous\",\n ...dataToRow(data.previous),\n };\n table.push(Object.values(row) as string[]);\n }\n });\n\n const csv = table.reduce((acc, row) => {\n return acc + row.join(\",\") + \"\\n\";\n }, \"\");\n\n return csv;\n}\n\ntype JustData = Omit<Omit<Omit<TableRow, \"metric\">, \"date\">, \"reference\">;\nfunction dataToRow(info: TalerCorebankApi.MonitorResponse): JustData {\n return {\n talerInCount: info.talerInCount,\n talerInVolume: info.talerInVolume,\n talerOutCount: info.talerOutCount,\n talerOutVolume: info.talerOutVolume,\n cashinCount: info.type === \"no-conversions\" ? undefined : info.cashinCount,\n cashinFiatVolume:\n info.type === \"no-conversions\" ? undefined : info.cashinFiatVolume,\n cashinRegionalVolume:\n info.type === \"no-conversions\" ? undefined : info.cashinRegionalVolume,\n cashoutCount:\n info.type === \"no-conversions\" ? undefined : info.cashoutCount,\n cashoutFiatVolume:\n info.type === \"no-conversions\" ? undefined : info.cashoutFiatVolume,\n cashoutRegionalVolume:\n info.type === \"no-conversions\" ? undefined : info.cashoutRegionalVolume,\n };\n}\n\ntype Data = {\n reference: Date;\n previous: TalerCorebankApi.MonitorResponse | undefined;\n current: TalerCorebankApi.MonitorResponse | undefined;\n};\ntype TableRow = {\n date: number;\n metric: string;\n reference: \"current\" | \"previous\";\n cashinCount?: number;\n cashinRegionalVolume?: AmountString;\n cashinFiatVolume?: AmountString;\n cashoutCount?: number;\n cashoutRegionalVolume?: AmountString;\n cashoutFiatVolume?: AmountString;\n talerInCount: number;\n talerInVolume: AmountString;\n talerOutCount: number;\n talerOutVolume: AmountString;\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n TalerErrorCode,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n notifyInfo,\n useLocalNotification,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useAccountDetails } from \"../../hooks/account.js\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport { undefinedIfEmpty } from \"../../utils.js\";\nimport { LoginForm } from \"../LoginForm.js\";\nimport { doAutoFocus } from \"../PaytoWireTransferForm.js\";\nimport { useBankState } from \"../../hooks/bank-state.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\n\nexport function RemoveAccount({\n account,\n routeCancel,\n onUpdateSuccess,\n onAuthorizationRequired,\n focus,\n routeHere,\n}: {\n focus?: boolean;\n routeHere: RouteDefinition<{ account: string }>;\n onAuthorizationRequired: () => void;\n routeCancel: RouteDefinition;\n onUpdateSuccess: () => void;\n account: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n const result = useAccountDetails(account);\n const [accountName, setAccountName] = useState<string | undefined>();\n\n const { state } = useSessionState();\n const token = state.status !== \"loggedIn\" ? undefined : state.token;\n const {\n lib: { bank: api },\n } = useBankCoreApiContext();\n const [notification, notify, handleError] = useLocalNotification();\n const [, updateBankState] = useBankState();\n\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.Unauthorized:\n return <LoginForm currentUser={account} />;\n case HttpStatusCode.NotFound:\n return <LoginForm currentUser={account} />;\n default:\n assertUnreachable(result);\n }\n }\n\n const balance = Amounts.parse(result.body.balance.amount);\n if (!balance) {\n return <div>there was an error reading the balance</div>;\n }\n const isBalanceEmpty = Amounts.isZero(balance);\n if (!isBalanceEmpty) {\n return (\n <Fragment>\n <Attention type=\"warning\" title={i18n.str`Can't delete the account`}>\n <i18n.Translate>\n The account can't be delete while still holding some balance. First\n make sure that the owner make a complete cashout.\n </i18n.Translate>\n </Attention>\n <div class=\"mt-5 sm:mt-6\">\n <a\n href={routeCancel.url({})}\n name=\"close\"\n class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </Fragment>\n );\n }\n\n async function doRemove() {\n if (!token) return;\n await handleError(async () => {\n const resp = await api.deleteAccount({ username: account, token });\n if (resp.type === \"ok\") {\n notifyInfo(i18n.str`Account removed`);\n onUpdateSuccess();\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized:\n return notify({\n type: \"error\",\n title: i18n.str`No enough permission to delete the account.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.NotFound:\n return notify({\n type: \"error\",\n title: i18n.str`The username was not found.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:\n return notify({\n type: \"error\",\n title: i18n.str`Can't delete a reserved username.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:\n return notify({\n type: \"error\",\n title: i18n.str`Can't delete an account with balance different than zero.`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n case HttpStatusCode.Accepted: {\n updateBankState(\"currentChallenge\", {\n operation: \"delete-account\",\n id: String(resp.body.challenge_id),\n sent: AbsoluteTime.never(),\n location: routeHere.url({ account }),\n request: account,\n });\n return onAuthorizationRequired();\n }\n default: {\n assertUnreachable(resp);\n }\n }\n }\n });\n }\n\n const errors = undefinedIfEmpty({\n accountName: !accountName\n ? i18n.str`Required`\n : account !== accountName\n ? i18n.str`Name doesn't match`\n : undefined,\n });\n\n return (\n <div>\n <LocalNotificationBanner notification={notification} />\n\n <Attention\n type=\"warning\"\n title={i18n.str`You are going to remove the account`}\n >\n <i18n.Translate>This step can't be undone.</i18n.Translate>\n </Attention>\n\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Deleting account \"{account}\"</i18n.Translate>\n </h2>\n </div>\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for=\"password\"\n >\n {i18n.str`Verification`}\n </label>\n <div class=\"mt-2\">\n <input\n ref={focus ? doAutoFocus : undefined}\n type=\"text\"\n class=\"block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"password\"\n id=\"password\"\n data-error={\n !!errors?.accountName && accountName !== undefined\n }\n value={accountName ?? \"\"}\n onChange={(e) => {\n setAccountName(e.currentTarget.value);\n }}\n placeholder={account}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={errors?.accountName}\n isDirty={accountName !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Enter the account name that is going to be deleted\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8\">\n <a\n href={routeCancel.url({})}\n name=\"cancel\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n <button\n type=\"submit\"\n name=\"delete\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-red-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\"\n disabled={!!errors}\n onClick={(e) => {\n e.preventDefault();\n doRemove();\n }}\n >\n <i18n.Translate>Delete</i18n.Translate>\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n AmountJson,\n Amounts,\n HttpStatusCode,\n TalerBankConversionApi,\n TalerError,\n TranslatedString,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n InternationalizationAPI,\n LocalNotificationBanner,\n ShowInputErrorLabel,\n useLocalNotification,\n useTranslationContext,\n utils,\n} from \"@gnu-taler/web-util/browser\";\nimport { Fragment, VNode, h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { useBankCoreApiContext } from \"@gnu-taler/web-util/browser\";\nimport { useSessionState } from \"../../hooks/session.js\";\nimport {\n TransferCalculation,\n useCashinEstimator,\n useCashoutEstimator,\n useConversionInfo,\n} from \"../../hooks/regional.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { undefinedIfEmpty } from \"../../utils.js\";\nimport { InputAmount, RenderAmount } from \"../PaytoWireTransferForm.js\";\nimport { ProfileNavigation } from \"../ProfileNavigation.js\";\nimport {\n FormErrors,\n FormStatus,\n FormValues,\n RecursivePartial,\n UIField,\n useFormState,\n} from \"../../hooks/form.js\";\n\ninterface Props {\n routeMyAccountDetails: RouteDefinition;\n routeMyAccountDelete: RouteDefinition;\n routeMyAccountPassword: RouteDefinition;\n routeMyAccountCashout: RouteDefinition;\n routeConversionConfig: RouteDefinition;\n routeCancel: RouteDefinition;\n onUpdateSuccess: () => void;\n}\n\ntype FormType = {\n amount: AmountJson;\n conv: TalerBankConversionApi.ConversionRate;\n};\n\nfunction useComponentState({\n routeCancel,\n routeConversionConfig,\n routeMyAccountCashout,\n routeMyAccountDelete,\n routeMyAccountDetails,\n routeMyAccountPassword,\n}: Props): utils.RecursiveState<VNode> {\n const { i18n } = useTranslationContext();\n\n const result = useConversionInfo();\n const info =\n result && !(result instanceof TalerError) && result.type === \"ok\"\n ? result.body\n : undefined;\n\n const { state: credentials } = useSessionState();\n const creds =\n credentials.status !== \"loggedIn\" || !credentials.isUserAdministrator\n ? undefined\n : credentials;\n\n if (!info) {\n return <i18n.Translate>loading...</i18n.Translate>;\n }\n\n if (!creds) {\n return <i18n.Translate>only admin can setup conversion</i18n.Translate>;\n }\n\n return function afterComponentLoads() {\n const { i18n } = useTranslationContext();\n\n const {\n lib: { conversion },\n } = useBankCoreApiContext();\n\n const [notification, notify, handleError] = useLocalNotification();\n\n const initalState: FormValues<FormType> = {\n amount: \"100\",\n conv: {\n cashin_min_amount: info.conversion_rate.cashin_min_amount.split(\":\")[1],\n cashin_tiny_amount:\n info.conversion_rate.cashin_tiny_amount.split(\":\")[1],\n cashin_fee: info.conversion_rate.cashin_fee.split(\":\")[1],\n cashin_ratio: info.conversion_rate.cashin_ratio,\n cashin_rounding_mode: info.conversion_rate.cashin_rounding_mode,\n cashout_min_amount:\n info.conversion_rate.cashout_min_amount.split(\":\")[1],\n cashout_tiny_amount:\n info.conversion_rate.cashout_tiny_amount.split(\":\")[1],\n cashout_fee: info.conversion_rate.cashout_fee.split(\":\")[1],\n cashout_ratio: info.conversion_rate.cashout_ratio,\n cashout_rounding_mode: info.conversion_rate.cashout_rounding_mode,\n },\n };\n\n const [form, status] = useFormState<FormType>(\n initalState,\n createFormValidator(i18n, info.regional_currency, info.fiat_currency),\n );\n\n const { estimateByDebit: calculateCashoutFromDebit } =\n useCashoutEstimator();\n\n const { estimateByDebit: calculateCashinFromDebit } = useCashinEstimator();\n\n const [calculationResult, setCalc] = useState<{\n cashin: TransferCalculation;\n cashout: TransferCalculation;\n }>();\n\n useEffect(() => {\n async function doAsync() {\n await handleError(async () => {\n if (!info) return;\n if (!form.amount?.value || form.amount.error) return;\n const in_amount = Amounts.parseOrThrow(\n `${info.fiat_currency}:${form.amount.value}`,\n );\n const in_fee = Amounts.parseOrThrow(info.conversion_rate.cashin_fee);\n const cashin = await calculateCashinFromDebit(in_amount, in_fee);\n\n if (cashin === \"amount-is-too-small\") {\n setCalc(undefined);\n return;\n }\n // const out_amount = Amounts.parseOrThrow(`${info.regional_currency}:${form.amount.value}`)\n const out_fee = Amounts.parseOrThrow(\n info.conversion_rate.cashout_fee,\n );\n const cashout = await calculateCashoutFromDebit(\n cashin.credit,\n out_fee,\n );\n\n setCalc({ cashin, cashout });\n });\n }\n doAsync();\n }, [\n form.amount?.value,\n form.conv?.cashin_fee?.value,\n form.conv?.cashout_fee?.value,\n ]);\n\n const [section, setSection] = useState<\"detail\" | \"cashout\" | \"cashin\">(\n \"detail\",\n );\n const cashinCalc =\n calculationResult?.cashin === \"amount-is-too-small\"\n ? undefined\n : calculationResult?.cashin;\n const cashoutCalc =\n calculationResult?.cashout === \"amount-is-too-small\"\n ? undefined\n : calculationResult?.cashout;\n async function doUpdate() {\n if (!creds) return;\n await handleError(async () => {\n if (status.status === \"fail\") return;\n const resp = await conversion.updateConversionRate(\n creds.token,\n status.result.conv,\n );\n if (resp.type === \"ok\") {\n setSection(\"detail\");\n } else {\n switch (resp.case) {\n case HttpStatusCode.Unauthorized: {\n return notify({\n type: \"error\",\n title: i18n.str`Wrong credentials`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n case HttpStatusCode.NotImplemented: {\n return notify({\n type: \"error\",\n title: i18n.str`Conversion is disabled`,\n description: resp.detail.hint as TranslatedString,\n debug: resp.detail,\n when: AbsoluteTime.now(),\n });\n }\n default:\n assertUnreachable(resp);\n }\n }\n });\n }\n\n const in_ratio = Number.parseFloat(info.conversion_rate.cashin_ratio);\n const out_ratio = Number.parseFloat(info.conversion_rate.cashout_ratio);\n\n const both_high = in_ratio > 1 && out_ratio > 1;\n const both_low = in_ratio < 1 && out_ratio < 1;\n\n return (\n <div>\n <ProfileNavigation\n current=\"conversion\"\n routeMyAccountCashout={routeMyAccountCashout}\n routeMyAccountDelete={routeMyAccountDelete}\n routeMyAccountDetails={routeMyAccountDetails}\n routeMyAccountPassword={routeMyAccountPassword}\n routeConversionConfig={routeConversionConfig}\n />\n\n <LocalNotificationBanner notification={notification} />\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <div class=\"px-4 sm:px-0\">\n <h2 class=\"text-base font-semibold leading-7 text-gray-900\">\n <i18n.Translate>Conversion</i18n.Translate>\n </h2>\n <div class=\"px-2 mt-2 grid grid-cols-1 gap-y-4 sm:gap-x-4\">\n <label\n data-enabled={section === \"detail\"}\n class=\"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none border-gray-300 data-[enabled=true]:border-indigo-600 data-[enabled=true]:ring-2 data-[enabled=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Newsletter\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-0-label\"\n aria-describedby=\"project-type-0-description-0 project-type-0-description-1\"\n onChange={() => {\n setSection(\"detail\");\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Details</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n\n <label\n data-enabled={section === \"cashout\"}\n class=\"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none border-gray-300 -- data-[enabled=true]:border-indigo-600 data-[enabled=true]:ring-2 data-[enabled=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-1-label\"\n aria-describedby=\"project-type-1-description-0 project-type-1-description-1\"\n onChange={() => {\n setSection(\"cashout\");\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Config cashout</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n <label\n data-enabled={section === \"cashin\"}\n class=\"relative flex cursor-pointer rounded-lg border bg-white p-4 shadow-sm focus:outline-none border-gray-300 -- data-[enabled=true]:border-indigo-600 data-[enabled=true]:ring-2 data-[enabled=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"project-type\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n aria-labelledby=\"project-type-1-label\"\n aria-describedby=\"project-type-1-description-0 project-type-1-description-1\"\n onChange={() => {\n setSection(\"cashin\");\n }}\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900\">\n <i18n.Translate>Config cashin</i18n.Translate>\n </span>\n </span>\n </span>\n </label>\n </div>\n </div>\n\n <form\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onSubmit={(e) => {\n e.preventDefault();\n }}\n >\n {section == \"cashin\" && (\n <ConversionForm\n id=\"cashin\"\n inputCurrency={info.fiat_currency}\n outputCurrency={info.regional_currency}\n fee={form?.conv?.cashin_fee}\n minimum={form?.conv?.cashin_min_amount}\n ratio={form?.conv?.cashin_ratio}\n rounding={form?.conv?.cashin_rounding_mode}\n tiny={form?.conv?.cashin_tiny_amount}\n />\n )}\n\n {section == \"cashout\" && (\n <Fragment>\n <ConversionForm\n id=\"cashout\"\n inputCurrency={info.regional_currency}\n outputCurrency={info.fiat_currency}\n fee={form?.conv?.cashout_fee}\n minimum={form?.conv?.cashout_min_amount}\n ratio={form?.conv?.cashout_ratio}\n rounding={form?.conv?.cashout_rounding_mode}\n tiny={form?.conv?.cashout_tiny_amount}\n />\n </Fragment>\n )}\n\n {section == \"detail\" && (\n <Fragment>\n <div class=\"px-6 pt-6\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Cashin ratio</i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n {info.conversion_rate.cashin_ratio}\n </dd>\n </div>\n </div>\n\n <div class=\"px-6 pt-6\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Cashout ratio</i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n {info.conversion_rate.cashout_ratio}\n </dd>\n </div>\n </div>\n\n {both_low || both_high ? (\n <div class=\"p-4\">\n <Attention title={i18n.str`Bad ratios`} type=\"warning\">\n <i18n.Translate>\n One of the ratios should be higher or equal than 1 an\n the other should be lower or equal than 1.\n </i18n.Translate>\n </Attention>\n </div>\n ) : undefined}\n\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n for=\"amount\"\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Initial amount`}</label>\n <InputAmount\n name=\"amount\"\n left\n currency={info.fiat_currency}\n value={form.amount?.value ?? \"\"}\n onChange={form.amount?.onUpdate}\n />\n <ShowInputErrorLabel\n message={form.amount?.error}\n isDirty={form.amount?.value !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Use it to test how the conversion will affect the\n amount.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n\n {!cashoutCalc || !cashinCalc ? undefined : (\n <div class=\"px-6 pt-6\">\n <div class=\"sm:col-span-5\">\n <dl class=\"mt-4 space-y-4\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>\n Sending to this bank\n </i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={cashinCalc.debit}\n negative\n withColor\n spec={info.regional_currency_specification}\n />\n </dd>\n </div>\n\n {Amounts.isZero(cashinCalc.beforeFee) ? undefined : (\n <div class=\"flex items-center justify-between afu \">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Converted</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={cashinCalc.beforeFee}\n spec={info.fiat_currency_specification}\n />\n </dd>\n </div>\n )}\n <div class=\"flex justify-between items-center border-t-2 afu pt-4\">\n <dt class=\"text-lg text-gray-900 font-medium\">\n <i18n.Translate>Cashin after fee</i18n.Translate>\n </dt>\n <dd class=\"text-lg text-gray-900 font-medium\">\n <RenderAmount\n value={cashinCalc.credit}\n withColor\n spec={info.fiat_currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n\n <div class=\"sm:col-span-5\">\n <dl class=\"mt-4 space-y-4\">\n <div class=\"justify-between items-center flex \">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>\n Sending from this bank\n </i18n.Translate>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={cashoutCalc.debit}\n negative\n withColor\n spec={info.fiat_currency_specification}\n />\n </dd>\n </div>\n\n {Amounts.isZero(cashoutCalc.beforeFee) ? undefined : (\n <div class=\"flex items-center justify-between afu\">\n <dt class=\"flex items-center text-sm text-gray-600\">\n <span>\n <i18n.Translate>Converted</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm text-gray-900\">\n <RenderAmount\n value={cashoutCalc.beforeFee}\n spec={info.regional_currency_specification}\n />\n </dd>\n </div>\n )}\n <div class=\"flex justify-between items-center border-t-2 afu pt-4\">\n <dt class=\"text-lg text-gray-900 font-medium\">\n <i18n.Translate>Cashout after fee</i18n.Translate>\n </dt>\n <dd class=\"text-lg text-gray-900 font-medium\">\n <RenderAmount\n value={cashoutCalc.credit}\n withColor\n spec={info.regional_currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n\n {cashoutCalc &&\n status.status === \"ok\" &&\n Amounts.cmp(status.result.amount, cashoutCalc.credit) <\n 0 ? (\n <div class=\"p-4\">\n <Attention\n title={i18n.str`Bad configuration`}\n type=\"warning\"\n >\n <i18n.Translate>\n This configuration allows users to cash out more of\n what has been cashed in.\n </i18n.Translate>\n </Attention>\n </div>\n ) : undefined}\n </div>\n )}\n </Fragment>\n )}\n\n <div class=\"flex items-center justify-between mt-4 gap-x-6 border-t border-gray-900/10 px-4 py-4\">\n <a\n name=\"cancel\"\n href={routeCancel.url({})}\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </a>\n {section == \"cashin\" || section == \"cashout\" ? (\n <Fragment>\n <button\n type=\"submit\"\n name=\"update conversion\"\n class=\"disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\"\n onClick={async () => {\n doUpdate();\n }}\n >\n <i18n.Translate>Update</i18n.Translate>\n </button>\n </Fragment>\n ) : (\n <div />\n )}\n </div>\n </form>\n </div>\n </div>\n );\n };\n}\n\nexport const ConversionConfig = utils.recursive(useComponentState);\n\n/**\n *\n * @param i18n\n * @param regional\n * @param fiat\n * @returns form validator\n */\nfunction createFormValidator(\n i18n: InternationalizationAPI,\n regional: string,\n fiat: string,\n) {\n return function check(state: FormValues<FormType>): FormStatus<FormType> {\n const cashin_min_amount = Amounts.parse(\n `${fiat}:${state.conv.cashin_min_amount}`,\n );\n const cashin_tiny_amount = Amounts.parse(\n `${regional}:${state.conv.cashin_tiny_amount}`,\n );\n const cashin_fee = Amounts.parse(`${regional}:${state.conv.cashin_fee}`);\n\n const cashout_min_amount = Amounts.parse(\n `${regional}:${state.conv.cashout_min_amount}`,\n );\n const cashout_tiny_amount = Amounts.parse(\n `${fiat}:${state.conv.cashout_tiny_amount}`,\n );\n const cashout_fee = Amounts.parse(`${fiat}:${state.conv.cashout_fee}`);\n\n const am = Amounts.parse(`${fiat}:${state.amount}`);\n\n const cashin_ratio = Number.parseFloat(state.conv.cashin_ratio ?? \"\");\n const cashout_ratio = Number.parseFloat(state.conv.cashout_ratio ?? \"\");\n\n const errors = undefinedIfEmpty<FormErrors<FormType>>({\n conv: undefinedIfEmpty<FormErrors<FormType[\"conv\"]>>({\n cashin_min_amount: !state.conv.cashin_min_amount\n ? i18n.str`required`\n : !cashin_min_amount\n ? i18n.str`invalid`\n : undefined,\n cashin_tiny_amount: !state.conv.cashin_tiny_amount\n ? i18n.str`required`\n : !cashin_tiny_amount\n ? i18n.str`invalid`\n : undefined,\n cashin_fee: !state.conv.cashin_fee\n ? i18n.str`required`\n : !cashin_fee\n ? i18n.str`invalid`\n : undefined,\n\n cashout_min_amount: !state.conv.cashout_min_amount\n ? i18n.str`required`\n : !cashout_min_amount\n ? i18n.str`invalid`\n : undefined,\n cashout_tiny_amount: !state.conv.cashin_tiny_amount\n ? i18n.str`required`\n : !cashout_tiny_amount\n ? i18n.str`invalid`\n : undefined,\n cashout_fee: !state.conv.cashin_fee\n ? i18n.str`required`\n : !cashout_fee\n ? i18n.str`invalid`\n : undefined,\n\n cashin_rounding_mode: !state.conv.cashin_rounding_mode\n ? i18n.str`required`\n : undefined,\n cashout_rounding_mode: !state.conv.cashout_rounding_mode\n ? i18n.str`required`\n : undefined,\n\n cashin_ratio: !state.conv.cashin_ratio\n ? i18n.str`required`\n : Number.isNaN(cashin_ratio)\n ? i18n.str`invalid`\n : undefined,\n cashout_ratio: !state.conv.cashout_ratio\n ? i18n.str`required`\n : Number.isNaN(cashout_ratio)\n ? i18n.str`invalid`\n : undefined,\n }),\n\n amount: !state.amount\n ? i18n.str`required`\n : !am\n ? i18n.str`invalid`\n : undefined,\n });\n\n const result: RecursivePartial<FormType> = {\n amount: am,\n conv: {\n cashin_fee: !errors?.conv?.cashin_fee\n ? Amounts.stringify(cashin_fee!)\n : undefined,\n cashin_min_amount: !errors?.conv?.cashin_min_amount\n ? Amounts.stringify(cashin_min_amount!)\n : undefined,\n cashin_ratio: !errors?.conv?.cashin_ratio\n ? String(cashin_ratio!)\n : undefined,\n cashin_rounding_mode: !errors?.conv?.cashin_rounding_mode\n ? state.conv.cashin_rounding_mode!\n : undefined,\n cashin_tiny_amount: !errors?.conv?.cashin_tiny_amount\n ? Amounts.stringify(cashin_tiny_amount!)\n : undefined,\n cashout_fee: !errors?.conv?.cashout_fee\n ? Amounts.stringify(cashout_fee!)\n : undefined,\n cashout_min_amount: !errors?.conv?.cashout_min_amount\n ? Amounts.stringify(cashout_min_amount!)\n : undefined,\n cashout_ratio: !errors?.conv?.cashout_ratio\n ? String(cashout_ratio!)\n : undefined,\n cashout_rounding_mode: !errors?.conv?.cashout_rounding_mode\n ? state.conv.cashout_rounding_mode!\n : undefined,\n cashout_tiny_amount: !errors?.conv?.cashout_tiny_amount\n ? Amounts.stringify(cashout_tiny_amount!)\n : undefined,\n },\n };\n return errors === undefined\n ? { status: \"ok\", result: result as FormType, errors }\n : { status: \"fail\", result, errors };\n };\n}\n\nfunction ConversionForm({\n id,\n inputCurrency,\n outputCurrency,\n fee,\n minimum,\n ratio,\n rounding,\n tiny,\n}: {\n inputCurrency: string;\n outputCurrency: string;\n minimum: UIField | undefined;\n tiny: UIField | undefined;\n fee: UIField | undefined;\n rounding: UIField | undefined;\n ratio: UIField | undefined;\n id: string;\n}): VNode {\n const { i18n } = useTranslationContext();\n return (\n <Fragment>\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n for={`${id}_min_amount`}\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Minimum amount`}</label>\n <InputAmount\n name={`${id}_min_amount`}\n left\n currency={inputCurrency}\n value={minimum?.value ?? \"\"}\n onChange={minimum?.onUpdate}\n />\n <ShowInputErrorLabel\n message={minimum?.error}\n isDirty={minimum?.value !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Only cashout operation above this threshold will be allowed\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"px-6 pt-6\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for={`${id}_ratio`}\n >\n {i18n.str`Ratio`}\n </label>\n <div class=\"mt-2\">\n <input\n type=\"number\"\n class=\"block rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 data-[error=true]:ring-red-500 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\"\n name=\"current\"\n id={`${id}_ratio`}\n data-error={!!ratio?.error && ratio?.value !== undefined}\n value={ratio?.value ?? \"\"}\n onChange={(e) => {\n ratio?.onUpdate(e.currentTarget.value);\n }}\n autocomplete=\"off\"\n />\n <ShowInputErrorLabel\n message={ratio?.error}\n isDirty={ratio?.value !== undefined}\n />\n </div>\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>Conversion ratio between currencies</i18n.Translate>\n </p>\n </div>\n\n <div class=\"px-6 pt-4\">\n <Attention title={i18n.str`Example conversion`}>\n <i18n.Translate>\n 1 {inputCurrency} will be converted into {ratio?.value}{\" \"}\n {outputCurrency}\n </i18n.Translate>\n </Attention>\n </div>\n\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n for={`${id}_tiny_amount`}\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Rounding value`}</label>\n <InputAmount\n name={`${id}_tiny_amount`}\n left\n currency={outputCurrency}\n value={tiny?.value ?? \"\"}\n onChange={tiny?.onUpdate}\n />\n <ShowInputErrorLabel\n message={tiny?.error}\n isDirty={tiny?.value !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Smallest difference between two amounts after the ratio is\n applied.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n for={`${id}_channel`}\n >\n {i18n.str`Rounding mode`}\n </label>\n <div class=\"mt-2 max-w-xl text-sm text-gray-500\">\n <div class=\"px-4 mt-4 grid grid-cols-1 gap-y-6\">\n <label\n onClick={(e) => {\n e.preventDefault();\n rounding?.onUpdate(\"zero\");\n }}\n data-selected={rounding?.value === \"zero\"}\n class=\"relative flex data-[disabled=false]:cursor-pointer rounded-lg border bg-white data-[disabled=true]:bg-gray-200 p-4 shadow-sm focus:outline-none border-gray-300 data-[selected=true]:ring-2 data-[selected=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"channel\"\n value=\"Newsletter\"\n class=\"sr-only\"\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900 \">\n <i18n.Translate>Zero</i18n.Translate>\n </span>\n <i18n.Translate>\n Amount will be round below to the largest possible value\n smaller than the input.\n </i18n.Translate>\n </span>\n </span>\n <svg\n data-selected={rounding?.value === \"zero\"}\n class=\"h-5 w-5 text-indigo-600 data-[selected=false]:hidden\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </label>\n\n <label\n onClick={(e) => {\n e.preventDefault();\n rounding?.onUpdate(\"up\");\n }}\n data-selected={rounding?.value === \"up\"}\n class=\"relative flex data-[disabled=false]:cursor-pointer rounded-lg border data-[disabled=true]:bg-gray-200 p-4 shadow-sm focus:outline-none border-gray-300 data-[selected=true]:ring-2 data-[selected=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"channel\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900 \">\n <i18n.Translate>Up</i18n.Translate>\n </span>\n <i18n.Translate>\n Amount will be round up to the smallest possible value\n larger than the input.\n </i18n.Translate>\n </span>\n </span>\n <svg\n data-selected={rounding?.value === \"up\"}\n class=\"h-5 w-5 text-indigo-600 data-[selected=false]:hidden\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </label>\n <label\n onClick={(e) => {\n e.preventDefault();\n rounding?.onUpdate(\"nearest\");\n }}\n data-selected={rounding?.value === \"nearest\"}\n class=\"relative flex data-[disabled=false]:cursor-pointer rounded-lg border data-[disabled=true]:bg-gray-200 p-4 shadow-sm focus:outline-none border-gray-300 data-[selected=true]:ring-2 data-[selected=true]:ring-indigo-600\"\n >\n <input\n type=\"radio\"\n name=\"channel\"\n value=\"Existing Customers\"\n class=\"sr-only\"\n />\n <span class=\"flex flex-1\">\n <span class=\"flex flex-col\">\n <span class=\"block text-sm font-medium text-gray-900 \">\n <i18n.Translate>Nearest</i18n.Translate>\n </span>\n <i18n.Translate>\n Amount will be round to the closest possible value.\n </i18n.Translate>\n </span>\n </span>\n <svg\n data-selected={rounding?.value === \"nearest\"}\n class=\"h-5 w-5 text-indigo-600 data-[selected=false]:hidden\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"px-6 pt-4\">\n <Attention title={i18n.str`Examples`}>\n <section class=\"grid grid-cols-1 gap-y-3 text-gray-600\">\n <details class=\"group text-sm\">\n <summary class=\"flex cursor-pointer flex-row items-center justify-between \">\n <i18n.Translate>\n Rounding an amount of 1.24 with rounding value 0.1\n </i18n.Translate>\n <svg\n class=\"h-6 w-6 rotate-0 transform group-open:rotate-180\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n ></path>\n </svg>\n </summary>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n Given the rounding value of 0.1 the possible values closest to\n 1.24 are: 1.1, 1.2, 1.3, 1.4.\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"zero\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"nearest\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 mt-4\">\n <i18n.Translate>\n With the \"up\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n </details>\n <details class=\"group \">\n <summary class=\"flex cursor-pointer flex-row items-center justify-between \">\n <i18n.Translate>\n Rounding an amount of 1.26 with rounding value 0.1\n </i18n.Translate>\n <svg\n class=\"h-6 w-6 rotate-0 transform group-open:rotate-180\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n ></path>\n </svg>\n </summary>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n Given the rounding value of 0.1 the possible values closest to\n 1.24 are: 1.1, 1.2, 1.3, 1.4.\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"zero\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"nearest\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"up\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n </details>\n <details class=\"group \">\n <summary class=\"flex cursor-pointer flex-row items-center justify-between \">\n <i18n.Translate>\n Rounding an amount of 1.24 with rounding value 0.3\n </i18n.Translate>\n <svg\n class=\"h-6 w-6 rotate-0 transform group-open:rotate-180\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n ></path>\n </svg>\n </summary>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n Given the rounding value of 0.3 the possible values closest to\n 1.24 are: 0.9, 1.2, 1.5, 1.8.\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"zero\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"nearest\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"up\" mode the value will be rounded to 1.5\n </i18n.Translate>\n </p>\n </details>\n <details class=\"group \">\n <summary class=\"flex cursor-pointer flex-row items-center justify-between \">\n <i18n.Translate>\n Rounding an amount of 1.26 with rounding value 0.3\n </i18n.Translate>\n <svg\n class=\"h-6 w-6 rotate-0 transform group-open:rotate-180\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n ></path>\n </svg>\n </summary>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n Given the rounding value of 0.3 the possible values closest to\n 1.24 are: 0.9, 1.2, 1.5, 1.8.\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"zero\" mode the value will be rounded to 1.2\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"nearest\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n <p class=\"text-gray-900 my-4\">\n <i18n.Translate>\n With the \"up\" mode the value will be rounded to 1.3\n </i18n.Translate>\n </p>\n </details>\n </section>\n </Attention>\n </div>\n\n <div class=\"px-6 pt-6\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <label\n for={`${id}_fee`}\n class=\"block text-sm font-medium leading-6 text-gray-900\"\n >{i18n.str`Fee`}</label>\n <InputAmount\n name={`${id}_fee`}\n left\n currency={outputCurrency}\n value={fee?.value ?? \"\"}\n onChange={fee?.onUpdate}\n />\n <ShowInputErrorLabel\n message={fee?.error}\n isDirty={fee?.value !== undefined}\n />\n <p class=\"mt-2 text-sm text-gray-500\">\n <i18n.Translate>\n Amount to be deducted before amount is credited.\n </i18n.Translate>\n </p>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { AmountJson, TranslatedString } from \"@gnu-taler/taler-util\";\nimport { useState } from \"preact/hooks\";\n\nexport type UIField = {\n value: string | undefined;\n onUpdate: (s: string) => void;\n error: TranslatedString | undefined;\n};\n\ntype FormHandler<T> = {\n [k in keyof T]?: T[k] extends string\n ? UIField\n : T[k] extends AmountJson\n ? UIField\n : FormHandler<T[k]>;\n};\n\nexport type FormValues<T> = {\n [k in keyof T]: T[k] extends string\n ? string | undefined\n : T[k] extends AmountJson\n ? string | undefined\n : FormValues<T[k]>;\n};\n\nexport type RecursivePartial<T> = {\n [k in keyof T]?: T[k] extends string\n ? string\n : T[k] extends AmountJson\n ? AmountJson\n : RecursivePartial<T[k]>;\n};\n\nexport type FormErrors<T> = {\n [k in keyof T]?: T[k] extends string\n ? TranslatedString\n : T[k] extends AmountJson\n ? TranslatedString\n : FormErrors<T[k]>;\n};\n\nexport type FormStatus<T> =\n | {\n status: \"ok\";\n result: T;\n errors: undefined;\n }\n | {\n status: \"fail\";\n result: RecursivePartial<T>;\n errors: FormErrors<T>;\n };\n\nfunction constructFormHandler<T>(\n form: FormValues<T>,\n updateForm: (d: FormValues<T>) => void,\n errors: FormErrors<T> | undefined,\n): FormHandler<T> {\n\n const keys = Object.keys(form) as Array<keyof T>;\n\n const handler = keys.reduce((prev, fieldName) => {\n const currentValue: unknown = form[fieldName];\n const currentError: unknown = errors ? errors[fieldName] : undefined;\n function updater(newValue: unknown) {\n updateForm({ ...form, [fieldName]: newValue });\n }\n if (typeof currentValue === \"object\") {\n // @ts-expect-error FIXME better typing\n const group = constructFormHandler(currentValue, updater, currentError);\n // @ts-expect-error FIXME better typing\n prev[fieldName] = group;\n return prev;\n }\n const field: UIField = {\n // @ts-expect-error FIXME better typing\n error: currentError,\n // @ts-expect-error FIXME better typing\n value: currentValue,\n onUpdate: updater,\n };\n // @ts-expect-error FIXME better typing\n prev[fieldName] = field;\n return prev;\n }, {} as FormHandler<T>);\n\n return handler;\n}\n\n/**\n * FIXME: Consider sending this to web-utils\n * \n * \n * @param defaultValue \n * @param check \n * @returns \n */\nexport function useFormState<T>(\n defaultValue: FormValues<T>,\n check: (f: FormValues<T>) => FormStatus<T>,\n): [FormHandler<T>, FormStatus<T>] {\n const [form, updateForm] = useState<FormValues<T>>(defaultValue);\n\n const status = check(form);\n const handler = constructFormHandler(form, updateForm, status.errors);\n\n return [handler, status];\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 AbsoluteTime,\n Amounts,\n HttpStatusCode,\n TalerError,\n assertUnreachable,\n} from \"@gnu-taler/taler-util\";\nimport {\n Attention,\n Loading,\n useTranslationContext,\n} from \"@gnu-taler/web-util/browser\";\nimport { VNode, h } from \"preact\";\nimport { ErrorLoadingWithDebug } from \"../../components/ErrorLoadingWithDebug.js\";\nimport { Time } from \"../../components/Time.js\";\nimport { useCashoutDetails, useConversionInfo } from \"../../hooks/regional.js\";\nimport { RouteDefinition } from \"@gnu-taler/web-util/browser\";\nimport { RenderAmount } from \"../PaytoWireTransferForm.js\";\n\ninterface Props {\n id: string;\n routeClose: RouteDefinition;\n}\nexport function ShowCashoutDetails({ id, routeClose }: Props): VNode {\n const { i18n } = useTranslationContext();\n const cid = Number.parseInt(id, 10);\n\n const result = useCashoutDetails(Number.isNaN(cid) ? undefined : cid);\n const info = useConversionInfo();\n\n if (Number.isNaN(cid)) {\n return (\n <Attention\n type=\"danger\"\n title={i18n.str`Cashout id should be a number`}\n />\n );\n }\n if (!result) {\n return <Loading />;\n }\n if (result instanceof TalerError) {\n return <ErrorLoadingWithDebug error={result} />;\n }\n if (result.type === \"fail\") {\n switch (result.case) {\n case HttpStatusCode.NotFound:\n return (\n <Attention\n type=\"warning\"\n title={i18n.str`This cashout not found. Maybe already aborted.`}\n ></Attention>\n );\n case HttpStatusCode.NotImplemented:\n return (\n <Attention type=\"warning\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n default:\n assertUnreachable(result);\n }\n }\n if (!info) {\n return <Loading />;\n }\n\n if (info instanceof TalerError) {\n return <ErrorLoadingWithDebug error={info} />;\n }\n if (info.type === \"fail\") {\n switch (info.case) {\n case HttpStatusCode.NotImplemented: {\n return (\n <Attention type=\"danger\" title={i18n.str`Cashout are disabled`}>\n <i18n.Translate>\n Cashout should be enable by configuration and the conversion rate\n should be initialized with fee, ratio and rounding mode.\n </i18n.Translate>\n </Attention>\n );\n }\n default:\n assertUnreachable(info.case);\n }\n }\n\n const { fiat_currency_specification, regional_currency_specification } =\n info.body;\n\n return (\n <div>\n <div class=\"grid grid-cols-1 gap-x-8 gap-y-8 pt-6 md:grid-cols-3 bg-gray-100 my-4 px-4 pb-4 rounded-lg\">\n <section class=\"rounded-sm px-4\">\n <h2 id=\"summary-heading\" class=\"font-medium text-lg\">\n <i18n.Translate>Cashout detail</i18n.Translate>\n </h2>\n <dl class=\"mt-8 space-y-4\">\n <div class=\"justify-between items-center flex\">\n <dt class=\"text-sm text-gray-600\">\n <i18n.Translate>Subject</i18n.Translate>\n </dt>\n <dd class=\"text-sm \">{result.body.subject}</dd>\n </div>\n </dl>\n </section>\n <div class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2\">\n <div class=\"px-4 py-6 sm:p-8\">\n <div class=\"grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6\">\n <div class=\"sm:col-span-5\">\n <dl class=\"space-y-4\">\n {result.body.creation_time.t_s !== \"never\" ? (\n <div class=\"justify-between items-center flex \">\n <dt class=\" text-gray-600\">\n <i18n.Translate>Created</i18n.Translate>\n </dt>\n <dd class=\"text-sm \">\n <Time\n format=\"dd/MM/yyyy HH:mm:ss\"\n timestamp={AbsoluteTime.fromProtocolTimestamp(\n result.body.creation_time,\n )}\n // relative={Duration.fromSpec({ days: 1 })}\n />\n </dd>\n </div>\n ) : undefined}\n\n <div class=\"flex justify-between items-center border-t-2 afu pt-4\">\n <dt class=\"text-gray-600\">\n <i18n.Translate>Debited</i18n.Translate>\n </dt>\n <dd class=\" font-medium\">\n <RenderAmount\n value={Amounts.parseOrThrow(result.body.amount_debit)}\n negative\n withColor\n spec={regional_currency_specification}\n />\n </dd>\n </div>\n\n <div class=\"flex items-center justify-between border-t-2 afu pt-4\">\n <dt class=\"flex items-center text-gray-600\">\n <span>\n <i18n.Translate>Credited</i18n.Translate>\n </span>\n </dt>\n <dd class=\"text-sm \">\n <RenderAmount\n value={Amounts.parseOrThrow(result.body.amount_credit)}\n withColor\n spec={fiat_currency_specification}\n />\n </dd>\n </div>\n </dl>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <br />\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <a\n href={routeClose.url({})}\n name=\"close\"\n class=\"text-sm font-semibold leading-6 text-gray-900\"\n >\n <i18n.Translate>Close</i18n.Translate>\n </a>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nexport interface StringsType {\n // X-Domain or 'messages'\n domain: string;\n lang: string;\n completeness: number;\n plural_forms: string;\n locale_data: {\n messages: Record<string, unknown>;\n };\n}\nexport const strings: Record<string, StringsType> = {};\n\nstrings[\"it\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"it\",\n },\n \"Operation failed, please report\": [\"Registrazione\"],\n \"Request timeout\": [\"\"],\n \"Request throttled\": [\"\"],\n \"Malformed response\": [\"\"],\n \"Network error\": [\"\"],\n \"Unexpected request error\": [\"\"],\n \"Unexpected error\": [\"\"],\n \"IBAN numbers usually have more that 4 digits\": [\"\"],\n \"IBAN numbers usually have less that 34 digits\": [\"\"],\n \"IBAN country code not found\": [\"\"],\n \"IBAN number is not valid, checksum is wrong\": [\"\"],\n \"Max withdrawal amount\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"Show withdrawal confirmation\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"Show demo description\": [\"\"],\n \"Show install wallet first\": [\"\"],\n \"Use fast withdrawal form\": [\"Ritira contante\"],\n \"Show debug info\": [\"\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\"\"],\n \"The operation id is invalid.\": [\"\"],\n \"The operation was not found.\": [\"Lista conti pubblici non trovata.\"],\n \"If you have a Taler wallet installed in this device\": [\"\"],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\"\"],\n \"this page\": [\"\"],\n Withdraw: [\"Prelevare\"],\n \"Or if you have the wallet in another device\": [\"\"],\n \"Scan the QR below to start the withdrawal.\": [\"Chiudi il ritiro Taler\"],\n required: [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"not valid\": [\"\"],\n \"should be greater than 0\": [\"\"],\n \"balance is not enough\": [\"\"],\n \"does not follow the pattern\": [\"\"],\n 'only \"IBAN\" target are supported': [\"\"],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n \"\",\n ],\n \"the amount is not valid\": [\"\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\"\"],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\"\"],\n \"Not enough permission to complete the operation.\": [\n \"La banca sta creando l'operazione...\",\n ],\n 'The destination account \"%1$s\" was not found.': [\n \"Lista conti pubblici non trovata.\",\n ],\n \"The origin and the destination of the transfer can't be the same.\": [\"\"],\n \"Your balance is not enough.\": [\"\"],\n 'The origin account \"%1$s\" was not found.': [\n \"Lista conti pubblici non trovata.\",\n ],\n \"Using a form\": [\"\"],\n \"Import payto:// URI\": [\"\"],\n Recipient: [\"\"],\n \"IBAN of the recipient's account\": [\"\"],\n \"Transfer subject\": [\n \"Trasferisci fondi a un altro conto di questa banca:\",\n ],\n subject: [\"Soggetto\"],\n \"some text to identify the transfer\": [\"\"],\n Amount: [\"Importo\"],\n \"amount to transfer\": [\"Somma da ritirare\"],\n \"payto URI:\": [\"\"],\n \"uniform resource identifier of the target account\": [\"\"],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\"\"],\n Cancel: [\"\"],\n Send: [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n 'Wrong credentials for \"%1$s\"': [\"Credenziali invalide.\"],\n \"Account not found\": [\"\"],\n Username: [\"\"],\n \"username of the account\": [\n \"Trasferisci fondi a un altro conto di questa banca:\",\n ],\n Password: [\"\"],\n \"password of the account\": [\"Storico dei conti pubblici\"],\n Check: [\"\"],\n \"Log in\": [\"\"],\n Register: [\"Registrati\"],\n \"Wire transfer completed!\": [\"Bonifico\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\"\"],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\"\"],\n \"Your balance is not enough for the operation.\": [\"\"],\n \"Confirm the withdrawal operation\": [\"Conferma il ritiro\"],\n \"Wire transfer details\": [\"Bonifico\"],\n \"Taler Exchange operator's account\": [\"\"],\n \"Taler Exchange operator's name\": [\"\"],\n Transfer: [\"\"],\n \"Authentication required\": [\"\"],\n \"This operation was created with other username\": [\"\"],\n \"Operation aborted\": [\"\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\"\"],\n \"You can close this page now or continue to the account page.\": [\"\"],\n Continue: [\"\"],\n \"Withdrawal confirmed\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\"\"],\n Done: [\"\"],\n \"Operation canceled\": [\"\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\"\"],\n \"The account is selected but no withdrawal identification found.\": [\"\"],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"Operation not found\": [\"\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\"\"],\n \"Cotinue to dashboard\": [\"\"],\n \"The Withdrawal URI is not valid\": [\"Questo ritiro \u00E8 stato annullato!\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\"\"],\n \"Internal error, please report.\": [\"Registrazione\"],\n Preferences: [\"\"],\n \"Welcome, %1$s\": [\"\"],\n \"Latest transactions\": [\"Ultime transazioni:\"],\n Date: [\"Data\"],\n Counterpart: [\"Controparte\"],\n Subject: [\"Soggetto\"],\n sent: [\"\"],\n received: [\"\"],\n \"invalid value\": [\"\"],\n to: [\"\"],\n from: [\"\"],\n \"First page\": [\"\"],\n Next: [\"\"],\n \"History of public accounts\": [\"Storico dei conti pubblici\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Missing name\": [\"indirizzo Payto\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\"\"],\n \"Passwords don't match\": [\"\"],\n \"Server replied with invalid phone or email.\": [\"\"],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"\",\n ],\n \"No enough permission to create that account.\": [\"\"],\n \"That account id is already taken.\": [\"\"],\n \"That username is already taken.\": [\"\"],\n \"That username can't be used because is reserved.\": [\"\"],\n \"Only admin is allow to set debt limit.\": [\"\"],\n \"No information for the selected authentication channel.\": [\"\"],\n \"Authentication channel is not supported.\": [\"\"],\n \"Only admin can create accounts with second factor authentication.\": [\"\"],\n \"Account registration\": [\"\"],\n \"Repeat password\": [\"\"],\n Name: [\"\"],\n \"Create a random temporary user\": [\"\"],\n \"Make a wire transfer\": [\"Chiudi il bonifico\"],\n \"Wire transfer created!\": [\"Bonifico\"],\n Accounts: [\"Importo\"],\n \"A list of all business account in the bank.\": [\"\"],\n \"Create account\": [\"\"],\n Balance: [\"\"],\n Actions: [\"\"],\n unknown: [\"\"],\n \"change password\": [\"\"],\n remove: [\"\"],\n \"Select a section\": [\"\"],\n \"Last hour\": [\"\"],\n \"Last day\": [\"\"],\n \"Last month\": [\"\"],\n \"Last year\": [\"\"],\n \"Last Year\": [\"\"],\n \"Trading volume on %1$s compared to %2$s\": [\"\"],\n Cashin: [\"\"],\n Cashout: [\"\"],\n Payin: [\"\"],\n Payout: [\"\"],\n \"download stats as CSV\": [\"\"],\n \"Descreased by\": [\"\"],\n \"Increased by\": [\"\"],\n \"Unable to create a cashout\": [\"\"],\n \"The bank configuration does not support cashout operations.\": [\"\"],\n invalid: [\"\"],\n \"need to be higher due to fees\": [\"\"],\n \"the total transfer at destination will be zero\": [\"\"],\n \"Cashout created\": [\"\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\"\"],\n \"The conversion rate was incorrectly applied\": [\"\"],\n \"The account does not have sufficient funds\": [\"\"],\n \"Cashouts are not supported\": [\"\"],\n \"Missing cashout URI in the profile\": [\"\"],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\"\"],\n \"Convertion rate\": [\"\"],\n Fee: [\"\"],\n \"To account\": [\"\"],\n \"No cashout account\": [\"\"],\n \"Before doing a cashout you need to complete your profile\": [\"\"],\n \"Amount to send\": [\"Somma da ritirare\"],\n \"Amount to receive\": [\"Somma da ritirare\"],\n \"Total cost\": [\"\"],\n \"Balance left\": [\"\"],\n \"Before fee\": [\"\"],\n \"Total cashout transfer\": [\"\"],\n \"No cashout channel available\": [\"\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\"\"],\n \"Second factor authentication\": [\"\"],\n Email: [\"\"],\n \"add a email in your profile to enable this option\": [\"\"],\n SMS: [\"\"],\n \"add a phone number in your profile to enable this option\": [\"\"],\n Details: [\"\"],\n Delete: [\"\"],\n Credentials: [\"Credenziali invalide.\"],\n Cashouts: [\"\"],\n \"it doesnt have the pattern of an IBAN number\": [\"\"],\n \"it doesnt have the pattern of an email\": [\"\"],\n \"should start with +\": [\"\"],\n \"phone number can't have other than numbers\": [\"\"],\n \"account identification in the bank\": [\"\"],\n \"name of the person owner the account\": [\"\"],\n \"Internal IBAN\": [\"\"],\n \"if empty a random account number will be assigned\": [\"\"],\n \"account identification for bank transfer\": [\"\"],\n Phone: [\"\"],\n \"Cashout IBAN\": [\"\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\"\"],\n \"Max debt\": [\"\"],\n \"how much is user able to transfer after zero balance\": [\"\"],\n \"Is this a Taler Exchange?\": [\"\"],\n \"This server doesn't support second factor authentication.\": [\"\"],\n \"Enable second factor authentication\": [\"\"],\n \"Using email\": [\"\"],\n \"Using SMS\": [\"\"],\n \"Is this account public?\": [\"\"],\n \"public accounts have their balance publicly accesible\": [\"\"],\n \"Account updated\": [\"\"],\n \"The rights to change the account are not sufficient\": [\"\"],\n \"The username was not found\": [\"\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\"\"],\n 'Account \"%1$s\"': [\"\"],\n \"Change details\": [\"\"],\n Update: [\"\"],\n \"password doesn't match\": [\"\"],\n \"Password changed\": [\"\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\"\"],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"\",\n ],\n \"Update password\": [\"\"],\n \"New password\": [\"\"],\n \"Type it again\": [\"\"],\n \"repeat the same password\": [\"\"],\n \"Current password\": [\"\"],\n \"your current password, for security\": [\"\"],\n Change: [\"\"],\n \"Can't delete the account\": [\"\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\"\"],\n \"Account removed\": [\"\"],\n \"No enough permission to delete the account.\": [\"\"],\n \"The username was not found.\": [\"\"],\n \"Can't delete a reserved username.\": [\"\"],\n \"Can't delete an account with balance different than zero.\": [\"\"],\n \"name doesn't match\": [\"\"],\n \"You are going to remove the account\": [\"\"],\n \"This step can't be undone.\": [\"\"],\n 'Deleting account \"%1$s\"': [\"\"],\n Verification: [\"\"],\n \"enter the account name that is going to be deleted\": [\"\"],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\"\"],\n \"Server replied that phone or email is invalid\": [\"\"],\n \"The rights to perform the operation are not sufficient\": [\"\"],\n \"Account username is already taken\": [\"\"],\n \"Account id is already taken\": [\"\"],\n \"Bank ran out of bonus credit.\": [\"\"],\n \"Account username can't be used because is reserved\": [\"\"],\n \"Can't create accounts\": [\"\"],\n \"Only system admin can create accounts.\": [\"\"],\n \"New business account\": [\"\"],\n Create: [\"\"],\n \"Cashout not supported.\": [\"\"],\n \"Account not found.\": [\"Lista conti pubblici non trovata.\"],\n \"Latest cashouts\": [\"Ultime transazioni:\"],\n Created: [\"\"],\n Confirmed: [\"Conferma\"],\n \"Total debit\": [\"\"],\n \"Total credit\": [\"\"],\n Status: [\"\"],\n never: [\"\"],\n \"Cashout for account %1$s\": [\"\"],\n \"This cashout not found. Maybe already aborted.\": [\"\"],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"\",\n ],\n \"Cashout was already confimed.\": [\"\"],\n \"Cashout operation is not supported.\": [\"\"],\n \"The cashout operation is already aborted.\": [\"\"],\n \"Missing destination account.\": [\"\"],\n \"Too many failed attempts.\": [\"\"],\n \"The code for this cashout is invalid.\": [\"\"],\n \"Cashout detail\": [\"\"],\n Debited: [\"\"],\n Credited: [\"\"],\n \"Enter the confirmation code\": [\"\"],\n Abort: [\"Annulla\"],\n Confirm: [\"Conferma\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\"\"],\n \"The operation was rejected due to insufficient funds.\": [\"\"],\n \"Do not show this again\": [\"\"],\n Close: [\"\"],\n \"On this device\": [\"\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\"\"],\n Start: [\"\"],\n \"On a mobile phone\": [\"\"],\n \"Scan the QR code with your mobile device.\": [\n \"Usa questo codice QR per ritirare contante nel tuo wallet:\",\n ],\n \"There is an operation already\": [\"\"],\n \"Complete or cancel the operation in\": [\"Conferma il ritiro\"],\n \"Server responded with an invalid withdraw URI\": [\"\"],\n \"Withdraw URI: %1$s\": [\"Prelevare\"],\n \"The operation was rejected due to insufficient funds\": [\"\"],\n \"Prepare your wallet\": [\"\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\"\"],\n \"You need a GNU Taler Wallet\": [\"Ritira contante nel portafoglio Taler\"],\n \"If you don't have one yet you can follow the instruction in\": [\"\"],\n \"Send money\": [\"\"],\n \"to a %1$s wallet\": [\"\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"\",\n ],\n \"operation ready\": [\"\"],\n \"to another bank account\": [\n \"Trasferisci fondi a un altro conto di questa banca:\",\n ],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"\",\n ],\n \"Transfer details\": [\"Effettua un bonifico\"],\n \"This is a demo bank\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\"\"],\n \"Pending account delete operation\": [\"\"],\n \"Pending account update operation\": [\"\"],\n \"Pending password update operation\": [\"\"],\n \"Pending transaction operation\": [\"\"],\n \"Pending withdrawal operation\": [\"\"],\n \"Pending cashout operation\": [\"\"],\n \"You can complete or cancel the operation in\": [\"\"],\n \"Download bank stats\": [\"\"],\n \"Include hour metric\": [\"\"],\n \"Include day metric\": [\"\"],\n \"Include month metric\": [\"\"],\n \"Include year metric\": [\"\"],\n \"Include table header\": [\"\"],\n \"Add previous metric for compare\": [\"\"],\n \"Fail on first error\": [\"\"],\n Download: [\"\"],\n \"downloading... %1$s\": [\"\"],\n \"Download completed\": [\"\"],\n \"click here to save the file in your computer\": [\"\"],\n \"Challenge not found.\": [\"\"],\n \"This user is not authorized to complete this challenge.\": [\"\"],\n \"Too many attemps, try another code.\": [\"\"],\n \"The confirmation code is wrong, try again.\": [\"\"],\n \"The operation expired.\": [\"\"],\n \"The operation failed.\": [\"Questo ritiro \u00E8 stato annullato!\"],\n \"The operation needs another confirmation to complete.\": [\"\"],\n \"Account delete\": [\"\"],\n \"Account update\": [\"\"],\n \"Password update\": [\"\"],\n \"Wire transfer\": [\"Bonifico\"],\n Withdrawal: [\"Prelevare\"],\n \"Confirm the operation\": [\"Conferma il ritiro\"],\n \"Send again\": [\"\"],\n \"Send code\": [\"\"],\n \"Operation details\": [\"\"],\n \"Challenge details\": [\"\"],\n \"Sent at\": [\"\"],\n \"To phone\": [\"\"],\n \"To email\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"it\",\n completeness: 14,\n};\n\nstrings[\"fr\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n > 1;\",\n lang: \"fr\",\n },\n \"Operation failed, please report\": [\"\"],\n \"Request timeout\": [\"\"],\n \"Request throttled\": [\"\"],\n \"Malformed response\": [\"\"],\n \"Network error\": [\"\"],\n \"Unexpected request error\": [\"\"],\n \"Unexpected error\": [\"\"],\n \"IBAN numbers usually have more that 4 digits\": [\"\"],\n \"IBAN numbers usually have less that 34 digits\": [\"\"],\n \"IBAN country code not found\": [\"\"],\n \"IBAN number is not valid, checksum is wrong\": [\"\"],\n \"Max withdrawal amount\": [\"\"],\n \"Show withdrawal confirmation\": [\"\"],\n \"Show demo description\": [\"\"],\n \"Show install wallet first\": [\"\"],\n \"Use fast withdrawal form\": [\"\"],\n \"Show debug info\": [\"\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\"\"],\n \"The operation id is invalid.\": [\"\"],\n \"The operation was not found.\": [\"\"],\n \"If you have a Taler wallet installed in this device\": [\"\"],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\"\"],\n \"this page\": [\"\"],\n Withdraw: [\"\"],\n \"Or if you have the wallet in another device\": [\"\"],\n \"Scan the QR below to start the withdrawal.\": [\"\"],\n required: [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"not valid\": [\"\"],\n \"should be greater than 0\": [\"\"],\n \"balance is not enough\": [\"\"],\n \"does not follow the pattern\": [\"\"],\n 'only \"IBAN\" target are supported': [\"\"],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n \"\",\n ],\n \"the amount is not valid\": [\"\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\"\"],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\"\"],\n \"Not enough permission to complete the operation.\": [\"\"],\n 'The destination account \"%1$s\" was not found.': [\"\"],\n \"The origin and the destination of the transfer can't be the same.\": [\"\"],\n \"Your balance is not enough.\": [\"\"],\n 'The origin account \"%1$s\" was not found.': [\"\"],\n \"Using a form\": [\"\"],\n \"Import payto:// URI\": [\"\"],\n Recipient: [\"\"],\n \"IBAN of the recipient's account\": [\"\"],\n \"Transfer subject\": [\"\"],\n subject: [\"\"],\n \"some text to identify the transfer\": [\"\"],\n Amount: [\"\"],\n \"amount to transfer\": [\"\"],\n \"payto URI:\": [\"\"],\n \"uniform resource identifier of the target account\": [\"\"],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\"\"],\n Cancel: [\"\"],\n Send: [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n 'Wrong credentials for \"%1$s\"': [\"\"],\n \"Account not found\": [\"\"],\n Username: [\"\"],\n \"username of the account\": [\"\"],\n Password: [\"\"],\n \"password of the account\": [\"\"],\n Check: [\"\"],\n \"Log in\": [\"\"],\n Register: [\"\"],\n \"Wire transfer completed!\": [\"\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\"\"],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\"\"],\n \"Your balance is not enough for the operation.\": [\"\"],\n \"Confirm the withdrawal operation\": [\"\"],\n \"Wire transfer details\": [\"\"],\n \"Taler Exchange operator's account\": [\"\"],\n \"Taler Exchange operator's name\": [\"\"],\n Transfer: [\"\"],\n \"Authentication required\": [\"\"],\n \"This operation was created with other username\": [\"\"],\n \"Operation aborted\": [\"\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\"\"],\n \"You can close this page now or continue to the account page.\": [\"\"],\n Continue: [\"\"],\n \"Withdrawal confirmed\": [\"\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\"\"],\n Done: [\"\"],\n \"Operation canceled\": [\"\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\"\"],\n \"The account is selected but no withdrawal identification found.\": [\"\"],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"Operation not found\": [\"\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\"\"],\n \"Cotinue to dashboard\": [\"\"],\n \"The Withdrawal URI is not valid\": [\"\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\"\"],\n \"Internal error, please report.\": [\"\"],\n Preferences: [\"\"],\n \"Welcome, %1$s\": [\"\"],\n \"Latest transactions\": [\"\"],\n Date: [\"\"],\n Counterpart: [\"\"],\n Subject: [\"\"],\n sent: [\"\"],\n received: [\"\"],\n \"invalid value\": [\"\"],\n to: [\"\"],\n from: [\"\"],\n \"First page\": [\"\"],\n Next: [\"\"],\n \"History of public accounts\": [\"\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Missing name\": [\"\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\"\"],\n \"Passwords don't match\": [\"\"],\n \"Server replied with invalid phone or email.\": [\"\"],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"\",\n ],\n \"No enough permission to create that account.\": [\"\"],\n \"That account id is already taken.\": [\"\"],\n \"That username is already taken.\": [\"\"],\n \"That username can't be used because is reserved.\": [\"\"],\n \"Only admin is allow to set debt limit.\": [\"\"],\n \"No information for the selected authentication channel.\": [\"\"],\n \"Authentication channel is not supported.\": [\"\"],\n \"Only admin can create accounts with second factor authentication.\": [\"\"],\n \"Account registration\": [\"\"],\n \"Repeat password\": [\"\"],\n Name: [\"\"],\n \"Create a random temporary user\": [\"\"],\n \"Make a wire transfer\": [\"\"],\n \"Wire transfer created!\": [\"\"],\n Accounts: [\"\"],\n \"A list of all business account in the bank.\": [\"\"],\n \"Create account\": [\"\"],\n Balance: [\"\"],\n Actions: [\"\"],\n unknown: [\"\"],\n \"change password\": [\"\"],\n remove: [\"\"],\n \"Select a section\": [\"\"],\n \"Last hour\": [\"\"],\n \"Last day\": [\"\"],\n \"Last month\": [\"\"],\n \"Last year\": [\"\"],\n \"Last Year\": [\"\"],\n \"Trading volume on %1$s compared to %2$s\": [\"\"],\n Cashin: [\"\"],\n Cashout: [\"\"],\n Payin: [\"\"],\n Payout: [\"\"],\n \"download stats as CSV\": [\"\"],\n \"Descreased by\": [\"\"],\n \"Increased by\": [\"\"],\n \"Unable to create a cashout\": [\"\"],\n \"The bank configuration does not support cashout operations.\": [\"\"],\n invalid: [\"\"],\n \"need to be higher due to fees\": [\"\"],\n \"the total transfer at destination will be zero\": [\"\"],\n \"Cashout created\": [\"\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\"\"],\n \"The conversion rate was incorrectly applied\": [\"\"],\n \"The account does not have sufficient funds\": [\"\"],\n \"Cashouts are not supported\": [\"\"],\n \"Missing cashout URI in the profile\": [\"\"],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\"\"],\n \"Convertion rate\": [\"\"],\n Fee: [\"\"],\n \"To account\": [\"\"],\n \"No cashout account\": [\"\"],\n \"Before doing a cashout you need to complete your profile\": [\"\"],\n \"Amount to send\": [\"\"],\n \"Amount to receive\": [\"\"],\n \"Total cost\": [\"\"],\n \"Balance left\": [\"\"],\n \"Before fee\": [\"\"],\n \"Total cashout transfer\": [\"\"],\n \"No cashout channel available\": [\"\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\"\"],\n \"Second factor authentication\": [\"\"],\n Email: [\"\"],\n \"add a email in your profile to enable this option\": [\"\"],\n SMS: [\"\"],\n \"add a phone number in your profile to enable this option\": [\"\"],\n Details: [\"\"],\n Delete: [\"\"],\n Credentials: [\"\"],\n Cashouts: [\"\"],\n \"it doesnt have the pattern of an IBAN number\": [\"\"],\n \"it doesnt have the pattern of an email\": [\"\"],\n \"should start with +\": [\"\"],\n \"phone number can't have other than numbers\": [\"\"],\n \"account identification in the bank\": [\"\"],\n \"name of the person owner the account\": [\"\"],\n \"Internal IBAN\": [\"\"],\n \"if empty a random account number will be assigned\": [\"\"],\n \"account identification for bank transfer\": [\"\"],\n Phone: [\"\"],\n \"Cashout IBAN\": [\"\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\"\"],\n \"Max debt\": [\"\"],\n \"how much is user able to transfer after zero balance\": [\"\"],\n \"Is this a Taler Exchange?\": [\"\"],\n \"This server doesn't support second factor authentication.\": [\"\"],\n \"Enable second factor authentication\": [\"\"],\n \"Using email\": [\"\"],\n \"Using SMS\": [\"\"],\n \"Is this account public?\": [\"\"],\n \"public accounts have their balance publicly accesible\": [\"\"],\n \"Account updated\": [\"\"],\n \"The rights to change the account are not sufficient\": [\"\"],\n \"The username was not found\": [\"\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\"\"],\n 'Account \"%1$s\"': [\"\"],\n \"Change details\": [\"\"],\n Update: [\"\"],\n \"password doesn't match\": [\"\"],\n \"Password changed\": [\"\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\"\"],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"\",\n ],\n \"Update password\": [\"\"],\n \"New password\": [\"\"],\n \"Type it again\": [\"\"],\n \"repeat the same password\": [\"\"],\n \"Current password\": [\"\"],\n \"your current password, for security\": [\"\"],\n Change: [\"\"],\n \"Can't delete the account\": [\"\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\"\"],\n \"Account removed\": [\"\"],\n \"No enough permission to delete the account.\": [\"\"],\n \"The username was not found.\": [\"\"],\n \"Can't delete a reserved username.\": [\"\"],\n \"Can't delete an account with balance different than zero.\": [\"\"],\n \"name doesn't match\": [\"\"],\n \"You are going to remove the account\": [\"\"],\n \"This step can't be undone.\": [\"\"],\n 'Deleting account \"%1$s\"': [\"\"],\n Verification: [\"\"],\n \"enter the account name that is going to be deleted\": [\"\"],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\"\"],\n \"Server replied that phone or email is invalid\": [\"\"],\n \"The rights to perform the operation are not sufficient\": [\"\"],\n \"Account username is already taken\": [\"\"],\n \"Account id is already taken\": [\"\"],\n \"Bank ran out of bonus credit.\": [\"\"],\n \"Account username can't be used because is reserved\": [\"\"],\n \"Can't create accounts\": [\"\"],\n \"Only system admin can create accounts.\": [\"\"],\n \"New business account\": [\"\"],\n Create: [\"\"],\n \"Cashout not supported.\": [\"\"],\n \"Account not found.\": [\"\"],\n \"Latest cashouts\": [\"\"],\n Created: [\"\"],\n Confirmed: [\"\"],\n \"Total debit\": [\"\"],\n \"Total credit\": [\"\"],\n Status: [\"\"],\n never: [\"\"],\n \"Cashout for account %1$s\": [\"\"],\n \"This cashout not found. Maybe already aborted.\": [\"\"],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"\",\n ],\n \"Cashout was already confimed.\": [\"\"],\n \"Cashout operation is not supported.\": [\"\"],\n \"The cashout operation is already aborted.\": [\"\"],\n \"Missing destination account.\": [\"\"],\n \"Too many failed attempts.\": [\"\"],\n \"The code for this cashout is invalid.\": [\"\"],\n \"Cashout detail\": [\"\"],\n Debited: [\"\"],\n Credited: [\"\"],\n \"Enter the confirmation code\": [\"\"],\n Abort: [\"\"],\n Confirm: [\"\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\"\"],\n \"The operation was rejected due to insufficient funds.\": [\"\"],\n \"Do not show this again\": [\"\"],\n Close: [\"\"],\n \"On this device\": [\"\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\"\"],\n Start: [\"\"],\n \"On a mobile phone\": [\"\"],\n \"Scan the QR code with your mobile device.\": [\"\"],\n \"There is an operation already\": [\"\"],\n \"Complete or cancel the operation in\": [\"\"],\n \"Server responded with an invalid withdraw URI\": [\"\"],\n \"Withdraw URI: %1$s\": [\"\"],\n \"The operation was rejected due to insufficient funds\": [\"\"],\n \"Prepare your wallet\": [\"\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\"\"],\n \"You need a GNU Taler Wallet\": [\"\"],\n \"If you don't have one yet you can follow the instruction in\": [\"\"],\n \"Send money\": [\"\"],\n \"to a %1$s wallet\": [\"\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"\",\n ],\n \"operation ready\": [\"\"],\n \"to another bank account\": [\"\"],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"\",\n ],\n \"Transfer details\": [\"\"],\n \"This is a demo bank\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\"\"],\n \"Pending account delete operation\": [\"\"],\n \"Pending account update operation\": [\"\"],\n \"Pending password update operation\": [\"\"],\n \"Pending transaction operation\": [\"\"],\n \"Pending withdrawal operation\": [\"\"],\n \"Pending cashout operation\": [\"\"],\n \"You can complete or cancel the operation in\": [\"\"],\n \"Download bank stats\": [\"\"],\n \"Include hour metric\": [\"\"],\n \"Include day metric\": [\"\"],\n \"Include month metric\": [\"\"],\n \"Include year metric\": [\"\"],\n \"Include table header\": [\"\"],\n \"Add previous metric for compare\": [\"\"],\n \"Fail on first error\": [\"\"],\n Download: [\"\"],\n \"downloading... %1$s\": [\"\"],\n \"Download completed\": [\"\"],\n \"click here to save the file in your computer\": [\"\"],\n \"Challenge not found.\": [\"\"],\n \"This user is not authorized to complete this challenge.\": [\"\"],\n \"Too many attemps, try another code.\": [\"\"],\n \"The confirmation code is wrong, try again.\": [\"\"],\n \"The operation expired.\": [\"\"],\n \"The operation failed.\": [\"\"],\n \"The operation needs another confirmation to complete.\": [\"\"],\n \"Account delete\": [\"\"],\n \"Account update\": [\"\"],\n \"Password update\": [\"\"],\n \"Wire transfer\": [\"\"],\n Withdrawal: [\"\"],\n \"Confirm the operation\": [\"\"],\n \"Send again\": [\"\"],\n \"Send code\": [\"\"],\n \"Operation details\": [\"\"],\n \"Challenge details\": [\"\"],\n \"Sent at\": [\"\"],\n \"To phone\": [\"\"],\n \"To email\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n > 1;\",\n lang: \"fr\",\n completeness: 0,\n};\n\nstrings[\"es\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"es\",\n },\n \"Operation failed, please report\": [\n \"La operaic\u00F3n fall\u00F3, por favor reportelo\",\n ],\n \"Request timeout\": [\"La petici\u00F3n al servidor agoto su tiempo\"],\n \"Request throttled\": [\"La petici\u00F3n al servidor interrumpida\"],\n \"Malformed response\": [\"Respuesta malformada\"],\n \"Network error\": [\"Error de conexi\u00F3n\"],\n \"Unexpected request error\": [\"Error de pedido inesperado\"],\n \"Unexpected error\": [\"Error inesperado\"],\n \"IBAN numbers usually have more that 4 digits\": [\n \"Los n\u00FAmeros IBAN usualmente tienen mas de 4 digitos\",\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"Los n\u00FAmeros IBAN usualmente tienen menos de 34 digitos\",\n ],\n \"IBAN country code not found\": [\"C\u00F3digo de pais de IBAN no encontrado\"],\n \"IBAN number is not valid, checksum is wrong\": [\n \"El n\u00FAmero IBAN no es v\u00E1lido, fall\u00F3 la verificaci\u00F3n\",\n ],\n \"Max withdrawal amount\": [\"Monto m\u00E1ximo de extracci\u00F3n\"],\n \"Show withdrawal confirmation\": [\"Mostrar confirmaci\u00F3n de extracci\u00F3n\"],\n \"Show demo description\": [\"Mostrar descripci\u00F3n de demo\"],\n \"Show install wallet first\": [\"Mostrar instalar la billetera primero\"],\n \"Use fast withdrawal form\": [\"Usar formulario de extracci\u00F3n r\u00E1pida\"],\n \"Show debug info\": [\"Mostrar informaci\u00F3n de depuraci\u00F3n\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\n \"La operaci\u00F3n en la reserva ya ha sido confirmada previamente y no puede ser abortada\",\n ],\n \"The operation id is invalid.\": [\"El id de operaci\u00F3n es invalido.\"],\n \"The operation was not found.\": [\"La operaci\u00F3n no se encontr\u00F3.\"],\n \"If you have a Taler wallet installed in this device\": [\n \"Si tienes una billetera Taler instalada en este dispositivo\",\n ],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\n \"Veras los detalles de la operaci\u00F3n en tu billetera incluyendo comisiones (si aplic\u00E1n). Si todav\u00EDa no tienes una puedes instalarla siguiendo las instrucciones en\",\n ],\n \"this page\": [\"esta p\u00E1gina\"],\n Withdraw: [\"Retirar\"],\n \"Or if you have the wallet in another device\": [\n \"O si tienes la billetera en otro dispositivo\",\n ],\n \"Scan the QR below to start the withdrawal.\": [\n \"Escanea el QR debajo para comenzar la extracci\u00F3n.\",\n ],\n required: [\"requerido\"],\n \"IBAN should have just uppercased letters and numbers\": [\n \"IBAN deber\u00EDa tener letras may\u00FAsculas y n\u00FAmeros\",\n ],\n \"not valid\": [\"no v\u00E1lido\"],\n \"should be greater than 0\": [\"Deber\u00EDa ser mas grande que 0\"],\n \"balance is not enough\": [\"el saldo no es suficiente\"],\n \"does not follow the pattern\": [\"no tiene un patr\u00F3n valido\"],\n 'only \"IBAN\" target are supported': [\n 'solo cuentas \"IBAN\" son soportadas',\n ],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n 'usa el par\u00E1metro \"amount\" para indicar el monto a ser transferido',\n ],\n \"the amount is not valid\": [\"el monto no es v\u00E1lido\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\n 'usa el par\u00E1metro \"message\" para indicar un texto de referencia en la transferencia',\n ],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\n \"El pedido era inv\u00E1lido o el URI payto:// usado tiene caracter\u00EDsticas inaceptables.\",\n ],\n \"Not enough permission to complete the operation.\": [\n \"Sin permisos suficientes para completar la operaci\u00F3n.\",\n ],\n 'The destination account \"%1$s\" was not found.': [\n 'La cuenta de destino \"%1$s\" no fue encontrada.',\n ],\n \"The origin and the destination of the transfer can't be the same.\": [\n \"El origen y destino de la transferencia no puede ser la misma.\",\n ],\n \"Your balance is not enough.\": [\"El saldo no es suficiente.\"],\n 'The origin account \"%1$s\" was not found.': [\n 'La cuenta origen \"%1$s\" no fue encontrada.',\n ],\n \"Using a form\": [\"Usando un formulario\"],\n \"Import payto:// URI\": [\"Importando un URI payto://\"],\n Recipient: [\"Destinatario\"],\n \"IBAN of the recipient's account\": [\n \"Numero IBAN de la cuenta destinataria\",\n ],\n \"Transfer subject\": [\"Asunto de transferencia\"],\n subject: [\"asunto\"],\n \"some text to identify the transfer\": [\n \"alg\u00FAn texto para identificar la transferencia\",\n ],\n Amount: [\"Monto\"],\n \"amount to transfer\": [\"monto a transferir\"],\n \"payto URI:\": [\"payto URI:\"],\n \"uniform resource identifier of the target account\": [\n \"identificador de recurso uniforme de la cuenta destino\",\n ],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\n \"payto://iban/[iban-destinatario]?message=[asunto]&amount=[%1$s:X.Y]\",\n ],\n Cancel: [\"Cancelar\"],\n Send: [\"Env\u00EDar\"],\n \"Missing username\": [\"Falta nombre de usuario\"],\n \"Missing password\": [\"Falta contrase\u00F1a\"],\n 'Wrong credentials for \"%1$s\"': ['Credenciales incorrectas para \"%1$s\"'],\n \"Account not found\": [\"Cuenta no encontrada\"],\n Username: [\"Nombre de usuario\"],\n \"username of the account\": [\"nombre de usuario de la cuenta\"],\n Password: [\"Contrase\u00F1a\"],\n \"password of the account\": [\"contrase\u00F1a de la cuenta\"],\n Check: [\"Verificar\"],\n \"Log in\": [\"Acceso\"],\n Register: [\"Registrarse\"],\n \"Wire transfer completed!\": [\"Transferencia bancaria completada!\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\n \"La extracci\u00F3n fue abortada anteriormente y no puede ser confirmada\",\n ],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\n \"La operaci\u00F3n de extracci\u00F3n no puede ser confirmada antes de que una billetera acepte la transaccion.\",\n ],\n \"Your balance is not enough for the operation.\": [\n \"El saldo no es suficiente para la operaci\u00F3n.\",\n ],\n \"Confirm the withdrawal operation\": [\n \"Confirme la operaci\u00F3n de extracci\u00F3n\",\n ],\n \"Wire transfer details\": [\"Detalle de transferencia bancaria\"],\n \"Taler Exchange operator's account\": [\n \"Cuenta del operador del Taler Exchange\",\n ],\n \"Taler Exchange operator's name\": [\n \"Nombre del operador del Taler Exchange\",\n ],\n Transfer: [\"Transferencia\"],\n \"Authentication required\": [\"Autenticaci\u00F3n requerida\"],\n \"This operation was created with other username\": [\n \"Esta operaci\u00F3n fue creada con otro usuario\",\n ],\n \"Operation aborted\": [\"Operaci\u00F3n abortada\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\n \"La transferencia bancaria a la cuenta del operador del Taler Exchange fue abortada, su saldo no fue afectado.\",\n ],\n \"You can close this page now or continue to the account page.\": [\n \"Ya puedes cerrar esta pagina or continuar a la p\u00E1gina de estado de cuenta.\",\n ],\n Continue: [\"Continuar\"],\n \"Withdrawal confirmed\": [\"La extracci\u00F3n fue confirmada\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\n \"La transferencia bancaria al operador Taler fue iniciada. Pronto recibir\u00E1s el monto pedido en tu billetera Taler.\",\n ],\n Done: [\"Listo\"],\n \"Operation canceled\": [\"Operaci\u00F3n cancelada\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\n \"La operaci\u00F3n est\u00E1 marcada como 'seleccionada' pero algunos pasos en la extracci\u00F3n fallaron\",\n ],\n \"The account is selected but no withdrawal identification found.\": [\n \"La cuenta est\u00E1 seleccionada pero no se encontr\u00F3 el identificador de extracci\u00F3n.\",\n ],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\n \"Hay un identificador de extracci\u00F3n pero la cuenta no ha sido seleccionada o la selccionada es inv\u00E1lida.\",\n ],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\n \"No hay un identificador de extracci\u00F3n y ninguna cuenta a sido seleccionada o la seleccionada es inv\u00E1lida.\",\n ],\n \"Operation not found\": [\"Operaci\u00F3n no encontrada\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\n \"Esta operaci\u00F3n no es conocida por el servidor. El identificador de operaci\u00F3n es incorrecto o el server borr\u00F3 la informaci\u00F3n de la operaci\u00F3n antes de llegar hasta aqu\u00ED.\",\n ],\n \"Cotinue to dashboard\": [\"Continuar al panel\"],\n \"The Withdrawal URI is not valid\": [\"El URI de estracci\u00F3n no es v\u00E1lido\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\n 'El servidor de bank no esta spoportado. Version soportada \"%1$s\", version del server \"%2$s\"',\n ],\n \"Internal error, please report.\": [\n \"Error interno, por favor reporte el error.\",\n ],\n Preferences: [\"Preferencias\"],\n \"Welcome, %1$s\": [\"Bienvenido/a, %1$s\"],\n \"Latest transactions\": [\"\u00DAltimas transacciones\"],\n Date: [\"Fecha\"],\n Counterpart: [\"Contraparte\"],\n Subject: [\"Asunto\"],\n sent: [\"enviado\"],\n received: [\"recibido\"],\n \"invalid value\": [\"valor inv\u00E1lido\"],\n to: [\"hacia\"],\n from: [\"desde\"],\n \"First page\": [\"Primera p\u00E1gina\"],\n Next: [\"Siguiente\"],\n \"History of public accounts\": [\"Historial de cuentas p\u00FAblicas\"],\n \"Currently, the bank is not accepting new registrations!\": [\n \"Actualmente, el banco no est\u00E1 aceptado nuevos registros!\",\n ],\n \"Missing name\": [\"Falta nombre\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\n \"Solo use letras y n\u00FAmeros, y comience con una letra min\u00FAscula\",\n ],\n \"Passwords don't match\": [\"La contrase\u00F1a no coincide\"],\n \"Server replied with invalid phone or email.\": [\n \"El servidor repondio con tel\u00E9fono o direcci\u00F3n de correo inv\u00E1lido.\",\n ],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"El registro est\u00E1 deshabilitado porque el banco se qued\u00F3 sin cr\u00E9dito bonus.\",\n ],\n \"No enough permission to create that account.\": [\n \"Sin permisos suficientes para crear esa cuenta.\",\n ],\n \"That account id is already taken.\": [\n \"El identificador de cuenta ya est\u00E1 tomado.\",\n ],\n \"That username is already taken.\": [\n \"El nombre de usuario ya est\u00E1 tomado.\",\n ],\n \"That username can't be used because is reserved.\": [\n \"El nombre de usuario no puede ser usado porque esta reservado.\",\n ],\n \"Only admin is allow to set debt limit.\": [\n \"Solo el administrador tiene permitido cambiar el l\u00EDmite de deuda.\",\n ],\n \"No information for the selected authentication channel.\": [\n \"No hay informaci\u00F3n para el canal de autenticaci\u00F3n seleccionado.\",\n ],\n \"Authentication channel is not supported.\": [\n \"Canal de autenticaci\u00F3n no esta soportado.\",\n ],\n \"Only admin can create accounts with second factor authentication.\": [\n \"Solo el administrador puede crear cuentas con el segundo factor de autenticaci\u00F3n.\",\n ],\n \"Account registration\": [\"Registro de cuenta\"],\n \"Repeat password\": [\"Repita la contrase\u00F1a\"],\n Name: [\"Nombre\"],\n \"Create a random temporary user\": [\"Crear un usuario aleatorio temporal\"],\n \"Make a wire transfer\": [\"Hacer una transferencia bancaria\"],\n \"Wire transfer created!\": [\"Transferencia bancaria creada!\"],\n Accounts: [\"Cuentas\"],\n \"A list of all business account in the bank.\": [\n \"Una lista de todas las cuentas en el banco.\",\n ],\n \"Create account\": [\"Crear cuenta\"],\n Balance: [\"Saldo\"],\n Actions: [\"Acciones\"],\n unknown: [\"desconocido\"],\n \"change password\": [\"cambiar contrase\u00F1a\"],\n remove: [\"elimiar\"],\n \"Select a section\": [\"Seleccione una secci\u00F3n\"],\n \"Last hour\": [\"\u00DAltima hora\"],\n \"Last day\": [\"\u00DAltimo d\u00EDa\"],\n \"Last month\": [\"\u00DAltimo mes\"],\n \"Last year\": [\"\u00DAltimo a\u00F1o\"],\n \"Last Year\": [\"\u00DAltimo A\u00F1o\"],\n \"Trading volume on %1$s compared to %2$s\": [\n \"V\u00F3lumen de comercio en %1$s comparado con %2$s\",\n ],\n Cashin: [\"Ingreso\"],\n Cashout: [\"Egreso\"],\n Payin: [\"Envios de dinero\"],\n Payout: [\"Recibos de dinero\"],\n \"download stats as CSV\": [\"descargar estad\u00EDsticas en CSV\"],\n \"Descreased by\": [\"Descendiente por\"],\n \"Increased by\": [\"Ascendente por\"],\n \"Unable to create a cashout\": [\"Imposible crear un egreso\"],\n \"The bank configuration does not support cashout operations.\": [\n \"La configuraci\u00F3n del banco no soporta operaciones de egreso.\",\n ],\n invalid: [\"inv\u00E1lido\"],\n \"need to be higher due to fees\": [\n \"necesita ser mayor debido a las comisiones\",\n ],\n \"the total transfer at destination will be zero\": [\n \"el total de la transferencia en destino ser\u00E1 cero\",\n ],\n \"Cashout created\": [\"Egreso creado\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\n \"Se detect\u00F3 una petici\u00F3n duplicada, verifique si la operaci\u00F3n tuvo \u00E9xito o intente otra vez.\",\n ],\n \"The conversion rate was incorrectly applied\": [\n \"La tasa de conversi\u00F3n se aplic\u00F3 incorrectamente\",\n ],\n \"The account does not have sufficient funds\": [\n \"La cuenta no tiene fondos suficientes\",\n ],\n \"Cashouts are not supported\": [\"Egresos no est\u00E1n soportados\"],\n \"Missing cashout URI in the profile\": [\n \"Falta direcci\u00F3n de egreso en el perf\u00EDl\",\n ],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\n \"El env\u00EDo del mensaje de confirmaci\u00F3n fall\u00F3, intente mas tarde o contacte al administrador.\",\n ],\n \"Convertion rate\": [\"Tasa de conversi\u00F3n\"],\n Fee: [\"Comisi\u00F3n\"],\n \"To account\": [\"Hacia cuenta\"],\n \"No cashout account\": [\"No hay cuenta de egreso\"],\n \"Before doing a cashout you need to complete your profile\": [\n \"Antes de hacer un egreso necesita completar su perf\u00EDl\",\n ],\n \"Amount to send\": [\"Monto a enviar\"],\n \"Amount to receive\": [\"Monto a recibir\"],\n \"Total cost\": [\"Costo total\"],\n \"Balance left\": [\"Saldo remanente\"],\n \"Before fee\": [\"Antes de comisi\u00F3n\"],\n \"Total cashout transfer\": [\"Total de egreso\"],\n \"No cashout channel available\": [\"No hay canal de egreso disponible\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\n \"Antes de hacer un egreso el servidor necesita proveer un segundo canal para confirmar la operaci\u00F3n\",\n ],\n \"Second factor authentication\": [\"Segundo factor de autenticaci\u00F3n\"],\n Email: [\"Correo eletr\u00F3nico\"],\n \"add a email in your profile to enable this option\": [\n \"agrege un correo en su perf\u00EDl para habilitar esta opci\u00F3n\",\n ],\n SMS: [\"SMS\"],\n \"add a phone number in your profile to enable this option\": [\n \"agregue un n\u00FAmero de tel\u00E9fono para habilitar esta opci\u00F3n\",\n ],\n Details: [\"Detalles\"],\n Delete: [\"Borrar\"],\n Credentials: [\"Credenciales\"],\n Cashouts: [\"Egresos\"],\n \"it doesnt have the pattern of an IBAN number\": [\n \"no tiene el patr\u00F3n de un n\u00FAmero IBAN\",\n ],\n \"it doesnt have the pattern of an email\": [\n \"no tiene el patr\u00F3n de un correo electr\u00F3nico\",\n ],\n \"should start with +\": [\"deber\u00EDa comenzar con un +\"],\n \"phone number can't have other than numbers\": [\n \"n\u00FAmero de tel\u00E9fono no puede tener otra cosa que numeros\",\n ],\n \"account identification in the bank\": [\n \"identificador de cuenta en el banco\",\n ],\n \"name of the person owner the account\": [\n \"nombre de la persona due\u00F1a de la cuenta\",\n ],\n \"Internal IBAN\": [\"IBAN interno\"],\n \"if empty a random account number will be assigned\": [\n \"si est\u00E1 vac\u00EDo un n\u00FAmero de cuenta aleatorio ser\u00E1 asignado\",\n ],\n \"account identification for bank transfer\": [\n \"identificador de cuenta para transferencia bancaria\",\n ],\n Phone: [\"Tel\u00E9fono\"],\n \"Cashout IBAN\": [\"IBAN de egreso\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\n \"numero de cuenta donde el dinero ser\u00E1 enviado cuando se ejecuten egresos\",\n ],\n \"Max debt\": [\"M\u00E1xima deuda\"],\n \"how much is user able to transfer after zero balance\": [\n \"cuanto tiene habilitado a transferir despues de un saldo en cero\",\n ],\n \"Is this a Taler Exchange?\": [\"Es un Taler Exchange?\"],\n \"This server doesn't support second factor authentication.\": [\n \"Este servidor no tiene soporte para segundo factor de autenticaci\u00F3n.\",\n ],\n \"Enable second factor authentication\": [\n \"H\u00E1bilitar segundo factor de autenticaci\u00F3n\",\n ],\n \"Using email\": [\"Usando correo eletr\u00F3nico\"],\n \"Using SMS\": [\"Usando SMS\"],\n \"Is this account public?\": [\"Es una cuenta p\u00FAblica?\"],\n \"public accounts have their balance publicly accesible\": [\n \"las cuentas p\u00FAblicas tienen su saldo accesible al p\u00FAblico\",\n ],\n \"Account updated\": [\"Cuenta actualizada\"],\n \"The rights to change the account are not sufficient\": [\n \"Los permisos para cambiar la cuenta no son suficientes\",\n ],\n \"The username was not found\": [\"El nombre de usaurio no se encontr\u00F3\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\n \"No puede cambiar el nombre legal, por favor contacte el administrador de la cuenta.\",\n ],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\n \"No puede cambiar el l\u00EDmite de deuda, por favor contacte el administrador de la cuenta.\",\n ],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\n \"No puede cambiar la direcci\u00F3n de egreso, por favor contacte al administrador de la cuenta.\",\n ],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\n \"No puede cambiar los datos de contacto, por favor contacte al administrador de la cuenta.\",\n ],\n 'Account \"%1$s\"': ['Cuenta \"%1$s\"'],\n \"Change details\": [\"Cambiar detalles\"],\n Update: [\"Actualizar\"],\n \"password doesn't match\": [\"la contrase\u00F1a no coincide\"],\n \"Password changed\": [\"La contrase\u00F1a cambi\u00F3\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"No est\u00E1 autorizado a cambiar el password, quiz\u00E1 la sesi\u00F3n es invalida.\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\n \"Se necesita el password viejo para cambiar la contrase\u00F1a. Si no lo tiene contacte a su administrador.\",\n ],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"Su actual contrase\u00F1a no coincide, no puede cambiar a una nueva contrase\u00F1a.\",\n ],\n \"Update password\": [\"Actualizar contrase\u00F1a\"],\n \"New password\": [\"Nueva contrase\u00F1a\"],\n \"Type it again\": [\"Escribalo otra vez\"],\n \"repeat the same password\": [\"repita la misma contrase\u00F1a\"],\n \"Current password\": [\"Contrase\u00F1a actual\"],\n \"your current password, for security\": [\n \"su actual contrase\u00F1a, por seguridad\",\n ],\n Change: [\"Cambiar\"],\n \"Can't delete the account\": [\"No se puede eliminar la cuenta\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\n \"La cuenta no puede ser eliminada mientras tiene saldo. Primero asegures\u00E9 que el due\u00F1o haga un egreso completo.\",\n ],\n \"Account removed\": [\"Cuenta eliminada\"],\n \"No enough permission to delete the account.\": [\n \"No tiene permisos suficientes para eliminar la cuenta.\",\n ],\n \"The username was not found.\": [\"El nombr ede usuario no se encontr\u00F3.\"],\n \"Can't delete a reserved username.\": [\n \"No se puede eliminar un nombre de usuario reservado.\",\n ],\n \"Can't delete an account with balance different than zero.\": [\n \"No se puede eliminar una cuenta con saldo diferente a cero.\",\n ],\n \"name doesn't match\": [\"el nombre no coincide\"],\n \"You are going to remove the account\": [\"Est\u00E1 por eliminar la cuenta\"],\n \"This step can't be undone.\": [\"Este paso no puede ser deshecho.\"],\n 'Deleting account \"%1$s\"': ['Borrando cuenta \"%1$s\"'],\n Verification: [\"Verificaci\u00F3n\"],\n \"enter the account name that is going to be deleted\": [\n \"ingrese el nombre de cuenta que ser\u00E1 eliminado\",\n ],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\n 'Cuenta creada con contrase\u00F1a \"%1$s\". El usuario debe cambiar la contrase\u00F1a en el siguiente ingreso.',\n ],\n \"Server replied that phone or email is invalid\": [\n \"El servidor respondi\u00F3 que el tel\u00E9fono o correo eletr\u00F3nico es invalido\",\n ],\n \"The rights to perform the operation are not sufficient\": [\n \"Los permisos para ejecutar la operaci\u00F3n no son suficientes\",\n ],\n \"Account username is already taken\": [\n \"El nombre del usuario ya est\u00E1 tomado\",\n ],\n \"Account id is already taken\": [\"El id de cuenta ya est\u00E1 tomado\"],\n \"Bank ran out of bonus credit.\": [\n \"El banco no tiene mas cr\u00E9dito de bonus.\",\n ],\n \"Account username can't be used because is reserved\": [\n \"El nombre de usuario de la cuenta no puede userse porque est\u00E1 reservado\",\n ],\n \"Can't create accounts\": [\"No puede crear cuentas\"],\n \"Only system admin can create accounts.\": [\n \"Solo los administradores del sistema pueden crear cuentas.\",\n ],\n \"New business account\": [\"Nueva cuenta\"],\n Create: [\"Crear\"],\n \"Cashout not supported.\": [\"Egreso no soportado.\"],\n \"Account not found.\": [\"Cuenta no encontrada.\"],\n \"Latest cashouts\": [\"\u00DAltimos egresos\"],\n Created: [\"Creado\"],\n Confirmed: [\"Confirmado\"],\n \"Total debit\": [\"D\u00E9bito total\"],\n \"Total credit\": [\"Cr\u00E9dito total\"],\n Status: [\"Estado\"],\n never: [\"nunca\"],\n \"Cashout for account %1$s\": [\"Egreso para cuenta %1$s\"],\n \"This cashout not found. Maybe already aborted.\": [\n \"Este egreso no se encontr\u00F3. Quiz\u00E1 fue abortado.\",\n ],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"Egreso no econtrado. Tambi\u00E9n puede significar que ya ha sido abortado.\",\n ],\n \"Cashout was already confimed.\": [\"Egreso ya fue confirmado.\"],\n \"Cashout operation is not supported.\": [\n \"Operaci\u00F3n de egreso no soportada.\",\n ],\n \"The cashout operation is already aborted.\": [\n \"La operaci\u00F3n de egreso ya est\u00E1 abortada.\",\n ],\n \"Missing destination account.\": [\"Falta cuenta destino.\"],\n \"Too many failed attempts.\": [\"Demasiados intentos fallidos.\"],\n \"The code for this cashout is invalid.\": [\n \"El c\u00F3digo para este egreso es invalido.\",\n ],\n \"Cashout detail\": [\"Detalles de egreso\"],\n Debited: [\"Debitado\"],\n Credited: [\"Acreditado\"],\n \"Enter the confirmation code\": [\"Ingresar el c\u00F3digo de confirmaci\u00F3n\"],\n Abort: [\"Abortar\"],\n Confirm: [\"Confirmar\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\n \"No autorizado para hacer la operaci\u00F3n, quiz\u00E1 la sesi\u00F3n haya expirado or cambi\u00F3 la contrase\u00F1a.\",\n ],\n \"The operation was rejected due to insufficient funds.\": [\n \"La operaci\u00F3n fue rechazada debido a saldo insuficiente.\",\n ],\n \"Do not show this again\": [\"No mostrar otra vez\"],\n Close: [\"Cerrar\"],\n \"On this device\": [\"En este dispositivo\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\n 'Si esta usando un explorador web de escritorio deber\u00EDas acceder ahora a tu billletera con la GNU Taler WebExtension o hacer click en el link si tu extensi\u00F3n tiene la configuraci\u00F3n \"Inyectar soporte para Taler\" habilitada.',\n ],\n Start: [\"Comenzar\"],\n \"On a mobile phone\": [\"En un dispotivo mobile\"],\n \"Scan the QR code with your mobile device.\": [\n \"Escanear el c\u00F3digo QR con tu dispotivo m\u00F3vil.\",\n ],\n \"There is an operation already\": [\"Ya hay una operaci\u00F3n\"],\n \"Complete or cancel the operation in\": [\n \"Completa o cancela la operaci\u00F3n en\",\n ],\n \"Server responded with an invalid withdraw URI\": [\n \"El servidor respondi\u00F3 con una URI de extracci\u00F3n inv\u00E1lida\",\n ],\n \"Withdraw URI: %1$s\": [\"URI de extracci\u00F3n: %1$s\"],\n \"The operation was rejected due to insufficient funds\": [\n \"La operaci\u00F3n fue rechazada debido a fundos insuficientes\",\n ],\n \"Prepare your wallet\": [\"Prepare su billetera\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\n \"Despues de usar tu billetera necesitar\u00E1s confirmar o cancelar la operaci\u00F3n en este sitio.\",\n ],\n \"You need a GNU Taler Wallet\": [\"Necesitas una GNU Taler Wallet\"],\n \"If you don't have one yet you can follow the instruction in\": [\n \"Si no tienes una todav\u00EDa puedes seguir las instrucciones en\",\n ],\n \"Send money\": [\"Enviar dinero\"],\n \"to a %1$s wallet\": [\"a una billetera %1$s\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"Extraer dinero digital a tu billetera m\u00F3vil o extesi\u00F3n web\",\n ],\n \"operation ready\": [\"operaci\u00F3n lista\"],\n \"to another bank account\": [\"a otra cuenta bancaria\"],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"Hacer una transferencia bancaria a una cuenta con un n\u00FAmero de cuenta conocido.\",\n ],\n \"Transfer details\": [\"Detalles de transferencia\"],\n \"This is a demo bank\": [\"Este es un banco de demostraci\u00F3n\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\n \"Esta parte de la demostraci\u00F3n muestra c\u00F3mo funciona un banco que soporta Taler directamente. Adem\u00E1s de usar tu propia cuenta de banco, tambi\u00E9n podr\u00E1s ver el historial de transacciones de algunas %1$s.\",\n ],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\n \"Esta parte de la demostraci\u00F3n muetra como un banco que soporta Taler directamente funcionar\u00EDa.\",\n ],\n \"Pending account delete operation\": [\n \"Operaci\u00F3n pendiente de eliminaci\u00F3n de cuenta\",\n ],\n \"Pending account update operation\": [\n \"Operaci\u00F3n pendiente de actualizaci\u00F3n de cuenta\",\n ],\n \"Pending password update operation\": [\n \"Operaci\u00F3n pendiente de actualizaci\u00F3n de password\",\n ],\n \"Pending transaction operation\": [\"Operaci\u00F3n pendiente de transacci\u00F3n\"],\n \"Pending withdrawal operation\": [\"Operaci\u00F3n pendiente de extracci\u00F3n\"],\n \"Pending cashout operation\": [\"Operaci\u00F3n pendiente de egreso\"],\n \"You can complete or cancel the operation in\": [\n \"Puedes completar o cancelar la operaci\u00F3n en\",\n ],\n \"Download bank stats\": [\"Descargar estad\u00EDsticas del banco\"],\n \"Include hour metric\": [\"Incluir m\u00E9trica horaria\"],\n \"Include day metric\": [\"Incluir m\u00E9trica diaria\"],\n \"Include month metric\": [\"Incluir m\u00E9trica mensual\"],\n \"Include year metric\": [\"Incluir m\u00E9trica anual\"],\n \"Include table header\": [\"Incluir encabezado de tabla\"],\n \"Add previous metric for compare\": [\n \"Agregar m\u00E9trica previa para comparar\",\n ],\n \"Fail on first error\": [\"Fallar en el primer error\"],\n Download: [\"Descargar\"],\n \"downloading... %1$s\": [\"descargando... %1$s\"],\n \"Download completed\": [\"Descarga completada\"],\n \"click here to save the file in your computer\": [\n \"click aqu\u00ED para guardar el archivo en su computadora\",\n ],\n \"Challenge not found.\": [\"Desaf\u00EDo no encontrado.\"],\n \"This user is not authorized to complete this challenge.\": [\n \"Este usuario no est\u00E1 autorizado para completar este desaf\u00EDo.\",\n ],\n \"Too many attemps, try another code.\": [\n \"Demasiados intentos, intente otro c\u00F3digo.\",\n ],\n \"The confirmation code is wrong, try again.\": [\n \"El c\u00F3digo de confirmaci\u00F3n es erroneo, intente otra vez.\",\n ],\n \"The operation expired.\": [\"La operaci\u00F3n expir\u00F3.\"],\n \"The operation failed.\": [\"La operaci\u00F3n fall\u00F3.\"],\n \"The operation needs another confirmation to complete.\": [\n \"La operaci\u00F3n necesita otra confirmaci\u00F3n para completar.\",\n ],\n \"Account delete\": [\"Eliminaci\u00F3n de cuenta\"],\n \"Account update\": [\"Actualizaci\u00F3n de cuenta\"],\n \"Password update\": [\"Actualizaci\u00F3n de contrase\u00F1a\"],\n \"Wire transfer\": [\"Transferencia bancaria\"],\n Withdrawal: [\"Extracci\u00F3n\"],\n \"Confirm the operation\": [\"Confirmar la operaci\u00F3n\"],\n \"Send again\": [\"Enviar otra vez\"],\n \"Send code\": [\"Enviar c\u00F3digo\"],\n \"Operation details\": [\"Detalles de operaci\u00F3n\"],\n \"Challenge details\": [\"Detalles del desaf\u00EDo\"],\n \"Sent at\": [\"Enviado a\"],\n \"To phone\": [\"Al tel\u00E9fono\"],\n \"To email\": [\"Al email\"],\n \"Welcome to %1$s!\": [\"Bienvenido a %1$s!\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"es\",\n completeness: 100,\n};\n\nstrings[\"en\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=(n != 1);\",\n lang: \"en\",\n },\n \"Operation failed, please report\": [\"\"],\n \"Request timeout\": [\"\"],\n \"Request throttled\": [\"\"],\n \"Malformed response\": [\"\"],\n \"Network error\": [\"\"],\n \"Unexpected request error\": [\"\"],\n \"Unexpected error\": [\"\"],\n \"IBAN numbers usually have more that 4 digits\": [\"\"],\n \"IBAN numbers usually have less that 34 digits\": [\"\"],\n \"IBAN country code not found\": [\"\"],\n \"IBAN number is not valid, checksum is wrong\": [\"\"],\n \"Max withdrawal amount\": [\"\"],\n \"Show withdrawal confirmation\": [\"\"],\n \"Show demo description\": [\"\"],\n \"Show install wallet first\": [\"\"],\n \"Use fast withdrawal form\": [\"\"],\n \"Show debug info\": [\"\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\"\"],\n \"The operation id is invalid.\": [\"\"],\n \"The operation was not found.\": [\"\"],\n \"If you have a Taler wallet installed in this device\": [\"\"],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\"\"],\n \"this page\": [\"\"],\n Withdraw: [\"\"],\n \"Or if you have the wallet in another device\": [\"\"],\n \"Scan the QR below to start the withdrawal.\": [\"\"],\n required: [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"not valid\": [\"\"],\n \"should be greater than 0\": [\"\"],\n \"balance is not enough\": [\"\"],\n \"does not follow the pattern\": [\"\"],\n 'only \"IBAN\" target are supported': [\"\"],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n \"\",\n ],\n \"the amount is not valid\": [\"\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\"\"],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\"\"],\n \"Not enough permission to complete the operation.\": [\"\"],\n 'The destination account \"%1$s\" was not found.': [\"\"],\n \"The origin and the destination of the transfer can't be the same.\": [\"\"],\n \"Your balance is not enough.\": [\"\"],\n 'The origin account \"%1$s\" was not found.': [\"\"],\n \"Using a form\": [\"\"],\n \"Import payto:// URI\": [\"\"],\n Recipient: [\"\"],\n \"IBAN of the recipient's account\": [\"\"],\n \"Transfer subject\": [\"\"],\n subject: [\"\"],\n \"some text to identify the transfer\": [\"\"],\n Amount: [\"\"],\n \"amount to transfer\": [\"\"],\n \"payto URI:\": [\"\"],\n \"uniform resource identifier of the target account\": [\"\"],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\"\"],\n Cancel: [\"\"],\n Send: [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n 'Wrong credentials for \"%1$s\"': [\"\"],\n \"Account not found\": [\"\"],\n Username: [\"\"],\n \"username of the account\": [\"\"],\n Password: [\"\"],\n \"password of the account\": [\"\"],\n Check: [\"\"],\n \"Log in\": [\"\"],\n Register: [\"\"],\n \"Wire transfer completed!\": [\"\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\"\"],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\"\"],\n \"Your balance is not enough for the operation.\": [\"\"],\n \"Confirm the withdrawal operation\": [\"\"],\n \"Wire transfer details\": [\"\"],\n \"Taler Exchange operator's account\": [\"\"],\n \"Taler Exchange operator's name\": [\"\"],\n Transfer: [\"\"],\n \"Authentication required\": [\"\"],\n \"This operation was created with other username\": [\"\"],\n \"Operation aborted\": [\"\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\"\"],\n \"You can close this page now or continue to the account page.\": [\"\"],\n Continue: [\"\"],\n \"Withdrawal confirmed\": [\"\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\"\"],\n Done: [\"\"],\n \"Operation canceled\": [\"\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\"\"],\n \"The account is selected but no withdrawal identification found.\": [\"\"],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"Operation not found\": [\"\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\"\"],\n \"Cotinue to dashboard\": [\"\"],\n \"The Withdrawal URI is not valid\": [\"\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\"\"],\n \"Internal error, please report.\": [\"\"],\n Preferences: [\"\"],\n \"Welcome, %1$s\": [\"\"],\n \"Latest transactions\": [\"\"],\n Date: [\"\"],\n Counterpart: [\"\"],\n Subject: [\"\"],\n sent: [\"\"],\n received: [\"\"],\n \"invalid value\": [\"\"],\n to: [\"\"],\n from: [\"\"],\n \"First page\": [\"\"],\n Next: [\"\"],\n \"History of public accounts\": [\"\"],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Missing name\": [\"\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\"\"],\n \"Passwords don't match\": [\"\"],\n \"Server replied with invalid phone or email.\": [\"\"],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"\",\n ],\n \"No enough permission to create that account.\": [\"\"],\n \"That account id is already taken.\": [\"\"],\n \"That username is already taken.\": [\"\"],\n \"That username can't be used because is reserved.\": [\"\"],\n \"Only admin is allow to set debt limit.\": [\"\"],\n \"No information for the selected authentication channel.\": [\"\"],\n \"Authentication channel is not supported.\": [\"\"],\n \"Only admin can create accounts with second factor authentication.\": [\"\"],\n \"Account registration\": [\"\"],\n \"Repeat password\": [\"\"],\n Name: [\"\"],\n \"Create a random temporary user\": [\"\"],\n \"Make a wire transfer\": [\"\"],\n \"Wire transfer created!\": [\"\"],\n Accounts: [\"\"],\n \"A list of all business account in the bank.\": [\"\"],\n \"Create account\": [\"\"],\n Balance: [\"\"],\n Actions: [\"\"],\n unknown: [\"\"],\n \"change password\": [\"\"],\n remove: [\"\"],\n \"Select a section\": [\"\"],\n \"Last hour\": [\"\"],\n \"Last day\": [\"\"],\n \"Last month\": [\"\"],\n \"Last year\": [\"\"],\n \"Last Year\": [\"\"],\n \"Trading volume on %1$s compared to %2$s\": [\"\"],\n Cashin: [\"\"],\n Cashout: [\"\"],\n Payin: [\"\"],\n Payout: [\"\"],\n \"download stats as CSV\": [\"\"],\n \"Descreased by\": [\"\"],\n \"Increased by\": [\"\"],\n \"Unable to create a cashout\": [\"\"],\n \"The bank configuration does not support cashout operations.\": [\"\"],\n invalid: [\"\"],\n \"need to be higher due to fees\": [\"\"],\n \"the total transfer at destination will be zero\": [\"\"],\n \"Cashout created\": [\"\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\"\"],\n \"The conversion rate was incorrectly applied\": [\"\"],\n \"The account does not have sufficient funds\": [\"\"],\n \"Cashouts are not supported\": [\"\"],\n \"Missing cashout URI in the profile\": [\"\"],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\"\"],\n \"Convertion rate\": [\"\"],\n Fee: [\"\"],\n \"To account\": [\"\"],\n \"No cashout account\": [\"\"],\n \"Before doing a cashout you need to complete your profile\": [\"\"],\n \"Amount to send\": [\"\"],\n \"Amount to receive\": [\"\"],\n \"Total cost\": [\"\"],\n \"Balance left\": [\"\"],\n \"Before fee\": [\"\"],\n \"Total cashout transfer\": [\"\"],\n \"No cashout channel available\": [\"\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\"\"],\n \"Second factor authentication\": [\"\"],\n Email: [\"\"],\n \"add a email in your profile to enable this option\": [\"\"],\n SMS: [\"\"],\n \"add a phone number in your profile to enable this option\": [\"\"],\n Details: [\"\"],\n Delete: [\"\"],\n Credentials: [\"\"],\n Cashouts: [\"\"],\n \"it doesnt have the pattern of an IBAN number\": [\"\"],\n \"it doesnt have the pattern of an email\": [\"\"],\n \"should start with +\": [\"\"],\n \"phone number can't have other than numbers\": [\"\"],\n \"account identification in the bank\": [\"\"],\n \"name of the person owner the account\": [\"\"],\n \"Internal IBAN\": [\"\"],\n \"if empty a random account number will be assigned\": [\"\"],\n \"account identification for bank transfer\": [\"\"],\n Phone: [\"\"],\n \"Cashout IBAN\": [\"\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\"\"],\n \"Max debt\": [\"\"],\n \"how much is user able to transfer after zero balance\": [\"\"],\n \"Is this a Taler Exchange?\": [\"\"],\n \"This server doesn't support second factor authentication.\": [\"\"],\n \"Enable second factor authentication\": [\"\"],\n \"Using email\": [\"\"],\n \"Using SMS\": [\"\"],\n \"Is this account public?\": [\"\"],\n \"public accounts have their balance publicly accesible\": [\"\"],\n \"Account updated\": [\"\"],\n \"The rights to change the account are not sufficient\": [\"\"],\n \"The username was not found\": [\"\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\"\"],\n 'Account \"%1$s\"': [\"\"],\n \"Change details\": [\"\"],\n Update: [\"\"],\n \"password doesn't match\": [\"\"],\n \"Password changed\": [\"\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\"\"],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"\",\n ],\n \"Update password\": [\"\"],\n \"New password\": [\"\"],\n \"Type it again\": [\"\"],\n \"repeat the same password\": [\"\"],\n \"Current password\": [\"\"],\n \"your current password, for security\": [\"\"],\n Change: [\"\"],\n \"Can't delete the account\": [\"\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\"\"],\n \"Account removed\": [\"\"],\n \"No enough permission to delete the account.\": [\"\"],\n \"The username was not found.\": [\"\"],\n \"Can't delete a reserved username.\": [\"\"],\n \"Can't delete an account with balance different than zero.\": [\"\"],\n \"name doesn't match\": [\"\"],\n \"You are going to remove the account\": [\"\"],\n \"This step can't be undone.\": [\"\"],\n 'Deleting account \"%1$s\"': [\"\"],\n Verification: [\"\"],\n \"enter the account name that is going to be deleted\": [\"\"],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\"\"],\n \"Server replied that phone or email is invalid\": [\"\"],\n \"The rights to perform the operation are not sufficient\": [\"\"],\n \"Account username is already taken\": [\"\"],\n \"Account id is already taken\": [\"\"],\n \"Bank ran out of bonus credit.\": [\"\"],\n \"Account username can't be used because is reserved\": [\"\"],\n \"Can't create accounts\": [\"\"],\n \"Only system admin can create accounts.\": [\"\"],\n \"New business account\": [\"\"],\n Create: [\"\"],\n \"Cashout not supported.\": [\"\"],\n \"Account not found.\": [\"\"],\n \"Latest cashouts\": [\"\"],\n Created: [\"\"],\n Confirmed: [\"\"],\n \"Total debit\": [\"\"],\n \"Total credit\": [\"\"],\n Status: [\"\"],\n never: [\"\"],\n \"Cashout for account %1$s\": [\"\"],\n \"This cashout not found. Maybe already aborted.\": [\"\"],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"\",\n ],\n \"Cashout was already confimed.\": [\"\"],\n \"Cashout operation is not supported.\": [\"\"],\n \"The cashout operation is already aborted.\": [\"\"],\n \"Missing destination account.\": [\"\"],\n \"Too many failed attempts.\": [\"\"],\n \"The code for this cashout is invalid.\": [\"\"],\n \"Cashout detail\": [\"\"],\n Debited: [\"\"],\n Credited: [\"\"],\n \"Enter the confirmation code\": [\"\"],\n Abort: [\"\"],\n Confirm: [\"\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\"\"],\n \"The operation was rejected due to insufficient funds.\": [\"\"],\n \"Do not show this again\": [\"\"],\n Close: [\"\"],\n \"On this device\": [\"\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\"\"],\n Start: [\"\"],\n \"On a mobile phone\": [\"\"],\n \"Scan the QR code with your mobile device.\": [\"\"],\n \"There is an operation already\": [\"\"],\n \"Complete or cancel the operation in\": [\"\"],\n \"Server responded with an invalid withdraw URI\": [\"\"],\n \"Withdraw URI: %1$s\": [\"\"],\n \"The operation was rejected due to insufficient funds\": [\"\"],\n \"Prepare your wallet\": [\"\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\"\"],\n \"You need a GNU Taler Wallet\": [\"\"],\n \"If you don't have one yet you can follow the instruction in\": [\"\"],\n \"Send money\": [\"\"],\n \"to a %1$s wallet\": [\"\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"\",\n ],\n \"operation ready\": [\"\"],\n \"to another bank account\": [\"\"],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"\",\n ],\n \"Transfer details\": [\"\"],\n \"This is a demo bank\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\"\"],\n \"Pending account delete operation\": [\"\"],\n \"Pending account update operation\": [\"\"],\n \"Pending password update operation\": [\"\"],\n \"Pending transaction operation\": [\"\"],\n \"Pending withdrawal operation\": [\"\"],\n \"Pending cashout operation\": [\"\"],\n \"You can complete or cancel the operation in\": [\"\"],\n \"Download bank stats\": [\"\"],\n \"Include hour metric\": [\"\"],\n \"Include day metric\": [\"\"],\n \"Include month metric\": [\"\"],\n \"Include year metric\": [\"\"],\n \"Include table header\": [\"\"],\n \"Add previous metric for compare\": [\"\"],\n \"Fail on first error\": [\"\"],\n Download: [\"\"],\n \"downloading... %1$s\": [\"\"],\n \"Download completed\": [\"\"],\n \"click here to save the file in your computer\": [\"\"],\n \"Challenge not found.\": [\"\"],\n \"This user is not authorized to complete this challenge.\": [\"\"],\n \"Too many attemps, try another code.\": [\"\"],\n \"The confirmation code is wrong, try again.\": [\"\"],\n \"The operation expired.\": [\"\"],\n \"The operation failed.\": [\"\"],\n \"The operation needs another confirmation to complete.\": [\"\"],\n \"Account delete\": [\"\"],\n \"Account update\": [\"\"],\n \"Password update\": [\"\"],\n \"Wire transfer\": [\"\"],\n Withdrawal: [\"\"],\n \"Confirm the operation\": [\"\"],\n \"Send again\": [\"\"],\n \"Send code\": [\"\"],\n \"Operation details\": [\"\"],\n \"Challenge details\": [\"\"],\n \"Sent at\": [\"\"],\n \"To phone\": [\"\"],\n \"To email\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=(n != 1);\",\n lang: \"en\",\n completeness: 100,\n};\n\nstrings[\"de\"] = {\n locale_data: {\n messages: {\n \"\": {\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"de\",\n },\n \"Operation failed, please report\": [\"\"],\n \"Request timeout\": [\"\"],\n \"Request throttled\": [\"\"],\n \"Malformed response\": [\"\"],\n \"Network error\": [\"\"],\n \"Unexpected request error\": [\"\"],\n \"Unexpected error\": [\"\"],\n \"IBAN numbers usually have more that 4 digits\": [\"\"],\n \"IBAN numbers usually have less that 34 digits\": [\"\"],\n \"IBAN country code not found\": [\"\"],\n \"IBAN number is not valid, checksum is wrong\": [\"\"],\n \"Max withdrawal amount\": [\"\"],\n \"Show withdrawal confirmation\": [\"\"],\n \"Show demo description\": [\"\"],\n \"Show install wallet first\": [\"\"],\n \"Use fast withdrawal form\": [\"\"],\n \"Show debug info\": [\"\"],\n \"The reserve operation has been confirmed previously and can't be aborted\":\n [\"\"],\n \"The operation id is invalid.\": [\"\"],\n \"The operation was not found.\": [\"\"],\n \"If you have a Taler wallet installed in this device\": [\"\"],\n \"You will see the details of the operation in your wallet including the fees (if applies). If you still don't have one you can install it following instructions in\":\n [\"\"],\n \"this page\": [\"\"],\n Withdraw: [\"\"],\n \"Or if you have the wallet in another device\": [\"\"],\n \"Scan the QR below to start the withdrawal.\": [\"\"],\n required: [\"\"],\n \"IBAN should have just uppercased letters and numbers\": [\"\"],\n \"not valid\": [\"\"],\n \"should be greater than 0\": [\"\"],\n \"balance is not enough\": [\"\"],\n \"does not follow the pattern\": [\"\"],\n 'only \"IBAN\" target are supported': [\"\"],\n 'use the \"amount\" parameter to specify the amount to be transferred': [\n \"\",\n ],\n \"the amount is not valid\": [\"\"],\n 'use the \"message\" parameter to specify a reference text for the transfer':\n [\"\"],\n \"The request was invalid or the payto://-URI used unacceptable features.\":\n [\"\"],\n \"Not enough permission to complete the operation.\": [\"\"],\n 'The destination account \"%1$s\" was not found.': [\"\"],\n \"The origin and the destination of the transfer can't be the same.\": [\"\"],\n \"Your balance is not enough.\": [\"\"],\n 'The origin account \"%1$s\" was not found.': [\"\"],\n \"Using a form\": [\"\"],\n \"Import payto:// URI\": [\"\"],\n Recipient: [\"\"],\n \"IBAN of the recipient's account\": [\"\"],\n \"Transfer subject\": [\"\"],\n subject: [\"Verwendungszweck\"],\n \"some text to identify the transfer\": [\"\"],\n Amount: [\"Betrag\"],\n \"amount to transfer\": [\"Betrag\"],\n \"payto URI:\": [\"\"],\n \"uniform resource identifier of the target account\": [\"\"],\n \"payto://iban/[receiver-iban]?message=[subject]&amount=[%1$s:X.Y]\": [\"\"],\n Cancel: [\"\"],\n Send: [\"\"],\n \"Missing username\": [\"\"],\n \"Missing password\": [\"\"],\n 'Wrong credentials for \"%1$s\"': [\"\"],\n \"Account not found\": [\"\"],\n Username: [\"\"],\n \"username of the account\": [\"\"],\n Password: [\"\"],\n \"password of the account\": [\"Buchungen auf \u00F6ffentlich sichtbaren Konten\"],\n Check: [\"\"],\n \"Log in\": [\"\"],\n Register: [\"\"],\n \"Wire transfer completed!\": [\"\"],\n \"The withdrawal has been aborted previously and can't be confirmed\": [\"\"],\n \"The withdrawal operation can't be confirmed before a wallet accepted the transaction.\":\n [\"\"],\n \"Your balance is not enough for the operation.\": [\"\"],\n \"Confirm the withdrawal operation\": [\"Abhebung best\u00E4tigen\"],\n \"Wire transfer details\": [\"\"],\n \"Taler Exchange operator's account\": [\"\"],\n \"Taler Exchange operator's name\": [\"\"],\n Transfer: [\"\"],\n \"Authentication required\": [\"\"],\n \"This operation was created with other username\": [\"\"],\n \"Operation aborted\": [\"\"],\n \"The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.\":\n [\"\"],\n \"You can close this page now or continue to the account page.\": [\"\"],\n Continue: [\"\"],\n \"Withdrawal confirmed\": [\"\"],\n \"The wire transfer to the Taler operator has been initiated. You will soon receive the requested amount in your Taler wallet.\":\n [\"\"],\n Done: [\"\"],\n \"Operation canceled\": [\"\"],\n \"The operation is marked as 'selected' but some step in the withdrawal failed\":\n [\"\"],\n \"The account is selected but no withdrawal identification found.\": [\"\"],\n \"There is a withdrawal identification but no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"No withdrawal ID found and no account has been selected or the selected account is invalid.\":\n [\"\"],\n \"Operation not found\": [\"\"],\n \"This operation is not known by the server. The operation id is wrong or the server deleted the operation information before reaching here.\":\n [\"\"],\n \"Cotinue to dashboard\": [\"\"],\n \"The Withdrawal URI is not valid\": [\"\"],\n 'the bank backend is not supported. supported version \"%1$s\", server version \"%2$s\"':\n [\"\"],\n \"Internal error, please report.\": [\"\"],\n Preferences: [\"\"],\n \"Welcome, %1$s\": [\"\"],\n \"Latest transactions\": [\"\"],\n Date: [\"Datum\"],\n Counterpart: [\"Empf\u00E4nger\"],\n Subject: [\"Verwendungszweck\"],\n sent: [\"\"],\n received: [\"\"],\n \"invalid value\": [\"\"],\n to: [\"\"],\n from: [\"\"],\n \"First page\": [\"\"],\n Next: [\"\"],\n \"History of public accounts\": [\n \"Buchungen auf \u00F6ffentlich sichtbaren Konten\",\n ],\n \"Currently, the bank is not accepting new registrations!\": [\"\"],\n \"Missing name\": [\"\"],\n \"Use letters and numbers only, and start with a lowercase letter\": [\"\"],\n \"Passwords don't match\": [\"\"],\n \"Server replied with invalid phone or email.\": [\"\"],\n \"Registration is disabled because the bank ran out of bonus credit.\": [\n \"\",\n ],\n \"No enough permission to create that account.\": [\"\"],\n \"That account id is already taken.\": [\"\"],\n \"That username is already taken.\": [\"\"],\n \"That username can't be used because is reserved.\": [\"\"],\n \"Only admin is allow to set debt limit.\": [\"\"],\n \"No information for the selected authentication channel.\": [\"\"],\n \"Authentication channel is not supported.\": [\"\"],\n \"Only admin can create accounts with second factor authentication.\": [\"\"],\n \"Account registration\": [\"\"],\n \"Repeat password\": [\"\"],\n Name: [\"\"],\n \"Create a random temporary user\": [\"\"],\n \"Make a wire transfer\": [\"\"],\n \"Wire transfer created!\": [\"\"],\n Accounts: [\"Betrag\"],\n \"A list of all business account in the bank.\": [\"\"],\n \"Create account\": [\"\"],\n Balance: [\"\"],\n Actions: [\"\"],\n unknown: [\"\"],\n \"change password\": [\"\"],\n remove: [\"\"],\n \"Select a section\": [\"\"],\n \"Last hour\": [\"\"],\n \"Last day\": [\"\"],\n \"Last month\": [\"\"],\n \"Last year\": [\"\"],\n \"Last Year\": [\"\"],\n \"Trading volume on %1$s compared to %2$s\": [\"\"],\n Cashin: [\"\"],\n Cashout: [\"\"],\n Payin: [\"\"],\n Payout: [\"\"],\n \"download stats as CSV\": [\"\"],\n \"Descreased by\": [\"\"],\n \"Increased by\": [\"\"],\n \"Unable to create a cashout\": [\"\"],\n \"The bank configuration does not support cashout operations.\": [\"\"],\n invalid: [\"\"],\n \"need to be higher due to fees\": [\"\"],\n \"the total transfer at destination will be zero\": [\"\"],\n \"Cashout created\": [\"\"],\n \"Duplicated request detected, check if the operation succeded or try again.\":\n [\"\"],\n \"The conversion rate was incorrectly applied\": [\"\"],\n \"The account does not have sufficient funds\": [\"\"],\n \"Cashouts are not supported\": [\"\"],\n \"Missing cashout URI in the profile\": [\"\"],\n \"Sending the confirmation message failed, retry later or contact the administrator.\":\n [\"\"],\n \"Convertion rate\": [\"\"],\n Fee: [\"\"],\n \"To account\": [\"\"],\n \"No cashout account\": [\"\"],\n \"Before doing a cashout you need to complete your profile\": [\"\"],\n \"Amount to send\": [\"Betrag\"],\n \"Amount to receive\": [\"\"],\n \"Total cost\": [\"\"],\n \"Balance left\": [\"\"],\n \"Before fee\": [\"\"],\n \"Total cashout transfer\": [\"\"],\n \"No cashout channel available\": [\"\"],\n \"Before doing a cashout the server need to provide an second channel to confirm the operation\":\n [\"\"],\n \"Second factor authentication\": [\"\"],\n Email: [\"\"],\n \"add a email in your profile to enable this option\": [\"\"],\n SMS: [\"\"],\n \"add a phone number in your profile to enable this option\": [\"\"],\n Details: [\"\"],\n Delete: [\"\"],\n Credentials: [\"\"],\n Cashouts: [\"\"],\n \"it doesnt have the pattern of an IBAN number\": [\"\"],\n \"it doesnt have the pattern of an email\": [\"\"],\n \"should start with +\": [\"\"],\n \"phone number can't have other than numbers\": [\"\"],\n \"account identification in the bank\": [\"\"],\n \"name of the person owner the account\": [\"\"],\n \"Internal IBAN\": [\"\"],\n \"if empty a random account number will be assigned\": [\"\"],\n \"account identification for bank transfer\": [\"\"],\n Phone: [\"\"],\n \"Cashout IBAN\": [\"\"],\n \"account number where the money is going to be sent when doing cashouts\":\n [\"\"],\n \"Max debt\": [\"\"],\n \"how much is user able to transfer after zero balance\": [\"\"],\n \"Is this a Taler Exchange?\": [\"\"],\n \"This server doesn't support second factor authentication.\": [\"\"],\n \"Enable second factor authentication\": [\"\"],\n \"Using email\": [\"\"],\n \"Using SMS\": [\"\"],\n \"Is this account public?\": [\"\"],\n \"public accounts have their balance publicly accesible\": [\"\"],\n \"Account updated\": [\"\"],\n \"The rights to change the account are not sufficient\": [\"\"],\n \"The username was not found\": [\"\"],\n \"You can't change the legal name, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the debt limit, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the cashout address, please contact the your account administrator.\":\n [\"\"],\n \"You can't change the contact data, please contact the your account administrator.\":\n [\"\"],\n 'Account \"%1$s\"': [\"\"],\n \"Change details\": [\"\"],\n Update: [\"\"],\n \"password doesn't match\": [\"\"],\n \"Password changed\": [\"\"],\n \"Not authorized to change the password, maybe the session is invalid.\": [\n \"\",\n ],\n \"You need to provide the old password. If you don't have it contact your account administrator.\":\n [\"\"],\n \"Your current password doesn't match, can't change to a new password.\": [\n \"\",\n ],\n \"Update password\": [\"\"],\n \"New password\": [\"\"],\n \"Type it again\": [\"\"],\n \"repeat the same password\": [\"\"],\n \"Current password\": [\"\"],\n \"your current password, for security\": [\"\"],\n Change: [\"\"],\n \"Can't delete the account\": [\"\"],\n \"The account can't be delete while still holding some balance. First make sure that the owner make a complete cashout.\":\n [\"\"],\n \"Account removed\": [\"\"],\n \"No enough permission to delete the account.\": [\"\"],\n \"The username was not found.\": [\"\"],\n \"Can't delete a reserved username.\": [\"\"],\n \"Can't delete an account with balance different than zero.\": [\"\"],\n \"name doesn't match\": [\"\"],\n \"You are going to remove the account\": [\"\"],\n \"This step can't be undone.\": [\"\"],\n 'Deleting account \"%1$s\"': [\"\"],\n Verification: [\"\"],\n \"enter the account name that is going to be deleted\": [\"\"],\n 'Account created with password \"%1$s\". The user must change the password on the next login.':\n [\"\"],\n \"Server replied that phone or email is invalid\": [\"\"],\n \"The rights to perform the operation are not sufficient\": [\"\"],\n \"Account username is already taken\": [\"\"],\n \"Account id is already taken\": [\"\"],\n \"Bank ran out of bonus credit.\": [\"\"],\n \"Account username can't be used because is reserved\": [\"\"],\n \"Can't create accounts\": [\"\"],\n \"Only system admin can create accounts.\": [\"\"],\n \"New business account\": [\"\"],\n Create: [\"\"],\n \"Cashout not supported.\": [\"\"],\n \"Account not found.\": [\"\"],\n \"Latest cashouts\": [\"\"],\n Created: [\"\"],\n Confirmed: [\"Best\u00E4tigen\"],\n \"Total debit\": [\"\"],\n \"Total credit\": [\"\"],\n Status: [\"\"],\n never: [\"\"],\n \"Cashout for account %1$s\": [\"\"],\n \"This cashout not found. Maybe already aborted.\": [\"\"],\n \"Cashout not found. It may be also mean that it was already aborted.\": [\n \"\",\n ],\n \"Cashout was already confimed.\": [\"\"],\n \"Cashout operation is not supported.\": [\"\"],\n \"The cashout operation is already aborted.\": [\"\"],\n \"Missing destination account.\": [\"\"],\n \"Too many failed attempts.\": [\"\"],\n \"The code for this cashout is invalid.\": [\"\"],\n \"Cashout detail\": [\"\"],\n Debited: [\"\"],\n Credited: [\"\"],\n \"Enter the confirmation code\": [\"\"],\n Abort: [\"\"],\n Confirm: [\"Best\u00E4tigen\"],\n \"Unauthorized to make the operation, maybe the session has expired or the password changed.\":\n [\"\"],\n \"The operation was rejected due to insufficient funds.\": [\"\"],\n \"Do not show this again\": [\"\"],\n Close: [\"\"],\n \"On this device\": [\"\"],\n 'If you are using a web browser on desktop you should access your wallet with the GNU Taler WebExtension now or click the link if your WebExtension have the \"Inject Taler support\" option enabled.':\n [\"\"],\n Start: [\"\"],\n \"On a mobile phone\": [\"\"],\n \"Scan the QR code with your mobile device.\": [\"\"],\n \"There is an operation already\": [\"\"],\n \"Complete or cancel the operation in\": [\"Abhebung best\u00E4tigen\"],\n \"Server responded with an invalid withdraw URI\": [\"\"],\n \"Withdraw URI: %1$s\": [\"\"],\n \"The operation was rejected due to insufficient funds\": [\"\"],\n \"Prepare your wallet\": [\"\"],\n \"After using your wallet you will need to confirm or cancel the operation on this site.\":\n [\"\"],\n \"You need a GNU Taler Wallet\": [\"\"],\n \"If you don't have one yet you can follow the instruction in\": [\"\"],\n \"Send money\": [\"\"],\n \"to a %1$s wallet\": [\"\"],\n \"Withdraw digital money into your mobile wallet or browser extension\": [\n \"\",\n ],\n \"operation ready\": [\"\"],\n \"to another bank account\": [\"\"],\n \"Make a wire transfer to an account with known bank account number.\": [\n \"\",\n ],\n \"Transfer details\": [\"\"],\n \"This is a demo bank\": [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work. In addition to using your own bank account, you can also see the transaction history of some %1$s.\":\n [\"\"],\n \"This part of the demo shows how a bank that supports Taler directly would work.\":\n [\"\"],\n \"Pending account delete operation\": [\"\"],\n \"Pending account update operation\": [\"\"],\n \"Pending password update operation\": [\"\"],\n \"Pending transaction operation\": [\"\"],\n \"Pending withdrawal operation\": [\"\"],\n \"Pending cashout operation\": [\"\"],\n \"You can complete or cancel the operation in\": [\"\"],\n \"Download bank stats\": [\"\"],\n \"Include hour metric\": [\"\"],\n \"Include day metric\": [\"\"],\n \"Include month metric\": [\"\"],\n \"Include year metric\": [\"\"],\n \"Include table header\": [\"\"],\n \"Add previous metric for compare\": [\"\"],\n \"Fail on first error\": [\"\"],\n Download: [\"\"],\n \"downloading... %1$s\": [\"\"],\n \"Download completed\": [\"\"],\n \"click here to save the file in your computer\": [\"\"],\n \"Challenge not found.\": [\"\"],\n \"This user is not authorized to complete this challenge.\": [\"\"],\n \"Too many attemps, try another code.\": [\"\"],\n \"The confirmation code is wrong, try again.\": [\"\"],\n \"The operation expired.\": [\"\"],\n \"The operation failed.\": [\"\"],\n \"The operation needs another confirmation to complete.\": [\"\"],\n \"Account delete\": [\"\"],\n \"Account update\": [\"\"],\n \"Password update\": [\"\"],\n \"Wire transfer\": [\"\"],\n Withdrawal: [\"Abhebung best\u00E4tigen\"],\n \"Confirm the operation\": [\"Abhebung best\u00E4tigen\"],\n \"Send again\": [\"\"],\n \"Send code\": [\"\"],\n \"Operation details\": [\"\"],\n \"Challenge details\": [\"\"],\n \"Sent at\": [\"\"],\n \"To phone\": [\"\"],\n \"To email\": [\"\"],\n \"Welcome to %1$s!\": [\"\"],\n },\n },\n domain: \"messages\",\n plural_forms: \"nplurals=2; plural=n != 1;\",\n lang: \"de\",\n completeness: 4,\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 Codec,\n buildCodecForObject,\n canonicalizeBaseUrl,\n codecForBoolean,\n codecForMap,\n codecForString,\n codecOptional,\n} from \"@gnu-taler/taler-util\";\n\nexport interface UiSettings {\n // Where libeufin backend is localted\n // default: window.origin without \"webui/\"\n backendBaseURL?: string;\n // Shows a button \"create random account\" in the registration form\n // Useful for testing\n // default: false\n allowRandomAccountCreation?: boolean;\n // Create all random accounts with password \"123\"\n // Useful for testing\n // default: false\n simplePasswordForRandomAccounts?: boolean;\n // URL where the user is going to be redirected after\n // clicking in Taler Logo\n // default: home page\n iconLinkURL?: string;\n // Mapping for every link shown in the top navitation bar\n // - key: link label, what the user will read\n // - value: link target, where the user is going to be redirected\n // default: empty list\n topNavSites?: Record<string, string>;\n}\n\n/**\n * Global settings for the bank UI.\n */\nconst defaultSettings: UiSettings = {\n backendBaseURL: buildDefaultBackendBaseURL(),\n iconLinkURL: undefined,\n simplePasswordForRandomAccounts: false,\n allowRandomAccountCreation: false,\n topNavSites: {},\n};\n\nconst codecForUISettings = (): Codec<UiSettings> =>\n buildCodecForObject<UiSettings>()\n .property(\"backendBaseURL\", codecOptional(codecForString()))\n .property(\"allowRandomAccountCreation\", codecOptional(codecForBoolean()))\n .property(\n \"simplePasswordForRandomAccounts\",\n codecOptional(codecForBoolean()),\n )\n .property(\"iconLinkURL\", codecOptional(codecForString()))\n .property(\"topNavSites\", codecOptional(codecForMap(codecForString())))\n .build(\"UiSettings\");\n\nfunction removeUndefineField<T extends object>(obj: T): T {\n const keys = Object.keys(obj) as Array<keyof T>;\n return keys.reduce((prev, cur) => {\n if (typeof prev[cur] === \"undefined\") {\n delete prev[cur];\n }\n return prev;\n }, obj);\n}\n\nexport function fetchSettings(listener: (s: UiSettings) => void): void {\n fetch(\"./settings.json\")\n .then((resp) => resp.json())\n .then((json) => codecForUISettings().decode(json))\n .then((result) =>\n listener({\n ...defaultSettings,\n ...removeUndefineField(result),\n }),\n )\n .catch((e) => {\n console.log(\"failed to fetch settings\", e);\n listener(defaultSettings);\n });\n}\n\nfunction buildDefaultBackendBaseURL(): string | undefined {\n if (typeof window !== \"undefined\") {\n const currentLocation = new URL(\n window.location.pathname,\n window.location.origin,\n ).href;\n /**\n * By default, bank backend serves the html content\n * from the /webui root.\n */\n return canonicalizeBaseUrl(currentLocation.replace(\"/webui\", \"\"));\n }\n throw Error(\"No default URL\");\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022-2024 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy 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 { App } from \"./app.js\";\nimport { h, render } from \"preact\";\nimport \"./scss/main.css\";\n\nconst app = document.getElementById(\"app\");\n\nif (app) {\n render(<App />, app);\n} else {\n console.error(\"HTML element with id 'app' not found.\");\n}\n"],
+ "mappings": "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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,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,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B;EAC9B,GAAG,IAAI,4BAA4B;AACrC;AO3GA,IAAIC,wBAAuB;EACzB,kBAAkB;IAChB,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,UAAU;IACR,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;IACZ,iBAAiB;EACnB;EACA,kBAAkB;IAChB,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,UAAU;IACR,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,OAAO;IACL,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,cAAc;IACZ,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,SAAS;IACP,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,aAAa;IACX,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf,KAAK;MACL,OAAO;IACT;EACF;EACA,QAAQ;IACN,YAAY;MACV,KAAK;MACL,OAAO;IACT;IACA,iBAAiB;MACf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J,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,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,IAA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,EAAEA,SAAQ,UAAU;AAAA,IACzB;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;AC1BA,IAAM,OAAO;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,MAAM;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA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",
+ "names": ["undefined", "v", "n", "i", "x", "add", "a", "b", "r", "base", "l", "j", "y", "d", "c", "l2", "q", "self", "_2", "t", "fn", "p", "e", "isValid", "max", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "self", "table", "a", "r", "lexer", "c", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "this", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "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", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "createContext", "defaultValue", "contextId", "Consumer", "contextValue", "Provider", "subs", "ctx", "_props", "old", "splice", "isValidElement", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "getHookState", "index", "type", "options", "__h", "currentComponent", "currentHook", "hooks", "__H", "__", "length", "push", "__V", "EMPTY", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "currentIndex", "_reducer", "__c", "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", "useImperativeHandle", "ref", "createHandle", "concat", "factory", "useCallback", "useContext", "context", "provider", "sub", "value", "useDebugValue", "formatter", "useErrorBoundary", "cb", "errState", "componentDidCatch", "err", "errorInfo", "undefined", "useId", "root", "__v", "__m", "mask", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "invokeCleanup", "invokeEffect", "e", "__e", "afterNextFrame", "raf", "done", "clearTimeout", "timeout", "HAS_RAF", "cancelAnimationFrame", "setTimeout", "requestAnimationFrame", "hook", "comp", "cleanup", "oldArgs", "newArgs", "some", "arg", "f", "previousComponent", "prevRaf", "oldBeforeDiff", "oldBeforeRender", "oldAfterDiff", "oldCommit", "oldBeforeUnmount", "diffed", "unmount", "__b", "vnode", "commitQueue", "hasErrored", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "is", "x", "y", "PureComponent", "p", "this", "memo", "c", "comparer", "shouldUpdate", "nextProps", "ref", "updateRef", "call", "current", "Memoed", "shouldComponentUpdate", "createElement", "displayName", "name", "prototype", "isReactComponent", "forwardRef", "fn", "Forwarded", "clone", "$$typeof", "REACT_FORWARD_SYMBOL", "render", "__f", "detachedClone", "vnode", "detachedParent", "parentDom", "__c", "forEach", "effect", "__H", "__P", "__k", "map", "child", "removeOriginal", "originalParent", "__v", "__e", "insertBefore", "__d", "Suspense", "__u", "_suspenders", "suspended", "component", "__", "__a", "lazy", "loader", "prom", "error", "Lazy", "then", "exports", "default", "e", "SuspenseList", "_next", "_map", "ContextProvider", "getChildContext", "context", "children", "Portal", "_this", "container", "_container", "componentWillUnmount", "_temp", "nodeType", "parentNode", "childNodes", "appendChild", "push", "before", "removeChild", "splice", "indexOf", "createPortal", "el", "containerInfo", "parent", "callback", "textContent", "preactRender", "hydrate", "preactHydrate", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "createFactory", "type", "bind", "isValidElement", "element", "REACT_ELEMENT_TYPE", "cloneElement", "preactCloneElement", "apply", "arguments", "unmountComponentAtNode", "findDOMNode", "base", "Fragment", "startTransition", "cb", "useDeferredValue", "val", "useTransition", "useLayoutEffect", "useSyncExternalStore", "subscribe", "getSnapshot", "value", "_useState", "useState", "_instance", "_getSnapshot", "forceUpdate", "useEffect", "oldDiffHook", "mapFn", "Children", "oldCatchError", "oldUnmount", "resolve", "CAMEL_PROPS", "IS_DOM", "onChangeInputType", "oldEventHook", "currentComponent", "classNameDescriptor", "oldVNodeHook", "oldBeforeRender", "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", "version", "unstable_batchedUpdates", "flushSync", "StrictMode", "useInsertionEffect", "index", "Component", "isPureReactComponent", "state", "options", "__b", "Symbol", "for", "toChildArray", "count", "length", "only", "normalized", "toArray", "newVNode", "oldVNode", "errorInfo", "unmount", "__R", "__h", "promise", "suspendingVNode", "suspendingComponent", "resolved", "onResolved", "onSuspensionComplete", "suspendedVNode", "setState", "pop", "wasHydrating", "document", "detachedComponent", "__O", "fallback", "list", "node", "delete", "revealOrder", "size", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "reverse", "set", "componentDidUpdate", "componentDidMount", "test", "key", "Object", "defineProperty", "configurable", "v", "writable", "event", "persist", "nativeEvent", "class", "normalizedProps", "nonCustomElement", "toLowerCase", "replace", "multiple", "Array", "isArray", "selected", "defaultValue", "className", "enumerable", "__r", "ReactCurrentDispatcher", "readContext", "__n", "arg", "useId", "useReducer", "useRef", "useImperativeHandle", "useMemo", "useCallback", "useContext", "useDebugValue", "createContext", "createRef", "e", "h", "a", "b", "k", "l", "m", "n", "p", "q", "d", "f", "c", "g", "r", "t", "u", "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", "r", "i", "x", "n", "h", "l", "y", "d", "x", "y", "r", "a", "i", "o", "v", "c", "p", "q", "b", "t", "n", "j", "m", "d", "t2", "t3", "t22", "b2", "b3", "b4", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "s", "r", "x", "i", "j", "k", "r", "p", "q", "t", "s", "m", "n", "i", "t", "h", "p", "q", "i", "n", "b", "h", "fn", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "timer", "CancellationToken", "a", "r", "n", "x", "c", "a2", "x2", "a", "b", "n", "r", "s", "r2", "i", "names", "normal", "small", "fn", "counter", "k", "i", "n", "j", "w", "t", "m", "q", "i", "c", "a", "b", "R", "n", "counter", "e", "base", "res", "v", "URL", "URLSearchParams", "x", "URL", "e", "s", "i", "s2", "LogLevel", "m", "e", "location", "c", "p", "x", "d", "map", "i", "x", "c", "s", "x", "c", "x", "c", "e", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "TalerPreciseTimestamp", "t", "s", "TalerProtocolTimestamp", "t2", "Duration", "d", "s", "i", "d2", "n", "AbsoluteTime", "t2", "t", "at", "x", "c", "DenomKeyType", "t", "DenominationPubKey", "p2", "ExchangeProtocolVersion", "MerchantProtocolVersion", "n", "a", "d", "v", "N", "i", "j", "s", "c", "p", "hash", "d", "logger", "n", "TalerSignaturePurpose", "WalletAccountMergeFlags", "c", "p", "x", "bigint", "Edx25519", "L", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "decode", "encode", "p", "i", "d", "encode", "decode", "p", "x", "c", "p", "s", "URLSearchParams", "v", "k", "logger", "Headers", "r", "m", "v", "k", "e", "e", "r", "s", "error", "x", "c", "s", "p", "r", "TalerUriType", "TalerUriAction", "q", "URLSearchParams", "v", "k", "URL", "TalerCorebankApi", "MonitorTimeframeParam", "TanChannel", "TalerExchangeApi", "AmlState", "TalerMerchantApi", "TokenFamilyKind", "HttpStatusCode", "LibtoolVersion", "compare", "v", "logger", "logger", "d", "s", "ReserveTransactionType", "logger", "logger", "CreditDebitIndicator", "encodings", "a", "b", "c", "d", "i", "logger", "ContractTermsUtil", "i", "x", "h", "k", "e", "hash", "d", "c", "e", "e", "err", "x", "fnutil", "f", "x", "TransactionMajorState", "TransactionMinorState", "TransactionAction", "TransactionType", "WithdrawalType", "DenomLossEventType", "PaymentStatus", "TransactionAmountMode", "BalanceFlag", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "ExchangeUpdateStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "ProviderPaymentType", "TalerBankConversionCacheEviction", "compare", "compare", "TalerCoreBankCacheEviction", "compare", "TalerMerchantInstanceCacheEviction", "TalerMerchantManagementCacheEviction", "ChallengerCacheEviction", "TalerExchangeCacheEviction", "logger", "strings", "s", "i", "c", "i", "x", "n", "c", "s", "NotificationType", "ObservabilityEventType", "e", "logger", "h", "v", "k", "_", "p", "h", "e", "match", "l", "initial", "storage", "storage", "n", "h", "hash", "AbsoluteTime", "useState", "useEffect", "i", "map", "i18n", "error", "error", "d", "logger", "RequestThrottler", "Duration", "DEFAULT_REQUEST_TIMEOUT_MS", "TalerError", "TalerErrorCode", "encodeBody", "getDefaultHeaders", "Headers", "e", "format", "_typeof", "obj", "defaultOptions", "MILLISECONDS_IN_WEEK", "formatDistance", "formatRelative", "ordinalNumber", "valueCallback", "_typeof", "obj", "o", "p", "_setPrototypeOf", "self", "e", "_getPrototypeOf", "i", "Setter", "ValueSetter", "_classCallCheck", "_defineProperties", "i", "_createClass", "Parser", "match", "_typeof", "obj", "_inherits", "_setPrototypeOf", "o", "p", "_createSuper", "_isNativeReflectConstruct", "_getPrototypeOf", "_possibleConstructorReturn", "self", "_assertThisInitialized", "e", "_defineProperty", "EraParser", "parse", "n", "YearParser", "valueCallback", "LocalWeekYearParser", "ISOWeekYearParser", "ExtendedYearParser", "QuarterParser", "StandAloneQuarterParser", "MonthParser", "StandAloneMonthParser", "LocalWeekParser", "ISOWeekParser", "DateParser", "DayOfYearParser", "defaultOptions", "DayParser", "LocalDayParser", "StandAloneLocalDayParser", "ISODayParser", "AMPMParser", "AMPMMidnightParser", "DayPeriodParser", "Hour1to12Parser", "Hour0to23Parser", "Hour0To11Parser", "Hour1To24Parser", "MinuteParser", "SecondParser", "FractionOfSecondParser", "ISOTimezoneWithZParser", "ISOTimezoneParser", "TimestampSecondsParser", "TimestampMillisecondsParser", "parsers", "formatDistanceLocale", "formatDistance", "formatDistance_default", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "formatLong_default", "formatRelativeLocale", "formatRelative", "formatRelative_default", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "localize", "argumentCallback", "localize_default", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "valueCallback", "match_default", "locale", "Context", "createContext", "initial", "useEffect", "h", "useContext", "useState", "i18n", "VERSION", "error", "TalerError", "createContext", "createContext", "createContext", "Context", "createContext", "useContext", "useState", "path", "params", "useEffect", "h", "__export", "p", "h", "e", "Duration", "useState", "useEffect", "error", "i18n", "TalerErrorCode", "assertUnreachable", "s", "supportedLang", "l", "lang", "Fragment", "VERSION", "GIT_HASH", "d", "AbsoluteTime", "TalerError", "createContext", "v", "a", "b", "cache", "isDate", "f", "h", "s", "error", "mutate", "i", "_", "u2", "f2", "q", "p", "fn", "use", "middleware", "i", "cache", "compare", "_", "t", "T", "error", "timer", "x", "SWRConfig", "k", "v", "i18n", "error", "k", "i18n", "code", "codecForChallenge", "k", "v", "p", "i18n", "notify", "amount", "subject", "e", "v", "d", "error", "l", "result", "initial", "Context", "q", "n", "a", "i18n", "USERNAME_REGEX", "p", "i18n", "errors", "USERNAME_REGEX", "name", "username", "password", "e", "p", "i18n", "_", "h", "errors", "USERNAME_REGEX", "e", "useSWR", "token", "error", "p", "wid", "error", "useSWR", "h", "initial", "p", "error", "useSWR", "d", "token", "useComponentState", "x", "toInteger", "requiredArgs", "_typeof", "obj", "toDate", "requiredArgs", "requiredArgs", "toDate", "toInteger", "requiredArgs", "toDate", "toInteger", "_typeof", "obj", "add", "requiredArgs", "toInteger", "toDate", "requiredArgs", "toDate", "toInteger", "defaultOptions", "getDefaultOptions", "requiredArgs", "toDate", "requiredArgs", "requiredArgs", "toDate", "daysInYear", "maxTime", "millisecondsInMinute", "millisecondsInHour", "minTime", "maxTime", "secondsInHour", "secondsInDay", "secondsInHour", "secondsInWeek", "secondsInYear", "daysInYear", "secondsInMonth", "secondsInQuarter", "_typeof", "obj", "requiredArgs", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "millisecondsInHour", "requiredArgs", "millisecondsInMinute", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "toDate", "requiredArgs", "requiredArgs", "toDate", "requiredArgs", "toInteger", "MILLISECONDS_IN_DAY", "requiredArgs", "toDate", "startOfUTCISOWeek", "requiredArgs", "toDate", "getUTCISOWeekYear", "requiredArgs", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "requiredArgs", "getUTCISOWeekYear", "startOfUTCISOWeek", "MILLISECONDS_IN_WEEK", "getUTCISOWeek", "requiredArgs", "toDate", "startOfUTCISOWeek", "startOfUTCISOWeekYear", "startOfUTCWeek", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "toDate", "getUTCWeekYear", "requiredArgs", "toDate", "defaultOptions", "getDefaultOptions", "toInteger", "startOfUTCWeek", "startOfUTCWeekYear", "requiredArgs", "defaultOptions", "getDefaultOptions", "toInteger", "getUTCWeekYear", "startOfUTCWeek", "MILLISECONDS_IN_WEEK", "getUTCWeek", "requiredArgs", "toDate", "startOfUTCWeek", "startOfUTCWeekYear", "y", "M", "d", "a", "h", "H", "m", "s", "S", "formatters", "G", "localize", "y", "Y", "getUTCWeekYear", "R", "getUTCISOWeekYear", "u", "Q", "q", "M", "L", "w", "getUTCWeek", "I", "getUTCISOWeek", "d", "D", "E", "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", "formatDistanceLocale", "formatDistance", "formatDistance_default", "buildFormatLongFn", "format", "dateFormats", "timeFormats", "dateTimeFormats", "formatLong", "buildFormatLongFn", "formatRelativeLocale", "formatRelative", "formatRelative_default", "buildLocalizeFn", "eraValues", "quarterValues", "monthValues", "dayValues", "dayPeriodValues", "formattingDayPeriodValues", "ordinalNumber", "localize", "buildLocalizeFn", "argumentCallback", "localize_default", "buildMatchFn", "findIndex", "findKey", "buildMatchPatternFn", "matchOrdinalNumberPattern", "parseOrdinalNumberPattern", "matchEraPatterns", "parseEraPatterns", "matchQuarterPatterns", "parseQuarterPatterns", "matchMonthPatterns", "parseMonthPatterns", "matchDayPatterns", "parseDayPatterns", "matchDayPeriodPatterns", "parseDayPeriodPatterns", "match", "buildMatchPatternFn", "valueCallback", "buildMatchFn", "match_default", "formatDistance_default", "formatRelative_default", "localize_default", "match_default", "requiredArgs", "defaultOptions", "getDefaultOptions", "locale", "toInteger", "toDate", "defaultOptions", "getDefaultOptions", "locale", "format", "delimiter", "m", "requiredArgs", "toDate", "format", "requiredArgs", "toDate", "add", "requiredArgs", "toInteger", "requiredArgs", "toInteger", "_typeof", "obj", "requiredArgs", "toInteger", "i18n", "p", "d", "i18n", "d", "p", "p", "useComponentState", "useComponentState", "failure", "p", "h", "_", "h", "qrcode", "i18n", "notify", "p", "e", "i18n", "notify", "e", "error", "p", "ReadyView", "h", "viewMapping", "ReadyView", "p", "useComponentState", "k", "i18n", "p", "notify", "errors", "e", "v", "i18n", "error", "h", "p", "error", "i18n", "p", "ReadyView", "viewMapping", "ReadyView", "p", "i18n", "error", "P", "h", "Wait", "p", "d", "i18n", "p", "n", "useSWR", "error", "p", "token", "error", "useSWR", "d", "c", "token", "c", "r", "error", "useSWR", "error", "useSWR", "token", "timeframe", "error", "useSWR", "i18n", "h", "p", "i18n", "i18n", "p", "notify", "errors", "ch", "e", "sub", "h", "i18n", "r", "p", "i18n", "useComponentState", "FailedView", "error", "i18n", "ReadyView", "d", "p", "viewMapping", "FailedView", "ReadyView", "p", "useComponentState", "i18n", "e", "p", "i18n", "p", "notify", "h", "errors", "e", "i18n", "p", "i18n", "p", "errors", "e", "s", "i18n", "p", "notify", "a", "payto", "i18n", "p", "errors", "notify", "e", "i18n", "p", "p", "locale", "i18n", "e", "i18n", "p", "notify", "a", "e", "i18n", "p", "e", "table", "i18n", "p", "notify", "errors", "e", "errors", "p", "useComponentState", "i18n", "notify", "p", "h", "e", "errors", "ShowCashoutDetails", "i18n", "i18n", "location", "notify", "h", "p", "ShowCashoutDetails", "e", "p", "h", "SWRConfig", "map", "e"]
}
diff --git a/challenger/bof b/challenger/bof
index 453c529de..5563c8b71 100644
--- a/challenger/bof
+++ b/challenger/bof
@@ -4,6 +4,8 @@ enter-email-form.en.must
enter-file-access-form.en.must
enter-phone-form.en.must
enter-tan-form.en.must
+index.css
+index.en.must
internal-error.en.must
invalid-pin.en.must
invalid-request.en.must
diff --git a/challenger/main.css b/challenger/main.css
index 3470719d4..76af23a54 100644
--- a/challenger/main.css
+++ b/challenger/main.css
@@ -760,6 +760,9 @@ select {
.inline-block {
display: inline-block;
}
+.inline {
+ display: inline;
+}
.flex {
display: flex;
}
@@ -1185,9 +1188,6 @@ select {
.border-b {
border-bottom-width: 1px;
}
-.border-l-0 {
- border-left-width: 0px;
-}
.border-r-0 {
border-right-width: 0px;
}
@@ -1377,9 +1377,6 @@ select {
padding-top: 1.5rem;
padding-bottom: 1.5rem;
}
-.pb-4 {
- padding-bottom: 1rem;
-}
.pl-1 {
padding-left: 0.25rem;
}
@@ -1401,9 +1398,6 @@ select {
.pr-2 {
padding-right: 0.5rem;
}
-.pr-3 {
- padding-right: 0.75rem;
-}
.pr-4 {
padding-right: 1rem;
}
@@ -1416,9 +1410,6 @@ select {
.pt-3 {
padding-top: 0.75rem;
}
-.pt-4 {
- padding-top: 1rem;
-}
.pt-5 {
padding-top: 1.25rem;
}
@@ -1563,6 +1554,9 @@ select {
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity));
}
+.underline {
+ text-decoration-line: underline;
+}
.opacity-0 {
opacity: 0;
}
@@ -1756,6 +1750,14 @@ select {
--tw-text-opacity: 1;
color: rgb(252 165 165 / var(--tw-text-opacity));
}
+.read-only\:bg-slate-200:-moz-read-only {
+ --tw-bg-opacity: 1;
+ background-color: rgb(226 232 240 / var(--tw-bg-opacity));
+}
+.read-only\:bg-slate-200:read-only {
+ --tw-bg-opacity: 1;
+ background-color: rgb(226 232 240 / var(--tw-bg-opacity));
+}
.focus-within\:z-10:focus-within {
z-index: 10;
}
@@ -1902,6 +1904,9 @@ select {
.focus-visible\:outline-2:focus-visible {
outline-width: 2px;
}
+.focus-visible\:outline-offset-0:focus-visible {
+ outline-offset: 0px;
+}
.focus-visible\:outline-offset-2:focus-visible {
outline-offset: 2px;
}
@@ -1911,6 +1916,14 @@ select {
.disabled\:cursor-not-allowed:disabled {
cursor: not-allowed;
}
+.disabled\:bg-gray-100:disabled {
+ --tw-bg-opacity: 1;
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
+}
+.disabled\:bg-gray-300:disabled {
+ --tw-bg-opacity: 1;
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity));
+}
.disabled\:bg-gray-50:disabled {
--tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity));